zOs/war/rexo130
}¢--- A540769.WK.REXX.O13(@) cre=2013-08-07 mod=2013-08-07-08.17.42 A540769 ----
say '@' symbol('@') @
@ = 'v=@'
say '@' symbol('@') @
say 'abc@efg' symbol('abc@efg') abc@efg
abc@efg = 'v=abc@efg'
say 'abc@efg' symbol('abc@efg') abc@efg
say '@123' symbol('@123') @123
@123 = 'v=@123'
say '@123' symbol('@123') @123
say '@abc@123@' symbol('@abc@123@') @abc@123@
@abc@123@ = 'v=@abc@123@'
say '@abc@123@' symbol('@abc@123@') @abc@123@
say 1@ 1a 'but are no variables |'
if 0 then
1@=1a
drop @ abc@efg @123 @abc@123@
say 'm.@' symbol('m.@') m.@
m.@ = 'v=m.@'
say 'm.@' symbol('m.@') m.@
say 'm.abc@efg' symbol('m.abc@efg') m.abc@efg
m.abc@efg = 'v=m.abc@efg'
say 'm.abc@efg' symbol('m.abc@efg') m.abc@efg
say 'm.@123' symbol('m.@123') m.@123
m.@123 = 'v=m.@123'
say 'm.@123' symbol('m.@123') m.@123
say 'm.@abc.@123@' symbol('m.@abc@123@') m.@abc@123@
m.@abc@123@ = 'v=m.@abc@123@'
say 'm.@abc@123@' symbol('m.@abc@123@') m.@abc@123@
a = vPut()
}¢--- A540769.WK.REXX.O13(@1) cre=2013-08-08 mod=2013-08-08-10.28.14 A540769 ---
say '_' symbol('_') _
_ = 'v=_'
say '_' symbol('_') _
say 'abc_efg' symbol('abc_efg') abc_efg
abc_efg = 'v=abc_efg'
say 'abc_efg' symbol('abc_efg') abc_efg
say '_123' symbol('_123') _123
_123 = 'v=_123'
say '_123' symbol('_123') _123
say '_abc_123_' symbol('_abc_123_') _abc_123_
_abc_123_ = 'v=_abc_123_'
say '_abc_123_' symbol('_abc_123_') _abc_123_
say 1_ 1a 'but are no variables |'
if 0 then
1_=1a
drop _ abc_efg _123 _abc_123_
say 'm._' symbol('m._') m._
m._ = 'v=m._'
say 'm._' symbol('m._') m._
say 'm.abc_efg' symbol('m.abc_efg') m.abc_efg
m.abc_efg = 'v=m.abc_efg'
say 'm.abc_efg' symbol('m.abc_efg') m.abc_efg
say 'm._123' symbol('m._123') m._123
m._123 = 'v=m._123'
say 'm._123' symbol('m._123') m._123
say 'm._abc._123_' symbol('m._abc_123_') m._abc_123_
m._abc_123_ = 'v=m._abc_123_'
say 'm._abc_123_' symbol('m._abc_123_') m._abc_123_
a = vPut()
}¢--- A540769.WK.REXX.O13(AC) cre=2013-01-24 mod=2013-01-24-13.46.41 A540769 ---
/* rexx --------------------------------------------------------24. 1.13
edit macro fuer bessere Darstellung Analysis
Labels
.a erstes Connect
.s Snapshot
.c Change analysis Report
----------------------------------------------------------------------*/
call errReset 'hi'
if adrEdit('macro (args)', ) <> 0 then
call errHelp 'bitte als EditMacro aufrufen (ohne TSO praefix|)'
if pos('?', args) > 0 then
call help
if adrEdit("find first .connect 1", 4) = 4 then
call err 'kein .connect, ist das wirklich eine CA Analyse?'
call adrEdit "(con) = cursor"
call adrEdit "label" con "= .a 0", 8
call adrEdit "exclude p'=' .zf .a all", 0 4
call adrEdit "xstatus .a = nx", 0 4
if adrEdit("find first '.call snapshot' 1", 4) = 0 then do
call adrEdit "(sna) = cursor"
call adrEdit "label" sna "= .s 0", 8
if adrEdit("find '.FREE FI(RCVRFILE)'", 4) = 0 then do
call adrEdit "(ex) = cursor"
call adrEdit "label" (ex) "= .ex", 8
call adrEdit "exclude p'=' .s .ex all", 0 4
call adrEdit "xstatus .s = nx", 0 4
end
end
if adrEdit("find first 'CHANGE ANALYSIS REPORT'", 4) = 0 then do
call adrEdit "(rep) = cursor"
call adrEdit "label" rep "= .c 0", 8
end
call adrEdit "cursor = .a"
call adrEdit "locate .a"
exit
/* copy adrIsp begin *************************************************/
/**********************************************************************
lmd: catalog read
call sequence: lmdBegin, lmdNext*, lmdEnd
mit lmd service (mit save in file und read,
weil list zu langsam und listcat abstürzt)
1. arg (grp) als group dataset für lmd save
und dd name für file read
***********************************************************************/
lmdBegin: procedure expose m.
parse arg grp, lev
call adrIsp 'lmdinit listid(lmdId) level('lev')'
res = adrIsp('lmdlist listid(&lmdId) option(save) group('grp')', 4)
call adrIsp 'lmdfree listid(&lmdId)'
if res = 0 then do
call trc timing() 'lmdlist save' grp lev
call adrTso 'alloc dd('grp') shr dsn('grp'.datasets)'
end
else do
call trc 'no datasets found' timing() 'lmdlist save' grp lev
call adrTso 'alloc dd('grp') dummy'
end
call readDDBegin grp
return /* end lmdBegin */
lmdNext:
parse arg ggGrp, ggSt, withVolume
if \ readDD(ggGrp, ggSt) then
return 0
if withVolume \== 1 then
do ggIx=1 to value(ggSt'0')
x = value(ggSt || ggIx, word(value(ggSt || ggIx), 1))
end
return 1
endSubroutin lmdNext
lmdEnd: procedure expose m.
parse arg grp
call readDDEnd grp
call adrTso 'free dd('grp')'
return /* end lmdEnd */
lmd: procedure expose m.
parse arg lev, withVol
call lmdBegin gg1, lev
do while lmdNext(gg1, q., withVol)
do x=1 to q.0
call out q.x
end
end
call lmdEnd gg1
return
endProcedure lmd
/**********************************************************************
member list of a pds:
call sequence x=lmmBegin(dsn) lmmNext(x) * lmmEnd(x)
***********************************************************************/
lmm: procedure expose m.
parse arg dsn
id = lmmBegin(dsn)
do ix=1 by 1
m = lmmNext(id)
if m = '' then
leave
call out m
end
call lmmEnd id
return
endProcedure lmm
lmmBegin: procedure expose m.
parse arg dsn
mbr = dsnGetMbr(dsn)
pds = dsnSetMbr(dsn, )
call adrIsp "LMINIT DATAID(lmmId) DATASET('"pds"') ENQ(SHRW)"
call adrIsp "LMOPEN DATAID("lmmId") OPTION(INPUT) "
res = lmmId
if mbr <> '' then
res = res 'pattern('mbr')'
return res
endProcedure lmmBegin
lmmEnd: procedure expose m.
parse arg lmmId opt
call adrIsp "LMMLIST DATAID("lmmId") option(free)", 8
call adrIsp "LMCLOSE DATAID("lmmId")"
call adrIsp "LMFREE DATAID("lmmId")"
return
endProcedure lmmEnd
lmmNext: procedure expose m.
parse arg lmmId opt
if adrIsp("LMMLIST DATAID("lmmid")" ,
"OPTION(LIST) MEMBER(Mbr)" opt, 4 8) = 0 then
return strip(mbr)
else
return ''
endProcedure lmmNext
lmmRm: procedure expose m.
parse arg dsn, mbrs
mbrs = dsnGetMbr(dsn) mbrs
pds = dsnSetMbr(dsn, )
call adrIsp "LMINIT DATAID(lmmId) DATASET("pds") ENQ(SHRW)"
call adrIsp "LMOPEN DATAID("lmmId") OPTION(OUTPUT) "
err = ''
do wx=1 to words(mbrs)
m1 = word(mbrs, wx)
rr = adrIsp("lmmDel dataid("lmmId") member("m1")", 0 8 12)
if rc = 0 then
say 'removed' m1 'from' pds
else if rc = 8 then
say 'not found' m1 'in' pds
else do
err = 'error deleting' m1 'in' pds 'rc' rr strip(zerrlm)
say err
leave
end
end
call adrIsp "LMCLOSE DATAID("lmmId")"
call adrIsp "LMFREE DATAID("lmmId")"
if err <> '' then
call err err
return
endProcedure lmmRm
/*--- address ispf with error checking -------------------------------*/
adrIsp:
parse arg ggIspCmd, ggRet
address ispexec ggIspCmd
if rc = 0 then return 0
else if ggRet == '*' then return rc
else if wordPOS(rc, ggRet) > 0 then return rc
else
call err 'adr ispExec rc' rc 'in' ggIspCmd':' strip(zerrlm)
endSubroutine adrIsp
/*--- address editor with error checking -----------------------------*/
adrEdit:
parse arg ggEditCmd, ggRet
address isrEdit ggEditCmd
if rc = 0 then return 0
else if ggRet == '*' then return rc
else if wordPOS(rc, ggRet) > 0 then return rc
else
call err 'adr isrEdit rc' rc 'for' ggEditCmd
endSubroutine adrEdit
/* copy adrIsp end *************************************************/
/* copy err begin *** errorhandling, messages, help ****************/
errIni: procedure expose m.
if m.err.ini == 1 then
return
m.err.ini = 1
m.err.handler = ''
m.err.cleanup = ';'
m.err.opt = ''
return
endProcedure errIni
/* configure err -----------------------------------------------------*/
errReset: procedure expose m.
call errIni
parse arg m.err.opt, m.err.handler
if pos('I', translate(m.err.opt)) > 0 then
if errOS() \== 'LINUX' then
if sysVar('sysISPF') = 'ACTIVE' then
call adrIsp 'control errors return'
return
endSubroutine errReset
/*--- error routine: abend with message ------------------------------*/
err:
parse arg ggTxt, ggOpt
call errIni
drop err handler cleanup opt call return
if ggOpt == '' & m.err.handler \== '' then
interpret m.err.handler
call errSay ggTxt, 'e'
call errCleanup
if ggOpt == '' then
ggOpt = m.err.opt
ggOpt = translate(ggOpt)
if pos('T', ggOpt) > 0 then do
trace ?r
say 'trace ?r in err'
end
if pos('H', ggOpt) > 0 then do
call errSay 'divide by zero to show stackHistory', 'e'
x = 1 / 0
end
call errSay 'exit(12)', 'e'
exit errSetRc(12)
endSubroutine err
/*--- return the Operating System we are running on: TSO or LINUX ---*/
errOS: procedure expose m.
parse source os .
return os
endProcedure errOS
/*--- set rc for ispf: -------------------------------------------------
if a cmd is run by ispStart, its RC is ignored,
but ISPF passes the value of the shared variable zIspfRc
back as return code
----------------------------------------------------------------------*/
errSetRc: procedure expose m.
parse arg zIspfRc
if errOS() \== 'LINUX' then
if sysVar('sysISPF') = 'ACTIVE' then
address ispExec vput 'zIspfRc' shared
return zIspfRc
endProcedure errSetRc
/*--- error routine: user message cleanup exit -----------------------*/
errAddCleanup: procedure expose m.
parse arg code
call errIni
/* concatenate backwards, then it is executed also backwards */
m.err.cleanup = ';'code || m.err.cleanup
return
endProcedure errAddCleanup
errRmCleanup: procedure expose m.
parse arg code
call errIni
cx = pos(';'code';', m.err.cleanup)
if cx > 0 then
m.err.cleanup = left(m.err.cleanup, cx) ,
|| substr(m.err.cleanup, cx + length(code)+2)
return
endProcedure errRmCleanup
errCleanup: procedure expose m.
call errIni
errCleanup = m.err.cleanup
if errCleanup = ';' then
return
m.err.cleanup = ';'
say 'err cleanup begin' errCleanup
interpret errCleanup
say 'err cleanup end' errCleanup
return
endProcedure errCleanup
/*--- say an errorMessage msg with pref and linesplits --------------*/
errSay: procedure expose m.
parse arg msg, pref
return saySt(errMsg(msg, pref))
/*--- prefix an errormessage with pref,
split it into lines at \n to stem m.err -------------------*/
errMsg: procedure expose m.
parse arg msg, pref
parse source . . ggS3 . /* current rexx */
if pref == 'e' then
msg = 'fatal error in' ggS3':' msg
else if pref == 'w' then
msg = 'warning in' ggS3':' msg
else if pref \== '' then
msg = pref':' msg
return splitNl(err, msg) /* split lines at \n */
endProcedure errMsg
splitNL: procedure expose m.
parse arg st, msg
bx = 1
do lx=1 to 20
ex = pos('\n', msg, bx)
if ex < bx then
leave
m.st.lx = substr(msg, bx, ex-bx)
bx = ex+2
end
m.st.lx = substr(msg, bx)
m.st.0 = lx
return st
endProcedure splitNL
/*--- say (part of) the lines of a stem ----------------------------*/
saySt: procedure expose m.
parse arg st, fx, tx
do lx=word(fx 1, 1) to word(tx m.st.0, 1)
say m.st.lx
end
return st
endProcedure saySt
/*--- out (part of) the lines of a stem ----------------------------*/
outSt: procedure expose m.
parse arg st, fx, tx
do lx=word(fx 1, 1) to word(tx m.st.0, 1)
call out m.st.lx
end
return st
endProcedure outSt
/*--- say a trace message if m.trace is set --------------------------*/
debug: procedure expose m.
parse arg msg
if m.debug == 1 then
say 'debug:' msg
return
endProcedure debug
/*--- output a trace if m.trace is set -------------------------------*/
trc: procedure expose m.
parse arg msg
if m.trace == 1 then
call out 'trc:' msg
return
endProcedure trc
/*--- assert that the passed rexx expression evaluates to true -------*/
assert:
interpret 'assertRes =' arg(1)
if assertRes \==1 then
call err 'assert failed' arg(1) '==>' assertRes':' arg(2)
return
endProcedure assert
/*--- abend with Message after displaying help -----------------------*/
errHelp: procedure expose m.
parse arg msg, op
call errSay msg, 'e'
call help
call err msg, op
endProcedure errHelp
/*--- display the first comment block of the source as help ----------*/
help: procedure expose m.
parse source . . s3 .
say right(' help for rexx' s3, 79, '*')
do ax=1 to arg()
say ' ' arg(ax)
end
do lx=1 by 1
if pos('/*', sourceLine(lx)) > 0 then
leave
else if lx > 10 then do
say 'initial commentblock not found for help'
return
end
end
do lx=lx+1 by 1
li = strip(sourceLine(lx), 't', ' ')
if pos('*/', li) > 0 then
leave
say li
end
say right(' end help for rexx' s3, 79, '*')
return 4
endProcedure help
/* copy err end *****************************************************/
}¢--- A540769.WK.REXX.O13(ADRISP) cre=2009-09-03 mod=2013-05-27-11.06.31 A540769 ---
/* copy adrIsp begin *************************************************/
/**********************************************************************
lmd: catalog read
call sequence: lmdBegin, lmdNext*, lmdEnd
mit lmd service (mit save in file und read,
weil list zu langsam und listcat abstürzt)
1. arg (grp) als group dataset für lmd save
und dd name für file read
***********************************************************************/
lmdBegin: procedure expose m.
parse arg grp, lev
call adrIsp 'lmdinit listid(lmdId) level('lev')'
res = adrIsp('lmdlist listid(&lmdId) option(save) group('grp')', 4)
call adrIsp 'lmdfree listid(&lmdId)'
if res = 0 then do
call trc timing() 'lmdlist save' grp lev
call adrTso 'alloc dd('grp') shr dsn('grp'.datasets)'
end
else do
call trc 'no datasets found' timing() 'lmdlist save' grp lev
call adrTso 'alloc dd('grp') dummy'
end
call tsoOpen grp, 'R'
return /* end lmdBegin */
lmdNext:
parse arg ggGrp, ggSt, withVolume
if \ readDD(ggGrp, ggSt) then
return 0
if withVolume \== 1 then
do ggIx=1 to value(ggSt'0')
x = value(ggSt || ggIx, word(value(ggSt || ggIx), 1))
end
return 1
endSubroutin lmdNext
lmdEnd: procedure expose m.
parse arg grp
call tsoClose grp
call adrTso 'free dd('grp')'
return /* end lmdEnd */
lmd: procedure expose m.
parse arg lev, withVol
call lmdBegin gg1, lev
do while lmdNext(gg1, q., withVol)
do x=1 to q.0
call out q.x
end
end
call lmdEnd gg1
return
endProcedure lmd
/**********************************************************************
member list of a pds:
call sequence x=lmmBegin(dsn) lmmNext(x) * lmmEnd(x)
***********************************************************************/
lmm: procedure expose m.
parse arg dsn
id = lmmBegin(dsn)
do ix=1 by 1
m = lmmNext(id)
if m = '' then
leave
call out m
end
call lmmEnd id
return
endProcedure lmm
lmmBegin: procedure expose m.
parse arg dsn
mbr = dsnGetMbr(dsn)
pds = dsnSetMbr(dsn, )
call adrIsp "LMINIT DATAID(lmmId) DATASET('"pds"') ENQ(SHRW)"
call adrIsp "LMOPEN DATAID("lmmId") OPTION(INPUT) "
res = lmmId
if mbr <> '' then
res = res 'pattern('mbr')'
return res
endProcedure lmmBegin
lmmEnd: procedure expose m.
parse arg lmmId opt
call adrIsp "LMMLIST DATAID("lmmId") option(free)", 8
call adrIsp "LMCLOSE DATAID("lmmId")"
call adrIsp "LMFREE DATAID("lmmId")"
return
endProcedure lmmEnd
lmmNext: procedure expose m.
parse arg lmmId opt
if adrIsp("LMMLIST DATAID("lmmid")" ,
"OPTION(LIST) MEMBER(Mbr)" opt, 4 8) = 0 then
return strip(mbr)
else
return ''
endProcedure lmmNext
lmmRm: procedure expose m.
parse arg dsn, mbrs
mbrs = dsnGetMbr(dsn) mbrs
pds = dsnSetMbr(dsn, )
call adrIsp "LMINIT DATAID(lmmId) DATASET("pds") ENQ(SHRW)"
call adrIsp "LMOPEN DATAID("lmmId") OPTION(OUTPUT) "
err = ''
do wx=1 to words(mbrs)
m1 = word(mbrs, wx)
rr = adrIsp("lmmDel dataid("lmmId") member("m1")", 0 8 12)
if rc = 0 then
say 'removed' m1 'from' pds
else if rc = 8 then
say 'not found' m1 'in' pds
else do
err = 'error deleting' m1 'in' pds 'rc' rr strip(zerrlm)
say err
leave
end
end
call adrIsp "LMCLOSE DATAID("lmmId")"
call adrIsp "LMFREE DATAID("lmmId")"
if err <> '' then
call err err
return
endProcedure lmmRm
/*--- address ispf with error checking -------------------------------*/
adrIsp:
parse arg ggIspCmd, ggRet
address ispexec ggIspCmd
if rc = 0 then return 0
else if ggRet == '*' then return rc
else if wordPOS(rc, ggRet) > 0 then return rc
else
call err 'adr ispExec rc' rc 'in' ggIspCmd':' strip(zerrlm)
endSubroutine adrIsp
/*--- address editor with error checking -----------------------------*/
adrEdit:
parse arg ggEditCmd, ggRet
address isrEdit ggEditCmd
if rc = 0 then return 0
else if ggRet == '*' then return rc
else if wordPOS(rc, ggRet) > 0 then return rc
else
call err 'adr isrEdit rc' rc 'for' ggEditCmd
endSubroutine adrEdit
/* copy adrIsp end *************************************************/
}¢--- A540769.WK.REXX.O13(ADRISPV) cre=2006-05-10 mod=2006-05-10-16.25.04 F540769 ---
/* copy adrIsp begin *************************************************/
/**********************************************************************
lmd: catalog read
call sequence: lmdBegin, lmdNext*, lmdEnd
mit lmd service (mit save in file und read,
weil list zu langsam und listcat abstürzt)
1. arg (grp) als group dataset für lmd save
und dd name für file read
***********************************************************************/
lmdBegin: procedure
parse arg grp, lev
call adrIsp 'lmdinit listid(lmdId) level('lev')'
res = adrIsp('lmdlist listid(&lmdId) option(save) group('grp')', 4)
call adrIsp 'lmdfree listid(&lmdId)'
if res = 0 then do
call trc showTime() 'lmdlist save' grp lev
call adrTso 'alloc dd('grp') shr dsn('grp'.datasets)'
end
else do
call trc 'no datasets found' showTime() 'lmdlist save' grp lev
call adrTso 'alloc dd('grp') dummy'
end
call readDDBegin grp
return /* end lmdBegin */
lmdNext:
parse arg ggGrp, ggSt, withVolume
if ^ readDD(ggGrp, ggSt) then
return 0
if withVolume ^== 1 then
do ggIx=1 to value(ggSt'0')
x = value(ggSt || ggIx, word(value(ggSt || ggIx), 1))
end
return 1
endSubroutin lmdNext
lmdEnd: procedure
parse arg grp
call readDDEnd grp
call adrTso 'free dd('grp')'
return /* end lmdEnd */
/*--- make a readDescriptor for catlogsearch mask --------------------*/
LMDreader: procedure expose m.
parse arg mask
rx = wrNew()
gr = 'LMD'rx
call lmdBegin gr, mask
gr = quote(gr)
call reDefine rx, "res = lmdNext("gr", m.stem.)",
, "call lmdEnd("gr"); call wrFree" rx
return rx
endProcedure LMDreader
/*--- catalogSearch on mask and write it to std out ------------------*/
LMDout: procedure expose m.
parse arg mask
call outReader LMDreader(mask)
return
endProcedure LMDout
/**********************************************************************
member list of a pds:
call sequence x=lmmBegin(dsn) lmmNext(x) * lmmEnd(x)
***********************************************************************/
lmmTest: procedure
parse arg dsn
if dsn = '' then
dsn = 'wk.pli(*)'
say 'lmmTest for dsn' dsn
id = lmmBegin(dsn)
do ix=1 by 1
m = lmmNext(id)
if m = '' then
leave
say ix m
end
call lmmEnd id
say 'lmmTest end' (ix-1) 'members in' dsn
return
endProcedure lmmTest
lmmBegin: procedure
parse arg dsn
mbr = dsnGetMbr(dsn)
pds = dsnSetMbr(dsn, )
call adrIsp "LMINIT DATAID(lmmId) DATASET("pds") ENQ(SHRW)"
call adrIsp "LMOPEN DATAID("lmmId") OPTION(INPUT) "
res = lmmId
if mbr <> '' then
res = res 'pattern('mbr')'
return res
endProcedure lmmBegin
lmmEnd: procedure
parse arg lmmId opt
call adrIsp "LMMLIST DATAID("lmmId") option(free)", 8
call adrIsp "LMCLOSE DATAID("lmmId")"
call adrIsp "LMFREE DATAID("lmmId")"
return
endProcedure lmmEnd
lmmNext: procedure
parse arg lmmId opt
if adrIsp("LMMLIST DATAID("lmmid")" ,
"OPTION(LIST) MEMBER(Mbr)" opt, 4 8) = 0 then
return mbr
else
return ''
endProcedure lmmNext
/*--- define new reader for memberListSearch on dsn
member may be a membermask -------------------------------------*/
LMMreader: procedure expose m.
parse arg dsn
wx = wrNew()
res = quote(lmmBegin(dsn))
call reDefine wx, "m.stem.1 = lmmNext("res");" ,
"res = m.stem.1 ^== '';" ,
"m.stem.0 = res",
, "call lmmEnd("res"); call wrFree" wx
return wx
endProcedure LMMreader
/*--- write member list of dsn to std out ----------------------------*/
LMMout: procedure expose m.
parse arg dsn
call outReader LMMreader(dsn)
return
endProcedure LMMOut
/*--- write to std out all existing datasets and members
of a list. list looks like wk.*(e*) a.b.c
if member = '-' does not list members
if member contains a second word '-' seq DS are not listed
---------------------------------------------------------------------*/
lmx: procedure expose m.
parse arg list
px = piNew(2)
call piBegin px
call piDefine ,, "call lmdOut m.line"
call piBar
qx = m.wr.prc
call piDefine ,, "call lmxPds m.line, m."px".mbrOpt"
call piEnd px, 0
do wx=1 to words(list)
w = dsn2jcl(word(list, wx))
m.px.mbrOpt = dsnGetMbr(w)
pds = dsnSetMbr(w)
if verify(pds, '*%', 'm') < 1 then do
call writeLn qx, pds
end
else do
call writeLn px, pds
call write px
end
end
call wrClose px
call wrFree px, qx
call out
return
endProcedure lmx
lmxPds: procedure expose m.
parse arg pds, mbr noPds .
rc = listdsi("'"pds"' recall")
if rc ^= 0 then do
if rc = 16 & sysReason = 5 then
say "listDsi not catalogued '"pds"'"
else
call err 'listDsi nc' rc 'reason' sysReason SYSMSGLVL2,
"pds '"pds"'"
end
else if left(sysDsOrg, 2) ^== 'PO' then do
if noPds ^== '-' then
call outLn pds
end
else if mbr ^== '-' then do
rx = lmmReader("'"strip(pds)"("mbr")'")
cnt = 0
do while read(rx, 'ADRISP.LMX.'px)
do xx=1 to m.adrIsp.lmx.px.0
m.adrIsp.lmx.px.xx = dsnSetMbr(pds, m.adrIsp.lmx.px.xx)
end
call out 'ADRISP.LMX.'px
cnt = cnt + m.adrIsp.lmx.px.0
end
say cnt 'members in' strip(pds)'('mbr')'
end
return
endProcedure lmxPds
/**********************************************************************
adrSql: execute sql thru the dsnRexx interface
***********************************************************************/
adrSqlRc: /* no procedure, to keep variables sql... */
parse arg ggSqlStmt, ggNo
if ggNo <> '1' then
ggSqlStmt = 'execSql' ggSqlStmt
address dsnRexx ggSqlStmt
if rc = 0 then
return 0 /* say "sql ok:" ggSqlStmt */
else if rc < 0 then
call err "sql rc" rc sqlmsg()
if sqlCode = 0 then
say 'warning' sqlMsg()
return sqlCode
endSubroutine adrSqlRc
adrSql: /* no procedure, to keep variables sql... */
parse arg ggSqlStmt, ggNo
if adrSqlRc(ggSqlStmt, ggNo) = 0 then
return
call err "sql rc" rc sqlmsg()
endSubroutine adrSql
adrSqlConnect: procedure
parse arg sys
if adrTSORc("SUBCOM DSNREXX") <> 0 then do
sRc = RXSUBCOM('ADD','DSNREXX','DSNREXX') /* ADD HOST CMD ENV */
if sRc <> 0 then
call err 'rc' sRc 'from RXSUBCOM(ADD, DSNREXX, DSNREXX)'
end
call adrSql "connect" sys, 1
return
endProcedure adrSqlConnect
adrSqlDisconnect: procedure
call adrSql "disconnect ", 1
return
endProcedure adrSqlDisconnect
sqlMsg: /* no procedure, to keep variables sql... */
ggW = ''
do ggX=0 to 10
if sqlWarn.ggx <> '' then
ggw = ggw ggx'='sqlWarn.ggx
end
return 'sqlCode' sqlCode 'state' sqlState 'warn' ggW ,
'errMc' strip(translate(sqlerrmc, ',', 'FF'x))':' ggSqlStmt
endSubroutine sqlMsg
/**********************************************************************
adrDsn: send a command to db2 with the TSO dsn command
***********************************************************************/
adrDsn: procedure
parse arg sys, cmd, rcOk
call adrTso 'alloc dd(sysprint) new reuse'
push 'END'
push cmd
rr = adrTsoRc('DSN SYSTEM('sys')')
say 'rc' rr 'adrTso DSN SYSTEM('sys') cmd' cmd
if wordPos(rr, rcOk) < 1 then do
say 'error rc' rr 'in adrTso DSN SYSTEM('sys') cmd' cmd
call adrTso 'execio * diskr sysprint (finis stem pr.)'
say 'sysprint' pr.0 'lines'
do x=1 to pr.0
say strip(pr.x, 't')
end
call adrTso 'free dd(sysprint) '
call err 'rc' rr 'in adrTso DSN SYSTEM('sys') cmd' cmd
end
call adrTso 'free dd(sysprint)'
return rr
endProcedure adr Dsn
/**********************************************************************
adr*: address an environment
***********************************************************************/
adrIsp:
parse arg ggIspCmd, ggRet
address ispexec ggIspCmd
if rc = 0 then return 0
else if ggRet == '*' then return rc
else if wordPOS(rc, ggRet) > 0 then return rc
else
call err 'adr ispExec rc' rc 'for' ggIspCmd
endSubroutine adrIsp
adrEdit:
parse arg ggEditCmd, ggRet
address isrEdit ggEditCmd
if rc = 0 then return 0
else if ggRet == '*' then return rc
else if wordPOS(rc, ggRet) > 0 then return rc
else
call err 'adr isrEdit rc' rc 'for' ggEditCmd
endSubroutine adrEdit
/* copy adrIsp end *************************************************/
}¢--- A540769.WK.REXX.O13(ADRSQL) cre=2006-05-10 mod=2006-05-10-16.38.48 F540769 ---
/* copy adrSql begin *************************************************/
/**********************************************************************
adrSql: execute sql thru the dsnRexx interface
***********************************************************************/
adrSql: /* no procedure, to keep variables sql... */
parse arg ggSqlStmt, ggRet, ggNo
if ggNo <> '1' then
ggSqlStmt = 'execSql' ggSqlStmt
address dsnRexx ggSqlStmt
/* say 'sqlCode' sqlCode 'rc' rc 'for' ggSqlStmt ggNo */
if rc = 0 then do
return 0
end
else if rc < 0 then do
if ggRet == '*' then nop
else if wordPos(sqlCode, ggRet) > 0 then nop
else
call err "sql rc" rc sqlmsg(ggSqlStmt) ggNo
end
else if sqlWarn.0 ^== ' ' then do
say 'warning' sqlMsg(ggSqlStmt) ggNo
end
return sqlCode
endSubroutine adrSql
adrSqlConnect: procedure
parse arg ggSys, ggRetCon
if adrTSO("SUBCOM DSNREXX", '*') <> 0 then do
sRc = RXSUBCOM('ADD','DSNREXX','DSNREXX') /* ADD HOST CMD ENV */
if sRc <> 0 then
call err 'rc' sRc 'from RXSUBCOM(ADD, DSNREXX, DSNREXX)'
end
call adrSql "connect" ggSys, ggRetCon ,1
return
endProcedure adrSqlConnect
adrSqlDisconnect: procedure
parse arg ggRet
call adrSql "disconnect ", ggRet, 1
return
endProcedure adrSqlDisconnect
sqlMsg: /* no procedure, to keep variables sql... */
ggW = ''
do ggX=0 to 10
if sqlWarn.ggx <> '' then
ggw = ggw ggx'='sqlWarn.ggx
end
return 'sqlCode' sqlCode 'state' sqlState 'warn' ggW ,
'errMc' strip(translate(sqlerrmc, ',', 'FF'x))':' ggSqlStmt
endSubroutine sqlMsg
/**********************************************************************
adrDsn: send a command to db2 with the TSO dsn command
***********************************************************************/
adrDsn: procedure
parse arg sys, cmd, rcOk
call adrTso 'alloc dd(sysprint) new reuse'
push 'END'
push cmd
rr = adrTso('DSN SYSTEM('sys')', '*')
say 'rc' rr 'adrTso DSN SYSTEM('sys') cmd' cmd
if wordPos(rr, rcOk) < 1 then do
say 'error rc' rr 'in adrTso DSN SYSTEM('sys') cmd' cmd
call adrTso 'execio * diskr sysprint (finis stem pr.)'
say 'sysprint' pr.0 'lines'
do x=1 to pr.0
say strip(pr.x, 't')
end
call adrTso 'free dd(sysprint) '
call err 'rc' rr 'in adrTso DSN SYSTEM('sys') cmd' cmd
end
call adrTso 'free dd(sysprint)'
return rr
endProcedure adr Dsn
/* copy adrSql end *************************************************/
}¢--- A540769.WK.REXX.O13(ADRTSO) cre=2013-08-07 mod=2013-09-27-10.44.33 A540769 ---
/* copy adrTso begin *************************************************/
/*--- send ggTsoCmd to tso, fail if rc <> 0 or not listed in ggRet ---*/
adrTso:
parse arg ggTsoCmd, ggRet
address tso ggTsoCmd
if rc == 0 then return 0
else if ggRet == '*' then return rc
else if wordPos(rc, ggRet) > 0 then return rc
else
call err 'adrTso rc' rc 'for' ggTsoCmd
return /* end adrTso */
/*--- format dsn from tso format to jcl format -----------------------*/
dsn2jcl: procedure expose m.
parse upper arg dsn ., addPrefix
if left(dsn,1) = "'" then
return strip(dsn, 'b', "'")
sp = sysvar('SYSPREF')
if sp == '' then
sp = userid()
cx = pos('~', dsn)
if cx < 1 & addPrefix == 1 then
return sp'.'dsn
do while cx \== 0
le = left(dsn, cx-1)
ri = substr(dsn, cx+1)
if right(le, 1) == '.' | left(ri, 1) == '.' then
dsn = le || sp || ri
else
dsn = le || left('.', le \== '') || sp ,
|| left('.', ri \== '') || ri
cx = pos('~', spec, cx)
end
return dsn
endProcedure dsn2Jcl
/*--- format dsn from jcl format to tso format -----------------------*/
jcl2dsn: procedure expose m.
parse arg dsn .
return "'"dsn"'"
endProcedure jcl2dsn
dsnSetMbr: procedure expose m.
parse arg dsn, mbr
bx = pos('(', dsn)
if bx > 0 then
dsn = strip(left(dsn, bx-1))
if mbr <> '' then
dsn = dsn'('strip(mbr)')'
return dsn
endProcedure dsnSetMbr
dsnGetMbr: procedure expose m.
parse arg dsn
lx = pos('(', dsn)
rx = pos(')', dsn, lx+1)
if lx < 1 then
return ''
else if lx < rx then
return substr(dsn, lx+1, rx-lx-1)
else
return strip(substr(dsn,lx+1))
endProcedure dsnGetMbr
/**********************************************************************
io: read or write a dataset with the following callsequences:
read: tsoOpen...'R', readDD*, tsoClose
write: tsoOpen...'W', writeDD*, tsoClose
readDD returns true if data read, false at eof
do not forget that open is mandatory to write empty file|
***********************************************************************/
/*--- open dd for read (rw='R') or write (rw='W') --------------------*/
tsoOpen: procedure expose m.
parse upper arg dd, rw
return adrTso('execio' 0 'disk'RW tsoDD(dd, 'o') '(open)')
return /* end tsoOpen */
/*--- close dd -----------------------------------------------------*/
tsoClose: procedure expose m.
parse upper arg dd
return adrTso('execio 0 diskW' dd '(finis)')
endProcedure tsoClose
/*--- read from DD ggDD into ggSt, return false at eof ---------------*/
readDD:
parse arg ggDD, ggSt, ggCnt
if ggCnt = '' then
ggCnt = 100
call adrTso 'execio' ggCnt 'diskR' ggDD '(stem' ggSt')', 2
return (value(ggSt'0') > 0)
return /* end readDD */
/*--- write to gg ggDD from stem ggSt, ggCnt records -----------------*/
writeDD:
parse arg ggDD, ggSt, ggCnt
if ggCnt == '' then
ggCnt = value(ggst'0')
call adrTso 'execio' ggCnt 'diskW' ggDD '(stem' ggSt')'
return
endSubroutine writeDD
/*--- readNx: read next line, using buffer ---------------------------*/
/*--- begin: allocate dsnSpec and ini ------------------------ -------*/
readNxBegin: procedure expose m.
parse arg m, m.m.dsn, m.m.dd, m.m.Cnt
if m.m.dd = '' then
m.m.dd = 'DDNX*'
if m.m.cnt = '' then
m.m.cnt = 1000
m.m.cx = m.m.cnt + 999
m.m.buf0x = 0
m.m.0 = 0
parse value dsnAlloc('dd('m.m.dd')' m.m.dsn) with m.m.dd m.m.free
call tsoOpen m.m.dd, 'R'
return m
endProcedure readDDNxBegin
/*--- return the stem of the next line, or '' at end -----------------*/
readNx: procedure expose m.
parse arg m
m.m.cx = m.m.cx + 1
if m.m.cx <= m.m.0 then
return m'.'m.m.cx
m.m.buf0x = m.m.buf0x + m.m.0
if \ readDD(m.m.dd, 'M.'m'.', m.m.cnt)then
return ''
m.m.cx = 1
return m'.1'
endProcedure readDDNx
/*--- return the stem of the curr line, '' at end --------------------*/
readNxCur: procedure expose m.
parse arg m
if m.m.cx <= m.m.0 then
return m'.'m.m.cx
else
return ''
endProcedure readNxCur
/*--- return the position (line number) of reader
plus le characters of the current line (default 50) ------*/
readnxPos: procedure expose m.
parse arg m, le
li = m'.'m.m.cx
li = strip(m.li, 't')
if arg() < 2 then
le = 50
if le < 1 then
li = ''
else if length(li) <= le then
li = ':' li
else
li = ':' left(li, le-3)'...'
return 'line' (m.m.buf0x + m.m.cx)li
endProcedure readnxPos
/*--- close and deallocate ------------------------------------------*/
readNxEnd: procedure expose m.
parse arg m
call tsoClose m.m.dd
call tsoFree m.m.free
return
endProcedure readDDNxEnd
/*--- standardise a dsn spec
word1 dsName or -
word2 dd or -
word3 disp or -
word4 to first : attributes in tso format
after first : attributes for new allocation
----------------------------------------------------------------------*/
dsnSpec: procedure expose m.
parse upper arg spec
rr = '' /* put leading - in separate words */
do sx=1 while words(rr) < 3 & wx \= ''
wx = word(spec, sx)
do while abbrev(wx, '-') & words(rr) < 3
wx = substr(wx, 2)
rr = rr '-'
end
rr = rr wx
end
spec = rr subWord(spec, sx)
na = ''
dd = ''
di = ''
if left(spec, 1) = '&' then /* external spec is handled ok */
spec = strip(substr(spec, 2))
do wx=1 by 1
w = word(spec, wx)
if w = '' | abbrev(w, '.') | abbrev(w, ':') then
leave
else if wordPos(w, 'OLD SHR MOD NEW')>0 | abbrev(w, 'SYSO') then
di = w
else if w = 'CATALOG' then
di = di w
else if abbrev(w, 'DD(') then
dd = substr(w, 4, length(w)-4)
else if abbrev(w, 'DSN(') then
na = strip(substr(w, 5, length(w)-5))
else if na == '' then
na = dsn2jcl(w)
else if pos('(', w) > 0 then
leave
else if dd == '' then
dd = w
else if di == '' then
di = w
else
leave
end
if na == '' then
na = '-'
else if abbrev(na, "'") then
na = substr(na, 2, length(na)-2)
if dd == '' then dd = '-'
if di == '' then di = '-'
re = subword(spec, wx)
if abbrev(re, '.') then
re = substr(re, 2)
return na dd di re
endProcedure dsnSpec
/*--- alloc a dsn with dsnAlloc
if the dsn is inuse wait and retry
until either the allocation is successfull
or the timeout occurs --------------------------------------*/
dsnAllocWait: procedure expose m.
parse upper arg spec, pDi, pDD, timeOut
x = max(1, arg() - 1)
do rt=0
m.adrTsoAl.1 = ''
m.adrTsoAl.2 = ''
m.adrTsoAl.3 = ''
call outtrap m.adrTsoAl.
res = dsnAlloc(spec, pDi, pDD, '*')
call outtrap off
if \ datatype(res, 'n') then
return res
msg = m.adrTsoAl.1'\n'm.adrTsoAl.2'\n'm.adrTsoAl.3
if rt > timeOut & timeOut \== '' then
return err('timeout allocating' spec time() '\n'msg)
if pos('DATA SET IS ALLOCATED TO ANOTHER', msg) < 1 then
return err('allocating' spec'\n'msg)
say time() 'sleep and retry alloc' spec
call sleep 1, 0
end
endProcedure dsnAllocWait
/*--- alloc a dsn or a dd
spec '-'<ddName>
datasetName? disposition? '.'? attributes? (':' newAtts)?
disp default disposition
dd default dd name
retRc erlaubte ReturnCodes (leer = 0)
returns if ok then ddName <rexx for free> otherwise rc -----*/
dsnAlloc: procedure expose m.
parse upper arg spec, pDi, pDD, retRc
parse value dsnSpec(spec) with na dd di rest
if na = '-' then
m.dsnAlloc.dsn = ''
else
m.dsnAlloc.dsn = na
if dd == '-' & pDD \== '' then
dd = pDD
if dd == '-' then
dd = 'DD*'
dd = tsoDD(dd, 'a')
if na == '-' & di == '-' & rest = '' then
return dd
if di = '-' then
if pDi == '' then
di = 'SHR'
else
di = pDi
if pos('(', na) < 1 then
nop
else if di = 'MOD' then
call err 'disp mod for' na
else
di = 'SHR'
if pos('/', na) > 0 then
rx = csmAlloc(na dd di rest, retRc)
else
rx = tsoAlloc(na dd di rest, retRc)
if rx = 0 then
return dd dd
else
return rx
endProcedure dsnAlloc
/*--- find a free dd with prefix dd ----------------------------------*/
tsoDD: procedure expose m.
parse arg dd, f
if symbol('m.tso.ddAlloc') \== 'VAR' then do
call errIni
m.tso.ddAlloc = ''
m.tso.ddOpen = ''
end
if m.err.ispf then
address ispExec 'vget wshTsoDD shared'
else
wshTsoDD = m.tso.ddAlloc
if f == '-' then do
ax = wordPos(dd, m.tso.ddAlloc)
if ax > 0 then
m.tso.ddAlloc = delWord(m.tso.ddAlloc, ax, 1)
ox = wordPos(dd, m.tso.ddOpen)
if ox > 0 then
m.tso.ddOpen = delWord(m.tso.ddOpen , ox, 1)
if ax < 1 & ox < 1 then
call err 'tsoDD dd' dd 'not used' m.tso.ddAlloc m.tso.ddOpen
sx = wordPos(dd, wshTsoDD)
if sx > 0 then
wshTsoDD = delWord(wshTsoDD , sx, 1)
end
else if f == 'o' then do
if wordPos(dd, m.tso.ddOpen m.tso.ddAlloc) < 1 then
m.tso.ddOpen = strip(m.tso.ddOpen dd)
end
else if f <> 'a' then do
call err 'tsoDD bad fun' f
end
else do
if right(dd, 1) = '*' then do
dd = left(dd, length(dd)-1) || m.err.screen
cx = lastPos(' 'dd, ' 'm.tso.ddAlloc)
if cx > 0 then do
old = word(substr(m.tso.ddAlloc, cx), 1)
if old = dd then
dd = dd'1'
else if datatype(substr(old, length(dd)+1), 'n') then
dd = dd || (substr(old, length(dd)+1) + 1)
else
call err 'tsoDD old' old 'suffix not numeric dd' dd
end
end
if wordPos(dd, m.tso.ddAlloc) < 1 then
m.tso.ddAlloc = strip(m.tso.ddAlloc dd)
if wordPos(dd, wshTsoDD) < 1 then
wshTsoDD = strip(wshTsoDD dd)
end
if m.err.ispf then
address ispExec 'vPut wshTsoDD shared'
return dd
endProcedure tsoDD
tsoAlloc: procedure expose m.
parse arg na dd disp rest ':' nn, retRc
c = 'alloc dd('dd')' disp
if na \== '-' then
c = c "DSN('"na"')"
else if disp = 'NEW' and nn \== '' then
c = c dsnCreateAtts(,nn)
call outtrap m.adrTsoAl.
alRc = adrTso(c rest, '*')
call outtrap off
if alRc = 0 then
return 0
if nn \= '' & wordPos(disp, 'OLD SHR') > 0 ,
& sysDsn("'"m.dsnAlloc.dsn"'") == 'DATASET NOT FOUND' then do
say 'tsoAlloc creating' c rest ':'nn
call adrTso 'alloc dd('dd') new catalog' dsnCreateAtts(na, nn)
call adrTso 'free dd('dd')'
return tsoAlloc(na dd disp rest, retRc)
end
say 'rc='alRc 'for' c rest
call saySt adrTsoal
if retRc = '*' | wordPos(alRc, retRc) > 0 then
return alRc
call err 'tsoAlloc rc' alRc 'for' c rest
endProcedure tsoAlloc
tsoAtts: procedure expose m.
parse arg dsn
rc = listDsi("'"dsn"' SMSINFO")
if rc = 0 then
mv = ''
else if rc = 4 & sysReason = 19 then do
mv = 'UCOUNT(30)' /* 7.8.13 corrected attribute */
say 'creating' dsn 'with multi volume' mv
end
else if rc ^= 0 then
call err 'listDsi rc' rc 'reason' sysReason,
sysMsgLvl1 sysMsgLvl2
al = 'CAT'
al = ''
if right(sysDsSms, 7) == 'LIBRARY' ,
| abbrev(sysDsSms, 'PDS') then
al = al 'DSNTYPE(LIBRARY)'
if sysUnits = 'TRACK' then
sysUnits = 'TRACKS'
return al "DSORG("sysDSorg") MGMTCLAS("sysMgmtClass")",
"DATACLAS("sysDataClass")" ,
"RECFM("translate('1 2 3', ' 'sysREcFM, ' 123')")",
"LRECL("SYSLRECL")",
"SPACE("sysPrimary"," sysSeconds")" sysUnits mv
/* "blksize("sysBLkSIZE")" removed 3.4.13: let sms do the magic */
endProcedure tsoAtts
tsoFree: procedure expose m.
parse arg ddList, ggRet
do dx=1 to words(ddList)
dd = word(ddList, dx)
call adrTso 'free dd('dd')', ggRet
call tsoDD dd, '-'
end
return
endProcedure tsoFree
tsoFreeAll: procedure expose m.
all = m.tso.ddAlloc m.tso.ddOpen
do ax = 1 to words(all)
call adrTso 'execio 0 diskW' word(all, ax) '(finis)', '*'
end
m.tso.ddOpen = ''
call tsoFree m.tso.ddAlloc, '*'
return
endProcedure tsoFreeAll
dsnCreateAtts: procedure expose m.
parse arg dsn, atts, forCsm
forCsm = forCsm == 1
aU = ' 'translate(atts)
res = ''
if dsn \== '' then
res = "dataset('"dsnSetMbr(dsn)"')"
if abbrev(atts, '~') then
return res tsoAtts(substr(atts, 2))
if abbrev(atts, ':') then do
parse var atts a1 atts
rl = substr(a1, 3)
if abbrev(a1, ':F') then do
if rl = '' then
rl = 80
recfm='f b'
end
else do
if rl = '' then
rl = 32756
recfm = substr(a1, 2, 1) 'b'
end
res = res "recfm("space(recfm, 1-forCsm)") lrecl("rl")"
end
if pos('(', dsn) > 0 & pos(' DSNTYPE(', aU) < 1 ,
& pos(' DSORG(', aU) < 1 then
res = res 'dsntype(library) dsorg(po)'
if pos(' MGMTCLAS(', aU) < 1 then
res = res 'mgmtclas(COM#A091)'
if pos(' SPACE(', aU) < 1 then
res = res 'space(100, 500) cyl' || copies('inder', forCsm)
return res atts
endProcedure dsnCreateAtts
/*--- check if a dataset is archive ------------------------------------
returns 'ok' if dataset on disk
'not' if dataset is not catalogued
'arc' if dataset archived
listDsi errorMsg otherwise ------------------*/
dsnArc: procedure expose m.
parse upper arg dsn
lc = listDsi("'"strip(dsn)"' noRecall")
if lc = 0 then
return 'ok'
else if lc=4 & sysReason = 19 then /* multiple volumes */
return 'ok'
else if lc=16 & sysReason = 5 then
return 'notCat'
else if lc=16 & sysReason = 9 then
return 'arc'
else
return 'listDsi cc='lc', sysReason='sysReason ,
'm2='sysMsgLvl2', m1='sysMsgLvl1
endProcedure dsnArc
/*--- read the dataset specified in ggDsnSpec to stem ggSt -----------*/
readDSN:
parse arg ggDsnSpec, ggSt
ggAlloc = dsnAlloc(ggDsnSpec, 'SHR', 'readDsN')
call adrTso 'execio * diskr' word(ggAlloc, 1) '(stem' ggSt' finis)'
call tsoFree word(ggAlloc, 2)
return
endSubroutine readDsn
/*--- write the dataset specified in ggDsnSpec from stem ggSt
write ggCnt records if not empty otherwise ggst0
if ggSay 1 then say ... records written to ... -------------*/
writeDSN:
parse arg ggDsnSpec, ggSt, ggCnt, ggSay
if ggCnt == '' then
ggCnt = value(ggst'0')
ggAlloc = dsnAlloc(ggDsnSpec, 'OLD', 'readDsN')
call adrTso 'execio' ggCnt 'diskw' word(ggAlloc, 1) ,
'(stem' ggSt 'open finis)'
call tsoFree word(ggAlloc, 2)
if ggSay == 1 | m.debug == 1 then
say ggCnt 'records written to' ggDsnSpec
return
endSubroutine writeDsn
copyDSN: procedure expose m.
parse arg frSpec, toSpec, ggSay
parse value dsnAlloc(frSpec, 'SHR', 'FRDD') with frDD frFr
parse value dsnAlloc(toSpec, 'OLD', 'TODD') with toDD toFr
call tsoOpen frDD, 'R'
call tsoOpen toDD, 'W'
cnt = 0
do while readDD(frDD, r.)
call writeDD toDD, r.
cnt = cnt + r.0
end
call tsoClose frDD
call tsoClose toDD
call tsoFree frFr toFr
if ggSay == 1 | m.debug == 1 then
say cnt 'records copied from' frSpec 'to' to toSpec
return
endSubroutine writeDsn
/* copy adrTso end ****************************************************/
}¢--- A540769.WK.REXX.O13(ADRV1) cre= mod= -------------------------------------
/* copy adr begin ****************************************************/
/**********************************************************************
dsn*: manipulate dataSetNames
dsn2Jcl: convert from tso to JCL format
dsnFromJcl: convert from jcl to TSO format
dsnPosLev: get the index of first char of level
(negativ levels are counted from the right)
dsnGetMbr: get the Member name from a dsn
dsnApp: cleanup and append dsn parts (preserve apos ...)
dsnSetMbr: set a Member name or remove it if mbr = ''
dsnTemp return the name of a temporary dataset
dsnGetLLQ ==> dsnGetLev(..., -1) depreciated
***********************************************************************/
dsn2jcl: procedure
parse arg dsn .
if left(dsn,1) = "'" then
return strip(dsn, 'b', "'")
else if sysvar('SYSPREF') = '' then
return dsn
else
return sysvar('SYSPREF')'.'dsn
endProcedure dsn2Jcl
dsnFromJcl: procedure
parse arg dsn .
return "'"dsn"'"
endProcedure dsnFromJcl
dsnApp: procedure
parse arg parts
dsn = ''
do wx=1 by 1
w = word(parts, wx)
if w = '' then
leave
do while w <> ''
if pos(right(w, 1), "') ") <= 0 then
leave
w = left(w, length(w)-1)
end
dsn = dsn || w
end
if pos('(', dsn) > 0 then
dsn = dsn')'
if left(dsn,1) = "'" then
return "'"strip(dsn, 'b', "'")"'"
else
return dsn
endProcedure dsnApp
dsnSetMbr: procedure
parse arg dsn, mbr
mbr = strip(mbr)
bx = pos('(', dsn)
if mbr = '' then do
if bx < 1 then
return dsn
else if left(dsn, 1) = "'" then
return left(dsn,bx-1)"'"
else
return left(dsn,bx-1)
end
else do
if bx < 1 then
return dsnApp(dsn '('mbr)
else
return dsnApp(left(dsn, bx) mbr)
end
endProcedure dsnSetMbr
dsnGetMbr: procedure
parse arg dsn
lx = pos('(', dsn)
rx = pos(')', dsn, lx+1)
if lx < 1 then
return ''
else if lx < rx then
return substr(dsn, lx+1, rx-lx-1)
else
return strip(substr(dsn,lx+1), 't', "'")
endProcedure dsnGetMbr
dsnPosLev: procedure
parse arg dsn, lx
sx = posLev('.', dsn, lx)
if sx ^= 1 then
return sx
else
return 1 + (left(dsn, 1) == "'")
endProcedure dsnPosLev
dsnGetLev: procedure
parse arg dsn, lx
sx = dsnPosLev(dsn, lx)
if sx < 1 then
return ''
ex = pos('.', dsn, sx)
if ex < 1 then do
ex = pos('(', dsn, sx)
if ex < 1 then
return substr(dsn, sx)
end
return substr(dsn, sx, ex-sx)
endProcedure dsnGetLev
dsnTemp: procedure
parse upper arg suf
l = time(l);
d = 'tempFile.t'left(l,2)substr(l,4,2)substr(l,7,2)'.m'right(l,6)
call trc 'jobName' mvsVar('SYMDEF', 'JOBNAME')
d = 'tmpFile.'mvsVar('SYMDEF', 'JOBNAME')'.'suf
call trc 'tempFile' sub '=>' d
return d
endProcedure dsnTemp
/**********************************************************************
StringHandling
posRep: return the index of rep'th occurrence of needle
negativ rep are counted from the right
***********************************************************************/
quote: procedure
parse arg txt, qu
if qu = '' then
qu = "'"
res = qu
ix = 1
do forever
qx = pos(qu, txt, ix)
if qx = 0 then
return res || substr(txt, ix) || qu
res = res || substr(txt, ix, qx-ix) || qu || qu
ix = qx + length(qu)
end
endProcedure quote
posRep: procedure
parse arg needle, hayStack, rep, start
if rep > 0 then do
if start = '' then
start = 1
do cc = 1 to rep
sx = pos(needle, hayStack, start)
if sx < 1 then
return 0
start = sx + length(needle)
end
return sx
end
else if rep < 0 then do
if start = '' then
start = length(hayStack)
do cc = 1 to -rep
sx = lastPos(needle, hayStack, start)
if sx < 1 then
return 0
start = sx - length(needle)
end
return sx
end
else
return 0
endProcedure posRep
posLev: procedure
parse arg needle, hayStack, rep, start
if rep > 1 then do
sx = posRep(needle, hayStack, rep-1, start)
if sx < 1 then
return 0
return 1+sx
end
else if rep < -1 then do
sx = posRep(needle, hayStack, rep+1, start)
if sx < 1 then
return 0
return 1+lastPos(needle, hayStack, sx-1)
end
else if rep ^= -1 then
return rep /* for 0 and 1 */
else if start == '' then /* pos fails with empty start| */
return 1 + lastPos(needle, hayStack)
else
return 1 + lastPos(needle, hayStack, start)
endProcedure posLev
posCount: procedure
parse arg needle, hayStack, start, fin
if start = '' then
start = 1
if fin = '' then
fin = length(hayStack) + 1 - length(needle)
cnt = 0
do forever
start = pos(needle, haystack, start)
if start < 1 | start > fin then
return cnt
cnt = cnt + 1
start = start + length(needle)
end
endProcedure posCount
/**********************************************************************
lmd: catalog read
call sequence: lmdBegin, lmdNext*, lmdEnd
mit lmd service (mit save in file und read,
weil list zu langsam und listcat abstürzt)
1. arg (grp) als group dataset für lmd save
und dd name für file read
***********************************************************************/
lmdBegin: procedure
parse arg grp, lev
call adrIsp 'lmdinit listid(lmdId) level('lev')'
res = adrIspRC('lmdlist listid(&lmdId) option(save) group('grp')')
call adrIsp 'lmdfree listid(&lmdId)'
if res = 0 then do
call trc showTime() 'lmdlist save' grp lev
call adrTso 'alloc dd('grp') shr dsn('grp'.datasets)'
end
else if res = 4 then do
call trc 'no datasets found' showTime() 'lmdlist save' grp lev
call adrTso 'alloc dd('grp') dummy'
end
else
call err 'rc' res 'in lmdlist save' grp lev
call readDDBegin grp
return /* end lmdBegin */
lmdNext:
parse arg ggGrp, ggSt
return readDD(ggGrp, ggSt)
lmdEnd: procedure
parse arg grp
call readDDEnd grp
call adrTso 'free dd('grp')'
return /* end lmdEnd */
/**********************************************************************
member list of a pds:
call sequence x=lmmBegin(dsn) lmmNext(x) * lmmEnd(x)
***********************************************************************/
lmmTest: procedure
parse arg dsn
if dsn = '' then
dsn = 'wk.pli(*)'
say 'lmmTest for dsn' dsn
id = lmmBegin(dsn)
do ix=1 by 1
m = lmmNext(id)
if m = '' then
leave
say ix m
end
call lmmEnd id
say 'lmmTest end' (ix-1) 'members in' dsn
return
endProcedure lmmTest
lmmBegin: procedure
parse arg dsn
mbr = dsnGetMbr(dsn)
pds = dsnSetMbr(dsn, )
call adrIsp "LMINIT DATAID(lmmId) DATASET("pds") ENQ(SHRW)"
call adrIsp "LMOPEN DATAID("lmmId") OPTION(INPUT) "
res = lmmId
if mbr <> '' then
res = res 'pattern('mbr')'
say 'lmmBegin returning' res
return res
endProcedure lmmBegin
lmmEnd: procedure
parse arg lmmId opt
if adrIspRc("LMMLIST DATAID("lmmId") option(free)") <> 0 then
if rc <> 8 then
call err "lmmEnd" id lmmId "rc" rc "for lmmList free"
call adrIsp "LMCLOSE DATAID("lmmId")"
call adrIsp "LMFREE DATAID("lmmId")"
return
endProcedure lmmEnd
lmmNext: procedure
parse arg lmmId opt
gmRc = adrIspRc("LMMLIST DATAID("lmmid")" ,
"OPTION(LIST) MEMBER(Mbr)" opt)
if gmRc = 0 then
return mbr
else if gmRc = 8 | gmRC = 4 then
return ''
else
call err 'lmmList rc' gmRc
endProcedure lmmNext
/**********************************************************************
read: read a file
valid call sequences:
readDsn read a whole dsn
readDDBegin, readDD*, readDDEnd read dd in chunks
writeBegin, writeDD*, writeEnd write dsn in chunks
readDD liest 100 records in übergebenen stem,
returns false at eof
***********************************************************************/
readTest: procedure
parse arg dsn
say showTime() 'readTest' dsn
call readBegin 'ddEins', dsn
z = 0
do while readDD('ddEins', st.)
do y=1 to st.0
z=z+1
say z strip(st.y, 't')
end
end
call readEnd 'ddEins'
say showTime() 'readTest' z 'records in' dsn
return /* readTest */
readDDBegin: procedure
return /* end readDDBegin */
readDD:
parse arg ggDD, ggSt, ggCnt
if ggCnt = '' then
ggCnt = 100
if adrTsoRc('execio' ggCnt 'diskr' ggDD '(stem' ggSt')') = 0 then
return (value(ggSt'0') > 0)
else if rc = 2 then
return (value(ggSt'0') > 0)
else
call err 'execio' ggCnt 'diskr' ggDD 'rc' rc
return /* end readDD */
readDDEnd: procedure
parse arg dd
call adrTso 'execio 0 diskr' dd '(finis)'
return /* end readDDEnd */
writeDDBegin: procedure
parse arg ggDD
call adrTso 'execio' 0 'diskw' ggDD '(open)'
return /* end writeDDBegin */
writeDD:
parse arg ggDD, ggSt, ggCnt
if ggCnt == '' then
ggCnt = value(ggst'0')
call adrTso 'execio' ggCnt 'diskw' ggDD '(stem' ggSt')'
return
endSubroutine writeDD
writeDDEnd: procedure
parse arg dd
call adrTso 'execio 0 diskw' dd '(finis)'
return /* end writeDDEnd */
writeDsn:
parse arg ggDsn, ggSt
call adrTso 'alloc dd(ggWrite) dsn('ggDsn')'
call writeDDBegin 'ggWrite'
call writeDD 'ggWrite', ggSt
call writeDDEnd 'ggWrite'
call adrTso 'free dd(ggWrite)'
return
endProcedure writeDsn
/**********************************************************************
writeApp: append lines to a file
ggDsn: dsn to append lines
ggStem stem containing line (with dot|)
ggNr number of lines, if empty <stem>.0
***********************************************************************/
writeApp:
parse arg ggDsn, ggStem, ggNr
if ggNr = '' then
ggNr = value(ggStem'0')
if pos('(', ggDsn) < 1 then do /* sequential ds, use disp=mod */
call adrTso 'alloc mod reuse dd(ddApp) dsn('ggDsn')'
end
else do /* pds: read and rewrite */
call adrTso 'alloc shr reuse dd(ddApp) dsn('ggDsn')'
if sysdsn(ggDsn) = 'OK' then do
call adrTso 'execio * diskr ddApp (stem ggL. finis)'
call adrTso 'execio' ggL.0 'diskw ddApp (stem ggL.)'
end
end
call adrTso 'execio' ggNr 'diskw ddApp (stem' ggStem 'finis)'
call adrTso 'free dd(ddApp)'
return
endProcedure writeApp
log: procedure
parse arg logLine
l.1 = date('s') time() logLine
call writeApp 'wk.out(ll)', l., 1
return
endProcedure log
/**********************************************************************
adrSql: execute sql thru the dsnRexx interface
***********************************************************************/
adrSqlRc: /* no procedure, to keep variables sql... */
parse arg ggSqlStmt, ggNo
if ggNo <> '1' then
ggSqlStmt = 'execSql' ggSqlStmt
address dsnRexx ggSqlStmt
if rc = 0 then
return 0 /* say "sql ok:" ggSqlStmt */
else if rc < 0 then
call err "sql rc" rc sqlmsg()
if sqlCode = 0 then
say 'warning' sqlMsg()
return sqlCode
endSubroutine adrSqlRc
adrSql: /* no procedure, to keep variables sql... */
parse arg ggSqlStmt, ggNo
if adrSqlRc(ggSqlStmt, ggNo) = 0 then
return
call err "sql rc" rc sqlmsg()
endSubroutine adrSql
adrSqlConnect: procedure
parse arg sys
if adrTSORc("SUBCOM DSNREXX") <> 0 then do
sRc = RXSUBCOM('ADD','DSNREXX','DSNREXX') /* ADD HOST CMD ENV */
if sRc <> 0 then
call err 'rc' sRc 'from RXSUBCOM(ADD, DSNREXX, DSNREXX)'
end
call adrSql "connect" sys, 1
return
endProcedure adrSqlConnect
adrSqlDisconnect: procedure
call adrSql "disconnect ", 1
return
endProcedure adrSqlDisconnect
sqlMsg: /* no procedure, to keep variables sql... */
ggW = ''
do ggX=0 to 10
if sqlWarn.ggx <> '' then
ggw = ggw ggx'='sqlWarn.ggx
end
return 'sqlCode' sqlCode 'state' sqlState 'warn' ggW ,
'errMc' strip(translate(sqlerrmc, ',', 'FF'x))':' ggSqlStmt
endSubroutine sqlMsg
/**********************************************************************
adrDsn: send a command to db2 with the TSO dsn command
***********************************************************************/
adrDsn: procedure
parse arg sys, cmd, rcOk
call adrTso 'alloc dd(sysprint) new reuse'
push 'END'
push cmd
rr = adrTsoRc('DSN SYSTEM('sys')')
say 'rc' rr 'adrTso DSN SYSTEM('sys') cmd' cmd
if wordPos(rr, rcOk) < 1 then do
say 'error rc' rr 'in adrTso DSN SYSTEM('sys') cmd' cmd
call adrTso 'execio * diskr sysprint (finis stem pr.)'
say 'sysprint' pr.0 'lines'
do x=1 to pr.0
say strip(pr.x, 't')
end
call adrTso 'free dd(sysprint) '
call err 'rc' rr 'in adrTso DSN SYSTEM('sys') cmd' cmd
end
call adrTso 'free dd(sysprint)'
return rr
endProcedure adr Dsn
/**********************************************************************
adr*: address an environment
adrTso: fails if rc <> 0
adrTsoRc: returns rc without failing
***********************************************************************/
adrTsoRc:
parse arg ggTsoCmd
address tso ggTsoCmd
return rc /* end adrTsoRc */
adrTso:
parse arg ggTsoCmd
address tso ggTsoCmd
if rc <> 0 then
call err 'adrTso rc' rc 'for' ggTsoCmd
return /* end adrTso */
adrIspRc:
parse arg ggIspCmd
address ispexec ggIspCmd
return rc /* end adrIspRc */
adrIsp:
parse arg ggIspCmd
address ispexec ggIspCmd
if rc <> 0 then
call err 'adrIsp rc' rc 'for' ggIspCmd
return /* end adrIsp */
adrEdit:
parse arg ggEditCmd, ret
address isrEdit ggEditCmd
if rc <> 0 then
call err 'adr isrEdit rc' rc 'for' ggEditCmd
return /* end adrEdit */
adrEditRc:
parse arg ggEditCmd
address isrEdit ggEditCmd
return rc /* end adrEditRc */
/**********************************************************************
messages, errorhandling help
***********************************************************************/
/* caller should define err as follows ---------------------------------
err:
parse arg ggMsg
call errA ggMsg
exit 12
endSubroutine err
end call should define err ----------------------------------------*/
errA:
parse arg ggTxt
parse source . . ggS3 .
say 'fatal error in' ggS3':' ggTxt
exit setRc(12)
endSubroutine errA
trc: procedure expose m.
parse arg msg
if m.trace == 1 then
say 'trc:' msg
return
endProcedure trc
setRc: procedure
parse arg zIspfRc
/**********************************************************************
if a cmd is run by ispStart, its RC is ignored,
but ISPF passes the value of the shared varible zIspfRc
back as return code
***********************************************************************/
if sysVar('sysISPF') = 'ACTIVE' then do
say 'exitRc setting zIspfRc='zIspfRc
address ispExec vput 'zIspfRc' shared
end
return zIspfRc
endProcedure setRc
errHelp: procedure
parse arg ggMsg
say 'fatal error:' ggMsg
call help
call err ggMsg
endProcedure errHelp
help: procedure
/**********************************************************************
display the first comment block of the source as help text
***********************************************************************/
parse source . . s3 .
say 'help for rexx' s3
do lx=1 by 1
if pos('/*', sourceLine(lx)) > 0 then
leave
else if lx > 10 then do
say 'initial commentblock not found for help'
return
end
end
do lx=lx+1 by 1
li = strip(sourceLine(lx), 't', ' ')
if pos('*/', li) > 0 then
leave
say li
end
return 4
endProcedure help
showtime: procedure
parse arg showmsg
return time() sysvar('syscpu') sysvar('syssrv') showmsg
/* copy adr end ****************************************************/
}¢--- A540769.WK.REXX.O13(ALIB) cre=2009-04-21 mod=2011-09-08-10.38.32 A540769 ---
/* rexx **************************************************************
aLib: activate and deactivate tso and ispf libraries.
synopsis: alib ¢-OPTIONS!... ¢DSN!... ...
Options designating the Libaries to activate/deactivate
opt LLQ def Library
-e EXEC TSO EXEC Library: altlib application(exec)
-r REXX TSO EXEC Library: altlib application(exec)
-f LOAD TSO TSOLIB (warning: must be pushed on tso stack
and will only be processed when rexx finishes)
-p PANELS ISPPLIB: ispf panels
-m MSGS ISPMLIB: ispf messages
-t TABLES ISPTLIB: ispf tables input
-u TABLES ISPTABL: ispf tables update
-s SKELS ISPSLIB: ispf skeletons
-l LOAD ISPLLIB: ispf load
other standalone options:
-a activate (default)
-d deactivate
-? or ? for this help
options taking values:
-q<llqs> LowLevelQualifiers, with <llqs> one of the following
* the default LLQ from above (default)
empty no llq
list a comma separated list of llqs
-c<application> if nonEmpty dsn is interpreted
as a ChangeMan PackageNumber of this application
otherwise as a (tso) datasetName (the default)
***********************************************************************/
defLib = wk
self = defLib'.REXX(ALIB)'
info = ' PPLIBPANELS MMLIBMSGS TTLIBTABLES UTABLTABLES SSLIBSKELS' ,
' LLLIBLOAD ETSOAEXEC RTSOAREXX FTSOLLOAD'
do ix=1 to words(info)
op = left(word(info, ix), 1)
libs.op = ''
end
libs = 'R'
newLibs = ''
fun = 'activate'
llq = '*'
cMan = ''
rexxLib = 'A540769.WK.REXX'
skels = rexxLib'.SKELS'
parse arg mainArgs
call errReset 'hi'
if mainArgs = '' then
call adrEdit 'macro (mainArgs)', '*'
if mainArgs == 'returnRexxlib' then
return rexxLib
else if mainArgs == 'returnRexxlibSkels' then
return rexxLib skels
say self 'start args' mainArgs
mainArgs = translate(mainArgs)
dsnCnt = 0
do wx=1 by 1
w = word(mainArgs, wx)
if w = '' then do
if dsnCnt = 0 then
w = defLib
else
leave
end
if pos('?', w) > 0 then do
return help()
return
end
else if left(w,1) = '-' then do /* options */
if w = '-' then do
fun = 'deactivate'
iterate
end
do cx=2 to length(w) /* each option */
ch = substr(w, cx, 1)
if ch = '?' then
call help
else if ch = 'A' then
fun = 'activate'
else if ch = 'D' then
fun = 'deactivate'
else if ch = 'C' then do
cMan = substr(w, cx+1)
leave
end
else if ch = 'Q' then do
llq = translate(substr(w, cx+1), ' ', ',')
leave
end
else if pos(' ' || ch, info) > 0 then
newLibs = newLibs || ch
else
call errHelp 'bad option' ch 'in' w
end /* do each option character */
end
else do /* operands */
dsnCnt = dsnCnt + 1
if newLibs <> '' then do
libs = newLibs
newLibs = ''
end
if cMan = '' then
pref = dsn2jcl(w, 1)
else
pref = "CMN.DIV.P0."cMan".#"right(w, 6, '0')
do cx = 1 to length(libs) /* each lib */
op = substr(libs, cx, 1)
if llq = '' then
libs.op = libs.op "'"pref"'"
else if llq = '*' then do
ii = word(substr(info, pos(' '||op, info)), 1)
libs.op = libs.op "'"pref'.'substr(ii, 6)"'"
end
else do
do lx=1 to words(llq)
lw = word(llq, lx)
libs.op = libs.op "'"pref '.'lw"'"
end
end
end /* do each lib */
end
end /* do each word */
nok = ''
do ix=1 to words(info)
ii = word(info, ix)
op = left(ii, 1)
if libs.op = '' then
iterate
/* say fun op ii libs.op */
if substr(ii, 2, 4) = 'TSOA' then do
c = 'altlib' fun 'application(exec)'
if fun = 'activate' then
c = c "dataset("libs.op") UNCOND"
call adrTso c
end
else if substr(ii, 2, 4) = 'TSOL' then do
c = 'tsolib' fun
if fun = 'activate' then
c = c "dataset("libs.op") UNCOND"
push c
end
else do
c = 'libdef ISP'substr(ii, 2, 4)
if fun = 'activate' then
c = c "dataset id("strip(libs.op)") UNCOND"
if 0 <> adrIsp(c, '*') then
nok = nok op'='substr(ii, 2, 4)'='rc
end
say /* fun op */ 'rc' rc c
end
if nok <> '' then
say 'alib' fun 'errors for' nok
exit
/* copy adrIsp begin *************************************************/
/**********************************************************************
lmd: catalog read
call sequence: lmdBegin, lmdNext*, lmdEnd
mit lmd service (mit save in file und read,
weil list zu langsam und listcat abstürzt)
1. arg (grp) als group dataset für lmd save
und dd name für file read
***********************************************************************/
lmdBegin: procedure
parse arg grp, lev
call adrIsp 'lmdinit listid(lmdId) level('lev')'
res = adrIsp('lmdlist listid(&lmdId) option(save) group('grp')', 4)
call adrIsp 'lmdfree listid(&lmdId)'
if res = 0 then do
call trc timing() 'lmdlist save' grp lev
call adrTso 'alloc dd('grp') shr dsn('grp'.datasets)'
end
else do
call trc 'no datasets found' timing() 'lmdlist save' grp lev
call adrTso 'alloc dd('grp') dummy'
end
call readDDBegin grp
return /* end lmdBegin */
lmdNext:
parse arg ggGrp, ggSt, withVolume
if ^ readDD(ggGrp, ggSt) then
return 0
if withVolume ^== 1 then
do ggIx=1 to value(ggSt'0')
x = value(ggSt || ggIx, word(value(ggSt || ggIx), 1))
end
return 1
endSubroutin lmdNext
lmdEnd: procedure
parse arg grp
call readDDEnd grp
call adrTso 'free dd('grp')'
return /* end lmdEnd */
lmd: procedure expose m.
parse arg lev, withVol
call lmdBegin gg1, lev
do while lmdNext(gg1, q., withVol)
do x=1 to q.0
call jOut q.x
end
end
call lmdEnd gg1
return
endProcedure lmd
/**********************************************************************
member list of a pds:
call sequence x=lmmBegin(dsn) lmmNext(x) * lmmEnd(x)
***********************************************************************/
lmm: procedure expose m.
parse arg dsn
id = lmmBegin(dsn)
do ix=1 by 1
m = lmmNext(id)
if m = '' then
leave
call jOut m
end
call lmmEnd id
return
endProcedure lmm
lmmBegin: procedure
parse arg dsn
mbr = dsnGetMbr(dsn)
pds = dsnSetMbr(dsn, )
call adrIsp "LMINIT DATAID(lmmId) DATASET('"pds"') ENQ(SHRW)"
call adrIsp "LMOPEN DATAID("lmmId") OPTION(INPUT) "
res = lmmId
if mbr <> '' then
res = res 'pattern('mbr')'
return res
endProcedure lmmBegin
lmmEnd: procedure
parse arg lmmId opt
call adrIsp "LMMLIST DATAID("lmmId") option(free)", 8
call adrIsp "LMCLOSE DATAID("lmmId")"
call adrIsp "LMFREE DATAID("lmmId")"
return
endProcedure lmmEnd
lmmNext: procedure
parse arg lmmId opt
if adrIsp("LMMLIST DATAID("lmmid")" ,
"OPTION(LIST) MEMBER(Mbr)" opt, 4 8) = 0 then
return strip(mbr)
else
return ''
endProcedure lmmNext
lmmRm: procedure
parse arg dsn, mbrs
mbrs = dsnGetMbr(dsn) mbrs
pds = dsnSetMbr(dsn, )
call adrIsp "LMINIT DATAID(lmmId) DATASET("pds") ENQ(SHRW)"
call adrIsp "LMOPEN DATAID("lmmId") OPTION(OUTPUT) "
err = ''
do wx=1 to words(mbrs)
m1 = word(mbrs, wx)
rr = adrIsp("lmmDel dataid("lmmId") member("m1")", 0 8 12)
if rc = 0 then
say 'removed' m1 'from' pds
else if rc = 8 then
say 'not found' m1 'in' pds
else do
err = 'error deleting' m1 'in' pds 'rc' rr strip(zerrlm)
say err
leave
end
end
call adrIsp "LMCLOSE DATAID("lmmId")"
call adrIsp "LMFREE DATAID("lmmId")"
if err <> '' then
call err err
return
endProcedure lmmRm
/*--- address ispf with error checking -------------------------------*/
adrIsp:
parse arg ggIspCmd, ggRet
address ispexec ggIspCmd
if rc = 0 then return 0
else if ggRet == '*' then return rc
else if wordPOS(rc, ggRet) > 0 then return rc
else
call err 'adr ispExec rc' rc 'in' ggIspCmd':' strip(zerrlm)
endSubroutine adrIsp
/*--- address editor with error checking -----------------------------*/
adrEdit:
parse arg ggEditCmd, ggRet
address isrEdit ggEditCmd
if rc = 0 then return 0
else if ggRet == '*' then return rc
else if wordPOS(rc, ggRet) > 0 then return rc
else
call err 'adr isrEdit rc' rc 'for' ggEditCmd
endSubroutine adrEdit
/* copy adrIsp end *************************************************/
/* copy adrTso begin *************************************************/
/*--- send ggTsoCmd to tso, fail if rc <> 0 or not listed in ggRet ---*/
adrTso:
parse arg ggTsoCmd, ggRet
address tso ggTsoCmd
if rc == 0 then return 0
else if ggRet == '*' then return rc
else if wordPos(rc, ggRet) > 0 then return rc
else
call err 'adrTso rc' rc 'for' ggTsoCmd
return /* end adrTso */
/*--- format dsn from tso format to jcl format -----------------------*/
dsn2jcl: procedure
parse arg dsn ., addPrefix
if left(dsn,1) = "'" then
return strip(dsn, 'b', "'")
sp = sysvar('SYSPREF')
if sp == '' then
sp = userid()
cx = pos('~', dsn)
if cx < 1 & addPrefix == 1 then
return sp'.'dsn
do while cx ^== 0
le = left(dsn, cx-1)
ri = substr(dsn, cx+1)
if right(le, 1) == '.' | left(ri, 1) == '.' then
dsn = le || sp || ri
else
dsn = le || left('.', le ^== '') || sp ,
|| left('.', ri ^== '') || ri
cx = pos('~', spec, cx)
end
return dsn
endProcedure dsn2Jcl
/*--- format dsn from jcl format to tso format -----------------------*/
jcl2dsn: procedure
parse arg dsn .
return "'"dsn"'"
endProcedure jcl2dsn
dsnSetMbr: procedure
parse arg dsn, mbr
bx = pos('(', dsn)
if bx > 0 then
dsn = strip(left(dsn, bx-1))
if mbr <> '' then
dsn = dsn'('strip(mbr)')'
return dsn
endProcedure dsnSetMbr
dsnGetMbr: procedure
parse arg dsn
lx = pos('(', dsn)
rx = pos(')', dsn, lx+1)
if lx < 1 then
return ''
else if lx < rx then
return substr(dsn, lx+1, rx-lx-1)
else
return strip(substr(dsn,lx+1))
endProcedure dsnGetMbr
/**********************************************************************
io: read or write a dataset with the following callsequences:
read: readDDBegin, readDD*, readDDEnd
write: writeBegin, writeDD*, writeEnd
readDD returns true if data read, false at eof
***********************************************************************/
/*--- prepare reading from a DD --------------------------------------*/
readDDBegin: procedure
return /* end readDDBegin */
/*--- read from DD ggDD into ggSt, return false at eof ---------------*/
readDD:
parse arg ggDD, ggSt, ggCnt
if ggCnt = '' then
ggCnt = 100
call adrTso 'execio' ggCnt 'diskr' ggDD '(stem' ggSt')', 2
return (value(ggSt'0') > 0)
return /* end readDD */
/*--- finish reading DD ggDD ----------------------------------------*/
readDDEnd: procedure
parse arg ggDD
call adrTso 'execio 0 diskr' ggDD '(finis)'
return /* end readDDEnd */
/*--- prepare writing to DD ggDD -------------------------------------*/
writeDDBegin: procedure
parse arg ggDD
/* ensure file is erased, if no records are written */
call adrTso 'execio' 0 'diskw' ggDD '(open)'
return /* end writeDDBegin */
/*--- write to gg ggDD from stem ggSt, ggCnt records -----------------*/
writeDD:
parse arg ggDD, ggSt, ggCnt
if ggCnt == '' then
ggCnt = value(ggst'0')
call adrTso 'execio' ggCnt 'diskw' ggDD '(stem' ggSt')'
return
endSubroutine writeDD
/*--- end writing to dd ggDD (close) --------------------------------*/
writeDDEnd: procedure
parse arg ggDD
call adrTso 'execio 0 diskw' ggDD '(finis)'
return /* end writeDDEnd */
/*--- alloc a dsn or a dd
spec '-'<ddName>
datasetName? disposition? '.'? attributes? (':' newAtts)?
disp default disposition
dd default dd name
retRc erlaubte ReturnCodes (leer = 0)
returns if ok then ddName <rexx for free> otherwise rc -----*/
dsnAlloc: procedure expose m.
parse upper arg spec, disp, dd, retRc
ds = ''
m.dsnAlloc.dsn = ds
if left(spec, 1) = '-' then
return strip(substr(spec, 2))
if left(spec, 1) = '&' then /* external spec is handled ok */
spec = strip(substr(spec, 2))
do wx=1 by 1
w = word(spec, wx)
if w = '' | abbrev(w, '.') | abbrev(w, ':') then
leave
else if wordPos(w, 'OLD SHR MOD NEW')>0 | abbrev(w, 'SYSO') then
disp = w
else if w = 'CATALOG' then
disp = disp w
else if abbrev(w, 'DD(') then
dd = substr(w, 4, length(w)-4)
else if abbrev(w, 'DSN(') then
ds = strip(substr(w, 5, length(w)-5))
else if ds = '' then
ds = dsn2jcl(w)
else
leave
end
rest = subword(spec, wx)
if abbrev(rest, '.') then
rest = substr(rest, 2)
parse var rest rest ':' nn
if dd <> '' & ds = '' & rest = '' & ^ abbrev(disp, 'SYSO') then
call err "'return" dd"' no longer supported please use ="dd
if dd = '' then do
if symbol('m.adrTso.ddNum') = 'VAR' then
dd = m.adrTso.ddNum + 1
else
dd = 1
m.adrTso.ddNum = dd
dd = 'DD' || dd
end
if disp = '' then
disp = 'SHR'
else if pos('(', ds) < 1 then
nop
else if disp = 'MOD' then
call err 'disp mod for' ds
else
disp = 'SHR'
m.dsnAlloc.dsn = ds
if pos('/', ds) > 0 then
return csmAlloc(dd, disp, ds, rest, nn, retRc)
else
return tsoAlloc(dd, disp, ds, rest, nn, retRc)
endProcedure dsnAlloc
tsoAlloc: procedure expose m.
parse arg dd, disp, dsn, rest, nn, retRc
c = 'alloc dd('dd')' disp
if dsn <> '' then
c = c "DSN('"dsn"')"
if retRc <> '' | nn = '' then do
alRc = adrTso(c rest, retRc)
if alRc <> 0 then
return alRc
return dd 'call adrTso "free dd('dd')";'
end
do retry=0 to 1
alRc = adrTso(c rest, '*')
if alRc = 0 then
return dd 'call adrTso "free dd('dd')";'
if nn = '' | wordPos(disp, 'OLD SHR') < 1 ,
| sysDsn("'"m.dsnAlloc.dsn"'") ^== 'DATASET NOT FOUND' then
leave
say 'tsoAlloc rc' alRc 'for' c rest '...trying to create'
call adrTso 'alloc dd('dd') new catalog' dsnCreateAtts(dsn, nn)
call adrTso 'free dd('dd')'
end
call err 'tsoAlloc rc' alRc 'for' c rest
endProcedure tsoAlloc
dsnCreateAtts: procedure expose m.
parse arg dsn, atts
if abbrev(atts, ':') then do
rl = substr(atts, 3)
if abbrev(atts, ':F') then do
if rl = '' then
rl = 80
atts = 'recfm(f b) lrecl('rl')' ,
'block(' (32760 - 32760 // rl)')'
end
else do
if rl = '' then
rl = 32756
atts = 'recfm('substr(atts, 2, 1) 'b) lrecl('rl')' ,
'block(32760)'
end
end
if pos('(', dsn) > 0 then
atts = atts 'dsntype(library) dsorg(po)' ,
"dsn('"dsnSetMbr(dsn)"')"
else
atts = atts "dsn('"dsn"')"
return atts 'mgmtclas(s005y000) space(10, 1000) cyl'
endProcedure dsnCreateAtts
/*--- read the dataset specified in ggDsnSpec to stem ggSt -----------*/
readDSN:
parse arg ggDsnSpec, ggSt
ggAlloc = dsnAlloc(ggDsnSpec, 'SHR', 'readDsN')
call adrTso 'execio * diskr' word(ggAlloc, 1) '(stem' ggSt' finis)'
interpret subword(ggAlloc, 2)
return
endSubroutine readDsn
/*--- write the dataset specified in ggDsnSpec from stem ggSt
write ggCnt records if not empty otherwise ggst0
if ggSay 1 then say ... records written to ... -------------*/
writeDSN:
parse arg ggDsnSpec, ggSt, ggCnt, ggSay
if ggCnt == '' then
ggCnt = value(ggst'0')
ggAlloc = dsnAlloc(ggDsnSpec, 'OLD', 'readDsN')
call adrTso 'execio' ggCnt 'diskw' word(ggAlloc, 1) ,
'(stem' ggSt 'open finis)'
interpret subword(ggAlloc, 2)
if ggSay == 1 | m.debug == 1 then
say ggCnt 'records written to' ggDsnSpec
return
endSubroutine writeDsn
/* copy adrTso end ****************************************************/
/* copy err begin ******************************************************
messages, errorhandling,help
***********************************************************************/
/* configure err -----------------------------------------------------*/
errReset: procedure expose m.
parse arg oo, ha
if pos('I', translate(oo)) > 0 then
call adrIsp 'control errors return'
m.err.opt = translate(oo, 'h', 'H')
if ha == '' then
drop m.err.handler
else
m.err.handler = ha
return
endSubroutine errReset
/*--- error routine: abend with message ------------------------------*/
err:
parse arg ggTxt, ggOpt
drop err handler opt
if ggOpt == '' & symbol('m.err.handler') == 'VAR' then
interpret m.err.handler
call errSay ggTxt
parse source . . ggS3 . /* current rexx */
if ggOpt == '' | ggOpt == '*' then
ggOpt = translate(value('m.err.opt'), 'ht', 'HT')
if pos('h', ggOpt) > 0 then do
say 'fatal error in' ggS3': divide by zero to show stackHistory'
x = 1 / 0
end
say 'fatal error in' ggS3': exit(12)'
exit errSetRc(12)
endSubroutine err
/*--- assert that the passed rexx expression evaluates to true -------*/
assert:
interpret 'assertRes =' arg(1)
if ^ assertRes then
call err 'assert failed' arg(1)':' arg(2)
return
endProcedure assert
/*--- say an errorMessage msg with pref pref
split message in lines at '/n'
say addition message in stem st ---------------------------*/
errSay: procedure expose m.
parse arg msg, st, pref
parse source . . ggS3 . /* current rexx */
if pref == 'e' | (pref == '' & st == '') then
msg = 'fatal error:' msg
else if pref == 'w' then
msgf = 'warning:' msg
else if pref == 0 then
nop
else if right(pref, 1) ^== ' ' then
msg = pref':' msg
else
msg = pref || msg
sx = 0
bx = -1
do lx=1 until bx >= length(msg)
ex = pos('\n', msg, bx+2)
if ex < 1 then
ex = length(msg)+1
if st == '' then do
say substr(msg, bx+2, ex-bx-2)
end
else do
sx = sx+1
m.st.sx = substr(msg, bx+2, ex-bx-2)
m.st.0 = sx
end
bx = ex
end
return
endProcedure errSay
/*--- abend with Message after displaying help -----------------------*/
errHelp: procedure expose m.
parse arg msg, op
say 'fatal error:' msg
call help
call err msg, op
endProcedure errHelp
/*--- set rc for ispf: -------------------------------------------------
if a cmd is run by ispStart, its RC is ignored,
but ISPF passes the value of the shared varible 3IspfRc
back as return code
----------------------------------------------------------------------*/
errSetRc: procedure
parse arg zIspfRc
if sysVar('sysISPF') = 'ACTIVE' then do
address ispExec vput 'zIspfRc' shared
end
return zIspfRc
endProcedure errSetRc
/*--- output a trace message if m.trace is set -----------------------*/
trc: procedure expose m.
parse arg msg
if m.trace == 1 then
say 'trc:' msg
return
endProcedure trc
/*--- quote string txt using quoteChar qu ("""" ==> ") ---------------*/
quote: procedure
parse arg txt, qu
if qu = '' then
qu = '"'
res = qu
ix = 1
do forever
qx = pos(qu, txt, ix)
if qx = 0 then
return res || substr(txt, ix) || qu
res = res || substr(txt, ix, qx-ix) || qu || qu
ix = qx + length(qu)
end
endProcedure quote
debug: procedure expose m.
parse arg msg
if m.debug == 1 then
say 'debug' msg
return
endProcedure debug
/*--- return current time and cpu usage ------------------------------*/
timing: procedure
return time() time('E') sysvar('syscpu') /* sysvar('syssrv') */
/--- display the first comment block of the source as help -----------*/
help: procedure
parse source . . s3 .
say right(' help for rexx' s3, 79, '*')
do lx=1 by 1
if pos('/*', sourceLine(lx)) > 0 then
leave
else if lx > 10 then do
say 'initial commentblock not found for help'
return
end
end
do lx=lx+1 by 1
li = strip(sourceLine(lx), 't', ' ')
if pos('*/', li) > 0 then
leave
say li
end
say right(' end help for rexx' s3, 79, '*')
return 4
endProcedure help
/* copy err end *****************************************************/
}¢--- A540769.WK.REXX.O13(ALIB222) cre=2013-09-09 mod=2013-09-09-08.19.50 A540769 ---
/* rexx ---------------------------------------------------------------
caDb2: start the ca tools with cs Libraries
options d: debug, say which libraries
w: with test and personal work libs (wk.rexx ...)
t: with test libs (dsn.cadb2.cs.execTst ...)
: with prod libs (dsn.cadb2.cs.exec)
---------------------------------------------------------------------*/
parse arg args
parse source . . self . selfLib .
trace ?r
say self 'in' selfLib
m.pre = 'dsn.db2'
if self = 'ALIB' then do
if args = '-' then
return deactLibs()
else
return actLibs()
end
call actLibs
interpret 'call' self 'args'
res = result
cal deactLibs
return res
actLibs: procedure expose m.
call adrTso "ALTLIB ACTIVATE APPLICATION(EXEC)",
"DATASET('"m.pre".exec') stack"
call adrIsp "libDef ispPLib dataset",
"id('"m.pre".panel') stack"
return
endProcedure actLibs
deactLibs: procedure expose m.
call adrTso "ALTLIB DEACTIVATE APPLICATION(EXEC)"
call adrIsp "libDef ispPLib"
return
endProcedure deactLibs
/* copy adrIsp begin *************************************************/
/**********************************************************************
lmd: catalog read
call sequence: lmdBegin, lmdNext*, lmdEnd
mit lmd service (mit save in file und read,
weil list zu langsam und listcat abstürzt)
1. arg (grp) als group dataset für lmd save
und dd name für file read
***********************************************************************/
lmdBegin: procedure expose m.
parse arg grp, lev
call adrIsp 'lmdinit listid(lmdId) level('lev')'
res = adrIsp('lmdlist listid(&lmdId) option(save) group('grp')', 4)
call adrIsp 'lmdfree listid(&lmdId)'
if res = 0 then do
call trc timing() 'lmdlist save' grp lev
call adrTso 'alloc dd('grp') shr dsn('grp'.datasets)'
end
else do
call trc 'no datasets found' timing() 'lmdlist save' grp lev
call adrTso 'alloc dd('grp') dummy'
end
call tsoOpen grp, 'R'
return /* end lmdBegin */
lmdNext:
parse arg ggGrp, ggSt, withVolume
if \ readDD(ggGrp, ggSt) then
return 0
if withVolume \== 1 then
do ggIx=1 to value(ggSt'0')
x = value(ggSt || ggIx, word(value(ggSt || ggIx), 1))
end
return 1
endSubroutin lmdNext
lmdEnd: procedure expose m.
parse arg grp
call tsoClose grp
call adrTso 'free dd('grp')'
return /* end lmdEnd */
lmd: procedure expose m.
parse arg lev, withVol
call lmdBegin gg1, lev
do while lmdNext(gg1, q., withVol)
do x=1 to q.0
call out q.x
end
end
call lmdEnd gg1
return
endProcedure lmd
/**********************************************************************
member list of a pds:
call sequence x=lmmBegin(dsn) lmmNext(x) * lmmEnd(x)
***********************************************************************/
lmm: procedure expose m.
parse arg dsn
id = lmmBegin(dsn)
do ix=1 by 1
m = lmmNext(id)
if m = '' then
leave
call out m
end
call lmmEnd id
return
endProcedure lmm
lmmBegin: procedure expose m.
parse arg dsn
mbr = dsnGetMbr(dsn)
pds = dsnSetMbr(dsn, )
call adrIsp "LMINIT DATAID(lmmId) DATASET('"pds"') ENQ(SHRW)"
call adrIsp "LMOPEN DATAID("lmmId") OPTION(INPUT) "
res = lmmId
if mbr <> '' then
res = res 'pattern('mbr')'
return res
endProcedure lmmBegin
lmmEnd: procedure expose m.
parse arg lmmId opt
call adrIsp "LMMLIST DATAID("lmmId") option(free)", 8
call adrIsp "LMCLOSE DATAID("lmmId")"
call adrIsp "LMFREE DATAID("lmmId")"
return
endProcedure lmmEnd
lmmNext: procedure expose m.
parse arg lmmId opt
if adrIsp("LMMLIST DATAID("lmmid")" ,
"OPTION(LIST) MEMBER(Mbr)" opt, 4 8) = 0 then
return strip(mbr)
else
return ''
endProcedure lmmNext
lmmRm: procedure expose m.
parse arg dsn, mbrs
mbrs = dsnGetMbr(dsn) mbrs
pds = dsnSetMbr(dsn, )
call adrIsp "LMINIT DATAID(lmmId) DATASET("pds") ENQ(SHRW)"
call adrIsp "LMOPEN DATAID("lmmId") OPTION(OUTPUT) "
err = ''
do wx=1 to words(mbrs)
m1 = word(mbrs, wx)
rr = adrIsp("lmmDel dataid("lmmId") member("m1")", 0 8 12)
if rc = 0 then
say 'removed' m1 'from' pds
else if rc = 8 then
say 'not found' m1 'in' pds
else do
err = 'error deleting' m1 'in' pds 'rc' rr strip(zerrlm)
say err
leave
end
end
call adrIsp "LMCLOSE DATAID("lmmId")"
call adrIsp "LMFREE DATAID("lmmId")"
if err <> '' then
call err err
return
endProcedure lmmRm
/*--- address ispf with error checking -------------------------------*/
adrIsp:
parse arg ggIspCmd, ggRet
address ispexec ggIspCmd
if rc = 0 then return 0
else if ggRet == '*' then return rc
else if wordPOS(rc, ggRet) > 0 then return rc
else
call err 'adr ispExec rc' rc 'in' ggIspCmd':' strip(zerrlm)
endSubroutine adrIsp
/*--- address editor with error checking -----------------------------*/
adrEdit:
parse arg ggEditCmd, ggRet
address isrEdit ggEditCmd
if rc = 0 then return 0
else if ggRet == '*' then return rc
else if wordPOS(rc, ggRet) > 0 then return rc
else
call err 'adr isrEdit rc' rc 'for' ggEditCmd
endSubroutine adrEdit
/* copy adrIsp end *************************************************/
/* copy adrTso begin *************************************************/
/*--- send ggTsoCmd to tso, fail if rc <> 0 or not listed in ggRet ---*/
adrTso:
parse arg ggTsoCmd, ggRet
address tso ggTsoCmd
if rc == 0 then return 0
else if ggRet == '*' then return rc
else if wordPos(rc, ggRet) > 0 then return rc
else
call err 'adrTso rc' rc 'for' ggTsoCmd
return /* end adrTso */
/*--- format dsn from tso format to jcl format -----------------------*/
dsn2jcl: procedure expose m.
parse upper arg dsn ., addPrefix
if left(dsn,1) = "'" then
return strip(dsn, 'b', "'")
sp = sysvar('SYSPREF')
if sp == '' then
sp = userid()
cx = pos('~', dsn)
if cx < 1 & addPrefix == 1 then
return sp'.'dsn
do while cx \== 0
le = left(dsn, cx-1)
ri = substr(dsn, cx+1)
if right(le, 1) == '.' | left(ri, 1) == '.' then
dsn = le || sp || ri
else
dsn = le || left('.', le \== '') || sp ,
|| left('.', ri \== '') || ri
cx = pos('~', spec, cx)
end
return dsn
endProcedure dsn2Jcl
/*--- format dsn from jcl format to tso format -----------------------*/
jcl2dsn: procedure expose m.
parse arg dsn .
return "'"dsn"'"
endProcedure jcl2dsn
dsnSetMbr: procedure expose m.
parse arg dsn, mbr
bx = pos('(', dsn)
if bx > 0 then
dsn = strip(left(dsn, bx-1))
if mbr <> '' then
dsn = dsn'('strip(mbr)')'
return dsn
endProcedure dsnSetMbr
dsnGetMbr: procedure expose m.
parse arg dsn
lx = pos('(', dsn)
rx = pos(')', dsn, lx+1)
if lx < 1 then
return ''
else if lx < rx then
return substr(dsn, lx+1, rx-lx-1)
else
return strip(substr(dsn,lx+1))
endProcedure dsnGetMbr
/**********************************************************************
io: read or write a dataset with the following callsequences:
read: tsoOpen...'R', readDD*, tsoClose
write: tsoOpen...'W', writeDD*, tsoClose
readDD returns true if data read, false at eof
do not forget that open is mandatory to write empty file|
***********************************************************************/
/*--- open dd for read (rw='R') or write (rw='W') --------------------*/
tsoOpen: procedure expose m.
parse upper arg dd, rw
return adrTso('execio' 0 'disk'RW tsoDD(dd, 'o') '(open)')
return /* end tsoOpen */
/*--- close dd -----------------------------------------------------*/
tsoClose: procedure expose m.
parse upper arg dd
return adrTso('execio 0 diskW' dd '(finis)')
endProcedure tsoClose
/*--- read from DD ggDD into ggSt, return false at eof ---------------*/
readDD:
parse arg ggDD, ggSt, ggCnt
if ggCnt = '' then
ggCnt = 100
call adrTso 'execio' ggCnt 'diskR' ggDD '(stem' ggSt')', 2
return (value(ggSt'0') > 0)
return /* end readDD */
/*--- write to gg ggDD from stem ggSt, ggCnt records -----------------*/
writeDD:
parse arg ggDD, ggSt, ggCnt
if ggCnt == '' then
ggCnt = value(ggst'0')
call adrTso 'execio' ggCnt 'diskW' ggDD '(stem' ggSt')'
return
endSubroutine writeDD
/*--- readNx: read next line, using buffer ---------------------------*/
/*--- begin: allocate dsnSpec and ini ------------------------ -------*/
readNxBegin: procedure expose m.
parse arg m, m.m.dsn, m.m.dd, m.m.Cnt
if m.m.dd = '' then
m.m.dd = 'DDNX*'
if m.m.cnt = '' then
m.m.cnt = 1000
m.m.cx = m.m.cnt + 999
m.m.buf0x = 0
m.m.0 = 0
parse value dsnAlloc('dd('m.m.dd')' m.m.dsn) with m.m.dd m.m.free
call tsoOpen m.m.dd, 'R'
return m
endProcedure readDDNxBegin
/*--- return the stem of the next line, or '' at end -----------------*/
readNx: procedure expose m.
parse arg m
m.m.cx = m.m.cx + 1
if m.m.cx <= m.m.0 then
return m'.'m.m.cx
m.m.buf0x = m.m.buf0x + m.m.0
if \ readDD(m.m.dd, 'M.'m'.', m.m.cnt)then
return ''
m.m.cx = 1
return m'.1'
endProcedure readDDNx
/*--- return the stem of the curr line, '' at end --------------------*/
readNxCur: procedure expose m.
parse arg m
if m.m.cx <= m.m.0 then
return m'.'m.m.cx
else
return ''
endProcedure readNxCur
/*--- return the position (line number) of reader
plus le characters of the current line (default 50) ------*/
readnxPos: procedure expose m.
parse arg m, le
li = m'.'m.m.cx
li = strip(m.li, 't')
if arg() < 2 then
le = 50
if le < 1 then
li = ''
else if length(li) <= le then
li = ':' li
else
li = ':' left(li, le-3)'...'
return 'line' (m.m.buf0x + m.m.cx)li
endProcedure readnxPos
/*--- close and deallocate ------------------------------------------*/
readNxEnd: procedure expose m.
parse arg m
call tsoClose m.m.dd
call tsoFree m.m.free
return
endProcedure readDDNxEnd
/*--- standardise a dsn spec
word1 dsName or -
word2 dd or -
word3 disp or -
word4 to first : attributes in tso format
after first : attributes for new allocation
----------------------------------------------------------------------*/
dsnSpec: procedure expose m.
parse upper arg spec
rr = '' /* put leading - in separate words */
do sx=1 while words(rr) < 3 & wx \= ''
wx = word(spec, sx)
do while abbrev(wx, '-') & words(rr) < 3
wx = substr(wx, 2)
rr = rr '-'
end
rr = rr wx
end
spec = rr subWord(spec, sx)
na = ''
dd = ''
di = ''
if left(spec, 1) = '&' then /* external spec is handled ok */
spec = strip(substr(spec, 2))
do wx=1 by 1
w = word(spec, wx)
if w = '' | abbrev(w, '.') | abbrev(w, ':') then
leave
else if wordPos(w, 'OLD SHR MOD NEW')>0 | abbrev(w, 'SYSO') then
di = w
else if w = 'CATALOG' then
di = di w
else if abbrev(w, 'DD(') then
dd = substr(w, 4, length(w)-4)
else if abbrev(w, 'DSN(') then
na = strip(substr(w, 5, length(w)-5))
else if na == '' then
na = dsn2jcl(w)
else if pos('(', w) > 0 then
leave
else if dd == '' then
dd = w
else if di == '' then
di = w
else
leave
end
if na == '' then
na = '-'
else if abbrev(na, "'") then
na = substr(na, 2, length(na)-2)
if dd == '' then dd = '-'
if di == '' then di = '-'
re = subword(spec, wx)
if abbrev(re, '.') then
re = substr(re, 2)
return na dd di re
endProcedure dsnSpec
/*--- alloc a dsn with dsnAlloc
if the dsn is inuse wait and retry
until either the allocation is successfull
or the timeout occurs --------------------------------------*/
dsnAllocWait: procedure expose m.
parse upper arg spec, pDi, pDD, timeOut
x = max(1, arg() - 1)
do rt=0
m.adrTsoAl.1 = ''
m.adrTsoAl.2 = ''
m.adrTsoAl.3 = ''
call outtrap m.adrTsoAl.
res = dsnAlloc(spec, pDi, pDD, '*')
call outtrap off
if \ datatype(res, 'n') then
return res
msg = m.adrTsoAl.1'\n'm.adrTsoAl.2'\n'm.adrTsoAl.3
if rt > timeOut & timeOut \== '' then
return err('timeout allocating' spec time() '\n'msg)
if pos('DATA SET IS ALLOCATED TO ANOTHER', msg) < 1 then
return err('allocating' spec'\n'msg)
say time() 'sleep and retry alloc' spec
call sleep 1, 0
end
endProcedure dsnAllocWait
/*--- alloc a dsn or a dd
spec '-'<ddName>
datasetName? disposition? '.'? attributes? (':' newAtts)?
disp default disposition
dd default dd name
retRc erlaubte ReturnCodes (leer = 0)
returns if ok then ddName <rexx for free> otherwise rc -----*/
dsnAlloc: procedure expose m.
parse upper arg spec, pDi, pDD, retRc
parse value dsnSpec(spec) with na dd di rest
if na = '-' then
m.dsnAlloc.dsn = ''
else
m.dsnAlloc.dsn = na
if dd == '-' & pDD \== '' then
dd = pDD
if dd == '-' then
dd = 'DD*'
dd = tsoDD(dd, 'a')
if na == '-' & di == '-' & rest = '' then
return dd
if di = '-' then
if pDi == '' then
di = 'SHR'
else
di = pDi
if pos('(', na) < 1 then
nop
else if di = 'MOD' then
call err 'disp mod for' na
else
di = 'SHR'
if pos('/', na) > 0 then
rx = csmAlloc(na dd di rest, retRc)
else
rx = tsoAlloc(na dd di rest, retRc)
if rx = 0 then
return dd dd
else
return rx
endProcedure dsnAlloc
/*--- find a free dd with prefix dd ----------------------------------*/
tsoDD: procedure expose m.
parse arg dd, f
if symbol('m.tso.ddAlloc') \== 'VAR' then do
call errIni
m.tso.ddAlloc = ''
m.tso.ddOpen = ''
end
if m.err.ispf then
address ispExec 'vget wshTsoDD shared'
else
wshTsoDD = m.tso.ddAlloc
if f == '-' then do
ax = wordPos(dd, m.tso.ddAlloc)
if ax > 0 then
m.tso.ddAlloc = delWord(m.tso.ddAlloc, ax, 1)
ox = wordPos(dd, m.tso.ddOpen)
if ox > 0 then
m.tso.ddOpen = delWord(m.tso.ddOpen , ox, 1)
if ax < 1 & ox < 1 then
call err 'tsoDD dd' dd 'not used' m.tso.ddAlloc m.tso.ddOpen
sx = wordPos(dd, wshTsoDD)
if sx > 0 then
wshTsoDD = delWord(wshTsoDD , sx, 1)
end
else if f == 'o' then do
if wordPos(dd, m.tso.ddOpen m.tso.ddAlloc) < 1 then
m.tso.ddOpen = strip(m.tso.ddOpen dd)
end
else if f <> 'a' then do
call err 'tsoDD bad fun' f
end
else do
if right(dd, 1) = '*' then do
dd = left(dd, length(dd)-1) || m.err.screen
cx = lastPos(' 'dd, ' 'm.tso.ddAlloc)
if cx > 0 then do
old = word(substr(m.tso.ddAlloc, cx), 1)
if old = dd then
dd = dd'1'
else if datatype(substr(old, length(dd)+1), 'n') then
dd = dd || (substr(old, length(dd)+1) + 1)
else
call err 'tsoDD old' old 'suffix not numeric dd' dd
end
end
if wordPos(dd, m.tso.ddAlloc) < 1 then
m.tso.ddAlloc = strip(m.tso.ddAlloc dd)
if wordPos(dd, wshTsoDD) < 1 then
wshTsoDD = strip(wshTsoDD dd)
end
if m.err.ispf then
address ispExec 'vPut wshTsoDD shared'
return dd
endProcedure tsoDD
tsoAlloc: procedure expose m.
parse arg na dd disp rest ':' nn, retRc
c = 'alloc dd('dd')' disp
if na \== '-' then
c = c "DSN('"na"')"
else if disp = 'NEW' and nn \== '' then
c = c dsnCreateAtts(,nn)
call outtrap m.adrTsoAl.
alRc = adrTso(c rest, '*')
call outtrap off
if alRc = 0 then
return 0
if nn \= '' & wordPos(disp, 'OLD SHR') > 0 ,
& sysDsn("'"m.dsnAlloc.dsn"'") == 'DATASET NOT FOUND' then do
say 'tsoAlloc creating' c rest ':'nn
call adrTso 'alloc dd('dd') new catalog' dsnCreateAtts(na, nn)
call adrTso 'free dd('dd')'
return tsoAlloc(na dd disp rest, retRc)
end
say 'rc='alRc 'for' c rest
call saySt adrTsoal
if retRc = '*' | wordPos(alRc, retRc) > 0 then
return alRc
call err 'tsoAlloc rc' alRc 'for' c rest
endProcedure tsoAlloc
tsoAtts: procedure expose m.
parse arg dsn
rc = listDsi("'"dsn"' SMSINFO")
if rc = 0 then
mv = ''
else if rc = 4 & sysReason = 19 then do
mv = 'UCOUNT(30)' /* 7.8.13 corrected attribute */
say 'creating' dsn 'with multi volume' mv
end
else if rc ^= 0 then
call err 'listDsi rc' rc 'reason' sysReason,
sysMsgLvl1 sysMsgLvl2
al = 'CAT'
al = ''
if right(sysDsSms, 7) == 'LIBRARY' ,
| abbrev(sysDsSms, 'PDS') then
al = al 'DSNTYPE(LIBRARY)'
if sysUnits = 'TRACK' then
sysUnits = 'TRACKS'
return al "DSORG("sysDSorg") MGMTCLAS("sysMgmtClass")",
"DATACLAS("sysDataClass")" ,
"RECFM("translate('1 2 3', ' 'sysREcFM, ' 123')")",
"LRECL("SYSLRECL")",
"SPACE("sysPrimary"," sysSeconds")" sysUnits mv
/* "blksize("sysBLkSIZE")" removed 3.4.13: let sms do the magic */
endProcedure tsoAtts
tsoFree: procedure expose m.
parse arg ddList, ggRet
do dx=1 to words(ddList)
dd = word(ddList, dx)
call adrTso 'free dd('dd')', ggRet
call tsoDD dd, '-'
end
return
endProcedure tsoFree
tsoFreeAll: procedure expose m.
all = m.tso.ddAlloc m.tso.ddOpen
do ax = 1 to words(all)
call adrTso 'execio 0 diskW' word(all, ax) '(finis)', '*'
end
m.tso.ddOpen = ''
call tsoFree m.tso.ddAlloc, '*'
return
endProcedure tsoFreeAll
dsnCreateAtts: procedure expose m.
parse arg dsn, atts, forCsm
forCsm = forCsm == 1
aU = ' 'translate(atts)
res = ''
if dsn \== '' then
res = "dataset('"dsnSetMbr(dsn)"')"
if abbrev(atts, '~') then
return res tsoAtts(substr(atts, 2))
if abbrev(atts, ':') then do
parse var atts a1 atts
rl = substr(a1, 3)
if abbrev(a1, ':F') then do
if rl = '' then
rl = 80
recfm='f b'
end
else do
if rl = '' then
rl = 32756
recfm = substr(a1, 2, 1) 'b'
end
res = res "recfm("space(recfm, 1-forCsm)") lrecl("rl")"
end
if pos('(', dsn) > 0 & pos(' DSNTYPE(', aU) < 1 ,
& pos(' DSORG(', aU) < 1 then
res = res 'dsntype(library) dsorg(po)'
if pos(' MGMTCLAS(', aU) < 1 then
res = res 'mgmtclas(COM#A091)'
if pos(' SPACE(', aU) < 1 then
res = res 'space(100, 500) cyl' || copies('inder', forCsm)
return res atts
endProcedure dsnCreateAtts
/*--- check if a dataset is archive ------------------------------------
returns 'ok' if dataset on disk
'not' if dataset is not catalogued
'arc' if dataset archived
listDsi errorMsg otherwise ------------------*/
dsnArc: procedure expose m.
parse upper arg dsn
lc = listDsi("'"strip(dsn)"' noRecall")
if lc = 0 then
return 'ok'
else if lc=4 & sysReason = 19 then /* multiple volumes */
return 'ok'
else if lc=16 & sysReason = 5 then
return 'notCat'
else if lc=16 & sysReason = 9 then
return 'arc'
else
return 'listDsi cc='lc', sysReason='sysReason ,
'm2='sysMsgLvl2', m1='sysMsgLvl1
endProcedure dsnArc
/*--- read the dataset specified in ggDsnSpec to stem ggSt -----------*/
readDSN:
parse arg ggDsnSpec, ggSt
ggAlloc = dsnAlloc(ggDsnSpec, 'SHR', 'readDsN')
call adrTso 'execio * diskr' word(ggAlloc, 1) '(stem' ggSt' finis)'
call tsoFree word(ggAlloc, 2)
return
endSubroutine readDsn
/*--- write the dataset specified in ggDsnSpec from stem ggSt
write ggCnt records if not empty otherwise ggst0
if ggSay 1 then say ... records written to ... -------------*/
writeDSN:
parse arg ggDsnSpec, ggSt, ggCnt, ggSay
if ggCnt == '' then
ggCnt = value(ggst'0')
ggAlloc = dsnAlloc(ggDsnSpec, 'OLD', 'readDsN')
call adrTso 'execio' ggCnt 'diskw' word(ggAlloc, 1) ,
'(stem' ggSt 'open finis)'
call tsoFree word(ggAlloc, 2)
if ggSay == 1 | m.debug == 1 then
say ggCnt 'records written to' ggDsnSpec
return
endSubroutine writeDsn
copyDSN: procedure expose m.
parse arg frSpec, toSpec, ggSay
parse value dsnAlloc(frSpec, 'SHR', 'FRDD') with frDD frFr
parse value dsnAlloc(toSpec, 'OLD', 'TODD') with toDD toFr
call tsoOpen frDD, 'R'
call tsoOpen toDD, 'W'
cnt = 0
do while readDD(frDD, r.)
call writeDD toDD, r.
cnt = cnt + r.0
end
call tsoClose frDD
call tsoClose toDD
call tsoFree frFr toFr
if ggSay == 1 | m.debug == 1 then
say cnt 'records copied from' frSpec 'to' to toSpec
return
endSubroutine writeDsn
/* copy adrTso end ****************************************************/
/* copy err begin *** errorhandling, messages, help ****************/
errIni: procedure expose m.
if m.err.ini == 1 then
return
m.err.ini = 1
m.err.handler = ''
m.err.cleanup = ';'
m.err.opt = ''
parse source m.err.os .
m.err.ispf = 0
m.err.screen = 0
if m.err.os \== 'LINUX' then
if sysVar('sysISPF') = 'ACTIVE' then do
m.err.ispf = 1
address ispExec 'vget zScreen shared'
m.err.screen = zScreen
end
return
endProcedure errIni
/* configure err -----------------------------------------------------*/
errReset: procedure expose m.
call errIni
parse arg m.err.opt, m.err.handler
if pos('I', translate(m.err.opt)) > 0 & m.err.ispf then
address ispExec 'control errors return'
return
endSubroutine errReset
/*--- error routine: abend with message ------------------------------*/
err:
parse arg ggTxt, ggOpt
call errIni
drop err handler cleanup opt call return
if ggOpt == '' & m.err.handler \== '' then
interpret m.err.handler
call errSay 'f}'ggTxt
call errCleanup
if ggOpt == '' then
ggOpt = m.err.opt
upper ggOpt
if pos('T', ggOpt) > 0 then do
trace ?r
say 'trace ?r in err'
end
if pos('H', ggOpt) > 0 & m.err.eCat == 'f' then do
call errSay ' }errorhandler exiting with divide by zero' ,
'to show stackHistory'
x = 1 / 0
end
call errSay ' }errorhandler exiting with exit(12)'
exit errSetRc(12)
endSubroutine err
/*--- set rc for ispf: -------------------------------------------------
if a cmd is run by ispStart, its RC is ignored,
but ISPF passes the value of the shared variable zIspfRc
back as return code
----------------------------------------------------------------------*/
errSetRc: procedure expose m.
parse arg zIspfRc
if m.err.ispf then
address ispExec vput 'zIspfRc' shared
return zIspfRc
endProcedure errSetRc
/*--- error routine: user message cleanup exit -----------------------*/
errAddCleanup: procedure expose m.
parse arg code
call errIni
/* concatenate backwards, then it is executed also backwards */
m.err.cleanup = ';'code || m.err.cleanup
return
endProcedure errAddCleanup
errRmCleanup: procedure expose m.
parse arg code
call errIni
cx = pos(';'code';', m.err.cleanup)
if cx > 0 then
m.err.cleanup = left(m.err.cleanup, cx) ,
|| substr(m.err.cleanup, cx + length(code)+2)
return
endProcedure errRmCleanup
errCleanup: procedure expose m.
call errIni
errCleanup = m.err.cleanup
if errCleanup <> ';' then do
m.err.cleanup = ';'
say 'err cleanup begin' errCleanup
interpret errCleanup
say 'err cleanup end' errCleanup
end
if symbol('m.tso.ddAlloc') == 'VAR' then
call tsoFreeAll
return
endProcedure errCleanup
/*--- say an errorMessage msg with pref and linesplits --------------*/
errSay: procedure expose m.
parse arg msg
return saySt(errMsg(msg))
/*--- prefix an errormessage with pref,
split it into lines at \n to stem m.err -------------------*/
errMsg: procedure expose m.
parse arg msg
m.err.eCat = 'f'
do while substr(msg, 2, 1) == '}'
parse var msg m.err.eCat '}' msg
end
if m.err.eCat <> '' then do
parse source . . ggS3 . /* current rexx */
pTxt = ',error,fatal error,input error,syntax error,warning,'
px = pos(','m.err.eCat, pTxt)
if px < 1 then do
m.err.eCat = 'f'
px = pos(','m.err.eCat, pTxt)
end
msg = substr(pTxt, px+1, pos(',', pTxt, px+2)-px-1) ,
'in' ggS3':' msg
end
return splitNl(err, msg) /* split lines at \n */
endProcedure errMsg
splitNL: procedure expose m.
parse arg st, msg
bx = 1
do lx=1 to 20
ex = pos('\n', msg, bx)
if ex < bx then
leave
m.st.lx = substr(msg, bx, ex-bx)
bx = ex+2
end
m.st.lx = substr(msg, bx)
m.st.0 = lx
return st
endProcedure splitNL
/*--- say (part of) the lines of a stem ----------------------------*/
saySt: procedure expose m.
parse arg st, fx, tx
do lx=word(fx 1, 1) to word(tx m.st.0, 1)
say m.st.lx
end
return st
endProcedure saySt
/*--- out (part of) the lines of a stem ----------------------------*/
outSt: procedure expose m.
parse arg st, fx, tx
do lx=word(fx 1, 1) to word(tx m.st.0, 1)
call out m.st.lx
end
return st
endProcedure outSt
/*--- say a trace message if m.trace is set --------------------------*/
debug: procedure expose m.
parse arg msg
if m.debug == 1 then
say 'debug:' msg
return
endProcedure debug
/*--- output a trace if m.trace is set -------------------------------*/
trc: procedure expose m.
parse arg msg
if m.trace == 1 then
call out 'trc:' msg
return
endProcedure trc
/*--- assert that the passed rexx expression evaluates to true -------*/
assert:
interpret 'assertRes =' arg(1)
if assertRes \==1 then
call err 'assert failed' arg(1) '==>' assertRes':' arg(2)
return
endProcedure assert
/*--- abend with Message after displaying help -----------------------*/
errHelp: procedure expose m.
parse arg msg
call errSay 'i}'msg
call help 0
call err 'i}'msg
endProcedure errHelp
/*--- display the first comment block of the source as help ----------*/
help: procedure expose m.
parse arg doClear
if doClear \== 0 then
address tso 'clear'
parse source . . s3 .
say right(' help for rexx' s3, 72, '*')
do lx=1 while pos('/*', sourceLine(lx)) < 1
if lx > 10 then
return err('initial commentblock not found for help')
end
doInc = 1
ho = m.err.helpOpt
do lx=lx+1 to sourceline() while pos('*/', sourceline(lx)) = 0
li = strip(sourceLine(lx), 't')
cx = lastPos('{', li)
if cx > 0 then do
if length(ho) = 1 then
doInc = cx = length(li) | pos(ho, li, cx+1) > 0
li = left(li, cx-1)
end
if doInc then
say li
end
say right(' end help for rexx' s3, 72, '*')
return 4
endProcedure help
/* copy err end *****************************************************/
/* copy out begin ******************************************************
out interface simple with say or stem m.out only
***********************************************************************/
outIni: procedure expose m.
return outDst()
/*--- output a message to the current destination -------------------*/
out: procedure expose m.
parse arg msg
if m.out.ini \== 1 then
call outDst
if m.out.say then
say msg
if m.out.out then do
ox = m.out.0 + 1
m.out.0 = ox
m.out.ox = msg
end
return 0
endProcedure out
/*--- set a new out destination and return old one ------------------*/
outDst: procedure expose m.
parse arg d
if m.out.ini == 1 then
old = '-' || left('s', m.out.say) || left('o', m.out.out)
else do
m.out.ini = 1
old = '-s'
end
m.out.say = d == '' | pos('s', d) > 0
m.out.out = verify(d, 'o0', 'm') > 0
if pos('0', d) > 0 | \ datatype(m.out.0, 'n') then
m.out.0 = 0
return old
endProcedure outDst
/* return the contents of a string or std input */
inp2str: procedure expose m.
parse arg rdr, opt
return rdr
endProcedure inp2str
/* copy out end *****************************************************/
}¢--- A540769.WK.REXX.O13(ANAPOST) cre=2012-12-04 mod=2013-01-21-08.34.14 A540769 ---
/* rexx anaPost */
say 'andPost' arg() 'arg1='arg(1)
say 'andPost ddl='listFile('ddl')
call readDDBegin ddl
call readDD ddl, i., '*'
call readDDEnd ddl
say 'ddl' i.0 'lines 4=' strip(i.4)
say 'ddl' i.0 'lines 7=' strip(i.7)
exit
listFile: procedure expose m.
parse upper arg fi
sysDSName = '???'
lc = listDsi(fi "file")
if lc = 0 then
return sysDSName
/* else if lc=4 & sysReason = 19 then /* multiple volumes */
return 'ok'
else if lc=16 & sysReason = 5 then
return 'notCat'
else if lc=16 & sysReason = 9 then
return 'arc'
*/ else
call err 'listDsi cc='lc', sysReason='sysReason ,
'm2='sysMsgLvl2', m1='sysMsgLvl1
endProcedur listFile
/* copy adrTso begin *************************************************/
/*--- send ggTsoCmd to tso, fail if rc <> 0 or not listed in ggRet ---*/
adrTso:
parse arg ggTsoCmd, ggRet
address tso ggTsoCmd
if rc == 0 then return 0
else if ggRet == '*' then return rc
else if wordPos(rc, ggRet) > 0 then return rc
else
call err 'adrTso rc' rc 'for' ggTsoCmd
return /* end adrTso */
/*--- format dsn from tso format to jcl format -----------------------*/
dsn2jcl: procedure expose m.
parse upper arg dsn ., addPrefix
if left(dsn,1) = "'" then
return strip(dsn, 'b', "'")
sp = sysvar('SYSPREF')
if sp == '' then
sp = userid()
cx = pos('~', dsn)
if cx < 1 & addPrefix == 1 then
return sp'.'dsn
do while cx \== 0
le = left(dsn, cx-1)
ri = substr(dsn, cx+1)
if right(le, 1) == '.' | left(ri, 1) == '.' then
dsn = le || sp || ri
else
dsn = le || left('.', le \== '') || sp ,
|| left('.', ri \== '') || ri
cx = pos('~', spec, cx)
end
return dsn
endProcedure dsn2Jcl
/*--- format dsn from jcl format to tso format -----------------------*/
jcl2dsn: procedure expose m.
parse arg dsn .
return "'"dsn"'"
endProcedure jcl2dsn
dsnSetMbr: procedure expose m.
parse arg dsn, mbr
bx = pos('(', dsn)
if bx > 0 then
dsn = strip(left(dsn, bx-1))
if mbr <> '' then
dsn = dsn'('strip(mbr)')'
return dsn
endProcedure dsnSetMbr
dsnGetMbr: procedure expose m.
parse arg dsn
lx = pos('(', dsn)
rx = pos(')', dsn, lx+1)
if lx < 1 then
return ''
else if lx < rx then
return substr(dsn, lx+1, rx-lx-1)
else
return strip(substr(dsn,lx+1))
endProcedure dsnGetMbr
/**********************************************************************
io: read or write a dataset with the following callsequences:
read: readDDBegin, readDD*, readDDEnd
write: writeBegin, writeDD*, writeEnd
readDD returns true if data read, false at eof
***********************************************************************/
/*--- prepare reading from a DD --------------------------------------*/
readDDBegin: procedure expose m.
parse upper arg ggDD
call errAddCleanup 'call readDDEnd' ggDD', "*"'
return /* end readDDBegin */
/*--- read from DD ggDD into ggSt, return false at eof ---------------*/
readDD:
parse arg ggDD, ggSt, ggCnt
if ggCnt = '' then
ggCnt = 100
call adrTso 'execio' ggCnt 'diskr' ggDD '(stem' ggSt')', 2
return (value(ggSt'0') > 0)
return /* end readDD */
/*--- finish reading DD ggDD ----------------------------------------*/
readDDEnd: procedure expose m.
parse upper arg ggDD, ggRet
call errRmCleanup 'call readDDEnd' ggDD', "*"'
return adrTso('execio 0 diskr' ggDD '(finis)', ggRet)
endProcedure readDDEnd
/*--- prepare writing to DD ggDD -------------------------------------*/
writeDDBegin: procedure expose m.
parse upper arg ggDD
/* ensure file is erased, if no records are written */
call adrTso 'execio' 0 'diskw' ggDD '(open)'
call errAddCleanup 'call writeDDEnd' ggDD', "*"'
return /* end writeDDBegin */
/*--- write to gg ggDD from stem ggSt, ggCnt records -----------------*/
writeDD:
parse arg ggDD, ggSt, ggCnt
if ggCnt == '' then
ggCnt = value(ggst'0')
call adrTso 'execio' ggCnt 'diskw' ggDD '(stem' ggSt')'
return
endSubroutine writeDD
/*--- end writing to dd ggDD (close) --------------------------------*/
writeDDEnd: procedure expose m.
parse upper arg ggDD, ggRet
call errRmCleanup 'call writeDDEnd' ggDD', "*"'
return adrTso('execio 0 diskw' ggDD '(finis)', ggRet)
endProcedure writeDDEnd
/*--- readNx: read next line, using buffer ---------------------------*/
/*--- begin: allocate dsnSpec and ini ------------------------ -------*/
readNxBegin: procedure expose m.
parse arg m, m.m.dsn, m.m.dd, m.m.Cnt
if m.m.dd = '' then
m.m.dd = 'DDNX'
if m.m.cnt = '' then
m.m.cnt = 1000
m.m.cx = m.m.cnt + 999
m.m.buf0x = 0
m.m.0 = 0
m.m.free = subword(dsnAlloc('dd('m.m.dd')' m.m.dsn), 2)
call readDDBegin m.m.dd
return m
endProcedure readDDNxBegin
/*--- return the stem of the next line, or '' at end -----------------*/
readNx: procedure expose m.
parse arg m
m.m.cx = m.m.cx + 1
if m.m.cx <= m.m.0 then
return m'.'m.m.cx
m.m.buf0x = m.m.buf0x + m.m.0
if \ readDD(m.m.dd, 'M.'m'.', m.m.cnt)then
return ''
m.m.cx = 1
return m'.1'
endProcedure readDDNx
/*--- return the stem of the curr line, '' at end --------------------*/
readNxCur: procedure expose m.
parse arg m
if m.m.cx <= m.m.0 then
return m'.'m.m.cx
else
return ''
endProcedure readNxCur
/*--- return the position (line number) of reader
plus le characters of the current line (default 50) ------*/
readnxPos: procedure expose m.
parse arg m, le
li = m'.'m.m.cx
li = strip(m.li, 't')
if arg() < 2 then
le = 50
if le < 1 then
li = ''
else if length(li) <= le then
li = ':' li
else
li = ':' left(li, le-3)'...'
return 'line' (m.m.buf0x + m.m.cx)li
endProcedure readnxPos
/*--- close and deallocate ------------------------------------------*/
readNxEnd: procedure expose m.
parse arg m
call readDDEnd m.m.dd
interpret m.m.free
return
endProcedure readDDNxEnd
/*--- standardise a dsn spec
word1 dsName or -
word2 dd or -
word3 disp or -
word4 to first : attributes in tso format
after first : attributes for new allocation
----------------------------------------------------------------------*/
dsnSpec: procedure expose m.
parse upper arg spec
rr = '' /* put leading - in separate words */
do sx=1 while words(rr) < 3 & wx \= ''
wx = word(spec, sx)
do while abbrev(wx, '-') & words(rr) < 3
wx = substr(wx, 2)
rr = rr '-'
end
rr = rr wx
end
spec = rr subWord(spec, sx)
na = ''
dd = ''
di = ''
if left(spec, 1) = '&' then /* external spec is handled ok */
spec = strip(substr(spec, 2))
do wx=1 by 1
w = word(spec, wx)
if w = '' | abbrev(w, '.') | abbrev(w, ':') then
leave
else if wordPos(w, 'OLD SHR MOD NEW')>0 | abbrev(w, 'SYSO') then
di = w
else if w = 'CATALOG' then
di = di w
else if abbrev(w, 'DD(') then
dd = substr(w, 4, length(w)-4)
else if abbrev(w, 'DSN(') then
na = strip(substr(w, 5, length(w)-5))
else if na == '' then
na = dsn2jcl(w)
else if dd == '' then
dd = w
else if di == '' then
di = w
else
leave
end
if na == '' then
na = '-'
else if abbrev(na, "'") then
na = substr(na, 2, length(na)-2)
if dd == '' then dd = '-'
if di == '' then di = '-'
re = subword(spec, wx)
if abbrev(re, '.') then
re = substr(re, 2)
return na dd di re
endProcedure dsnSpec
/*--- alloc a dsn with dsnAlloc
if the dsn is inuse wait and retry
until either the allocation is successfull
or the timeout occurs --------------------------------------*/
dsnAllocWait: procedure expose m.
parse upper arg spec, pDi, pDD, timeOut
x = max(1, arg() - 1)
do rt=0
m.adrTsoAl.1 = ''
m.adrTsoAl.2 = ''
m.adrTsoAl.3 = ''
call outtrap m.adrTsoAl.
res = dsnAlloc(spec, pDi, pDD, '*')
call outtrap off
if \ abbrev(res, ' ') then
return res
msg = m.adrTsoAl.1'\n'm.adrTsoAl.2'\n'm.adrTsoAl.3
if rt > timeOut & timeOut \== '' then
return err('timeout allocating' spec time() '\n'msg)
if pos('DATA SET IS ALLOCATED TO ANOTHER', msg) < 1 then
return err('allocating' spec'\n'msg)
say time() 'sleep and retry alloc' spec
call sleep 1, 0
end
endProcedure dsnAllocWait
/*--- alloc a dsn or a dd
spec '-'<ddName>
datasetName? disposition? '.'? attributes? (':' newAtts)?
disp default disposition
dd default dd name
retRc erlaubte ReturnCodes (leer = 0)
returns if ok then ddName <rexx for free> otherwise rc -----*/
dsnAlloc: procedure expose m.
parse upper arg spec, pDi, pDD, retRc
parse value dsnSpec(spec) with na dd di rest
if na = '-' then
m.dsnAlloc.dsn = ''
else
m.dsnAlloc.dsn = na
if na == '-' & dd \== '-' & di == '-' & rest = '' then
return dd
if dd == '-' & pDD \== '' then
dd = pDD
if dd == '-' then do
if symbol('m.adrTso.ddNum') = 'VAR' then
dd = m.adrTso.ddNum + 1
else
dd = 1
m.adrTso.ddNum = dd
dd = 'DD' || dd
end
if di = '-' & pDi \== '' then
di = pDi
if di = '-' then
di = 'SHR'
else if pos('(', na) < 1 then
nop
else if di = 'MOD' then
call err 'disp mod for' na
else
di = 'SHR'
if pos('/', na) > 0 then
return csmAlloc(na dd di rest, retRc)
else
return tsoAlloc(na dd di rest, retRc)
endProcedure dsnAlloc
tsoAlloc: procedure expose m.
parse arg na dd disp rest ':' nn, retRc
c = 'alloc dd('dd')' disp
if na \== '-' then
c = c "DSN('"na"')"
else if disp = 'NEW' and nn \== '' then
c = c dsnCreateAtts(,nn)
call outtrap m.adrTsoAl.
alRc = adrTso(c rest, '*')
call outtrap off
if alRc = 0 then do
call errAddCleanup 'call tsoFree' dd', "*"'
return dd 'call tsoFree' dd';'
end
if nn \= '' & wordPos(disp, 'OLD SHR') > 0 ,
& sysDsn("'"m.dsnAlloc.dsn"'") == 'DATASET NOT FOUND' then do
say 'tsoAlloc creating' c rest ':'nn
call adrTso 'alloc dd('dd') new catalog' dsnCreateAtts(na, nn)
call adrTso 'free dd('dd')'
return tsoAlloc(na dd disp rest, retRc)
end
do ax=1 to m.adrTsoAl.0
say m.adrTsoal.ax
end
if retRc = '*' | wordPos(alRc, retRc) > 0 then
return ' ' alRc
call err 'tsoAlloc rc' alRc 'for' c rest
endProcedure tsoAlloc
tsoAtts: procedure expose m.
parse arg dsn
rc = listDsi("'"dsn"' SMSINFO")
if rc = 0 then
mv = ''
else if rc = 4 & sysReason = 19 then do
mv = 'UNITCNT(30)'
say 'multi volume' mv
end
else if rc ^= 0 then
call err 'listDsi rc' rc 'reason' sysReason,
sysMsgLvl1 sysMsgLvl2
al = 'CAT'
al = ''
if right(sysDsSms, 7) == 'LIBRARY' ,
| abbrev(sysDsSms, 'PDS') then
al = al 'DSNTYPE(LIBRARY)'
if sysUnits = 'TRACK' then
sysUnits = 'TRACKS'
al = al "DSORG("sysDSorg") MGMTCLAS("sysMgmtClass")",
"DATACLAS("sysDataClass")" ,
"RECFM("translate('1 2 3', ' 'sysREcFM, ' 123')")",
"LRECL("SYSLRECL")",
"blksize("sysBLkSIZE")",
"SPACE("sysPrimary"," sysSeconds")" sysUnits mv
return al
endProcedure tsoAtts
tsoFree: procedure expose m.
parse arg dd, ggRet
call adrTso 'free dd('dd')', ggRet
call errRmCleanup 'call tsoFree' dd', "*"'
return
endProcedure tsoFree
dsnCreateAtts: procedure expose m.
parse arg dsn, atts, forCsm
forCsm = forCsm == 1
aU = ' 'translate(atts)
if abbrev(atts, ':') then do
parse var atts a1 atts
bl = 32760
rl = substr(a1, 3)
if abbrev(a1, ':F') then do
if rl = '' then
rl = 80
recfm='f b'
bl = bl - (bl // rl)
end
else do
if rl = '' then
rl = bl-4
recfm = substr(a1, 2, 1) 'b'
end
if forCsm then
atts = atts "recfm("space(recfm, 0)") lrecl("rl")",
"blkSize("bl")"
else
atts = atts "recfm("recfm") lrecl("rl") block("bl")"
end
if pos('(', dsn) > 0 & pos(' DSNTYPE(', aU) < 1 ,
& pos(' DSORG(', aU) < 1 then
atts = atts 'dsntype(library) dsorg(po)'
if pos(' MGMTCLAS(', aU) < 1 then
atts = atts 'mgmtclas(COM#A091)'
if pos(' SPACE(', aU) < 1 then
if forCsm then
atts = atts 'space(10, 1000) cylinder'
else
atts = atts 'space(10, 1000) cyl'
if dsn == '' then
return atts
return "dataset('"dsnSetMbr(dsn)"')" atts
endProcedure dsnCreateAtts
/*--- read the dataset specified in ggDsnSpec to stem ggSt -----------*/
readDSN:
parse arg ggDsnSpec, ggSt
ggAlloc = dsnAlloc(ggDsnSpec, 'SHR', 'readDsN')
call adrTso 'execio * diskr' word(ggAlloc, 1) '(stem' ggSt' finis)'
interpret subword(ggAlloc, 2)
return
endSubroutine readDsn
/*--- write the dataset specified in ggDsnSpec from stem ggSt
write ggCnt records if not empty otherwise ggst0
if ggSay 1 then say ... records written to ... -------------*/
writeDSN:
parse arg ggDsnSpec, ggSt, ggCnt, ggSay
if ggCnt == '' then
ggCnt = value(ggst'0')
ggAlloc = dsnAlloc(ggDsnSpec, 'OLD', 'readDsN')
call adrTso 'execio' ggCnt 'diskw' word(ggAlloc, 1) ,
'(stem' ggSt 'open finis)'
interpret subword(ggAlloc, 2)
if ggSay == 1 | m.debug == 1 then
say ggCnt 'records written to' ggDsnSpec
return
endSubroutine writeDsn
copyDSN: procedure expose m.
parse arg frSpec, toSpec, ggSay
frDD = dsnAlloc(frSpec, 'SHR', 'FRDD')
toDD = dsnAlloc(toSpec, 'OLD', 'TODD')
call readDDBegin word(frDD, 1)
call writeDDBegin word(toDD, 1)
cnt = 0
do while readDD(word(frDD, 1), r.)
call writeDD word(toDD, 1), r.
cnt = cnt + r.0
end
call readDDEnd word(frDD, 1)
call writeDDEnd word(toDD, 1)
interpret ';' subword(frDD, 2) '; ; ;' subword(toDD, 2)
if ggSay == 1 | m.debug == 1 then
say cnt 'records copied from' frSpec 'to' to toSpec
return
endSubroutine writeDsn
/* copy adrTso end ****************************************************/
/* copy err begin ******************************************************
messages, errorhandling,help
***********************************************************************/
errIni: procedure expose m.
if m.err.ini == 1 then
return
call outIni
m.err.ini = 1
m.err.handler = ''
m.err.cleanup = ';'
m.err.opt = ''
return
endProcedure errIni
/* configure err -----------------------------------------------------*/
errReset: procedure expose m.
call errIni
parse arg m.err.opt, m.err.handler
if pos('I', translate(m.err.opt)) > 0 then
if errOS() \== 'LINUX' then
if sysVar('sysISPF') = 'ACTIVE' then
call adrIsp 'control errors return'
return
endSubroutine errReset
/*--- error routine: abend with message ------------------------------*/
err:
parse arg ggTxt, ggOpt
call errIni
drop err handler cleanup opt call return
if ggOpt == '' & m.err.handler \== '' then do
if 1 then do /* no detection of recursive err call loop
--> will anyway fail by stack overflow */
interpret m.err.handler
end
else do
/* avoid recursive err call loop */
drop call return
if symbol('m.err.call') \== 'VAR' then
m.err.call = 1
else
m.err.call = m.err.call + 1
if m.err.call > 10 then do
say 'errHandler loop:' m.err.handler
end
else do
m.err.return = 1
call errInterpret m.err.handler
m.err.call = m.err.call - 1
if m.err.return then
return result
end
end
end
call outDst
call errSay ggTxt, 'e'
call errCleanup
if ggOpt == '' then
ggOpt = m.err.opt
ggOpt = translate(ggOpt)
if pos('T', ggOpt) > 0 then do
trace ?r
say 'trace ?r in err'
end
if pos('H', ggOpt) > 0 then do
call errSay 'divide by zero to show stackHistory', 'e'
x = 1 / 0
end
call errSay 'exit(12)', 'e'
exit errSetRc(12)
endSubroutine err
/*--- error routine: user message cleanup exit -----------------------*/
errEx:
parse arg ggTxt
call errIni
call outDst
call errSay ggTxt
call errCleanup
exit 8
endProcedure errEx
errAddCleanup: procedure expose m.
parse arg code
if m.err.ini \== 1 then
call errIni
/* concatenate backwards, then it is executed also backwards */
m.err.cleanup = ';'code || m.err.cleanup
return
endProcedure errAddCleanup
errRmCleanup: procedure expose m.
parse arg code
if m.err.ini \== 1 then
call errIni
cx = pos(';'code';', m.err.cleanup)
if cx > 0 then
m.err.cleanup = left(m.err.cleanup, cx) ,
|| substr(m.err.cleanup, cx + length(code)+2)
return
endProcedure errRmCleanup
errCleanup: procedure expose m.
call errIni
cl = m.err.cleanup
if cl = ';' then
return
m.err.cleanup = ';'
say 'err cleanup begin' cl
call errInterpret cl
say 'err cleanup end' cl
return
endProcedure errCleanup
errInterpret: procedure expose m.
parse arg code
interpret code
m.err.return = 0
return
endProcedure errInterpret
/*--- assert that the passed rexx expression evaluates to true -------*/
assert:
interpret 'assertRes =' arg(1)
if \ assertRes then
call err 'assert failed' arg(1)':' arg(2)
return
endProcedure assert
/*--- output an errorMessage msg with pref pref
split message in lines at '/n' ---------------------------*/
errSay: procedure expose m.
parse arg msg, pref
parse source . . ggS3 . /* current rexx */
if pref == 'e' then
msg = 'fatal error in' ggS3':' msg
else if pref == 'w' then
msg = 'warning in' ggS3':' msg
else if pref \== '' then
msg = pref':' msg
return outNl(msg)
endProcedure errSay
/*--- abend with Message after displaying help -----------------------*/
errHelp: procedure expose m.
parse arg msg, op
call errSay msg, 'e'
call help
call err msg, op
endProcedure errHelp
/*--- return the Operating System we are running on: TSO or LINUX ---*/
errOS: procedure expose m.
parse source os .
return os
endProcedure errOS
/*--- set rc for ispf: -------------------------------------------------
if a cmd is run by ispStart, its RC is ignored,
but ISPF passes the value of the shared varible 3IspfRc
back as return code
----------------------------------------------------------------------*/
errSetRc: procedure expose m.
parse arg zIspfRc
if errOS() \== 'LINUX' then
if sysVar('sysISPF') = 'ACTIVE' then
address ispExec vput 'zIspfRc' shared
return zIspfRc
endProcedure errSetRc
/*--- output a trace message if m.tr is set -----------------------*/
trc: procedure expose m.
parse arg msg
if m.trace == 1 then
call out 'trc:' msg
return
endProcedure trc
debug: procedure expose m.
parse arg msg
if m.debug == 1 then
call out 'debug' msg
return
endProcedure debug
/*--- display the first comment block of the source as help ----------*/
help: procedure expose m.
parse source . . s3 .
call out right(' help for rexx' s3, 79, '*')
do ax=1 to arg()
say ' ' arg(ax)
end
do lx=1 by 1
if pos('/*', sourceLine(lx)) > 0 then
leave
else if lx > 10 then do
call out 'initial commentblock not found for help'
return
end
end
do lx=lx+1 by 1
li = strip(sourceLine(lx), 't', ' ')
if pos('*/', li) > 0 then
leave
call out li
end
call out right(' end help for rexx' s3, 79, '*')
return 4
endProcedure help
/*--- output all lines (separated by '\n') of all args --------------*/
outNl: procedure expose m.
do ax=1 to max(1, arg())
msg = arg(ax)
sx = 0
bx = -1
do lx=1 until bx >= length(msg)
ex = pos('\n', msg, bx+2)
if ex < 1 then
ex = length(msg)+1
call out substr(msg, bx+2, ex-bx-2)
bx = ex
end
end
return 0
endProcedure outNl
/* copy err end *****************************************************/
/* copy out begin ******************************************************
out interface simple with say only
***********************************************************************/
outIni: procedure expose m.
parse arg msg
return
endProcedure outIni
/*--- output a message to the current destination -------------------*/
out: procedure expose m.
parse arg msg
say msg
return 0
endProcedure out
/*--- set a new out destination and return old one ------------------*/
outDst: procedure expose m.
parse arg d
return ''
endProcedure outDst
/* return the contents of a string or std input */
inp2str: procedure expose m.
parse arg rdr, opt
return rdr
endProcedure inp2str
/* copy out end *****************************************************/
}¢--- A540769.WK.REXX.O13(ANATST1) cre=2009-05-28 mod=2009-05-28-17.11.47 F540769 ---
* test fuer maRec mbrVars Routine
vEins = eins ef * komm
vZwei= ab cd zwei
*
/jobs/
j1 ja jobEins
j2 jb jobZwei * und so weiter
/jobs/
vDrei =drei
vVier=vier bis hier |*und nicht weiter
****
}¢--- A540769.WK.REXX.O13(ATTS) cre=2010-04-17 mod=2010-04-17-18.14.22 A540769 ---
$<.fileList(file('dsn.mfunl'), 'r')
$@for fi $@¢
$$ dataset('$fi') $-{tsoAtts($fi)}
$!
$#out 20100417 18:13:50
dataset('DSN.MFUNL.MF01A1P.A101A.PUN') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DE
dataset('DSN.MFUNL.MF01A1P.A101A.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EY
dataset('DSN.MFUNL.MF01A1P.A102A.PUN') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DE
dataset('DSN.MFUNL.MF01A1P.A102A.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EY
dataset('DSN.MFUNL.MF01A1P.A105A.PUN') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DE
dataset('DSN.MFUNL.MF01A1P.A105A.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EY
dataset('DSN.MFUNL.MF01A1P.A130A.PUN') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DE
dataset('DSN.MFUNL.MF01A1P.A130A.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EY
dataset('DSN.MFUNL.MF01A1P.A131A.PUN') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DE
dataset('DSN.MFUNL.MF01A1P.A131A.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EY
dataset('DSN.MFUNL.MF01A1P.A137A.PUN') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DE
dataset('DSN.MFUNL.MF01A1P.A137A.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EY
dataset('DSN.MFUNL.MF01A1P.A138A.PUN') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DE
dataset('DSN.MFUNL.MF01A1P.A138A.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EY
dataset('DSN.MFUNL.MF01A1P.A141A.PUN') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DE
dataset('DSN.MFUNL.MF01A1P.A141A.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EY
dataset('DSN.MFUNL.MF01A1P.A200A.PUN') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DE
dataset('DSN.MFUNL.MF01A1P.A200A.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EY
dataset('DSN.MFUNL.MF01A1P.A202A.PUN') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DE
dataset('DSN.MFUNL.MF01A1P.A202A.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EY
dataset('DSN.MFUNL.MF01A1P.A230A.PUN') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DE
dataset('DSN.MFUNL.MF01A1P.A230A.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EY
dataset('DSN.MFUNL.MF01A1P.A401A.PUN') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DE
dataset('DSN.MFUNL.MF01A1P.A401A.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EY
dataset('DSN.MFUNL.MF01A1P.A903A.PUN') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DE
dataset('DSN.MFUNL.MF01A1P.A903A.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EY
dataset('DSN.MFUNL.MF02A1P.A701A.PUN') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DE
dataset('DSN.MFUNL.MF02A1P.A701A.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EY
dataset('DSN.MFUNL.MF02A1P.A702A.PUN') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DE
dataset('DSN.MFUNL.MF02A1P.A702A.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EY
dataset('DSN.MFUNL.MF02A1P.A707A.PUN') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DE
dataset('DSN.MFUNL.MF02A1P.A707A.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EY
dataset('DSN.MFUNL.MF02A1P.A708A.PUN') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DE
dataset('DSN.MFUNL.MF02A1P.A708A.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EY
dataset('DSN.MFUNL.MF02A1P.A709A.PUN') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DE
dataset('DSN.MFUNL.MF02A1P.A709A.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EY
dataset('DSN.MFUNL.MF02A1P.A714A.PUN') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DE
dataset('DSN.MFUNL.MF02A1P.A714A.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EY
dataset('DSN.MFUNL.MF02A1P.A716A.PUN') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DE
dataset('DSN.MFUNL.MF02A1P.A716A.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EY
dataset('DSN.MFUNL.MF03A1P.A009A.PUN') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DE
dataset('DSN.MFUNL.MF03A1P.A009A.P00001.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00002.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00003.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00004.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00005.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00006.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00007.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00008.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00009.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00010.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00011.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00012.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00013.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00014.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00015.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00016.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00017.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00018.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00019.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00020.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00021.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00022.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00023.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00024.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00025.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00026.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00027.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00028.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00029.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00030.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00031.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00032.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00033.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00034.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00035.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00036.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00037.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00038.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00039.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00040.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00041.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00042.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00043.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00044.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00045.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00046.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00047.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00048.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00049.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00050.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00051.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00052.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00053.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00054.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00055.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00056.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00057.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00058.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00059.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00060.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00061.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00062.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00063.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00064.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00065.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF150P01.PUN') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DEFAULT
dataset('DSN.MFUNL.MF150P01.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EYY0X)
dataset('DSN.MFUNL.MF150P02.PUN') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DEFAULT
dataset('DSN.MFUNL.MF150P02.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EYY0X)
dataset('DSN.MFUNL.MF150P03.PUN') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DEFAULT
dataset('DSN.MFUNL.MF150P03.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EYY0X)
dataset('DSN.MFUNL.MF150P04.PUN') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DEFAULT
dataset('DSN.MFUNL.MF150P04.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EYY0X)
dataset('DSN.MFUNL.MF150P05.PUN') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DEFAULT
dataset('DSN.MFUNL.MF150P05.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EYY0X)
dataset('DSN.MFUNL.MF150P06.PUN') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DEFAULT
dataset('DSN.MFUNL.MF150P06.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EYY0X)
dataset('DSN.MFUNL.MF150P07.PUN') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DEFAULT
dataset('DSN.MFUNL.MF150P07.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EYY0X)
dataset('DSN.MFUNL.MF150P08.PUN') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DEFAULT
dataset('DSN.MFUNL.MF150P08.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EYY0X)
dataset('DSN.MFUNL.MF150P09.PUN') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DEFAULT
dataset('DSN.MFUNL.MF150P09.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EYY0X)
dataset('DSN.MFUNL.MF150P10.PUN') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DEFAULT
dataset('DSN.MFUNL.MF150P10.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EYY0X)
dataset('DSN.MFUNL.MF150P11.PUN') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DEFAULT
dataset('DSN.MFUNL.MF150P11.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EYY0X)
dataset('DSN.MFUNL.MF150P12.PUN') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DEFAULT
dataset('DSN.MFUNL.MF150P12.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EYY0X)
dataset('DSN.MFUNL.MF150P13.PUN') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DEFAULT
dataset('DSN.MFUNL.MF150P13.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EYY0X)
dataset('DSN.MFUNL.MF150P14.PUN') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DEFAULT
dataset('DSN.MFUNL.MF150P14.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EYY0X)
dataset('DSN.MFUNL.MF150P15.PUN') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DEFAULT
dataset('DSN.MFUNL.MF150P15.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EYY0X)
dataset('DSN.MFUNL.MF150P16.PUN') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DEFAULT
dataset('DSN.MFUNL.MF150P16.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EYY0X)
dataset('DSN.MFUNL.MF150P17.PUN') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DEFAULT
dataset('DSN.MFUNL.MF150P17.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EYY0X)
dataset('DSN.MFUNL.MF150P18.PUN') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DEFAULT
dataset('DSN.MFUNL.MF150P18.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EYY0X)
dataset('DSN.MFUNL.MF150P19.PUN') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DEFAULT
dataset('DSN.MFUNL.MF150P19.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EYY0X)
dataset('DSN.MFUNL.MF150P20.PUN') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DEFAULT
dataset('DSN.MFUNL.MF150P20.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EYY0X)
dataset('DSN.MFUNL.MF150P21.PUN') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DEFAULT
dataset('DSN.MFUNL.MF150P21.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EYY0X)
dataset('DSN.MFUNL.OE02A1P.A401A.PUN') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DE
dataset('DSN.MFUNL.OE02A1P.A401A.UNL') DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EY
$#out 20100417 18:01:12
dataset(DSN.MFUNL.MF01A1P.A101A.PUN) DSORG(PS) MGMTCLAS(COM#E000) DATACLAS(DEFA
dataset(DSN.MFUNL.MF01A1P.A130A.PUN) DSORG(PS) MGMTCLAS(COM#E000) DATACLAS(DEFA
$#out 20100417 17:59:34
}¢--- A540769.WK.REXX.O13(BESEL) cre=2011-05-27 mod=2011-05-27-16.52.09 A540769 ---
//A540769V JOB (CP00,KE50),'DB2 REO',
// MSGCLASS=T,TIME=1440,
// NOTIFY=&SYSUID,REGION=0M
//*MAIN CLASS=LOG
//*
//S1 EXEC PGM=IKJEFT01,DYNAMNBR=200,TIME=99,
// PARM='WSH'
//SYSPROC DD DSN=A540769.WK.REXX,DISP=SHR
//SYSTSPRT DD SYSOUT=*
//SYSTSIN DD DUMMY
//WSH DD *
$#@
$@do ix=1 $@¢
$@=¢
select * from
oa1a03.tbe010a1
fetch first 10 rows only
$! $| call sqlStmtsOpt
call sleep 10
$!
//*OUT DD SYSOUT=*
}¢--- A540769.WK.REXX.O13(BESENWAG) cre=2012-09-04 mod=2012-09-21-11.11.16 A540769 ---
/* rexx
Besenwagen
aufruf durch db2Cpg01
start job dsn.besenwag.<dbSy>(qcsBesXp)
warten (max 1h) bis job fertig ist
5. 9.12 Walter: vergessene Copies von db2v10nfm nachholen
***********************************************************************/
parse arg dbSy
say 'start besenwagen for dbSystem' dbSy
lib = 'DSN.BESENWAG.'dbSy
fini = "'"lib"(finish)'"
if sysDsn(fini) == 'OK' then
call adrTso "delete" fini
call adrTso "sub '"lib"(qcsBesXp)'"
tEnd = time('e') + 3600
do while time('e') < tEnd
call sleep 60
if sysDsn(fini) == 'OK' then do
say 'end Besenwagen, member' fini 'is now OK'
exit 0
end
end
say 'Ende Besenwagen member' fini 'fehlt zulange'
exit
/* copy ut begin *****************************************************/
/*--- if function warning all3 arguments get evaluated|
e.g if(x=0, 'infinity', 1/0) will fail| -----------*/
if: procedure expose m.
parse arg co, ifTrue, ifFalse
if co then
return ifTrue
else
return ifFalse
endProcedure if
/*--- embedded ASSignement:
assign the second argument to the variable with name in first arg
and return the value assigned ----------------------------------*/
ass:
call value arg(1), arg(2)
return arg(2)
/*--- embedded ASSignement only if NotNull:
assign the second argument to the variable with name in first arg
if the second arg is not null, return new value ---------------*/
assIf:
if arg(2) == '' then
return value(arg(1))
call value arg(1), arg(2)
return arg(2)
/*--- return first nonNull argument ---------------------------------*/
nn:
if arg(1) \== '' then
return arg(1)
if arg(2) \== '' then
return arg(2)
call err 'nn() both args empty'
/*--- embedded ASSignement return NotNull:
assign the second argument to the variable with name in first arg
and return 1 if value not null, 0 if null ----------------------*/
assNN:
call value arg(1), arg(2)
return arg(2) \== ''
/*--- return current time and cpu usage ------------------------------*/
timing: procedure expose m.
return return time() 'ela='time('E') 'cpu='sysvar('syscpu'),
'su='sysvar('syssrv')
timingTest: procedure expose m.
say 'begin' timing() sysvar('sysnode')
do 30000000
end
say 'end ' timing()
return
/*--- sleep several seconds ------------------------------------------*/
sleep: procedure expose m.
parse arg secs, sayIt
if sayit <> 0 then
say 'sleeping' secs 'secs' time()
CALL SYSCALLS 'ON'
ADDRESS SYSCALL "sleep" secs
CALL SYSCALLS 'OFF'
if sayit <> 0 then
say 'slept' secs 'secs' time()
return
endProcedure sleep
/*--- elongate inp with spaces up to given len -----------------------*/
elong: procedure expose m.
parse arg inp, len
if length(inp) >= len then
return inp
return left(inp, len)
endProcedure elong
/*--- quote string txt using quoteChar qu ("""" ==> ") ---------------*/
quote: procedure expose m.
parse arg txt, qu
if qu = '' then
qu = '"'
res = qu
ix = 1
do forever
qx = pos(qu, txt, ix)
if qx = 0 then
return res || substr(txt, ix) || qu
res = res || substr(txt, ix, qx-ix) || qu || qu
ix = qx + length(qu)
end
endProcedure quote
/*--- return the count of occurrences of needle in heyStack ----------*/
posCount: procedure expose m.
parse arg needle, hayStack, start, fin
if start = '' then
start = 1
if fin = '' then
fin = length(hayStack) + 1 - length(needle)
do cnt = 0 by 1
start = pos(needle, haystack, start)
if start < 1 | start > fin then
return cnt
start = start + length(needle)
end
endProcedure posCount
repAll: procedure expose m.
parse arg src, w, new
res = ''
cx = 1
do forever
nx = pos(w, src, cx)
if nx < 1 then
return res || substr(src, cx)
res = res || substr(src, cx, nx-cx) || new
cx = nx + length(w)
end
endProcedure repAll
repAllWords: procedure expose m.
parse arg src, w, new
res = ''
wx = 0
cx = 1
do forever
wx = wordPos(w, src, wx+1)
if wx < 1 then
return res || substr(src, cx)
nx = wordindex(src, wx)
res = res || substr(src, cx, nx-cx) || new
cx = nx + length(w)
end
endProcedure repAllWords
/* copy ut end ********************************************************/
/* copy adrTso begin *************************************************/
/*--- send ggTsoCmd to tso, fail if rc <> 0 or not listed in ggRet ---*/
adrTso:
parse arg ggTsoCmd, ggRet
address tso ggTsoCmd
if rc == 0 then return 0
else if ggRet == '*' then return rc
else if wordPos(rc, ggRet) > 0 then return rc
else
call err 'adrTso rc' rc 'for' ggTsoCmd
return /* end adrTso */
/*--- format dsn from tso format to jcl format -----------------------*/
dsn2jcl: procedure expose m.
parse upper arg dsn ., addPrefix
if left(dsn,1) = "'" then
return strip(dsn, 'b', "'")
sp = sysvar('SYSPREF')
if sp == '' then
sp = userid()
cx = pos('~', dsn)
if cx < 1 & addPrefix == 1 then
return sp'.'dsn
do while cx \== 0
le = left(dsn, cx-1)
ri = substr(dsn, cx+1)
if right(le, 1) == '.' | left(ri, 1) == '.' then
dsn = le || sp || ri
else
dsn = le || left('.', le \== '') || sp ,
|| left('.', ri \== '') || ri
cx = pos('~', spec, cx)
end
return dsn
endProcedure dsn2Jcl
/*--- format dsn from jcl format to tso format -----------------------*/
jcl2dsn: procedure expose m.
parse arg dsn .
return "'"dsn"'"
endProcedure jcl2dsn
dsnSetMbr: procedure expose m.
parse arg dsn, mbr
bx = pos('(', dsn)
if bx > 0 then
dsn = strip(left(dsn, bx-1))
if mbr <> '' then
dsn = dsn'('strip(mbr)')'
return dsn
endProcedure dsnSetMbr
dsnGetMbr: procedure expose m.
parse arg dsn
lx = pos('(', dsn)
rx = pos(')', dsn, lx+1)
if lx < 1 then
return ''
else if lx < rx then
return substr(dsn, lx+1, rx-lx-1)
else
return strip(substr(dsn,lx+1))
endProcedure dsnGetMbr
/**********************************************************************
io: read or write a dataset with the following callsequences:
read: readDDBegin, readDD*, readDDEnd
write: writeBegin, writeDD*, writeEnd
readDD returns true if data read, false at eof
***********************************************************************/
/*--- prepare reading from a DD --------------------------------------*/
readDDBegin: procedure expose m.
parse upper arg ggDD
call errAddCleanup 'call readDDEnd' ggDD', "*"'
return /* end readDDBegin */
/*--- read from DD ggDD into ggSt, return false at eof ---------------*/
readDD:
parse arg ggDD, ggSt, ggCnt
if ggCnt = '' then
ggCnt = 100
call adrTso 'execio' ggCnt 'diskr' ggDD '(stem' ggSt')', 2
return (value(ggSt'0') > 0)
return /* end readDD */
/*--- finish reading DD ggDD ----------------------------------------*/
readDDEnd: procedure expose m.
parse upper arg ggDD, ggRet
call errRmCleanup 'call readDDEnd' ggDD', "*"'
return adrTso('execio 0 diskr' ggDD '(finis)', ggRet)
endProcedure readDDEnd
/*--- prepare writing to DD ggDD -------------------------------------*/
writeDDBegin: procedure expose m.
parse upper arg ggDD
/* ensure file is erased, if no records are written */
call adrTso 'execio' 0 'diskw' ggDD '(open)'
call errAddCleanup 'call writeDDEnd' ggDD', "*"'
return /* end writeDDBegin */
/*--- write to gg ggDD from stem ggSt, ggCnt records -----------------*/
writeDD:
parse arg ggDD, ggSt, ggCnt
if ggCnt == '' then
ggCnt = value(ggst'0')
call adrTso 'execio' ggCnt 'diskw' ggDD '(stem' ggSt')'
return
endSubroutine writeDD
/*--- end writing to dd ggDD (close) --------------------------------*/
writeDDEnd: procedure expose m.
parse upper arg ggDD, ggRet
call errRmCleanup 'call writeDDEnd' ggDD', "*"'
return adrTso('execio 0 diskw' ggDD '(finis)', ggRet)
endProcedure writeDDEnd
/*--- readNx: read next line, using buffer ---------------------------*/
/*--- begin: allocate dsnSpec and ini ------------------------ -------*/
readNxBegin: procedure expose m.
parse arg m, m.m.dsn, m.m.dd, m.m.Cnt
if m.m.dd = '' then
m.m.dd = 'DDNX'
if m.m.cnt = '' then
m.m.cnt = 1000
m.m.cx = m.m.cnt + 999
m.m.buf0x = 0
m.m.0 = 0
call dsnAlloc 'dd('m.m.dd')' m.m.dsn
call readDDBegin m.m.dd
return m
endProcedure readDDNxBegin
/*--- return the stem of the next line, or '' at end -----------------*/
readNx: procedure expose m.
parse arg m
ix = m.m.cx + 1
m.m.cx = ix
if m.m.cx <= m.m.0 then
return m'.'ix
m.m.buf0x = m.m.buf0x + m.m.0
if \ readDD(m.m.dd, 'M.'m'.', m.m.cnt)then
return ''
m.m.cx = 1
return m'.1'
endProcedure readDDNx
/*--- return the position (line number) of reader
plus le characters of the current line (default 50) ------*/
readnxPos: procedure expose m.
parse arg m, le
li = m'.'m.m.cx
li = strip(m.li, 't')
if arg() < 2 then
le = 50
if le < 1 then
li = ''
else if length(li) <= le then
li = ':' li
else
li = ':' left(li, le-3)'...'
return 'line' (m.m.buf0x + m.m.cx)li
endProcedure readnxPos
/*--- close and deallocate ------------------------------------------*/
readNxEnd: procedure expose m.
parse arg m
call readDDEnd m.m.dd
call tsoFree m.m.dd
return
endProcedure readDDNxEnd
/*--- standardise a dsn spec
word1 dsName or -
word2 dd or -
word3 disp or -
word4 to first : attributes in tso format
after first : attributes for new allocation
----------------------------------------------------------------------*/
dsnSpec: procedure expose m.
parse upper arg spec
rr = '' /* put leading - in separate words */
do sx=1 while words(rr) < 3 & wx \= ''
wx = word(spec, sx)
do while abbrev(wx, '-') & words(rr) < 3
wx = substr(wx, 2)
rr = rr '-'
end
rr = rr wx
end
spec = rr subWord(spec, sx)
na = ''
dd = ''
di = ''
if left(spec, 1) = '&' then /* external spec is handled ok */
spec = strip(substr(spec, 2))
do wx=1 by 1
w = word(spec, wx)
if w = '' | abbrev(w, '.') | abbrev(w, ':') then
leave
else if wordPos(w, 'OLD SHR MOD NEW')>0 | abbrev(w, 'SYSO') then
di = w
else if w = 'CATALOG' then
di = di w
else if abbrev(w, 'DD(') then
dd = substr(w, 4, length(w)-4)
else if abbrev(w, 'DSN(') then
na = strip(substr(w, 5, length(w)-5))
else if na == '' then
na = dsn2jcl(w)
else if dd == '' then
dd = w
else if di == '' then
di = w
else
leave
end
if na == '' then
na = '-'
else if abbrev(na, "'") then
na = substr(na, 2, length(na)-2)
if dd == '' then dd = '-'
if di == '' then di = '-'
re = subword(spec, wx)
if abbrev(re, '.') then
re = substr(re, 2)
return na dd di re
endProcedure dsnSpec
/*--- alloc a dsn with dsnAlloc
if the dsn is inuse wait and retry
until either the allocation is successfull
or the timeout occurs --------------------------------------*/
dsnAllocWait: procedure expose m.
parse upper arg spec, pDi, pDD, timeOut
x = max(1, arg() - 1)
do rt=0
m.adrTsoAl.1 = ''
m.adrTsoAl.2 = ''
m.adrTsoAl.3 = ''
call outtrap m.adrTsoAl.
res = dsnAlloc(spec, pDi, pDD, '*')
call outtrap off
if \ abbrev(res, ' ') then
return res
msg = m.adrTsoAl.1'\n'm.adrTsoAl.2'\n'm.adrTsoAl.3
if rt > timeOut & timeOut \== '' then
return err('timeout allocating' spec time() '\n'msg)
if pos('DATA SET IS ALLOCATED TO ANOTHER', msg) < 1 then
return err('allocating' spec'\n'msg)
say time() 'sleep and retry alloc' spec
call sleep 1, 0
end
endProcedure dsnAllocWait
/*--- alloc a dsn or a dd
spec '-'<ddName>
datasetName? disposition? '.'? attributes? (':' newAtts)?
disp default disposition
dd default dd name
retRc erlaubte ReturnCodes (leer = 0)
returns if ok then ddName <rexx for free> otherwise rc -----*/
dsnAlloc: procedure expose m.
parse upper arg spec, pDi, pDD, retRc
parse value dsnSpec(spec) with na dd di rest
if na = '-' then
m.dsnAlloc.dsn = ''
else
m.dsnAlloc.dsn = na
if na == '-' & dd \== '-' & di == '-' & rest = '' then
return dd
if dd == '-' & pDD \== '' then
dd = pDD
if dd == '-' then do
if symbol('m.adrTso.ddNum') = 'VAR' then
dd = m.adrTso.ddNum + 1
else
dd = 1
m.adrTso.ddNum = dd
dd = 'DD' || dd
end
if di = '-' & pDi \== '' then
di = pDi
if di = '-' then
di = 'SHR'
else if pos('(', na) < 1 then
nop
else if di = 'MOD' then
call err 'disp mod for' na
else
di = 'SHR'
if pos('/', na) > 0 then
return csmAlloc(na dd di rest, retRc)
else
return tsoAlloc(na dd di rest, retRc)
endProcedure dsnAlloc
tsoAlloc: procedure expose m.
parse arg na dd disp rest ':' nn, retRc
c = 'alloc dd('dd')' disp
if na \== '-' then
c = c "DSN('"na"')"
else if disp = 'NEW' and nn \== '' then
c = c dsnCreateAtts(,nn)
call outtrap m.adrTsoAl.
alRc = adrTso(c rest, '*')
call outtrap off
if alRc = 0 then do
call errAddCleanup 'call tsoFree' dd', "*"'
return dd 'call tsoFree' dd';'
end
if nn \= '' & wordPos(disp, 'OLD SHR') > 0 ,
& sysDsn("'"m.dsnAlloc.dsn"'") == 'DATASET NOT FOUND' then do
say 'tsoAlloc creating' c rest ':'nn
call adrTso 'alloc dd('dd') new catalog' dsnCreateAtts(na, nn)
call adrTso 'free dd('dd')'
return tsoAlloc(na dd disp rest, retRc)
end
do ax=1 to m.adrTsoAl.0
say m.adrTsoal.ax
end
if retRc = '*' | wordPos(alRc, retRc) > 0 then
return ' ' alRc
call err 'tsoAlloc rc' alRc 'for' c rest
endProcedure tsoAlloc
tsoAtts: procedure expose m.
parse arg dsn
rc = listDsi("'"dsn"' SMSINFO")
if rc = 0 then
mv = ''
else if rc = 4 & sysReason = 19 then do
mv = 'UNITCNT(30)'
say 'multi volume' mv
end
else if rc ^= 0 then
call err 'listDsi rc' rc 'reason' sysReason,
sysMsgLvl1 sysMsgLvl2
al = 'CAT'
al = ''
if right(sysDsSms, 7) == 'LIBRARY' ,
| abbrev(sysDsSms, 'PDS') then
al = al 'DSNTYPE(LIBRARY)'
if sysUnits = 'TRACK' then
sysUnits = 'TRACKS'
al = al "DSORG("sysDSorg") MGMTCLAS("sysMgmtClass")",
"DATACLAS("sysDataClass")" ,
"RECFM("translate('1 2 3', ' 'sysREcFM, ' 123')")",
"LRECL("SYSLRECL")",
"blksize("sysBLkSIZE")",
"SPACE("sysPrimary"," sysSeconds")" sysUnits mv
return al
endProcedure tsoAtts
tsoFree: procedure expose m.
parse arg dd, ggRet
call adrTso 'free dd('dd')', ggRet
call errRmCleanup 'call tsoFree' dd', "*"'
return
endProcedure tsoFree
dsnCreateAtts: procedure expose m.
parse arg dsn, atts, forCsm
forCsm = forCsm == 1
aU = ' 'translate(atts)
if abbrev(atts, ':') then do
parse var atts a1 atts
bl = 32760
rl = substr(a1, 3)
if abbrev(a1, ':F') then do
if rl = '' then
rl = 80
recfm='f b'
bl = bl - (bl // rl)
end
else do
if rl = '' then
rl = bl-4
recfm = substr(a1, 2, 1) 'b'
end
if forCsm then
atts = atts "recfm("space(recfm, 0)") lrecl("rl")",
"blkSize("bl")"
else
atts = atts "recfm("recfm") lrecl("rl") block("bl")"
end
if pos('(', dsn) > 0 & pos(' DSNTYPE(', aU) < 1 ,
& pos(' DSORG(', aU) < 1 then
atts = atts 'dsntype(library) dsorg(po)'
if pos(' MGMTCLAS(', aU) < 1 then
atts = atts 'mgmtclas(COM#A091)'
if pos(' SPACE(', aU) < 1 then
if forCsm then
atts = atts 'space(10, 1000) cylinder'
else
atts = atts 'space(10, 1000) cyl'
if dsn == '' then
return atts
return "dataset('"dsnSetMbr(dsn)"')" atts
endProcedure dsnCreateAtts
/*--- read the dataset specified in ggDsnSpec to stem ggSt -----------*/
readDSN:
parse arg ggDsnSpec, ggSt
ggAlloc = dsnAlloc(ggDsnSpec, 'SHR', 'readDsN')
call adrTso 'execio * diskr' word(ggAlloc, 1) '(stem' ggSt' finis)'
interpret subword(ggAlloc, 2)
return
endSubroutine readDsn
/*--- write the dataset specified in ggDsnSpec from stem ggSt
write ggCnt records if not empty otherwise ggst0
if ggSay 1 then say ... records written to ... -------------*/
writeDSN:
parse arg ggDsnSpec, ggSt, ggCnt, ggSay
if ggCnt == '' then
ggCnt = value(ggst'0')
ggAlloc = dsnAlloc(ggDsnSpec, 'OLD', 'readDsN')
call adrTso 'execio' ggCnt 'diskw' word(ggAlloc, 1) ,
'(stem' ggSt 'open finis)'
interpret subword(ggAlloc, 2)
if ggSay == 1 | m.debug == 1 then
say ggCnt 'records written to' ggDsnSpec
return
endSubroutine writeDsn
copyDSN: procedure expose m.
parse arg frSpec, toSpec, ggSay
frDD = dsnAlloc(frSpec, 'SHR', 'FRDD')
toDD = dsnAlloc(toSpec, 'OLD', 'TODD')
call readDDBegin word(frDD, 1)
call writeDDBegin word(toDD, 1)
cnt = 0
do while readDD(word(frDD, 1), r.)
call writeDD word(toDD, 1), r.
cnt = cnt + r.0
end
call readDDEnd word(frDD, 1)
call writeDDEnd word(toDD, 1)
interpret ';' subword(frDD, 2) '; ; ;' subword(toDD, 2)
if ggSay == 1 | m.debug == 1 then
say cnt 'records copied from' frSpec 'to' to toSpec
return
endSubroutine writeDsn
/* copy adrTso end ****************************************************/
/* copy err begin ******************************************************
messages, errorhandling,help
***********************************************************************/
errIni: procedure expose m.
if m.err.ini == 1 then
return
call outIni
m.err.ini = 1
m.err.handler = ''
m.err.cleanup = ';'
m.err.opt = ''
return
endProcedure errIni
/* configure err -----------------------------------------------------*/
errReset: procedure expose m.
call errIni
parse arg m.err.opt, m.err.handler
if pos('I', translate(m.err.opt)) > 0 then
if errOS() \== 'LINUX' then
if sysVar('sysISPF') = 'ACTIVE' then
call adrIsp 'control errors return'
return
endSubroutine errReset
/*--- error routine: abend with message ------------------------------*/
err:
parse arg ggTxt, ggOpt
call errIni
drop err handler cleanup opt call return
if ggOpt == '' & m.err.handler \== '' then do
if 1 then do /* no detection of recursive err call loop
--> will anyway fail by stack overflow */
interpret m.err.handler
end
else do
/* avoid recursive err call loop */
drop call return
if symbol('m.err.call') \== 'VAR' then
m.err.call = 1
else
m.err.call = m.err.call + 1
if m.err.call > 10 then do
say 'errHandler loop:' m.err.handler
end
else do
m.err.return = 1
call errInterpret m.err.handler
m.err.call = m.err.call - 1
if m.err.return then
return result
end
end
end
call outDst
call errSay ggTxt, 'e'
call errCleanup
if ggOpt == '' then
ggOpt = m.err.opt
ggOpt = translate(ggOpt)
if pos('T', ggOpt) > 0 then do
trace ?r
say 'trace ?r in err'
end
if pos('H', ggOpt) > 0 then do
call errSay 'divide by zero to show stackHistory', 'e'
x = 1 / 0
end
call errSay 'exit(12)', 'e'
exit errSetRc(12)
endSubroutine err
/*--- error routine: user message cleanup exit -----------------------*/
errEx:
parse arg ggTxt
call errIni
call outDst
call errSay ggTxt
call errCleanup
exit 8
endProcedure errEx
errAddCleanup: procedure expose m.
parse arg code
if m.err.ini \== 1 then
call errIni
/* concatenate backwards, then it is executed also backwards */
m.err.cleanup = ';'code || m.err.cleanup
return
endProcedure errAddCleanup
errRmCleanup: procedure expose m.
parse arg code
if m.err.ini \== 1 then
call errIni
cx = pos(';'code';', m.err.cleanup)
if cx > 0 then
m.err.cleanup = left(m.err.cleanup, cx) ,
|| substr(m.err.cleanup, cx + length(code)+2)
return
endProcedure errRmCleanup
errCleanup: procedure expose m.
call errIni
cl = m.err.cleanup
if cl = ';' then
return
m.err.cleanup = ';'
say 'err cleanup begin' cl
call errInterpret cl
say 'err cleanup end' cl
return
endProcedure errCleanup
errInterpret: procedure expose m.
parse arg code
interpret code
m.err.return = 0
return
endProcedure errInterpret
/*--- assert that the passed rexx expression evaluates to true -------*/
assert:
interpret 'assertRes =' arg(1)
if \ assertRes then
call err 'assert failed' arg(1)':' arg(2)
return
endProcedure assert
/*--- output an errorMessage msg with pref pref
split message in lines at '/n' ---------------------------*/
errSay: procedure expose m.
parse arg msg, pref
parse source . . ggS3 . /* current rexx */
if pref == 'e' then
msg = 'fatal error in' ggS3':' msg
else if pref == 'w' then
msg = 'warning in' ggS3':' msg
else if pref \== '' then
msg = pref':' msg
return outNl(msg)
endProcedure errSay
/*--- abend with Message after displaying help -----------------------*/
errHelp: procedure expose m.
parse arg msg, op
call errSay msg, 'e'
call help
call err msg, op
endProcedure errHelp
/*--- return the Operating System we are running on: TSO or LINUX ---*/
errOS: procedure expose m.
parse source os .
return os
endProcedure errOS
/*--- set rc for ispf: -------------------------------------------------
if a cmd is run by ispStart, its RC is ignored,
but ISPF passes the value of the shared varible 3IspfRc
back as return code
----------------------------------------------------------------------*/
errSetRc: procedure expose m.
parse arg zIspfRc
if errOS() \== 'LINUX' then
if sysVar('sysISPF') = 'ACTIVE' then
address ispExec vput 'zIspfRc' shared
return zIspfRc
endProcedure errSetRc
/*--- output a trace message if m.tr is set -----------------------*/
trc: procedure expose m.
parse arg msg
if m.trace == 1 then
call out 'trc:' msg
return
endProcedure trc
debug: procedure expose m.
parse arg msg
if m.debug == 1 then
call out 'debug' msg
return
endProcedure debug
/*--- display the first comment block of the source as help ----------*/
help: procedure expose m.
parse source . . s3 .
call out right(' help for rexx' s3, 79, '*')
do ax=1 to arg()
say ' ' arg(ax)
end
do lx=1 by 1
if pos('/*', sourceLine(lx)) > 0 then
leave
else if lx > 10 then do
call out 'initial commentblock not found for help'
return
end
end
do lx=lx+1 by 1
li = strip(sourceLine(lx), 't', ' ')
if pos('*/', li) > 0 then
leave
call out li
end
call out right(' end help for rexx' s3, 79, '*')
return 4
endProcedure help
/*--- output all lines (separated by '\n') of all args --------------*/
outNl: procedure expose m.
do ax=1 to max(1, arg())
msg = arg(ax)
sx = 0
bx = -1
do lx=1 until bx >= length(msg)
ex = pos('\n', msg, bx+2)
if ex < 1 then
ex = length(msg)+1
call out substr(msg, bx+2, ex-bx-2)
bx = ex
end
end
return 0
endProcedure outNl
/* copy err end *****************************************************/
/* copy out begin ******************************************************
out interface simple with say only
***********************************************************************/
outIni: procedure expose m.
parse arg msg
return
endProcedure outIni
/*--- output a message to the current destination -------------------*/
out: procedure expose m.
parse arg msg
say msg
return 0
endProcedure out
/*--- set a new out destination and return old one ------------------*/
outDst: procedure expose m.
parse arg d
return ''
endProcedure outDst
/* return the contents of a string or std input */
inp2str: procedure expose m.
parse arg rdr, opt
return rdr
endProcedure inp2str
/* copy out end *****************************************************/
}¢--- A540769.WK.REXX.O13(BESENWAR) cre=2012-09-05 mod=2012-09-21-13.20.40 A540769 ---
$#@
$=dbSy=DBTF
$=hh=3
$=partLim=999999999
$=previewOnly=0
call sqlConnect $dbSy
$;
$<@/sql/
$=ptaInc =- $dbSy = 'DBOF' & sysvar('SYSNODE') == 'RR2'
if $ptaInc then $@=¢
with frTo as
(
select case when strip(min(dbName)) like '_*' and min(dbName) > 'A*'
then left(min(dbName), 1) else ''
end fr,
case when strip(max(dbName)) like '_*'
then left(max(dbName), 1) else ''
end || x'FFFF' to
FROM DLC.OBJECTS_V13
WHERE EXCLUDE='I' AND NAME='QDDBOF INCL EXCLUDES'
)
, p as
$! else $@=¢
with p as
$!
$@=¢
(
SELECT PT.DBNAME, pt.tsName, pt.partition,
( SELECT char(timestamp) || icType
FROM SYSIBM.SYSCOPY CP
WHERE PT.DBNAME = CP.DBNAME
AND PT.TSNAME = CP.TSNAME
AND cp.dsNum in (PT.PARTITION, 0)
AND CP.ICTYPE IN ('F','R','X')
order by timestamp desc
fetch first 1 row only
) laFull,
r.nActive,
COPYLASTTIME,
COPYUPDATEDPAGES,
COPYCHANGES,
COPYUPDATETIME
---- end @proc selIncrCopy: select fullcopy etc. --------------------
FROM SYSIBM.SYSDATABASE DB
$!
if $ptaInc then $@=¢
join frTo
on db.name >= frTo.fr and db.name <= frTo.to
$!
$@=¢
join SYSIBM.SYSTABLESPACE TS
on DB.NAME = PT.DBNAME
join SYSIBM.SYSTABLEPART PT
on DB.NAME = TS.DBNAME
AND TS.NAME = PT.TSNAME
left join SYSIBM.SYSTABLESpaceStats r
on r.dbid = db.dbid
and r.psid = ts.psid
and r.partition = pt.partition
WHERE 0 = 0
---- end @proc missFUllcopies1: fehlende Fullcopies -----------------
---- begin @proc exclude ----------------------------------------------
----- begin @proc exclGen: gemeinsame excludes -------------------------
AND NOT (PT.DBNAME like 'DSNDB%') -- DB2 CATALOG
AND NOT (PT.DBNAME LIKE 'DSN8%') -- IBM TEST DB
AND NOT (PT.DBNAME LIKE 'WKDBD%') -- DB2 WORK DATABASE
AND NOT (PT.DBNAME = 'DSNTESQ') -- DB2 CATALOG CLONE
AND NOT (PT.DBNAME LIKE 'DB2MAPP%') -- REORG MAPPING TABLES
AND NOT (PT.DBNAME LIKE 'DB2PLAN%') -- explain tables
and not translate(PT.dbName, '999999999AAAAAA', '012345678FISWXY')
= 'DA999999' -- user datenbanken
AND NOT (PT.DBNAME LIKE 'DB2ALA%') -- marec generated
AND NOT (PT.DBNAME LIKE '%MAREC%') -- marec generated
AND NOT (PT.DBNAME LIKE 'DACME%') -- Mail Heinz Bühler
AND NOT (PT.DBNAME LIKE 'DGDB%') -- PROTOTYPEN
AND NOT (PT.DBNAME LIKE 'DGO%') -- PROTOTYPEN
AND NOT (PT.DBNAME LIKE '%A1X%') -- Neue Prototypen
AND NOT (PT.DBNAME LIKE 'DAU%') -- Schulung Gerrit
AND NOT (PT.DBNAME LIKE 'IDT%') -- ibm tools
---- end @proc exclGen: gemeinsame excludes ------------------------
AND NOT (PT.DBNAME LIKE 'OE02%') -- Mail Ivo Eichmann
AND NOT (PT.DBNAME LIKE 'CSQ%') -- M-QUEUE DATENBANK
---- end @proc exclude ---------------------------------------------
---- end @proc exclGen: gemeinsame excludes -------------------------
AND NOT (PT.DBNAME = 'XC01A1P' AND PT.TSNAME LIKE 'A2%' )
-- EOS: Armin Breyer
AND NOT (PT.DBNAME = 'XR01A1P' AND PT.TSNAME LIKE 'A2%' )
-- ERET: Armin Breyer
AND NOT (PT.DBNAME = 'CSQDBOF' AND PT.TSNAME like 'TSBLOB%' )
---- end @proc exclude ----------------------------------------------
AND DB.TYPE NOT IN ('T','W')
---- begin @proc missFUllcopies2: fehlende Fullcopies -----------------
AND TS.NTABLES <> 0
AND PT.SPACEF <> -1 -- attention space is sometimes wrong|
and db.Name like 'WI02%' --- ????
)
, q as
(
select case when laFull < char(current timestamp - $-¢168+$hh$! hours)
then 'full old'
when copyUpdateTime > current timestamp - $hh hours
then 'no newUpd'
when nActive * 0.1 <= COPYUPDATEDPAGES then 'full upda'
when COPYUPDATEDPAGES <> 0 or copyChanges <> 0 then 'inc'
else 'no changes'
end copy,
p.*
from p
)
select *
from q
where left(copy, 2) <> 'no'
ORDER BY DBNAME, TSNAME, PARTITION
WITH UR
$!
$/sql/
call sqlSel
m.inc.0 = 0
m.ful.0 = 0
cAll = 0
pAll = 0
$| $@forWith c $@¢
cAll = cAll + 1
if datatype($NACTIVE, 'n') then
pAll = pAll + $NACTIVE
say left($COPY, 10) left($DBNAME, 8) left($TSNAME, 8) ,
right($PARTITION, 5) left($LAFULL, 30)
say right($COPYCHANGES , 12),
|| right('>'$COPYUPDATEDPAGES, 10),
|| right('%'$NACTIVE, 10) ,
left($COPYLASTTIME, 19),
left($COPYUPDATETIME, 19)
if cAll <= $partLim then
call mAdd if(abbrev($COPY, 'inc'), inc, ful),
, ' INCLUDE TABLESPACE' strip($DBNAME)'.'strip($TSNAME),
'PARTLEVEL' if($PARTITION <> 0, $PARTITION)
$!
$;
say 'total' cAll 'parts and' pAll 'pages'
say ' ' m.inc.0 'incremental and' m.ful.0 'full part copies'
$;
$>DSN.BESENWAG.$dbSy(GENINC)
$@makeList-{INC, FULL NO, 'incremental', cAll, pAll}
$;
$>DSN.BESENWAG.$dbSy(GENFUL)
$@makeList-{FUL, FULL YES, 'full' , cAll, pAll}
$; 66
$@proc makeList $@/makeList/
parse arg ,lst, full, tit, cAll, pAll
$** say 'lst' lst 'full' full 'tit' tit 'cAll' cAll 'pAll' pAll
$$- '--' sysvar('sysnode') $dbSy date('s') time()
$$- '-- total : ' cAll 'parts' pAll 'pages'
$$- '--' left(tit, 11) 'copy: ' m.lst.0 'parts'
if $previewOnly then
$$ OPTIONS(PREVIEW)
else
$$ OPTIONS EVENT(ITEMERROR,SKIP)
if m.lst.0 > 0 then $@=¢
$$- ' LISTDEF LST'lst ' -- ' m.lst.0 'parts'
$@do ix=1 to m.lst.0 $$- m.lst.ix
COPY LIST LST$-{lst} COPYDDN(TCOPYD)
PARALLEL $-{full}
SHRLEVEL CHANGE
$!
$/makeList/
$#out 20120921 11:55:08
$#out 20120921 11:54:19
*** run error ***
tsoAlloc rc 12 for alloc dd(CAT1) SHR DSN('DSN.BESENWAG.DBTF.(GENINC)')
$#out 20120921 11:50:55
-- RZ1 DBTF 20120921 11:51:23
-- total : 586 parts 7768857 pages
-- incremental copy: 308 parts
OPTIONS EVENT(ITEMERROR,SKIP)
LISTDEF LSTINC -- 308 parts
INCLUDE TABLESPACE WI02A1T.A100A PARTLEVEL 1
INCLUDE TABLESPACE WI02A1T.A100A PARTLEVEL 2
INCLUDE TABLESPACE WI02A1T.A100A PARTLEVEL 3
INCLUDE TABLESPACE WI02A1T.A100A PARTLEVEL 5
INCLUDE TABLESPACE WI02A1T.A100H PARTLEVEL 1
INCLUDE TABLESPACE WI02A1T.A100H PARTLEVEL 3
INCLUDE TABLESPACE WI02A1T.A100H PARTLEVEL 5
INCLUDE TABLESPACE WI02A1T.A101A PARTLEVEL 1
INCLUDE TABLESPACE WI02A1T.A101A PARTLEVEL 3
INCLUDE TABLESPACE WI02A1T.A101A PARTLEVEL 4
INCLUDE TABLESPACE WI02A1T.A101A PARTLEVEL 7
INCLUDE TABLESPACE WI02A1T.A101A PARTLEVEL 8
INCLUDE TABLESPACE WI02A1T.A101A PARTLEVEL 9
INCLUDE TABLESPACE WI02A1T.A101A PARTLEVEL 10
INCLUDE TABLESPACE WI02A1T.A101A PARTLEVEL 11
INCLUDE TABLESPACE WI02A1T.A101A PARTLEVEL 14
INCLUDE TABLESPACE WI02A1T.A101A PARTLEVEL 15
INCLUDE TABLESPACE WI02A1T.A101A PARTLEVEL 21
INCLUDE TABLESPACE WI02A1T.A101A PARTLEVEL 22
INCLUDE TABLESPACE WI02A1T.A101A PARTLEVEL 29
INCLUDE TABLESPACE WI02A1T.A101A PARTLEVEL 30
INCLUDE TABLESPACE WI02A1T.A101A PARTLEVEL 33
INCLUDE TABLESPACE WI02A1T.A101A PARTLEVEL 34
INCLUDE TABLESPACE WI02A1T.A101A PARTLEVEL 35
INCLUDE TABLESPACE WI02A1T.A101A PARTLEVEL 38
INCLUDE TABLESPACE WI02A1T.A101A PARTLEVEL 43
INCLUDE TABLESPACE WI02A1T.A102A PARTLEVEL 1
INCLUDE TABLESPACE WI02A1T.A102A PARTLEVEL 3
INCLUDE TABLESPACE WI02A1T.A102A PARTLEVEL 4
INCLUDE TABLESPACE WI02A1T.A102A PARTLEVEL 6
INCLUDE TABLESPACE WI02A1T.A102A PARTLEVEL 7
INCLUDE TABLESPACE WI02A1T.A102A PARTLEVEL 10
INCLUDE TABLESPACE WI02A1T.A102A PARTLEVEL 11
INCLUDE TABLESPACE WI02A1T.A102A PARTLEVEL 18
INCLUDE TABLESPACE WI02A1T.A102H PARTLEVEL 1
INCLUDE TABLESPACE WI02A1T.A102H PARTLEVEL 3
INCLUDE TABLESPACE WI02A1T.A102H PARTLEVEL 4
INCLUDE TABLESPACE WI02A1T.A102H PARTLEVEL 6
INCLUDE TABLESPACE WI02A1T.A102H PARTLEVEL 7
INCLUDE TABLESPACE WI02A1T.A102H PARTLEVEL 10
INCLUDE TABLESPACE WI02A1T.A102H PARTLEVEL 11
INCLUDE TABLESPACE WI02A1T.A102H PARTLEVEL 18
INCLUDE TABLESPACE WI02A1T.A102H PARTLEVEL 20
INCLUDE TABLESPACE WI02A1T.A102H PARTLEVEL 24
INCLUDE TABLESPACE WI02A1T.A103A001 PARTLEVEL 10
INCLUDE TABLESPACE WI02A1T.A103A001 PARTLEVEL 16
INCLUDE TABLESPACE WI02A1T.A103A001 PARTLEVEL 18
INCLUDE TABLESPACE WI02A1T.A103A001 PARTLEVEL 19
INCLUDE TABLESPACE WI02A1T.A103A004 PARTLEVEL 7
INCLUDE TABLESPACE WI02A1T.A103A004 PARTLEVEL 15
INCLUDE TABLESPACE WI02A1T.A103A004 PARTLEVEL 17
INCLUDE TABLESPACE WI02A1T.A104A004 PARTLEVEL 2
INCLUDE TABLESPACE WI02A1T.A105A001 PARTLEVEL 3
INCLUDE TABLESPACE WI02A1T.A105A001 PARTLEVEL 6
INCLUDE TABLESPACE WI02A1T.A105A001 PARTLEVEL 10
INCLUDE TABLESPACE WI02A1T.A105A001 PARTLEVEL 12
INCLUDE TABLESPACE WI02A1T.A105A001 PARTLEVEL 13
INCLUDE TABLESPACE WI02A1T.A105A001 PARTLEVEL 14
INCLUDE TABLESPACE WI02A1T.A105A001 PARTLEVEL 16
INCLUDE TABLESPACE WI02A1T.A105A001 PARTLEVEL 17
INCLUDE TABLESPACE WI02A1T.A105A001 PARTLEVEL 19
INCLUDE TABLESPACE WI02A1T.A105A003 PARTLEVEL 3
INCLUDE TABLESPACE WI02A1T.A105A003 PARTLEVEL 6
INCLUDE TABLESPACE WI02A1T.A105A003 PARTLEVEL 15
INCLUDE TABLESPACE WI02A1T.A105A003 PARTLEVEL 17
INCLUDE TABLESPACE WI02A1T.A105A003 PARTLEVEL 18
INCLUDE TABLESPACE WI02A1T.A105A004 PARTLEVEL 17
INCLUDE TABLESPACE WI02A1T.A105A009 PARTLEVEL 12
INCLUDE TABLESPACE WI02A1T.A105A009 PARTLEVEL 15
INCLUDE TABLESPACE WI02A1T.A106A01 PARTLEVEL
INCLUDE TABLESPACE WI02A1T.A106H01 PARTLEVEL
INCLUDE TABLESPACE WI02A1T.A107A PARTLEVEL
INCLUDE TABLESPACE WI02A1T.A108A PARTLEVEL
INCLUDE TABLESPACE WI02A1T.A108H PARTLEVEL
INCLUDE TABLESPACE WI02A1T.A109A001 PARTLEVEL 3
INCLUDE TABLESPACE WI02A1T.A109A001 PARTLEVEL 6
INCLUDE TABLESPACE WI02A1T.A109A001 PARTLEVEL 10
INCLUDE TABLESPACE WI02A1T.A109A001 PARTLEVEL 12
INCLUDE TABLESPACE WI02A1T.A109A001 PARTLEVEL 13
INCLUDE TABLESPACE WI02A1T.A109A001 PARTLEVEL 14
INCLUDE TABLESPACE WI02A1T.A109A001 PARTLEVEL 15
INCLUDE TABLESPACE WI02A1T.A109A001 PARTLEVEL 19
INCLUDE TABLESPACE WI02A1T.A109A009 PARTLEVEL 6
INCLUDE TABLESPACE WI02A1T.A109A009 PARTLEVEL 12
INCLUDE TABLESPACE WI02A1T.A109A009 PARTLEVEL 15
INCLUDE TABLESPACE WI02A1T.A109A009 PARTLEVEL 17
INCLUDE TABLESPACE WI02A1T.A109A009 PARTLEVEL 19
INCLUDE TABLESPACE WI02A1T.A112A003 PARTLEVEL 5
INCLUDE TABLESPACE WI02A1T.A112A004 PARTLEVEL 2
INCLUDE TABLESPACE WI02A1T.A112A006 PARTLEVEL 1
INCLUDE TABLESPACE WI02A1T.A112A009 PARTLEVEL 1
INCLUDE TABLESPACE WI02A1T.A112A009 PARTLEVEL 2
INCLUDE TABLESPACE WI02A1T.A116A PARTLEVEL
INCLUDE TABLESPACE WI02A1T.A117A PARTLEVEL 1
INCLUDE TABLESPACE WI02A1T.A117A PARTLEVEL 4
INCLUDE TABLESPACE WI02A1T.A117A PARTLEVEL 6
INCLUDE TABLESPACE WI02A1T.A117A PARTLEVEL 10
INCLUDE TABLESPACE WI02A1T.A117A PARTLEVEL 20
INCLUDE TABLESPACE WI02A1T.A117H PARTLEVEL 1
INCLUDE TABLESPACE WI02A1T.A117H PARTLEVEL 4
INCLUDE TABLESPACE WI02A1T.A117H PARTLEVEL 10
INCLUDE TABLESPACE WI02A1T.A117H PARTLEVEL 20
INCLUDE TABLESPACE WI02A1T.A120A PARTLEVEL 3
INCLUDE TABLESPACE WI02A1T.A120A PARTLEVEL 6
INCLUDE TABLESPACE WI02A1T.A120A PARTLEVEL 10
INCLUDE TABLESPACE WI02A1T.A120A PARTLEVEL 13
INCLUDE TABLESPACE WI02A1T.A120A PARTLEVEL 14
INCLUDE TABLESPACE WI02A1T.A120A PARTLEVEL 15
INCLUDE TABLESPACE WI02A1T.A120A PARTLEVEL 17
INCLUDE TABLESPACE WI02A1T.A120A PARTLEVEL 20
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 3
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 6
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 9
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 10
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 11
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 12
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 13
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 14
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 16
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 17
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 19
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 22
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 23
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 25
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 26
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 27
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 28
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 29
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 30
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 31
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 32
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 33
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 34
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 35
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 37
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 38
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 39
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 41
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 43
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 44
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 45
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 46
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 47
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 48
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 49
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 50
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 51
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 52
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 53
INCLUDE TABLESPACE WI02A1T.A301A PARTLEVEL
INCLUDE TABLESPACE WI02A1T.A611A PARTLEVEL 1
INCLUDE TABLESPACE WI02A1T.A702A PARTLEVEL
INCLUDE TABLESPACE WI02A1T.A703A PARTLEVEL
INCLUDE TABLESPACE WI02A1T.A707A PARTLEVEL
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 2
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 3
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 4
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 5
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 6
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 7
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 8
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 9
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 10
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 11
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 13
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 15
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 16
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 18
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 20
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 21
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 22
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 23
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 25
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 26
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 27
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 28
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 29
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 30
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 31
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 32
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 33
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 34
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 35
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 36
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 37
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 38
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 41
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 42
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 43
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 44
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 45
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 46
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 51
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 52
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 53
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 54
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 55
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 56
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 57
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 58
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 59
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 60
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 61
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 62
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 63
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 64
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 68
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 69
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 70
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 73
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 74
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 75
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 76
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 77
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 79
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 80
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 81
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 87
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 88
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 90
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 91
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 93
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 94
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 95
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 96
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 98
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 99
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 100
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 101
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 102
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 103
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 104
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 106
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 107
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 108
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 109
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 111
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 112
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 113
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 114
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 116
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 117
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 118
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 119
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 121
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 122
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 123
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 124
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 126
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 127
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 128
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 129
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 130
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 131
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 133
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 134
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 135
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 136
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 137
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 138
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 139
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 140
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 141
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 142
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 143
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 144
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 145
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 146
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 147
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 148
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 149
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 150
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 152
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 153
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 157
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 158
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 159
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 161
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 163
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 164
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 165
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 167
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 168
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 169
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 170
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 171
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 172
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 173
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 174
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 176
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 177
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 179
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 180
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 184
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 185
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 186
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 187
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 188
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 189
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 190
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 191
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 192
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 193
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 194
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 195
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 196
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 197
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 199
COPY LIST LSTINC COPYDDN(TCOPYD)
PARALLEL FULL NO
SHRLEVEL CHANGE
-- RZ1 DBTF 20120921 11:51:23
-- total : 586 parts 7768857 pages
-- full copy: 278 parts
OPTIONS EVENT(ITEMERROR,SKIP)
LISTDEF LSTFUL -- 278 parts
INCLUDE TABLESPACE WI01A1T.A040A PARTLEVEL
INCLUDE TABLESPACE WI01A1T.A043A PARTLEVEL
INCLUDE TABLESPACE WI01A1T.A044A PARTLEVEL
INCLUDE TABLESPACE WI02A1T.A100H PARTLEVEL 2
INCLUDE TABLESPACE WI02A1T.A101H PARTLEVEL 20
INCLUDE TABLESPACE WI02A1T.A102A PARTLEVEL 14
INCLUDE TABLESPACE WI02A1T.A102A PARTLEVEL 19
INCLUDE TABLESPACE WI02A1T.A102A PARTLEVEL 20
INCLUDE TABLESPACE WI02A1T.A102H PARTLEVEL 12
INCLUDE TABLESPACE WI02A1T.A102H PARTLEVEL 14
INCLUDE TABLESPACE WI02A1T.A103A001 PARTLEVEL 1
INCLUDE TABLESPACE WI02A1T.A103A001 PARTLEVEL 3
INCLUDE TABLESPACE WI02A1T.A103A001 PARTLEVEL 4
INCLUDE TABLESPACE WI02A1T.A103A001 PARTLEVEL 6
INCLUDE TABLESPACE WI02A1T.A103A001 PARTLEVEL 7
INCLUDE TABLESPACE WI02A1T.A103A001 PARTLEVEL 8
INCLUDE TABLESPACE WI02A1T.A103A001 PARTLEVEL 9
INCLUDE TABLESPACE WI02A1T.A103A001 PARTLEVEL 11
INCLUDE TABLESPACE WI02A1T.A103A001 PARTLEVEL 12
INCLUDE TABLESPACE WI02A1T.A103A001 PARTLEVEL 13
INCLUDE TABLESPACE WI02A1T.A103A001 PARTLEVEL 14
INCLUDE TABLESPACE WI02A1T.A103A001 PARTLEVEL 15
INCLUDE TABLESPACE WI02A1T.A103A001 PARTLEVEL 17
INCLUDE TABLESPACE WI02A1T.A103A001 PARTLEVEL 20
INCLUDE TABLESPACE WI02A1T.A103A002 PARTLEVEL 4
INCLUDE TABLESPACE WI02A1T.A103A002 PARTLEVEL 6
INCLUDE TABLESPACE WI02A1T.A103A003 PARTLEVEL 1
INCLUDE TABLESPACE WI02A1T.A103A003 PARTLEVEL 2
INCLUDE TABLESPACE WI02A1T.A103A003 PARTLEVEL 3
INCLUDE TABLESPACE WI02A1T.A103A003 PARTLEVEL 4
INCLUDE TABLESPACE WI02A1T.A103A003 PARTLEVEL 5
INCLUDE TABLESPACE WI02A1T.A103A003 PARTLEVEL 6
INCLUDE TABLESPACE WI02A1T.A103A003 PARTLEVEL 7
INCLUDE TABLESPACE WI02A1T.A103A003 PARTLEVEL 8
INCLUDE TABLESPACE WI02A1T.A103A003 PARTLEVEL 9
INCLUDE TABLESPACE WI02A1T.A103A003 PARTLEVEL 10
INCLUDE TABLESPACE WI02A1T.A103A003 PARTLEVEL 11
INCLUDE TABLESPACE WI02A1T.A103A003 PARTLEVEL 12
INCLUDE TABLESPACE WI02A1T.A103A003 PARTLEVEL 13
INCLUDE TABLESPACE WI02A1T.A103A003 PARTLEVEL 14
INCLUDE TABLESPACE WI02A1T.A103A003 PARTLEVEL 15
INCLUDE TABLESPACE WI02A1T.A103A003 PARTLEVEL 16
INCLUDE TABLESPACE WI02A1T.A103A003 PARTLEVEL 17
INCLUDE TABLESPACE WI02A1T.A103A003 PARTLEVEL 18
INCLUDE TABLESPACE WI02A1T.A103A003 PARTLEVEL 19
INCLUDE TABLESPACE WI02A1T.A103A003 PARTLEVEL 20
INCLUDE TABLESPACE WI02A1T.A103A004 PARTLEVEL 1
INCLUDE TABLESPACE WI02A1T.A103A004 PARTLEVEL 3
INCLUDE TABLESPACE WI02A1T.A103A004 PARTLEVEL 6
INCLUDE TABLESPACE WI02A1T.A103A004 PARTLEVEL 8
INCLUDE TABLESPACE WI02A1T.A103A004 PARTLEVEL 10
INCLUDE TABLESPACE WI02A1T.A103A004 PARTLEVEL 12
INCLUDE TABLESPACE WI02A1T.A103A004 PARTLEVEL 13
INCLUDE TABLESPACE WI02A1T.A103A004 PARTLEVEL 14
INCLUDE TABLESPACE WI02A1T.A103A004 PARTLEVEL 16
INCLUDE TABLESPACE WI02A1T.A103A004 PARTLEVEL 20
INCLUDE TABLESPACE WI02A1T.A103A005 PARTLEVEL 1
INCLUDE TABLESPACE WI02A1T.A103A005 PARTLEVEL 2
INCLUDE TABLESPACE WI02A1T.A103A005 PARTLEVEL 5
INCLUDE TABLESPACE WI02A1T.A103A005 PARTLEVEL 6
INCLUDE TABLESPACE WI02A1T.A103A005 PARTLEVEL 8
INCLUDE TABLESPACE WI02A1T.A103A005 PARTLEVEL 9
INCLUDE TABLESPACE WI02A1T.A103A005 PARTLEVEL 10
INCLUDE TABLESPACE WI02A1T.A103A005 PARTLEVEL 11
INCLUDE TABLESPACE WI02A1T.A103A005 PARTLEVEL 12
INCLUDE TABLESPACE WI02A1T.A103A005 PARTLEVEL 14
INCLUDE TABLESPACE WI02A1T.A103A005 PARTLEVEL 16
INCLUDE TABLESPACE WI02A1T.A103A005 PARTLEVEL 17
INCLUDE TABLESPACE WI02A1T.A103A005 PARTLEVEL 18
INCLUDE TABLESPACE WI02A1T.A103A005 PARTLEVEL 19
INCLUDE TABLESPACE WI02A1T.A103A005 PARTLEVEL 20
INCLUDE TABLESPACE WI02A1T.A103A006 PARTLEVEL 1
INCLUDE TABLESPACE WI02A1T.A103A006 PARTLEVEL 2
INCLUDE TABLESPACE WI02A1T.A103A006 PARTLEVEL 3
INCLUDE TABLESPACE WI02A1T.A103A006 PARTLEVEL 6
INCLUDE TABLESPACE WI02A1T.A103A006 PARTLEVEL 7
INCLUDE TABLESPACE WI02A1T.A103A006 PARTLEVEL 8
INCLUDE TABLESPACE WI02A1T.A103A006 PARTLEVEL 9
INCLUDE TABLESPACE WI02A1T.A103A006 PARTLEVEL 10
INCLUDE TABLESPACE WI02A1T.A103A006 PARTLEVEL 11
INCLUDE TABLESPACE WI02A1T.A103A006 PARTLEVEL 12
INCLUDE TABLESPACE WI02A1T.A103A006 PARTLEVEL 13
INCLUDE TABLESPACE WI02A1T.A103A006 PARTLEVEL 14
INCLUDE TABLESPACE WI02A1T.A103A006 PARTLEVEL 16
INCLUDE TABLESPACE WI02A1T.A103A006 PARTLEVEL 17
INCLUDE TABLESPACE WI02A1T.A103A006 PARTLEVEL 18
INCLUDE TABLESPACE WI02A1T.A103A006 PARTLEVEL 19
INCLUDE TABLESPACE WI02A1T.A103A006 PARTLEVEL 20
INCLUDE TABLESPACE WI02A1T.A103A007 PARTLEVEL 1
INCLUDE TABLESPACE WI02A1T.A103A007 PARTLEVEL 3
INCLUDE TABLESPACE WI02A1T.A103A007 PARTLEVEL 5
INCLUDE TABLESPACE WI02A1T.A103A007 PARTLEVEL 9
INCLUDE TABLESPACE WI02A1T.A103A007 PARTLEVEL 10
INCLUDE TABLESPACE WI02A1T.A103A007 PARTLEVEL 11
INCLUDE TABLESPACE WI02A1T.A103A007 PARTLEVEL 13
INCLUDE TABLESPACE WI02A1T.A103A007 PARTLEVEL 14
INCLUDE TABLESPACE WI02A1T.A103A007 PARTLEVEL 15
INCLUDE TABLESPACE WI02A1T.A103A007 PARTLEVEL 16
INCLUDE TABLESPACE WI02A1T.A103A007 PARTLEVEL 17
INCLUDE TABLESPACE WI02A1T.A103A007 PARTLEVEL 18
INCLUDE TABLESPACE WI02A1T.A103A007 PARTLEVEL 19
INCLUDE TABLESPACE WI02A1T.A103A007 PARTLEVEL 20
INCLUDE TABLESPACE WI02A1T.A103A008 PARTLEVEL 1
INCLUDE TABLESPACE WI02A1T.A103A008 PARTLEVEL 2
INCLUDE TABLESPACE WI02A1T.A103A008 PARTLEVEL 3
INCLUDE TABLESPACE WI02A1T.A103A008 PARTLEVEL 4
INCLUDE TABLESPACE WI02A1T.A103A008 PARTLEVEL 5
INCLUDE TABLESPACE WI02A1T.A103A008 PARTLEVEL 6
INCLUDE TABLESPACE WI02A1T.A103A008 PARTLEVEL 7
INCLUDE TABLESPACE WI02A1T.A103A008 PARTLEVEL 8
INCLUDE TABLESPACE WI02A1T.A103A008 PARTLEVEL 9
INCLUDE TABLESPACE WI02A1T.A103A008 PARTLEVEL 10
INCLUDE TABLESPACE WI02A1T.A103A008 PARTLEVEL 11
INCLUDE TABLESPACE WI02A1T.A103A008 PARTLEVEL 12
INCLUDE TABLESPACE WI02A1T.A103A008 PARTLEVEL 13
INCLUDE TABLESPACE WI02A1T.A103A008 PARTLEVEL 14
INCLUDE TABLESPACE WI02A1T.A103A008 PARTLEVEL 15
INCLUDE TABLESPACE WI02A1T.A103A008 PARTLEVEL 16
INCLUDE TABLESPACE WI02A1T.A103A008 PARTLEVEL 17
INCLUDE TABLESPACE WI02A1T.A103A008 PARTLEVEL 18
INCLUDE TABLESPACE WI02A1T.A103A008 PARTLEVEL 19
INCLUDE TABLESPACE WI02A1T.A103A008 PARTLEVEL 20
INCLUDE TABLESPACE WI02A1T.A103A009 PARTLEVEL 1
INCLUDE TABLESPACE WI02A1T.A103A009 PARTLEVEL 2
INCLUDE TABLESPACE WI02A1T.A103A009 PARTLEVEL 3
INCLUDE TABLESPACE WI02A1T.A103A009 PARTLEVEL 4
INCLUDE TABLESPACE WI02A1T.A103A009 PARTLEVEL 5
INCLUDE TABLESPACE WI02A1T.A103A009 PARTLEVEL 6
INCLUDE TABLESPACE WI02A1T.A103A009 PARTLEVEL 7
INCLUDE TABLESPACE WI02A1T.A103A009 PARTLEVEL 8
INCLUDE TABLESPACE WI02A1T.A103A009 PARTLEVEL 11
INCLUDE TABLESPACE WI02A1T.A103A009 PARTLEVEL 12
INCLUDE TABLESPACE WI02A1T.A103A009 PARTLEVEL 13
INCLUDE TABLESPACE WI02A1T.A103A009 PARTLEVEL 14
INCLUDE TABLESPACE WI02A1T.A103A009 PARTLEVEL 15
INCLUDE TABLESPACE WI02A1T.A103A009 PARTLEVEL 16
INCLUDE TABLESPACE WI02A1T.A103A009 PARTLEVEL 17
INCLUDE TABLESPACE WI02A1T.A103A009 PARTLEVEL 18
INCLUDE TABLESPACE WI02A1T.A103A009 PARTLEVEL 19
INCLUDE TABLESPACE WI02A1T.A103A009 PARTLEVEL 20
INCLUDE TABLESPACE WI02A1T.A103A010 PARTLEVEL 1
INCLUDE TABLESPACE WI02A1T.A103H001 PARTLEVEL 1
INCLUDE TABLESPACE WI02A1T.A103H001 PARTLEVEL 3
INCLUDE TABLESPACE WI02A1T.A103H001 PARTLEVEL 4
INCLUDE TABLESPACE WI02A1T.A103H001 PARTLEVEL 7
INCLUDE TABLESPACE WI02A1T.A103H001 PARTLEVEL 9
INCLUDE TABLESPACE WI02A1T.A103H001 PARTLEVEL 12
INCLUDE TABLESPACE WI02A1T.A103H001 PARTLEVEL 16
INCLUDE TABLESPACE WI02A1T.A103H001 PARTLEVEL 18
INCLUDE TABLESPACE WI02A1T.A103H001 PARTLEVEL 20
INCLUDE TABLESPACE WI02A1T.A103H003 PARTLEVEL 1
INCLUDE TABLESPACE WI02A1T.A103H003 PARTLEVEL 3
INCLUDE TABLESPACE WI02A1T.A103H003 PARTLEVEL 5
INCLUDE TABLESPACE WI02A1T.A103H004 PARTLEVEL 1
INCLUDE TABLESPACE WI02A1T.A103H004 PARTLEVEL 2
INCLUDE TABLESPACE WI02A1T.A103H005 PARTLEVEL 11
INCLUDE TABLESPACE WI02A1T.A103H006 PARTLEVEL 4
INCLUDE TABLESPACE WI02A1T.A105A001 PARTLEVEL 1
INCLUDE TABLESPACE WI02A1T.A105A001 PARTLEVEL 7
INCLUDE TABLESPACE WI02A1T.A105A001 PARTLEVEL 9
INCLUDE TABLESPACE WI02A1T.A105A001 PARTLEVEL 15
INCLUDE TABLESPACE WI02A1T.A105A001 PARTLEVEL 20
INCLUDE TABLESPACE WI02A1T.A105A002 PARTLEVEL 1
INCLUDE TABLESPACE WI02A1T.A105A006 PARTLEVEL 8
INCLUDE TABLESPACE WI02A1T.A105A006 PARTLEVEL 9
INCLUDE TABLESPACE WI02A1T.A105A006 PARTLEVEL 10
INCLUDE TABLESPACE WI02A1T.A105A006 PARTLEVEL 11
INCLUDE TABLESPACE WI02A1T.A105A006 PARTLEVEL 12
INCLUDE TABLESPACE WI02A1T.A105A006 PARTLEVEL 15
INCLUDE TABLESPACE WI02A1T.A105A006 PARTLEVEL 18
INCLUDE TABLESPACE WI02A1T.A105A007 PARTLEVEL 1
INCLUDE TABLESPACE WI02A1T.A105A007 PARTLEVEL 2
INCLUDE TABLESPACE WI02A1T.A105A007 PARTLEVEL 3
INCLUDE TABLESPACE WI02A1T.A105A007 PARTLEVEL 4
INCLUDE TABLESPACE WI02A1T.A105A007 PARTLEVEL 5
INCLUDE TABLESPACE WI02A1T.A105A007 PARTLEVEL 6
INCLUDE TABLESPACE WI02A1T.A105A007 PARTLEVEL 7
INCLUDE TABLESPACE WI02A1T.A105A007 PARTLEVEL 8
INCLUDE TABLESPACE WI02A1T.A105A007 PARTLEVEL 11
INCLUDE TABLESPACE WI02A1T.A105A007 PARTLEVEL 12
INCLUDE TABLESPACE WI02A1T.A105A007 PARTLEVEL 13
INCLUDE TABLESPACE WI02A1T.A105A007 PARTLEVEL 14
INCLUDE TABLESPACE WI02A1T.A105A007 PARTLEVEL 15
INCLUDE TABLESPACE WI02A1T.A105A007 PARTLEVEL 16
INCLUDE TABLESPACE WI02A1T.A105A007 PARTLEVEL 17
INCLUDE TABLESPACE WI02A1T.A105A007 PARTLEVEL 18
INCLUDE TABLESPACE WI02A1T.A105A007 PARTLEVEL 19
INCLUDE TABLESPACE WI02A1T.A105A007 PARTLEVEL 20
INCLUDE TABLESPACE WI02A1T.A105A009 PARTLEVEL 3
INCLUDE TABLESPACE WI02A1T.A105A009 PARTLEVEL 4
INCLUDE TABLESPACE WI02A1T.A105A009 PARTLEVEL 11
INCLUDE TABLESPACE WI02A1T.A105A009 PARTLEVEL 17
INCLUDE TABLESPACE WI02A1T.A105A009 PARTLEVEL 20
INCLUDE TABLESPACE WI02A1T.A105H001 PARTLEVEL 3
INCLUDE TABLESPACE WI02A1T.A105H001 PARTLEVEL 4
INCLUDE TABLESPACE WI02A1T.A105H001 PARTLEVEL 5
INCLUDE TABLESPACE WI02A1T.A105H001 PARTLEVEL 8
INCLUDE TABLESPACE WI02A1T.A105H001 PARTLEVEL 16
INCLUDE TABLESPACE WI02A1T.A105H001 PARTLEVEL 19
INCLUDE TABLESPACE WI02A1T.A105H001 PARTLEVEL 20
INCLUDE TABLESPACE WI02A1T.A109A001 PARTLEVEL 7
INCLUDE TABLESPACE WI02A1T.A109A001 PARTLEVEL 8
INCLUDE TABLESPACE WI02A1T.A109A001 PARTLEVEL 9
INCLUDE TABLESPACE WI02A1T.A109A001 PARTLEVEL 17
INCLUDE TABLESPACE WI02A1T.A109A001 PARTLEVEL 18
INCLUDE TABLESPACE WI02A1T.A109A001 PARTLEVEL 20
INCLUDE TABLESPACE WI02A1T.A109H001 PARTLEVEL 3
INCLUDE TABLESPACE WI02A1T.A109H001 PARTLEVEL 4
INCLUDE TABLESPACE WI02A1T.A109H001 PARTLEVEL 12
INCLUDE TABLESPACE WI02A1T.A109H001 PARTLEVEL 14
INCLUDE TABLESPACE WI02A1T.A109H001 PARTLEVEL 18
INCLUDE TABLESPACE WI02A1T.A109H001 PARTLEVEL 20
INCLUDE TABLESPACE WI02A1T.A112A001 PARTLEVEL 1
INCLUDE TABLESPACE WI02A1T.A112A001 PARTLEVEL 2
INCLUDE TABLESPACE WI02A1T.A112A001 PARTLEVEL 5
INCLUDE TABLESPACE WI02A1T.A112A002 PARTLEVEL 4
INCLUDE TABLESPACE WI02A1T.A112A002 PARTLEVEL 5
INCLUDE TABLESPACE WI02A1T.A112A003 PARTLEVEL 2
INCLUDE TABLESPACE WI02A1T.A112A003 PARTLEVEL 3
INCLUDE TABLESPACE WI02A1T.A112A003 PARTLEVEL 4
INCLUDE TABLESPACE WI02A1T.A112A007 PARTLEVEL 1
INCLUDE TABLESPACE WI02A1T.A112A007 PARTLEVEL 2
INCLUDE TABLESPACE WI02A1T.A112A007 PARTLEVEL 3
INCLUDE TABLESPACE WI02A1T.A112A007 PARTLEVEL 4
INCLUDE TABLESPACE WI02A1T.A112A007 PARTLEVEL 5
INCLUDE TABLESPACE WI02A1T.A112A009 PARTLEVEL 3
INCLUDE TABLESPACE WI02A1T.A112A009 PARTLEVEL 5
INCLUDE TABLESPACE WI02A1T.A112A010 PARTLEVEL 2
INCLUDE TABLESPACE WI02A1T.A112H006 PARTLEVEL 4
INCLUDE TABLESPACE WI02A1T.A117A PARTLEVEL 2
INCLUDE TABLESPACE WI02A1T.A117A PARTLEVEL 3
INCLUDE TABLESPACE WI02A1T.A117A PARTLEVEL 12
INCLUDE TABLESPACE WI02A1T.A117A PARTLEVEL 17
INCLUDE TABLESPACE WI02A1T.A117A PARTLEVEL 19
INCLUDE TABLESPACE WI02A1T.A117H PARTLEVEL 3
INCLUDE TABLESPACE WI02A1T.A117H PARTLEVEL 6
INCLUDE TABLESPACE WI02A1T.A117H PARTLEVEL 12
INCLUDE TABLESPACE WI02A1T.A117H PARTLEVEL 14
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 1
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 2
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 4
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 5
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 7
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 8
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 15
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 18
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 20
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 21
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 24
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 36
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 40
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 42
INCLUDE TABLESPACE WI02A1T.A610A PARTLEVEL 1
INCLUDE TABLESPACE WI02A1T.A610A PARTLEVEL 2
INCLUDE TABLESPACE WI02A1T.A610A PARTLEVEL 3
INCLUDE TABLESPACE WI02A1T.A610A PARTLEVEL 4
INCLUDE TABLESPACE WI02A1T.A610A PARTLEVEL 5
INCLUDE TABLESPACE WI02A1T.A610A PARTLEVEL 6
INCLUDE TABLESPACE WI02A1T.A610A PARTLEVEL 7
INCLUDE TABLESPACE WI02A1T.A610A PARTLEVEL 8
INCLUDE TABLESPACE WI02A1T.A610A PARTLEVEL 9
INCLUDE TABLESPACE WI02A1T.A610A PARTLEVEL 10
INCLUDE TABLESPACE WI02A1T.A912A PARTLEVEL
INCLUDE TABLESPACE WI03A1T.A402A PARTLEVEL
INCLUDE TABLESPACE WI03A1T.A403A PARTLEVEL
INCLUDE TABLESPACE WI03A1T.A404A PARTLEVEL
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 19
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 47
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 48
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 49
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 50
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 65
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 71
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 72
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 97
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 105
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 156
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 162
COPY LIST LSTFUL COPYDDN(TCOPYD)
PARALLEL FULL YES
SHRLEVEL CHANGE
$#out 20120921 11:48:22
OPTIONS EVENT(ITEMERROR,SKIP)
-- RZ1 DBTF 20120921 11:48:50
-- total : 586 parts 7768857 pages
-- incremental copy: 308 parts
LISTDEF LSTINC -- 308 parts
INCLUDE TABLESPACE WI02A1T.A100A PARTLEVEL 1
INCLUDE TABLESPACE WI02A1T.A100A PARTLEVEL 2
INCLUDE TABLESPACE WI02A1T.A100A PARTLEVEL 3
INCLUDE TABLESPACE WI02A1T.A100A PARTLEVEL 5
INCLUDE TABLESPACE WI02A1T.A100H PARTLEVEL 1
INCLUDE TABLESPACE WI02A1T.A100H PARTLEVEL 3
INCLUDE TABLESPACE WI02A1T.A100H PARTLEVEL 5
INCLUDE TABLESPACE WI02A1T.A101A PARTLEVEL 1
INCLUDE TABLESPACE WI02A1T.A101A PARTLEVEL 3
INCLUDE TABLESPACE WI02A1T.A101A PARTLEVEL 4
INCLUDE TABLESPACE WI02A1T.A101A PARTLEVEL 7
INCLUDE TABLESPACE WI02A1T.A101A PARTLEVEL 8
INCLUDE TABLESPACE WI02A1T.A101A PARTLEVEL 9
INCLUDE TABLESPACE WI02A1T.A101A PARTLEVEL 10
INCLUDE TABLESPACE WI02A1T.A101A PARTLEVEL 11
INCLUDE TABLESPACE WI02A1T.A101A PARTLEVEL 14
INCLUDE TABLESPACE WI02A1T.A101A PARTLEVEL 15
INCLUDE TABLESPACE WI02A1T.A101A PARTLEVEL 21
INCLUDE TABLESPACE WI02A1T.A101A PARTLEVEL 22
INCLUDE TABLESPACE WI02A1T.A101A PARTLEVEL 29
INCLUDE TABLESPACE WI02A1T.A101A PARTLEVEL 30
INCLUDE TABLESPACE WI02A1T.A101A PARTLEVEL 33
INCLUDE TABLESPACE WI02A1T.A101A PARTLEVEL 34
INCLUDE TABLESPACE WI02A1T.A101A PARTLEVEL 35
INCLUDE TABLESPACE WI02A1T.A101A PARTLEVEL 38
INCLUDE TABLESPACE WI02A1T.A101A PARTLEVEL 43
INCLUDE TABLESPACE WI02A1T.A102A PARTLEVEL 1
INCLUDE TABLESPACE WI02A1T.A102A PARTLEVEL 3
INCLUDE TABLESPACE WI02A1T.A102A PARTLEVEL 4
INCLUDE TABLESPACE WI02A1T.A102A PARTLEVEL 6
INCLUDE TABLESPACE WI02A1T.A102A PARTLEVEL 7
INCLUDE TABLESPACE WI02A1T.A102A PARTLEVEL 10
INCLUDE TABLESPACE WI02A1T.A102A PARTLEVEL 11
INCLUDE TABLESPACE WI02A1T.A102A PARTLEVEL 18
INCLUDE TABLESPACE WI02A1T.A102H PARTLEVEL 1
INCLUDE TABLESPACE WI02A1T.A102H PARTLEVEL 3
INCLUDE TABLESPACE WI02A1T.A102H PARTLEVEL 4
INCLUDE TABLESPACE WI02A1T.A102H PARTLEVEL 6
INCLUDE TABLESPACE WI02A1T.A102H PARTLEVEL 7
INCLUDE TABLESPACE WI02A1T.A102H PARTLEVEL 10
INCLUDE TABLESPACE WI02A1T.A102H PARTLEVEL 11
INCLUDE TABLESPACE WI02A1T.A102H PARTLEVEL 18
INCLUDE TABLESPACE WI02A1T.A102H PARTLEVEL 20
INCLUDE TABLESPACE WI02A1T.A102H PARTLEVEL 24
INCLUDE TABLESPACE WI02A1T.A103A001 PARTLEVEL 10
INCLUDE TABLESPACE WI02A1T.A103A001 PARTLEVEL 16
INCLUDE TABLESPACE WI02A1T.A103A001 PARTLEVEL 18
INCLUDE TABLESPACE WI02A1T.A103A001 PARTLEVEL 19
INCLUDE TABLESPACE WI02A1T.A103A004 PARTLEVEL 7
INCLUDE TABLESPACE WI02A1T.A103A004 PARTLEVEL 15
INCLUDE TABLESPACE WI02A1T.A103A004 PARTLEVEL 17
INCLUDE TABLESPACE WI02A1T.A104A004 PARTLEVEL 2
INCLUDE TABLESPACE WI02A1T.A105A001 PARTLEVEL 3
INCLUDE TABLESPACE WI02A1T.A105A001 PARTLEVEL 6
INCLUDE TABLESPACE WI02A1T.A105A001 PARTLEVEL 10
INCLUDE TABLESPACE WI02A1T.A105A001 PARTLEVEL 12
INCLUDE TABLESPACE WI02A1T.A105A001 PARTLEVEL 13
INCLUDE TABLESPACE WI02A1T.A105A001 PARTLEVEL 14
INCLUDE TABLESPACE WI02A1T.A105A001 PARTLEVEL 16
INCLUDE TABLESPACE WI02A1T.A105A001 PARTLEVEL 17
INCLUDE TABLESPACE WI02A1T.A105A001 PARTLEVEL 19
INCLUDE TABLESPACE WI02A1T.A105A003 PARTLEVEL 3
INCLUDE TABLESPACE WI02A1T.A105A003 PARTLEVEL 6
INCLUDE TABLESPACE WI02A1T.A105A003 PARTLEVEL 15
INCLUDE TABLESPACE WI02A1T.A105A003 PARTLEVEL 17
INCLUDE TABLESPACE WI02A1T.A105A003 PARTLEVEL 18
INCLUDE TABLESPACE WI02A1T.A105A004 PARTLEVEL 17
INCLUDE TABLESPACE WI02A1T.A105A009 PARTLEVEL 12
INCLUDE TABLESPACE WI02A1T.A105A009 PARTLEVEL 15
INCLUDE TABLESPACE WI02A1T.A106A01 PARTLEVEL
INCLUDE TABLESPACE WI02A1T.A106H01 PARTLEVEL
INCLUDE TABLESPACE WI02A1T.A107A PARTLEVEL
INCLUDE TABLESPACE WI02A1T.A108A PARTLEVEL
INCLUDE TABLESPACE WI02A1T.A108H PARTLEVEL
INCLUDE TABLESPACE WI02A1T.A109A001 PARTLEVEL 3
INCLUDE TABLESPACE WI02A1T.A109A001 PARTLEVEL 6
INCLUDE TABLESPACE WI02A1T.A109A001 PARTLEVEL 10
INCLUDE TABLESPACE WI02A1T.A109A001 PARTLEVEL 12
INCLUDE TABLESPACE WI02A1T.A109A001 PARTLEVEL 13
INCLUDE TABLESPACE WI02A1T.A109A001 PARTLEVEL 14
INCLUDE TABLESPACE WI02A1T.A109A001 PARTLEVEL 15
INCLUDE TABLESPACE WI02A1T.A109A001 PARTLEVEL 19
INCLUDE TABLESPACE WI02A1T.A109A009 PARTLEVEL 6
INCLUDE TABLESPACE WI02A1T.A109A009 PARTLEVEL 12
INCLUDE TABLESPACE WI02A1T.A109A009 PARTLEVEL 15
INCLUDE TABLESPACE WI02A1T.A109A009 PARTLEVEL 17
INCLUDE TABLESPACE WI02A1T.A109A009 PARTLEVEL 19
INCLUDE TABLESPACE WI02A1T.A112A003 PARTLEVEL 5
INCLUDE TABLESPACE WI02A1T.A112A004 PARTLEVEL 2
INCLUDE TABLESPACE WI02A1T.A112A006 PARTLEVEL 1
INCLUDE TABLESPACE WI02A1T.A112A009 PARTLEVEL 1
INCLUDE TABLESPACE WI02A1T.A112A009 PARTLEVEL 2
INCLUDE TABLESPACE WI02A1T.A116A PARTLEVEL
INCLUDE TABLESPACE WI02A1T.A117A PARTLEVEL 1
INCLUDE TABLESPACE WI02A1T.A117A PARTLEVEL 4
INCLUDE TABLESPACE WI02A1T.A117A PARTLEVEL 6
INCLUDE TABLESPACE WI02A1T.A117A PARTLEVEL 10
INCLUDE TABLESPACE WI02A1T.A117A PARTLEVEL 20
INCLUDE TABLESPACE WI02A1T.A117H PARTLEVEL 1
INCLUDE TABLESPACE WI02A1T.A117H PARTLEVEL 4
INCLUDE TABLESPACE WI02A1T.A117H PARTLEVEL 10
INCLUDE TABLESPACE WI02A1T.A117H PARTLEVEL 20
INCLUDE TABLESPACE WI02A1T.A120A PARTLEVEL 3
INCLUDE TABLESPACE WI02A1T.A120A PARTLEVEL 6
INCLUDE TABLESPACE WI02A1T.A120A PARTLEVEL 10
INCLUDE TABLESPACE WI02A1T.A120A PARTLEVEL 13
INCLUDE TABLESPACE WI02A1T.A120A PARTLEVEL 14
INCLUDE TABLESPACE WI02A1T.A120A PARTLEVEL 15
INCLUDE TABLESPACE WI02A1T.A120A PARTLEVEL 17
INCLUDE TABLESPACE WI02A1T.A120A PARTLEVEL 20
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 3
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 6
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 9
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 10
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 11
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 12
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 13
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 14
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 16
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 17
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 19
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 22
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 23
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 25
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 26
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 27
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 28
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 29
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 30
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 31
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 32
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 33
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 34
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 35
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 37
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 38
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 39
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 41
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 43
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 44
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 45
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 46
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 47
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 48
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 49
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 50
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 51
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 52
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 53
INCLUDE TABLESPACE WI02A1T.A301A PARTLEVEL
INCLUDE TABLESPACE WI02A1T.A611A PARTLEVEL 1
INCLUDE TABLESPACE WI02A1T.A702A PARTLEVEL
INCLUDE TABLESPACE WI02A1T.A703A PARTLEVEL
INCLUDE TABLESPACE WI02A1T.A707A PARTLEVEL
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 2
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 3
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 4
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 5
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 6
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 7
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 8
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 9
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 10
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 11
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 13
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 15
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 16
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 18
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 20
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 21
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 22
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 23
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 25
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 26
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 27
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 28
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 29
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 30
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 31
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 32
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 33
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 34
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 35
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 36
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 37
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 38
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 41
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 42
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 43
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 44
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 45
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 46
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 51
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 52
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 53
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 54
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 55
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 56
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 57
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 58
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 59
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 60
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 61
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 62
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 63
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 64
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 68
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 69
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 70
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 73
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 74
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 75
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 76
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 77
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 79
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 80
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 81
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 87
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 88
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 90
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 91
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 93
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 94
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 95
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 96
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 98
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 99
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 100
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 101
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 102
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 103
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 104
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 106
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 107
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 108
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 109
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 111
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 112
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 113
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 114
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 116
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 117
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 118
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 119
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 121
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 122
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 123
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 124
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 126
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 127
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 128
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 129
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 130
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 131
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 133
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 134
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 135
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 136
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 137
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 138
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 139
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 140
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 141
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 142
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 143
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 144
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 145
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 146
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 147
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 148
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 149
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 150
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 152
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 153
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 157
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 158
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 159
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 161
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 163
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 164
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 165
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 167
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 168
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 169
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 170
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 171
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 172
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 173
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 174
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 176
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 177
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 179
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 180
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 184
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 185
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 186
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 187
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 188
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 189
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 190
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 191
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 192
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 193
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 194
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 195
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 196
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 197
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 199
COPY LIST LSTINC COPYDDN(TCOPYD)
PARALLEL FULL NO
SHRLEVEL CHANGE
-- RZ1 DBTF 20120921 11:48:50
-- total : 586 parts 7768857 pages
-- full copy: 278 parts
LISTDEF LSTFUL -- 278 parts
INCLUDE TABLESPACE WI01A1T.A040A PARTLEVEL
INCLUDE TABLESPACE WI01A1T.A043A PARTLEVEL
INCLUDE TABLESPACE WI01A1T.A044A PARTLEVEL
INCLUDE TABLESPACE WI02A1T.A100H PARTLEVEL 2
INCLUDE TABLESPACE WI02A1T.A101H PARTLEVEL 20
INCLUDE TABLESPACE WI02A1T.A102A PARTLEVEL 14
INCLUDE TABLESPACE WI02A1T.A102A PARTLEVEL 19
INCLUDE TABLESPACE WI02A1T.A102A PARTLEVEL 20
INCLUDE TABLESPACE WI02A1T.A102H PARTLEVEL 12
INCLUDE TABLESPACE WI02A1T.A102H PARTLEVEL 14
INCLUDE TABLESPACE WI02A1T.A103A001 PARTLEVEL 1
INCLUDE TABLESPACE WI02A1T.A103A001 PARTLEVEL 3
INCLUDE TABLESPACE WI02A1T.A103A001 PARTLEVEL 4
INCLUDE TABLESPACE WI02A1T.A103A001 PARTLEVEL 6
INCLUDE TABLESPACE WI02A1T.A103A001 PARTLEVEL 7
INCLUDE TABLESPACE WI02A1T.A103A001 PARTLEVEL 8
INCLUDE TABLESPACE WI02A1T.A103A001 PARTLEVEL 9
INCLUDE TABLESPACE WI02A1T.A103A001 PARTLEVEL 11
INCLUDE TABLESPACE WI02A1T.A103A001 PARTLEVEL 12
INCLUDE TABLESPACE WI02A1T.A103A001 PARTLEVEL 13
INCLUDE TABLESPACE WI02A1T.A103A001 PARTLEVEL 14
INCLUDE TABLESPACE WI02A1T.A103A001 PARTLEVEL 15
INCLUDE TABLESPACE WI02A1T.A103A001 PARTLEVEL 17
INCLUDE TABLESPACE WI02A1T.A103A001 PARTLEVEL 20
INCLUDE TABLESPACE WI02A1T.A103A002 PARTLEVEL 4
INCLUDE TABLESPACE WI02A1T.A103A002 PARTLEVEL 6
INCLUDE TABLESPACE WI02A1T.A103A003 PARTLEVEL 1
INCLUDE TABLESPACE WI02A1T.A103A003 PARTLEVEL 2
INCLUDE TABLESPACE WI02A1T.A103A003 PARTLEVEL 3
INCLUDE TABLESPACE WI02A1T.A103A003 PARTLEVEL 4
INCLUDE TABLESPACE WI02A1T.A103A003 PARTLEVEL 5
INCLUDE TABLESPACE WI02A1T.A103A003 PARTLEVEL 6
INCLUDE TABLESPACE WI02A1T.A103A003 PARTLEVEL 7
INCLUDE TABLESPACE WI02A1T.A103A003 PARTLEVEL 8
INCLUDE TABLESPACE WI02A1T.A103A003 PARTLEVEL 9
INCLUDE TABLESPACE WI02A1T.A103A003 PARTLEVEL 10
INCLUDE TABLESPACE WI02A1T.A103A003 PARTLEVEL 11
INCLUDE TABLESPACE WI02A1T.A103A003 PARTLEVEL 12
INCLUDE TABLESPACE WI02A1T.A103A003 PARTLEVEL 13
INCLUDE TABLESPACE WI02A1T.A103A003 PARTLEVEL 14
INCLUDE TABLESPACE WI02A1T.A103A003 PARTLEVEL 15
INCLUDE TABLESPACE WI02A1T.A103A003 PARTLEVEL 16
INCLUDE TABLESPACE WI02A1T.A103A003 PARTLEVEL 17
INCLUDE TABLESPACE WI02A1T.A103A003 PARTLEVEL 18
INCLUDE TABLESPACE WI02A1T.A103A003 PARTLEVEL 19
INCLUDE TABLESPACE WI02A1T.A103A003 PARTLEVEL 20
INCLUDE TABLESPACE WI02A1T.A103A004 PARTLEVEL 1
INCLUDE TABLESPACE WI02A1T.A103A004 PARTLEVEL 3
INCLUDE TABLESPACE WI02A1T.A103A004 PARTLEVEL 6
INCLUDE TABLESPACE WI02A1T.A103A004 PARTLEVEL 8
INCLUDE TABLESPACE WI02A1T.A103A004 PARTLEVEL 10
INCLUDE TABLESPACE WI02A1T.A103A004 PARTLEVEL 12
INCLUDE TABLESPACE WI02A1T.A103A004 PARTLEVEL 13
INCLUDE TABLESPACE WI02A1T.A103A004 PARTLEVEL 14
INCLUDE TABLESPACE WI02A1T.A103A004 PARTLEVEL 16
INCLUDE TABLESPACE WI02A1T.A103A004 PARTLEVEL 20
INCLUDE TABLESPACE WI02A1T.A103A005 PARTLEVEL 1
INCLUDE TABLESPACE WI02A1T.A103A005 PARTLEVEL 2
INCLUDE TABLESPACE WI02A1T.A103A005 PARTLEVEL 5
INCLUDE TABLESPACE WI02A1T.A103A005 PARTLEVEL 6
INCLUDE TABLESPACE WI02A1T.A103A005 PARTLEVEL 8
INCLUDE TABLESPACE WI02A1T.A103A005 PARTLEVEL 9
INCLUDE TABLESPACE WI02A1T.A103A005 PARTLEVEL 10
INCLUDE TABLESPACE WI02A1T.A103A005 PARTLEVEL 11
INCLUDE TABLESPACE WI02A1T.A103A005 PARTLEVEL 12
INCLUDE TABLESPACE WI02A1T.A103A005 PARTLEVEL 14
INCLUDE TABLESPACE WI02A1T.A103A005 PARTLEVEL 16
INCLUDE TABLESPACE WI02A1T.A103A005 PARTLEVEL 17
INCLUDE TABLESPACE WI02A1T.A103A005 PARTLEVEL 18
INCLUDE TABLESPACE WI02A1T.A103A005 PARTLEVEL 19
INCLUDE TABLESPACE WI02A1T.A103A005 PARTLEVEL 20
INCLUDE TABLESPACE WI02A1T.A103A006 PARTLEVEL 1
INCLUDE TABLESPACE WI02A1T.A103A006 PARTLEVEL 2
INCLUDE TABLESPACE WI02A1T.A103A006 PARTLEVEL 3
INCLUDE TABLESPACE WI02A1T.A103A006 PARTLEVEL 6
INCLUDE TABLESPACE WI02A1T.A103A006 PARTLEVEL 7
INCLUDE TABLESPACE WI02A1T.A103A006 PARTLEVEL 8
INCLUDE TABLESPACE WI02A1T.A103A006 PARTLEVEL 9
INCLUDE TABLESPACE WI02A1T.A103A006 PARTLEVEL 10
INCLUDE TABLESPACE WI02A1T.A103A006 PARTLEVEL 11
INCLUDE TABLESPACE WI02A1T.A103A006 PARTLEVEL 12
INCLUDE TABLESPACE WI02A1T.A103A006 PARTLEVEL 13
INCLUDE TABLESPACE WI02A1T.A103A006 PARTLEVEL 14
INCLUDE TABLESPACE WI02A1T.A103A006 PARTLEVEL 16
INCLUDE TABLESPACE WI02A1T.A103A006 PARTLEVEL 17
INCLUDE TABLESPACE WI02A1T.A103A006 PARTLEVEL 18
INCLUDE TABLESPACE WI02A1T.A103A006 PARTLEVEL 19
INCLUDE TABLESPACE WI02A1T.A103A006 PARTLEVEL 20
INCLUDE TABLESPACE WI02A1T.A103A007 PARTLEVEL 1
INCLUDE TABLESPACE WI02A1T.A103A007 PARTLEVEL 3
INCLUDE TABLESPACE WI02A1T.A103A007 PARTLEVEL 5
INCLUDE TABLESPACE WI02A1T.A103A007 PARTLEVEL 9
INCLUDE TABLESPACE WI02A1T.A103A007 PARTLEVEL 10
INCLUDE TABLESPACE WI02A1T.A103A007 PARTLEVEL 11
INCLUDE TABLESPACE WI02A1T.A103A007 PARTLEVEL 13
INCLUDE TABLESPACE WI02A1T.A103A007 PARTLEVEL 14
INCLUDE TABLESPACE WI02A1T.A103A007 PARTLEVEL 15
INCLUDE TABLESPACE WI02A1T.A103A007 PARTLEVEL 16
INCLUDE TABLESPACE WI02A1T.A103A007 PARTLEVEL 17
INCLUDE TABLESPACE WI02A1T.A103A007 PARTLEVEL 18
INCLUDE TABLESPACE WI02A1T.A103A007 PARTLEVEL 19
INCLUDE TABLESPACE WI02A1T.A103A007 PARTLEVEL 20
INCLUDE TABLESPACE WI02A1T.A103A008 PARTLEVEL 1
INCLUDE TABLESPACE WI02A1T.A103A008 PARTLEVEL 2
INCLUDE TABLESPACE WI02A1T.A103A008 PARTLEVEL 3
INCLUDE TABLESPACE WI02A1T.A103A008 PARTLEVEL 4
INCLUDE TABLESPACE WI02A1T.A103A008 PARTLEVEL 5
INCLUDE TABLESPACE WI02A1T.A103A008 PARTLEVEL 6
INCLUDE TABLESPACE WI02A1T.A103A008 PARTLEVEL 7
INCLUDE TABLESPACE WI02A1T.A103A008 PARTLEVEL 8
INCLUDE TABLESPACE WI02A1T.A103A008 PARTLEVEL 9
INCLUDE TABLESPACE WI02A1T.A103A008 PARTLEVEL 10
INCLUDE TABLESPACE WI02A1T.A103A008 PARTLEVEL 11
INCLUDE TABLESPACE WI02A1T.A103A008 PARTLEVEL 12
INCLUDE TABLESPACE WI02A1T.A103A008 PARTLEVEL 13
INCLUDE TABLESPACE WI02A1T.A103A008 PARTLEVEL 14
INCLUDE TABLESPACE WI02A1T.A103A008 PARTLEVEL 15
INCLUDE TABLESPACE WI02A1T.A103A008 PARTLEVEL 16
INCLUDE TABLESPACE WI02A1T.A103A008 PARTLEVEL 17
INCLUDE TABLESPACE WI02A1T.A103A008 PARTLEVEL 18
INCLUDE TABLESPACE WI02A1T.A103A008 PARTLEVEL 19
INCLUDE TABLESPACE WI02A1T.A103A008 PARTLEVEL 20
INCLUDE TABLESPACE WI02A1T.A103A009 PARTLEVEL 1
INCLUDE TABLESPACE WI02A1T.A103A009 PARTLEVEL 2
INCLUDE TABLESPACE WI02A1T.A103A009 PARTLEVEL 3
INCLUDE TABLESPACE WI02A1T.A103A009 PARTLEVEL 4
INCLUDE TABLESPACE WI02A1T.A103A009 PARTLEVEL 5
INCLUDE TABLESPACE WI02A1T.A103A009 PARTLEVEL 6
INCLUDE TABLESPACE WI02A1T.A103A009 PARTLEVEL 7
INCLUDE TABLESPACE WI02A1T.A103A009 PARTLEVEL 8
INCLUDE TABLESPACE WI02A1T.A103A009 PARTLEVEL 11
INCLUDE TABLESPACE WI02A1T.A103A009 PARTLEVEL 12
INCLUDE TABLESPACE WI02A1T.A103A009 PARTLEVEL 13
INCLUDE TABLESPACE WI02A1T.A103A009 PARTLEVEL 14
INCLUDE TABLESPACE WI02A1T.A103A009 PARTLEVEL 15
INCLUDE TABLESPACE WI02A1T.A103A009 PARTLEVEL 16
INCLUDE TABLESPACE WI02A1T.A103A009 PARTLEVEL 17
INCLUDE TABLESPACE WI02A1T.A103A009 PARTLEVEL 18
INCLUDE TABLESPACE WI02A1T.A103A009 PARTLEVEL 19
INCLUDE TABLESPACE WI02A1T.A103A009 PARTLEVEL 20
INCLUDE TABLESPACE WI02A1T.A103A010 PARTLEVEL 1
INCLUDE TABLESPACE WI02A1T.A103H001 PARTLEVEL 1
INCLUDE TABLESPACE WI02A1T.A103H001 PARTLEVEL 3
INCLUDE TABLESPACE WI02A1T.A103H001 PARTLEVEL 4
INCLUDE TABLESPACE WI02A1T.A103H001 PARTLEVEL 7
INCLUDE TABLESPACE WI02A1T.A103H001 PARTLEVEL 9
INCLUDE TABLESPACE WI02A1T.A103H001 PARTLEVEL 12
INCLUDE TABLESPACE WI02A1T.A103H001 PARTLEVEL 16
INCLUDE TABLESPACE WI02A1T.A103H001 PARTLEVEL 18
INCLUDE TABLESPACE WI02A1T.A103H001 PARTLEVEL 20
INCLUDE TABLESPACE WI02A1T.A103H003 PARTLEVEL 1
INCLUDE TABLESPACE WI02A1T.A103H003 PARTLEVEL 3
INCLUDE TABLESPACE WI02A1T.A103H003 PARTLEVEL 5
INCLUDE TABLESPACE WI02A1T.A103H004 PARTLEVEL 1
INCLUDE TABLESPACE WI02A1T.A103H004 PARTLEVEL 2
INCLUDE TABLESPACE WI02A1T.A103H005 PARTLEVEL 11
INCLUDE TABLESPACE WI02A1T.A103H006 PARTLEVEL 4
INCLUDE TABLESPACE WI02A1T.A105A001 PARTLEVEL 1
INCLUDE TABLESPACE WI02A1T.A105A001 PARTLEVEL 7
INCLUDE TABLESPACE WI02A1T.A105A001 PARTLEVEL 9
INCLUDE TABLESPACE WI02A1T.A105A001 PARTLEVEL 15
INCLUDE TABLESPACE WI02A1T.A105A001 PARTLEVEL 20
INCLUDE TABLESPACE WI02A1T.A105A002 PARTLEVEL 1
INCLUDE TABLESPACE WI02A1T.A105A006 PARTLEVEL 8
INCLUDE TABLESPACE WI02A1T.A105A006 PARTLEVEL 9
INCLUDE TABLESPACE WI02A1T.A105A006 PARTLEVEL 10
INCLUDE TABLESPACE WI02A1T.A105A006 PARTLEVEL 11
INCLUDE TABLESPACE WI02A1T.A105A006 PARTLEVEL 12
INCLUDE TABLESPACE WI02A1T.A105A006 PARTLEVEL 15
INCLUDE TABLESPACE WI02A1T.A105A006 PARTLEVEL 18
INCLUDE TABLESPACE WI02A1T.A105A007 PARTLEVEL 1
INCLUDE TABLESPACE WI02A1T.A105A007 PARTLEVEL 2
INCLUDE TABLESPACE WI02A1T.A105A007 PARTLEVEL 3
INCLUDE TABLESPACE WI02A1T.A105A007 PARTLEVEL 4
INCLUDE TABLESPACE WI02A1T.A105A007 PARTLEVEL 5
INCLUDE TABLESPACE WI02A1T.A105A007 PARTLEVEL 6
INCLUDE TABLESPACE WI02A1T.A105A007 PARTLEVEL 7
INCLUDE TABLESPACE WI02A1T.A105A007 PARTLEVEL 8
INCLUDE TABLESPACE WI02A1T.A105A007 PARTLEVEL 11
INCLUDE TABLESPACE WI02A1T.A105A007 PARTLEVEL 12
INCLUDE TABLESPACE WI02A1T.A105A007 PARTLEVEL 13
INCLUDE TABLESPACE WI02A1T.A105A007 PARTLEVEL 14
INCLUDE TABLESPACE WI02A1T.A105A007 PARTLEVEL 15
INCLUDE TABLESPACE WI02A1T.A105A007 PARTLEVEL 16
INCLUDE TABLESPACE WI02A1T.A105A007 PARTLEVEL 17
INCLUDE TABLESPACE WI02A1T.A105A007 PARTLEVEL 18
INCLUDE TABLESPACE WI02A1T.A105A007 PARTLEVEL 19
INCLUDE TABLESPACE WI02A1T.A105A007 PARTLEVEL 20
INCLUDE TABLESPACE WI02A1T.A105A009 PARTLEVEL 3
INCLUDE TABLESPACE WI02A1T.A105A009 PARTLEVEL 4
INCLUDE TABLESPACE WI02A1T.A105A009 PARTLEVEL 11
INCLUDE TABLESPACE WI02A1T.A105A009 PARTLEVEL 17
INCLUDE TABLESPACE WI02A1T.A105A009 PARTLEVEL 20
INCLUDE TABLESPACE WI02A1T.A105H001 PARTLEVEL 3
INCLUDE TABLESPACE WI02A1T.A105H001 PARTLEVEL 4
INCLUDE TABLESPACE WI02A1T.A105H001 PARTLEVEL 5
INCLUDE TABLESPACE WI02A1T.A105H001 PARTLEVEL 8
INCLUDE TABLESPACE WI02A1T.A105H001 PARTLEVEL 16
INCLUDE TABLESPACE WI02A1T.A105H001 PARTLEVEL 19
INCLUDE TABLESPACE WI02A1T.A105H001 PARTLEVEL 20
INCLUDE TABLESPACE WI02A1T.A109A001 PARTLEVEL 7
INCLUDE TABLESPACE WI02A1T.A109A001 PARTLEVEL 8
INCLUDE TABLESPACE WI02A1T.A109A001 PARTLEVEL 9
INCLUDE TABLESPACE WI02A1T.A109A001 PARTLEVEL 17
INCLUDE TABLESPACE WI02A1T.A109A001 PARTLEVEL 18
INCLUDE TABLESPACE WI02A1T.A109A001 PARTLEVEL 20
INCLUDE TABLESPACE WI02A1T.A109H001 PARTLEVEL 3
INCLUDE TABLESPACE WI02A1T.A109H001 PARTLEVEL 4
INCLUDE TABLESPACE WI02A1T.A109H001 PARTLEVEL 12
INCLUDE TABLESPACE WI02A1T.A109H001 PARTLEVEL 14
INCLUDE TABLESPACE WI02A1T.A109H001 PARTLEVEL 18
INCLUDE TABLESPACE WI02A1T.A109H001 PARTLEVEL 20
INCLUDE TABLESPACE WI02A1T.A112A001 PARTLEVEL 1
INCLUDE TABLESPACE WI02A1T.A112A001 PARTLEVEL 2
INCLUDE TABLESPACE WI02A1T.A112A001 PARTLEVEL 5
INCLUDE TABLESPACE WI02A1T.A112A002 PARTLEVEL 4
INCLUDE TABLESPACE WI02A1T.A112A002 PARTLEVEL 5
INCLUDE TABLESPACE WI02A1T.A112A003 PARTLEVEL 2
INCLUDE TABLESPACE WI02A1T.A112A003 PARTLEVEL 3
INCLUDE TABLESPACE WI02A1T.A112A003 PARTLEVEL 4
INCLUDE TABLESPACE WI02A1T.A112A007 PARTLEVEL 1
INCLUDE TABLESPACE WI02A1T.A112A007 PARTLEVEL 2
INCLUDE TABLESPACE WI02A1T.A112A007 PARTLEVEL 3
INCLUDE TABLESPACE WI02A1T.A112A007 PARTLEVEL 4
INCLUDE TABLESPACE WI02A1T.A112A007 PARTLEVEL 5
INCLUDE TABLESPACE WI02A1T.A112A009 PARTLEVEL 3
INCLUDE TABLESPACE WI02A1T.A112A009 PARTLEVEL 5
INCLUDE TABLESPACE WI02A1T.A112A010 PARTLEVEL 2
INCLUDE TABLESPACE WI02A1T.A112H006 PARTLEVEL 4
INCLUDE TABLESPACE WI02A1T.A117A PARTLEVEL 2
INCLUDE TABLESPACE WI02A1T.A117A PARTLEVEL 3
INCLUDE TABLESPACE WI02A1T.A117A PARTLEVEL 12
INCLUDE TABLESPACE WI02A1T.A117A PARTLEVEL 17
INCLUDE TABLESPACE WI02A1T.A117A PARTLEVEL 19
INCLUDE TABLESPACE WI02A1T.A117H PARTLEVEL 3
INCLUDE TABLESPACE WI02A1T.A117H PARTLEVEL 6
INCLUDE TABLESPACE WI02A1T.A117H PARTLEVEL 12
INCLUDE TABLESPACE WI02A1T.A117H PARTLEVEL 14
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 1
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 2
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 4
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 5
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 7
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 8
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 15
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 18
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 20
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 21
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 24
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 36
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 40
INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 42
INCLUDE TABLESPACE WI02A1T.A610A PARTLEVEL 1
INCLUDE TABLESPACE WI02A1T.A610A PARTLEVEL 2
INCLUDE TABLESPACE WI02A1T.A610A PARTLEVEL 3
INCLUDE TABLESPACE WI02A1T.A610A PARTLEVEL 4
INCLUDE TABLESPACE WI02A1T.A610A PARTLEVEL 5
INCLUDE TABLESPACE WI02A1T.A610A PARTLEVEL 6
INCLUDE TABLESPACE WI02A1T.A610A PARTLEVEL 7
INCLUDE TABLESPACE WI02A1T.A610A PARTLEVEL 8
INCLUDE TABLESPACE WI02A1T.A610A PARTLEVEL 9
INCLUDE TABLESPACE WI02A1T.A610A PARTLEVEL 10
INCLUDE TABLESPACE WI02A1T.A912A PARTLEVEL
INCLUDE TABLESPACE WI03A1T.A402A PARTLEVEL
INCLUDE TABLESPACE WI03A1T.A403A PARTLEVEL
INCLUDE TABLESPACE WI03A1T.A404A PARTLEVEL
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 19
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 47
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 48
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 49
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 50
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 65
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 71
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 72
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 97
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 105
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 156
INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 162
COPY LIST LSTFUL COPYDDN(TCOPYD)
PARALLEL FULL YES
SHRLEVEL CHANGE
$#out 20120921 11:47:40
OPTIONS EVENT(ITEMERROR,SKIP)
-- RZ1 DBTF 20120921 11:47:41
-- total : 3 parts 39 pages
-- incremental copy: 0 parts
-- RZ1 DBTF 20120921 11:47:41
-- total : 3 parts 39 pages
-- full copy: 3 parts
LISTDEF LSTFUL -- 3 parts
INCLUDE TABLESPACE WI01A1T.A040A PARTLEVEL
INCLUDE TABLESPACE WI01A1T.A043A PARTLEVEL
INCLUDE TABLESPACE WI01A1T.A044A PARTLEVEL
COPY LIST LSTFUL COPYDDN(TCOPYD)
PARALLEL FULL YES
SHRLEVEL CHANGE
$#out 20120921 11:45:10
OPTIONS EVENT(ITEMERROR,SKIP)
-- RZ1 DBTF 20120921 11:45:11
-- total : 3 parts 39 pages
-- incremental : 0 parts
-- RZ1 DBTF 20120921 11:45:11
-- total : 3 parts 39 pages
-- full : 3 parts
LISTDEF LSTFUL -- 3 parts
INCLUDE TABLESPACE WI01A1T.A040A PARTLEVEL
INCLUDE TABLESPACE WI01A1T.A043A PARTLEVEL
INCLUDE TABLESPACE WI01A1T.A044A PARTLEVEL
COPY LIST LSTFUL COPYDDN(TCOPYD)
PARALLEL FULL YES
SHRLEVEL CHANGE
$#out 20120921 11:44:02
OPTIONS EVENT(ITEMERROR,SKIP)
-- RZ1 DBTF 20120921 11:44:03
-- total : parts pages
-- : M.INC, FULL NO, incremental, cAll, pAll.0 parts
-- RZ1 DBTF 20120921 11:44:03
-- total : parts pages
-- : M.FUL, FULL YES, full , cAll, pAll.0 parts
$#out 20120921 11:40:57
OPTIONS EVENT(ITEMERROR,SKIP)
-- RZ1 DBTF 20120921 11:40:58
-- total : CALL parts PALL pages
-- INCREMENTAL : 0 parts
-- RZ1 DBTF 20120921 11:40:58
-- total : CALL parts PALL pages
-- FULL : 3 parts
LISTDEF LSTFUL -- 3 parts
INCLUDE TABLESPACE WI01A1T.A040A PARTLEVEL
INCLUDE TABLESPACE WI01A1T.A043A PARTLEVEL
INCLUDE TABLESPACE WI01A1T.A044A PARTLEVEL
COPY LIST LSTFUL COPYDDN(TCOPYD)
PARALLEL FULL YES
SHRLEVEL CHANGE
$#out 20120921 11:39:44
OPTIONS EVENT(ITEMERROR,SKIP)
-- RZ1 DBTF 20120921 11:39:45
-- total : CALL parts PALL pages
-- FULL NO : M.O.170.1.0 parts
-- RZ1 DBTF 20120921 11:39:45
-- total : CALL parts PALL pages
-- FULL YES : M.O.170.1.0 parts
$#out 20120921 11:38:39
OPTIONS EVENT(ITEMERROR,SKIP)
-- RZ1 DBTF 20120921 11:38:39
-- total : CALL parts PALL pages
-- FULL NO : M.O.170.1.0 parts
-- RZ1 DBTF 20120921 11:38:39
-- total : CALL parts PALL pages
-- FULL NO : M.O.170.1.0 parts
$#out 20120921 11:30:26
}¢--- A540769.WK.REXX.O13(BESENWA2) cre=2012-09-21 mod=2012-09-21-10.53.49 A540769 ---
$#@
$=dbSy=DBTF
$=hh=3
$=partLim=999999999
$=previewOnly=0
call sqlConnect $dbSy
$;
$>.fEdit('::v')
$<@/sql/
$=ptaInc =- $dbSy = 'DBOF' & sysvar('SYSNODE') == 'RR2'
if $ptaInc then $@=¢
with frTo as
(
select case when strip(min(dbName)) like '_*' and min(dbName) > 'A*'
then left(min(dbName), 1) else ''
end fr,
case when strip(max(dbName)) like '_*'
then left(max(dbName), 1) else ''
end || x'FFFF' to
FROM DLC.OBJECTS_V13
WHERE EXCLUDE='I' AND NAME='QDDBOF INCL EXCLUDES'
)
, p as
$! else $@=¢
with p as
$!
$@=¢
(
SELECT PT.DBNAME, pt.tsName, pt.partition,
( SELECT char(timestamp) || icType
FROM SYSIBM.SYSCOPY CP
WHERE PT.DBNAME = CP.DBNAME
AND PT.TSNAME = CP.TSNAME
AND cp.dsNum in (PT.PARTITION, 0)
AND CP.ICTYPE IN ('F','R','X')
and timestamp < '2012-09-21-03.20.00'
order by timestamp desc
fetch first 1 row only
) laFull,
r.nActive,
COPYLASTTIME,
COPYUPDATEDPAGES,
COPYCHANGES,
COPYUPDATETIME
---- end @proc selIncrCopy: select fullcopy etc. --------------------
FROM SYSIBM.SYSDATABASE DB
$!
if $ptaInc then $@=¢
join frTo
on db.name >= frTo.fr and db.name <= frTo.to
$!
$@=¢
join SYSIBM.SYSTABLESPACE TS
on DB.NAME = PT.DBNAME
join SYSIBM.SYSTABLEPART PT
on DB.NAME = TS.DBNAME
AND TS.NAME = PT.TSNAME
left join SYSIBM.SYSTABLESpaceStats r
on r.dbid = db.dbid
and r.psid = ts.psid
and r.partition = pt.partition
WHERE 0 = 0
---- end @proc missFUllcopies1: fehlende Fullcopies -----------------
---- begin @proc exclude ----------------------------------------------
----- begin @proc exclGen: gemeinsame excludes -------------------------
AND NOT (PT.DBNAME like 'DSNDB%') -- DB2 CATALOG
AND NOT (PT.DBNAME LIKE 'DSN8%') -- IBM TEST DB
AND NOT (PT.DBNAME LIKE 'WKDBD%') -- DB2 WORK DATABASE
AND NOT (PT.DBNAME = 'DSNTESQ') -- DB2 CATALOG CLONE
AND NOT (PT.DBNAME LIKE 'DB2MAPP%') -- REORG MAPPING TABLES
AND NOT (PT.DBNAME LIKE 'DB2PLAN%') -- explain tables
and not translate(PT.dbName, '999999999AAAAAA', '012345678FISWXY')
= 'DA999999' -- user datenbanken
AND NOT (PT.DBNAME LIKE 'DB2ALA%') -- marec generated
AND NOT (PT.DBNAME LIKE '%MAREC%') -- marec generated
AND NOT (PT.DBNAME LIKE 'DACME%') -- Mail Heinz Bühler
AND NOT (PT.DBNAME LIKE 'DGDB%') -- PROTOTYPEN
AND NOT (PT.DBNAME LIKE 'DGO%') -- PROTOTYPEN
AND NOT (PT.DBNAME LIKE '%A1X%') -- Neue Prototypen
AND NOT (PT.DBNAME LIKE 'DAU%') -- Schulung Gerrit
AND NOT (PT.DBNAME LIKE 'IDT%') -- ibm tools
---- end @proc exclGen: gemeinsame excludes ------------------------
AND NOT (PT.DBNAME LIKE 'OE02%') -- Mail Ivo Eichmann
AND NOT (PT.DBNAME LIKE 'CSQ%') -- M-QUEUE DATENBANK
---- end @proc exclude ---------------------------------------------
---- end @proc exclGen: gemeinsame excludes -------------------------
AND NOT (PT.DBNAME = 'XC01A1P' AND PT.TSNAME LIKE 'A2%' )
-- EOS: Armin Breyer
AND NOT (PT.DBNAME = 'XR01A1P' AND PT.TSNAME LIKE 'A2%' )
-- ERET: Armin Breyer
AND NOT (PT.DBNAME = 'CSQDBOF' AND PT.TSNAME like 'TSBLOB%' )
---- end @proc exclude ----------------------------------------------
AND DB.TYPE NOT IN ('T','W')
---- begin @proc missFUllcopies2: fehlende Fullcopies -----------------
AND TS.NTABLES <> 0
AND PT.SPACEF <> -1 -- attention space is sometimes wrong|
)
, q as
(
select case when laFull < char(timestamp('2012-09-20-05.00.00')
- $-¢168+$hh$! hours)
then 'full old'
when copyUpdateTime > current timestamp - $hh hours
then 'no newUpd'
when nActive * 0.1 <= COPYUPDATEDPAGES then 'full upda'
when COPYUPDATEDPAGES <> 0 or copyChanges <> 0 then 'inc'
else 'no changes'
end copy,
p.*
from p
)
select *
from q
where -- left(copy, 2) <> 'no'
dbName like 'AV15A%'
ORDER BY DBNAME, TSNAME, PARTITION
WITH UR
$!
$/sql/
call sqlSel $| call fmtFTab
$#out 20120921 10:29:05
$#out 20120921 10:27:02
$#out 20120921 10:25:33
$#out 20120921 10:22:26
$#out 20120921 10:19:52
$#out 20120921 10:19:35
*** run error ***
tsoAlloc rc 12 for alloc dd(CAT1) OLD DSN('V')
$#out
}¢--- A540769.WK.REXX.O13(BETAANA) cre=2012-01-12 mod=2012-04-10-12.06.26 A540769 ---
/**********************************************************************
analyze multiple jobs extracted from beta92 by jcl(beta92ex)
* IAT6140 JOB ==> begin of job
* IAT2000 ==> system
* // ... JOB ==> jobName
* IEF373I ==> step/start
* IEF032I ==> step/stop ==> ela
* cpu: ==> cpu
totalise P02 by system
**********************************************************************/
call errReset 'h'
m.oDsn = '~wk.texw(qrana408)'
if 0 then call betaAna '~wk.texw(qr59)', 'pta0108-59'
if 1 then call betaAna '~tmp.texw(beta0408)', 'prod0408'
if 0 then call betaAna '~wk.texw(qrTf0318)', 'dbt0318-2012019'
exit
betaAna: procedure expose m.
parse arg dsn, m.ii.txt
m.o.0 = 0
call readNxBegin qr, dsn,,10000
st = ''
m.sys.0 = 0
m.ii.jx=0
call s1 '***begin' m.ii.txt
do forever
li = readNx(qr)
if li == '' then
leave
if abbrev(m.li, ' IAT6140 JOB ') then do
call jobEnd st
m.ii.job = ''
m.ii.jx = m.ii.jx+1
m.ii.step.0 = 0
st = 'i'
end
else if state == '' then
iterate
if st == 'i' then do
if strip(substr(m.li, 10, 10)) == 'IAT2000' then do
pJ = wordpos('JOB', m.li)
p1 = wordpos('SELECTED', m.li)
m.ii.sys = word(m.li, p1+1)
m.ii.job = word(m.li, pJ+1)
if pJ < 1 | p1 < 1 | length(m.ii.sys) \== 3 then
call err 'bad iat2000 selected' readnxPos(qr)
st = 'i2'
end
end
if abbrev(m.li, '//') then do
if st == 'j' then
iterate
if st \== 'i2' then
call err '// line in state' st':' ,
(m.qr.buf0x+m.qr.cx) m.li
if word(m.li, 2) \== 'JOB' then
call err '// bad job' readnxPos(qr)
if m.ii.job \== substr(word(m.li, 1), 3) then
call 'job mismatch' m.ii.job substr(word(m.li, 1), 3)
st = 'j'
end
else if state == 'i' then
iterate
if abbrev(m.li, 'IEF373I STEP/') then do
sx = m.ii.step.0 + 1
m.ii.step.0 = sx
m.ii.step.sx.step = strip(substr(m.li, 14, 8))
m.ii.step.sx.start = substr(m.li, 29, 12)
st = 's0'
end
else if abbrev(m.li, 'IEF032I STEP/') then do
if st \== 's0' then
call err 'stepStop but state='st':' ,
(m.qr.buf0x + m.qr.cx) m.li
s1 = ii'.STEP.'m.ii.step.0
if m.s1.step \== strip(substr(m.li, 14, 8)) then
call err 'stepStop but step='m.s1.step':' readnxPos(qr)
m.s1.stop = substr(m.li, 29, 12)
v = m.s1.start
b = m.s1.stop
if substr(v, 8, 1) \== '.' | substr(b, 8, 1) \== '.' ,
| left(v, 4) \== left(b, 4) then
call err 'yearchange start/stop' v'/' || b readnxPos(qr)
m.s1.ela=(((substr(b, 5, 3) - substr(v, 5, 3)) * 24,
+ substr(b, 9, 2) - substr(v, 9, 2)) * 60,
+ substr(b,11, 2) - substr(v,11, 2)) * 60
st = 's1'
end
else if st == 's1' then do
parse var m.li w1 h 'HR' m 'MIN' s 'SEC' .
h = strip(h)
m = strip(m)
s = strip(s)
if w1 \== 'CPU:' | \ (datatype(h,'n') & datatype(m, 'n') ,
& datatype(s,'n')) then
call err 'bad cpu line:' readnxPos(qr)
s1 = ii'.STEP.'m.ii.step.0
m.s1.cpu = ((h*60)+m)*60+s
st = 's2'
end
/* say (m.qr.buf0x + m.qr.cx) m.li */
end
call jobEnd st
call readNxEnd qr
call s1 left('w&w', 20) 'sys cnt ela cpu'
do rx=1 to m.sys.0
call s1 left(m.ii.txt, 20) m.sys.rx.sys,
format(m.sys.rx.cnt, 6, 0) ,
format(m.sys.rx.ela, 8, 2) format(m.sys.rx.cpu, 8, 2)
end
call s1 '***end ' m.ii.txt ,
'with' m.ii.jx 'jobs and' (m.qr.buf0x + m.qr.cx) 'lines'
call writeDsn m.oDsn, 'M.O.', ,1
return
endProcedure betaAna
s1: procedure expose m.
parse arg msg
say msg
ox = m.o.0 + 1
m.o.0 = ox
m.o.ox = msg
return
endProcedure s1
jobEnd: procedure expose m.
parse arg st
if st == '' then
return
do sx = 1 to m.ii.step.0 until m.ii.step.sx.step == 'P02'
end
if sx > m.ii.step.0 then do
say 'no p02 found in job' m.ii.job
return
end
s1 = ii'.STEP.'sx
if m.ii.jx // 100 = 0 then
say 'jobEnd' m.ii.jx m.ii.job m.ii.sys m.s1.step 'ela='m.s1.ela ,
'cpu='m.s1.cpu readnxPos(qr, 0)
do rx = 1 to m.sys.0 until m.sys.rx.sys == m.ii.sys
end
if rx > m.sys.0 then do
m.sys.0 = m.sys.0 + 1
m.sys.rx.sys = m.ii.sys
m.sys.rx.cnt = 0
m.sys.rx.ela = 0
m.sys.rx.cpu = 0
end
m.sys.rx.cnt = m.sys.rx.cnt + 1
m.sys.rx.ela = m.sys.rx.ela + m.s1.ela
m.sys.rx.cpu = m.sys.rx.cpu + m.s1.cpu
if m.s1.ela > 3600 then
call s1 m.ii.job'.p02 ela' m.s1.ela 'cpu' m.s1.cpu ,
'sys' m.ii.sys
return
endProcedure jobEnd
/* copy adrTso begin *************************************************/
/*--- send ggTsoCmd to tso, fail if rc <> 0 or not listed in ggRet ---*/
adrTso:
parse arg ggTsoCmd, ggRet
address tso ggTsoCmd
if rc == 0 then return 0
else if ggRet == '*' then return rc
else if wordPos(rc, ggRet) > 0 then return rc
else
call err 'adrTso rc' rc 'for' ggTsoCmd
return /* end adrTso */
/*--- format dsn from tso format to jcl format -----------------------*/
dsn2jcl: procedure expose m.
parse upper arg dsn ., addPrefix
if left(dsn,1) = "'" then
return strip(dsn, 'b', "'")
sp = sysvar('SYSPREF')
if sp == '' then
sp = userid()
cx = pos('~', dsn)
if cx < 1 & addPrefix == 1 then
return sp'.'dsn
do while cx \== 0
le = left(dsn, cx-1)
ri = substr(dsn, cx+1)
if right(le, 1) == '.' | left(ri, 1) == '.' then
dsn = le || sp || ri
else
dsn = le || left('.', le \== '') || sp ,
|| left('.', ri \== '') || ri
cx = pos('~', spec, cx)
end
return dsn
endProcedure dsn2Jcl
/*--- format dsn from jcl format to tso format -----------------------*/
jcl2dsn: procedure expose m.
parse arg dsn .
return "'"dsn"'"
endProcedure jcl2dsn
dsnSetMbr: procedure expose m.
parse arg dsn, mbr
bx = pos('(', dsn)
if bx > 0 then
dsn = strip(left(dsn, bx-1))
if mbr <> '' then
dsn = dsn'('strip(mbr)')'
return dsn
endProcedure dsnSetMbr
dsnGetMbr: procedure expose m.
parse arg dsn
lx = pos('(', dsn)
rx = pos(')', dsn, lx+1)
if lx < 1 then
return ''
else if lx < rx then
return substr(dsn, lx+1, rx-lx-1)
else
return strip(substr(dsn,lx+1))
endProcedure dsnGetMbr
/**********************************************************************
io: read or write a dataset with the following callsequences:
read: readDDBegin, readDD*, readDDEnd
write: writeBegin, writeDD*, writeEnd
readDD returns true if data read, false at eof
***********************************************************************/
/*--- prepare reading from a DD --------------------------------------*/
readDDBegin: procedure expose m.
parse upper arg ggDD
call errAddCleanup 'call readDDEnd' ggDD', "*"'
return /* end readDDBegin */
/*--- read from DD ggDD into ggSt, return false at eof ---------------*/
readDD:
parse arg ggDD, ggSt, ggCnt
if ggCnt = '' then
ggCnt = 100
call adrTso 'execio' ggCnt 'diskr' ggDD '(stem' ggSt')', 2
return (value(ggSt'0') > 0)
return /* end readDD */
/*--- finish reading DD ggDD ----------------------------------------*/
readDDEnd: procedure expose m.
parse upper arg ggDD, ggRet
call errRmCleanup 'call readDDEnd' ggDD', "*"'
return adrTso('execio 0 diskr' ggDD '(finis)', ggRet)
endProcedure readDDEnd
/*--- prepare writing to DD ggDD -------------------------------------*/
writeDDBegin: procedure expose m.
parse upper arg ggDD
/* ensure file is erased, if no records are written */
call adrTso 'execio' 0 'diskw' ggDD '(open)'
call errAddCleanup 'call writeDDEnd' ggDD', "*"'
return /* end writeDDBegin */
/*--- write to gg ggDD from stem ggSt, ggCnt records -----------------*/
writeDD:
parse arg ggDD, ggSt, ggCnt
if ggCnt == '' then
ggCnt = value(ggst'0')
call adrTso 'execio' ggCnt 'diskw' ggDD '(stem' ggSt')'
return
endSubroutine writeDD
/*--- end writing to dd ggDD (close) --------------------------------*/
writeDDEnd: procedure expose m.
parse upper arg ggDD, ggRet
call errRmCleanup 'call writeDDEnd' ggDD', "*"'
return adrTso('execio 0 diskw' ggDD '(finis)', ggRet)
endProcedure writeDDEnd
/*--- readNx: read next line, using buffer ---------------------------*/
/*--- begin: allocate dsnSpec and ini ------------------------ -------*/
readNxBegin: procedure expose m.
parse arg m, m.m.dsn, m.m.dd, m.m.Cnt
if m.m.dd = '' then
m.m.dd = 'DDNX'
if m.m.cnt = '' then
m.m.cnt = 1000
m.m.cx = m.m.cnt + 999
m.m.buf0x = 0
m.m.0 = 0
call dsnAlloc 'dd('m.m.dd')' m.m.dsn
call readDDBegin m.m.dd
return m
endProcedure readDDNxBegin
/*--- return the stem of the next line, or '' at end -----------------*/
readNx: procedure expose m.
parse arg m
ix = m.m.cx + 1
m.m.cx = ix
if m.m.cx <= m.m.0 then
return m'.'ix
m.m.buf0x = m.m.buf0x + m.m.0
if \ readDD(m.m.dd, 'M.'m'.', m.m.cnt)then
return ''
m.m.cx = 1
return m'.1'
endProcedure readDDNx
/*--- return the position (line number) of reader
plus le characters of the current line (default 50) ------*/
readnxPos: procedure expose m.
parse arg m, le
li = m'.'m.m.cx
li = strip(m.li, 't')
if arg() < 2 then
le = 50
if le < 1 then
li = ''
else if length(li) <= le then
li = ':' li
else
li = ':' left(li, le-3)'...'
return 'line' (m.m.buf0x + m.m.cx)li
endProcedure readnxPos
/*--- close and deallocate ------------------------------------------*/
readNxEnd: procedure expose m.
parse arg m
call readDDEnd m.m.dd
call tsoFree m.m.dd
return
endProcedure readDDNxEnd
/*--- standardise a dsn spec
word1 dsName or -
word2 dd or -
word3 disp or -
word4 to first : attributes in tso format
after first : attributes for new allocation
----------------------------------------------------------------------*/
dsnSpec: procedure expose m.
parse upper arg spec
rr = '' /* put leading - in separate words */
do sx=1 while words(rr) < 3 & wx \= ''
wx = word(spec, sx)
do while abbrev(wx, '-') & words(rr) < 3
wx = substr(wx, 2)
rr = rr '-'
end
rr = rr wx
end
spec = rr subWord(spec, sx)
na = ''
dd = ''
di = ''
if left(spec, 1) = '&' then /* external spec is handled ok */
spec = strip(substr(spec, 2))
do wx=1 by 1
w = word(spec, wx)
if w = '' | abbrev(w, '.') | abbrev(w, ':') then
leave
else if wordPos(w, 'OLD SHR MOD NEW')>0 | abbrev(w, 'SYSO') then
di = w
else if w = 'CATALOG' then
di = di w
else if abbrev(w, 'DD(') then
dd = substr(w, 4, length(w)-4)
else if abbrev(w, 'DSN(') then
na = strip(substr(w, 5, length(w)-5))
else if na == '' then
na = dsn2jcl(w)
else if dd == '' then
dd = w
else if di == '' then
di = w
else
leave
end
if na == '' then
na = '-'
else if abbrev(na, "'") then
na = substr(na, 2, length(na)-2)
if dd == '' then dd = '-'
if di == '' then di = '-'
re = subword(spec, wx)
if abbrev(re, '.') then
re = substr(re, 2)
return na dd di re
endProcedure dsnSpec
/*--- alloc a dsn with dsnAlloc
if the dsn is inuse wait and retry
until either the allocation is successfull
or the timeout occurs --------------------------------------*/
dsnAllocWait: procedure expose m.
parse upper arg spec, pDi, pDD, timeOut
x = max(1, arg() - 1)
do rt=0
m.adrTsoAl.1 = ''
m.adrTsoAl.2 = ''
m.adrTsoAl.3 = ''
call outtrap m.adrTsoAl.
res = dsnAlloc(spec, pDi, pDD, '*')
call outtrap off
if \ abbrev(res, ' ') then
return res
msg = m.adrTsoAl.1'\n'm.adrTsoAl.2'\n'm.adrTsoAl.3
if rt > timeOut & timeOut \== '' then
return err('timeout allocating' spec time() '\n'msg)
if pos('DATA SET IS ALLOCATED TO ANOTHER', msg) < 1 then
return err('allocating' spec'\n'msg)
say time() 'sleep and retry alloc' spec
call sleep 1, 0
end
endProcedure dsnAllocWait
/*--- alloc a dsn or a dd
spec '-'<ddName>
datasetName? disposition? '.'? attributes? (':' newAtts)?
disp default disposition
dd default dd name
retRc erlaubte ReturnCodes (leer = 0)
returns if ok then ddName <rexx for free> otherwise rc -----*/
dsnAlloc: procedure expose m.
parse upper arg spec, pDi, pDD, retRc
parse value dsnSpec(spec) with na dd di rest
if na = '-' then
m.dsnAlloc.dsn = ''
else
m.dsnAlloc.dsn = na
if na == '-' & dd \== '-' & di == '-' & rest = '' then
return dd
if dd == '-' & pDD \== '' then
dd = pDD
if dd == '-' then do
if symbol('m.adrTso.ddNum') = 'VAR' then
dd = m.adrTso.ddNum + 1
else
dd = 1
m.adrTso.ddNum = dd
dd = 'DD' || dd
end
if di = '-' & pDi \== '' then
di = pDi
if di = '-' then
di = 'SHR'
else if pos('(', na) < 1 then
nop
else if di = 'MOD' then
call err 'disp mod for' na
else
di = 'SHR'
if pos('/', na) > 0 then
return csmAlloc(na dd di rest, retRc)
else
return tsoAlloc(na dd di rest, retRc)
endProcedure dsnAlloc
tsoAlloc: procedure expose m.
parse arg na dd disp rest ':' nn, retRc
c = 'alloc dd('dd')' disp
if na \== '-' then
c = c "DSN('"na"')"
else if disp = 'NEW' and nn \== '' then
c = c dsnCreateAtts(,nn)
call outtrap m.adrTsoAl.
alRc = adrTso(c rest, '*')
call outtrap off
if alRc = 0 then do
call errAddCleanup 'call tsoFree' dd', "*"'
return dd 'call tsoFree' dd';'
end
if nn \= '' & wordPos(disp, 'OLD SHR') > 0 ,
& sysDsn("'"m.dsnAlloc.dsn"'") == 'DATASET NOT FOUND' then do
say 'tsoAlloc creating' c rest ':'nn
call adrTso 'alloc dd('dd') new catalog' dsnCreateAtts(na, nn)
call adrTso 'free dd('dd')'
return tsoAlloc(na dd disp rest, retRc)
end
do ax=1 to m.adrTsoAl.0
say m.adrTsoal.ax
end
if retRc = '*' | wordPos(alRc, retRc) > 0 then
return ' ' alRc
call err 'tsoAlloc rc' alRc 'for' c rest
endProcedure tsoAlloc
tsoAtts: procedure expose m.
parse arg dsn
rc = listDsi("'"dsn"' SMSINFO")
if rc = 0 then
mv = ''
else if rc = 4 & sysReason = 19 then do
mv = 'UNITCNT(30)'
say 'multi volume' mv
end
else if rc ^= 0 then
call err 'listDsi rc' rc 'reason' sysReason,
sysMsgLvl1 sysMsgLvl2
al = 'CAT'
al = ''
if right(sysDsSms, 7) == 'LIBRARY' ,
| abbrev(sysDsSms, 'PDS') then
al = al 'DSNTYPE(LIBRARY)'
if sysUnits = 'TRACK' then
sysUnits = 'TRACKS'
al = al "DSORG("sysDSorg") MGMTCLAS("sysMgmtClass")",
"DATACLAS("sysDataClass")" ,
"RECFM("translate('1 2 3', ' 'sysREcFM, ' 123')")",
"LRECL("SYSLRECL")",
"blksize("sysBLkSIZE")",
"SPACE("sysPrimary"," sysSeconds")" sysUnits mv
return al
endProcedure tsoAtts
tsoFree: procedure expose m.
parse arg dd, ggRet
call adrTso 'free dd('dd')', ggRet
call errRmCleanup 'call tsoFree' dd', "*"'
return
endProcedure tsoFree
dsnCreateAtts: procedure expose m.
parse arg dsn, atts, forCsm
forCsm = forCsm == 1
aU = ' 'translate(atts)
if abbrev(atts, ':') then do
parse var atts a1 atts
bl = 32760
rl = substr(a1, 3)
if abbrev(a1, ':F') then do
if rl = '' then
rl = 80
recfm='f b'
bl = bl - (bl // rl)
end
else do
if rl = '' then
rl = bl-4
recfm = substr(a1, 2, 1) 'b'
end
if forCsm then
atts = atts "recfm("space(recfm, 0)") lrecl("rl")",
"blkSize("bl")"
else
atts = atts "recfm("recfm") lrecl("rl") block("bl")"
end
if pos('(', dsn) > 0 & pos(' DSNTYPE(', aU) < 1 ,
& pos(' DSORG(', aU) < 1 then
atts = atts 'dsntype(library) dsorg(po)'
if pos(' MGMTCLAS(', aU) < 1 then
atts = atts 'mgmtclas(COM#A091)'
if pos(' SPACE(', aU) < 1 then
if forCsm then
atts = atts 'space(10, 1000) cylinder'
else
atts = atts 'space(10, 1000) cyl'
if dsn == '' then
return atts
return "dataset('"dsnSetMbr(dsn)"')" atts
endProcedure dsnCreateAtts
/*--- read the dataset specified in ggDsnSpec to stem ggSt -----------*/
readDSN:
parse arg ggDsnSpec, ggSt
ggAlloc = dsnAlloc(ggDsnSpec, 'SHR', 'readDsN')
call adrTso 'execio * diskr' word(ggAlloc, 1) '(stem' ggSt' finis)'
interpret subword(ggAlloc, 2)
return
endSubroutine readDsn
/*--- write the dataset specified in ggDsnSpec from stem ggSt
write ggCnt records if not empty otherwise ggst0
if ggSay 1 then say ... records written to ... -------------*/
writeDSN:
parse arg ggDsnSpec, ggSt, ggCnt, ggSay
if ggCnt == '' then
ggCnt = value(ggst'0')
ggAlloc = dsnAlloc(ggDsnSpec, 'OLD', 'readDsN')
call adrTso 'execio' ggCnt 'diskw' word(ggAlloc, 1) ,
'(stem' ggSt 'open finis)'
interpret subword(ggAlloc, 2)
if ggSay == 1 | m.debug == 1 then
say ggCnt 'records written to' ggDsnSpec
return
endSubroutine writeDsn
copyDSN: procedure expose m.
parse arg frSpec, toSpec, ggSay
frDD = dsnAlloc(frSpec, 'SHR', 'FRDD')
toDD = dsnAlloc(toSpec, 'OLD', 'TODD')
call readDDBegin word(frDD, 1)
call writeDDBegin word(toDD, 1)
cnt = 0
do while readDD(word(frDD, 1), r.)
call writeDD word(toDD, 1), r.
cnt = cnt + r.0
end
call readDDEnd word(frDD, 1)
call writeDDEnd word(toDD, 1)
interpret ';' subword(frDD, 2) '; ; ;' subword(toDD, 2)
if ggSay == 1 | m.debug == 1 then
say cnt 'records copied from' frSpec 'to' to toSpec
return
endSubroutine writeDsn
/* copy adrTso end ****************************************************/
/* copy err begin ******************************************************
messages, errorhandling,help
***********************************************************************/
errIni: procedure expose m.
if m.err.ini == 1 then
return
call outIni
m.err.ini = 1
m.err.handler = ''
m.err.cleanup = ';'
m.err.opt = ''
return
endProcedure errIni
/* configure err -----------------------------------------------------*/
errReset: procedure expose m.
call errIni
parse arg m.err.opt, m.err.handler
if pos('I', translate(m.err.opt)) > 0 then
if errOS() \== 'LINUX' then
if sysVar('sysISPF') = 'ACTIVE' then
call adrIsp 'control errors return'
return
endSubroutine errReset
/*--- error routine: abend with message ------------------------------*/
err:
parse arg ggTxt, ggOpt
call errIni
drop err handler cleanup opt call return
if ggOpt == '' & m.err.handler \== '' then do
if 1 then do /* no detection of recursive err call loop
--> will anyway fail by stack overflow */
interpret m.err.handler
end
else do
/* avoid recursive err call loop */
drop call return
if symbol('m.err.call') \== 'VAR' then
m.err.call = 1
else
m.err.call = m.err.call + 1
if m.err.call > 10 then do
say 'errHandler loop:' m.err.handler
end
else do
m.err.return = 1
call errInterpret m.err.handler
m.err.call = m.err.call - 1
if m.err.return then
return result
end
end
end
call outPush
call errSay ggTxt, 'e'
call errCleanup
if ggOpt == '' then
ggOpt = m.err.opt
ggOpt = translate(ggOpt)
if pos('T', ggOpt) > 0 then do
trace ?r
say 'trace ?r in err'
end
if pos('H', ggOpt) > 0 then do
call errSay 'divide by zero to show stackHistory', 'e'
x = 1 / 0
end
call errSay 'exit(12)', 'e'
exit errSetRc(12)
endSubroutine err
/*--- error routine: user message cleanup exit -----------------------*/
errEx:
parse arg ggTxt
call errIni
call outPush
call errSay ggTxt
call errCleanup
exit 8
endProcedure errEx
errAddCleanup: procedure expose m.
parse arg code
if m.err.ini \== 1 then
call errIni
/* concatenate backwards, then it is executed also backwards */
m.err.cleanup = ';'code || m.err.cleanup
return
endProcedure errAddCleanup
errRmCleanup: procedure expose m.
parse arg code
if m.err.ini \== 1 then
call errIni
cx = pos(';'code';', m.err.cleanup)
if cx > 0 then
m.err.cleanup = left(m.err.cleanup, cx) ,
|| substr(m.err.cleanup, cx + length(code)+2)
return
endProcedure errRmCleanup
errCleanup: procedure expose m.
call errIni
cl = m.err.cleanup
if cl = ';' then
return
m.err.cleanup = ';'
call out 'err cleanup begin' cl
call errInterpret cl
call out 'err cleanup end' cl
return
endProcedure errCleanup
errInterpret: procedure expose m.
parse arg code
interpret code
m.err.return = 0
return
endProcedure errInterpret
/*--- assert that the passed rexx expression evaluates to true -------*/
assert:
interpret 'assertRes =' arg(1)
if \ assertRes then
call err 'assert failed' arg(1)':' arg(2)
return
endProcedure assert
/*--- output an errorMessage msg with pref pref
split message in lines at '/n' ---------------------------*/
errSay: procedure expose m.
parse arg msg, pref
parse source . . ggS3 . /* current rexx */
if pref == 'e' then
msg = 'fatal error in' ggS3':' msg
else if pref == 'w' then
msg = 'warning in' ggS3':' msg
else if pref \== '' then
msg = pref':' msg
return outNl(msg)
endProcedure errSay
/*--- abend with Message after displaying help -----------------------*/
errHelp: procedure expose m.
parse arg msg, op
call errSay msg, 'e'
call help
call err msg, op
endProcedure errHelp
/*--- return the Operating System we are running on: TSO or LINUX ---*/
errOS: procedure expose m.
parse source os .
return os
endProcedure errOS
/*--- set rc for ispf: -------------------------------------------------
if a cmd is run by ispStart, its RC is ignored,
but ISPF passes the value of the shared varible 3IspfRc
back as return code
----------------------------------------------------------------------*/
errSetRc: procedure expose m.
parse arg zIspfRc
if errOS() \== 'LINUX' then
if sysVar('sysISPF') = 'ACTIVE' then
address ispExec vput 'zIspfRc' shared
return zIspfRc
endProcedure errSetRc
/*--- output a trace message if m.tr is set -----------------------*/
trc: procedure expose m.
parse arg msg
if m.trace == 1 then
call out 'trc:' msg
return
endProcedure trc
debug: procedure expose m.
parse arg msg
if m.debug == 1 then
call out 'debug' msg
return
endProcedure debug
/*--- display the first comment block of the source as help ----------*/
help: procedure expose m.
parse source . . s3 .
call out right(' help for rexx' s3, 79, '*')
do ax=1 to arg()
say ' ' arg(ax)
end
do lx=1 by 1
if pos('/*', sourceLine(lx)) > 0 then
leave
else if lx > 10 then do
call out 'initial commentblock not found for help'
return
end
end
do lx=lx+1 by 1
li = strip(sourceLine(lx), 't', ' ')
if pos('*/', li) > 0 then
leave
call out li
end
call out right(' end help for rexx' s3, 79, '*')
return 4
endProcedure help
/*--- output all lines (separated by '\n') of all args --------------*/
outNl: procedure expose m.
do ax=1 to max(1, arg())
msg = arg(ax)
sx = 0
bx = -1
do lx=1 until bx >= length(msg)
ex = pos('\n', msg, bx+2)
if ex < 1 then
ex = length(msg)+1
call out substr(msg, bx+2, ex-bx-2)
bx = ex
end
end
return 0
endProcedure outNl
/* copy err end *****************************************************/
/* copy out begin ******************************************************
out interface with simplistic implementation
***********************************************************************/
outIni: procedure expose m.
parse arg msg
if m.out.ini == 1 then
return
m.out.ini = 1
m.out.dst = ''
return
endProcedure outIni
/*--- output a message to the current destination -------------------*/
out: procedure expose m.
parse arg msg
if m.out.ini \== 1 then
call outIni
if m.out.dst == '' then do
say msg
end
else do
st = m.out.dst
sx = m.st.0 + 1
m.st.0 = sx
m.st.sx = msg
end
return 0
endProcedure out
/*--- push an out destination ---------------------------------------*/
outPush: procedure expose m.
parse arg m.out.dst
return
endProcedure outPush
/* copy out end *****************************************************/
}¢--- A540769.WK.REXX.O13(BETAFRTO) cre=2012-10-02 mod=2012-10-02-12.46.05 A540769 ---
$#@
$<~tmp.texw(beta093t)
all = '9999'
$@for li $@¢
if \abbrev($li, 'QR') then iterate
fr = word($li, 3)
to = word($li, 4)
do wx = 1 to words(all)
if word(all, wx) = fr then leave
if word(all, wx) > fr then do
all = subword(all, 1, wx-1) fr subword(all, wx)
m.fr = 0
leave
end
end
m.fr = m.fr + 1
do wx = 1 to words(all)
if word(all, wx) = to then leave
if word(all, wx) > to then do
all = subword(all, 1, wx-1) to subword(all, wx)
m.to = 0
leave
end
end
m.to = m.to - 1
$!
tot = 0
last = ''
len = 16
do wx = 1 to words(all)-1
w1 = word(all, wx)
if last <> left(w1, len) then do
if last <> '' then
$$- last right(tot, 5) right(cMin, 5) right(cMax, 5)
last = left(w1, len)
cMin = tot
cMax = tot
end
tot = tot + m.w1
cMin = min(cMin, tot)
cMax = max(cMax, tot)
end
$$- last right(tot, 5) right(cMin, 5) right(cMax, 5)
$#out 20121002 12:44:22
30.09.2012.01:00 1 0 1
30.09.2012.01:19 12 1 14
30.09.2012.01:20 6 6 12
30.09.2012.01:21 3 3 6
30.09.2012.01:26 2 2 3
30.09.2012.01:27 1 1 2
30.09.2012.01:33 0 0 1
30.09.2012.02:59 1 0 1
30.09.2012.05:00 5 1 5
30.09.2012.05:02 2 2 5
30.09.2012.05:04 0 0 2
30.09.2012.06:30 22 0 30
30.09.2012.06:31 20 20 22
30.09.2012.06:32 19 18 21
30.09.2012.06:33 19 17 20
30.09.2012.06:34 18 18 19
30.09.2012.06:35 18 18 19
30.09.2012.06:36 20 17 20
30.09.2012.06:37 20 19 20
30.09.2012.06:38 19 19 20
30.09.2012.06:39 19 18 19
30.09.2012.06:40 19 18 19
30.09.2012.06:43 18 18 19
30.09.2012.06:47 17 16 18
30.09.2012.06:48 17 16 17
30.09.2012.06:49 17 16 17
30.09.2012.06:51 16 15 17
30.09.2012.06:52 16 15 16
30.09.2012.06:56 16 15 16
30.09.2012.06:57 15 15 16
30.09.2012.06:58 16 14 16
30.09.2012.06:59 15 14 16
30.09.2012.07:00 13 13 16
30.09.2012.07:01 16 13 16
30.09.2012.07:03 16 15 16
30.09.2012.07:04 16 14 16
30.09.2012.07:05 16 15 16
30.09.2012.07:06 16 15 16
30.09.2012.07:07 16 14 16
30.09.2012.07:08 15 14 16
30.09.2012.07:09 15 14 15
30.09.2012.07:10 15 14 15
30.09.2012.07:11 15 14 15
30.09.2012.07:12 15 14 15
30.09.2012.07:14 15 14 15
30.09.2012.07:18 15 14 15
30.09.2012.07:19 15 14 15
30.09.2012.07:20 15 14 15
30.09.2012.07:21 15 14 15
30.09.2012.07:22 14 14 15
30.09.2012.07:23 14 13 15
30.09.2012.07:24 14 14 15
30.09.2012.07:25 15 14 15
30.09.2012.07:28 15 14 15
30.09.2012.07:29 14 14 15
30.09.2012.07:30 14 14 15
30.09.2012.07:31 20 14 21
30.09.2012.07:33 20 19 20
30.09.2012.07:36 19 19 20
30.09.2012.07:39 19 18 19
30.09.2012.07:41 18 18 19
30.09.2012.07:43 17 17 18
30.09.2012.07:45 17 16 17
30.09.2012.07:46 17 16 17
30.09.2012.07:51 17 16 17
30.09.2012.07:52 17 16 17
30.09.2012.07:53 17 16 17
30.09.2012.07:54 17 16 17
30.09.2012.07:56 17 16 17
30.09.2012.07:58 17 16 17
30.09.2012.07:59 17 16 17
30.09.2012.08:00 17 16 17
30.09.2012.08:01 17 16 17
30.09.2012.08:02 16 16 17
30.09.2012.08:03 17 16 17
30.09.2012.08:04 17 16 17
30.09.2012.08:07 17 16 17
30.09.2012.08:08 17 16 17
30.09.2012.08:09 17 16 17
30.09.2012.08:13 17 16 17
30.09.2012.08:14 17 16 17
30.09.2012.08:15 17 16 17
30.09.2012.08:16 14 14 17
30.09.2012.08:17 16 14 16
30.09.2012.08:18 15 13 16
30.09.2012.08:19 28 14 29
30.09.2012.08:20 26 25 28
30.09.2012.08:21 22 22 27
30.09.2012.08:22 22 22 23
30.09.2012.08:23 23 22 23
30.09.2012.08:24 23 22 23
30.09.2012.08:25 22 22 23
30.09.2012.08:26 23 22 23
30.09.2012.08:27 23 22 23
30.09.2012.08:28 22 22 23
30.09.2012.08:29 22 21 23
30.09.2012.08:30 22 21 23
30.09.2012.08:31 22 21 23
30.09.2012.08:32 23 22 23
30.09.2012.08:33 22 22 23
30.09.2012.08:34 22 22 23
30.09.2012.08:35 22 22 23
30.09.2012.08:36 22 21 22
30.09.2012.08:37 21 20 22
30.09.2012.08:38 20 20 22
30.09.2012.08:39 21 20 21
30.09.2012.08:40 21 20 21
30.09.2012.08:41 21 20 21
30.09.2012.08:42 21 20 21
30.09.2012.08:43 21 20 21
30.09.2012.08:44 20 20 21
30.09.2012.08:45 21 20 21
30.09.2012.08:46 20 20 21
30.09.2012.08:48 20 19 20
30.09.2012.08:50 20 19 20
30.09.2012.08:51 20 19 20
30.09.2012.08:54 20 18 20
30.09.2012.08:55 20 18 20
30.09.2012.08:56 20 19 20
30.09.2012.08:58 20 19 20
30.09.2012.09:00 20 18 20
30.09.2012.09:01 20 19 20
30.09.2012.09:03 19 19 20
30.09.2012.09:04 20 19 20
30.09.2012.09:09 21 19 21
30.09.2012.09:12 21 19 21
30.09.2012.09:13 20 20 21
30.09.2012.09:14 21 20 21
30.09.2012.09:15 20 20 21
30.09.2012.09:16 21 20 21
30.09.2012.09:20 21 20 21
30.09.2012.09:21 21 20 21
30.09.2012.09:25 21 20 21
30.09.2012.09:27 20 19 21
30.09.2012.09:28 20 19 20
30.09.2012.09:29 20 18 20
30.09.2012.09:30 20 18 20
30.09.2012.09:31 18 18 20
30.09.2012.09:32 19 18 19
30.09.2012.09:33 19 18 19
30.09.2012.09:34 18 18 19
30.09.2012.09:35 19 18 19
30.09.2012.09:36 18 16 19
30.09.2012.09:37 17 16 18
30.09.2012.09:38 13 13 18
30.09.2012.09:41 12 12 13
30.09.2012.09:43 12 12 15
30.09.2012.09:44 11 11 12
30.09.2012.09:47 10 10 11
30.09.2012.09:52 8 8 10
30.09.2012.10:00 8 8 9
30.09.2012.10:08 7 7 8
30.09.2012.10:14 6 6 7
30.09.2012.10:17 5 5 6
30.09.2012.10:32 4 4 5
30.09.2012.11:01 4 4 5
30.09.2012.11:04 3 3 4
30.09.2012.11:34 2 2 3
30.09.2012.12:00 2 2 5
30.09.2012.12:44 1 1 2
30.09.2012.12:49 2 1 2
30.09.2012.12:58 3 1 7
30.09.2012.13:01 4 3 4
30.09.2012.13:06 3 3 4
30.09.2012.13:33 2 2 3
30.09.2012.15:00 11 2 18
30.09.2012.15:01 7 7 11
30.09.2012.15:02 6 6 7
30.09.2012.15:03 4 4 6
30.09.2012.15:35 5 4 5
30.09.2012.16:00 8 5 20
30.09.2012.16:10 7 7 8
30.09.2012.16:12 6 6 7
30.09.2012.16:36 5 5 6
30.09.2012.17:00 21 5 31
30.09.2012.17:01 13 13 26
30.09.2012.17:02 10 10 13
30.09.2012.17:03 8 8 10
30.09.2012.17:05 7 7 8
30.09.2012.17:06 6 6 7
30.09.2012.17:08 4 4 6
30.09.2012.17:30 6 4 25
30.09.2012.17:31 5 5 6
30.09.2012.17:40 4 4 5
30.09.2012.17:45 3 3 4
30.09.2012.17:54 4 3 4
30.09.2012.17:55 3 3 4
30.09.2012.18:00 15 3 25
30.09.2012.18:01 8 8 20
30.09.2012.18:02 7 7 8
30.09.2012.18:03 6 6 7
30.09.2012.18:04 5 5 6
30.09.2012.18:06 4 4 5
30.09.2012.18:14 3 3 4
30.09.2012.18:22 2 2 3
30.09.2012.19:00 19 2 25
30.09.2012.19:01 10 10 19
30.09.2012.19:02 8 8 10
30.09.2012.19:03 6 6 8
30.09.2012.19:05 5 5 6
30.09.2012.19:06 4 4 5
30.09.2012.19:10 3 3 4
30.09.2012.19:26 2 2 3
30.09.2012.20:00 15 2 16
30.09.2012.20:01 4 4 15
30.09.2012.20:02 3 3 4
30.09.2012.20:06 2 2 3
30.09.2012.20:20 1 1 2
30.09.2012.21:00 5 1 12
30.09.2012.21:01 4 4 5
30.09.2012.21:02 3 3 4
30.09.2012.21:03 2 2 3
30.09.2012.21:04 1 1 2
30.09.2012.21:05 0 0 1
30.09.2012.22:00 2 0 3
30.09.2012.22:01 0 0 2
30.09.2012.22:15 1 0 1
30.09.2012.22:24 0 0 1
}¢--- A540769.WK.REXX.O13(BINDCMN) cre=2013-11-04 mod=2013-11-04-12.01.20 A540769 ---
/* REXX ----------------------------------------------------------------
bindCMN: bind Interface for changeman
synopsis: BINDCMN DBP appl pgm install
parameters:
appl: the cmn application (first 4 letters of cmn package)
pgm : the program name
install: installDate in format dd.mm.yyyy
output:
DD DBP: to this DD the DBP Member is written
4.10.13: Walter neu
---------------------------------------------------------------------*/
call errReset 'h'
parse upper arg mFun mRest
if pos('?', mFun mRest) > 0 | mFun = '' then
exit help()
if mFun == 'DBP' then
call dbp mRest
else
exit errHelp('i}bad args:' mFun mRest)
exit
DBP: procedure expose m.
parse arg appl pgm inst rest
if length(appl) > 4 then
call err 'i}bad appl:' appl
if length(pgm) > 8 then
call err 'i}bad pgm:' pgm
if translate(inst, '000000000', '123456789') \== '00.00.0000' then
call err 'i}bad installDate' inst
call sqlConnect 'DP4G'
call sqlExec "insert into oa1p.tAdm40BindPgm values ('" ,
|| appl || "', '"pgm"', '"inst"')"
call sqlPreOpen 1, 'select stmt from oa1p.vAdm40BindDBP' ,
'order by appl, pgm, install, rdlSeq, cqSeq, ovSeq'
do sx=1 while sqlFetchInto(1, ':m.st.sx')
end
call sqlClose 1
call sqlDisConnect 'DP4G'
call tsoOpen 'DBP', 'W'
call writeDD 'DBP', 'M.ST.', sx-1
call tsoClose 'DBP', 'W'
return
endProcedure DBP
/* copy sqlC begin ***************************************************
sql interface Compatibility mode
***********************************************************************/
/*--- prepare and declare 'c'cx from sql src -------------------------*/
sqlPreDeclare: procedure expose m.
parse arg cx, src, ggRetOk, descOut
m.sql.cx.type = ''
res = sqlPrepare(cx, src, ggRetOk, descOut)
if res >= 0 then
return sqlExec('declare c'cx 'cursor for s'cx)
return res
endProcedure sqlPreDeclare
/*--- prepare, declare and open 'c'cx from sql src -------------------*/
sqlPreOpen: procedure expose m.
parse arg cx, src, descOut, descInp
res = sqlPreDeclare(cx, src, descOut, descInp)
if res >= 0 then
return sqlOpen(cx)
return res
endProcedure sqlPreOpen
/*--- fetch cursor 'c'cx into variables ggVars -----------------------*/
sqlFetchInto:
parse arg ggCx, ggVars
if ggVars == '' then
ggVars = 'descriptor :M.SQL.'ggCX'.D'
/* accept sqlCodes > 0 except 100 */
ggRes = sqlExec('fetch c'ggCx 'into' ggVars, 100)
if ggRes == 0 then
return 1
if ggRes == 100 then
return 0
return ggRes
endProcedure sqlFetchInto
/*--- return sql variable list for stem st and fields the word in vars
if withInd == 1 then with sqlIndicator variables
sqlVars('S', 'A B') --> ':S.A, :S.B'
sqlVars('S', 'A B', 1) --> ':S.A :S.A.SQLIND, :S.B :S.B.SQLIND'
----------------------------------------------------------------------*/
sqlVars: procedure expose m.
parse arg st, vars, withInd
res = ''
if st ^== '' then
st = st'.'
do ix=1 to words(vars)
res = res', :'st || word(vars, ix)
if withInd == 1 then
res = res ':'st || word(vars, ix)'.sqlInd'
end
return substr(res, 3)
endProcedure sqlVars
/*--- open cursor 'c'cx fetch all into variables vars and close
st = passed stem, sx = row number
return number of rows fetched ----------------------------------*/
sqlOpAllCl:
parse arg ggCx, st, ggVars
if arg() >= 4 then do
call sqlDescribeInput ggCx
do ggAx=4 to arg()
call sqlDASet ggCx, 'I', ggAx-3, arg(ggAx)
end
ggRes = sqlOpen(ggCx use)
end
else do
ggRes = sqlOpen(ggCx)
end
if ggRes < 0 then
return ggRes
do sx = 1 until ggRes \== 1
ggRes = sqlFetchInto(ggCx, ggVars)
end
m.st.0 = sx - 1
call sqlRxClose ggCx
if ggRes == 0 then
return m.st.0
return ggRes
endProcedure sqlOpAllCl
/*--- prepare, declare open cursor 'c'cx, fetch all and close
return number of rows fetched ----------------------------------*/
sqlPreAllCl:
parse arg ggCx, ggSrc, st, ggVars
ggRes = sqlPreDeclare(ggCx, ggSrc)
if ggRes >= 0 then
return sqlOpAllCl(ggCx, st, ggVars)
return ggRes
endProcedure sqlPreAllCl
/*--- execute statement 's'cx using arguments arg(2), arg(3)... ------*/
sqlExecStmt:
parse arg ggCx ggRetOk /* no , for ggRetOk, arg(2) is used already| */
if ggAx > 1 then
call sqlDescribeInput ggCx
do ggAx=2 to arg()
call sqlDASet ggCx, 'I', ggAx-1, arg(ggAx)
end
return sqlExec('execute s'ggCx 'using descriptor :M.SQL.'ggCx'.I',
, ggRetOk)
endProcedure execStmt
/*--- execute immediate the sql src ----------------------------------*/
/* copy sqlC end **************************************************/
/* copy SQL begin ***************************************************
Achtung: inc generiert sql aus sqlRx, Aenderungen nur in sqlRx|
sql interface
***********************************************************************/
/*--- initialize sql -----------------------------------------------*/
sqlIni: procedure expose m.
if m.sql.ini == 1 then
return
m.sqlNull = '---'
m.sqlInd = 'sqlInd'
m.sql.defCurs= 49
m.sqlCAMsg = 0
m.sqlSuMsg = 2
m.sql.ini = 1
m.sql.conType = ''
m.sql.conDbSys = ''
m.sql.conhost = ''
isInProd = wordPos(sysvar(sysNode), 'RZ2 RZ4') > 0
m.sqlRetOK = 'dne' copies('rod', \ isInProd)
return 0
endProcedure sqlIni
/*--- connect to the db2 subsystem sys -----------------------------*/
sqlConnect: procedure expose m.
parse upper arg sys, ggRetOk
call sqlIni
address tso "SUBCOM DSNREXX"
if rc <> 0 then do
sRc = RXSUBCOM('ADD','DSNREXX','DSNREXX') /* ADD HOST CMD ENV */
if sRc <> 0 then
call err 'rc' sRc 'from RXSUBCOM(ADD, DSNREXX, DSNREXX)'
end
if sys = '-' then
return 0
if sys \== '' then
nop
else if sysvar(sysnode) == 'RZ1' then
sys = 'DBAF'
/* else if sysvar(sysnode) == 'RZ4' then
sys = 'DP4G'
*/ else
call err 'no default subsys for' sysvar(sysnode)
m.sql.conDbSys = sys
ggSqlStmt = 'connect' sys
address dsnRexx ggSqlStmt
if rc = 0 then
return 0
interpret sqlErrorHandler(rc, ggRetOk, ggSqlStmt)
endProcedure sqlConnect
/*--- diconnect from db2 ---------------------------------------------*/
sqlDisconnect: procedure expose m.
parse arg retOk
ggSqlStmt = 'disconnect'
m.sql.conDbSys = ''
address dsnRexx ggSqlStmt
if rc = 0 then
return 0
interpret sqlErrorHandler(rc, ggRetOk, ggSqlStmt)
endProcedure sqlDisconnect
/*--- execute a query from sql, with one resultset -------------------*/
sqlQuery: procedure expose m.
parse arg cx, src, retOk, resTy
res = sqlPrepare(cx, src, retOk, 1)
if res < 0 then
return res
m.sql.cx.type = resTy
res = sqlExec('declare c'cx 'cursor for s'cx, retOk)
if res < 0 then
return res
res = sqlExec('open c'cx, retOk)
if res < 0 then
return res
call sqlFetchVars cx
m.sql.cx.updateCount = sqlErrd.3
m.sql.cx.resultSet = cx
return res
endProcedure sqlQuery
/*--- fetch next row to m.dst.* at end return false ------------------*/
sqlFetch: procedure expose m.
parse arg cx, dst, retOk
fetCode = sqlExec('fetch c'cx 'into' sqlFetchVars(cx), 100 retOk)
if fetCode == 100 then
return 0
if fetCode < 0 then
return fetCode
call sqlSetNull cx, dst
return 1
endProcedure sqlFetch
/*--- close cursor 'c'cx ---------------------------------------------*/
sqlClose: procedure expose m.
parse arg cx, retOk
return sqlExec('close c'cx, retOk)
endProcedure sqlClose
/*-- execute an sql with no resultset, but possibly outParms ---------*/
sqlUpdate: procedure expose m.
parse arg cx, src, retOk
m.sql.cx.updateCount = ''
m.sql.cx.resultSet = ''
bx = verify(src, '( ')
if bx > 0 then
fun = translate(word(substr(src, bx), 1))
if fun = 'SET' then do
w2 = translate(word(substr(src, bx), 2))
if \ abbrev(w2, ':') then
return sqlExImm(src, retOk)
trace ?r
ex = pos('=', w2)
if ex = 0 then
ex = length(w2)+1
var = strip(substr(w2, 2, ex-2))
if var = '' then
call err 'bad hostVar in' src
m.sql.outVar = var
src2 = 'set :M.sql.out.'var substr(w, ex) subword(src, 3)
return sqlExec(src2, retOk)
end
if fun == 'DECLARE' then do
if 'GLOBAL' == translate(word(substr(src, bx), 2)) then
return sqlExImm(src, retOk)
end
res = sqlExec(src, retOk)
if wordPos(fun, 'DELETE INSERT UPDATE') > 0 then
m.sql.cx.updateCount = sqlErrd.3
return res
endProcedure sqlUpdate
/*-- execute a query, update or call ---------------------------------*/
sqlExecute: procedure expose m.
parse arg cx, src, retOk
src = inp2Str(src, '-sql')
f = translate(word(substr(src, max(verify(src, '( '), 1)), 1))
m.sql.cx.fun = f
if f == 'SELECT' | f == 'WITH' then
return sqlQuery(cx, src, retOk)
else if f == 'CALL' then
call err 'implement sql call for:' src
else
return sqlUpdate(cx, src, retOk)
endProcedure sqlExecute
/*-- execute a query, copy result to stem ----------------------------*/
sql2St: procedure expose m.
parse arg src, dst, retOk, type
cx = m.sql.defCurs
res = sqlQuery(cx, src, retOk, type)
if res >= 0 then do
do sx=1 while sqlFetch(cx, dst'.'sx)
end
res = sx-1
end
m.dst.0 = res
call sqlClose cx
return res
endProcedure sql2St
/*-- execute a query and return value of the first column
if > 1 row fail, if 0 rows return arg(3) or fail ----------*/
sql2One: procedure expose m.
parse arg src, dst
cx = m.sql.defCurs
call sqlQuery cx, src
f1 = sqlFetch(cx, dst)
if f1 then
f2 = sqlFetch(cx, dst)
call sqlClose cx
if \ f1 then
if arg() > 2 then
return arg(3)
else
call err 'no row returned for:' src
if f2 then
call err '2 or more rows for' src
c1 = m.sql.cx.col.1
return m.dst.c1
endProcedure sql2One
/*--- reset sql cursor 'c'cx fields ----------------------------------*/
sqlReset: procedure expose m.
parse arg cx
m.sql.cx.updateCount = ''
m.sql.cx.resultSet = ''
m.sql.cx.needDesc = 1
m.sql.cx.d.sqlD = 'noSqlDA'
m.sql.cx.i.sqlD = 'noDescInp'
m.sql.cx.fetchVars = ''
m.sql.cx.type = ''
m.sql.cx.col.0 = ''
m.sql.cx.into = ''
return
endProcedue sqlReset
/*--- prepare statement 's'cx from sql src into descriptor desc ------*/
sqlPrepare: procedure expose m.
parse arg cx, src, retOk, descOut
src = inp2str(src, '%qn%s ')
s = ''
if descOut == 1 then
s = 'into :M.SQL.'cx'.D'
call sqlReset cx
return sqlExec('prepare s'cx s 'from :src', retOk)
endProcedure sqlPrepare
/*--- open cursor 'c'cx using arguments arg(2), arg(3)... ------------*/
sqlOpen: procedure expose m.
parse arg cx us
if us == '' then do
if arg() <= 1 then
return sqlExec('open c'cx)
call sqlDescribeInput cx
do ix=1 to arg()-1
call sqlDASet cx , 'I', ix, arg(ix+1)
end
end
return sqlExec('open c'cx 'using descriptor :M.SQL.'cx'.I')
endProcedure sqlOpen
/*--- execute a prepared statement with arg(2), arg(3)... ------------*/
sqlExePreSt: procedure expose m.
parse arg cx retOk
if arg() <= 1 then
return sqlExec('execute s'cx, retOk)
call sqlDescribeInput cx
do ix=1 to arg()-1
call sqlDASet cx , 'I', ix, arg(ix+1)
end
return sqlExec('execute s'cx 'using descriptor :M.SQL.'cx'.I',
, retOk)
endProcedure sqlExePreSt
/*--- describe output (if not already done)
and return size of sqlDa ------------------------------------*/
sqlDescribeOutput: procedure expose m.
parse arg cx, force
if force == 1 | \ datatype(m.sql.cx.d.sqlD, 'n') then
call sqlExec 'describe s'cx 'into :M.SQL.'cx'.D', 0
return m.sql.cx.d.sqlD
endProcedure sqlDescribeOutput
/*--- describe input (if not already done)
and return size of input sqlDA ------------------------------*/
sqlDescribeInput: procedure expose m.
parse arg cx, force
if force == 1 | \ datatype(m.sql.cx.i.sqlD, 'n') then
call sqlExec 'describe input s'cx 'into :M.SQL.'cx'.I'
return m.sql.cx.i.sqlD
endProcedure sqlDescribeInput
/*--- describe table and return sqlDA --------------------------------*/
sqlDescribeTable: procedure expose m.
parse upper arg tb, force
if force == 1 | \ datatype(m.sql.table.tb.sqlD, 'n') then
call sqlExec 'describe table :tb into :M.SQL.TABLE.'tb
return 'SQL.TABLE.'tb
endProcedure sqlDescribeTable
/*--- return select column list for table tb
omit Blobs (blobMax < 0) or substr(blob, 1, blobMax) ----------*/
sqlColList: procedure expose m.
parse arg tb al, blobMax
sd = sqlDescribeTable(tb)
bs = ''
lst = ''
if al \== '' & right(al, 1) \== '.' then
al = al'.'
do sx=1 to m.sd.sqld
if wordPos(m.sd.sx.sqlType, '404 405 408 409 412 413') < 1 then
lst = lst',' al || m.sd.sx.sqlName
else do
bs = bs m.sd.sx.sqlName
if blobMax >= 0 then
lst = lst', length('al || m.sd.sx.sqlName')' ,
m.sd.sx.sqlName'Len' ,
|| ', substr('al || m.sd.sx.sqlName ,
|| ', 1,' blobMax')' m.sd.sx.sqlName
end
end
m.sd.colList = substr(lst, 3)
m.sd.blobs = strip(bs)
return substr(lst, 3)
endProcedure sqlColList
/*--- put sqlNull in all vars where indicator says so ---------------*/
sqlSetNull: procedure expose m.
parse arg cx, dst
do nx=1 to m.sql.cx.sqlNull.0
col = m.sql.cx.sqlNull.nx
if m.dst.col.sqlInd < 0 then
m.dst.col = m.sqlNull
end
return
endProcedure sqlSetNull
/*--- use describe output to generate column names,
fetchVariables and sqlNull names ---------------------*/
sqlFetchVars: procedure expose m.
parse arg cx
if m.sql.cx.fetchVars \== '' then
return m.sql.cx.fetchVars
f = m.sql.cx.type
m.sql.cx.sqlNull.0 = 0
if abbrev(f, ':') then
return mPut(sql.cx.fetchVars, f)
call sqlDescribeOutput cx
if f \== '' then do
f = class4Name(f)
m.sql.cx.type = f
f = oClaMet(f, 'oFlds')
if m.f.0 < m.sql.cx.d.sqlD then
call err 'not enough column names'
end
m.sql.cx.col.0 = m.sql.cx.d.sqlD
nx = 0
vars = ''
do kx=1 to m.sql.cx.d.sqlD
cn = sqlVarName(f, kx, m.sql.cx.d.kx.sqlName)
m.sql.cx.col.kx = cn
m.sql.cx.col2kx.cn = kx
vars = vars', :m.dst.'cn
if m.sql.cx.d.kx.sqlType // 2 = 1 then do
vars = vars' :m.dst.'cn'.sqlInd'
nx = nx + 1
m.sql.cx.sqlNull.nx = cn
end
end
m.sql.cx.sqlNull.0 = nx
m.sql.cx.fetchVars = substr(vars, 3)
return m.sql.cx.fetchVars
endProcedure sqlFetchVars
sqlCol2kx: procedure expose m.
parse arg cx, nm
call sqlFetchVars cx
if symbol('M.SQL.CX.COL2KX.NM') \== 'VAR' then
return ''
kx = m.sql.cx.col2kx.nm
if m.sql.cx.col.kx == nm then
return kx
drop m.sql.cx.col.kx
return ''
endProcedure sqlCol2kx
sqlVarName: procedure expose m. sqlVarName.
parse arg f, kx, sNa
if f == '' then do
cx = verifId(sNa)
if cx > 0 then /* avoid bad characters for classNew| */
sNa = left(sNa, cx-1)
upper sNa
if sNa == '' | symbol('sqlVarName.sNa') == 'VAR' then
sNa = 'COL'kx
sqlVarName.sNa = 1
return sNa
end
else do
if m.f.kx == '' then
call err 'implement empty varName'
return substr(m.f.kx, 2)
end
endProcedure sqlVarName
/*--- set one value in a DA, handle nulls ----------------------------*/
sqlDASet: procedure expose m.
parse arg cx, da, ix, val
m.sql.cx.da.ix.sqlData = val
m.sql.cx.da.ix.sqlInd = - (val == m.sqlNull)
/* data types schienen einmal nicht zu funktionieren .......
if wordPos(m.da.ix.sqlType, '384 385 388 389 392 393') > 0 then
m.da.ix.sqlType = 448 + (m.da.ix.sqlType // 2) */
return
endProcedure sqlDASet
sqlExImm:
parse arg ggSrc, ggRetOk
return sqlExec('execute immediate :ggSrc', ggRetOk)
endProcedure sqlExImm
sqlCommit: procedure expose m.
parse arg src
return sqlExec('commit')
endProcedure sqlCommit
/*--- execute sql thru the dsnRexx interface -------------------------*/
sqlExec: /* no procedure, to keep variables sql... */
parse arg ggSqlStmt, ggRetOk
m.sql.sqlHaHi = ''
address dsnRexx 'execSql' ggSqlStmt
/* say 'sqlCode' sqlCode 'rc' rc 'for' ggSqlStmt ggNo */
if rc = 0 then
return 0
interpret sqlErrorHandler(rc, ggRetOk, ggSqlStmt)
endProcedure sqlExec
sqlErrorHandler: procedure expose m. ,
sqlCode sqlErrMc sqlErrP sqlErrD. sqlWarn. sqlState
parse arg drC, retOk, verb rest
if drC == 0 then
return 'return 0'
if wordPos(drC, '1 -1') < 0 then
return "call err 'dsnRexx rc" drC"' sqlmsg()"
if pos('-', retOK) < 1 then
retOK = retOk m.sqlRetOk
if pos('*', retOK) > 0 | wordPos(sqlCode, retOK) > 0 then do
if sqlCode < 0 & pos('say', retOK) > 0 then
return "call outSt errMsg(' }'sqlMsg()); return" sqlCode
else
return "return" sqlCode
end
upper verb
if verb == 'DROP' then do
if (sqlCode == -204 | sqlCode == -458) ,
& wordPos('dne', retok) > 0 then
return 'return' sqlCode
if sqlCode = -672 & verb=='DROP' ,
& wordPos('rod', retok) > 1 then do
hahi = m.sql.sqlHaHi ,
|| sqlMsgLine(sqlCode, 'tb='sqlErrMc ,verb rest)'\n'
call sqlExec 'alter table' SqlErrMc ,
'drop restrict on drop'
hahi = hahi || m.sql.sqlHaHi ,
|| sqlMsgLine(sqlCode, , ggSqlStmt)'\n'
call sqlExec verb rest
m.sql.sqlHaHi = hahi
return 'return' sqlCode
end
end
if drC < 0 then
return "call err sqlmsg(); return" sqlCode
if (sqlCode <> 0 | sqlWarn.0 ^==' ') & pos('w',retOK) < 1 then
return "call outSt errMsg(' }'sqlMsg()); return" sqlCode
return 'return' sqlCode
endProcedure sqlErrorHandler
sqlMsgLine: procedure expose m. sqlErrD.
parse arg res, cnt, src, plus
verb = translate(word(src, 1))
if datatype(res, 'n') then
res = 'sqlCode' res
if cnt \== '' then do
res = res',' cnt
vx = wordPos(translate(word(src,1)), 'DELETE INSERT UPDATE')
if datatype(cnt, 'n') then
if vx > 0 then
res = res 'rows' word('deleted inserted updated', vx)
else if cnt <> 0 then
res = res 'rows updated'
end
if plus \== '' then
res = res',' plus
if abbrev(res, ', ') then
res = substr(res, 3)
if src \== '' then do
ll = 75 - length(res)
aa = strip(src)
if length(aa) > ll then
aa = space(aa, 1)
if length(aa) > ll then
aa = left(aa, ll-3)'...'
res = res':' aa
end
return res
endProcedure sqlMsgLine
/*--- send a command to db2 through the TSO dsn processor ------------*/
sqlDsn: procedure expose m.
parse arg st, sys, cmd, rcOk
x = outtrap('M.'st'.')
push 'END'
push cmd
address tso 'DSN SYSTEM('sys')'
rr = rc
x = outtrap(off)
if rr = 0 | rcOk = '*' | wordPos(rr, rcOk) > 0 then
return rr
fl = max(1, m.st.0 - 10)
em = 'rc' rr 'for DSN SYSTEM('sys') cmd' cmd,
'\nOuputlines' fl '-' m.st.0':'
do lx=fl to m.st.0
em = em '\n' strip(m.st.lx, 't')
end
call err em
endProcedure sqlDsn
/*--- issue an sql error message -------------------------------------*/
sqlMsg: /* no procedure, to keep variables sql... */
if \ dataType(sqlCode, 'n') then do
ggRes = 'sqlCode' sqlCode 'not numeric\n'sqlCaMsg()
end
else do
ggRes = sqlDsntiar(sql2CA())
ggWa = sqlMsgWarn()
if ggWa \= '' then
ggRes = ggRes'\nwarnings' ggWa
if m.sqlCAMsg == 1 then
ggRes = ggRes'\n'sqlCaMsg()'\n'sqlCaMsg(sqlCa2Rx(sqlCa))
end
ggSt = 'SQL.HOST'
ggVa = 'SQL.HOST.VAR'
ggBe = 'SQL.HOST.BEF'
call sqlHostVars ggSqlStmt, 12, ggSt
ggFrom = 'ggSqlStmt'
ggW1 = translate(word(ggSqlStmt, 1))
ggW2 = translate(word(ggSqlStmt, 2))
if ggW1 == 'PREPARE' then
ggFrom = sqlHostVarFind(ggSt, 'FROM')
else if ggW1 ggW2 == 'EXECUTE IMMEDIATE' then
ggFrom = sqlHostVarFind(ggSt, 1)
ggPos = 0
if datatype(sqlErrd.5, 'n') & sqlErrd.5 > 0 then do
ggPos = sqlErrd.5
ggRes = ggRes || sqlMsgSrcPos(value(ggFrom), sqlErrd.5)
end
if ggFrom == 'ggSqlStmt' then do
ggRes = ggRes'\nsql =' sqlShorten(ggSqlStmt, 2000, ggPos)
end
else do
ggRes = ggRes'\nsql =' sqlShorten(value(ggFrom), 2000, ggPos)
ggRes = ggRes'\nstmt =' sqlShorten(ggSqlStmt, 2000)
end
ggPref = '\nwith'
do ggXX=1 to m.ggSt.0
if ggFrom = m.ggVa.ggXX then
iterate
ggRes = ggRes || ggPref m.ggBe.ggXX ':'m.ggVa.ggXX ,
'=' sqlShorten(value(m.ggVa.ggXX), 210)
ggPref = '\n '
end
if m.sqlSuMsg == 1 | (m.sqlSuMsg == 2 & m.sql.conHost \== '') then
ggRes = ggRes'\nsubsys =' m.sql.conDbSys ,
|| ', host =' m.sql.conHost', interfaceType' m.sql.conType
return ggRes
endSubroutine sqlMsg
sqlShorten: procedure expose m.
parse arg txt, maxL, pos
if length(txt) <= maxL then
return txt
if \ datatype(pos, 'n') | pos < 1 then
pos = 1
ex = pos + min(60, maxL%7)
if ex <= maxL - 4 then
return left(txt, maxL-4) '...'
if ex >= length(txt) then
return left(txt, 67) '...\n'substr(txt, length(txt)-maxL+72)
else
return left(txt, 67) '...\n'substr(txt, ex-maxL+76, maxL-75) ,
'...'
endProcedure sqlShorten
/*--- use dsnTiar to translate sql Info to error text ----------------*/
sqlDsnTiar: procedure expose m.
parse arg ca
if -438 = sqlCa2Rx(ca) then
return '\nSQLCODE = -438:',
'APPLICATION RAISED ERROR WITH sqlState' sqlState ,
'and DIAGNOSTIC TEXT:' sqlErrMc
liLe = 78
msLe = liLe * 10
msg = d2c(msLe,2) || left('', msLe)
len = d2c(liLe, 4)
ADDRESS LINKPGM "DSNTIAR ca msg len"
if rc = 0 then nop
else if rc = 4 then say 'warn linkPgm dsnTiar rc' rc 'sqlCa' ca
else call err 'linkPgm dsnTiar rc' rc 'sqlCa' ca
res = strip(substr(msg, 13, liLe-10))
cx = pos(', ERROR: ', res)
if cx > 0 then
res = left(res, cx-1)':' strip(substr(res, cx+9))
do c=3+liLe by liLe to msLe while substr(msg, c, 10) = ''
res = res'\n 'strip(substr(msg, c+10, liLe-10))
end
return res
endProcedure sqlDsnTiar
/*--- format all rexx sqlCa fields into a message --------------------*/
sqlCaMsg:
return 'sqlCode' sqlCode 'sqlState='sqlState ,
'\n errMC='translate(sqlErrMc, ',', 'ff'x) ,
'\n warnings='sqlWarnCat('+') 'erP='sqlErrP ,
'\n errD.1='sqlErrD.1 '2='sqlErrD.2 '3='sqlErrD.3 ,
'\n errD.4='sqlErrD.4 '5='sqlErrD.5 '6='sqlErrD.6
endProcedure sqlCaMsg
/*--- format the sqlCA into the dsnTiar SQLCA ------------------------*/
sql2Ca: procedure expose m. ,
sqlCode sqlErrMc sqlErrP sqlErrD. sqlWarn. sqlState
if \ (datatype(sqlcode, 'n') & datatype(sqlErrD.1, 'n') ,
& datatype(sqlErrD.3, 'n')) then
return err('sqlCode etc. not numeric\nsqlCa =' sqlCaMsg())
if digits() < 10 then
numeric digits 10
sqlCa = 'SQLCA ' || d2c(136, 4) || d2c(sqlCode, 4) ,
|| d2c(min(70, length(sqlErrMc)), 2)left(sqlErrMc, 70) ,
|| left(sqlErrP, 8) ,
|| d2c(sqlErrD.1, 4)d2c(sqlErrD.2, 4)d2c(sqlErrD.3, 4) ,
|| d2c(sqlErrD.4, 4)d2c(sqlErrD.5, 4)d2c(sqlErrD.6, 4) ,
|| sqlWarnCat() || sqlState
if length(sqlCa) <> 136 then
call err 'sqlCa length' length(sqlCa) 'not 136' ,
'\n'sqlCaMsg() '==>' ca', hex='c2x(ca)
return sqlCa
endProcedure sql2Ca
/*--- extract the fields from the SqlCA and put it to rexx vars ------*/
sqlCA2Rx: procedure expose m. ,
sqlCode sqlErrMc sqlErrP sqlErrD. sqlWarn. sqlState
parse arg ca
numeric digits 10
if length(ca) < 136 | c2d(substr(ca, 9, 4), 4) <> 136 then
call err 'bad sqlCa len' length(ca) 'not 136:' ca', hex='c2x(ca)
sqlCode = c2d(substr(ca, 13 ,4), 4)
sqlErrMC = substr(ca, 19, c2d(substr(ca, 17, 2), 2))
sqlErrP = substr(ca, 89, 8)
do ix=1 to 6
sqlErrD.ix = c2d(substr(ca, 93 + 4 * ix, 4), 4)
end
do ix=0 to 10
sqlWarn.ix = substr(ca, 121 + ix, 1)
end
sqlState = substr(ca, 132, 5)
return sqlCode
endProcedure sqlCA2Rx
/*--- concat the sql warnings with Separator sep --------------------*/
sqlWarnCat: procedure expose m. sqlWarn.
parse arg sep
return sqlWarn.0 || sep,
|| sqlWarn.1||sqlWarn.2||sqlWarn.3||sqlWarn.4||sqlWarn.5||sep ,
|| sqlWarn.6||sqlWarn.7||sqlWarn.8||sqlWarn.9||sqlWarn.10||sep
endProcedure sqlWarnCat
/*--- make the text for sqlWarnings ----------------------------------*/
sqlMsgWarn: procedure expose m. sqlWarn.
r = ''
text =' 1=W var truncated, 1=S scrollable, 1=N nonScrollable,' ,
'2=W nulls in aggregate,' ,
'3=W more cols than vars,' ,
'3=Z more result sets than locators,' ,
'4=W no where, 4=D sensitive dynamic, 4=I insensitive,' ,
'4=S sensitive static,' ,
'5=W not valid sql, 5=1 readOnly, 5=2 readDelete,' ,
'5=3 readDeleteUpdate,' ,
'6=W day changed to month range,' ,
'7=W dec digits truncated,' ,
'8=W char substituted,' ,
'9=W arith excep in count, 9=Z multipe result sets,' ,
'10=W char conversion err in ca,'
do wx = 1 to 10
w = sqlWarn.wx
if w = ' ' then
iterate
t = wx'='w
cx = pos(' 'wx'='w' ', text)
ex = pos(',' , text, cx + 1)
if cx > 0 & ex > cx then
r = r substr(text, cx+1, ex-cx)
else
r = r wx'='w '?,'
end
r = strip(r, 't', ',')
if r = '' & sqlwarn.0 <> '' then
call err 'sqlWarn.0='sqlWarn.0 'but all warns empty'
return r
endProcedure sqlMsgWarn
/*--- show in the source src the point pos (where error occured)
a few lines from src around pos and arrow to pos ----------*/
sqlMsgSrcPos: procedure expose m.
parse arg src, pos
liLe = 68
liCn = 3
afLe = 25
t1 = space(left(src, pos), 1)
t2 = left(' ', substr(src, pos, 1) == ' ' ,
| substr(src, pos+1, 1) == ' ') ,
|| space(substr(src, pos+1), 1)
afLe = min(afLe, length(t2))
if length(t1) + afLe > liLe * liCn then
t1 = '...'right(t1, liLe * liCn - afLe -3)
else if length(t1)+length(t2) > liLe then
t1 = left(' ', (liCn * liLe - length(t1) -afLe) // liLe)||t1
pL = length(t1) // liLe
if length(t2) <= liLe-pL then
tx = t1 || t2
else
tx = t1 || left(t2, liLe-pL-3)'...'
res = '\nsrc' strip(substr(tx, 1, liLe), 't')
do cx=1+liLe by liLe to length(tx)
res = res || '\n +' strip(substr(tx, cx, liLe), 't')
end
loc = 'pos' pos 'of' length(src)
if length(loc)+6 < pL then
return res'\n >' right('>>>'loc'>>>', pL)
else
return res'\n >' left('', pL-1)'<<<'loc'<<<'
endProcdedure sqlMsgSrcPos
/*--- get the hostVars in the sql in src and the word before ---------*/
sqlHostVars: procedure expose m.
parse arg src, cnt, st
cx = 1
sx = 1
do cnt
cx = pos(':', src, cx) + 1
if cx < 2 then
leave
if pos(substr(src, cx, 1), m.ut.alfRexN1) > 0 then
iterate
ex = verify(src, m.ut.alfRex, 'n', cx)
if ex < 1 then
m.st.var.sx = substr(src, cx)
else
m.st.var.sx = substr(src, cx, ex - cx)
if m.st.var.sx == '' | length(m.st.var.sx) > 100 then
iterate
/* search word before */
do bE = cx-2 by -1 to 1 ,
while substr(src, bE, 1) == ' '
end
do bB = bE by -1 to max(1, bE-20),
while pos(substr(src, bB, 1), m.ut.alfa) > 0
end
if bB < bE & bB >= 0 then
m.st.bef.sx = substr(src, bB+1, bE-bB)
else
m.st.bef.sx = ''
sx = sx + 1
end
m.st.0 = sx-1
return sx
endProcedure sqlHostVars
/*--- find the name of hostvar, by index or by before ----------------*/
sqlHostVarFind: procedure expose m.
parse arg st, fnd
if datatype(fnd, 'n') & fnd <= m.st.0 then
return m.st.var.fnd
do ix=1 to m.st.0
if translate(m.st.bef.ix) = fnd then
return m.st.var.ix
end
return ''
endSubroutine sqlHostVarFind
/* copy SQL end **************************************************/
/* copy adrTso begin *************************************************/
/*--- send ggTsoCmd to tso, fail if rc <> 0 or not listed in ggRet ---*/
adrTso:
parse arg ggTsoCmd, ggRet
address tso ggTsoCmd
if rc == 0 then return 0
else if ggRet == '*' then return rc
else if wordPos(rc, ggRet) > 0 then return rc
else
call err 'adrTso rc' rc 'for' ggTsoCmd
return /* end adrTso */
/*--- format dsn from tso format to jcl format -----------------------*/
dsn2jcl: procedure expose m.
parse upper arg dsn ., addPrefix
if left(dsn,1) = "'" then
return strip(dsn, 'b', "'")
sp = sysvar('SYSPREF')
if sp == '' then
sp = userid()
cx = pos('~', dsn)
if cx < 1 & addPrefix == 1 then
return sp'.'dsn
do while cx \== 0
le = left(dsn, cx-1)
ri = substr(dsn, cx+1)
if right(le, 1) == '.' | left(ri, 1) == '.' then
dsn = le || sp || ri
else
dsn = le || left('.', le \== '') || sp ,
|| left('.', ri \== '') || ri
cx = pos('~', spec, cx)
end
return dsn
endProcedure dsn2Jcl
/*--- format dsn from jcl format to tso format -----------------------*/
jcl2dsn: procedure expose m.
parse arg dsn .
return "'"dsn"'"
endProcedure jcl2dsn
dsnSetMbr: procedure expose m.
parse arg dsn, mbr
bx = pos('(', dsn)
if bx > 0 then
dsn = strip(left(dsn, bx-1))
if mbr <> '' then
dsn = dsn'('strip(mbr)')'
return dsn
endProcedure dsnSetMbr
dsnGetMbr: procedure expose m.
parse arg dsn
lx = pos('(', dsn)
rx = pos(')', dsn, lx+1)
if lx < 1 then
return ''
else if lx < rx then
return substr(dsn, lx+1, rx-lx-1)
else
return strip(substr(dsn,lx+1))
endProcedure dsnGetMbr
/**********************************************************************
io: read or write a dataset with the following callsequences:
read: tsoOpen...'R', readDD*, tsoClose
write: tsoOpen...'W', writeDD*, tsoClose
readDD returns true if data read, false at eof
do not forget that open is mandatory to write empty file|
***********************************************************************/
/*--- open dd for read (rw='R') or write (rw='W') --------------------*/
tsoOpen: procedure expose m.
parse upper arg dd, rw
return adrTso('execio' 0 'disk'RW tsoDD(dd, 'o') '(open)')
return /* end tsoOpen */
/*--- close dd -----------------------------------------------------*/
tsoClose: procedure expose m.
parse upper arg dd
return adrTso('execio 0 diskW' dd '(finis)')
endProcedure tsoClose
/*--- read from DD ggDD into ggSt, return false at eof ---------------*/
readDD:
parse arg ggDD, ggSt, ggCnt
if ggCnt = '' then
ggCnt = 100
call adrTso 'execio' ggCnt 'diskR' ggDD '(stem' ggSt')', 2
return (value(ggSt'0') > 0)
return /* end readDD */
/*--- write to gg ggDD from stem ggSt, ggCnt records -----------------*/
writeDD:
parse arg ggDD, ggSt, ggCnt
if ggCnt == '' then
ggCnt = value(ggst'0')
call adrTso 'execio' ggCnt 'diskW' ggDD '(stem' ggSt')'
return
endSubroutine writeDD
/*--- readNx: read next line, using buffer ---------------------------*/
/*--- begin: allocate dsnSpec and ini ------------------------ -------*/
readNxBegin: procedure expose m.
parse arg m, m.m.dsn, m.m.dd, m.m.Cnt
if m.m.dd = '' then
m.m.dd = 'DDNX*'
if m.m.cnt = '' then
m.m.cnt = 1000
m.m.cx = m.m.cnt + 999
m.m.buf0x = 0
m.m.0 = 0
parse value dsnAlloc('dd('m.m.dd')' m.m.dsn) with m.m.dd m.m.free
call tsoOpen m.m.dd, 'R'
return m
endProcedure readDDNxBegin
/*--- return the stem of the next line, or '' at end -----------------*/
readNx: procedure expose m.
parse arg m
m.m.cx = m.m.cx + 1
if m.m.cx <= m.m.0 then
return m'.'m.m.cx
m.m.buf0x = m.m.buf0x + m.m.0
if \ readDD(m.m.dd, 'M.'m'.', m.m.cnt)then
return ''
m.m.cx = 1
return m'.1'
endProcedure readDDNx
/*--- return the stem of the curr line, '' at end --------------------*/
readNxCur: procedure expose m.
parse arg m
if m.m.cx <= m.m.0 then
return m'.'m.m.cx
else
return ''
endProcedure readNxCur
/*--- return the position (line number) of reader
plus le characters of the current line (default 50) ------*/
readnxPos: procedure expose m.
parse arg m, le
li = m'.'m.m.cx
li = strip(m.li, 't')
if arg() < 2 then
le = 50
if le < 1 then
li = ''
else if length(li) <= le then
li = ':' li
else
li = ':' left(li, le-3)'...'
return 'line' (m.m.buf0x + m.m.cx)li
endProcedure readnxPos
/*--- close and deallocate ------------------------------------------*/
readNxEnd: procedure expose m.
parse arg m
call tsoClose m.m.dd
call tsoFree m.m.free
return
endProcedure readDDNxEnd
/*--- standardise a dsn spec
word1 dsName or -
word2 dd or -
word3 disp or -
word4 to first : attributes in tso format
after first : attributes for new allocation
----------------------------------------------------------------------*/
dsnSpec: procedure expose m.
parse upper arg spec
rr = '' /* put leading - in separate words */
do sx=1 while words(rr) < 3 & wx \= ''
wx = word(spec, sx)
do while abbrev(wx, '-') & words(rr) < 3
wx = substr(wx, 2)
rr = rr '-'
end
rr = rr wx
end
spec = rr subWord(spec, sx)
na = ''
dd = ''
di = ''
if left(spec, 1) = '&' then /* external spec is handled ok */
spec = strip(substr(spec, 2))
do wx=1 by 1
w = word(spec, wx)
if w = '' | abbrev(w, '.') | abbrev(w, ':') then
leave
else if wordPos(w, 'OLD SHR MOD NEW')>0 | abbrev(w, 'SYSO') then
di = w
else if w = 'CATALOG' then
di = di w
else if abbrev(w, 'DD(') then
dd = substr(w, 4, length(w)-4)
else if abbrev(w, 'DSN(') then
na = strip(substr(w, 5, length(w)-5))
else if na == '' then
na = dsn2jcl(w)
else if pos('(', w) > 0 then
leave
else if dd == '' then
dd = w
else if di == '' then
di = w
else
leave
end
if na == '' then
na = '-'
else if abbrev(na, "'") then
na = substr(na, 2, length(na)-2)
if dd == '' then dd = '-'
if di == '' then di = '-'
re = subword(spec, wx)
if abbrev(re, '.') then
re = substr(re, 2)
return na dd di re
endProcedure dsnSpec
/*--- alloc a dsn with dsnAlloc
if the dsn is inuse wait and retry
until either the allocation is successfull
or the timeout occurs --------------------------------------*/
dsnAllocWait: procedure expose m.
parse upper arg spec, pDi, pDD, timeOut
x = max(1, arg() - 1)
do rt=0
m.adrTsoAl.1 = ''
m.adrTsoAl.2 = ''
m.adrTsoAl.3 = ''
call outtrap m.adrTsoAl.
res = dsnAlloc(spec, pDi, pDD, '*')
call outtrap off
if \ datatype(res, 'n') then
return res
msg = m.adrTsoAl.1'\n'm.adrTsoAl.2'\n'm.adrTsoAl.3
if rt > timeOut & timeOut \== '' then
return err('timeout allocating' spec time() '\n'msg)
if pos('DATA SET IS ALLOCATED TO ANOTHER', msg) < 1 then
return err('allocating' spec'\n'msg)
say time() 'sleep and retry alloc' spec
call sleep 1, 0
end
endProcedure dsnAllocWait
/*--- alloc a dsn or a dd
spec '-'<ddName>
datasetName? disposition? '.'? attributes? (':' newAtts)?
disp default disposition
dd default dd name
retRc erlaubte ReturnCodes (leer = 0)
returns if ok then ddName <rexx for free> otherwise rc -----*/
dsnAlloc: procedure expose m.
parse upper arg spec, pDi, pDD, retRc
parse value dsnSpec(spec) with na dd di rest
if na = '-' then
m.dsnAlloc.dsn = ''
else
m.dsnAlloc.dsn = na
if dd == '-' & pDD \== '' then
dd = pDD
if dd == '-' then
dd = 'DD*'
dd = tsoDD(dd, 'a')
if na == '-' & di == '-' & rest = '' then
return dd
if di = '-' then
if pDi == '' then
di = 'SHR'
else
di = pDi
if pos('(', na) < 1 then
nop
else if di = 'MOD' then
call err 'disp mod for' na
else
di = 'SHR'
if pos('/', na) > 0 then
rx = csmAlloc(na dd di rest, retRc)
else
rx = tsoAlloc(na dd di rest, retRc)
if rx = 0 then
return dd dd
else
return rx
endProcedure dsnAlloc
/*--- find a free dd with prefix dd ----------------------------------*/
tsoDD: procedure expose m.
parse arg dd, f
if symbol('m.tso.ddAlloc') \== 'VAR' then do
call errIni
m.tso.ddAlloc = ''
m.tso.ddOpen = ''
end
if m.err.ispf then
address ispExec 'vget wshTsoDD shared'
else
wshTsoDD = m.tso.ddAlloc
if f == '-' then do
ax = wordPos(dd, m.tso.ddAlloc)
if ax > 0 then
m.tso.ddAlloc = delWord(m.tso.ddAlloc, ax, 1)
ox = wordPos(dd, m.tso.ddOpen)
if ox > 0 then
m.tso.ddOpen = delWord(m.tso.ddOpen , ox, 1)
if ax < 1 & ox < 1 then
call err 'tsoDD dd' dd 'not used' m.tso.ddAlloc m.tso.ddOpen
sx = wordPos(dd, wshTsoDD)
if sx > 0 then
wshTsoDD = delWord(wshTsoDD , sx, 1)
end
else if f == 'o' then do
if wordPos(dd, m.tso.ddOpen m.tso.ddAlloc) < 1 then
m.tso.ddOpen = strip(m.tso.ddOpen dd)
end
else if f <> 'a' then do
call err 'tsoDD bad fun' f
end
else do
if right(dd, 1) = '*' then do
dd = left(dd, length(dd)-1) || m.err.screen
cx = lastPos(' 'dd, ' 'm.tso.ddAlloc)
if cx > 0 then do
old = word(substr(m.tso.ddAlloc, cx), 1)
if old = dd then
dd = dd'1'
else if datatype(substr(old, length(dd)+1), 'n') then
dd = dd || (substr(old, length(dd)+1) + 1)
else
call err 'tsoDD old' old 'suffix not numeric dd' dd
end
end
if wordPos(dd, m.tso.ddAlloc) < 1 then
m.tso.ddAlloc = strip(m.tso.ddAlloc dd)
if wordPos(dd, wshTsoDD) < 1 then
wshTsoDD = strip(wshTsoDD dd)
end
if m.err.ispf then
address ispExec 'vPut wshTsoDD shared'
return dd
endProcedure tsoDD
tsoAlloc: procedure expose m.
parse arg na dd disp rest ':' nn, retRc
c = 'alloc dd('dd')' disp
if na \== '-' then
c = c "DSN('"na"')"
else if disp = 'NEW' and nn \== '' then
c = c dsnCreateAtts(,nn)
call outtrap m.adrTsoAl.
alRc = adrTso(c rest, '*')
call outtrap off
if alRc = 0 then
return 0
if nn \= '' & wordPos(disp, 'OLD SHR') > 0 ,
& sysDsn("'"m.dsnAlloc.dsn"'") == 'DATASET NOT FOUND' then do
say 'tsoAlloc creating' c rest ':'nn
call adrTso 'alloc dd('dd') new catalog' dsnCreateAtts(na, nn)
call adrTso 'free dd('dd')'
return tsoAlloc(na dd disp rest, retRc)
end
say 'rc='alRc 'for' c rest
call saySt adrTsoal
if retRc = '*' | wordPos(alRc, retRc) > 0 then
return alRc
call err 'tsoAlloc rc' alRc 'for' c rest
endProcedure tsoAlloc
tsoAtts: procedure expose m.
parse arg dsn
rc = listDsi("'"dsn"' SMSINFO")
if rc = 0 then
mv = ''
else if rc = 4 & sysReason = 19 then do
mv = 'UCOUNT(30)' /* 7.8.13 corrected attribute */
say 'creating' dsn 'with multi volume' mv
end
else if rc ^= 0 then
call err 'listDsi rc' rc 'reason' sysReason,
sysMsgLvl1 sysMsgLvl2
al = 'CAT'
al = ''
if right(sysDsSms, 7) == 'LIBRARY' ,
| abbrev(sysDsSms, 'PDS') then
al = al 'DSNTYPE(LIBRARY)'
if sysUnits = 'TRACK' then
sysUnits = 'TRACKS'
return al "DSORG("sysDSorg") MGMTCLAS("sysMgmtClass")",
"DATACLAS("sysDataClass")" ,
"RECFM("translate('1 2 3', ' 'sysREcFM, ' 123')")",
"LRECL("SYSLRECL")",
"SPACE("sysPrimary"," sysSeconds")" sysUnits mv
/* "blksize("sysBLkSIZE")" removed 3.4.13: let sms do the magic */
endProcedure tsoAtts
tsoFree: procedure expose m.
parse arg ddList, ggRet
do dx=1 to words(ddList)
dd = word(ddList, dx)
call adrTso 'free dd('dd')', ggRet
call tsoDD dd, '-'
end
return
endProcedure tsoFree
tsoFreeAll: procedure expose m.
all = m.tso.ddAlloc m.tso.ddOpen
do ax = 1 to words(all)
call adrTso 'execio 0 diskW' word(all, ax) '(finis)', '*'
end
m.tso.ddOpen = ''
call tsoFree m.tso.ddAlloc, '*'
return
endProcedure tsoFreeAll
dsnCreateAtts: procedure expose m.
parse arg dsn, atts, forCsm
forCsm = forCsm == 1
aU = ' 'translate(atts)
res = ''
if dsn \== '' then
res = "dataset('"dsnSetMbr(dsn)"')"
if abbrev(atts, '~') then
return res tsoAtts(substr(atts, 2))
if abbrev(atts, ':') then do
parse var atts a1 atts
rl = substr(a1, 3)
if abbrev(a1, ':F') then do
if rl = '' then
rl = 80
recfm='f b'
end
else do
if rl = '' then
rl = 32756
recfm = substr(a1, 2, 1) 'b'
end
res = res "recfm("space(recfm, 1-forCsm)") lrecl("rl")"
end
if pos('(', dsn) > 0 & pos(' DSNTYPE(', aU) < 1 ,
& pos(' DSORG(', aU) < 1 then
res = res 'dsntype(library) dsorg(po)'
if pos(' MGMTCLAS(', aU) < 1 then
res = res 'mgmtclas(COM#A091)'
if pos(' SPACE(', aU) < 1 then
res = res 'space(100, 500) cyl' || copies('inder', forCsm)
return res atts
endProcedure dsnCreateAtts
/*--- check if a dataset is archive ------------------------------------
returns 'ok' if dataset on disk
'not' if dataset is not catalogued
'arc' if dataset archived
listDsi errorMsg otherwise ------------------*/
dsnArc: procedure expose m.
parse upper arg dsn
lc = listDsi("'"strip(dsn)"' noRecall")
if lc = 0 then
return 'ok'
else if lc=4 & sysReason = 19 then /* multiple volumes */
return 'ok'
else if lc=16 & sysReason = 5 then
return 'notCat'
else if lc=16 & sysReason = 9 then
return 'arc'
else
return 'listDsi cc='lc', sysReason='sysReason ,
'm2='sysMsgLvl2', m1='sysMsgLvl1
endProcedure dsnArc
/*--- read the dataset specified in ggDsnSpec to stem ggSt -----------*/
readDSN:
parse arg ggDsnSpec, ggSt
ggAlloc = dsnAlloc(ggDsnSpec, 'SHR', 'readDsN')
call adrTso 'execio * diskr' word(ggAlloc, 1) '(stem' ggSt' finis)'
call tsoFree word(ggAlloc, 2)
return
endSubroutine readDsn
/*--- write the dataset specified in ggDsnSpec from stem ggSt
write ggCnt records if not empty otherwise ggst0
if ggSay 1 then say ... records written to ... -------------*/
writeDSN:
parse arg ggDsnSpec, ggSt, ggCnt, ggSay
if ggCnt == '' then
ggCnt = value(ggst'0')
ggAlloc = dsnAlloc(ggDsnSpec, 'OLD', 'readDsN')
call adrTso 'execio' ggCnt 'diskw' word(ggAlloc, 1) ,
'(stem' ggSt 'open finis)'
call tsoFree word(ggAlloc, 2)
if ggSay == 1 | m.debug == 1 then
say ggCnt 'records written to' ggDsnSpec
return
endSubroutine writeDsn
copyDSN: procedure expose m.
parse arg frSpec, toSpec, ggSay
parse value dsnAlloc(frSpec, 'SHR', 'FRDD') with frDD frFr
parse value dsnAlloc(toSpec, 'OLD', 'TODD') with toDD toFr
call tsoOpen frDD, 'R'
call tsoOpen toDD, 'W'
cnt = 0
do while readDD(frDD, r.)
call writeDD toDD, r.
cnt = cnt + r.0
end
call tsoClose frDD
call tsoClose toDD
call tsoFree frFr toFr
if ggSay == 1 | m.debug == 1 then
say cnt 'records copied from' frSpec 'to' to toSpec
return
endSubroutine writeDsn
/* copy adrTso end ****************************************************/
/* copy err begin *** errorhandling, messages, help ****************/
errIni: procedure expose m.
if m.err.ini == 1 then
return
call utIni
m.err.ini = 1
m.err.handler = ''
m.err.cleanup = ';'
m.err.opt = ''
parse source m.err.os .
m.err.ispf = 0
m.err.screen = 0
if m.err.os \== 'LINUX' then
if sysVar('sysISPF') = 'ACTIVE' then do
m.err.ispf = 1
address ispExec 'vget zScreen shared'
m.err.screen = zScreen
end
return
endProcedure errIni
/* configure err -----------------------------------------------------*/
errReset: procedure expose m.
call errIni
parse arg m.err.opt, m.err.handler
if pos('I', translate(m.err.opt)) > 0 & m.err.ispf then
address ispExec 'control errors return'
return
endSubroutine errReset
/*--- error routine: abend with message ------------------------------*/
err:
parse arg ggTxt, ggOpt
call errIni
drop err handler cleanup opt call return
if ggOpt == '' & m.err.handler \== '' then
interpret m.err.handler
call errSay 'f}'ggTxt
call errCleanup
if ggOpt == '' then
ggOpt = m.err.opt
upper ggOpt
if pos('T', ggOpt) > 0 then do
trace ?r
say 'trace ?r in err'
end
if pos('H', ggOpt) > 0 & m.err.eCat == 'f' then do
call errSay ' }errorhandler exiting with divide by zero' ,
'to show stackHistory'
x = 1 / 0
end
call errSay ' }errorhandler exiting with exit(12)'
exit errSetRc(12)
endSubroutine err
/*--- set rc for ispf: -------------------------------------------------
if a cmd is run by ispStart, its RC is ignored,
but ISPF passes the value of the shared variable zIspfRc
back as return code
----------------------------------------------------------------------*/
errSetRc: procedure expose m.
parse arg zIspfRc
if m.err.ispf then
address ispExec vput 'zIspfRc' shared
return zIspfRc
endProcedure errSetRc
/*--- error routine: user message cleanup exit -----------------------*/
errAddCleanup: procedure expose m.
parse arg code
call errIni
/* concatenate backwards, then it is executed also backwards */
m.err.cleanup = ';'code || m.err.cleanup
return
endProcedure errAddCleanup
errRmCleanup: procedure expose m.
parse arg code
call errIni
cx = pos(';'code';', m.err.cleanup)
if cx > 0 then
m.err.cleanup = left(m.err.cleanup, cx) ,
|| substr(m.err.cleanup, cx + length(code)+2)
return
endProcedure errRmCleanup
errCleanup: procedure expose m.
call errIni
errCleanup = m.err.cleanup
if errCleanup <> ';' then do
m.err.cleanup = ';'
say 'err cleanup begin' errCleanup
interpret errCleanup
say 'err cleanup end' errCleanup
end
if symbol('m.tso.ddAlloc') == 'VAR' then
call tsoFreeAll
return
endProcedure errCleanup
/*--- say an errorMessage msg with pref and linesplits --------------*/
errSay: procedure expose m.
parse arg msg
return saySt(errMsg(msg))
/*--- prefix an errormessage with pref,
split it into lines at \n to stem m.err -------------------*/
errMsg: procedure expose m.
parse arg msg
m.err.eCat = 'f'
do while substr(msg, 2, 1) == '}'
parse var msg m.err.eCat '}' msg
end
res = msg
if m.err.eCat <> '' then do
pTxt = ',error,fatal error,input error,s-}scanErr,warning,'
/* pTxt = ',error,fatal error,input error,syntax error,warning,' */
px = pos(','m.err.eCat, pTxt)
if px < 1 then do
m.err.eCat = 'f'
px = pos(','m.err.eCat, pTxt)
end
res = substr(pTxt, px+1, pos(',', pTxt, px+2)-px-1)
if substr(res, 3, 1) == '}' then
parse var res 2 opt 3 br 4 res
if opt == '-' then
res = res msg
else do
parse source . . s3 . /* current rexx */
res = res 'in' s3':' msg
end
end
return splitNl(err, res) /* split lines at \n */
endProcedure errMsg
splitNL: procedure expose m.
parse arg st, msg
bx = 1
do lx=1 to 20
ex = pos('\n', msg, bx)
if ex < bx then
leave
m.st.lx = substr(msg, bx, ex-bx)
bx = ex+2
end
m.st.lx = substr(msg, bx)
m.st.0 = lx
return st
endProcedure splitNL
/*--- say (part of) the lines of a stem ----------------------------*/
saySt: procedure expose m.
parse arg st, fx, tx
do lx=word(fx 1, 1) to word(tx m.st.0, 1)
say m.st.lx
end
return st
endProcedure saySt
/*--- out (part of) the lines of a stem ----------------------------*/
outSt: procedure expose m.
parse arg st, fx, tx
do lx=word(fx 1, 1) to word(tx m.st.0, 1)
call out m.st.lx
end
return st
endProcedure outSt
/*--- say a trace message if m.trace is set --------------------------*/
debug: procedure expose m.
parse arg msg
if m.debug == 1 then
say 'debug:' msg
return
endProcedure debug
/*--- output a trace if m.trace is set -------------------------------*/
trc: procedure expose m.
parse arg msg
if m.trace == 1 then
call out 'trc:' msg
return
endProcedure trc
/*--- assert that the passed rexx expression evaluates to true -------*/
assert:
interpret 'assertRes =' arg(1)
if assertRes \==1 then
call err 'assert failed' arg(1) '==>' assertRes':' arg(2)
return
endProcedure assert
/*--- abend with Message after displaying help -----------------------*/
errHelp: procedure expose m.
parse arg msg
call errSay 'i}'msg
call help 0
call err 'i}'msg
endProcedure errHelp
/*--- display the first comment block of the source as help ----------*/
help: procedure expose m.
parse arg doClear
if doClear \== 0 then
address tso 'clear'
parse source . . s3 .
say right(' help for rexx' s3, 72, '*')
do lx=1 while pos('/*', sourceLine(lx)) < 1
if lx > 10 then
return err('initial commentblock not found for help')
end
doInc = 1
ho = m.err.helpOpt
do lx=lx+1 to sourceline() while pos('*/', sourceline(lx)) = 0
li = strip(sourceLine(lx), 't')
cx = lastPos('{', li)
if cx > 0 then do
if length(ho) = 1 then
doInc = cx = length(li) | pos(ho, li, cx+1) > 0
li = left(li, cx-1)
end
if doInc then
say li
end
say right(' end help for rexx' s3, 72, '*')
return 4
endProcedure help
/* copy err end *****************************************************/
/* copy out begin ******************************************************
out interface simple with say or stem m.out only
***********************************************************************/
outIni: procedure expose m.
return outDst()
/*--- output a message to the current destination -------------------*/
out: procedure expose m.
parse arg msg
if m.out.ini \== 1 then
call outDst
if m.out.say then
say msg
if m.out.out then do
ox = m.out.0 + 1
m.out.0 = ox
m.out.ox = msg
end
return 0
endProcedure out
/*--- set a new out destination and return old one ------------------*/
outDst: procedure expose m.
parse arg d
if m.out.ini == 1 then
old = '-' || left('s', m.out.say) || left('o', m.out.out)
else do
m.out.ini = 1
old = '-s'
end
m.out.say = d == '' | pos('s', d) > 0
m.out.out = verify(d, 'o0', 'm') > 0
if pos('0', d) > 0 | \ datatype(m.out.0, 'n') then
m.out.0 = 0
return old
endProcedure outDst
/* return the contents of a string or std input */
inp2str: procedure expose m.
parse arg rdr, opt
return rdr
endProcedure inp2str
/* copy out end *****************************************************/
/* copy ut begin *****************************************************/
utIni: procedure expose m.
if m.ut.ini == 1 then
return
m.ut.ini = 1
m.ut.digits = '0123456789'
m.ut.alfLC = 'abcdefghijklmnopqrstuvwxyz'
m.ut.alfUC = translate(m.ut.alfLc)
m.ut.Alfa = m.ut.alfLc || m.ut.alfUC
m.ut.alfNum = m.ut.alfa || m.ut.digits
m.ut.alfDot = m.ut.alfNum || '.'
m.ut.alfId = m.ut.alfNum'_' /* avoid rexx allowed @ # $ ¬ . | ? */
m.ut.alfIdN1 = m.ut.digits /* not as first character */
m.ut.alfRex = m.ut.Alfa'.0123456789@#$?' /* charset puff mit ¬*/
m.ut.alfRexN1= '.0123456789'
m.ut.alfPrint = m.ut.alfNum'+-*/=()¢!{}<> .:,;?|''"%&#@$£\_'
return
endProcedure utIni
/*--- if function warning all3 arguments get evaluated|
e.g if(x=0, 'infinity', 1/0) will fail| -----------*/
if: procedure expose m.
parse arg co, ifTrue, ifFalse
if co then
return ifTrue
else
return ifFalse
endProcedure if
/*--- embedded ASSignement:
assign the second argument to the variable with name in first arg
and return the value assigned ----------------------------------*/
ass:
call value arg(1), arg(2)
return arg(2)
/*--- embedded ASSignement return NotNull:
assign the second argument to the variable with name in first arg
and return 1 if value not null, 0 if null ----------------------*/
assNN:
call value arg(1), arg(2)
return arg(2) \== ''
/*--- return current time and cpu usage ------------------------------*/
utTime: procedure expose m.
return time() 'ela='time('E') 'cpu='sysvar('syscpu'),
'su='sysvar('syssrv')
tstUtTime: procedure expose m.
say 'begin' utTime() sysvar('sysnode')
do 3000000
end
say 'end ' utTime()
return
/*--- sleep several seconds ------------------------------------------*/
sleep: procedure expose m.
parse arg secs, sayIt
if sayit <> 0 then
say 'sleeping' secs 'secs' time()
CALL SYSCALLS 'ON'
ADDRESS SYSCALL "sleep" secs
CALL SYSCALLS 'OFF'
if sayit <> 0 then
say 'slept' secs 'secs' time()
return
endProcedure sleep
/*--- left without truncation ----------------------------------------*/
lefPad: procedure expose m
parse arg s, len
if length(s) >= len then
return s
return left(s, len)
endProcedure lefPad
/*--- right without truncation ---------------------------------------*/
rigPad: procedure expose m
parse arg s, len
if length(s) >= len then
return s
return right(s, len)
endProcedure rigPad
/*--- quote string txt using quoteChar qu ("" ==> ") -----------------*/
quote: procedure expose m.
parse arg txt, qu
if qu = '' then
qu = '"'
res = qu
ix = 1
do forever
qx = pos(qu, txt, ix)
if qx = 0 then
return res || substr(txt, ix) || qu
res = res || substr(txt, ix, qx-ix) || qu || qu
ix = qx + length(qu)
end
endProcedure quote
/*--- translate to lowercase -----------------------------------------*/
ut2lc: procedure expose m.
parse arg s
return translate(s, m.ut.alfLc, m.ut.alfUc)
/*--- verify an id ---------------------------------------------------*/
verifId: procedure expose m.
parse arg src, extra
if pos(left(src, 1), m.ut.alfIdN1) > 0 then
return 1
else
return verify(src, m.ut.alfId || extra, 'n')
/*--- return the count of occurrences of needle in heyStack ----------*/
posCount: procedure expose m.
parse arg needle, hayStack, start, fin
if start = '' then
start = 1
if fin = '' then
fin = length(hayStack) + 1 - length(needle)
do cnt = 0 by 1
start = pos(needle, haystack, start)
if start < 1 | start > fin then
return cnt
start = start + length(needle)
end
endProcedure posCount
repAll: procedure expose m.
parse arg src
do ax = 2 by 2 to arg()
src = repAl2(src, src, arg(ax), arg(ax+1))
end
return src
endProcedure repAll
repAl2: procedure expose m.
parse arg src, sPos, old, new
res = ''
cx = 1
do forever
nx = pos(old, sPos, cx)
if nx < 1 then
return res || substr(src, cx)
res = res || substr(src, cx, nx-cx) || new
cx = nx + length(old)
end
endProcedure repAl2
repAllWords: procedure expose m.
parse arg src, w, new
res = ''
wx = 0
cx = 1
do forever
wx = wordPos(w, src, wx+1)
if wx < 1 then
return res || substr(src, cx)
nx = wordindex(src, wx)
res = res || substr(src, cx, nx-cx) || new
cx = nx + length(w)
end
endProcedure repAllWords
tstUtc2d: procedure expose m.
numeric digits 33
say c2d('ffffff'x)
say utc2d('ffffff'x)
say utc2d('01000000'x) 256*256*256
say utc2d('01000001'x)
say utc2d('020000FF'x) 256*256*256*2+255
say utc2d('03020000EF'x) 256*256*256*770+239
return
endProcedure tstUtc2d
utc2d: procedure expose m.
parse arg ch
cx = length(ch) // 3
if cx = 0 then
cx = 3
res = c2d(left(ch, cx))
do cx=cx+1 by 3 to length(ch)
res = res * 16777216 + c2d(substr(ch, cx, 3))
end
return res
/* copy ut end ********************************************************/
}¢--- A540769.WK.REXX.O13(BINDDB) cre=2013-11-04 mod=2013-11-04-12.26.09 A540769 ---
/* REXX ----------------------------------------------------------------
bindDB: bind Interface for DB2
synopsis: BINDDB DBP appl? pgm install?
RB appl? pgm install? rz?/dbSy?
functions:
DBP: the parameters are completed (if necessary) and you view the
output of bindCMN parameters in a temporary DSN
RB: the specified rebinds are generated (and executed?)
4.10.13: Walter neu
---------------------------------------------------------------------*/
call errReset 'hi'
parse upper arg mFun mRest
if pos('?', mFun mRest) > 0 | mFun = '' then
exit help()
if mFun == 'DBP' then
call dbp mRest
else
exit errHelp('i}bad args:' mFun mRest)
exit
dbp: procedure expose m.
parse arg args
today = translate('78.56.1234', date('s'), '12345678')
if words(args) = 1 then
n = 'appl' args today
else if words(args) = 2 & translate(word(args, 2),
, '000000000', '123456789') = '00.00.0000' then
n = 'appl' args
else if words(args) = 2 then
n = args today
else
n = args
if args <> n then
say 'arguments changed:' args '==>' n
call dsnAlloc 'dd(dbp) new ::f'
call bindcmn 'DBP' n
call adrIsp "LMINIT DATAID(lmmId) ddName(dbp) ENQ(SHRW)"
eRc = adrIsp("edit dataid("lmmId")", '*')
lRc = adrIsp("LMFree DATAID("lmmId")", '*')
call tsoFree dbp
if (eRc \== 0 & eRc \== 4) | lRc \== 0 then
call err m.m.editType 'rc' eRc', lmFree rc' lRc
return
endProcedure dbp
/* copy adrIsp begin *************************************************/
/**********************************************************************
lmd: catalog read
call sequence: lmdBegin, lmdNext*, lmdEnd
mit lmd service (mit save in file und read,
weil list zu langsam und listcat abstürzt)
1. arg (grp) als group dataset für lmd save
und dd name für file read
***********************************************************************/
lmdBegin: procedure expose m.
parse arg grp, lev
call adrIsp 'lmdinit listid(lmdId) level('lev')'
res = adrIsp('lmdlist listid(&lmdId) option(save) group('grp')', 4)
call adrIsp 'lmdfree listid(&lmdId)'
if res = 0 then do
call trc timing() 'lmdlist save' grp lev
call adrTso 'alloc dd('grp') shr dsn('grp'.datasets)'
end
else do
call trc 'no datasets found' timing() 'lmdlist save' grp lev
call adrTso 'alloc dd('grp') dummy'
end
call tsoOpen grp, 'R'
return /* end lmdBegin */
lmdNext:
parse arg ggGrp, ggSt, withVolume
if \ readDD(ggGrp, ggSt) then
return 0
if withVolume \== 1 then
do ggIx=1 to value(ggSt'0')
x = value(ggSt || ggIx, word(value(ggSt || ggIx), 1))
end
return 1
endSubroutin lmdNext
lmdEnd: procedure expose m.
parse arg grp
call tsoClose grp
call adrTso 'free dd('grp')'
return /* end lmdEnd */
lmd: procedure expose m.
parse arg lev, withVol
call lmdBegin gg1, lev
do while lmdNext(gg1, q., withVol)
do x=1 to q.0
call out q.x
end
end
call lmdEnd gg1
return
endProcedure lmd
/**********************************************************************
member list of a pds:
call sequence x=lmmBegin(dsn) lmmNext(x) * lmmEnd(x)
***********************************************************************/
lmm: procedure expose m.
parse arg dsn
id = lmmBegin(dsn)
do ix=1 by 1
m = lmmNext(id)
if m = '' then
leave
call out m
end
call lmmEnd id
return
endProcedure lmm
lmmBegin: procedure expose m.
parse arg dsn
mbr = dsnGetMbr(dsn)
pds = dsnSetMbr(dsn, )
call adrIsp "LMINIT DATAID(lmmId) DATASET('"pds"') ENQ(SHRW)"
call adrIsp "LMOPEN DATAID("lmmId") OPTION(INPUT) "
res = lmmId
if mbr <> '' then
res = res 'pattern('mbr')'
return res
endProcedure lmmBegin
lmmEnd: procedure expose m.
parse arg lmmId opt
call adrIsp "LMMLIST DATAID("lmmId") option(free)", 8
call adrIsp "LMCLOSE DATAID("lmmId")"
call adrIsp "LMFREE DATAID("lmmId")"
return
endProcedure lmmEnd
lmmNext: procedure expose m.
parse arg lmmId opt
if adrIsp("LMMLIST DATAID("lmmid")" ,
"OPTION(LIST) MEMBER(Mbr)" opt, 4 8) = 0 then
return strip(mbr)
else
return ''
endProcedure lmmNext
lmmRm: procedure expose m.
parse arg dsn, mbrs
mbrs = dsnGetMbr(dsn) mbrs
pds = dsnSetMbr(dsn, )
call adrIsp "LMINIT DATAID(lmmId) DATASET("pds") ENQ(SHRW)"
call adrIsp "LMOPEN DATAID("lmmId") OPTION(OUTPUT) "
err = ''
do wx=1 to words(mbrs)
m1 = word(mbrs, wx)
rr = adrIsp("lmmDel dataid("lmmId") member("m1")", 0 8 12)
if rc = 0 then
say 'removed' m1 'from' pds
else if rc = 8 then
say 'not found' m1 'in' pds
else do
err = 'error deleting' m1 'in' pds 'rc' rr strip(zerrlm)
say err
leave
end
end
call adrIsp "LMCLOSE DATAID("lmmId")"
call adrIsp "LMFREE DATAID("lmmId")"
if err <> '' then
call err err
return
endProcedure lmmRm
/*--- address ispf with error checking -------------------------------*/
adrIsp:
parse arg ggIspCmd, ggRet
address ispexec ggIspCmd
if rc = 0 then return 0
else if ggRet == '*' then return rc
else if wordPOS(rc, ggRet) > 0 then return rc
else
call err 'adr ispExec rc' rc 'in' ggIspCmd':' strip(zerrlm)
endSubroutine adrIsp
/*--- address editor with error checking -----------------------------*/
adrEdit:
parse arg ggEditCmd, ggRet
address isrEdit ggEditCmd
if rc = 0 then return 0
else if ggRet == '*' then return rc
else if wordPOS(rc, ggRet) > 0 then return rc
else
call err 'adr isrEdit rc' rc 'for' ggEditCmd
endSubroutine adrEdit
/* copy adrIsp end *************************************************/
/* copy adrTso begin *************************************************/
/*--- send ggTsoCmd to tso, fail if rc <> 0 or not listed in ggRet ---*/
adrTso:
parse arg ggTsoCmd, ggRet
address tso ggTsoCmd
if rc == 0 then return 0
else if ggRet == '*' then return rc
else if wordPos(rc, ggRet) > 0 then return rc
else
call err 'adrTso rc' rc 'for' ggTsoCmd
return /* end adrTso */
/*--- format dsn from tso format to jcl format -----------------------*/
dsn2jcl: procedure expose m.
parse upper arg dsn ., addPrefix
if left(dsn,1) = "'" then
return strip(dsn, 'b', "'")
sp = sysvar('SYSPREF')
if sp == '' then
sp = userid()
cx = pos('~', dsn)
if cx < 1 & addPrefix == 1 then
return sp'.'dsn
do while cx \== 0
le = left(dsn, cx-1)
ri = substr(dsn, cx+1)
if right(le, 1) == '.' | left(ri, 1) == '.' then
dsn = le || sp || ri
else
dsn = le || left('.', le \== '') || sp ,
|| left('.', ri \== '') || ri
cx = pos('~', spec, cx)
end
return dsn
endProcedure dsn2Jcl
/*--- format dsn from jcl format to tso format -----------------------*/
jcl2dsn: procedure expose m.
parse arg dsn .
return "'"dsn"'"
endProcedure jcl2dsn
dsnSetMbr: procedure expose m.
parse arg dsn, mbr
bx = pos('(', dsn)
if bx > 0 then
dsn = strip(left(dsn, bx-1))
if mbr <> '' then
dsn = dsn'('strip(mbr)')'
return dsn
endProcedure dsnSetMbr
dsnGetMbr: procedure expose m.
parse arg dsn
lx = pos('(', dsn)
rx = pos(')', dsn, lx+1)
if lx < 1 then
return ''
else if lx < rx then
return substr(dsn, lx+1, rx-lx-1)
else
return strip(substr(dsn,lx+1))
endProcedure dsnGetMbr
/**********************************************************************
io: read or write a dataset with the following callsequences:
read: tsoOpen...'R', readDD*, tsoClose
write: tsoOpen...'W', writeDD*, tsoClose
readDD returns true if data read, false at eof
do not forget that open is mandatory to write empty file|
***********************************************************************/
/*--- open dd for read (rw='R') or write (rw='W') --------------------*/
tsoOpen: procedure expose m.
parse upper arg dd, rw
return adrTso('execio' 0 'disk'RW tsoDD(dd, 'o') '(open)')
return /* end tsoOpen */
/*--- close dd -----------------------------------------------------*/
tsoClose: procedure expose m.
parse upper arg dd
return adrTso('execio 0 diskW' dd '(finis)')
endProcedure tsoClose
/*--- read from DD ggDD into ggSt, return false at eof ---------------*/
readDD:
parse arg ggDD, ggSt, ggCnt
if ggCnt = '' then
ggCnt = 100
call adrTso 'execio' ggCnt 'diskR' ggDD '(stem' ggSt')', 2
return (value(ggSt'0') > 0)
return /* end readDD */
/*--- write to gg ggDD from stem ggSt, ggCnt records -----------------*/
writeDD:
parse arg ggDD, ggSt, ggCnt
if ggCnt == '' then
ggCnt = value(ggst'0')
call adrTso 'execio' ggCnt 'diskW' ggDD '(stem' ggSt')'
return
endSubroutine writeDD
/*--- readNx: read next line, using buffer ---------------------------*/
/*--- begin: allocate dsnSpec and ini ------------------------ -------*/
readNxBegin: procedure expose m.
parse arg m, m.m.dsn, m.m.dd, m.m.Cnt
if m.m.dd = '' then
m.m.dd = 'DDNX*'
if m.m.cnt = '' then
m.m.cnt = 1000
m.m.cx = m.m.cnt + 999
m.m.buf0x = 0
m.m.0 = 0
parse value dsnAlloc('dd('m.m.dd')' m.m.dsn) with m.m.dd m.m.free
call tsoOpen m.m.dd, 'R'
return m
endProcedure readDDNxBegin
/*--- return the stem of the next line, or '' at end -----------------*/
readNx: procedure expose m.
parse arg m
m.m.cx = m.m.cx + 1
if m.m.cx <= m.m.0 then
return m'.'m.m.cx
m.m.buf0x = m.m.buf0x + m.m.0
if \ readDD(m.m.dd, 'M.'m'.', m.m.cnt)then
return ''
m.m.cx = 1
return m'.1'
endProcedure readDDNx
/*--- return the stem of the curr line, '' at end --------------------*/
readNxCur: procedure expose m.
parse arg m
if m.m.cx <= m.m.0 then
return m'.'m.m.cx
else
return ''
endProcedure readNxCur
/*--- return the position (line number) of reader
plus le characters of the current line (default 50) ------*/
readnxPos: procedure expose m.
parse arg m, le
li = m'.'m.m.cx
li = strip(m.li, 't')
if arg() < 2 then
le = 50
if le < 1 then
li = ''
else if length(li) <= le then
li = ':' li
else
li = ':' left(li, le-3)'...'
return 'line' (m.m.buf0x + m.m.cx)li
endProcedure readnxPos
/*--- close and deallocate ------------------------------------------*/
readNxEnd: procedure expose m.
parse arg m
call tsoClose m.m.dd
call tsoFree m.m.free
return
endProcedure readDDNxEnd
/*--- standardise a dsn spec
word1 dsName or -
word2 dd or -
word3 disp or -
word4 to first : attributes in tso format
after first : attributes for new allocation
----------------------------------------------------------------------*/
dsnSpec: procedure expose m.
parse upper arg spec
rr = '' /* put leading - in separate words */
do sx=1 while words(rr) < 3 & wx \= ''
wx = word(spec, sx)
do while abbrev(wx, '-') & words(rr) < 3
wx = substr(wx, 2)
rr = rr '-'
end
rr = rr wx
end
spec = rr subWord(spec, sx)
na = ''
dd = ''
di = ''
if left(spec, 1) = '&' then /* external spec is handled ok */
spec = strip(substr(spec, 2))
do wx=1 by 1
w = word(spec, wx)
if w = '' | abbrev(w, '.') | abbrev(w, ':') then
leave
else if wordPos(w, 'OLD SHR MOD NEW')>0 | abbrev(w, 'SYSO') then
di = w
else if w = 'CATALOG' then
di = di w
else if abbrev(w, 'DD(') then
dd = substr(w, 4, length(w)-4)
else if abbrev(w, 'DSN(') then
na = strip(substr(w, 5, length(w)-5))
else if na == '' then
na = dsn2jcl(w)
else if pos('(', w) > 0 then
leave
else if dd == '' then
dd = w
else if di == '' then
di = w
else
leave
end
if na == '' then
na = '-'
else if abbrev(na, "'") then
na = substr(na, 2, length(na)-2)
if dd == '' then dd = '-'
if di == '' then di = '-'
re = subword(spec, wx)
if abbrev(re, '.') then
re = substr(re, 2)
return na dd di re
endProcedure dsnSpec
/*--- alloc a dsn with dsnAlloc
if the dsn is inuse wait and retry
until either the allocation is successfull
or the timeout occurs --------------------------------------*/
dsnAllocWait: procedure expose m.
parse upper arg spec, pDi, pDD, timeOut
x = max(1, arg() - 1)
do rt=0
m.adrTsoAl.1 = ''
m.adrTsoAl.2 = ''
m.adrTsoAl.3 = ''
call outtrap m.adrTsoAl.
res = dsnAlloc(spec, pDi, pDD, '*')
call outtrap off
if \ datatype(res, 'n') then
return res
msg = m.adrTsoAl.1'\n'm.adrTsoAl.2'\n'm.adrTsoAl.3
if rt > timeOut & timeOut \== '' then
return err('timeout allocating' spec time() '\n'msg)
if pos('DATA SET IS ALLOCATED TO ANOTHER', msg) < 1 then
return err('allocating' spec'\n'msg)
say time() 'sleep and retry alloc' spec
call sleep 1, 0
end
endProcedure dsnAllocWait
/*--- alloc a dsn or a dd
spec '-'<ddName>
datasetName? disposition? '.'? attributes? (':' newAtts)?
disp default disposition
dd default dd name
retRc erlaubte ReturnCodes (leer = 0)
returns if ok then ddName <rexx for free> otherwise rc -----*/
dsnAlloc: procedure expose m.
parse upper arg spec, pDi, pDD, retRc
parse value dsnSpec(spec) with na dd di rest
if na = '-' then
m.dsnAlloc.dsn = ''
else
m.dsnAlloc.dsn = na
if dd == '-' & pDD \== '' then
dd = pDD
if dd == '-' then
dd = 'DD*'
dd = tsoDD(dd, 'a')
if na == '-' & di == '-' & rest = '' then
return dd
if di = '-' then
if pDi == '' then
di = 'SHR'
else
di = pDi
if pos('(', na) < 1 then
nop
else if di = 'MOD' then
call err 'disp mod for' na
else
di = 'SHR'
if pos('/', na) > 0 then
rx = csmAlloc(na dd di rest, retRc)
else
rx = tsoAlloc(na dd di rest, retRc)
if rx = 0 then
return dd dd
else
return rx
endProcedure dsnAlloc
/*--- find a free dd with prefix dd ----------------------------------*/
tsoDD: procedure expose m.
parse arg dd, f
if symbol('m.tso.ddAlloc') \== 'VAR' then do
call errIni
m.tso.ddAlloc = ''
m.tso.ddOpen = ''
end
if m.err.ispf then
address ispExec 'vget wshTsoDD shared'
else
wshTsoDD = m.tso.ddAlloc
if f == '-' then do
ax = wordPos(dd, m.tso.ddAlloc)
if ax > 0 then
m.tso.ddAlloc = delWord(m.tso.ddAlloc, ax, 1)
ox = wordPos(dd, m.tso.ddOpen)
if ox > 0 then
m.tso.ddOpen = delWord(m.tso.ddOpen , ox, 1)
if ax < 1 & ox < 1 then
call err 'tsoDD dd' dd 'not used' m.tso.ddAlloc m.tso.ddOpen
sx = wordPos(dd, wshTsoDD)
if sx > 0 then
wshTsoDD = delWord(wshTsoDD , sx, 1)
end
else if f == 'o' then do
if wordPos(dd, m.tso.ddOpen m.tso.ddAlloc) < 1 then
m.tso.ddOpen = strip(m.tso.ddOpen dd)
end
else if f <> 'a' then do
call err 'tsoDD bad fun' f
end
else do
if right(dd, 1) = '*' then do
dd = left(dd, length(dd)-1) || m.err.screen
cx = lastPos(' 'dd, ' 'm.tso.ddAlloc)
if cx > 0 then do
old = word(substr(m.tso.ddAlloc, cx), 1)
if old = dd then
dd = dd'1'
else if datatype(substr(old, length(dd)+1), 'n') then
dd = dd || (substr(old, length(dd)+1) + 1)
else
call err 'tsoDD old' old 'suffix not numeric dd' dd
end
end
if wordPos(dd, m.tso.ddAlloc) < 1 then
m.tso.ddAlloc = strip(m.tso.ddAlloc dd)
if wordPos(dd, wshTsoDD) < 1 then
wshTsoDD = strip(wshTsoDD dd)
end
if m.err.ispf then
address ispExec 'vPut wshTsoDD shared'
return dd
endProcedure tsoDD
tsoAlloc: procedure expose m.
parse arg na dd disp rest ':' nn, retRc
c = 'alloc dd('dd')' disp
if na \== '-' then
c = c "DSN('"na"')"
else if disp = 'NEW' and nn \== '' then
c = c dsnCreateAtts(,nn)
call outtrap m.adrTsoAl.
alRc = adrTso(c rest, '*')
call outtrap off
if alRc = 0 then
return 0
if nn \= '' & wordPos(disp, 'OLD SHR') > 0 ,
& sysDsn("'"m.dsnAlloc.dsn"'") == 'DATASET NOT FOUND' then do
say 'tsoAlloc creating' c rest ':'nn
call adrTso 'alloc dd('dd') new catalog' dsnCreateAtts(na, nn)
call adrTso 'free dd('dd')'
return tsoAlloc(na dd disp rest, retRc)
end
say 'rc='alRc 'for' c rest
call saySt adrTsoal
if retRc = '*' | wordPos(alRc, retRc) > 0 then
return alRc
call err 'tsoAlloc rc' alRc 'for' c rest
endProcedure tsoAlloc
tsoAtts: procedure expose m.
parse arg dsn
rc = listDsi("'"dsn"' SMSINFO")
if rc = 0 then
mv = ''
else if rc = 4 & sysReason = 19 then do
mv = 'UCOUNT(30)' /* 7.8.13 corrected attribute */
say 'creating' dsn 'with multi volume' mv
end
else if rc ^= 0 then
call err 'listDsi rc' rc 'reason' sysReason,
sysMsgLvl1 sysMsgLvl2
al = 'CAT'
al = ''
if right(sysDsSms, 7) == 'LIBRARY' ,
| abbrev(sysDsSms, 'PDS') then
al = al 'DSNTYPE(LIBRARY)'
if sysUnits = 'TRACK' then
sysUnits = 'TRACKS'
return al "DSORG("sysDSorg") MGMTCLAS("sysMgmtClass")",
"DATACLAS("sysDataClass")" ,
"RECFM("translate('1 2 3', ' 'sysREcFM, ' 123')")",
"LRECL("SYSLRECL")",
"SPACE("sysPrimary"," sysSeconds")" sysUnits mv
/* "blksize("sysBLkSIZE")" removed 3.4.13: let sms do the magic */
endProcedure tsoAtts
tsoFree: procedure expose m.
parse arg ddList, ggRet
do dx=1 to words(ddList)
dd = word(ddList, dx)
call adrTso 'free dd('dd')', ggRet
call tsoDD dd, '-'
end
return
endProcedure tsoFree
tsoFreeAll: procedure expose m.
all = m.tso.ddAlloc m.tso.ddOpen
do ax = 1 to words(all)
call adrTso 'execio 0 diskW' word(all, ax) '(finis)', '*'
end
m.tso.ddOpen = ''
call tsoFree m.tso.ddAlloc, '*'
return
endProcedure tsoFreeAll
dsnCreateAtts: procedure expose m.
parse arg dsn, atts, forCsm
forCsm = forCsm == 1
aU = ' 'translate(atts)
res = ''
if dsn \== '' then
res = "dataset('"dsnSetMbr(dsn)"')"
if abbrev(atts, '~') then
return res tsoAtts(substr(atts, 2))
if abbrev(atts, ':') then do
parse var atts a1 atts
rl = substr(a1, 3)
if abbrev(a1, ':F') then do
if rl = '' then
rl = 80
recfm='f b'
end
else do
if rl = '' then
rl = 32756
recfm = substr(a1, 2, 1) 'b'
end
res = res "recfm("space(recfm, 1-forCsm)") lrecl("rl")"
end
if pos('(', dsn) > 0 & pos(' DSNTYPE(', aU) < 1 ,
& pos(' DSORG(', aU) < 1 then
res = res 'dsntype(library) dsorg(po)'
if pos(' MGMTCLAS(', aU) < 1 then
res = res 'mgmtclas(COM#A091)'
if pos(' SPACE(', aU) < 1 then
res = res 'space(100, 500) cyl' || copies('inder', forCsm)
return res atts
endProcedure dsnCreateAtts
/*--- check if a dataset is archive ------------------------------------
returns 'ok' if dataset on disk
'not' if dataset is not catalogued
'arc' if dataset archived
listDsi errorMsg otherwise ------------------*/
dsnArc: procedure expose m.
parse upper arg dsn
lc = listDsi("'"strip(dsn)"' noRecall")
if lc = 0 then
return 'ok'
else if lc=4 & sysReason = 19 then /* multiple volumes */
return 'ok'
else if lc=16 & sysReason = 5 then
return 'notCat'
else if lc=16 & sysReason = 9 then
return 'arc'
else
return 'listDsi cc='lc', sysReason='sysReason ,
'm2='sysMsgLvl2', m1='sysMsgLvl1
endProcedure dsnArc
/*--- read the dataset specified in ggDsnSpec to stem ggSt -----------*/
readDSN:
parse arg ggDsnSpec, ggSt
ggAlloc = dsnAlloc(ggDsnSpec, 'SHR', 'readDsN')
call adrTso 'execio * diskr' word(ggAlloc, 1) '(stem' ggSt' finis)'
call tsoFree word(ggAlloc, 2)
return
endSubroutine readDsn
/*--- write the dataset specified in ggDsnSpec from stem ggSt
write ggCnt records if not empty otherwise ggst0
if ggSay 1 then say ... records written to ... -------------*/
writeDSN:
parse arg ggDsnSpec, ggSt, ggCnt, ggSay
if ggCnt == '' then
ggCnt = value(ggst'0')
ggAlloc = dsnAlloc(ggDsnSpec, 'OLD', 'readDsN')
call adrTso 'execio' ggCnt 'diskw' word(ggAlloc, 1) ,
'(stem' ggSt 'open finis)'
call tsoFree word(ggAlloc, 2)
if ggSay == 1 | m.debug == 1 then
say ggCnt 'records written to' ggDsnSpec
return
endSubroutine writeDsn
copyDSN: procedure expose m.
parse arg frSpec, toSpec, ggSay
parse value dsnAlloc(frSpec, 'SHR', 'FRDD') with frDD frFr
parse value dsnAlloc(toSpec, 'OLD', 'TODD') with toDD toFr
call tsoOpen frDD, 'R'
call tsoOpen toDD, 'W'
cnt = 0
do while readDD(frDD, r.)
call writeDD toDD, r.
cnt = cnt + r.0
end
call tsoClose frDD
call tsoClose toDD
call tsoFree frFr toFr
if ggSay == 1 | m.debug == 1 then
say cnt 'records copied from' frSpec 'to' to toSpec
return
endSubroutine writeDsn
/* copy adrTso end ****************************************************/
/* copy err begin *** errorhandling, messages, help ****************/
errIni: procedure expose m.
if m.err.ini == 1 then
return
call utIni
m.err.ini = 1
m.err.handler = ''
m.err.cleanup = ';'
m.err.opt = ''
parse source m.err.os .
m.err.ispf = 0
m.err.screen = 0
if m.err.os \== 'LINUX' then
if sysVar('sysISPF') = 'ACTIVE' then do
m.err.ispf = 1
address ispExec 'vget zScreen shared'
m.err.screen = zScreen
end
return
endProcedure errIni
/* configure err -----------------------------------------------------*/
errReset: procedure expose m.
call errIni
parse arg m.err.opt, m.err.handler
if pos('I', translate(m.err.opt)) > 0 & m.err.ispf then
address ispExec 'control errors return'
return
endSubroutine errReset
/*--- error routine: abend with message ------------------------------*/
err:
parse arg ggTxt, ggOpt
call errIni
drop err handler cleanup opt call return
if ggOpt == '' & m.err.handler \== '' then
interpret m.err.handler
call errSay 'f}'ggTxt
call errCleanup
if ggOpt == '' then
ggOpt = m.err.opt
upper ggOpt
if pos('T', ggOpt) > 0 then do
trace ?r
say 'trace ?r in err'
end
if pos('H', ggOpt) > 0 & m.err.eCat == 'f' then do
call errSay ' }errorhandler exiting with divide by zero' ,
'to show stackHistory'
x = 1 / 0
end
call errSay ' }errorhandler exiting with exit(12)'
exit errSetRc(12)
endSubroutine err
/*--- set rc for ispf: -------------------------------------------------
if a cmd is run by ispStart, its RC is ignored,
but ISPF passes the value of the shared variable zIspfRc
back as return code
----------------------------------------------------------------------*/
errSetRc: procedure expose m.
parse arg zIspfRc
if m.err.ispf then
address ispExec vput 'zIspfRc' shared
return zIspfRc
endProcedure errSetRc
/*--- error routine: user message cleanup exit -----------------------*/
errAddCleanup: procedure expose m.
parse arg code
call errIni
/* concatenate backwards, then it is executed also backwards */
m.err.cleanup = ';'code || m.err.cleanup
return
endProcedure errAddCleanup
errRmCleanup: procedure expose m.
parse arg code
call errIni
cx = pos(';'code';', m.err.cleanup)
if cx > 0 then
m.err.cleanup = left(m.err.cleanup, cx) ,
|| substr(m.err.cleanup, cx + length(code)+2)
return
endProcedure errRmCleanup
errCleanup: procedure expose m.
call errIni
errCleanup = m.err.cleanup
if errCleanup <> ';' then do
m.err.cleanup = ';'
say 'err cleanup begin' errCleanup
interpret errCleanup
say 'err cleanup end' errCleanup
end
if symbol('m.tso.ddAlloc') == 'VAR' then
call tsoFreeAll
return
endProcedure errCleanup
/*--- say an errorMessage msg with pref and linesplits --------------*/
errSay: procedure expose m.
parse arg msg
return saySt(errMsg(msg))
/*--- prefix an errormessage with pref,
split it into lines at \n to stem m.err -------------------*/
errMsg: procedure expose m.
parse arg msg
m.err.eCat = 'f'
do while substr(msg, 2, 1) == '}'
parse var msg m.err.eCat '}' msg
end
res = msg
if m.err.eCat <> '' then do
pTxt = ',error,fatal error,input error,s-}scanErr,warning,'
/* pTxt = ',error,fatal error,input error,syntax error,warning,' */
px = pos(','m.err.eCat, pTxt)
if px < 1 then do
m.err.eCat = 'f'
px = pos(','m.err.eCat, pTxt)
end
res = substr(pTxt, px+1, pos(',', pTxt, px+2)-px-1)
if substr(res, 3, 1) == '}' then
parse var res 2 opt 3 br 4 res
if opt == '-' then
res = res msg
else do
parse source . . s3 . /* current rexx */
res = res 'in' s3':' msg
end
end
return splitNl(err, res) /* split lines at \n */
endProcedure errMsg
splitNL: procedure expose m.
parse arg st, msg
bx = 1
do lx=1 to 20
ex = pos('\n', msg, bx)
if ex < bx then
leave
m.st.lx = substr(msg, bx, ex-bx)
bx = ex+2
end
m.st.lx = substr(msg, bx)
m.st.0 = lx
return st
endProcedure splitNL
/*--- say (part of) the lines of a stem ----------------------------*/
saySt: procedure expose m.
parse arg st, fx, tx
do lx=word(fx 1, 1) to word(tx m.st.0, 1)
say m.st.lx
end
return st
endProcedure saySt
/*--- out (part of) the lines of a stem ----------------------------*/
outSt: procedure expose m.
parse arg st, fx, tx
do lx=word(fx 1, 1) to word(tx m.st.0, 1)
call out m.st.lx
end
return st
endProcedure outSt
/*--- say a trace message if m.trace is set --------------------------*/
debug: procedure expose m.
parse arg msg
if m.debug == 1 then
say 'debug:' msg
return
endProcedure debug
/*--- output a trace if m.trace is set -------------------------------*/
trc: procedure expose m.
parse arg msg
if m.trace == 1 then
call out 'trc:' msg
return
endProcedure trc
/*--- assert that the passed rexx expression evaluates to true -------*/
assert:
interpret 'assertRes =' arg(1)
if assertRes \==1 then
call err 'assert failed' arg(1) '==>' assertRes':' arg(2)
return
endProcedure assert
/*--- abend with Message after displaying help -----------------------*/
errHelp: procedure expose m.
parse arg msg
call errSay 'i}'msg
call help 0
call err 'i}'msg
endProcedure errHelp
/*--- display the first comment block of the source as help ----------*/
help: procedure expose m.
parse arg doClear
if doClear \== 0 then
address tso 'clear'
parse source . . s3 .
say right(' help for rexx' s3, 72, '*')
do lx=1 while pos('/*', sourceLine(lx)) < 1
if lx > 10 then
return err('initial commentblock not found for help')
end
doInc = 1
ho = m.err.helpOpt
do lx=lx+1 to sourceline() while pos('*/', sourceline(lx)) = 0
li = strip(sourceLine(lx), 't')
cx = lastPos('{', li)
if cx > 0 then do
if length(ho) = 1 then
doInc = cx = length(li) | pos(ho, li, cx+1) > 0
li = left(li, cx-1)
end
if doInc then
say li
end
say right(' end help for rexx' s3, 72, '*')
return 4
endProcedure help
/* copy err end *****************************************************/
/* copy ut begin *****************************************************/
utIni: procedure expose m.
if m.ut.ini == 1 then
return
m.ut.ini = 1
m.ut.digits = '0123456789'
m.ut.alfLC = 'abcdefghijklmnopqrstuvwxyz'
m.ut.alfUC = translate(m.ut.alfLc)
m.ut.Alfa = m.ut.alfLc || m.ut.alfUC
m.ut.alfNum = m.ut.alfa || m.ut.digits
m.ut.alfDot = m.ut.alfNum || '.'
m.ut.alfId = m.ut.alfNum'_' /* avoid rexx allowed @ # $ ¬ . | ? */
m.ut.alfIdN1 = m.ut.digits /* not as first character */
m.ut.alfRex = m.ut.Alfa'.0123456789@#$?' /* charset puff mit ¬*/
m.ut.alfRexN1= '.0123456789'
m.ut.alfPrint = m.ut.alfNum'+-*/=()¢!{}<> .:,;?|''"%&#@$£\_'
return
endProcedure utIni
/*--- if function warning all3 arguments get evaluated|
e.g if(x=0, 'infinity', 1/0) will fail| -----------*/
if: procedure expose m.
parse arg co, ifTrue, ifFalse
if co then
return ifTrue
else
return ifFalse
endProcedure if
/*--- embedded ASSignement:
assign the second argument to the variable with name in first arg
and return the value assigned ----------------------------------*/
ass:
call value arg(1), arg(2)
return arg(2)
/*--- embedded ASSignement return NotNull:
assign the second argument to the variable with name in first arg
and return 1 if value not null, 0 if null ----------------------*/
assNN:
call value arg(1), arg(2)
return arg(2) \== ''
/*--- return current time and cpu usage ------------------------------*/
utTime: procedure expose m.
return time() 'ela='time('E') 'cpu='sysvar('syscpu'),
'su='sysvar('syssrv')
tstUtTime: procedure expose m.
say 'begin' utTime() sysvar('sysnode')
do 3000000
end
say 'end ' utTime()
return
/*--- sleep several seconds ------------------------------------------*/
sleep: procedure expose m.
parse arg secs, sayIt
if sayit <> 0 then
say 'sleeping' secs 'secs' time()
CALL SYSCALLS 'ON'
ADDRESS SYSCALL "sleep" secs
CALL SYSCALLS 'OFF'
if sayit <> 0 then
say 'slept' secs 'secs' time()
return
endProcedure sleep
/*--- left without truncation ----------------------------------------*/
lefPad: procedure expose m
parse arg s, len
if length(s) >= len then
return s
return left(s, len)
endProcedure lefPad
/*--- right without truncation ---------------------------------------*/
rigPad: procedure expose m
parse arg s, len
if length(s) >= len then
return s
return right(s, len)
endProcedure rigPad
/*--- quote string txt using quoteChar qu ("" ==> ") -----------------*/
quote: procedure expose m.
parse arg txt, qu
if qu = '' then
qu = '"'
res = qu
ix = 1
do forever
qx = pos(qu, txt, ix)
if qx = 0 then
return res || substr(txt, ix) || qu
res = res || substr(txt, ix, qx-ix) || qu || qu
ix = qx + length(qu)
end
endProcedure quote
/*--- translate to lowercase -----------------------------------------*/
ut2lc: procedure expose m.
parse arg s
return translate(s, m.ut.alfLc, m.ut.alfUc)
/*--- verify an id ---------------------------------------------------*/
verifId: procedure expose m.
parse arg src, extra
if pos(left(src, 1), m.ut.alfIdN1) > 0 then
return 1
else
return verify(src, m.ut.alfId || extra, 'n')
/*--- return the count of occurrences of needle in heyStack ----------*/
posCount: procedure expose m.
parse arg needle, hayStack, start, fin
if start = '' then
start = 1
if fin = '' then
fin = length(hayStack) + 1 - length(needle)
do cnt = 0 by 1
start = pos(needle, haystack, start)
if start < 1 | start > fin then
return cnt
start = start + length(needle)
end
endProcedure posCount
repAll: procedure expose m.
parse arg src
do ax = 2 by 2 to arg()
src = repAl2(src, src, arg(ax), arg(ax+1))
end
return src
endProcedure repAll
repAl2: procedure expose m.
parse arg src, sPos, old, new
res = ''
cx = 1
do forever
nx = pos(old, sPos, cx)
if nx < 1 then
return res || substr(src, cx)
res = res || substr(src, cx, nx-cx) || new
cx = nx + length(old)
end
endProcedure repAl2
repAllWords: procedure expose m.
parse arg src, w, new
res = ''
wx = 0
cx = 1
do forever
wx = wordPos(w, src, wx+1)
if wx < 1 then
return res || substr(src, cx)
nx = wordindex(src, wx)
res = res || substr(src, cx, nx-cx) || new
cx = nx + length(w)
end
endProcedure repAllWords
tstUtc2d: procedure expose m.
numeric digits 33
say c2d('ffffff'x)
say utc2d('ffffff'x)
say utc2d('01000000'x) 256*256*256
say utc2d('01000001'x)
say utc2d('020000FF'x) 256*256*256*2+255
say utc2d('03020000EF'x) 256*256*256*770+239
return
endProcedure tstUtc2d
utc2d: procedure expose m.
parse arg ch
cx = length(ch) // 3
if cx = 0 then
cx = 3
res = c2d(left(ch, cx))
do cx=cx+1 by 3 to length(ch)
res = res * 16777216 + c2d(substr(ch, cx, 3))
end
return res
/* copy ut end ********************************************************/
}¢--- A540769.WK.REXX.O13(CADB3) cre=2012-11-14 mod=2012-11-14-13.26.12 A540769 ---
/* rexx ---------------------------------------------------------------
caDb2: start the ca tools with cs Libraries
options d: debug, say which libraries
w: with test and personal work libs (wk.rexx ...)
t: with test libs (dsn.cadb2.cs.execTst ...)
: with prod libs (dsn.cadb2.cs.exec)
---------------------------------------------------------------------*/
parse upper arg arg
libs = "'dsn.cadb2.cs.exec'"
if arg == '' & userid() == 'A540769' then
arg = 'W'
if pos('W', arg) > 0 then
libs = "'"userid()".WK.REXX' 'dsn.cadb2.cs.exectst'" libs
else if pos('T', arg) > 0 then
libs = "'dsn.cadb2.cs.exectst'" libs
if pos('D', arg) > 0 then
say 'caDb2 altLib' libs
ADDRESS tso "ALTLIB ACTIVATE APPLICATION(EXEC) DATASET("libs") uncond"
ADDRESS 'ISPEXEC' 'SELECT MODE(FSCR) NEWAPPL(CA) passlib',
"CMD(EX 'DSN.CADB2.RZ1.P0.CDBACLS0(RSPMAIN)')"
ADDRESS tso "ALTLIB deACTIVATE APPLICATION(EXEC)"
}¢--- A540769.WK.REXX.O13(CASQL) cre=2012-08-27 mod=2012-08-27-17.41.08 A540769 ---
PROC 0 SSID() /* reserved - DB2 Subsystem ID */ -
SUFFIX() /* reserved - Global Parmlib Suffix */ -
PARMLIB() /* reserved - Parmlib dsname or ddname */ -
RECURS(NO) /* reserved */
/*********************************************************************/
/* ALL RIGHTS RESERVED */
/* COPYRIGHT 2001 COMPUTER ASSOCIATES INTERNATIONAL */
/*********************************************************************/
/* */
/* System : ISQL */
/* */
/* Abstract : ISPF EDIT <==> ISQL INTERFACE */
/* */
/* Function : Jump into ISQL from an ISPF edit session. */
/* */
/* Usage : Mark the first and last lines of the SQL statement */
/* using the E or EE/EE line commands, enter SQL on the */
/* command line, and press enter. */
/* */
/* How this clist works : */
/* */
/* It is no longer necessary (or recommended) to */
/* manually allocate runtime libraries in any clist */
/* such as this one. All allocations are now handled */
/* by the CA-DB2 Tools start-up clists (RSPDEF, */
/* RSPINIT, and RSPFREE), using information in the */
/* CA-DB2 Tools parmlib_dataset. */
/* */
/* This design gives customers the ability to define */
/* multiple runtime environments, which are selectable */
/* using a parmlib_suffix ("Global Parmlib Suffix"). */
/* */
/* The typical user (probably) does not need to be */
/* concerned with the parmlib_dataset/parmlib_suffix */
/* options. */
/* Simply enter the SQL command and press enter. */
/* By default, the RSPINIT/RSPDEF clists will: */
/* a) determine the previously-used parmlib_dataset */
/* b) determine the default parmlib_suffix (ENVDEF) */
/* c) perform allocations and establish runtime */
/* environment */
/* ISQL will then be started, using settings from your */
/* previous session (including DB2 subsystem), which are */
/* stored in your Profile. */
/* */
/* In other words, the only pre-requisite to using this */
/* clist is that you must have entered the product and */
/* connected to a DB2 subsystem at least one time */
/* previously. By doing so, the parmlib_dataset name */
/* that you used would have been saved into your */
/* profile, making it available here. */
/* */
/* Installation : */
/* */
/* If you install this clist into another library, */
/* then you also must install the RSPDEF, RSPINIT, and */
/* RSPFREE clists into the same library. */
/* */
/* Limitations: */
/* */
/* Each time you enter the CA-DB2 Tools, your */
/* parmlib_dataset name is stored in your profile, */
/* making it available to subsequent sessions. */
/* This is good. */
/* */
/* However, the parmlib_suffix is NOT saved. */
/* */
/* Bottom line, the impact that this has on the usage of */
/* the SQL clist is this: */
/* => if your installation uses suffixes, and if you use */
/* any suffix other than the default suffix, then you */
/* need to specify the suffix each time you use the */
/* SQL clist... */
/* => Even if you use the SAME suffix every time, if it */
/* is not the default suffix, then you need to specify */
/* the suffix. */
/* => If you specify a parmlib_dataset name, then you */
/* should also specify a parmlib_suffix (unless you */
/* intend to use the default, in which case you */
/* should NOT specify the parmlib_suffix) */
/* => If you intend to use the default parmlib_suffix, */
/* whatever that happens to be for your shop, then */
/* DO NOT specify a parmlib_suffix on the clist... */
/* (this is the reason why we do not save and */
/* re-use the prior parmlib_suffix). */
/* */
/* */
/* Reference: Consult with your System Administrator to determine */
/* which parmlib & suffixes are valid at your */
/* installation. */
/* */
/* See the CA-DB2 Tools Installation Guide for a */
/* complete description of the Global Parmlib Suffix, */
/* and the Parmlib(DSNAME) member, for more information. */
/* */
/* */
/* Syntax : SQL subsystem parmlib_suffix parmlib_dsname */
/* . . parmlib_ddname */
/* DD:parmlib_ddname */
/* . */
/* */
/* Parameters : */
/* */
/* All arguments are optional. A period (.) may be */
/* used as a placeholder, to indicate a blank/default */
/* value. */
/* */
/* */
/* subsystem */
/* */
/* DB2 subsystem ID. */
/* */
/* If not specified, ISQL automatically connects */
/* to the DB2 subsystem ID used during the last */
/* CA DB2 Products session. */
/* */
/* parmlib_suffix */
/* */
/* "Global Parmlib Suffixes" allow you to have */
/* multiple versions of the same global parmlib */
/* member for different environments. */
/* */
/* See your System Administrator for information */
/* about SUFFIX parameters that are valid for */
/* your installation. */
/* */
/* parmlib_dsname */
/* parmlib_ddname */
/* DD:parmlib_ddname */
/* */
/* At the very minimum, a parmlib must be identified, */
/* in order to start the CA-DB2 Tools. */
/* */
/* This parameter provides the ability to */
/* specify the PARMLIB DATASET NAME (a single */
/* dataset), or the DDNAME of an existing parmlib */
/* allocation. */
/* */
/* If no parmlib is specified, then the CA-DB2 Tools */
/* will use the PARMLIB that was used the last time */
/* that you used the CA-DB2 Tools. */
/* */
/* There are 2 formats for the DDNAME specification. */
/* You may use the "DD:" prefix to indicate a ddname, */
/* or you can specify just the ddname by itself, */
/* without the "DD:" prefix. */
/* If the value does not have the "DD:" prefix, */
/* and is 8 characters or less, and contains */
/* no periods, then it is assumed to be a ddname. */
/* Otherwise it is assumed to be a dataset name. */
/* */
/* Specifying the dataset name: */
/* The dsname must be fully qualified... */
/* It does not matter if it is quoted or not... */
/* It is treated as if it were a fully qualified, */
/* quoted, dataset name in either case. */
/* */
/* Example1 : SQL */
/* */
/* Jump into ISQL, connecting to the DB2 subsystem */
/* that you used last time, using the same parmlib that */
/* you used last time, and the default suffix (blank). */
/* */
/* Example2 : SQL db2p */
/* */
/* Jump into ISQL, connecting to the DB2P subsystem, */
/* again using the same parmlib that you used last time, */
/* and the default suffix (blank). */
/* */
/* Example3 : SQL db2p 03 */
/* */
/* Jump into ISQL, connecting to the DB2P subsystem, */
/* again using the same parmlib that you used last time, */
/* but this time using the '03' suffix (which is */
/* defined by your site) and which establishes a */
/* particular set of parmlib/member options. */
/* */
/* Example4 : SQL db2p . company.parmlib.data.set.name */
/* */
/* Jump into ISQL, connecting to the DB2P subsystem, */
/* specifying a parmlib dataset name. The '.' in the */
/* 3rd argument is a placeholder, indicating the the 3rd */
/* argument (the suffix) is blank. */
/* */
/* Note: you may only specify a single dataset name. */
/* */
/* Example5 : SQL db2p . MYPARMDD */
/* or : SQL db2p . DD:MYPARMDD */
/* */
/* Same as example #4, but in this case you have already */
/* allocated the parmlib dataset(s) to the MYPARMDD */
/* ddname. */
/* */
/* Use a pre-allocated DDNAME if you need to */
/* concatenate multiple parmlib datasets. */
/* */
/* Error messages : */
/* */
/* This section provides a few hints & tips for */
/* determining the cause of some of the most common */
/* errors. This section is not exhaustive... */
/* */
/* */
/* Unable to start ISQL */
/* If the message text says */
/* "THE RSPDEF CLIST ENDED WITH A RC=12" */
/* then the most likely cause is that the */
/* RSPDEF, RSPINIT, RSPFREE clists were not installed */
/* along with this ISQL clist, or else the clist */
/* library is not allocated to SYSPROC. */
/* */
/*********************************************************************/
/* For the developer: */
/* */
/* ISQL and SQL clists are identical, except for the following: */
/* - ISQL is invoked as TSO command, SQL is an edit macro */
/* - ISQL uses keywords, SQL uses positional arguments and uses */
/* a period (.) as a placeholder */
/* - ISQL passes a 'comment' in lieu of a piece of sql text; */
/* SQL extracts a string of text from the member & passes it. */
/* */
/*********************************************************************/
/* Maintenance Log: */
/* */
/* DATE ISSUE# PROBLEM# PROGRAMMER TAPE */
/* -------- -------- -------- ---------- ------ */
/* 04/12/01 10646315 PDHULM P99F */
/* New. */
/* Total re-write. */
/* Removed all ALLOCs/LIBDEFs; replaced with */
/* calls to RSPDEF/RSPINIT/RSPFREE; added parmlib/suffix */
/* parameters, and everything else. */
/* */
/* 12/01/03 13104382-1 GEN 278 PDLIT @01 P01F */
/* */
/* Removed split screen limitation. This clist will now continue */
/* when a second instance of the CA-DB2 products is running. */
/* The split screen warning messages have also been */
/* removed since PTLDRIVM will display a split screen warning */
/* panel. */
/* */
/*********************************************************************/
IF &RECURS EQ NO THEN DO
ISREDIT MACRO (SSID,SUFFIX,PARMLIB) NOPROCESS
END
CONTROL NOFLUSH NOMSG NOPROMPT NOLIST
ISPEXEC CONTROL ERRORS RETURN
SET &NULL = &STR()
SET &RSPDEF_FATAL_ERROR = NO
/*********************************************************************/
/* Convert placeholders to blanks. */
/*********************************************************************/
IF &STR(&SSID) EQ &STR(.) THEN SET &SSID=&STR()
IF &STR(&SUFFIX) EQ &STR(.) THEN SET &SUFFIX=&STR()
IF &STR(&PARMLIB) EQ &STR(.) THEN SET &PARMLIB=&STR()
/*********************************************************************/
/* Check for rc application id. If we are currently */
/* under a different id recursively invoke ourselves. */
/*********************************************************************/
ISPEXEC VGET (ZAPPLID)
IF &ZAPPLID NE &STR(RC) THEN DO
IF &STR(&SSID) NE THEN SET &SSID=&STR(SSID(&SSID))
IF &STR(&SUFFIX) NE THEN SET &SUFFIX=&STR(SUFFIX(&SUFFIX))
IF &STR(&PARMLIB) NE THEN SET &PARMLIB=&STR(PARMLIB(&PARMLIB))
ISPEXEC SELECT -
CMD(%&SYSICMD -
&SSID &SUFFIX &PARMLIB RECURS(YES)) -
NEWAPPL(RC) -
PASSLIB
SET &SQLCC = &LASTCC
EXIT CODE(&SQLCC)
END
/*********************************************************************/
/* If PARMLIB was not passed as an argument, then we will use */
/* the PARMLIB that was established the last time they used the */
/* CA-DB2 Tools. This means that the CA-DB2 Tools must have been */
/* entered at least 1 time previously. */
/*********************************************************************/
IF &STR(&PARMLIB) EQ THEN DO
ISPEXEC VGET (PTIPARM)
IF &STR(&PTIPARM) EQ THEN DO
SET &ZEDSMSG = &STR(PARMLIB NOT SET)
SET &ZEDLMSG = &STR(You did not specify a PARMLIB,)
SET &ZEDLMSG = &STR(&ZEDLMSG and a default PARMLIB has not)
SET &ZEDLMSG = &STR(&ZEDLMSG been set.)
SET &ZEDLMSG = &STR(&ZEDLMSG You must specify a PARMLIB,)
SET &ZEDLMSG = &STR(&ZEDLMSG or, you must have entered)
SET &ZEDLMSG = &STR(&ZEDLMSG the CA Products for DB2)
SET &ZEDLMSG = &STR(&ZEDLMSG at least 1 time previously,)
SET &ZEDLMSG = &STR(&ZEDLMSG in order for this clist to work)
ISPEXEC SETMSG MSG(ISRZ001)
EXIT CODE(12)
END
END
/*********************************************************************/
/* If SSID was not passed as an argument, then we will use */
/* the SSID that was established the last time they used the */
/* CA-DB2 Tools. This means that the CA-DB2 Tools must have been */
/* entered at least 1 time previously. */
/*********************************************************************/
IF &STR(&SSID) EQ THEN DO
ISPEXEC VGET (SYS)
IF &STR(&SYS) EQ OR &STR(&SYS) EQ &STR(SSID) THEN DO
SET &ZEDSMSG = &STR(DB2 SUBSYSTEM NOT SET)
SET &ZEDLMSG = &STR(You did not specify a DB2 SSID,)
SET &ZEDLMSG = &STR(&ZEDLMSG and a default SSID has not)
SET &ZEDLMSG = &STR(&ZEDLMSG been set.)
SET &ZEDLMSG = &STR(&ZEDLMSG You must specify a DB2 SSID,)
SET &ZEDLMSG = &STR(&ZEDLMSG or, you must have entered)
SET &ZEDLMSG = &STR(&ZEDLMSG the CA Products for DB2)
SET &ZEDLMSG = &STR(&ZEDLMSG at least 1 time previously and)
SET &ZEDLMSG = &STR(&ZEDLMSG connected to a DB2 subsystem,)
SET &ZEDLMSG = &STR(&ZEDLMSG in order for this clist to work)
ISPEXEC SETMSG MSG(ISRZ001)
EXIT CODE(12)
END
END
/*********************************************************************/
/* Identify line commands to be used by this system. */
/* If they did not enter E or EE/EE, exit with msg. */
/*********************************************************************/
ISREDIT PROCESS RANGE E
IF &LASTCC ^= 0 THEN DO
SET &ZEDSMSG = &STR(BLOCK COMMAND INCOMPLETE)
SET &ZEDLMSG = &STR(SQL QUERY MUST BE MARKED WITHIN)
SET &ZEDLMSG = &STR(&ZEDLMSG PROGRAM BY EE/EE LINE COMMANDS)
ISPEXEC SETMSG MSG(ISRZ001)
EXIT CODE(12)
END
/*********************************************************************/
/* Obtain the logical data width, */
/* and substring DLEN to 3 chars. */
/*********************************************************************/
ISREDIT (DLEN) = DATA_WIDTH
SET &VLEN = &LENGTH(&STR(&DLEN))
IF &VLEN > 3 THEN -
SET &DLEN = &SUBSTR(&VLEN-2:&VLEN,&DLEN)
/*********************************************************************/
/* Isolate the desired lines of sql. */
/*********************************************************************/
ISREDIT (FLINE) = LINENUM .ZFRANGE
ISREDIT (LLINE) = LINENUM .ZLRANGE
/*********************************************************************/
/* Create 1 variable with all of the sql in it, */
/* using at most 72 bytes of data. */
/* If cobol, then use only 66 bytes of data. */
/*********************************************************************/
SET COUNT = &FLINE
SET SQLTEXT = &STR()
DO WHILE (&COUNT ^> &LLINE)
ISREDIT (SQ) = LINE &COUNT
IF &DLEN > &STR(072) THEN -
IF &DLEN = &STR(074) THEN -
SET SQLTEXT = &STR(&NRSTR(&SQLTEXT)&SUBSTR(1:66,&NRSTR(&SQ)))
ELSE -
SET SQLTEXT = &STR(&NRSTR(&SQLTEXT)&SUBSTR(1:72,&NRSTR(&SQ)))
ELSE -
SET SQLTEXT = &STR(&NRSTR(&SQLTEXT)&NRSTR(&SQ))
SET COUNT = &COUNT+1
END
/*********************************************************************/
/* If actual data width is greater than 72 use 72, */
/* except if the length is 74 in which case the edit */
/* profile is number on cobol and data width is 66. */
/*********************************************************************/
IF &DLEN > &STR(072) THEN -
IF &DLEN = &STR(074) THEN -
SET &DLEN = &STR(066)
ELSE -
SET &DLEN = &STR(072)
/********************************************************************/
/* Parse dsname/ddname argument */
/********************************************************************/
SET &PARM = &STR()
SET &CHECK_DATASET_NAME = NO
IF &STR(&PARMLIB) NE THEN DO
IF &SUBSTR(1:1,&STR(&PARMLIB)) EQ &STR(') OR +
&SUBSTR(1:1,&STR(&PARMLIB)) EQ &STR(") THEN DO
/* strip quotes */
SET &PARMLIB = &SUBSTR(2:&LENGTH(&PARMLIB)-1,&STR(&PARMLIB))
END
IF &LENGTH(&STR(&PARMLIB)) GT 3 THEN DO
/* DD:ddname ?
SET &PREFIX = &SUBSTR(1:3,&STR(&PARMLIB))
IF &STR(&PREFIX) = &STR(DD:) THEN +
SET &PARM = &STR(PARMLIB(&PARMLIB))
END
IF &STR(&PARM) EQ THEN DO
/* if the length of PARMLIB is <= 8
/* and contains no period,
/* then it is a DDNAME.
/* otherwise it is a DSNAME
SET &LEN = &LENGTH(&STR(&PARMLIB))
SET &DOT = &SYSINDEX(&STR(.),&STR(&PARMLIB))
IF &LEN LE 8 AND &DOT EQ 0 THEN DO
SET &PARM = &STR(PARMLIB(DD:&PARMLIB))
END
ELSE DO
SET &PARM = &STR(PARMLIB(&PARMLIB))
SET &CHECK_DATASET_NAME = YES
END
END
/* if dataset name given, then verify it...
/* the RSPDEF clist always treats the dataset name as
/* fully qualified, regardless whether it is quoted or not...
/* so, we'll do the same here...
IF &CHECK_DATASET_NAME = YES THEN DO
SET &SYSDSN_RESULT = &SYSDSN('&PARMLIB')
IF &STR(&SYSDSN_RESULT) NE OK THEN DO
SET &ZEDSMSG = &STR(PARMLIB DATASET ERROR)
SET &ZEDLMSG = &STR('&PARMLIB' &SYSDSN_RESULT)
ISPEXEC SETMSG MSG(ISRZ001)
EXIT CODE(12)
END
END
END
/********************************************************************/
/* Call RSPDEF to drive online allocations. */
/********************************************************************/
/* RSPDEF will end with RC=4 if split screen detected... */
/********************************************************************/
%RSPDEF 'SUFFIX(&SUFFIX) &PARM'
SET &RC = &LASTCC
IF &RC GT 4 THEN DO
SET &RSPDEF_FATAL_ERROR = YES
GOTO DONE
END
%RSPINIT
/*********************************************************************/
/* Call ISQL, let it grab the sql from clist var */
/*********************************************************************/
/* Important note: */
/* */
/* If PTLDRIVM encounters an error and does a setmsg, it will exit */
/* and the message will be displayed in the current edit window... */
/* */
/* This is good, except that there may be a .HELP panel associated */
/* with the error, and if the user hits PF1 they will get an ISPF */
/* Dialog Error "panel not found" and they will be kicked out of the */
/* edit session -- because the HELP panel library is not allocated. */
/* */
/* Unfortunately, from a programming point-of-view, there is */
/* nothing at all that we can do about this. The only work-around */
/* is for the user to permanently allocate the HELP panels in the */
/* TSO logon proc... */
/* Which is actually not a bad thing to do (hint, hint). */
/*********************************************************************/
IF &STR(&SUFFIX) EQ THEN +
DO
ISPEXEC SELECT -
PGM(PTLDRIVM) -
PARM(CI=IQLSQL/&DLEN&SSID) -
NEWAPPL(RC) -
PASSLIB
END
ELSE +
DO
ISPEXEC SELECT -
PGM(PTLDRIVM) -
PARM(CI=IQLSQL,SUFFIX=&SUFFIX/&DLEN&SSID) -
NEWAPPL(RC) -
PASSLIB
END
/*********************************************************************/
/* Cleanup: */
/* Call RSPFREE to release our allocations. */
/*********************************************************************/
DONE: &NULL
%RSPFREE
IF &RSPDEF_FATAL_ERROR = YES THEN DO
SET &ZEDSMSG = &STR(Unable to start ISQL)
SET &ZEDLMSG = &STR(The RSPDEF clist ended with a RC=&RC..)
SET &ZEDLMSG = &STR(&ZEDLMSG RSPDEF is responsible)
SET &ZEDLMSG = &STR(&ZEDLMSG for processing the parmlib/suffix,)
SET &ZEDLMSG = &STR(&ZEDLMSG and allocating runtime libraries.)
SET &ZEDLMSG = &STR(&ZEDLMSG The clist encountered an error, and)
SET &ZEDLMSG = &STR(&ZEDLMSG processing terminated.)
SET &ZEDLMSG = &STR(&ZEDLMSG Correct your parmlib/suffix)
SET &ZEDLMSG = &STR(&ZEDLMSG specification, and try again.)
ISPEXEC SETMSG MSG(ISRZ001)
END
EXIT CODE(0)
}¢--- A540769.WK.REXX.O13(CAT) cre=2009-09-03 mod=2013-09-23-11.27.26 A540769 ---
/* copy cat begin ****************************************************
***********************************************************************/
/*--- create a new cat -----------------------------------------------*/
cat: procedure expose m.
m = oNew('Cat') /* calls catReset */
do ax=1 to arg()
call catWriteAll m, arg(ax)
end
return m
endProcedure cat
catReset: procedure expose m.
parse arg m
m.m.RWs.0 = 0
m.m.catWr = ''
m.m.catRd = ''
m.m.catIx = -9e9
m.m.catKeepOpen = ''
return m
endProcedure catReset
catClose: procedure expose m.
parse arg m
if m.m.catWr \== '' then do
call jClose m.m.catWr
call mAdd m'.RWS', m.m.catWr
m.m.catWr = ''
end
if m.m.catRd \== '' then do
call jClose m.m.catRd
m.m.catRd = ''
end
m.m.catIx = -9e9
return m
endProcedure catClose
catOpen: procedure expose m.
parse arg m, oo
if oo == m.j.cRead then do
m.m.catIx = 0
call catNextRdr m
m.m.jReading = 1
end
else if oo == m.j.cWri | oo == m.j.cApp then do
if oo == m.j.cWri then
m.m.RWs.0 = 0
m.m.catIx = -9e9
m.m.jWriting = 1
end
else do
call err 'catOpen('m',' oo') bad opt'
end
return m
endProcedure catOpen
/*--- return and open next reader ------------------------------------*/
catNextRdr: procedure expose m.
parse arg m
if m.m.catRd \== '' then
call jClose m.m.catRd
cx = m.m.catIx + 1
m.m.catIx = cx
if cx > m.m.RWs.0 then do
m.m.catRd = ''
return 0
end
m.m.catRd = m.m.RWs.cx
if cx = word(m.m.catKeepOpen, 1) then
m.m.catKeepOpen = subWord(m.catKeepOpen, 2)
else
call jOpen m.m.catRd , m.j.cRead
return 1
endProcedure catNextRdr
catReadO: procedure expose m.
parse arg m
do while m.m.catRd \== ''
res = jReadO(m.m.catRd)
if res \== '' then
return res
call catNextRdr m
end
return ''
endProcedure catReadO
catWrite: procedure expose m.
parse arg m, line
if m.m.catWr == '' then
m.m.catWr = jOpen(jBuf(), m.j.cWri)
call jWrite m.m.catWr, line
return
endProcedure catWrite
catWriteO: procedure expose m.
parse arg m, var
if m.m.catWr == '' then
m.m.catWr = jOpen(jBuf(), m.j.cWri)
call jWriteO m.m.catWr, var
return
endProcedure catWriteO
/*--- write contents of a reader to cat
or keep it for later reading -------------------------------*/
catWriteAll: procedure expose m.
parse arg m
if m.m.catWr \== '' then do
call mAdd m'.RWS', jClose(m.m.catWr)
m.m.catWr = ''
end
do ax=2 by 1 to arg()
r = o2File(arg(ax))
call mAdd m'.RWS', r
if m.r.jReading then do
m.m.catKeepOpen = m.m.rws.0 m.m.catKeepOpen
call jOpen r, m.j.cRead
end
end
return
endProcedure catWriteAll
/*--- create a reader/WriteO for an external file --------------------*/
file: procedure expose m.
parse arg str
return oNew('File', str)
endProcedure file
fileChild: procedure expose m.
parse arg m, name, opt
interpret objMet(m, 'fileChild')
endProcedure fileChild
fileRm: procedure expose m.
parse arg m
interpret objMet(m, 'fileRm')
return
endProcedure fileRm
filePath: procedure expose m.
parse arg m
interpret objMet(m, 'filePath')
endProcedure filePath
fileIsFile: procedure expose m.
parse arg m
interpret objMet(m, 'fileIsFile')
endProcedure fileIsFile
fileIsDir: procedure expose m.
parse arg m
interpret objMet(m, 'fileIsDir')
endProcedure fileIsDir
fileMkDir: procedure expose m.
parse arg m, opt
interpret objMet(m, 'fileMkDir')
return
endProcedure fileRm
fileRmDir: procedure expose m.
parse arg m, opt
interpret objMet(m, 'fileRmDir')
return
endProcedure fileRm
/*--- create a reader/WriteO for the filelist of a directory----------*/
fileList: procedure expose m.
parse arg m, opt
str = oIfStr(m, '')
if str == '' then
return oNew('FileList', filePath(m), opt)
else
return oNew('FileList', dsn2Jcl(str), opt)
endProcedure fileList
fileSingle: procedure expose m.
parse arg m
call jOpen m, '<'
res = jReadO(m)
two = jReadO(m)
call jClose m
if res == '' then
if arg() < 2 then
call err 'empty file in fileSingle('m')'
else
res = arg(2)
if two \== '' then
call err '2 or more recs in fileSingle('m')'
return res
endProcedure fileSingle
catIni: procedure expose m.
if m.cat.ini == 1 then
return
m.cat.ini = 1
call jIni
call errIni
call classNew "n Cat u JRWO", "m",
, "jOpen call catOpen m, opt",
, "jReset call catReset m, arg",
, "jClose call catClose m",
, "jReadO return catReadO(m)",
, "jWrite call catWrite m, line; return",
, "jWriteO call catWriteO m, var; return",
, "jWriteAll call catWriteAll m, rdr; return"
call classAddMet m.class.classV, 'o2File return file(m.m)'
call classAddMet m.class.classW, 'o2File return file(substr(m,2))'
if m.err.os == 'TSO' then
call fileTsoIni
else if m.err.os == 'LINUX' then
call fileLinuxIni
else
call err 'file not implemented for os' m.err.os
return
endProcedure catIni
/* copy cat end ****************************************************/
}¢--- A540769.WK.REXX.O13(CATCOPRE) cre=2012-09-26 mod=2012-09-26-11.13.47 A540769 ---
call sqlConnect dbof
say time() 'start'
$;
$>DSN.CATCOPRE.OUT ::v
$<=¢
with p as
(
select dbName db, tsName ts, partition part,
( select max(f.timestamp) from sysibm.sysCopy f
where p.dbName = f.dbName and p.tsName = f.tsName
and f.dsNum in (p.partition, 0)
and f.icType in ('F', 'R','X')
) laFu
from sysibm.sysTablePart p
where dbName like '%'
)
select db, ts, part, laFu,
c.icType, c.dsNum, c.Timestamp, c.dsName
from p left join sysibm.sysCopy c
on p.db = c.dbName and p.ts = c.tsName
and c.dsNum in (p.part, 0)
and c.icType in ('F', 'I', 'R','X')
and c.timestamp >= laFu
order by p.db, p.ts, p.part, c.timestamp desc
$!
call sqlSel
cFet = 0
cInc = 0
cFul = 0
cOk = 0
cArc = 0
cErr = 0
lEla = 0
$|
say time() 'first'
$@forWith cc $@¢
cFet = cFet + 1
if $ICTYPE = 'F' then
cFul = cFul + 1
else if $ICTYPE = 'I' then
cInc = cInc + 1
else
iterate
arc = dsnArc($DSNAME)
if arc = 'ok' then do
cOk = cOk + 1
end
else do
if arc = 'arc' then
cArc = cArc + 1
else
cErr = cErr + 1
$$- left($DB, 8) left($TS,8) right($PART, 4) $*+
$LAFU $ICTYPE right($DSNUM, 4) left($DSNAME,46) arc
end
if time('e') > lEla then do
say time() cFet 'fet,' cInc 'inc,' cFul 'ful,' ,
cOk 'dsnOK,' cArc 'arc,' cErr 'err,' $DB $TS
lEla = time('e') + 10
end
$!
say time() cFet 'fetch,' cInc 'incremental,' cFul 'full,' ,
cOk 'dsn ok,' cArc 'archived,' cErr 'errors'
call sqlDisconnect
$#out 20130101 10:50:54
$#out 20130101 10:50:21
$#out 20130101 10:45:54
$#out 20130101 10:43:27
*** run error ***
tsoAlloc rc 12 for alloc dd() DSN('DSN.CATOPTRE.OUT')
$#out 20130101 10:33:10
$#out 20130101 10:32:02
$#out 20130101 10:28:01
}¢--- A540769.WK.REXX.O13(CAX) cre=2012-11-14 mod=2013-05-27-12.32.46 A540769 ---
/* rexx ----------------------------------------------------------------
Credit Suisse line commands in RCQ walter 19.4.13
c1 : db2 catalog rows for this line
cx : db2 catalog rows for all lines of currently displayed list
rts or r1: realTimeStats rows for this line
rx : realTimeStats rows for all lines of currently displayed list
The above commands show their result in an editSession
you find the selection path and sql at the bottom
within this editSession the same commands act as editMacros
$br or $ed: browse or edit table on this line with fileAid
editMacros
cx in command line: show data as table (one row a line)
c1 in command line and cursor on target line:
show data for selected line, one column a line
rx in command line: show related realTimeStats as table
rts or r1 in command line and cursor on target line:
show realTimeStats related to selected line, one column a line
the above editMacros allow arguments to select related db2 objects
e.g. cx pk: related packages, cx ik: related index keys
the syntax for the argumnts is richer: ct* (':' ct)?
ct: abbreviations for db2 catalog tables (lowercase|)
c co=syscopy db i ik=indexKey ip pk pkd ri rt t tg tp ts v vd
ct before the colon
first: target catalog table
following: intermediates on the new selection path
ct after the colon: starting point in the old selection path
$br or $ed: browse or edit table on cursor line with fileAid
{u
ux: erstellt utilities/rebinds fuer angezeigte Objekte
macro arguments: Liste von Utilities, abkuerzung erlaubt:
copy loaddummy=dummy reorg runstats
rebind=rbind rebuild=build recover=rcover
{
help: http://chsa4212/host/db2wiki/pmwiki.php?n=Main.CaCatCx
history
19. 4.13 walter: $ed,$br,rts=r1 +rx, help fuer cx etc. ohne ux, errors
------------------------------*/ /*--- end of help ---------------------
17. 4.13 walter: fix relation c <-> t v
4. 4.13 walter: fix copy parallel
3. 4.13 walter: fix c1/r1 auf ts, relationship tg -> t v
?. 3.13 walter: neu geschrieben
----------------------------------------------------------------------*/
parse arg who, a1, a2, a3
m.cmd = who
call errReset 'hi'
m.err.helpOpt = if(translate(left(who, 1)) = 'U', 'u', 'e')
m.debug = 0
/* say 'A540769.WK.REXX(cax)' who '('a1',' a2',' a3')--------------'*/
isEdit = 0
if a1 == '' then
if m.err.ispf then
isEdit = adrEdit('macro (a1) PROCESS', '*') == 0
if pos('?', who a1 ) > 0 then
exit help()
call utIni
call pipeIni
call tkrIniDb2Cat
if who == 'CX'| who == 'C1' then do
if isEdit then
return catEditMacro('=', who == 'CX', a1)
else
return catLineCmd('=', who == 'CX')
end
else if who = 'RX' | who == 'R1' | who == 'RTS' then do
if isEdit then
return catEditMacro('r', who == 'RX', a1)
else
return catLineCmd('r', who == 'RX')
end
else if who == 'UX' | who == 'U1' then do
if isEdit then
return uxEditMacro('ux', a1, who == 'UX')
else if a1 == '' then
return uxLineCmd()
end
else if who == '$ED' then
return fileAid(isEdit, 'edit')
else if who == '$BR' then
return fileAid(isEdit, 'browse')
else
call errHelp 'command='who 'args='a1 'edit='isEdit 'not implemented'
exit
catLineCmd: procedure expose m.
parse arg ty, all
m='cat'
if all then
sq = anaSqlAll(m)
else
sq = anaSqlThis(m)
if ty == 'r' then do
parse var sq sTys ':'
sTy = word(sTys, 1)
sq = if(pos('i', sTy) > 0, 'ri', 'rt') sq
end
else if ty \== '=' then
call err 'bad ty' ty 'in catLineCmd'
parse var sq sTys ':' wh
sTy = word(sTys, 1)
call sqlConnect m.m.dbSy
call pipe '+F', fEdit('::v')
call out ' *' m.m.func '? = help, PF3 = zurück zu' ,
'rcQuery' m.m.hTb m.m.hOp
call sqlCatTb sTy, tkrWhere(,sq), tkrTable(, sTy, 'o'), all
call pipe '-'
call sqlDisconnect
return 0
endProcedure catLineCmd
catEditMacro: procedure expose m.
parse arg ty, all, nPa ':' sPa
m='cat'
call anaEdit m, all
if nPa = '' then
nPa = word(m.m.path, 1)
else do px=1 to words(nPa)
if tkrTable(tkr, word(nPa, px), , '') == '' then
call err 'i}'word(nPa, px) 'not a table in path' arg(3)
end
if sPa = '' then
sPa = word(m.m.path, 1)
else if \ all then
call err 'i}startPath :'sPa 'not allowed for' m.m.func
px = wordPos(sPa, m.m.path)
if px < 1 then
call err 'i}start' sPa 'not in path' m.m.path 'args:' nPa':'sPa
if ty == 'r' then
nPa = if(pos('i', word(nPa, 1)) > 0, 'ri', 'rt') nPa
else if ty \== '=' then
call err 'bad ty' ty
if all then do
sx = m.m.sql.0 + 1 - px
sq = m.m.sql.sx
parse var sq sFr sTb sAl . 'where' wh
if sAl \== sPa then
call err 'i}start' sPa '<> al' sAl 'in' sq
sTb = tkrTable(tkr, sPa, , '')
if '' == sTb then
call err 'i}start' sPa 'not a table'
wh = strip(wh)
if abbrev(wh, m.sTb.cond) then
wh = strip(substr(wh, length(m.sTb.cond)+1))
else
call err sPa 'cond' m.sTb.cond 'does not start where:' wh
/* if sx > 1 then do
pPa = word(m.m.path, px+1)
if m.tkr.sPa.pPa == 'relation' then
ky = tkr'.'sPa'.'pPa'.LEF'
else if m.tkr.pPa.sPa == 'relation' then
ky = tkr'.'pPa'.'sPa'.RIG'
else
call err 'relation' sPa'.'pPa 'not declared'
if abbrev(wh, m.ky.cond) then
wh = strip(substr(wh, length(m.ky.cond)+1))
else if m.ky.cond <> '' then
call err sPa 'cond' m.ky.cond 'does not start where:' wh
end ?????? falsche Richtung? */
if px > 1 then do
pPa = word(m.m.path, px-1)
if symbol('m.tkr.t2t.sPa.pPa') == 'VAR' then
ky = m.tkr.t2t.sPa.pPa'.LEF'
else if symbol('m.tkr.t2t.pPa.sPa') == 'VAR' then
ky = m.tkr.t2t.pPa.sPa'.RIG'
else
call err 'relationShip' sPa'.'pPa 'not declared'
if abbrev(wh, m.ky.cond) then
wh = strip(substr(wh, length(m.ky.cond)+1))
else
call err sPa 'cond' m.ky.cond 'does not start where:' wh
end
do lx = sx-1 by -1 to 1
wh = wh m.m.sql.lx
end
bc = m.m.sql.0 - 1
do bx = length(wh) by -1 to 1 while bc > sx - 1
b1 = substr(wh, bx, 1)
if b1 = ')' then
bc = bc - 1
else if b1 \== ' ' then
leave
end
wh = strip(left(wh, bx))
end
else do
px = 1
sKy = mGet(tkrTable(, sPa)'.PKEY')
wh = list2where(m'.LST', sKy)
end
nTy = word(nPa, 1)
call sqlConnect m.m.dbSy
b = jBuf()
call pipe '+F', b
call out m.m.help
call sqlCatTb nTy, tkrWhere(, nPa sPa':' wh),
, , all,
, if(all, subWord(m.m.path, px+1))
call pipe '-'
call adrEdit 'delete .zf .zl'
call adrEdit 'reset'
do bx=1 to m.b.buf.0
li = m.b.buf.bx
call adrEdit 'line_after .zl = (li)'
end
call sqlDisconnect
call adrEdit 'locate .zf'
return 1
endProcedure catEditMacro
fileAid: procedure expose m.
parse arg isEdit, faFun
m='cat'
if isEdit then do
call anaEdit m, 1
l = m'.LST'
m.l.0 = 0
call anaList m, tkrTable(, word(m.m.path, 1)), 0
if m.l.0 = 1 & m.l.alias = 't' then
return callFA(faFun, m.m.dbSy, m.l.1.2, m.l.1.1)
call err 'i}not a single table but' m.l.0 m.l.alias
end
else do
sq = anaSqlThis(m)
if m.m.lTb == 't' then
return callFA(faFun, m.m.dbSy, m.m.lNm, m.m.lQu)
call err 'i}not a single table but' m.m.lTb
end
endProcedure fileAid
callFA: procedure expose m.
parse arg faFun, dbSy, tb, cr
/* call adrIsp "SELECT CMD(rCallFad" faFun dbSy tb cr")" ,
"NEWAPPL(FD49) PASSLIB" */
call rCallFad faFun dbSy tb cr
return 0
endProcedure callFAD
uxLineCmd: procedure expose m.
m='ux'
call anaSql m
call sqlConnect m.m.dbSy
fe = jOpen(fEdit(), '>')
call jWrite fe, 'who' sysvar(sysnode) m.m.dbSy userid() m.m.screen
call jWrite fe, 'sel' cTy m.m.hCr'.'m.m.hNm
call sql2St 'select creator cr, name tb, dbName db, tsName ts',
genSql(m, 't'), sq
if m.sq.0 <> m.m.lines then
say 'warning: select' m.sq.0 'rows <->' m.m.lines 'on screen',
'this might be a program ERROR|'
do sx=1 to m.sq.0
call jWrite fe, ' ts' left(m.sq.sx.db'.'m.sq.sx.ts,18) ,
't' m.sq.sx.cr'.'m.sq.sx.tb
end
call sqlDisconnect
call jCLose(fe)
return 0
endProcedure uxLineCmd
anaSqlAll: procedure expose m.
parse arg m
call getInfo m
m.m.predFlds = '? ? HNM HCR HQU HPKVERS HROVERS'
return anaSql(m, m.m.hTb, m.m.hOp)
endProcedure anaSqlAll
anaSqlThis: procedure expose m.
parse arg m
call getInfo m
m.m.predFlds = '? ? LNM LQU PART LPANM COLLECTION CONTOKEN VERSION'
ty = m.m.lTb
if ty == 'c' & m.m.hTb == 'i' then
return anaPred(m, 'ik', 'ikk.colName', 'creator', , 'name')
else if ty == 'c' & wordPos(m.m.hTb, 't v') > 0 then
return anaPred(m, 'c', 'name', 'tbCreator', , 'tbName')
else if ty == 'ip' then
return anaPred(m, 'ip', 'ixname', 'ixCreator', 'partition')
else if ty == 'pk' then
return anaPred(m, 'pk', 'name', 'owner',,, 'collid',
, 'conToken', 'version')
else if ty == 'tg' & m.m.hTb == 't' then
return anaPred(m, 'tg', 'name', 'tbOwner', , 'tbName')
else if ty == 'ts' then
return anaPred(m, 'ts', 'name', 'dbName')
else if ty == 'tp' then
return anaPred(m, 'tp', 'tsname', 'dbName', 'partition')
else
return anaSql(m, ty, 'd')
endProcedure anaSqlThis
anaSql: procedure expose m.
parse arg m, ty, op
tyOp = ty':'op
if ty == 'c' then
sq = anapred(m, 'c', 'name', 'tbCreator')
else if tyOp == 'db:i' then
sq = anapred(m, 'i', 'dbName')
else if tyOp == 'db:t' | tyOp = 'db:v' then
sq = anapred(m, 't', 'dbName')
else if tyOp == 'db:ts' then
sq = anapred(m, 'ts', 'dbName')
else if ty = 'db' then
sq = anapred(m, 'db', 'name')
else if tyOp == 'i:c' then
sq = anaPred(m, 'ik', 'name', 'creator')
else if tyOp == 'i:pl' then
sq = anaPred(m, 'ip', 'ixName', 'ixCreator')
else if ty == 'i' then
sq = anaPred(m, 'i', 'name', 'creator')
else if ty == 'pk' then
sq = anaPred(m, 'pk', 'name', 'owner', 'collid', 'version')
else if tyOp == 't:i' then
sq = anaPred(m, 'i', 'tbName', 'tbCreator')
else if tyOp == 't:tg' then
sq = anaPred(m, 'tg', 'tbName', 'tbOwner')
else if ty == 't' then
sq = anaPred(m, 't', 'name', 'creator')
else if ty == 'tg' then
sq = anaPred(m, 'tg', 'name', 'tbOwner')
else if tyOp == 'ts:pl' then
sq = anaPred(m, 'tp', 'tsName', , 'dbName')
else if ty == 'ts' then
sq = anaPred(m, 'ts', 'name', 'creator', 'dbName')
else if ty == 'v' then
sq = anaPred(m, 'v', 'name', 'creator')
else
call err 'type:opt' tyOp 'not implemented yet'
if tyOp == 'i:d' then
return 'ip' sq
else if tyOp == 'ts:d' then
return 'tp' sq
if op == 'l' | op == 'd' | op == 'pl' | tyOp = 'i:c' then
return sq
else
return op sq
endProcedure anaSql
anaPred: procedure expose m.
parse arg m, ty
sq = ''
do ax=3 to arg()
f1 = word(m.m.predFlds, ax)
if f1 \== '' then
sq = strip(sq tkrPred( , ty, arg(ax), m.m.f1))
end
return ty':' substr(sq, 5)
endProcedure anaPred
/*--- copy tkr begin ---------------------------------------------------
table key relationship
----------------------------------------------------------------------*/
tkrTable: procedure expose m.
parse arg m, key, wh
if m == '' then
m = tkr
dx = pos('.', key)
if dx < 1 then
mt = m'.t.'key
else
mt = key
if m.mt \== 'table' then
if arg() >= 4 then
return arg(4)
else
call err 'not a table' key', mt' mt'->'m.mt
if wh == '' then
return mt
else if wh == 't' then
return m.mt.table
else if wh == 'o' then
return m.mt.order
else if wh == 'f' then
return 'from' m.mt.table 'where' m.mt.cond
else if wh == 'w' then
return m.mt.cond
else if wh == 'e' then
return m.mt.editFun
else
call err 'bad what' wh 'in tkrTable('m',' tb',' wh')'
endProcedure tkrTable
tkrWhere: procedure expose m.
parse arg m, pa ':' wh
if m == '' then
m = tkr
pEx = tkrPath(m, pa)
m.m.path = pEx
sq = wh
do px=words(pEx)-1 by -1 to 1
tt = word(pEx, px)
tf = word(pEx, px+1)
if symbol('m.m.t2t.tt.tf') == 'VAR' then
parse value m.m.t2t.tt.tf 'LEF RIG' with rl fTo fFr
else if symbol('m.m.t2t.tf.tt') == 'VAR' then
parse value m.m.t2t.tf.tt 'RIG LEF' with rl fTo fFr
else
call err 'no relationShip to' tt 'from' tf 'path' pEx,
't.f' m.m.tt.tf 'f.t' m.m.tf.tt
if m.rl.fFr.sql1 \== '' then
sq = m.rl.fFr.sql1 sq')'
else do
kc = min(mGet(m.rl.lef'.'0), mGet(m.rl.rig'.'0))
sq = '('mCatFT(m.rl.fTo, 1, kc, '%qn, %s')')' ,
'in (select' mCatFT(m.rl.fFr, 1, kc, '%qn, %s'),
tkrTable(m,mGet(m.rl.fFr'.'table),'f') sq')'
end
/* kc = min(mGet(m.rl.lef'.'0), mGet(m.rl.rig'.'0))
s2 = '('mCatFT(m.rl.fTo, 1, kc, '%qn, %s')') in'
if m.rl.fFr.special \== '' then
sq = s2 m.rl.fFr.special sq')'
else
sq = s2 '(select' mCatFT(m.rl.fFr, 1, kc, '%qn, %s'),
tkrTable(m,mGet(m.rl.fFr'.'table),'f') sq')'
sq = '('mCatFT(m.rl.fTo, 1, kc, '%qn, %s')')' ,
'in (select' mCatFT(m.rl.fFr, 1, kc, '%qn, %s'),
tkrTable(m,mGet(m.rl.fFr'.'table),'f') sq')' */
end
return sq
endProcedure tkrWhere
tkrPath: procedure expose m.
parse arg m, sPa
res = word(sPa, 1)
do sx=2 to words(sPa)
p1 = tkrPat1(m, word(sPa, sx-1), word(sPa, sx))
if p1 == '' then
call err 'no path to' word(sPa, sx-1) 'from' word(sPa, sx)
res = res subWord(p1, 2)
end
if m.debug then
say '???' sPa '==path==>' res
return res
endProcedure tkrPath
tkrPatChk: procedure expose m.
parse arg m, pa
p2 = space(pa, 1)
do bx=1 to words(m.m.pathBad)
b1 = word(m.m.pathBad, bx)
if abbrev(b1, 1) then do
wx = wordPos(substr(b1, 2), p2)
if wx > 1 & wx < words(p2) then
return ''
end
else if pos('|', b1) > 0 then do
parse var b1 t1 '|' t2
wx = wordPos(t1, p2)
if wx > 1 & wx < words(p2) then
if word(p2, wx-1) \== t2 & word(p2, wx+1) \== t2 then
return ''
end
else if pos('-', b1) > 0 then do
b2 = translate(b1, ' ', '-')
if pos(' 'b2' ', ' 'p2' ') > 0 then
return ''
b3 = ''
do wx=1 to words(b2)
b3 = word(b2, wx) b3
end
if pos(' 'b3' ', ' 'p2' ') > 0 then
return ''
end
else
call err 'bad pathBad word' b1 'in' m.m.pathBad
end
return strip(p2)
endProcedure tkrPatChk
/*--- return path to tt from tf, fail if not unique ------------------*/
tkrPat1: procedure expose m.
parse arg m, tt, tf
m.m.pathRes.0 = 0
call tkrPat3 m, tt, tf
if m.m.pathRes.0 = 1 then
return m.m.pathRes.1
else if m.m.pathRes.0 < 1 then
call err 'no path to' tt 'from' tf
else if m.m.pathRes.0 > 1 then
call err 'multiple ('m.m.pathRes.0') paths to' tt 'from' tf,
mCat(m'.'pathRes, '\n%s%qn\n%s')
endProcedure tkrPat1
/*--- add minimal paths to tt from tf to pathRes ---------------------*/
tkrPat2: procedure expose m.
parse arg m, tt, tf
call tkrPat3 m, tt, tf
if m.debug then do
say '???' tt '<' tf '--pat2-->' m.m.pathRes.0 'paths'
do px=1 to m.m.pathRes.0
say '???'px'???' m.m.pathRes.px
end
end
return
endProcedure tkrPat2
/*--- add minimal paths to tt from tf to pathRes ---------------------*/
tkrPat3: procedure expose m.
parse arg m, tt, pa1 paR
pa = tkrPatChk(m, pa1 paR)
if pa == '' then
return
if tt = pa1 then do
/* ok target reached, is there already a shorter path? */
do px=1 to m.m.pathRes.0
if wordsIsSub(pa, m.m.pathRes.px) then
return
end
/* remove all longer paths */
qx = 0
do px=1 to m.m.pathRes.0
if wordsIsSub(m.m.pathRes.px, pa) then
iterate
qx = qx+1
m.m.pathRes.qx = m.m.pathRes.px
end
/* add new path */
qx = qx+1
m.m.pathRes.qx = pa
m.m.pathRes.0 = qx
return
end
/* use direct connection if it exists */
if symbol('m.m.t2t.tt.pa1') == 'VAR' ,
| symbol('m.m.t2t.pa1.tt') == 'VAR' then do
call tkrPat2 m, tt, tt pa1 paR
return
end
tb1 = tkrTable(m, pa1)
/* try all connections from pa1 */
do rx=1 to words(m.tb1.rels)
r1 = word(m.tb1.rels, rx)
if mGet(mGet(m.r1.lef'.TABLE')'.ALIAS') == pa1 then
a1 = mGet(mGet(m.r1.rig'.TABLE')'.ALIAS')
else if mGet(mGet(m.r1.rig'.TABLE')'.ALIAS') == pa1 then
a1 = mGet(mGet(m.r1.lef'.TABLE')'.ALIAS')
else
call err 'relationship' tb1 'not connecting' pa1
if wordPos(a1, pa1 paR) > 0 then
iterate
call tkrPat2 m, tt, a1 pa1 paR
end
return
endProcedure tkrPat3
wordsIsSub: procedure expose m.
parse arg long, short
sW = words(short)
if sW = 0 then
return 1
lW = words(long)
if sW > lW then
return 0
else if sW = lW then
return space(long, 1) == space(short, 1)
if word(long, lW) \== word(short, sW) then
return 0
lX = 1
do sX=2 to sW-1
lx = wordPos(word(short, sX), long, lX+1)
if lX <= 1 | sW-sX > lW-lX then
return 0
end
return 1
endProcedure wordsIsSub
tkrType: procedure expose m.
parse arg m, col
if m == '' then
m = tkr
upper col
if wordPos(col, m.m.numeric) > 0 then
return 'n'
cNQ = substr(col, 1+pos('.', col))
if wordPos(cNQ, m.m.numeric) > 0 then
return 'n'
if wordPos(cNQ, m.m.hex) > 0 then
return 'x'
return 'c'
endProcedure tkrType
tkrValue: procedure expose m.
parse arg m, al, col, val
if m == '' then
m = tkr
if pos('.', col) < 1 then
if al == '' then
call err 'no alias'
else
col = al'.'col
tt = tkrType(m, col)
if tt == 'c' then
return quote(val, "'")
if tt == 'n' then
if datatype(val, 'n') then
return val
else
call err 'not numeric' val 'for col' col
if tt == 'x' then
if verify(val, '0123456789abcdefABCDEF', 'n') < 1 then
return "x'"val"'"
else
call err 'not a hex value' val 'for col' col
call err 'unsupport tkrType' tt
endProcedure tkrValue
tkrPred: procedure expose m.
parse arg m, al, col, va
if col == '-' | col == '' | va == '*' then
return ''
if m == '' then
m = tkr
if pos('.', col) < 1 then
if al == '' then
call err 'no alias'
else
col = al'.'col
va = tkrValue(m, , col, va)
if abbrev(va, "'") then
if verify(va, '%_', 'm') > 0 then
return 'and' col 'like' va
return 'and' col '=' va
endProcedure tkrPred
tkrIniDb2Cat: procedure expose m.
parse arg m
if m == '' then
m = tkr
if m.m.ini == 1 then
return
m.m.ini = 1
y = 'sysIbm.sys'
mC = tkrIniT(m, 'c' y'Columns', 'tbCreator tbName name',
, 'tbCreator tbName colNo')
mCo =tkrIniT(m, 'co' y'Copy',
, 'dbName tsName dsNum instance timestamp' ,
, 'co.dbName, co.tsName, co.timestamp desc')
call tkrIniK m, mCo, '1plus', 'dbName tsName dsNum instance' ,
'timestamp icType start_Rba dsName'
mDb =tkrIniT(m, 'db' y'Database', 'name')
call tkrIniK m, mDb, 'id iu', 'DBID'
mI = tkrIniT(m, 'i' y'Indexes', 'creator name' ,
, 'tbCreator, tbName, creator, name')
call tkrIniK m, mI, 't i', 'tbCreator tbName'
call tkrIniK m, mI, 'db1 iu', 'dbName indexSpace'
call tkrIniT m, 'ik' ,
'sysibm.sysIndexes ik' ,
'left join sysibm.sysKeys ikK' ,
'on ikK.ixCreator = ik.creator' ,
'and ikK.ixName=ik.name' ,
'left join sysibm.sysColumns ikC' ,
'on ikC.tbCreator = ik.tbCreator' ,
'and ikC.tbName = ik.tbName' ,
'and ikC.colNo = ikK.colNo' ,
, 'creator name ikK.colSeq' ,
, 'ik.tbCreator, ik.tbName, ik.creator' ,
|| ', ik.name, ikK.colSeq', , 'sqlCatIxKeys'
call tkrIniT m, 'ip' y'indexPart', 'ixCreator ixName partition'
mPk =tkrIniT(m, 'pk' y'Package', 'location collid name conToken' ,
, 'location, collid, name, pcTimestamp desc')
call tkrIniK m, mPk, '1plus',
, 'location collid name contoken version type'
mPkd=tkrIniT(m, 'pkd' y'PackDep',
, 'dLocation dCollid dName dConToken')
call tkrIniK m, mPkd, 'b', 'bQualifier bName'
call tkrIniT m, 'ri' y'IndexSpaceStats' ,
, 'creator name partition' ,
, 'creator name instance partition' ,
, , 'sqlCatIxStats'
/* 'dbid isobid partition instance' , */
mRT= tkrIniT(m, 'rt' y'TableSpaceStats' ,
, 'dbId psId partition instance',
, 'dbName name instance partition' ,
, , 'sqlCatTSStats')
call tkrIniK m, mRT, '1plus', 'dbId psId partition instance' ,
'dbName name'
call tkrIniK m, mRT, 'nm u', 'dbName name partition instance'
mT = tkrIniT(m, 't' y'Tables', 'creator name',
, , "t.type not in ('A', 'V')", 'sqlCatTables')
call tkrIniK m, mT, 'db i', 'dbName tsName'
call tkrIniK m, mT, '1plus', 'creator name dbName tsName'
mTg =tkrIniT(m, 'tg' y'Triggers', 'schema name seqno',
, 'tbOwner, tbName, schema, name')
call tkrIniK m, mTg, 'tb', 'tbOwner tbName'
call tkrIniT m, 'tp' y'TablePart', 'dbName tsName partition'
mTs =tkrIniT(m, 'ts' y'TableSpace', 'dbName name')
call tkrIniK m, mTs, 'id', 'dbId psId'
call tkrIniT m, 'v' y'Tables', 'creator name', , "v.type = 'V'"
mVD =tkrIniT(m, 'vd' y'ViewDep', 'dCreator dName')
call tkrIniK m, mVd, 'b', 'bCreator bName'
call trkIniR m, 'c', 'v t'
call trkIniR m, 'co', 'ts tp rt.nm'
p0sql = '(SelecT smallInt(0) p FroM sysibm.sysDummy1' ,
'union all select smallInt(32767)p FroM sysibm.sysDummy1)p0'
r1 = tkrRel(m, 'co-tp')
m.r1.rig.sql1 = '(co.dbName, co.tsName, co.dsNum)' ,
'in (select tp.dbName, tp.tsName' ,
', min(tp.partition, p0.p)' ,
'from sysibm.sysTablePart tp,' p0Sql 'where'
r2 = tkrRel(m, 'co-rt')
m.r2.rig.sql1 = '(co.dbName, co.tsName, co.dsNum, co.instance)' ,
'in (select rt.dbName, rt.name' ,
', min(rt.partition, p0.p), rt.instance' ,
'from sysibm.sysTablespaceStats rt,' p0Sql 'where'
call trkIniR m, 'db', 'ts t.db tp rt co i.db1'
call trkIniR m, 'i.t', 't'
call trkIniR m, 'i', 'ik ip'
call trkIniR m, 'pk', 'pkd'
call trkIniR m, 'pkd.b', 'i', "pkd.bType in ('I')"
call trkIniR m, 'pkd.b', 't v',
, "pkd.bType in ('A', 'G', 'M', 'S', 'T', 'V')"
call trkIniR m, 'pkd.b', 'ts', "pkd.bType in ('P', 'R')"
call trkIniR m, 'ri', 'i ip'
call trkIniR m, 'rt', 'ts.id'
call trkIniR m, 'rt.nm', 'tp'
call trkIniR m, 'tg.tb', 'v t'
call trkIniR m, 'ts', 't.db tp'
call trkIniR m, 'vd.b', 't', "vd.bType in ('G', 'M', 'T', 'V')"
call trkIniR m, 'vd', 'v', "vd.dType in ('V', 'M')"
m.m.pathBad = '1c 1co 1db 1tg pkd|pk vd|v pkd-i-t vkd-i-t'
m.m.numeric = 'PARTITION DBID INSTANCE PSID ISOBID DSNUM'
m.m.hex = 'CONTOKEN'
return
endProcedure tkrIniDb2Cat
tkrIniT: procedure expose m.
parse arg m, ty tb, cols, ord, wh, eFun
mt = m'.t.'ty
if symbol('m.mt') == 'VAR' then
call err 'duplicate table' ty tb ord 'old' mt'->'m.mt
m.mt = 'table'
m.mt.alias = ty
m.mt.table = if(words(tb) == 1, tb ty, tb)
m.mt.uKeys = ''
m.mt.oKeys = ''
m.mt.rels = ''
m.mt.pKey = tkrIniK(m, mt, '1 iu', cols)
if ord == '' then
m.mt.order = mCat(m.mt.pKey, '%qn, %s')
else if pos(',', ord) < 1 & pos('.', ord) < 1 then
m.mt.order = ty'.'repAll(space(ord, 1), ' ', ',' ty'.')
else
m.mt.order = ord
m.mt.cond = wh || copies(' and', wh \== '')
m.mt.editFun = eFun
return mt
endProcedure tkrIniT
tkrIniK: procedure expose m.
parse arg m, tb, nm oo, cols
if pos(':', cols) > 0 | pos(',', cols) > 0 then
call err 'deimplemented iiKey:' cols
mk = m'.k.'m.tb.alias'.'nm
if symbol('m.mk') == 'VAR' then
call err 'duplicate key' tb nm 'old' mk'->'m.mk
m.mk = 'key'
al = m.tb.alias
m.mk.table = tb
m.mk.name = m.tb.alias'.'nm
m.mk.opt = oo
m.mk.0 = words(cols)
do cx=1 to m.mk.0
c1 = word(cols, cx)
dx = pos('.', c1)
if dx < 1 then do
m.mk.cx = al'.'c1
m.mk.cx.col = translate(c1)
end
else do
m.mk.cx = c1
m.mk.cx.col = translate(substr(c1, dx+1))
end
end
m.mk.colList = mCat(mk, '%qn, %s')
if pos('i', oo) > 0 then
m.tb.uKeys = strip(m.tb.uKeys mk)
else
m.tb.oKeys = strip(m.tb.oKeys mk)
return mk
endProcedure tkrIniK
trkIniR: procedure expose m.
parse arg m, le, aRi, leCo, riCo
le = tkrKey(m, le)
lTb = m.le.table
do rx=1 to words(aRi)
ri = tkrKey(m, word(aRi, rx))
rTb = m.ri.table
ky = m'.r.'m.lTb.alias'-'m.rTb.alias
if symbol('m.ky') == 'VAR' then
call err 'duplicate relationShip' ky 'old' m.ky
m.ky = 'relationShip'
m.ky.lef = le
m.ky.lef.sql1 = ''
m.ky.lef.cond = leCo || copies(' and', leCo \== '')
m.lTb.rels = m.lTb.rels ky
m.ky.rig = ri
m.ky.rig.cond = riCo || copies(' and', riCo \== '')
m.ky.rig.sql1 = ''
m.rTb.rels = m.rTb.rels ky
lr = m'.T2T.'m.lTb.alias'.'m.rTb.alias
if symbol('m.lr') == 'VAR' then
call err 'duplicate relationShip' ky 'old' m.lr
rl = m'.T2T.'m.rTb.alias'.'m.lTb.alias
if symbol('m.rl') == 'VAR' then
call err 'duplicate inverse relationShip' ky 'old' m.rl
m.lr = ky
end
return ky
endProcedure trkIniR
tkrKey: procedure expose m.
parse arg m, key
if m == '' then
m = tkr
dx = pos('.', key)
if dx < 1 then do
mt = m'.t.'key
if m.mt == 'table' then
return m.mt.pKey
ee = 'not a table' key':' mt'->'m.mt
end
dx = pos('.', key, dx+1)
if dx < 1 then do
mk = m'.k.'key
if m.mk == 'key' then
return mk
ee = 'not a key' key', mk' mk'->'m.mk
end
if m.key == 'key' then
return key
ee = 'not a key' key'-->'m.key
if arg() >= 3 then
return arg(3)
call err ee
endProcedure tkrKey
tkrRel: procedure expose m.
parse arg m, key
if m == '' then
m = tkr
if m.key == 'relationShip' then
return key
mr = m'.r.'key
if m.mr == 'relationShip' then
return mr
call err 'not a relationship' key'-->'m.key',' m.mr
endProcedure tkrRel
return mr
getInfo: procedure expose m.
parse arg m
if 0 then do /* debug variable in pool ???? */
ll = 'subsys objtype qual objname funcname' ,
'entity entvers' ,
'table relation entqual user user2 rcqmcase',
'hEntity hUser hTable'
do lx=1 to words(ll)
vv = word(ll, lx)
x = value(vv, 'valueBefore')
call adrIsp 'vget ('vv') asis', '*'
say '?? vget rc='rc',' vv'='value(vv)
end
end
call adrIsp 'vget (subsys rcqmcase funcName' ,
' htable relation hEntity' ,
'hUser entQual user2 entVers entVers2' ,
'objtype qual objname) shared'
m.m.dbSy = subsys
m.m.qmCase = rcQmCase
m.m.func = funcName
m.m.hTb = hTable
m.m.hOp = relation
m.m.hNm = hEntity
m.m.hCr = hUser
m.m.hQu = entQual
m.m.hGr = user2
m.m.hPkVers = entVers
m.m.hRoVers = entVers2
m.m.lTb = objType
m.m.lqu = qual
m.m.lNm = objName
call anaScreen m
m.m.lTb = translate(m.m.lTb, m.mAlfLc, m.malfUc)
m.m.hTb = translate(m.m.hTb, m.mAlfLc, m.malfUc)
m.m.hOp = translate(m.m.hOp, m.mAlfLc, m.malfUc)
if 0 then do
ww = screen curPos curLine curWord lineF lines ,
dbSy lTb lQu lNm func hTb hOp wh hNm hCr hQu hGr
do wx=1 to words(ww)
w1 = word(ww, wx)
if wx <= 11 then
say left(w1, 10) m.m.w1'.'
else
say left(w1, 10) m.m.w1.lb'='m.m.w1'.'
end
end
return
endProcedure getInfo
anaScreen: procedure expose m.
parse arg m
call adrIsp 'VGET (' zScreen zScreenW zScreenC zScreenI ')'
zScreenW = 80 /* breite Screens sind doch nicht so breit????*/
m.m.screen = zScreen
lx = zScreenC - ((zScreenC)//zScreenW) + 1
m.m.curPos = zScreenC || 'L' || ((zScreenC)%zScreenW+1) ,
|| 'C' || ((zScreenC)//zScreenW+1)
m.m.curLine = substr(zScreenI, lx, zScreenW)
sep = ' '
do wx=zScreenC+1 to lx+zScreenW-2 ,
while pos(substr(zScreenI, wx, 1), sep) > 0
end
do wx=wx by -1 to lx+1 ,
while pos(substr(zScreenI, wx-1, 1), sep) = 0
end
do wy=wx to lx+zScreenW-2 ,
while pos(substr(zScreenI, wy, 1), sep) = 0
end
m.m.curWord = substr(zScreenI, wx, wy-wx)
call anaHLine m, substr(zScreenI, 1+3*zScreenW, zScreenW),
, hTb, hOp, wh
call anaHLine m, substr(zScreenI, 1+4*zScreenW, zScreenW), hNm, hCr
call anaHLine m, substr(zScreenI, 1+5*zScreenW, zScreenW), hQu, hGr
l = substr(zScreenI, 6*zScreenW+1, zScreenW)
scx = 6
if word(l, 1) == 'Version' then
l = substr(zScreenI, ass('scx', 7)*zScreenW+1, zScreenW)
lx = lastPos('LINE', l)
isFrame = lx < 1
if isFrame then
lx = lastPos('FRAME', l)
if lx < 1 then
call err 'bad line of clause:' l
l = substr(l, lx, zScreenW-lx-1)
if word(l, 3) \== 'OF' then
call err 'bad line of clause:' l
m.m.lineF = word(l, 2)
m.m.lines = word(l, 4)
scx = scx + 1
tbOp = translate(m.m.hTb':'m.m.hOp, m.mAlfLc, m.mAlfUc)
if tbOp = 't:c' | tbOp = 't:tg' | tbOp = 'v:c' then do
m.m.lPaNm = m.m.hNm
return
end
else if tbOp = 'i:c' then do
m.m.lPaNm = m.m.hNm
m.m.lQu = m.m.hCr
return
end
else if tbOp = 'ts:pl' then
jj = 'tp PART'
else if tbOp = 'ts:d' then
jj = 'tp PART'
else if tbOp = 'i:pl' then
jj = 'ip PART'
else if tbOp = 'i:d' then
jj = 'ip PART'
else if translate(m.m.lTb) == 'PK' then
jj = 'pk COLLECTION CONTOKEN'
else
return
m.m.lTb = word(jj, 1)
if \ isFrame then do
tiLi = translate(substr(zScreenI, 1+scX*zScreenW, zScreenW),
, ' ', '00'x)
if word(tiLi, 1) <> 'CMD' then
call err 'CMD not found on line' scx':'tiLi
do sx = 1+(scX+1) * zScreenW by zScreenW to length(zScreenI)
if substr(zScreenI, sx, 8) \= '' then
leave
end
cuLi = translate(substr(zScreenI, sx, zScreenW), ' ', '00'x)
cmd = translate(strip(substr(cuLi, 2, 8)))
if cmd \= m.m.func then
call err 'fun' m.m.func '<> cmd' cmd (sx%zScreenW)':' cuLi
if m.m.lTb = 'pk' then do
m.m.collection = lineFldOA('COLLEC', tiLi, cuLi)
m.m.contoken = lineFldOA('CONTOK', tiLi, cuLi)
m.m.version = lineFldOA('VERSI', tiLi, cuLi)
if length(m.m.version) > 18 then
m.m.version = m.m.version'%'
end
else do
do jx = 2 to words(jj)
f1 = word(jj, jx)
m.m.f1 = lineFld(f1, tiLi, cuLi)
end
end
end
else do
do sx = 1+(scX) * zScreenW by zScreenW to length(zScreenI)
if substr(zScreenI, sx, 6) == ' CMD: ' then
leave
end
cuLi = translate(substr(zScreenI, sx, zScreenW), ' ', '00'x)
if word(cuLi, 1) \== 'CMD:' then
call err ' CMD: not found'
cmd = translate(word(cuLi, 2))
if cmd \= m.m.func then
call err 'fun' m.m.func '<> cmd' cmd (sx%zScreenW)':' cuLi
needed = left(' 2345678', words(jj))
do sx = sx + zScreenW by zScreenW to length(zScreenI) ,
while needed <> ''
do jx = 2 to words(jj)
f1 = word(jj, jx)
if abbrev(strip(substr(zScreenI, sx+1, 12)), f1) then do
cuLi = substr(zScreenI, sx, zScreenW)
cx = pos(':', cuLi)
if cx < 10 then
call err 'no or bad : in' cuLi
if substr(needed, jx, 1) == ' ' then
call err 'duplicate' f1
else
needed = overlay(' ', needed, jx)
m.m.f1 = word(substr(cuLi, cx+1, zScreenW), 1)
end
end
end
if needed <> '' then
call err 'still fields needed' needed 'jj:' jj
end
return
endProcedure anaScreen
lineFld: procedure expose m.
parse arg f1, tiLi, cuLi
wx = wordPos(f1, tiLi)
if wx < 1 then
call err f1 'not in title' tiLi
bx = wordIndex(tiLi, wx)
ex = wordIndex(tiLi, wx+1)
if ex < 1 then
return strip(substr(cuLi, bx))
else
return strip(substr(cuLi, bx, ex-bx))
endProcedure lineFld
lineFldOA: procedure expose m.
parse arg abb, tiLi, cuLi
cx = pos(' 'abb, tiLi)
if cx < 1 then
return '*'
return lineFld(word(substr(tiLi, cx+1), 1), tiLi, cuLi)
endProcedure lineFldOA
anaHLine: procedure expose m.
parse arg m, li, f1, f2, f3
if substr(li, 14, 4) \== '===>' then
call err 'bad headerline1' li
m.m.f1.lb = strip(substr(li, 2, 12))
if m.m.f1 <> strip(substr(li, 19, 20)) then
call err f1 m.m.f1.lb':' m.m.f1 '<>' strip(substr(li, 19, 20))
if substr(li, 51, 4) \== '===>' then
call err 'bad headerline2' li
m.m.f2.lb = strip(substr(li, 43, 7))
if f3 == '' then
vv = strip(substr(li, 56, 20))
else
vv = strip(substr(li, 56, 2))
if m.m.f2 <> vv then
call err f2 m.m.f2.lb':' m.m.f2 '<>' vv
if f3 \== '' then do
if substr(li, 67, 2) \== '=>' then
call err 'bad headerline3' li
m.m.f3.lb = strip(substr(li, 61, 6))
if f3 = 'WH' then
m.m.f3 = strip(substr(li, 70, 10))
else if m.m.f3 <> strip(substr(li, 70, 10)) then
call err f3 m.m.f3.lb':' m.m.f3 '<>' strip(substr(li,70,10))
end
/* if f3 == '' then
say f1 m.m.f1.lb'='m.m.f1',' f2 m.m.f2.lb'='m.m.f2'|'
else
say f1 m.m.f1.lb'='m.m.f1',' f2 m.m.f2.lb'='m.m.f2',' ,
f3 m.m.f3.lb'='m.m.f3'|'
*/ return
endProcedure anaHLine
anaEdit: procedure expose m.
parse arg m, all
m.m.rz = sysvar(sysnode)
m.m.user = userid()
call adrIsp 'VGET (zScreen )'
m.m.screen = zScreen
call adrEdit "(cL cC) = cursor"
m.m.cursor = cL
call adrEdit "(lxLa) = lineNum .zl"
sq = ''
m.m.sql.0 = 0
m.m.path = ''
m.m.dbSy = ''
do lx=lxLa by -1 to 1
call adrEdit "(li) = line" lx
li = strip(li)
if word(li, 1) = 'order' then
m.m.sqlOrd = li
else if word(li, 1) = 'path:' then
m.m.path = subWord(li, 2)
else if word(li, 1) = 'dbSys:' then do
m.m.dbSy = subWord(li, 2)
leave
end
else do
sq = li sq
if word(li, 1) = 'from' then do
call mAdd m'.SQL', strip(sq)
sq = ''
end
end
end
m.m.sqlSta = sq
if lx < 1 | m.m.path == '' | m.m.dbSy == '' then
call err 'path:' m.m.path 'or dbSys' m.m.dbSy 'not found'
if m.m.sql.0 <> words(m.m.path) then
call err m.m.sql.0 'from clauses, but path' m.m.path
tb1 = tkrTable(, word(m.m.path, 1), ,'')
if '' == tb1 then
call err 'path1 not table' m.m.path
if \ all then
call anaList m, tb1, all
pf3 = 'PF3 = zurück zu rcQuery'
laMa = 'cx'
do lx=1 to min(lxLa, 3)
call adrEdit '(li) = line' lx
if word(li, 1) \== '*' | pos('help', li) < 1 ,
| wordPos('PF3', li) < 1 then
iterate
li = strip(substr(strip(li), 2))
laMa = word(li, 1)
if pos('?', laMa) > 0 then
laMa = left(laMa, pos('?', laMa)-1)
cx = pos('PF3', li)
cy = pos(',', li, cx)
if cy > cx then
pf3 = substr(li, cy, cy-cx)
else
pf3 = strip(substr(li, cx))
leave
end
if \ abbrev(translate(laMa), 'R') then
laMa = laMa word(m.m.path, 1)
m.m.help = ' *' m.cmd '? = help,' ,
'UNDO = zurück zu' laMa',' pf3
return
endProcedure anaEdit
uxEditMacro: procedure expose m.
parse arg m, parms, all
call anaEdit m, 1
l = m'.LST'
m.l.0 = 0
call anaList m, tkrTable(, word(m.m.path, 1)), all
b = jBuf()
call pipe '+F', b
call genJob m, l, t1, parms
call pipe '-'
call adrEdit 'delete .zf .zl'
call adrEdit 'reset'
do bx=1 to m.b.buf.0
li = m.b.buf.bx
call adrEdit 'line_after .zl = (li)'
end
hh = m.m.help
call adrEdit 'line_before .zf = infoLine (hh)'
call adrEdit 'locate 1'
call adrEdit 'up max'
return 1
endProcedure uxEditMacro
anaList: procedure expose m.
parse arg m, kq, all
l = m'.LST'
tb = tkrTable(, kq, , '')
if tb == '' then do
ky = tkrKey(, kq)
end
else do
al = m.tb.alias
ky = tkrKey( , al'.1plus', '')
if ky == '' then do
ky = tkrKey( , al'.db', '')
if ky == '' then
ky = m.tb.pKey
end
end
ky = tkrKey(,ky) /* check its a valid ky */
tb = m.ky.table
m.l.key = ky
m.l.alias = m.tb.alias
if 0 <> adrEdit('find first - 1 40', 0 4) then
call err 'could not find title: find first - 1 40'
call adrEdit '(ex cx) = cursor'
call adrEdit '(ti) = line' ex
m.l.0 = 0
if abbrev(ti, '--- row 1 ---') then do
if all then do
call adrEdit 'cursor = 1 0'
do rx=1 while adrEdit("find '--- row ' 1", 0 4) = 0
call adrEdit "(ex cx) = cursor"
call adrEdit "(li) = line .zCsr"
call anaListRow l, ky, ex
end
end
else
call anaListRow l, ky, ex
end
else do
t1 = strip(ti, 't')
call adrEdit "find last '"left(t1, 40)"' 1"
call adrEdit "(ty cy) = cursor"
ey = ty
if ey <= ex then
call err 'no trailer line found:' left(t1, 40)
if \ all then do
if m.m.cursor <= ex | m.m.cursor >= ey then
call err 'i}cursor line' m.m.cursor ,
'not between header' ex 'and trailer' ey 'lines'
ex = m.m.cursor - 1
ey = m.m.cursor + 1
end
cx = 0
do ly=ty+1
call adrEdit '(li) = line' ly
if left(li, 70) = '' | 'DBSYS:' == translate(word(li, 1)) then
leave
cx = cx + 1
m.m.cyc.cx = translate(strip(li, 't'))
end
m.m.cyc.0 = cx
if cx < 1 then
call err 'no cycle trailer lines found'
do tx = 1 to m.ky.0
co = m.ky.tx.col
f.tx.fld = tx
do cy=1 to cx
wx = wordPos(co, m.m.cyc.cy)
if wx > 0 then
leave
end
if wx < 1 then
call err 'column' co 'not found in cycle trailer lines'
wx = wordIndex(m.m.cyc.cy, wx)
cz = 1 + (cy // cx)
lz = substr(m.m.cyc.cz, wx)
wy = wordIndex(lz, 2 - abbrev(lz, ' ')) - 1
if wy < 1 then
wy = 1 + length(t1) - wx
f.tx.pos = wx
f.tx.len = wy
end
lx = 0
do ex=ex+1 to ey-1
call adrEdit '(li) = line' ex
li = strip(li, 't')
lx = lx + 1
do tx = 1 to m.ky.0
if f.tx.pos == '' then
m.l.lx.tx = ''
else
m.l.lx.tx = strip(substr(li, f.tx.pos, f.tx.len))
end
m.l.lx.99 = ''
end
m.l.0 = lx
end
return
endProcedure anaList
anaListRow: procedure expose m.
parse arg l, ky, ex
lx = m.l.0 + 1
needed = left('1234565789', m.ky.0)
do ex=ex+1 until needed = ''
call adrEdit "(li) = line" ex
li = strip(li, 't')
if abbrev(li, '--- row ') | abbrev(li, '--- end of ') then
leave
liCo = translate(word(li, 1 + (words(left(li, 30)) > 1)))
do tx=1 to m.ky.0
if liCo = m.ky.tx.col then do
needed = overlay(' ', needed, tx)
if datatype(substr(li, 31, 12), 'n') ,
& datatype(substr(li, 43), 'n') then
m.l.lx.tx = strip(substr(li, 43))
else
m.l.lx.tx = substr(li, 31)
end
end
end
if needed <> '' then
call err 'needed' needed "<> '', tb" tb 'line' ex
m.l.lx.99 = ''
m.l.0 = lx
return
endProcedure anaListRow
listDef: procedure expose m.
parse arg l, list
if m.l.lp.alias == '' then
call err 'listDef with empty lp.alias, type='m.l.type
tParts = 0 < wordPos('tp', list) + wordPos('ip', list)
tObjs = 0 < wordPos('ts', list) + wordPos('i', list)
if m.l.lp.alias = 'tp' then do
if tParts then do
call listDef1 l'.LP', tp, 'TABLESPACE', 'PARTLEVEL'
if wordPos('ip', list) > 0 then
call out ' LISTDEF IPLIST INCLUDE INDEXSPACES' ,
'LIST TPLIST'
end
if tObjs then do
call listDef1 l'.LO', ts, 'TABLESPACE'
if wordPos('i', list) > 0 then
call out ' LISTDEF ILIST INCLUDE INDEXSPACES' ,
'LIST TPLIST'
end
end
else if m.l.lp.alias == 'ip' then do
if tParts then do
call listDef1 l'.LP', ip, 'INDEX', 'PARTLEVEL'
if wordPos('tp', list) > 0 then
call out ' LISTDEF TPLIST INCLUDE TABLESPACES' ,
'LIST IPLIST'
end
if tObjs then do
call listDef1 l'.LO', i, 'INDEX'
if wordPos('ts', list) > 0 then
call out ' LISTDEF TSLIST INCLUDE TABLESPACES' ,
'LIST ILIST'
end
end
else
call err 'listDef no objs found'
return
endProcedure listDef
listdef1: procedure expose m.
parse arg l, ld, sp, pa
call out ' LISTDEF' ld'LIST'
t2 = ''
do lx=1 to m.l.0
if pa \== '' then
t2 = 'PARTLEVEL' m.l.lx.3
call out ' INCLUDE' sp m.l.lx.1'.'m.l.lx.2 t2
end
return
endProcedure listDef1
listExp: procedure expose m.
parse arg l
m.l.lp.alias = ''
m.l.lp.0 = 0
m.l.lo.0 = 0
tF = m.l.alias
if wordPos(tF, 'co tp') > 0 then
ii = 'tp 1 2 3'
else if tF == 'rt' then
ii = 'tp 5 6 3'
else if tF == 'ts' then
ii = 'tp 1 2 99'
else if tF == 't' then
ii = 'tp 3 4 99'
else if wordPos(tF, 'is ip ri') > 0 then
ii = 'ip 1 2 3'
else if wordPos(tF, 'i ik') > 0 then
ii = 'ip 1 2 99'
else
return l
parse var ii m.l.lp.alias f1 f2 f3
xp = 0
xo = 0
drop done.
do lx=1 to m.l.0
v1 = m.l.lx.f1
v2 = m.l.lx.f2
v3 = m.l.lx.f3
if done.v1.v2.v3 == 1 then
iterate
done.v1.v2.v3 = 1
xp = xp + 1
m.l.lp.xp.1 = v1
m.l.lp.xp.2 = v2
m.l.lp.xp.3 = v3
if done.v1.v2 == 1 then
iterate
done.v1.v2 = 1
xo = xo + 1
m.l.lo.xo.1 = v1
m.l.lo.xo.2 = v2
end
m.l.lp.0 = xp
m.l.lo.0 = xo
return l
endProcedure listExp
listSelect: procedure expose m.
parse arg m, l, o, ky, pa
tb = m.ky.table
al = m.tb.alias
if m.l.alias == al then do
do kx=1 to m.ky.0
c1 = m.ky.kx.col
do ox=1 to m.l.0
m.o.ox.c1 = m.l.ox.kx
end
end
m.o.0 = m.l.0
return o
end
sq = 'select' m.ky.colList tkrTable(, tb, 'f') ,
tkrWhere(, al pa m.l.alias':' ,
list2where(l, tkrKey(, m.l.alias'.1')))
call sqlconnect m.m.dbSy
call sql2St sq, o
call sqlDisconnect
return o
endProcedure listSelect
list2where: procedure expose m.
parse arg l, aKey
tb = m.aKey.table
al = m.tb.alias
drop done.
done = ''
do lx=1 to m.l.0
k2 = ''
do tx=1 to m.aKey.0-1
k2 = k2'.'m.l.lx.tx
end
k2 = substr(k2, 2)
ty = m.aKey.0
ky = k2'.'m.l.lx.ty
vy = tkrValue( , , m.aKey.ty, m.l.lx.ty)
if done.ky == 1 then
iterate
done.ky = 1
dx = wordPos(k2, done)
if dx > 0 then do
done.dx = done.dx"," vy
end
else do
done = done k2
dx = wordPos(k2, done)
s1 = ''
do tx=1 to m.aKey.0-1
s1 = s1 tkrPred( , , m.aKey.tx, m.l.lx.tx)
end
done.dx = substr(s1, 6) 'and' m.aKey.ty "in ("vy
end
end
wh = ''
do dx = 1 to words(done)
wh = wh 'or ('done.dx'))'
end
return '('substr(wh, 5)')'
endProcedure list2where
genJob: procedure expose m.
parse arg m, l, ty, parms
m.m.rand2 = right('0' || (1+right(time(), 1)), 2)
m.m.jn = m.m.user || substr(m.mAlfUC, m.m.rand2+10, 1)
call out "//"m.m.jn "JOB (CP00,KE50),'DB2" parms"',"
call out "// MSGCLASS=T,TIME=1440,SCHENV="m.m.dbSy","
call out "// NOTIFY=&SYSUID,REGION=0M"
call out "//*MAIN CLASS=LOG"
call out "//*"
call out "//* ux utility generator" parms
call out "//* who" m.m.rz m.m.dbSy m.m.user m.m.screen
call out "//* " translate(date('E'), '.', '/') time() ,
m.m.jn m.m.rand2
call out "//*"
inStep = ''
m.m.stepNo = 0
pa2 = ''
uts = 'co=COPY re=REORG rb=REBIND rb=RBIND rc=RECOVER rc=RCOVER' ,
'ru=RUNSTATS bu=REBUILD bu=BUILD' ,
'ld=LOADDUMMY ld=LOADUMMY ld=LDUMMY ld=DUMMY'
do ux=1 to words(parms)
cx = pos('='translate(word(parms, ux)), uts)
if cx <= 2 then
call err 'bad utility parm' word(parms, ux) 'in' parms, 'S'
pa2 = pa2 substr(uts, cx-2, 2)
end
lst = ''
if wordPos('co', pa2) > 0 | wordPos('rc', pa2) > 0 ,
| wordPos('re', pa2) > 0 then
lst = lst 'tp'
if wordPos('ru', pa2) > 0 then
lst = lst 'ts'
if wordPos('bu', pa2) > 0 then
lst = lst 'ip'
call listExp l
do ux=1 to words(pa2)
u1 = word(pa2, ux)
if wordPos(u1, 'bu co ld re rc ru') > 0 then do
if inStep \== 'ut' then do
inStep = 'ut'
call genUtil m
if lst \== '' then
call listdef l, lst
end
if u1 == 'bu' then
call genBuild m
else if u1 == 'co' then
call genCopy m
else if u1 == 'ld' then
call genLoadDummy m, l'.LP',
, listSelect(m, l, tbPa, tkrKey(, 't.1plus'))
else if u1 == 'rc' then
call genRecover m, l
else if u1 == 're' then
call genReorg m
else if u1 == 'ru' then
call genRunstats m
else
call err 'implement util' u1
end
else if u1 == 'rb' then do
pkl = m'.pkl'
call listSelect m, l, pkl, tkrKey(, 'pk.1plus'), 'ts'
call genDsn m
inStep = 'dsn'
do px=1 to m.pkl.0
if m.pkl.px.type = '' then
call out 'rebind package ('strip(m.pkl.px.collid) ,
|| '.'strip(m.pkl.px.name) ,
|| '.('strip(m.pkl.px.version)'))'
else if m.pkl.px.type = 'T' then
call out 'rebind trigger package(' ,
|| strip(m.pkl.px.collid)'.' ,
|| strip(m.pkl.px.name)')'
else
call err 'implement rebind of pk type' m.pkl.px.type
end
end
end
return
endProcedure genJob
genBuild: procedure expose m.
parse arg m
call out left('---- rebuild index ', 72, '-')
call out " REBUILD INDEX LIST IPLIST"
call out " SORTDEVT SYSDA"
call out " STATISTICS UPDATE ALL"
return
endProcedure genBuild
genCopy: procedure expose m.
parse arg m
call out left('---- copy ', 72, '-')
call out " COPY LIST TPLIST COPYDDN(TCOPYD)"
call out " FULL YES"
call out " PARALLEL"
call out " SHRLEVEL CHANGE"
return
endProcedure genCopy
genLoadDummy: procedure expose m.
parse arg m, lp, l
if m.lp.alias \== 'tp' then
call err 'loadDummy for' m.lp.alias
ts = ''
drop ts. tb.
do px=1 to m.lp.0
ky = strip(m.lp.px.1)'.'strip(m.lp.px.2)
if symbol('ts.ky') \== 'VAR' then do
ts.ky = ''
tb.ky = ''
ts = ts ky
end
if m.lp.px.3 <> '' then
ts.ky = overlay('p', ts.ky, m.lp.px.3)
kt =
end
do lx=1 to m.l.0
ky = strip(m.l.lx.dbName)'.'strip(m.l.lx.tsName)
kt = strip(m.l.lx.creator)'.'strip(m.l.lx.name)
if symbol('ts.ky') \== 'VAR' then
call err 'ts' ky 'for t' kt 'not in part list'
if wordPos(kt, tb.ky) < 1 then
tb.ky = tb.ky kt
end
rSp = " RESUME NO REPLACE COPYDDN(TCOPYS) INDDN INDUMMY"
do tx=1 to words(ts)
ky = word(ts, tx)
call out left('---- load dummy' ky, 72, '-')
if symbol('tb.ky') \== 'VAR' then
call err 'no table in ts' ky
call out " LOAD DATA LOG NO"
call out " WORKDDN(TSYUTS, TSOUTS) MAPDDN TMAPD"
call out " STATISTICS INDEX(ALL) REPORT NO UPDATE ALL"
ps = ts.ky
if ps = '' then do
call out rSp
do qx=1 to words(tb.ky)
call out " INTO TABLE" word(tb.ky, qx)
end
end
else do
t1 = strip(tb.ky)
if words(t1) <> 1 then
call err 'multiple tables' t1 'in partitioned TS'
do while ps <> ''
px = pos('p', ps)
ps = overlay(' ', ps, px)
call out " INTO TABLE" t1 'PART' px
call out rSp
end
end
end
return
endProcedure genLoadDummy
genRecover: procedure expose m.
parse arg m, l
minRba = ''
maxRba = ''
dsn = ''
cDsn = 0
rDsn = '?.? DSNUM ?'
if m.l.alias == 'co' then do
ky = tkrKey(, 'co.1plus')
fty = wordPos('co.icType,', m.ky.colList',')
fRba = wordPos('co.start_Rba,', m.ky.colList',')
fDsn = wordPos('co.dsName,', m.ky.colList',')
minRba = 'FFFFFFFFFF'
maxRba = '00'
do lx=1 to m.l.0
if pos(left(m.l.lx.fTy, 1), 'FI') > 0 then do
cDsn = cDsn + 1
dsn = m.l.lx.fDsn
rDsn = m.l.lx.1'.'m.l.lx.2
if m.l.lx.3 <> '' then
rDsn = rDsn 'DSNUM' m.l.lx.3
end
if x2c(minRba) >> x2c(m.l.lx.fRba) then
minRba = m.l.lx.fRba
if x2c(maxRba) << x2c(m.l.lx.fRba) then
maxRba = m.l.lx.fRba
end
if minRba == maxRba then do
maxRba = "X'"maxRba"'-- rba_start"
minRba = maxRba
end
else if maxRba \== '00' then do
minRba = "X'"minRba"'-- min rba_start"
maxRba = "X'"maxRba"'-- max rba_start"
end
else do
end
end
call out left('---- recover ', 72, '-')
call out '-- Tipp: mit TSO LRSN logPoints umwandeln'
call out ' RECOVER LIST TPLIST'
call out ' PARALLEL'
call out '-- TOLOGPOINT' maxRba
if minRba <> maxRba then
call out '-- TOLOGPOINT' minRba
call out '-- LOGONLY BACKOUT YES'
call out '-- RESTOREBEFORE' minRba
call out '-- TOLASTCOPY'
call out '-- TOLASTFULLCOPY'
call out '--RECOVER TABLESPACE' rDsn
call out '-- TOCOPY' dsn
if cDsn > 1 then
call out ' -- Achtung' cDsn 'copies|'
return
endProcedure genRecover
genReorg: procedure expose m.
parse arg m
call out left('---- reorg ', 72, '-')
call out ' REORG TABLESPACE LIST TPLIST'
call out ' LOG NO'
call out ' SORTDATA'
call out ' COPYDDN(TCOPYD)'
call out ' SHRLEVEL CHANGE'
call out ' -- Achtung mapping table' ,
'zufällig gewählt|'
call out ' MAPPINGTABLE S100447.MAPTAB'm.m.rand2
call out ' DRAIN_WAIT 40'
call out ' RETRY 20 '
call out ' RETRY_DELAY 180'
call out ' MAXRO 40 '
call out ' DRAIN WRITERS'
call out ' LONGLOG CONTINUE'
call out ' DELAY 1200'
call out ' TIMEOUT TERM'
call out ' UNLDDN TSRECD'
call out ' UNLOAD CONTINUE'
call out ' PUNCHDDN TPUNCH'
call out ' DISCARDDN TDISC'
call out ' SORTKEYS'
call out ' SORTDEVT DISK'
call out ' STATISTICS'
call out ' INDEX ALL KEYCARD '
call out ' UPDATE ALL'
return
endProcedure genCopy
genRunstats: procedure expose m.
parse arg m
call out left('---- runstats ', 72, '-')
call out " RUNSTATS TABLESPACE LIST TSLIST"
call out " SHRLEVEL CHANGE "
call out " INDEX(ALL)"
call out " REPORT NO UPDATE ALL"
return
endProcedure genRunstats
genUtil: procedure expose m.
parse arg m
m.m.stepNo = m.m.stepNo + 1
call out left("//STEP"m.m.stepNo , 10),
"EXEC PGM=DSNUTILB,TIME=1440,"
call out "// PARM=("m.m.dbSy",'"m.m.jn".UXUTIL'),"
call out "// REGION=0M"
call out "//SYSPRINT DD SYSOUT=*"
call out "//SYSUDUMP DD SYSOUT=*"
call out "//UTPRINT DD SYSOUT=*"
call out "//SYSTEMPL DD DISP=SHR,DSN="m.m.dbSy ,
|| ".DBAA.LISTDEF(TEMPL)"
call out "//INDUMMY DD DUMMY"
call out "//SYSIN DD *"
return
endProcedure genUtil
genDSN: procedure expose m.
parse arg m
m.m.stepNo = m.m.stepNo + 1
call out "//STEP"m.m.stepNo ,
" EXEC PGM=IKJEFT01"
call out "//SYSTSPRT DD SYSOUT=*"
call out "//SYSPRINT DD SYSOUT=*"
call out "//SYSTSIN DD *"
call out "DSN SYS("m.m.dbSy")"
return
endProcedure genDsn
/* rexx ****************************************************************
wsh: walter's rexx shell
interfaces:
edit macro: for adhoc evaluation or programming
either block selection: q or qq and b or a
oder mit Directives ($#...) im Text
wsh i: tso interpreter
batch: input in dd wsh
docu: http://chsa4212/host/db2wiki/pmwiki.php?n=Main.Wsh
syntax: http://chsa4212/host/db2wiki/pmwiki.php?n=Main.WshSyn
--- history ------------------------------------------------------------------
6. 2.13 w.keller csmCopy aendert mgmtClas für neue lokale Files
********/ /*** end of help ********************************************
23. 1.13 w.keller sqlErrHandler sowie sqlRx und sql
11. 6.12 w.keller sqlUpdComLoop
23. 5.12 w.keller fix sqlStmt: drop accepts -204
31. 3.12 w.keller sql Query interface incl. sql über CSM
10. 2.12 w.keller div catTb* und eLong
2. 6.11 w.keller sql error with current location and dsnTiar
2. 5.11 w.keller sqlStmt etc..
16. 3.11 w.keller basic new r '' ==> r m.class.classO
28. 2.11 w.keller compFile by exprBlock, fix $@do forever, |
7. 2.11 w.keller cleanup block / with sqlPush....
2. 2.11 w.keller simplified syntax, ast for blocks, ? for help
19. 6.10 w.keller open/close stacked mit jUsers, framed eliminiert
19. 5.10 w.keller class wird direkt erzeugt ohne temporary
18. 4.10 w.keller scanUtilInto ==> testCase noch einbauen
17. 4.10 w.keller oMutate in fileTsoList eingebaut
14. 1.10 w.keller batch interface no longer dies on openIfNotYet
CSM.RZ1.P0.EXEC korrigiert
***********************************************************************/
/*--- main code wsh --------------------------------------------------*/
call errReset 'hI'
call pipeIni /* without tstClass2 gives different result */
m.wsh.version = 2.2
parse arg spec
if spec = '?' then
return help('wsh version' m.wsh.version)
isEdit = 0
if spec = '' & m.err.ispf then do /* z/OS edit macro */
isEdit = adrEdit('macro (spec) NOPROCESS', '*') == 0
if isEdit then do
if spec = '?' then
return help('version' m.wsh.version)
call adrEdit '(d) = dataset'
call adrEdit '(m) = member'
m.editDsn = dsnSetMbr(d, m)
if spec = '' & m.editDsn = 'A540769.WK.REXX(WSH)' then
spec = 't'
end
end
call scanIni
f1 = spec
rest = ''
if pos(verify(f1, m.scan.alfNum), '1 2') > 0 then
parse var spec f1 2 rest
u1 = translate(f1)
if u1 = 'T' then
return wshTst(rest)
else if u1 = 'I' then
return wshInter(rest)
else if u1 = 'S' then
spec = '$#@ call sqlStmtsOpt $.$sqlIn,' quote(rest) '$#sqlIn#='
call wshIni
inp = ''
out = ''
if m.err.os == 'TSO' then do
if isEdit then do
parse value wshEditBegin(spec) with inp out
end
else if sysvar('sysEnv') = 'FORE' then do
end
else do
inp = s2o('-wsh')
useOut = listDsi('OUT FILE')
if \ (useOut = 16 & sysReason = 2) then
out = s2o('-out')
end
end
else if m.err.os == 'LINUX' then do
inp = s2o('&in')
out = s2o('&out')
end
else
call err 'implement wsh for os' m.err.os
m.wshInfo = 'compile'
call compRun spec, inp, out, wshInfo
if isEdit then
call wshEditEnd
exit 0
/*--- actual test case ----------------------------------------------*/
wshIni: procedure expose m.
call compIni
call sqlOIni
call scanWinIni
return
endProcedure wshIni
tstRts: procedure expose m.
call wshIni
call sqlConnect dbaf
call sqlQuery 3, "select * from sysibm.sysTableSpaceSTats" ,
"where dbName = 'MF01A1A' and name = 'A150A'",
"order by partition asc"
do while sqlFetch(3, rr)
say f('@.DBNAME%-8C.@NAME%-8C @PARTITION %4C' ,rr)
end
call sqlDisconnect
endProcedure tstRts
wshTst: procedure expose m.
parse arg rest
if rest = '' then do /* default */
call sqlConnect DBAF
call catColCom 'cmnBatch', 'DSN_PGROUP_TABLE',
, 'cmnBatch', 'DSN_PGROUP_TABLE_new'
call sqlDisConnect DBAF
return 0
end
c = ''
do wx=1 to words(rest)
c = c 'call tst'word(rest, wx)';'
end
if wx > 2 then
c = c 'call tstTotal;'
say 'wsh interpreting' c
interpret c
return 0
endProcedure wshTst
/*--- interpret user input: rexx, expr, data or shell ---------------*/
wshInter: procedure expose m.
parse arg inp
call wshIni
inp = strip(inp)
mode = '*'
do forever
if pos(left(inp, 1), '/;:*@.-=') > 0 then
parse var inp mode 2 inp
if mode == '/' then
return 0
mode = translate(mode, ';', ':')
if inp <> '' then do
say 'as' mode 'interpreting' inp
if mode = ';' then
interpret inp
else if mode = '*' then
interpret 'say' inp
else do
call errReset 'h', 'say "******* intercepting error";',
'call errSay ggTxt; return "";'
call oRun compile(comp(jBuf(inp)), mode)
call errReset 'h'
end
end
say 'enter' mode 'expression, / for end, ; or * for Rexx' ,
'@ . - = for wsh'
parse pull inp
end
endProcedure wshInter
wshEditBegin: procedure expose m.
parse arg spec
dst = ''
li = ''
m.wsh.editHdr = 0
pc = adrEdit("process dest range Q", 0 4 8 12 16)
if pc = 16 then
call err 'bad range must be q'
if pc = 0 | pc = 8 then do
call adrEdit "(rFi) = lineNum .zFrange"
call adrEdit "(rLa) = lineNum .zLrange"
/* say 'range' rFi '-' rLa */
end
else do
rFi = ''
/* say 'no range' */
end
if pc = 0 | pc = 4 then do
call adrEdit "(dst) = lineNum .zDest"
/* say 'dest' dst */
dst = dst + 1
end
else do
/* say 'no dest' */
if adrEdit("find first '$#out' 1", 4) = 0 then do
call adrEdit "(dst) = cursor"
/* say '$#out' dst */
call adrEdit "(li) = line" dst
m.wsh.editHdr = 1
end
end
m.wsh.editDst = dst
m.wsh.editOut = ''
if dst \== '' then do
m.wsh.editOut = jOpen(jBufTxt(), '>')
if m.wsh.editHdr then
call jWrite m.wsh.editOut, left(li, 50) date('s') time()
end
if rFi == '' then do
call adrEdit "(zLa) = lineNum .zl"
if adrEdit("find first '$#' 1", 4) = 0 then do
call adrEdit "(rFi) = cursor"
call adrEdit "(li) = line" rFi
if abbrev(li, '$#out') | abbrev(li, '$#end') then
rFi = 1
if rFi < dst & dst \== '' then
rLa = dst-1
else
rLa = zLa
end
else do
rFi = 1
rLa = zLa
end
end
/* say 'range' c1 'rc' pc':' rFi '-' rLa 'after' dst */
m.wsh.editIn = jOpen(jBuf(), m.j.cWri)
do lx=rFi to rLa
call adrEdit "(li) = line" lx
call jWrite m.wsh.editIn, li
end
call errReset 'h',
, 'return wshEditErrH(ggTxt, ' rFi',' rLa')'
return jClose(m.wsh.editIn) m.wsh.editOut
endProcedure wshEditBegin
wshEditEnd: procedure expose m.
call errReset 'h'
if m.wsh.editOut == '' then
return 0
call jClose(m.wsh.editOut)
lab = wshEditInsLinSt(m.wsh.editDst, 0, , m.wsh.editOut'.BUF')
call wshEditLocate max(1, m.wsh.editDst-7)
return 1
endProcedure wshEditEnd
wshEditLocate: procedure
parse arg ln
call adrEdit '(la) = linenum .zl'
call adrEdit 'locate ' max(1, min(ln, la - 37))
return
endProcedure wshEditLocate
wshEditErrH: procedure expose m.
parse arg ggTxt, rFi, rLa
call errCleanup
call errReset 'h'
call errMsg ggTxt
call mMove err, 1, 2
isScan = 0
if wordPos("pos", m.err.4) > 0 ,
& pos(" in line ", m.err.4) > 0 then do
parse var m.err.4 "pos " pos . " in line " lin":"
if pos = '' then do
parse var m.err.4 " line " lin":"
pos = 0
end
isScan = lin \== ''
end
m.err.1 = '***' m.wshInfo 'error ***'
if m.wshInfo=='compile' & isScan then do
do sx=1 to m.err.0
call out m.err.sx
end
lab = rFi + lin
if pos \= '' then
lab = wshEditInsLin(lab, 'msgline', right('*',pos))
lab = wshEditInsLinSt((rFi+lin),0, 'msgline', err)
call wshEditLocate rFi+lin-25
end
else do
if m.wsh.editOut \== '' then do
do sx=1 to m.err.0
call jWrite m.wsh.editOut, m.err.sx
end
lab = wshEditInsLinSt(m.wsh.editDst, 0, ,
, m.wsh.editOut'.BUF')
call wshEditInsLinSt m.wsh.editDst, m.wsh.editHdr,
, msgline, err
call wshEditLocate max(1, m.wsh.editDst-7)
end
else do
do sx=1 to m.err.0
say m.err.sx
end
end
end
call errCleanup
exit
endSubroutine wshEditErrH
wshEditInsLinCmd: procedure
parse arg wh
if dataType(wh, 'n') then do
if adrEdit("label" wh "= .a", 0 8 12) \= 12 then
return 'line_before .a ='
else
return 'line_after .zl ='
end
else if left(wh, 1) == '.' then
return 'line_before' wh '='
else
return wh
endProcedure wshEditInsLinCmd
wshEditInsLin: procedure
parse arg wh, type
cmd = wshEditInsLinCmd(wh)
do ax=3 to arg()
li = strip(arg(ax), 't')
if li == '' then
iterate
if translate(type) = 'MSGLINE' then do while length(li) > 72
sx = lastPos(' ', li, 72)
if sx < 10 then
sx = 72
one = left(li, sx)
li = ' 'strip(substr(li, sx))
call adrEdit cmd type "(one)"
end
call adrEdit cmd type "(li)", 0 4
end
return cmd
endProcedure wshEditInsLin
wshEditInsLinSt: procedure expose m.
parse arg wh, pl, type, st
if wh == '' then do
do ox=1 to m.st.0
say m.st.ox
end
return ''
end
wh = wh + pl
cmd = wshEditInsLinCmd(wh)
do ax=1 to m.st.0
call wshEditInsLin cmd, type, m.st.ax
end
return cmd
endProcedure wshEditInsLinSt
/*** end wsh, begin all copies ****************************************/
/* copy tstAll begin *************************************************/
/*----------- neu, noch versorgen |||||-------------------------------*/
tstWiki:
call mapReset docs, 'k'
call addFiles docs, 'n', '/media/wkData/literature/notes'
call addFiles docs, 'd', '/media/wkData/literature/docs'
in = jOpen(file('wiki.old'), '<')
out = jOpen(file('wiki.new'), '>')
abc = '(:abc: %l%'
do cx=1 to length(m.scan.alfLC)
c1 = substr(m.scan.alfLC, cx, 1)
abc = abc '¢¢#'c1 '|' c1'!!'
end
call jWrite out, abc ':)'
inTxt = 0
li = m.i
do lx=1 while jRead(in, i)
if 0 then
say length(m.i) m.i
if m.i = '' then
iterate
li = m.i
do forever
bx = pos('¢=', li)
if bx < 1 then
leave
ex = pos('=!', li)
if ex <= bx then
call err '=! before ¢= in' lx li
li = left(li, bx-1)substr(li,bx+2, ex-bx-2)substr(li,ex+2)
end
li = strip(li)
if abbrev(li, '|') then do
w = word(substr(li, 2), 1)
call jWrite out, '¢¢#'w'!! {$:abc}'
call jWrite out, '|||' substr(li, 2)
inTxt=1
iterate
end
if \ inTxt then do
call jWrite out, li
iterate
end
if \ (abbrev(li, '->') | abbrev(li, '#') ,
| abbrev(li, '¢')) then do
call jWrite out, '-<' li
iterate
end
cx = 1
if substr(li, cx, 2) == '->' then
cx = verify(li, ' ', 'n', cx+2)
hasCross = substr(li, cx, 1) == '#'
if hasCross then
cx = verify(li, ' ', 'n', cx+1)
ex = verify(li, '!:\, ', 'm', cx)
ex = ex - (substr(li, ex, 1) \== '!')
hasBr = substr(li, cx, 1) == '¢'
if \ hasBr then
w = substr(li, cx, ex+1-cx)
else if substr(li, ex, 1) == '!' then
w = substr(li, cx+1, ex-1-cx)
else
call err 'br not closed' substr(w, cx+1, ex-1-cx) 'in' lx li
hasPdf = right(w, 4) == '.pdf'
if hasPdf then
w = left(w, length(w)-4)
if verify(w, '#?', 'm') > 0 then do
w = translate(w, '__', '#?')
say '*** changing to' w 'in' lx li
end
o = '-< {def+'w'}'
o = '-< ¢¢'w'!!'
k = translate(w)
if k.k == 1 then
say '*** doppelter key' k 'in:' lx left(li,80)
k.k = 1
dT = ''
if mapHasKey(docs, k) then do
parse value mapGet(docs, k) with dT dC dN
call mapPut docs, k, dT (dC+1) dN
do tx=1 to length(dT)
t1 = substr(dT, tx, 1)
o = o '¢¢Lit'translate(t1)':'word(dN, tx) '|' t1 '!!'
end
end
qSeq = 'nd'
qq = left(qSeq, 1)
qx = 0
do forever
qx = pos('@'qq, li, qx+1)
if qx < 1 then do
qq = substr(qSeq, 1 + pos(qq, qSeq), 1)
qx=0
if qq = '' then
leave
else
iterate
end
if pos(qq, dT) < 1 then do
say '*** @'qq 'document not found:' lx li
iterate
end
do qb = qx-1 by -1 while substr(li, qb, 1) == ' '
end
do qe = qx+2 by 1 while substr(li, qe, 1) == ' '
end
if substr(li, qb, 1) == '.' & substr(li, qe, 1) == '.' then
li = left(li, qb)substr(li, qe+1)
else
li = left(li, qb) substr(li, qe)
end
o = o':' strip(substr(li, ex+1+(substr(li,ex+1,1)==':')))
if 0 then say left(li, 30) '==>' left(o, 30)
call jWrite out, o
end
dk = mapKeys(docs)
do dx=1 to m.dk.0
parse value mapGet(docs, m.dk.dx) with dT dC dN
if dC < 1 then
say '*** document not used:' dT dC dn
end
call jClose in
call jClose out
return
endProcedure tstWiki
addFiles: procedure expose m.
parse arg m, ty, file
fl = jOpen(fileList(file(file)), '<')
do while jRead(fl, fi1)
nm = substr(m.fi1, lastPos('/', m.fi1)+1)
k = translate(left(nm, pos('.', nm)-1))
if \ mapHasKey(m, k) then do
call mapAdd m, k, ty 0 nm
end
else do
parse value mapGet(m, k) with dT dC dN
call mapPut m, k, dT || ty 0 dN nm
end
end
call jClose fl
return
endProcedure addFiles
tstAll: procedure expose m.
say 'tstAll ws2 25.2.13...............'
call tstBase
call tstComp
call tstDiv
if m.err.os = 'TSO' then
call tstZos
call tstTut0
return 0
endProcedure tstAll
/* copx tstZos begin **************************************************/
tstZOs:
call tstTime
call sqlIni
call tstSql
call tstSqlC
call tstSqlQ
call tstSqlUpdComLoop
call tstSqlB
call tstSqlStmt
call tstSqlStmts
call tstSqlO1
call tstSqlO2
call tstSqls1
call tstSqlO
call tstSqlFTab
call tstTotal
return
endProcedure tstZOs
tstWshBatch:
call adrTso 'alloc dd(WSH) shr dsn(WK.TEXT(WSHBATCH))'
call wshBatch
return adrTso('free dd(WSH)')
tstLmdTiming:
parse arg lev
say timing() lev
call lmdBegin abc, lev
c = 0
do while lmdNext(abc, st.)
c = c + st.0
end
call lmdEnd abc
say timing() lev 'with group - without reading' c
call adrIsp 'lmdinit listid(lmdId) level('lev')'
do c=0 while adrIsp('lmdlist listid(&lmdId) dataset(abc)', 8) = 0
end
call adrIsp 'lmdfree listid(&lmdId)'
say timing() lev 'with list' c
return
endProcedure lmdTiming
tstCsi: procedure expose m.
if 0 then do
call lmd 'A540769.*K'
call tstCsiCla 'A540769.WK.REXX'
call tstCsiCla 'A540769.AAA.DATASETS'
call tstCsiCla 'A540769.RRR.DATASETS'
end
if 0 then do
call tstCsiOpNx 'A540769.WK.*E*'
call tstCsiOpNx 'A540769.AAA.DATASETS'
call tstCsiOpNx 'A540769.RRR.DATASETS'
end
if 1 then do
call tstCsiNxCl 'A540769.WK.**'
call tstCsiNxCl 'DBTF.M*.**'
call tstCsiNxCl 'DBTF.BE*.**'
end
return
tstCsi: procedure expose m.
/* call lmd 'A540769.*K' */
call tstCsi1 'A540769.WK.REXX'
call tstCsi1 'A540769.AAA.DATASETS'
call tstCsi1 'A540769.RRR.DATASETS'
return
tstCsiCla:
parse arg ds
say ds '-->' csiCla(ds)
return
tstCsiOpNx: procedure expose m.
parse arg ds
m = 'NUE123'
s = 'res89'
flds = 'devtyp volser mgmtclas comudsiz NOBYTTRK UDATASIZ HARBA'
say 'csiOpen' ds
call csiOpen m, ds, flds
do while csiNext(m, s)
say m.s 'dev' c2x(m.s.devTyp) ,
'vol' m.s.volSer 'cla' m.s.mgmtclas,
'comuDsiz' m.s.comuDsiz 'noBytTrk' m.s.noBytTrk,
'udatasiz' c2x(m.s.udatasiz) ,
'harba' c2x(m.s.harba)
end
return
tstCsiNxCl: procedure expose m.
parse arg ds
m = 'ABC123'
s = 'efg89'
flds = 'devtyp volser mgmtclas'
say 'csiOpen' ds
call csiOpen m, ds, flds
say timing() 'begin'
do i=1 while csiNext(m, s)
nn = csiArcTape(m.s.volser, m.s.mgmtClas, m.s.devtyp, m.s)
/* oo = csiCla(strip(m.s))
if oo <> nn then
say nn '<>' oo m.s
*/ if i // 1000 = 0 then
say timing() i nn m.s
end
say timing() (i-1) nn m.s
return
endProcedure tstCsiNxCl
listCatClass: procedure expose m.
parse upper arg dsn
call outtrap x., '*'
call adrTso "listcat volume entry('"dsn"')", 4
rt = rc
call outtrap off
/* say 'listct rc =' rt 'lines' x.0 */
cl = ''
vo = ''
if word(x.1, 3) \== dsn then
call out 'err ??? for dsn' dsn 'bad first line' x.1
else if pos('NOT FOUND', x.1) > 0 then
return 'notFound'
else if word(x.1, 1)\== 'NONVSAM' then
call out 'err ??? for dsn' dsn 'bad first line' x.1
do x=2 to x.0 while vo = '' & left(x.x, 1) = ' '
/* say x.x */
p = pos('MANAGEMENTCLASS-', x.x)
if p > 0 then
vo = strip(word(substr(x.x, p+16), 1), 'l', '-')
p = pos('VOLSER--', x.x)
if p > 0 then
vo = strip(word(substr(x.x, p+6), 1), 'l', '-')
p = pos('DEVCLASS--', x.x)
dt = strip(word(substr(x.x, p+8), 1), 'l', '-')
end
/* say 'lc' cl 'vo' vo 'dt' dt 'dsn' dsn */
if vo = '' then
call out '??? err no volume for dsn' dsn
else if vo = 'ARCIVE' then
res = 'arcive'
else if cl = '' then
res = 'tape'
else
res = cl
if abbrev(res, 'ar') \= abbrev(dt, "X'0") ,
| abbrev(res, 'ta') \= abbrev(dt, "X'7") ,
| (left(res, 1) >= 'A') \= abbrev(dt, "X'3") then
call out 'err ??? mismatch cl' cl 'vo' vo 'dt' dt 'dsn' dsn
return res
endProcedure listCatClass
/* copx tstZos end **************************************************/
/* copx tstDiv begin **************************************************/
tstDiv:
call tstSorQ
call tstSort
call tstMatch
call tstTotal
return
endProcedure tstDiv
tstSorQ: procedure expose m. /* wkTst??? remove once upon a time */
/*
$=/tstSorQ/
### start tst tstSorQ #############################################
sort 29 c ACHT DREI DREIZEHN EINS ELF FUENF M.I.25 M.I.26 M.I.27 M+
..I.29 NEUN SECHS SIEBEN VIER VIERZEHN ZEHN ZWEI ZWOELF 0 1 1 1 2 2+
. 3 3 4 4
sort 22 c ACHT DREIZEHN ELF M.I.25 M.I.26 M.I.27 M.I.29 NEUN VIERZ+
EHN ZEHN ZWOELF 0 1 1 1 2 2 3 3 4 4
sort 15 c M.I.25 M.I.26 M.I.27 M.I.29 0 1 1 1 2 2 3 3 4 4
sort 8 c M.I.25 M.I.26 M.I.27 M.I.29 0 1 1
sort 1 M.I.29
$/tstSorQ/ */
/*
$=/tstSorQAscii/
### start tst tstSorQAscii ########################################
sort 29 0 1 1 1 2 2 3 3 4 4 ACHT DREI DREIZEHN EINS ELF FUENF M.I.+
25 M.I.26 M.I.27 M.I.29 NEUN SECHS SIEBEN VIER VIERZEHN ZEHN ZWEI Z+
WOELF c
sort 22 0 1 1 1 2 2 3 3 4 4 ACHT DREIZEHN ELF M.I.25 M.I.26 M.I.27+
. M.I.29 NEUN VIERZEHN ZEHN ZWOELF c
sort 15 0 1 1 1 2 2 3 3 4 4 M.I.25 M.I.26 M.I.27 M.I.29 c
sort 8 0 1 1 M.I.25 M.I.26 M.I.27 M.I.29 c
sort 1 M.I.29
$/tstSorQAscii/ */
if m.err.os == 'LINUX' then
call tst t, "tstSorQAscii"
else
call tst t, "tstSorQ"
call mAdd mCut(i, 0), eins, zwei, drei, vier, fuenf, sechs,
,sieben, acht, neun, zehn, elf, zwoelf, dreizehn, vierzehn
call mAdd i, 1, 2, 3, 4, 4, 3, 2, 1, 0, 1,
, 'M.I.25', 'M.I.26', 'M.I.27', 'c', 'M.I.29'
do yy = m.i.0 by -1 to 1
do x = 0 to yy
m.i.0 = x
call sort i, o
m = ''
la = ''
if x <> m.o.0 then
call err 'size mismatch' x '<>' m.o.0
do y=1 to m.o.0
m = m m.o.y
if \ (la << m.o.y) then
call err 'sort mismatch' yy x y '\' la '<<' m.o.y
end
end
if yy // 7 = 1 then
call tstOut t, 'sort' yy m
do x = 2 to yy
x1 = x-1
m.i.x1 = m.i.x
end
end
call tstEnd t
return
endProcedure tstSorQ
tstSort: procedure expose m.
call tstSortComp
call tstSortComp '<<='
call tstSortComp 'm.aLe <<= m.aRi'
call tstSortComp 'if 1 then cmp = m.aLe <<= m.aRi; else call err sd'
return
endProcedure tstSort
tstSortComp: procedure expose m.
parse arg cmp
/*
$=/tstSort/
### start tst tstSort #############################################
sort 29 c ACHT DREI DREIZEHN EINS ELF FUENF M.I.25 M.I.26 M.I.27 M+
..I.29 NEUN SECHS SIEBEN VIER VIERZEHN ZEHN ZWEI ZWOELF 0 1 1 1 2 2+
. 3 3 4 4
sort 22 c ACHT DREIZEHN ELF M.I.25 M.I.26 M.I.27 M.I.29 NEUN VIERZ+
EHN ZEHN ZWOELF 0 1 1 1 2 2 3 3 4 4
sort 15 c M.I.25 M.I.26 M.I.27 M.I.29 0 1 1 1 2 2 3 3 4 4
sort 8 c M.I.25 M.I.26 M.I.27 M.I.29 0 1 1
sort 1 M.I.29
$/tstSort/ */
/*
$=/tstSortAscii/
### start tst tstSortAscii ########################################
sort 29 0 1 1 1 2 2 3 3 4 4 ACHT DREI DREIZEHN EINS ELF FUENF M.I.+
25 M.I.26 M.I.27 M.I.29 NEUN SECHS SIEBEN VIER VIERZEHN ZEHN ZWEI Z+
WOELF c
sort 22 0 1 1 1 2 2 3 3 4 4 ACHT DREIZEHN ELF M.I.25 M.I.26 M.I.27+
. M.I.29 NEUN VIERZEHN ZEHN ZWOELF c
sort 15 0 1 1 1 2 2 3 3 4 4 M.I.25 M.I.26 M.I.27 M.I.29 c
sort 8 0 1 1 M.I.25 M.I.26 M.I.27 M.I.29 c
sort 1 M.I.29
$/tstSortAscii/ */
say '### start with comparator' cmp '###'
if m.err.os == 'LINUX' then
call tst t, "tstSortAscii"
else
call tst t, "tstSort"
call mAdd mCut(i, 0), eins, zwei, drei, vier, fuenf, sechs,
,sieben, acht, neun, zehn, elf, zwoelf, dreizehn, vierzehn
call mAdd i, 1, 2, 3, 4, 4, 3, 2, 1, 0, 1,
, 'M.I.25', 'M.I.26', 'M.I.27', 'c', 'M.I.29'
do yy = m.i.0 by -1 to 1
do x = 0 to yy
m.i.0 = x
call sort i, o, cmp
m = ''
la = ''
if x <> m.o.0 then
call err 'size mismatch' x '<>' m.o.0
do y=1 to m.o.0
m = m m.o.y
if \ (la << m.o.y) then
call err 'sort mismatch' yy x y '\' la '<<' m.o.y
end
end
if yy // 7 = 1 then
call tstOut t, 'sort' yy m
do x = 2 to yy
x1 = x-1
m.i.x1 = m.i.x
end
end
call tstEnd t
return
endProcedure tstSort
tstMatch: procedure expose m.
/*
$=/tstMatch/
### start tst tstMatch ############################################
match(eins, e?n*) 1 1 2,i,s trans(E?N*) EiNs
match(eins, eins) 1 1 0 trans(EINS) EINS
match(e1nss, e?n*) 1 1 2,1,ss trans(?*) 1ss
match(eiinss, e?n*) 0 0 -9
match(einss, e?n *) 0 0 -9
match(ein s, e?n *) 1 1 2,i,s trans(E?N *) EiN s
match(ein abss , ?i*b*) 1 1 3,e,n a,ss trans(?I*B*) eIn aBss .
match(ein abss wie gehtsssxdirx und auch , ) 0 0 -9
match(ies000, *000) 1 1 1,ies trans(*000) ies000
match(xx0x0000, *000) 1 1 1,xx0x0 trans(*000) xx0x0000
match(000x00000xx, 000*) 1 1 1,x00000xx trans(000*) 000x00000xx
match(000xx, *0*) 1 1 2,00,xx trans(ab*cd*ef) ab00cdxxef
$/tstMatch/ */
call tst t, "tstMatch"
call tstOut t, matchTest1('eins', 'e?n*' )
call tstOut t, matchTest1('eins', 'eins' )
call tstOut t, matchTest1('e1nss', 'e?n*', '?*' )
call tstOut t, matchTest1('eiinss', 'e?n*' )
call tstOut t, matchTest1('einss', 'e?n *' )
call tstOut t, matchTest1('ein s', 'e?n *' )
call tstOut t, matchTest1('ein abss ', '?i*b*' )
call tstOut t, matchTest1('ein abss wie gehtsssxdirx und auch ' )
call tstOut t, matchTest1('ies000', '*000' )
call tstOut t, matchTest1('xx0x0000', '*000' )
call tstOut t, matchTest1('000x00000xx', '000*' )
call tstOut t, matchTest1('000xx', '*0*', 'ab*cd*ef' )
call tstEnd t
return
matchTest1:
parse arg w, m, m2
r = 'match('w',' m')' match(w, m) match(w, m, vv) m.vv.0
do x=1 to m.vv.0
r = r','m.vv.x
end
if m2 = '' then
m2 = translate(m)
if m.vv.0 >= 0 then
r = r 'trans('m2')' matchTrans(m2, vv)
return r
endProcedure matchTest1
tstTime: procedure
/* Winterzeit dez 2011
$=/tstTime/
### start tst tstTime #############################################
Lrsn2Lzt(C5E963363741) 2010-05-01-11.34.55.789008
Achtung: output ist abhaengig von Winter/Sommerzeit und LeapSecs
timeZone 3600.00000 leapSecs 25.0000000
2jul(2011-03-31-14.35.01.234567) 11090
Lrsn2Gmt(C5E963363741) 2010-05-01-10.35.20.789008
Lrsn2Lzt(C5E963363741) 2010-05-01-11.34.55.789008
gmt2Lrsn(2011-03-31-14.35.01.234567) C78D87B86E38
lzt2Lrsn(2011-03-31-14.35.01.234567) C78D7A670B7C
Lrsn2Gmt(gmt2Lrsn(2011-03-31-14.35.01.234567) 2011-03-31-14.35.01.2+
34560
gmt2Lrsn(Lrsn2Gmt(C5E963363741) C5E963363741
Lrsn2LZt(LZt2Lrsn(2011-03-31-14.35.01.234567) 2011-03-31-14.35.01.2+
34560
LZt2Stc(Lrsn2LZt(C5E963363741)( C5E963363741
$/tstTime/
*/
call jIni
call tst t, 'tstTime'
t1 = '2011-03-31-14.35.01.234567'
s1 = 'C5E963363741'
call out 'Lrsn2Lzt('s1')' timeLrsn2Lzt(s1)
call out ,
'Achtung: output ist abhaengig von Winter/Sommerzeit und LeapSecs'
call out 'timeZone' m.timeZone * m.timeStckUnit ,
'leapSecs' m.timeLeap * m.timeStckUnit
call timeReadCvt 1
call out '2jul('t1') ' time2jul(t1)
call out 'Lrsn2Gmt('s1')' timeLrsn2Gmt(s1)
call out 'Lrsn2Lzt('s1')' timeLrsn2Lzt(s1)
call out 'gmt2Lrsn('t1')' timeGmt2Lrsn(t1)
call out 'lzt2Lrsn('t1')' timeLzt2Lrsn(t1)
call out 'Lrsn2Gmt(gmt2Lrsn('t1')' timeLrsn2Gmt(timeGmt2Lrsn(t1))
call out 'gmt2Lrsn(Lrsn2Gmt('s1')' timeGmt2Lrsn(timeLrsn2Gmt(s1))
call out 'Lrsn2LZt(LZt2Lrsn('t1')' timeLrsn2LZt(timeLZt2Lrsn(t1))
call out 'LZt2Stc(Lrsn2LZt('s1')(' timeLZt2Lrsn(timeLrsn2LZt(s1))
call tstEnd t
return
endProcedure tstTime
/* copx tstDiv end **************************************************/
/* copx tstSql begin **************************************************/
tstSqlUtils: procedure expose m.
call sqlConnect 'DBAF'
id = 'A540769.dsnUtils'
rst = 'NO'
retcode = -9876
e = ''
z = 0
st = "TEMPLATE TCOPYD",
"DSN('&SSID..&JO..&US..P&PART(2)..D&DATE(3)..T&TIME.')",
"DATACLAS(NULL12) MGMTCLAS(COM#A011) STORCLAS(FAR$N)",
"SPACE (150,3750) TRK UNCNT 59;",
"listdef abc include tablespace DA540769.A002* partlevel;",
"listdef mf include tablespace MF01A1A.A110A partlevel;",
"copy list abc copyddn(tcopyd) shrlevel change;"
st = translate(st)
call sqlExec "call SYSPROC.DSNUTILS ( :id, :rst,",
":st,:retcode, :ANY" copies(',:e,:e,:z',12) ")"
call sqlExec ,
'ASSOCIATE LOCATOR (:RESULTS) WITH PROCEDURE SYSPROC.DSNUTILS'
say 'results' results
call sqlExec 'ALLOCATE C111 CURSOR FOR RESULT SET :RESULTS'
say 'allocated c111'
do while sqlExec('fetch c111 into :seq, :txt', 0 100) = 0
say 'sysPrint' seq strip(txt, 't')
end
call sqlExec 'close c111'
say 'closed'
call sqlDisconnect
exit
endProcedure tstSqlUtils
tstSqlStored: procedure expose m.
call sqlConnect 'DBAF'
rst = 'NO'
retcode = -9876
e = ''
z = 0
st = "abc"
call sqlExec "call SYSPROC.COMMAND ( :st, :rst)"
say 'after call st='st 'rst='rst
call sqlExec ,
'ASSOCIATE LOCATOR (:RESULTS) WITH PROCEDURE SYSPROC.COMMAND'
say 'results' results
call sqlExec 'ALLOCATE C111 CURSOR FOR RESULT SET :RESULTS'
say 'allocated c111'
do while sqlExec('fetch c111 into :seq, :txt', 0 100) = 0
say 'sysPrint' seq strip(txt, 't')
end
call sqlExec 'close c111'
say 'closed'
call sqlDisconnect
return
endProcedure tstSqlStored
tstSqlStoredWK: procedure expose m.
call sqlConnect 'DBAF'
/* st = "direct wkUtiSub"
rst = 'NO'
say 'before call st='st 'rst='rst
call sqlExec "call A540769.WKUTILSUB ( :st, :rst)"
say 'after call st='st 'rst='rst
*/ rst = 'NO'
retcode = -9876
e = ''
z = 0
prc = 'DB2UTIL.DB2UTIL'
st = "DA540769.A2*" /* DA540769.A1*" */
say "call" prc "("st", ...)"
call sqlExec "call" prc "(:st, :rst)"
say 'after call st='st 'rst='rst
call sqlExec ,
'ASSOCIATE LOCATOR (:RESULTS) WITH PROCEDURE' prc
/* say 'results' results */
call sqlExec 'ALLOCATE C111 CURSOR FOR RESULT SET :RESULTS'
say ''
say '***** utility output'
do while sqlExec('fetch c111 into :seq, :txt', 0 100) = 0
say 'sysPrint' seq strip(txt, 't')
end
call sqlExec 'close c111'
say '***** end output'
call sqlDisconnect
return 0
endProcedure tstSqlStoredWK
tstSqlStoredSQL1: procedure expose m.
call sqlConnect 'DBIA'
rst = 'NO'
retcode = -9876
e = ''
z = 0
st = "DA540769.A2* DA540769.A1*"
call sqlExec "call A540769.WKSQL1 ( :st, :rst)"
say 'after call st='st 'rst='rst
call sqlExec ,
'ASSOCIATE LOCATOR (:RESULTS) WITH PROCEDURE A540769.WKUTIL'
say 'results' results
call sqlExec 'ALLOCATE C111 CURSOR FOR RESULT SET :RESULTS'
say 'allocated c111'
do while sqlExec('fetch c111 into :seq, :txt', 0 100) = 0
say 'sysPrint' seq strip(txt, 't')
end
call sqlExec 'close c111'
say 'closed'
call sqlDisconnect
return
endProcedure tstSqlStoredSQL1
tstSqlTriggerTiming:
parse upper arg tb ni
m.noInsert = ni == 0
cnt = 200000
if tb = '' then
TB = 'GDB9998.TWK511TRI'
call sqlConnect dbaf
say timing() 'noInsert' m.noInsert 'tb' tb
call sql2St 49, '*', cc, 'select max(pri) MX from' tb
if m.cc.1.mx == m.sqlNull then
m.cc.1.mx = 0
von = m.cc.1.mx + 1
bis = m.cc.1.mx + cnt
say m.cc.0 'max' m.cc.1.mx 'von' von 'bis' bis 'count' cnt tb
if right(tb, 2) = 'A1' then do
call sqlPrepare 3, 'insert into' tb '(pri, short, long, par)' ,
'values (?, ?, ?, ?)'
do ax=von to bis
call sqlExecute 3, ax,
, ax 'wsh short', ax 'wsh long long long long long ',
, (ax-1) // 1000 + 1
end
end
else do
call sqlPrepare 3, 'insert into' tb '(pri, short, long)' ,
'values (?, ?, ?)'
do ax=von to bis
call sqlExecute 3, ax,
, ax 'wsh short', ax 'wsh long long long long long ',
, (ax-1) // 1000 + 1
end
end
/* call sqlLn 5,,, 'select * from' tb 'where pri >=' von */
call sqlExImm 'commit'
say timing()
call sqlDisconnect
return
endProcedure tstSqlTriggerTiming
tstSql: procedure expose m.
cx = 2
call sqlConnect
call jIni
/*
$=/tstSql/
### start tst tstSql ##############################################
*** err: SQLCODE = -204: A540769.SYSDUMMY IS AN UNDEFINED NAME
. e 1: stmt = prepare s7 from :src
. e 2: with from :src = select * from sysdummy
fetchA 1 ab= m.abcdef.123.AB abc ef= efg
fetchA 0 ab= m.abcdef.123.AB abc ef= efg
sqlVars :M.STST.A :M.STST.A.sqlInd, :M.STST.B :M.STST.B.sqlInd, :M.+
STST.C :M.STST.C.sqlInd
1 all from dummy1
a=a b=2 c=---
fetchBT 1 SYSTABLES
fetchBT 0 SYSTABLES
fetchBI 1 SYSINDEXES
fetchBI 0 SYSINDEXES
opAllCl 3
fetchC 1 SYSTABLES
fetchC 2 SYSTABLESPACE
fetchC 3 SYSTABLESPACESTATS
sql2St 3
fetchD 1 SYSIBM.SYSTABLES
fetchD 2 SYSIBM.SYSTABLESPACE
fetchD 3 SYSIBM.SYSTABLESPACESTATS
$/tstSql/ */
call tst t, "tstSql"
src = 'select * from sysdummy'
call sqlExec 'prepare s7 from :src'
call sqlPrepare cx, "select 'abc' , 'efg'",
'from sysibm.sysDummy1'
call sqlExec 'declare c'cx 'cursor for s'cx
call sqlOpen cx
a = 'abcdef'
b = 123
do i=1 to 2
call out 'fetchA' sqlFetchInto(cx, ':m.a.b.ab, :m.a.b.ef') ,
'ab= m.'a'.' || b'.'ab m.a.b.ab 'ef=' m.a.b.ef
end
call sqlClose cx
drop stst a b c m.stst.a m.stst.b m.stst.c
sv = sqlVars('M.STST', A B C , 1)
call out 'sqlVars' sv
call out sql2St(,
"select 'a' a, 2 b, case when 1=0 then 1 else null end c",
"from sysibm.sysDummy1",
, stst) 'all from dummy1'
call out 'a='m.stst.1.a 'b='m.stst.1.b 'c='m.stst.1.c
call sqlPreDeclare cx, "select name" ,
"from sysibm.sysTables" ,
"where creator = 'SYSIBM' and name = ?"
call sqlOpen cx, 'SYSTABLES'
call out 'fetchBT' sqlFetchInto(cx, ':NM') nm
call out 'fetchBT' sqlFetchInto(cx, ':NM') nm
call sqlClose cx
call sqlOpen cx, 'SYSINDEXES'
a = 'a b c'
b = 1234565687687234
call out 'fetchBI' sqlFetchInto(cx, ':NM') nm
call out 'fetchBI' sqlFetchInto(cx, ':NM') nm
call sqlClose cx
src = 'select name' ,
"from sysibm.sysTables" ,
"where creator = 'SYSIBM' and name like 'SYSTABLES%'",
"fetch first 3 rows only"
call sqlPreDeclare cx, src
st = 'wie geht'' s'
call out 'opAllCl' sqlOpAllCl(cx, st, ':M.ST.SX.NAME')
do x=1 to m.st.0
call out 'fetchC' x m.st.x.name
end
st = 'auch noch'
src = "select strip(creator) || '.' || strip(name) name" ,
substr(src,12)
call out 'sql2St' sql2St(src, st)
do x=1 to m.st.0
call out 'fetchD' x m.st.x.name
end
call tstEnd t
return
endProcedure tstSql
tstSqlB: procedure expose m.
/*
$=/tstSqlB/
### start tst tstSqlB #############################################
#jIn 1# select strip(name) "tb", strip(creator) cr
#jIn 2# , case when name = 'SYSTABLES' then 1 else null end
#jIn 3# from sysibm.sysTables
#jIn 4# where creator = 'SYSIBM' and name like 'SYSTABLES%'
#jIn 5# .
#jIn 6# order by name
#jIn 7# fetch first 3 rows only
#jIn eof 8#
dest1.fet: SYSTABLES SYSIBM 1
dest2.fet: SYSTABLESPACE SYSIBM ---
dest3.fet: SYSTABLESPACESTATS SYSIBM ---
$/tstSqlB/ */
call tst t, "tstSqlB"
cx = 9
call sqlConnect
call jIni
call mAdd mCut(t'.IN', 0),
, 'select strip(name) "tb", strip(creator) cr' ,
, ", case when name = 'SYSTABLES' then 1 else null end" ,
, "from sysibm.sysTables" ,
, "where creator = 'SYSIBM' and name like 'SYSTABLES%'", ,
, "order by name",
, "fetch first 3 rows only"
call sqlPreOpen cx
do qx=1 while sqlFetch(cx, 'dest'qx'.fet')
dst = 'dest'qx'.fet'
call out dst':' m.dst.tb m.dst.cr m.dst.col3
drop m.dst.tb m.dst.cr m.dst.col3
end
call tstEnd t
return
endProcedure tstSqlB
tstSqlO: procedure expose m.
/*
$=/tstSqlO/
### start tst tstSqlO #############################################
*** err: SQLCODE = -204: A540769.SYSDUMMY IS AN UNDEFINED NAME
. e 1: stmt = prepare s7 from :src
. e 2: with from :src = select * from sysdummy
REQD=Y col=123 case=--- .sqlInd:-1 col5=anonym geburri=1956-04-01+
-06.00.00.000000
$/tstSqlO/
*/
call sqlConnect
call sqlStmt 'set current schema = A540769';
call tst t, "tstSqlO"
src = 'select * from sysdummy'
call sqlExec 'prepare s7 from :src'
r = sqlRdr( ,
"select d.*, 123, timestamp('01.04.1956','06:00:00')" ,
'"geburri walter",',
'case when 1=0 then 1 else null end caseNull,',
"'anonym'" ,
'from sysibm.sysdummy1 d')
call jOpen r, '<'
do while assNN('o', jReadO(r))
call out 'REQD='m.o.IBMREQD 'col='m.o.col2,
'case='m.o.CASENULL '.sqlInd:'m.o.caseNull.sqlInd,
'col5='m.o.col5,
'geburri='m.o.GEBURRI
end
call jClose r
call tstEnd t
return
endProcedure tstSqlO
tstSqlFTab: procedure expose m.
/*
$=/tstSqlFTab/
### start tst tstSqlFTab ##########################################
UPDATESTATSTIME----------------NACTIVE------NPAGES-XTENTS-LOADRLAST+
TIME--------------REORGLASTTIME--------------EORGINSERTS-EORGDELETE+
S-EORGUPDATES-GUNCLUSTINS-RGDISORGLOB-GMASSDELETE-GNEARINDREF-RGFAR+
INDREF-STATSLASTTIME--------------TATSINSERTS-TATSDELETES-TATSUPDAT+
ES-SMASSDELETE-COPYLASTTIME---------------PDATEDPAGES-COPYCHANGES-C+
OPYUP-COPYUPDATETIME-------------I---DBID---PSID-TITION-STANCE-SPAC+
E---TOTALRO-DATASIZ-UNCOMPR-DBNAME-------NAME---------REORGCL-REORG+
SC-REORGHA-HASHLASTUS-DRI-L-STATS01----
--- modified
allg vorher others vorher
db-------ts---------part---inst-UPDATESTATSTIME----------------NACT+
IVE------NPAGES-XTENTS-LOADRLASTTIME--------------REORGLASTTIME----+
----------EORGINSERTS-EORGDELETES-EORGUPDATES-GUNCLUSTINS-RGDISORG+
LOB-GMASSDELETE-GNEARINDREF-RGFARINDREF-STATSLASTTIME--------------+
TATSINSERTS-TATSDELETES-TATSUPDATES-SMASSDELETE-COPYLASTTIME-------+
--------PDATEDPAGES-COPYCHANGES-COPYUP-COPYUPDATETIME-------------+
I---DBID---PSID-SPACE---TOTALRO-DATASIZ-UNCOMPR-REORGCL-REORGSC-REO+
RGHA-HASHLASTUS-DRI-L-STATS01----
db-------ts---------part---inst-UPDATESTATSTIME----------------NACT+
IVE------NPAGES-XTENTS-LOADRLASTTIME--------------REORGLASTTIME----+
----------EORGINSERTS-EORGDELETES-EORGUPDATES-GUNCLUSTINS-RGDISORG+
LOB-GMASSDELETE-GNEARINDREF-RGFARINDREF-STATSLASTTIME--------------+
TATSINSERTS-TATSDELETES-TATSUPDATES-SMASSDELETE-COPYLASTTIME-------+
--------PDATEDPAGES-COPYCHANGES-COPYUP-COPYUPDATETIME-------------+
I---DBID---PSID-SPACE---TOTALRO-DATASIZ-UNCOMPR-REORGCL-REORGSC-REO+
RGHA-HASHLASTUS-DRI-L-STATS01----
allg nachher others nachher
DBNAME INSTANCE +
. NPAGES REORGLASTTIME +
. REORGUPDATES +
. REORGMASSDELETE STATSLASTTIME +
. STATSUPDATES +
. COPYUPDATEDPAGES COPYUPDATETIME +
. PSID DATASIZE REORGSC+
ANACCESS DRIVETYPE
. NAME UPDATESTATSTIME +
. EXTENTS +
. REORGINSERTS REORGUNCLUSTINS +
. REORGNEARINDREF +
. STATSINSERTS STATSMASSDELETE +
. COPYCHANGES +
. IBMREQD SPACE UNCOMPRESSEDDATASIZE +
. REORGHASHACCESS LPFACILITY
. PARTITION NACTIVE+
. LOADRLASTTIME +
. REORGDELETES REORGD+
ISORGLOB REORGFARINDREF +
. STATSDELETES COPYLASTTIME +
. COPYUPDATELRSN +
. DBID TOTALROWS REORGCLUSTERSEN+
S HASHLASTUSED STATS01
$/tstSqlFTab/
*/
call tst t, 'tstSqlFTab'
call sqlConnect
call sqlPreOpen 17, 'select * from sysibm.sysTablespaceStats' ,
"where dbName = 'xxxDB06' and name = 'SYSTSTAB'"
call sqlFTabReset abc, 17, 1, , 12
call sqlFTabDef abc, 492, '%7e'
call sqlFTabOthers abc
call sqlfTab abc
call sqlClose 17
call out '--- modified'
call sqlopen 17
call sqlFTabReset abc, 17, 2 1, 1 3 'c', 12
call sqlFTabDef abc, 492, '%7e'
call sqlFTabAdd abc, DBNAME, '%-8C', 'db', 'allg vorher' ,
, 'allg nachher'
call sqlFTabAdd abc, NAME , '%-8C', 'ts'
call sqlFTabAdd abc, PARTITION , , 'part'
call sqlFTabAdd abc, INSTANCE , , 'inst'
call fTabAddTit abc, 2, 'others vorher'
call fTabAddTit abc, 3, 'others nachher'
call sqlFTabOthers abc
call sqlFTab abc
call sqlClose 17
call tstEnd t
return
endProcedure tstSqlFTab
tstSqlC: procedure expose m.
/*
$=/tstSqlCRx/
### start tst tstSqlCRx ###########################################
*** err: SQLCODE = -104: ILLEGAL SYMBOL "?". SOME SYMBOLS THAT MIGH+
T
. e 1: BE LEGAL ARE: . <IDENTIFIER> JOIN INNER LEFT RIGHT FU+
LL CROSS ,
. e 2: HAVING GROUP
. e 3: src select * from sysibm?sysDummy1
. e 4: > >>>pos 21 of 30>>>
. e 5: stmt = prepare s9 into :M.SQL.9.D from :src
. e 6: with into :M.SQL.9.D = M.SQL.9.D
. e 7: from :src = select * from sysibm?sysDummy1
*** err: SQLCODE = -204: NONONO.SYSDUMMY1 IS AN UNDEFINED NAME
. e 1: stmt = prepare s9 into :M.SQL.9.D from :src
. e 2: with into :M.SQL.9.D = M.SQL.9.D
. e 3: from :src = select * from nonono.sysDummy1
sys ==> server CHSKA000DBAF .
fetched a1=abc, i2=12, c3=---
. I1 C2 .
. 1 eins
2222 zwei
$/tstSqlCRx/
$=/tstSqlCCsm/
### start tst tstSqlCCsm ##########################################
*** err: SQLCODE = -104: ILLEGAL SYMBOL "?". SOME SYMBOLS THAT MIGH+
T
. e 1: BE LEGAL ARE: . <IDENTIFIER> JOIN INNER LEFT RIGHT FU+
LL CROSS ,
. e 2: HAVING GROUP
. e 3: src select * from sysibm?sysDummy1
. e 4: > >>>pos 21 of 30>>>
. e 5: stmt = select * from sysibm?sysDummy1
. e 6: subsys = DD0G, host = RZ8, interfaceType Csm
*** err: SQLCODE = -204: NONONO.SYSDUMMY1 IS AN UNDEFINED NAME
. e 1: stmt = select * from nonono.sysDummy1
. e 2: subsys = DD0G, host = RZ8, interfaceType Csm
sys rz8/DD0G ==> server CHROI000DD0G .
fetched a1=abc, i2=12, c3=---
. I1 C2 .
. 1 eins
2222 zwei
$/tstSqlCCsm/ */
sqlBuf = jBuf("select 1 i1, 'eins' c2 from sysibm.sysDummy1",
, "union all select 2222 i1, 'zwei' c2 from sysibm.sysDummy1")
do tx=1 to 2
if tx = 1 then do
call tst t, "tstSqlCRx"
sys = ''
call sqlConnect
end
else do
call tst t, "tstSqlCCsm"
sys = 'rz8/DD0G'
end
call sqlConnect sys
cx = 9
call sqlQuery cx, 'select * from sysibm?sysDummy1'
call sqlQuery cx, 'select * from nonono.sysDummy1'
call sqlQuery cx, "select 'abc' a1, 12 i2, current server srv",
", case when 1=0 then 1 else null end c3",
"from sysibm.sysDummy1"
do while sqlFetch(cx, dst)
call out 'sys' sys '==> server' m.dst.srv
call out 'fetched a1='m.dst.a1', i2='m.dst.i2', c3='m.dst.c3
end
call fmtFTab , sqlRdr(sqlBuf)
call sqlDisconnect
call tstEnd t
end
return
endProcedure tstSqlC
tstSqlQ: procedure expose m.
/*
$=/tstSqlQ/
### start tst tstSqlQ #############################################
insert updC 1
insert select updC 2
dest4.fet: 1 eins 2012-04-01-06.07.08.000000 1 updC 0
dest5.fet: 2 zwei 2012-02-29-15.44.33.220000 --- updC 0
dest6.fet: 11 zehn+eins 2012-04-11-06.07.08.000000 1 updC 0
dest7.fet: 12 zehn+zwei 2012-03-10-15.44.33.220000 --- updC 0
SQLCODE = 000, SUCCESSFUL EXECUTION
warnings 4=W no where
stmt = prepare s9 into :M.SQL.9.D from :src
with into :M.SQL.9.D = M.SQL.9.D
. from :src = select * from final table (update session.dgtt s+
et c2 = 'u' || c2)
dest9.fet: 1 ueins 2012-04-01-06.07.08.000000 updC 4
dest10.fet: 2 uzwei 2012-02-29-15.44.33.220000 updC 4
dest11.fet: 11 uzehn+eins 2012-04-11-06.07.08.000000 updC 4
dest12.fet: 12 uzehn+zwei 2012-03-10-15.44.33.220000 updC 4
$/tstSqlQ/ */
call tst t, "tstSqlQ"
cx = 9
qx = 3
call sqlConnect
call sqlUpdate,"declare global temporary table session.dgtt",
"(i1 int, c2 varchar(20), t3 timestamp)"
call sqlUpdate,"insert into session.dgtt" ,
"values(1, 'eins', '2012-04-01 06.07.08')"
call sqlUpdate,"insert into session.dgtt" ,
"values(2, 'zwei', '2012-02-29 15:44:33.22')"
call out 'insert updC' m.sql..updateCount
call sqlUpdate,"insert into session.dgtt" ,
"select i1+10, 'zehn+'||strip(c2), t3+10 days",
"from session.dgtt"
call out 'insert select updC' m.sql..updateCount
call sqlQuery cx, 'select d.*' ,
', case when mod(i1,2) = 1 then 1 else null end grad' ,
'from session.dgtt d'
do qx=qx+1 while sqlFetch(cx, 'dest'qx'.fet')
dst = 'dest'qx'.fet'
call out dst':' m.dst.i1 m.dst.c2 m.dst.t3 m.dst.grad ,
'updC' m.sql.cx.updateCount
drop m.dst.i1 m.dst.c2 m.dst.t3 m.dst.grad
end
call sqlClose cx
call sqlQuery cx, "select * from final table (update session.dgtt",
" set c2 = 'u' || c2)"
do qx=qx+1 while sqlFetch(cx, 'dest'qx'.fet')
dst = 'dest'qx'.fet'
call out dst':' m.dst.i1 m.dst.c2 m.dst.t3 ,
'updC' m.sql.cx.updateCount
drop m.dst.i1 m.dst.c2 m.dst.t3 m.dst.grad
end
call sqlClose cx
call tstEnd t
return
endProcedure tstSqlQ
tstSqlO: procedure expose m.
/*
$=/tstSqlO/
### start tst tstSqlO #############################################
*** err: SQLCODE = -204: A540769.SYSDUMMY IS AN UNDEFINED NAME
. e 1: stmt = prepare s7 from :src
. e 2: with from :src = select * from sysdummy
REQD=Y col=123 case=--- .sqlInd:-1 col5=anonym geburri=1956-04-01+
-06.00.00.000000
$/tstSqlO/
*/
call sqlConnect
call sqlStmt 'set current schema = A540769';
call tst t, "tstSqlO"
src = 'select * from sysdummy'
call sqlExec 'prepare s7 from :src'
r = sqlRdr( ,
"select d.*, 123, timestamp('01.04.1956','06:00:00')" ,
'"geburri walter",',
'case when 1=0 then 1 else null end caseNull,',
"'anonym'" ,
'from sysibm.sysdummy1 d')
call jOpen r, '<'
do while assNN('o', jReadO(r))
call out 'REQD='m.o.IBMREQD 'col='m.o.col2,
'case='m.o.CASENULL '.sqlInd:'m.o.caseNull.sqlInd,
'col5='m.o.col5,
'geburri='m.o.GEBURRI
end
call jClose r
call tstEnd t
return
endProcedure tstSqlO
tstSqlUpdComLoop: procedure expose m.
/*
$=/tstSqlUpdComLoop/
### start tst tstSqlUpdComLoop ####################################
sqlCode 0: declare global temporary table session.dgtt (i1 int) on +
commit ....
sqlCode 0, 123 rows inserted: insert into session.dgtt select row_n+
umber()....
CNT
123
1 rows fetched: select count(*) cnt from session.dgtt
123 rows deleted, 10 commits: delete from session.dgtt d where i1 i+
n (sele....
T
0
1 rows fetched: select count(*) cnt from session.dgtt
$/tstSqlUpdComLoop/ */
call tst t, "tstSqlUpdComLoop"
call sqlConnect
call out sqlStmt("declare global temporary table session.dgtt",
"(i1 int) on commit preserve rows")
call out sqlStmt("insert into session.dgtt",
"select row_number() over() from sysibm.sysTables",
"fetch first 123 rows only")
call out sqlStmt("select count(*) cnt from session.dgtt")
call out sqlUpdComLoop("delete from session.dgtt d where i1 in",
"(select i1 from session.dgtt fetch first 13 rows only)")
call out sqlStmt("select count(*) cnt from session.dgtt")
call tstEnd t
return
endProcedure tstSqlUpdComLoop
tstSqlO1: procedure expose m.
/*
$=/tstSqlO1/
### start tst tstSqlO1 ############################################
tstR: @tstWriteoV2 isA :<tstSqlO1Type>
tstR: .CR = SYSIBM
tstR: .TB = SYSTABLEPART
tstR: @tstWriteoV3 isA :<tstSqlO1Type>
tstR: .CR = SYSIBM
tstR: .TB = SYSTABLEPART_HIST
tstR: @tstWriteoV4 isA :<tstSqlO1Type>
tstR: .CR = SYSIBM
tstR: .TB = SYSTABLES
tstR: @tstWriteoV5 isA :<tstSqlO1Type>
tstR: .CR = SYSIBM
tstR: .TB = SYSTABLESPACE
--- writeAll
tstR: @tstWriteoV6 isA :<tstSqlO1Type>
tstR: .CR = SYSIBM
tstR: .TB = SYSTABLEPART
tstR: @tstWriteoV7 isA :<tstSqlO1Type>
tstR: .CR = SYSIBM
tstR: .TB = SYSTABLEPART_HIST
tstR: @tstWriteoV8 isA :<tstSqlO1Type>
tstR: .CR = SYSIBM
tstR: .TB = SYSTABLES
tstR: @tstWriteoV9 isA :<tstSqlO1Type>
tstR: .CR = SYSIBM
tstR: .TB = SYSTABLESPACE
$/tstSqlO1/
*/
call sqlConnect
call tst t, "tstSqlO1"
sq = sqlRdr("select strip(creator) cr, strip(name) tb",
"from sysibm.sysTables",
"where creator='SYSIBM' and name like 'SYSTABL%'",
"order by 2 fetch first 4 rows only")
call jOpen sq, m.j.cRead
do while assNN('ABC', jReadO(sq))
if m.sq.rowCount = 1 then do
cx = m.sq.cursor
call mAdd t.trans, className(m.sql.cx.type) '<tstSqlO1Type>'
end
call outO abc
end
call jClose sq
call out '--- writeAll'
call pipeWriteAll sq
call tstEnd t
return 0
endProcedure tstSqlO1
tstSqlO2: procedure expose m.
/*
$=/tstSqlO2/
### start tst tstSqlO2 ############################################
CR TB RR
SYSIBM SYSTABLEPART 1
SYSIBM SYSTABLEPART_HIST 4
SYSIBM SYSTABLES 9
SYSIBM SYSTABLESPACE 16
$/tstSqlO2/
*/
call sqlConnect
call tst t, "tstSqlO2"
call pipe '+N'
call out "select strip(creator) cr, strip(name) tb,"
call out "(row_number()over())*(row_number()over()) rr"
call out "from sysibm.sysTables"
call out "where creator='SYSIBM' and name like 'SYSTABL%'"
call out "order by 2 fetch first 4 rows only"
call pipe 'N|'
call sqlSel
call pipe 'P|'
call fmtFTab abc
call pipe '-'
call tstEnd t
return 0
endProcedure tstSqlO2
tstSqlS1: procedure expose m.
/*
$=/tstSqlS1/
### start tst tstSqlS1 ############################################
select c, a from sysibm.sysDummy1
tstR: @tstWriteoV2 isA :<cla sql c a>
tstR: .C = 1
tstR: .A = a
select ... where 1=0
tstR: @ obj null
$/tstSqlS1/
*/
call sqlOIni
call tst t, "tstSqlS1"
call sqlConnect dbaf
s1 = fileSingle( ,
sqlRdr("select count(*) c, 'a' a from sysibm.sysdummy1"))
call mAdd t.trans, className(objClass(s1)) '<cla sql c a>'
call out 'select c, a from sysibm.sysDummy1'
call tstWriteO t, s1
call out 'select ... where 1=0'
call tstWriteO t, fileSingle( ,
sqlRdr("select*from sysibm.sysdummy1 where 1=0"), '')
call tstEnd t
return
endProcedure tstSqlS1
tstSqlStmt: procedure expose m.
/*
$=/tstSqlStmt/
### start tst tstSqlStmt ##########################################
*** err: SQLCODE = -713: THE REPLACEMENT VALUE FOR CURRENT SCHEMA I+
S
. e 1: INVALID
. e 2: stmt = execute immediate :ggSrc
. e 3: with immediate :ggSrc = set current schema = 'sysibm'
sqlCode -713: set current schema = 'sysibm'
sqlCode 0: set current schema = sysibm
tstR: @tstWriteoV2 isA :<sql?sc>
tstR: .C = SYSIBM
1 rows fetched: select current schema c from sysDummy1
tstR: @tstWriteoV3 isA :<sql?sc>
tstR: .C = SYSIBM
1 rows fetched: (select current schema c from sysDummy1)
$/tstSqlStmt/ */
call sqlConnect
call tst t, "tstSqlStmt"
cn = className(classNew('n* SQL u f C v'))
call mAdd t.trans, cn '<sql?sc>'
call tstOut t, sqlStmt("set current schema = 'sysibm'")
call tstOut t, sqlStmt(" set current schema = sysibm ")
call tstOut t, sqlStmt(" select current schema c from sysDummy1",
, ,'o')
call tstOut t, sqlStmt(" (select current schema c from sysDummy1)",
, ,'o')
call tstEnd t
return
endProcedure tstSqlStmt
tstSqlStmts: procedure expose m.
/*
$=/tstSqlStmts/
### start tst tstSqlStmts #########################################
*** err: SQLCODE = -104: ILLEGAL SYMBOL "BLABLA". SOME SYMBOLS THAT
. e 1: MIGHT BE LEGAL ARE: <ERR_STMT> <WNG_STMT> GET SQL SAV+
EPOINT HOLD
. e 2: FREE ASSOCIATE
. e 3: src blabla
. e 4: > <<<pos 1 of 6<<<
. e 5: stmt = blabla
sqlCode -104: blabla
sqlCode 0: set current schema= sysIbm
C
1
1 rows fetched: select count(*) "c" from sysDummy1 with ur
C
1
1 rows fetched: select count(*) "c" from sysDummy1 with ur
#jIn 1# set current -- sdf
#jIn 2# schema = s100447;
sqlCode 0: set current schema = s100447
#jIn eof 3#
$/tstSqlStmts/ */
call sqlConnect
call scanReadIni
call scanWinIni
call tst t, "tstSqlStmts"
call sqlStmts "blabla ;;set current schema= sysIbm "
b = jBuf('select count(*) "c" from sysDummy1 --com' ,
,'with /* comm */ ur;')
call sqlStmts b
call sqlStmts b, , '-sql72'
call mAdd mCut(t'.IN', 0), 'set current -- sdf', 'schema = s100447;'
call sqlStmts
call tstEnd t
return
endProcedure tstSqlStmts
/* copx tstSql end ***************************************************/
/* copx tstComp begin **************************************************
test the wsh compiler
***********************************************************************/
tstComp: procedure expose m.
call compIni
call tstCompDataConst
call tstCompDataVars
call tstCompShell
call tstCompPrimary
call tstCompExpr
call tstCompFile
call tstCompStmt
call tstCompStmtA
call tstCompDir
call tstCompObj
call tstCompORun
call tstCompDataIO
call tstCompPipe
call tstCompRedir
call tstCompComp
call tstCompSyntax
call tstCompSql
call tstTotal
return
endProcedure tstComp
tstComp1: procedure expose m.
parse arg ty nm cnt
c1 = 0
if cnt = 0 |cnt = '+' then do
c1 = cnt
cnt = ''
end
call jIni
src = jBuf()
call jOpen src, m.j.cWri
do sx=2 to arg()
call jWrite src, arg(sx)
end
call tstComp2 nm, ty, jClose(src), , c1, cnt
return
endProcedure tstComp1
tstComp2: procedure expose m.
parse arg nm, spec, src, compSt
call compIni
call tst t, nm, compSt
if src == '' then do
src = jBuf()
call tst4dp src'.BUF', mapInline(nm'Src')
end
m.t.moreOutOk = abbrev(strip(arg(5)), '+')
cmp = comp(src)
call out 'compile' spec',' (m.src.buf.0) 'lines:' m.src.buf.1
r = compile(cmp, spec)
noSyn = m.t.errHand = 0
coErr = m.t.err
say if( noSyn, "compiled", "*** syntaxed") r ":" objMet(r, 'oRun')
cnt = 0
do ax = 5 to max(arg(), 5) while m.t.err = coErr & noSyn
a1 = strip(arg(ax))
if a1 == '' & arg() >= 5 then
iterate
if abbrev(a1, '+') then do
m.t.moreOutOk = 1
a1 = strip(substr(a1, 2))
end
if datatype(a1, 'n') then
cnt = a1
else if a1 \== '' then
call err 'tstComp2 bad arg('ax')' arg(ax)
if cnt = 0 then do
call mCut 'T.IN', 0
call out "run without input"
end
else do
call mAdd mCut('T.IN', 0),
,"eins zwei drei", "zehn elf zwoelf?",
, "zwanzig 21 22 23 24 ... 29|"
do lx=4 to cnt
call mAdd 'T.IN', left(lx "line" lx, lx+9, '-')';'
end
call out "run with" cnt "inputs"
end
m.t.inIx = 0
call oRun r
end
call tstEnd t
return
endProcedure tstComp2
tstCompDataConst: procedure expose m.
/*
$=/tstCompDataConst/
### start tst tstCompDataConst ####################################
compile =, 8 lines: Lline one, $** asdf
run without input
. Lline one, .
line two..
line threecontinued on 4
line five fortsetzung
line six fortsetzung
$/tstCompDataConst/ */
call tstComp1 '= tstCompDataConst',
, ' Lline one, $** asdf',
, 'line two.',
, 'line three$*+ bla bla' ,
, 'continued on 4',
, 'line five $*( und so',
, 'weiter $abc $? $''$*)'' $"$*)" und weiter $*) fortsetzung',
, 'line six $*( und $*( $** $*( so',
, 'weiter $abc $? $*)'' $"$*)" und weiter $*) fortsetzung'
/*
$=/tstCompDataConstBefAftComm1/
### start tst tstCompDataConstBefAftComm1 #########################
compile =, 3 lines: $*(anfangs com.$*) $*(plus$*) $** x
run without input
the only line;
$/tstCompDataConstBefAftComm1/ */
call tstComp1 '= tstCompDataConstBefAftComm1',
, ' $*(anfangs com.$*) $*(plus$*) $** x',
, 'the only line;',
, ' $*(end kommentar$*) '
/*
$=/tstCompDataConstBefAftComm2/
### start tst tstCompDataConstBefAftComm2 #########################
compile =, 11 lines: $*(anfangs com.$*) $*(plus$*) $*+ x
run without input
the first non empty line;
. .
befor an empty line with comments;
$/tstCompDataConstBefAftComm2/ */
call tstComp1 '= tstCompDataConstBefAftComm2',
, ' $*(anfangs com.$*) $*(plus$*) $*+ x',
, ' $*(forts Zeile com.$*) $*(plus$*) $** x',
, ' $*(comment 2. Zeile$*) $*(plus$*) $*+ x',
, ' $*(forts Zeile com.$*) $*(plus$*) $** x',
, 'the first non empty line;',
, ' ',
, 'befor an empty line with comments;',
, ' $*(comment 4. Zeile$*) $*(plus$*) $*+ x',
, ' $*(forts 4.Zeile com.$*) $*(plus$*) $** x',
, ' $*(end kommentar$*) $*+',
, ' $*(forts end com.$*) $*(plus$*) $** x'
return
endProcedure tstCompDataComm
tstCompDataVars: procedure expose m.
/*
$=/tstCompDataVars/
### start tst tstCompDataVars #####################################
compile =, 5 lines: Lline one, $** asdf
run without input
. Lline one, .
lline zwei output
lline 3 .
variable v1 = valueV1 ${v1}= valueV1; .
. $-.{""$v1} = valueV1; .
$/tstCompDataVars/ */
call tstComp1 '= tstCompDataVars',
, ' Lline one, $** asdf',
, ' $$ lline zwei output',
, 'lline 3 $=v1= valueV1 ' ,
, 'variable v1 = $v1 $"${v1}=" ${ v1 }; ',
, ' $"$-.{""""$v1} =" $-.{""$v1}; '
return
endProcedure tstCompDataVars
tstCompShell: procedure expose m.
/*
$=/tstCompShell/
### start tst tstCompShell ########################################
compile @, 12 lines: $$ Lline one, $** asdf
run without input
Lline one,
lline zwei output
v1 = valueV1 ${v1}= valueV1|
REXX OUT L5 CONTINUED L6 CONTINUED L7
L8 ONE
L9 TWO
valueV1
valueV1 valueV2
out valueV1 valueV2
SCHLUSS
$/tstCompShell/ */
call tstComp1 '@ tstCompShell',
, ' $$ Lline one, $** asdf',
, ' $$ lline zwei output',
, ' $=v1= valueV1 ' ,
, '$$ v1 = $v1 $"${v1}=" ${ v1 }| ' ,
, 'call out rexx out l5, ' ,
, ' continued l6 , ' ,
, ' continued l7 ' ,
, 'call out l8 one ' ,
, 'call out l9 two$=v2=valueV2 ',
, '$$- $v1 $$- $v1 $v2 ',
, 'call out "out " $v1 $v2 ',
, '$$- schluss '
/*
$=/tstCompShell2/
### start tst tstCompShell2 #######################################
compile @, 13 lines: $@do j=0 to 1 $@¢ $$ do j=$j
run without input
do j=0
after if 0 $@¢ $!
after if 0 $=@¢ $!
do j=1
if 1 then $@¢ a
a2
if 1 then $@=¢ b
b2
after if 1 $@¢ $!
after if 1 $=@¢ $!
end
$/tstCompShell2/ */
call tstComp1 '@ tstCompShell2',
, '$@do j=0 to 1 $@¢ $$ do j=$j' ,
, 'if $j then $@¢ ',
, '$$ if $j then $"$@¢" a $$a2' ,
, '$!',
, 'if $j then $@=¢ ',
, '$$ if $j then $"$@=¢" b $$b2' ,
, '$!',
, 'if $j then $@¢ $!' ,
, '$$ after if $j $"$@¢ $!"' ,
, 'if $j then $@=¢ $!' ,
, '$$ after if $j $"$=@¢ $!"' ,
, '$!',
, '$$ end'
return
endProcedure tstCompShell
tstCompPrimary: procedure expose m.
call compIni
/*
$=/tstCompPrimary/
### start tst tstCompPrimary ######################################
compile =, 16 lines: Strings $"$""$""""$""" $'$''$''''$'''
run without input
Strings $"$""$" $'$''$'
rexx $-{ 3 * 5 } = 15
rexx $-¢ 5 * 7 $! = 35
rexx $-// 7 * 11 $// = 77
rexx $-/abcEf/ 11 * 13 $/abcEf/ = 143
data line three line four bis hier
shell line five line six bis hier
var get v1 value Eins, v1 value Eins .
var isDef v1 1, v2 0 .
#jIn eof 1#
var read >1 0 rr undefined
#jIn eof 2#
var read >2 0 rr undefined
no call abc$-{4*5} $-{efg$-{6*7} abc20 EFG42
brackets $-{$-{1+9}*$-¢7+3$!*$-/b/5+5$/b/} 1000
run with 3 inputs
Strings $"$""$" $'$''$'
rexx $-{ 3 * 5 } = 15
rexx $-¢ 5 * 7 $! = 35
rexx $-// 7 * 11 $// = 77
rexx $-/abcEf/ 11 * 13 $/abcEf/ = 143
data line three line four bis hier
shell line five line six bis hier
var get v1 value Eins, v1 value Eins .
var isDef v1 1, v2 0 .
#jIn 1# eins zwei drei
var read >1 1 rr eins zwei drei
#jIn 2# zehn elf zwoelf?
var read >2 1 rr zehn elf zwoelf?
no call abc$-{4*5} $-{efg$-{6*7} abc20 EFG42
brackets $-{$-{1+9}*$-¢7+3$!*$-/b/5+5$/b/} 1000
$/tstCompPrimary/ */
call envRemove 'v2'
call tstComp1 '= tstCompPrimary 3',
, 'Strings $"$""$""""$"""' "$'$''$''''$'''",
, 'rexx $"$-{ 3 * 5 } =" $-{ 3 * 5 }' ,
, 'rexx $"$-¢ 5 * 7 $! =" $-¢ 5 * 7 $!' ,
, 'rexx $"$-// 7 * 11 $// =" $-// 7 * 11 $//' ,
, 'rexx $"$-/abcEf/ 11 * 13 $/abcEf/ ="',
'$-/abcEf/ 11 * 13 $/abcEf/' ,
, 'data $-=¢ line three',
, 'line four $! bis hier' ,
, 'shell $-@¢ $$ line five',
, '$$ line six $! bis hier' ,
, '$= v1 = value Eins $=rr=undefined $= eins = 1 ',
, 'var get v1 $v1, v1 ${ v1 } ',
, 'var isDef v1 ${? v${ eins } }, v2 ${?v2 } ',
, 'var read >1 ${> rr} rr $rr' ,
, 'var read >2 ${> rr} rr $rr',
, 'no call $"abc$-{4*5} $-{efg$-{6*7}"',
'abc$-{4*5} $-{efg$-{6*7}}',
, 'brackets $"$-{$-{1+9}*$-¢7+3$!*$-/b/5+5$/b/}"',
'$-{$-{1+9}*$-¢7+3$!*$-/b/5+5$/b/}'
return
endProcedure tstCompPrimary
tstCompExpr: procedure expose m.
call compIni
/*
$=/tstCompExprStr/
### start tst tstCompExprStr ######################################
compile -, 3 lines: $=vv=vvStr
run without input
vv=vvStr
o2String($.$vv)=vvStr
$/tstCompExprStr/ */
call tstComp1 '- tstCompExprStr',
, '$=vv=vvStr' ,
, '"vv="$vv' ,
, '$"o2String($.$vv)="o2String($.$vv)'
/*
$=/tstCompExprObj/
### start tst tstCompExprObj ######################################
compile ., 5 lines: $=vv=vvStr
run without input
vv=
vvStr
s2o($.$vv)=
vvStr
$/tstCompExprObj/ */
call tstComp1 '. tstCompExprObj',
, '$=vv=vvStr' ,
, '"!vv="', '$vv',
, '$"s2o($.$vv)="', 's2o($-$vv)'
/*
$=/tstCompExprDat/
### start tst tstCompExprDat ######################################
compile =, 4 lines: $=vv=vvDat
run without input
vv=vvDat
$.$vv= !vvDat
$.-{"abc"}=!abc
$/tstCompExprDat/ */
call tstComp1 '= tstCompExprDat',
, '$=vv=vvDat' ,
, 'vv=$vv',
, '$"$.$vv=" $.$vv',
, '$"$.-{""abc""}="$.-{"abc"}'
/*
$=/tstCompExprRun/
### start tst tstCompExprRun ######################################
compile @, 3 lines: $=vv=vvRun
run without input
vv=vvRun
o2string($.$vv)=vvRun
$/tstCompExprRun/ */
call tstComp1 '@ tstCompExprRun',
, '$=vv=vvRun' ,
, 'call out "vv="$vv',
, 'call out $"o2string($.$vv)="o2string($.$vv)'
/*
$=/tstCompExprCon/
$/tstCompExprCon/ */
/* wkTst sinnvolle Erweiterung ???
call tstComp1 '# tstCompExprCon',
, '$=vv=vvCon' ,
, 'call out "vv="$vv',
, 'call out $"o2string($.$vv)="o2string($.$vv)'
*/
return
endProcedure tstCompExpr
tstCompStmt: procedure expose m.
/*
$=/tstCompStmt1/
### start tst tstCompStmt1 ########################################
compile @, 8 lines: $= v1 = value eins $= v2 =- 3*5*7 .
run without input
data v1 value eins v2 105
eins
zwei
drei
vier
fuenf
elf
zwoelf dreiZ
. vierZ .
fuenfZ
lang v1 value eins v2 945
oRun ouput 1
$/tstCompStmt1/ */
call pipeIni
call envPutO 'oRun', oRunner('call out "oRun ouput" (1*1)')
call envRemove 'v2'
call tstComp1 '@ tstCompStmt1',
, '$= v1 = value eins $= v2 =- 3*5*7 ',
, '$$ data v1 $v1 v2 ${ v2 }',
, '$$eins $@¢$$ zwei $$ drei ',
, ' $@¢ $! $@{ } $@// $// $@/q r s / $/q r s /',
' $@/eins/ $@¢ $$vier $! $/eins/ $! $$fuenf',
, '$$elf $@=¢$@={ zwoelf dreiZ } ',
, ' $@=¢ $! $@=¢ $@=¢ vierZ $! $! $! $$fuenfZ',
, '$$- "lang v1" $v1 "v2" ${v2}*9',
, '$@$oRun""' /* String am schluss -> $$ "" statment||||| */
/*
$=/tstCompStmt2/
### start tst tstCompStmt2 ########################################
compile @, 1 lines: $@for qq $$ loop qq $qq
run without input
#jIn eof 1#
run with 3 inputs
#jIn 1# eins zwei drei
loop qq eins zwei drei
#jIn 2# zehn elf zwoelf?
loop qq zehn elf zwoelf?
#jIn 3# zwanzig 21 22 23 24 ... 29|
loop qq zwanzig 21 22 23 24 ... 29|
#jIn eof 4#
$/tstCompStmt2/ */
call tstComp1 '@ tstCompStmt2 3',
, '$@for qq $$ loop qq $qq'
/*
$=/tstCompStmt3/
### start tst tstCompStmt3 ########################################
compile @, 9 lines: $$ 1 begin run 1
2 ct zwei
ct 4 mit assign .
run without input
1 begin run 1
3 run 3 ctV = ct 4 assign ctV|
run 5 procCall $@$prCa
out in proc at 8
run 6 vor call $@prCa()
out in proc at 8
9 run end
run with 3 inputs
1 begin run 1
3 run 3 ctV = ct 4 assign ctV|
run 5 procCall $@$prCa
out in proc at 8
run 6 vor call $@prCa()
out in proc at 8
9 run end
$/tstCompStmt3/ */
call tstComp1 '@ tstCompStmt3 3',
, '$$ 1 begin run 1',
, '$@ct $$ 2 ct zwei',
, '$$ 3 run 3 ctV = $ctV|',
, '$@ct $@=¢ct 4 mit assign $=ctV = ct 4 assign ctV $!',
, '$$ run 5 procCall $"$@$prCa" $@$prCa',
, '$$ run 6 vor call $"$@prCa()"',
, '$@prCa()',
, '$@proc prCa $$out in proc at 8',
, '$$ 9 run end'
/*
$=/tstCompStmt4/
### start tst tstCompStmt4 ########################################
compile @, 4 lines: $=eins=vorher
run without input
eins vorher
eins aus named block eins .
$/tstCompStmt4/ */
call tstComp1 '@ tstCompStmt4 0',
, '$=eins=vorher' ,
, '$$ eins $eins' ,
, '$=/eins/aus named block eins $/eins/' ,
, '$$ eins $eins'
/*
$=/tstCompStmtDo/
### start tst tstCompStmtDo #######################################
compile @, 2 lines: ti=0$@do y=3 to 4 $@do 2 $@¢
run without input
y=3 ti1 z=7
y=3 ti1 z=8
y=3 ti2 z=7
y=3 ti2 z=8
y=4 ti3 z=7
y=4 ti3 z=8
y=4 ti4 z=7
y=4 ti4 z=8
$/tstCompStmtDo/ */
call tstComp1 '@ tstCompStmtDo', 'ti=0$@do y=3 to 4 $@do 2 $@¢',
, 'ti = ti + 1',
'$@do $*(sdf$*) z $*(sdf$*) = 7 to 8 $$ y=$y ti$-{ti} z=$z $!'
/*
$=/tstCompStmtDo2/
### start tst tstCompStmtDo2 ######################################
compile @, 7 lines: $$ $-=/sqlSel/
run without input
select 1 abc select 2 abc after table .
$/tstCompStmtDo2/ */
call tstComp1 '@ tstCompStmtDo2',
, '$$ $-=/sqlSel/',
, '$=ty = abc ',
, '$@do tx=1 to 2 $@=/table/',
, 'select $tx $ty',
, '$/table/',
, '$=ty = abc',
, 'after table',
'$/sqlSel/'
return
endProcedure tstCompStmt
tstCompStmtA: procedure expose m.
call pipeIni
/*
$=/tstCompStmtAssAtt/
### start tst tstCompStmtAssAtt ###################################
compile @, 19 lines: call tstCompStmtAA "begin", "tstAssAtt"
run without input
begin tstAssAtt F1=F1val1 F2= F3= FR=
gugus1
ass1 tstAssAtt F1=F1val1 F2=F2ass1 F3=F3ass1 FR=
ass2 tstAssAtt F1=F1val1 F2=F2ass1 F3=F3ass1 FR=<oAAR2>
ass2 tstAssAr2 F1=FRF1ass2 F2= F3= FR=
gugus3
ass3 tstAssAtt F1=F1val1 F2=F2ass3 F3=F3ass1 FR=<oAAR2>
ass3 tstAssAr2 F1=FRF1ass2 F2=FrF2ass3 F3= FR=<oAAR3>
ass3 tstAssAr3 F1=r2F1as3 F2=r2F2as3 F3= FR=
*** err: no field falsch in class tstAssAtt in EnvPut(falsch, +
falsch, 1)
$/tstCompStmtAssAtt/
*/
call classNew 'n? tstAssAtt u f F1 v, f F2 v,' ,
'f F3 v, f FR r tstAssAtt'
call envPutO 'tstAssAtt', oNew('tstAssAtt')
call envPut 'tstAssAtt.F1', 'F1val1'
call tstComp1 '@ tstCompStmtAssAtt',
, 'call tstCompStmtAA "begin", "tstAssAtt"',
, '$=tstAssAtt=:¢F2=F2ass1 $$gugus1',
, 'F3=F3ass1',
, '!',
, 'call tstCompStmtAA "ass1", "tstAssAtt"',
, '$=tstAssAtt.FR.F1 = FRF1ass2',
, '$=tstAssAr2 =. ${tstAssAtt.FR}',
, 'call mAdd T.trans, $.$tstAssAr2 "<oAAR2>"',
, 'call tstCompStmtAA "ass2", "tstAssAtt"',
';call tstCompStmtAA "ass2", "tstAssAr2"',
, '$=tstAssAtt=:¢F2=F2ass3 $$gugus3',
, ':/FR/ F2= FrF2ass3',
, 'FR=:¢F1=r2F1as3',
, 'F2=r2F2as3',
, ' * blabla $$ sdf',
, '!',
, '/FR/ !',
, '$=tstAssAr3 =. ${tstAssAtt.FR.FR}',
, 'call mAdd T.trans, $.$tstAssAr3 "<oAAR3>";',
'call tstCompStmtAA "ass3", "tstAssAtt";',
'call tstCompStmtAA "ass3", "tstAssAr2";',
'call tstCompStmtAA "ass3", "tstAssAr3"',
, '$=tstAssAtt=:¢falsch=falsch$!'
/*
$=/tstCompStmtAsSuTy/
### start tst tstCompStmtAsSuTy ###################################
compile @, 4 lines: call tstCompStmtA2 "begin", "tstAsSuTy"
run without input
begin tstAsSuTy G1=G1ini1 .
_..GT tstAsSuTy F1=GTF1ini1 F2= F3= FR=
as2 tstAsSuTy G1=G1ini1 .
_..GT tstAsSuTy F1=GtF1ass2 F2=F2ass2 F3= FR=
$/tstCompStmtAsSuTy/
*/
call classNew 'n? tstAsSuTy u f G1 v, f GT tstAssAtt'
call envPutO 'tstAsSuTy', oNew('tstAsSuTy')
call envPut 'tstAsSuTy.G1', 'G1ini1'
call envPut 'tstAsSuTy.GT.F1', 'GTF1ini1'
call tstComp1 '@ tstCompStmtAsSuTy',
, 'call tstCompStmtA2 "begin", "tstAsSuTy"',
, '$=tstAsSuTy.GT =:¢F1= GtF1ass2',
, 'F2= F2ass2 $!',
, 'call tstCompStmtA2 "as2", "tstAsSuTy"'
/*
$=/tstCompStmtAssSt/
### start tst tstCompStmtAssSt ####################################
compile @, 13 lines: .
run without input
*** err: bad stem index 1>0 @ <oASt>.HS class <clSt??> in EnvPut(ts+
tAssSt.HS.1.F1, HS.1.ini0, )
begin tstAssSt H1=H1ini1 HS.0=1 .
_..1 tstAssSt. F1=HS.1.ini F2= F3= FR=
ass2 tstAssSt H1=H1ass2 HS.0=1 .
_..1 tstAssSt. F1= F2=hs+f2as2 F3=hs+f3as2 FR=
ass3 tstAssSt H1=H1ass3 HS.0=3 .
_..1 tstAssSt. F1= F2=hs+f2as3 F3= FR=
_..2 tstAssSt. F1= F2= F3= FR=
_..3 tstAssSt. F1= F2= F3=hs+f3as3 FR=
$/tstCompStmtAssSt/
*/
cl = classNew('n? tstAssSt u f H1 v, f HS s tstAssAtt')
cl = m.cl.2
m.tstCl = m.cl.class
call envPutO 'tstAssSt', oNew('tstAssSt')
call oClaClear class4Name('tstAssAtt'), envGetO('tstAssSt')'.HS.1'
call envPut 'tstAssSt.H1', 'H1ini1'
call tstComp1 '@ tstCompStmtAssSt', '',
, "call mAdd t.trans, $.$tstAssSt '<oASt>'",
", m.tstCl '<clSt??>'",
";call envPut 'tstAssSt.HS.1.F1', 'HS.1.ini0'",
";call envPut 'tstAssSt.HS.0', 1",
";call envPut 'tstAssSt.HS.1.F1', 'HS.1.ini1'",
, 'call tstCompStmtSt "begin", "tstAssSt"',
, '$=tstAssSt =:¢H1= H1ass2',
, 'HS =<:¢F2=hs+f2as2',
, 'F3=hs+f3as2$! !' ,
, 'call tstCompStmtSt "ass2", "tstAssSt"',
, '$=tstAssSt =:¢H1= H1ass3',
, 'HS =<:¢F2=hs+f2as3',
, '; ; F3=hs+f3as3',
, ' ! !' ,
, 'call tstCompStmtSt "ass3", "tstAssSt"',
, ''
/*
$=/tstCompStmtAssSR/
### start tst tstCompStmtAssSR ####################################
compile @, 13 lines: .
run without input
*** err: bad stem index 1>0 @ <oASR>.HS class <clSR??> in EnvPut(ts+
tAssSR.HS.1.F1, HS.1.ini0, )
begin tstAssSR H1=H1ini1 HS.0=1 .
_..1 tstAssSR. F1=HS.1.ini F2= F3= FR=
ass2 tstAssSR H1=H1ass2 HS.0=1 .
_..1 tstAssSR. F1= F2=hs+f2as2 F3=hs+f3as2 FR=
ass3 tstAssSR H1=H1ass3 HS.0=3 .
_..1 tstAssSR. F1= F2=hs+f2as3 F3= FR=
_..2 tstAssSR. F1= F2= F3= FR=
_..3 tstAssSR. F1= F2= F3=hs+f3as3 FR=
$/tstCompStmtAssSR/
*/
cl = classNew('n? tstAssSR u f H1 v, f HS s r tstAssAtt')
cl = m.cl.2
m.tstCl = m.cl.class
call envPutO 'tstAssSR', oNew('tstAssSR')
call oClaClear class4Name('tstAssAtt'), envGetO('tstAssSR')'.HS.1'
call envPut 'tstAssSR.H1', 'H1ini1'
call tstComp1 '@ tstCompStmtAssSR', '',
, "call mAdd t.trans, $.$tstAssSR '<oASR>'",
", m.tstCl '<clSR??>'",
";call envPut 'tstAssSR.HS.1.F1', 'HS.1.ini0'",
";call envPut 'tstAssSR.HS.0', 1",
";call envPutO 'tstAssSR.HS.1', ''",
";call envPut 'tstAssSR.HS.1.F1', 'HS.1.ini1'",
, 'call tstCompStmtSt "begin", "tstAssSR"',
, '$=tstAssSR =:¢H1= H1ass2',
, 'HS =<<:¢F2=hs+f2as2',
, 'F3=hs+f3as2$! !' ,
, ';call tstCompStmtSt "ass2", "tstAssSR"',
, '$=tstAssSR =:¢H1= H1ass3',
, 'HS =<:¢F2=hs+f2as3',
, '; ; F3=hs+f3as3',
, ' ! !' ,
, 'call tstCompStmtSt "ass3", "tstAssSR"',
, ''
/*
$=/tstCompStmtassTb/
### start tst tstCompStmtassTb ####################################
compile @, 19 lines: .
run without input
*** err: bad stem index 1>0 @ <oASt>.HS class <clSt??> in EnvPut(ts+
tAssSt.HS.1.F1, HS.1.ini0, )
begin tstAssSt H1=H1ini1 HS.0=1 .
_..1 tstAssSt. F1=HS.1.ini F2= F3= FR=
tstR: @tstWriteoV4 isA :<assCla H1>
tstR: .H1 = H1ass2
ass2 tstAssSt H1=H1ini1 HS.0=2 .
_..1 tstAssSt. F1= F2=hs+f2as2 F3=hs+f3as2 FR=
_..2 tstAssSt. F1= F2=h3+f2as2 F3=h3+f3as2 FR=
ass3 tstAssSt H1=H1ass3 HS.0=3 .
_..1 tstAssSt. F1= F2=f2as3 F3= FR=
_..2 tstAssSt. F1= F2= F3= FR=
_..3 tstAssSt. F1= F2= F3=f3as3 FR=
$/tstCompStmtassTb/
*/
cl = classNew('n? tstAssSt u f H1 v, f HS s tstAssAtt')
cl = m.cl.2
m.tstCl = m.cl.class
call envPutO 'tstAssSt', oNew('tstAssSt')
call oClaClear class4Name('tstAssAtt'), envGetO('tstAssSt')'.HS.1'
call envPut 'tstAssSt.H1', 'H1ini1'
call tstComp1 '@ tstCompStmtassTb', '',
, "call mAdd t.trans, $.$tstAssSt '<oASt>'",
", m.tstCl '<clSt??>'",
";call envPut 'tstAssSt.HS.1.F1', 'HS.1.ini0'",
";call envPut 'tstAssSt.HS.0', 1",
";call envPut 'tstAssSt.HS.1.F1', 'HS.1.ini1'",
, 'call tstCompStmtSt "begin", "tstAssSt"',
, '$=tstAssSt =:¢ $@|¢ H1 ',
, ' H1ass2 ',
, "$@{call mAdd 'T.TRANS', className(objClass(envWithObj()))",
"'<assCla H1>'} $!",
, 'HS =<|¢ $*(...',
, '..$*) F2 F3 ',
, ' hs+f2as2 hs+f3as2 ' ,
, ' * kommentaerliiii ' ,
, ' ' ,
, ' h3+f2as2 h3+f3as22222$! !' ,
, 'call tstCompStmtSt "ass2", "tstAssSt"',
'$=tstAssSt =:¢H1= H1ass3',
, 'HS =<|¢F2 F3',
, ' f2as3' ,
, ' ',
, ' $""',
, ' f3as3 $! !' ,
, 'call tstCompStmtSt "ass3", "tstAssSt"'
/*
$=/tstCompStmtassInp/
### start tst tstCompStmtassInp ###################################
compile @, 11 lines: .
run without input
tstR: @tstWriteoV2 isA :<cla123>
tstR: .eins = l1v1
tstR: .zwei = l1v2
tstR: .drei = l1v3
tstR: @tstWriteoV3 isA :<cla123>
tstR: .eins = l2v1
tstR: .zwei = l2v2
tstR: .drei = l21v3
*** err: undefined variable oo in envGetO(oo)
oo before 0
oo nachher <oo>
tstR: @tstWriteoV5 isA :<cla123>
tstR: .eins = o1v1
tstR: .zwei = o1v2
tstR: .drei = o1v3
$/tstCompStmtassInp/
*/
call envRemove 'oo'
call tstComp1 '@ tstCompStmtassInp', '',
, "$@|¢eins zwei drei ",
, " l1v1 l1v2 l1v3",
, "$@{call mAdd 'T.TRANS', className(objClass(envWithObj()))",
"'<cla123>'}" ,
, " l2v1 l2v2 l21v3",
, "!",
, "$$ oo before $.$oo",
, "$; $>.$oo $@|¢eins zwei drei",
, " o1v1 o1v2 o1v3 $!",
, "$; call mAdd 'T.TRANS', $.$oo '<oo>'",
, "$; $$ oo nachher $.$oo $@$oo"
return
endProcedure tstCompStmtA
tstCompStmtAA: procedure expose m.
parse arg ggTxt, ggN
call out left(ggTxt,8) left(ggN, 9),
'F1='left(envGet(ggN'.F1'), 8),
'F2='left(envGet(ggN'.F2'), 8),
'F3='left(envGet(ggN'.F3'), 8),
'FR='envGetO(ggN'.FR')
return
endSubroutine
tstCompStmtA2: procedure expose m.
parse arg ggTxt, ggN
call out left(ggTxt,8) left(ggN, 9),
'G1='left(envGet(ggN'.G1'), 8)
call tstCompStmtAA '_..GT', ggN'.GT'
return
endSubroutine
tstCompStmtSt: procedure expose m.
parse arg ggTxt, ggN
call out left(ggTxt,8) left(ggN, 9),
'H1='left(envGet(ggN'.H1'), 8),
'HS.0='left(envGet(ggN'.HS.0'), 8)
do sx=1 to envGet(ggN'.HS.0')
call tstCompStmtAA '_..'sx, ggN'.HS.'sx
end
return
endSubroutine tstCompStmtSt
tstCompSyntax: procedure expose m.
call tstCompSynPrimary
call tstCompSynAss
call tstCompSynRun
return
endProcedure tstCompSyntax
tstCompSynPrimary: procedure expose m.
/*
$=/tstCompSynPri1/
### start tst tstCompSynPri1 ######################################
compile @, 1 lines: a $ =
*** err: scanErr pipe or $; expected: compile shell stopped before+
. end of input
. e 1: last token scanPosition $ =
. e 2: pos 3 in line 1: a $ =
$/tstCompSynPri1/ */
call tstComp1 '@ tstCompSynPri1 +', 'a $ ='
/*
$=/tstCompSynPri2/
### start tst tstCompSynPri2 ######################################
compile @, 1 lines: a $. {
*** err: scanErr objRef expected after $. expected
. e 1: last token scanPosition {
. e 2: pos 5 in line 1: a $. {
$/tstCompSynPri2/ */
call tstComp1 '@ tstCompSynPri2 +', 'a $. {'
/*
$=/tstCompSynPri3/
### start tst tstCompSynPri3 ######################################
compile @, 1 lines: b $- ¢ .
*** err: scanErr objRef expected after $- expected
. e 1: last token scanPosition ¢
. e 2: pos 5 in line 1: b $- ¢
$/tstCompSynPri3/ */
call tstComp1 '@ tstCompSynPri3 +', 'b $- ¢ '
/*
$=/tstCompSynPri4/
### start tst tstCompSynPri4 ######################################
compile @, 1 lines: a ${ $*( sdf$*) } =
*** err: scanErr var name expected
. e 1: last token scanPosition } =
. e 2: pos 17 in line 1: a ${ $*( sdf$*) } =
$/tstCompSynPri4/ */
call tstComp1 '@ tstCompSynPri4 +', 'a ${ $*( sdf$*) } ='
/*
$=/tstCompSynFile/
### start tst tstCompSynFile ######################################
compile @, 1 lines: $@.<$*( co1 $*) $$abc
*** err: scanErr block or expr expected for file expected
. e 1: last token scanPosition $$abc
. e 2: pos 17 in line 1: $@.<$*( co1 $*) $$abc
$/tstCompSynFile/ */
call tstComp1 '@ tstCompSynFile +', '$@.<$*( co1 $*) $$abc'
return
endProcedure tstCompSynPrimary
tstCompSynAss: procedure expose m.
/*
$=/tstCompSynAss1/
### start tst tstCompSynAss1 ######################################
compile @, 1 lines: $=
*** err: scanErr assignment expected after $=
. e 1: last token scanPosition .
. e 2: pos 3 in line 1: $=
$/tstCompSynAss1/ */
call tstComp1 '@ tstCompSynAss1 +', '$='
/*
$=/tstCompSynAss2/
### start tst tstCompSynAss2 ######################################
compile @, 2 lines: $= .
*** err: scanErr assignment expected after $=
. e 1: last token scanPosition .
. e 2: pos 6 in line 1: $=
$/tstCompSynAss2/ */
call tstComp1 '@ tstCompSynAss2 +', '$= ', 'eins'
/*
$=/tstCompSynAss3/
### start tst tstCompSynAss3 ######################################
compile @, 2 lines: $= $$
*** err: scanErr assignment expected after $=
. e 1: last token scanPosition $$
. e 2: pos 6 in line 1: $= $$
$/tstCompSynAss3/ */
call tstComp1 '@ tstCompSynAss3 +', '$= $$', 'eins'
/*
$=/tstCompSynAss4/
### start tst tstCompSynAss4 ######################################
compile @, 1 lines: $= eins
*** err: scanErr = expected after $= "eins"
. e 1: last token scanPosition .
. e 2: pos 10 in line 1: $= eins
$/tstCompSynAss4/ */
call tstComp1 '@ tstCompSynAss4 +', '$= eins'
/*
$=/tstCompSynAss5/
### start tst tstCompSynAss5 ######################################
compile @, 1 lines: $= abc eins $$ = x
*** err: scanErr = expected after $= "abc eins"
. e 1: last token scanPosition $$ = x
. e 2: pos 14 in line 1: $= abc eins $$ = x
$/tstCompSynAss5/ */
call tstComp1 '@ tstCompSynAss5 +', '$= abc eins $$ = x'
/*
$=/tstCompSynAss6/
### start tst tstCompSynAss6 ######################################
compile @, 1 lines: $= abc =
*** err: scanErr block or expression after $= "abc" = expected
. e 1: last token scanPosition .
. e 2: pos 10 in line 1: $= abc =
$/tstCompSynAss6/ */
call tstComp1 '@ tstCompSynAss6 +', '$= abc ='
/*
$=/tstCompSynAss7/
### start tst tstCompSynAss7 ######################################
compile @, 1 lines: $= abc =..
*** err: scanErr block or expression after $= "abc" = expected
. e 1: last token scanPosition .
. e 2: pos 11 in line 1: $= abc =..
$/tstCompSynAss7/ */
call tstComp1 '@ tstCompSynAss7 +', '$= abc =.'
return
endProcedure tstCompSynAss
tstCompSynRun: procedure expose m.
/*
$=/tstCompSynRun1/
### start tst tstCompSynRun1 ######################################
compile @, 1 lines: $@
*** err: scanErr block or expr expected after $@ expected
. e 1: last token scanPosition .
. e 2: pos 3 in line 1: $@
$/tstCompSynRun1/ */
call tstComp1 '@ tstCompSynRun1 +', '$@'
/*
$=/tstCompSynRun2/
### start tst tstCompSynRun2 ######################################
compile @, 1 lines: $@=
*** err: scanErr block or expr expected after $@ expected
. e 1: last token scanPosition .
. e 2: pos 4 in line 1: $@=
$/tstCompSynRun2/ */
call tstComp1 '@ tstCompSynRun2 +', '$@='
/*
$=/tstCompSynRun3/
### start tst tstCompSynRun3 ######################################
compile @, 1 lines: $@|
*** err: scanErr block or expr expected after $@ expected
. e 1: last token scanPosition .
. e 2: pos 4 in line 1: $@|
*** err: scanErr comp2code bad fr | to | for @|| .
. e 1: last token scanPosition .
. e 2: pos 4 in line 1: $@|
$/tstCompSynRun3/ */
call tstComp1 '@ tstCompSynRun3 +', '$@|'
/*
$=/tstCompSynFor4/
### start tst tstCompSynFor4 ######################################
compile @, 1 lines: $@for
*** err: scanErr variable name after $@for expected
. e 1: last token scanPosition .
. e 2: pos 6 in line 1: $@for
$/tstCompSynFor4/ */
call tstComp1 '@ tstCompSynFor4 +', '$@for'
/*
$=/tstCompSynFor5/
### start tst tstCompSynFor5 ######################################
compile @, 2 lines: $@for
*** err: scanErr variable name after $@for expected
. e 1: last token scanPosition .
. e 2: pos 6 in line 1: $@for
$/tstCompSynFor5/ */
call tstComp1 '@ tstCompSynFor5 +', '$@for', a
/*
$=/tstCompSynFor6/
### start tst tstCompSynFor6 ######################################
compile @, 2 lines: a
*** err: scanErr variable name after $@for expected
. e 1: last token scanPosition $$q
. e 2: pos 12 in line 2: b $@for $$q
$/tstCompSynFor6/ */
call tstComp1 '@ tstCompSynFor6 +', 'a', ' b $@for $$q'
/*
$=/tstCompSynFor7/
### start tst tstCompSynFor7 ######################################
compile @, 3 lines: a
*** err: scanErr statement after $@for "a" expected
. e 1: last token scanPosition .
. e 2: pos 11 in line 2: b $@for a
$/tstCompSynFor7/ */
call tstComp1 '@ tstCompSynFor7 +', 'a', ' b $@for a', ' $$q'
/*
$=/tstCompSynCt8/
### start tst tstCompSynCt8 #######################################
compile @, 3 lines: a
*** err: scanErr ct statement expected
. e 1: last token scanPosition .
. e 2: pos 8 in line 2: b $@ct
$/tstCompSynCt8/ */
call tstComp1 '@ tstCompSynCt8 +', 'a', ' b $@ct', ' $$q'
/*
$=/tstCompSynProc9/
### start tst tstCompSynProc9 #####################################
compile @, 2 lines: a
*** err: scanErr proc name expected
. e 1: last token scanPosition $$q
. e 2: pos 12 in line 2: b $@proc $$q
$/tstCompSynProc9/ */
call tstComp1 '@ tstCompSynProc9 +', 'a', ' b $@proc $$q'
/*
$=/tstCompSynProcA/
### start tst tstCompSynProcA #####################################
compile @, 2 lines: $@proc p1
*** err: scanErr proc statement expected
. e 1: last token scanPosition .
. e 2: pos 10 in line 1: $@proc p1
$/tstCompSynProcA/ */
call tstComp1 '@ tstCompSynProcA +', '$@proc p1', ' $$q'
/*
$=/tstCompSynCallB/
### start tst tstCompSynCallB #####################################
compile @, 1 lines: $@call (roc p1)
*** err: scanErr procCall, for, do, ct, proc or objRef expected aft+
er $@
. e 1: last token scanPosition (roc p1)
. e 2: pos 7 in line 1: $@call (roc p1)
$/tstCompSynCallB/ */
call tstComp1 '@ tstCompSynCallB +', '$@call (roc p1)'
/*
$=/tstCompSynCallC/
### start tst tstCompSynCallC #####################################
compile @, 1 lines: $@call( roc p1 )
*** err: scanErr closing ) expected after $@call(
. e 1: last token scanPosition roc p1 )
. e 2: pos 9 in line 1: $@call( roc p1 )
$/tstCompSynCallC/ */
call tstComp1 '@ tstCompSynCallC +', '$@call( roc p1 )'
/*
$=/tstCompSynCallD/
### start tst tstCompSynCallD #####################################
compile @, 2 lines: $@call( $** roc
*** err: scanErr closing ) expected after $@call(
. e 1: last token scanPosition .
. e 2: pos 16 in line 1: $@call( $** roc
$/tstCompSynCallD/ */
call tstComp1 '@ tstCompSynCallD +',
,'$@call( $** roc' , ' $*( p1 $*) )'
return
endProcedure tstCompSynRun
tstCompObj: procedure expose m.
call tstReset t
call oIni
cl = classNew('n? tstCompCla u v, f FEINS v, f FZWEI v')
do rx=1 to 10
o = oNew(cl)
m.tstComp.rx = o
m.o = 'o'rx
if rx // 2 = 0 then do
m.o.fEins = 'o'rx'.1'
m.o.fZwei = 'o'rx'.fZwei'rx
end
else do
m.o.fEins = 'o'rx'.fEins'
m.o.fZwei = 'o'rx'.2'
end
call mAdd 'T.TRANS', m.tstComp.rx '<o'rx'>'
end
/*
$=/tstCompObjRef/
### start tst tstCompObjRef #######################################
compile @, 13 lines: o1=m.tstComp.1
run without input
out .$"string" o1
string
out . o1
tstR: @<o1> isA :tstCompCla = o1
tstR: .FEINS = o1.fEins
tstR: .FZWEI = o1.2
out .{ o2 }
tstR: @<o2> isA :tstCompCla = o2
tstR: .FEINS = o2.1
tstR: .FZWEI = o2.fZwei2
out .¢ o3 $!
tstR: @<o3> isA :tstCompCla = o3
tstR: .FEINS = o3.fEins
tstR: .FZWEI = o3.2
out .¢ o4 $!
tstR: @<o4> isA :tstCompCla = o4
tstR: .FEINS = o4.1
tstR: .FZWEI = o4.fZwei4
out ./-/ o5 $/-/
tstR: @<o5> isA :tstCompCla = o5
tstR: .FEINS = o5.fEins
tstR: .FZWEI = o5.2
$/tstCompObjRef/ */
m.ttt=1
call tstComp1 '@ tstCompObjRef' ,
, 'o1=m.tstComp.1',
, 'o2 = m.tstComp.2' ,
, '$$ out $".$""string""" o1 $$.$"string"',
, '$$ out . o1 $$. o1',
, '$$ out .{ o2 } $$.{ o2 }',
, '$$ out .¢ o3 $"$!" $$.¢ ', ' m.tstComp.3 ', ' $!',
, '$$ out .¢ o4 $"$!" $$.¢ ', ' m.tstComp.4 ', ' $!',
, '$$ out ./-/ o5 $"$/-/" $$./-/ m.tstComp.5 ', ' $/-/'
/*
$=/tstCompObjRefPri/
### start tst tstCompObjRefPri ####################################
compile @, 9 lines: $$ out .$"$.{o1}" $$.$.{ m.tstComp.1 }
run without input
out .$.{o1}
tstR: @<o1> isA :tstCompCla = o1
tstR: .FEINS = o1.fEins
tstR: .FZWEI = o1.2
out .$.-{o2}
<o2>
out .$.={o3}
m.tstComp.3
out .$.@{out o4}
tstWriteO kindOf ORun oRun begin <<<
tstR: @<o4> isA :tstCompCla = o4
tstR: .FEINS = o4.1
tstR: .FZWEI = o4.fZwei4
tstWriteO kindOf ORun oRun end >>>
out .$.@¢$$abc $$efg$!
tstWriteO kindOf ORun oRun begin <<<
abc
efg
tstWriteO kindOf ORun oRun end >>>
out .$.@¢o5$!
tstWriteO kindOf ORun oRun begin <<<
tstR: @<o5> isA :tstCompCla = o5
tstR: .FEINS = o5.fEins
tstR: .FZWEI = o5.2
abc
tstWriteO kindOf ORun oRun end >>>
$/tstCompObjRefPri/ */
call tstComp1 '@ tstCompObjRefPri' ,
, '$$ out .$"$.{o1}" $$.$.{ m.tstComp.1 }',
, '$$ out .$"$.-{o2}" $$.$.-{ m.tstComp.2 }',
, '$$ out .$"$.={o3}" $$.$.={ m.tstComp.3 }',
, '$$ out .$"$.@{out o4}" $$.$.@{ call outO m.tstComp.4 }',
, '$$ out .$"$.@¢$$abc $$efg$!" $$.$.@¢ $$abc ', ' ', ' $$efg $!',
, '$$ out .$"$.@¢o5$!" $$.$.@¢ $$.m.tstComp.5', '$$abc $!'
/*
$=/tstCompObjRefFile/
### start tst tstCompObjRefFile ###################################
compile @, 7 lines: $$ out .$".<.¢o1!" $$.$.<.¢ m.tstComp.1 $!
run without input
out ..<.¢o1!
tstWriteO kindOf JRW jWriteNow begin <<<
tstR: @<o1> isA :tstCompCla = o1
tstR: .FEINS = o1.fEins
tstR: .FZWEI = o1.2
tstWriteO kindOf JRW jWriteNow end >>>
out .<$.-{o2}
tstWriteO kindOf JRW jWriteNow begin <<<
tstR: @<o2> isA :tstCompCla = o2
tstR: .FEINS = o2.1
tstR: .FZWEI = o2.fZwei2
tstWriteO kindOf JRW jWriteNow end >>>
out .$.<{o3}
tstWriteO kindOf JRW jWriteNow begin <<<
m.tstComp.3
tstWriteO kindOf JRW jWriteNow end >>>
out .$.<@{out o4}
tstWriteO kindOf JRW jWriteNow begin <<<
tstR: @<o4> isA :tstCompCla = o4
tstR: .FEINS = o4.1
tstR: .FZWEI = o4.fZwei4
tstWriteO kindOf JRW jWriteNow end >>>
out .$<@¢$$abc $$efg$!
tstWriteO kindOf JRW jWriteNow begin <<<
abc
efg
tstWriteO kindOf JRW jWriteNow end >>>
$/tstCompObjRefFile/ */
call tstComp1 '@ tstCompObjRefFile' ,
, '$$ out .$".<.¢o1!" $$.$.<.¢ m.tstComp.1 $!',
, '$$ out .$"<$.-{o2}" $$.$.<.{ m.tstComp.2 }',
, '$$ out .$"$.<{o3}" $$.$.<={ m.tstComp.3 }',
, '$$ out .$"$.<@{out o4}" $$.$.<@{ call outO m.tstComp.4 }',
, '$$ out .$"$<@¢$$abc $$efg$!" $$.$.<@¢ $$abc ', ' ', ' $$efg $!'
/*
$=/tstCompObjFor/
### start tst tstCompObjFor #######################################
compile @, 2 lines: $@do rx=1 to 3 $$. m.tstComp.rx
run without input
FEINS=o1.fEins FZWEI=o1.2
FEINS=o2.1 FZWEI=o2.fZwei2
FEINS=o3.fEins FZWEI=o3.2
$/tstCompObjFor/
*/
call tstComp1 '@ tstCompObjFor' ,
, '$@do rx=1 to 3 $$. m.tstComp.rx' ,
, '$| $@forWith with $$ FEINS=$FEINS FZWEI=$FZWEI'
/*
$=/tstCompObjRun/
### start tst tstCompObjRun #######################################
compile @, 4 lines: $$ out .$"$@¢o1!" $$.$.@¢ $$. m.tstComp.1 $!
run without input
out .$@¢o1!
tstWriteO kindOf ORun oRun begin <<<
tstR: @<o1> isA :tstCompCla = o1
tstR: .FEINS = o1.fEins
tstR: .FZWEI = o1.2
tstWriteO kindOf ORun oRun end >>>
out .$<@¢$$abc $$efg$!
tstWriteO kindOf JRW jWriteNow begin <<<
abc
efg
tstWriteO kindOf JRW jWriteNow end >>>
$/tstCompObjRun/ */
call tstComp1 '@ tstCompObjRun' ,
, '$$ out .$"$@¢o1!" $$.$.@¢ $$. m.tstComp.1 $!',
, '$$ out .$"$<@¢$$abc $$efg$!" $$.$.<@¢ $$abc ', ' ', ' $$efg $!'
m.t.trans.0 = 0
/*
$=/tstCompObj/
### start tst tstCompObj ##########################################
compile @, 6 lines: o1=m.tstComp.1
run without input
out . o1
tstR: @tstWriteoV1 isA :tstCompCla = o1
tstR: .FEINS = o1.fEins
tstR: .FZWEI = o1.2
out .{ o2 }
tstR: @tstWriteoV2 isA :tstCompCla = o2
tstR: .FEINS = o2.1
tstR: .FZWEI = o2.fZwei2
out .¢ o1, o2!
tstR: @tstWriteoV1 isA :tstCompCla = o1
tstR: .FEINS = o1.fEins
tstR: .FZWEI = o1.2
tstR: @tstWriteoV2 isA :tstCompCla = o2
tstR: .FEINS = o2.1
tstR: .FZWEI = o2.fZwei2
$/tstCompObj/ */
call tstComp1 '@ tstCompObj' ,
, 'o1=m.tstComp.1',
, 'o2 = m.tstComp.2' ,
, '$$ out . o1 $$. o1',
, '$$ out .{ o2 } $$.{ o2 }',
, '$$ out .¢ o1, o2!$; $@<.¢ m.tstComp.1 ', ' m.tstComp.2 $!'
return
m.t.trans.0 = 0
endProcedure tstCompObj
tstCompORun: procedure expose m.
/*
$=/tstCompORun/
### start tst tstCompORun #########################################
compile @, 6 lines: $@oRun()
run without input
oRun arg=1, v2=, v3=, v4=
oRun arg=1, v2=, v3=, v4=
oRun arg=2, v2=-{1 arg only} oder?, v3=, v4=
oRun arg=2, v2=!.{1 obj only} oder?, v3=, v4=
oRun arg=3, v2={2 args}, v3=und zwei?, v4=
oRun arg=4, v2={3 args}, v3=zwei, v4=und drei?
$/tstCompORun/ */
call compIni
call envPutO 'oRun', oRunner('parse arg , v2, v3, v4;',
'call tstOut t, "oRun arg="arg()", v2="v2", v3="v3", v4="v4' )
call tstComp1 '@ tstCompORun',
, '$@oRun()', '$@oRun-{}' ,
, ' $@oRun-{$"-{1 arg only}" ''oder?''}' ,
, ' $@oRun.{$".{1 obj only}" ''oder?''} $=v2=zwei' ,
, ' $@oRun-{$"{2 args}", "und" $v2"?"}' ,
, ' $@oRun-{$"{3 args}", $v2, "und drei?"}'
return
endProcedure tstCompORun
tstCompDataIO: procedure expose m.
/*
$=/tstCompDataHereData/
### start tst tstCompDataHereData #################################
compile =, 13 lines: herdata $@#/stop/ .
run without input
. herdata .
heredata 1 $x
heredata 2 $y
nach heredata
. herdata ¢ .
heredata 1 xValue
heredata 2 yValueY
nach heredata ¢
. herdata { .
HEREDATA 1 xValue
heredata 2 yValueY
nach heredata {
$/tstCompDataHereData/ */
call tstComp1 '= tstCompDataHereData',
, ' herdata $@#/stop/ ',
, 'heredata 1 $x',
, 'heredata 2 $y',
, '$/stop/ $$ nach heredata',
, ' herdata ¢ $@=/stop/ ',
, '$=x=xValue$=y=yValueY',
, 'heredata 1 $x',
, 'heredata 2 $y',
, '$/stop/ $$ nach heredata ¢',
, ' herdata { $@/st/',
, '; call out heredata 1 $x',
, '$$heredata 2 $y',
, '$/st/ $$ nach heredata {'
/*
$=/tstCompDataIO/
### start tst tstCompDataIO #######################################
compile =, 5 lines: input 1 $@.<$dsn $*+.
run without input
. input 1 .
readInp line 1 .
readInp line 2 .
. nach dsn input und nochmals mit & .
readInp line 1 .
readInp line 2 .
. und schluiss..
$/tstCompDataIO/ */
dsn = word(tstPdsMbr(tstFilename('lib37', 'r'), 'readInp'), 1)
dsnFB = strip(dsn tstFB('::F37', 0))
b = jBuf(tstFB('readInp line 1', 37),
,tstFB('readInp line 2', 37))
extFd = tstFB('&dsn('dsn') dd(xyz)', 0)
extFd = tstFB(dsn 'dd(xyz) ::f', 0)
if extFd = '' then
extFd = dsn
call jCat file(dsnFB), b
call envPut 'dsn', dsn
say 'dsn' dsn 'extFD' extFD'?'
call tstComp1 '= tstCompDataIO',
, ' input 1 $@.<$dsn $*+',
, tstFB('::f', 0),
, ' nach dsn input und nochmals mit & ' ,
, ' $@.<' extFD,
, ' und schluiss.'
return
endProcedure tstCompDataIO
tstObjVF: procedure expose m.
parse arg v, f
obj = oNew(classNew('n? TstClassVF u v, f FLD1 v'))
m.obj = if(f=='','val='v, v)
m.obj.fld1 = if(f=='','FLD1='v, f)
return obj
endProcedure tstObjVF
tstCompFile: procedure expose m.
/*
$=/tstCompFileBloSrc/
$=vv=value-of-vv
###file from empty # block
$@<#¢
$!
###file from 1 line # block
$@<#¢
the only $ix+1/0 line $vv
$!
###file from 2 line # block
$@<#¢
first line /0 $*+ no comment
second and last line $$ $wie
$!
===file from empty = block
$@<=¢ $*+ comment
$!
===file from 1 line = block
$@<=¢ the only line $!
===file from 2 line = block
$@<=¢ first line$** comment
second and last line $!
---file from empty - block
$@<-/s/
$/s/
---file from 1 line - block
$@<-/s/ the only "line" (1*1) $/s/
---file from 2 line = block
$@<-// first "line" (1+0)
second and "last line" (1+1) $//
...file from empty . block
$@<.¢
$!
...file from 1 line . block
$@<.¢ tstObjVF('v-Eins', '1-Eins') $!
...file from 2 line . block
$@<.¢ tstObjVF('v-Elf', '1-Elf')
tstObjVF('zwoelf') $!
...file from 3 line . block
$@<.¢ tstObjVF('einUndDreissig')
s2o('zweiUndDreissig' o2String($vv))
tstObjVF('dreiUndDreissig') $!
@@@file from empty @ block
$@<@¢
$!
$=noOutput=before
@@@file from nooutput @ block
$@<@¢ nop
$=noOutput = run in block $!
@@@nach noOutput=$noOutput
@@@file from 1 line @ block
$@<@¢ $$. tstObjVF('w-Eins', 'w1-Eins') $!
@@@file from 2 line @ block
$@<@¢ $$.tstObjVF('w-Elf', 'w1-Elf')
y='zwoelf' $$-y $!
@@@file from 3 line @ block
$@<@¢ $$.tstObjVF('w einUndDreissig') $$ +
zweiUndDreissig $$ 33 $vv$!
{{{ empty { block
$@<{ }
{{{ empty { block with comment
$@<{ $*+ abc
}
{{{ one line { block
$@<{ the only $"{...}" line $*+.
$vv }
{{{ one line -{ block
$@<-{ the only $"-{...}" "line" $vv }
{{{ empty #{ block
$@<#{ }
{{{ one line #{ block
$@<#{ the only $"-{...}" "line" $vv ${vv${x}} }
$/tstCompFileBloSrc/ */
/*
$=/tstCompFileBlo/
### start tst tstCompFileBlo ######################################
compile =, 70 lines: $=vv=value-of-vv
run without input
###file from empty # block
###file from 1 line # block
the only $ix+1/0 line $vv
###file from 2 line # block
first line /0 $*+ no comment
second and last line $$ $wie
===file from empty = block
===file from 1 line = block
. the only line .
===file from 2 line = block
. first line
second and last line .
---file from empty - block
---file from 1 line - block
THE ONLY line 1
---file from 2 line = block
FIRST line 1
SECOND AND last line 2
...file from empty . block
...file from 1 line . block
tstR: @tstWriteoV1 isA :TstClassVF = v-Eins
tstR: .FLD1 = 1-Eins
...file from 2 line . block
tstR: @tstWriteoV2 isA :TstClassVF = v-Elf
tstR: .FLD1 = 1-Elf
tstR: @tstWriteoV3 isA :TstClassVF = val=zwoelf
tstR: .FLD1 = FLD1=zwoelf
...file from 3 line . block
tstR: @tstWriteoV4 isA :TstClassVF = val=einUndDreissig
tstR: .FLD1 = FLD1=einUndDreissig
zweiUndDreissig value-of-vv
tstR: @tstWriteoV5 isA :TstClassVF = val=dreiUndDreissig
tstR: .FLD1 = FLD1=dreiUndDreissig
@@@file from empty @ block
@@@file from nooutput @ block
@@@nach noOutput=run in block
@@@file from 1 line @ block
tstR: @tstWriteoV6 isA :TstClassVF = w-Eins
tstR: .FLD1 = w1-Eins
@@@file from 2 line @ block
tstR: @tstWriteoV7 isA :TstClassVF = w-Elf
tstR: .FLD1 = w1-Elf
zwoelf
@@@file from 3 line @ block
tstR: @tstWriteoV8 isA :TstClassVF = val=w einUndDreissig
tstR: .FLD1 = FLD1=w einUndDreissig
zweiUndDreissig
33 value-of-vv
{{{ empty { block
{{{ empty { block with comment
{{{ one line { block
the only {...} line value-of-vv
{{{ one line -{ block
THE ONLY -{...} line value-of-vv
{{{ empty #{ block
. .
{{{ one line #{ block
. the only $"-{...}" "line" $vv ${vv${x}} .
$/tstCompFileBlo/ */
call tstComp2 'tstCompFileBlo', '='
m.t.trans.0 = 0
/*
$=/tstCompFileObjSrc/
$=vv=value-vv-1
$=fE=<¢ $!
$=f2=.$.<.¢s2o("f2 line 1" o2String($vv))
tstObjVF("f2 line2") $!
---empty file $"$@<$fE"
$@$fE
---file with 2 lines $"$@<$f2"
$@<.$f2
$=vv=value-vv-2
---file with 2 lines $"$@<$f2"
$@<.$f2
$= dsn =- word(tstPdsMbr(tstFilename('libvb', 'r'), 'fileObj'),1) +
tstFB('::V', 0)
$@¢
fi=jOpen(file($dsn),'>')
call jWrite fi, 'line one on' $"$dsn"
call jWrite fi, 'line two on' $"$dsn"
call jClose fi
$!
---file on disk out
$@.<$dsn
$/tstCompFileObjSrc/ */
/*
$=/tstCompFileObj/
### start tst tstCompFileObj ######################################
compile =, 20 lines: $=vv=value-vv-1
run without input
---empty file $@<$fE
---file with 2 lines $@<$f2
f2 line 1 value-vv-1
tstR: @tstWriteoV1 isA :TstClassVF = val=f2 line2
tstR: .FLD1 = FLD1=f2 line2
---file with 2 lines $@<$f2
f2 line 1 value-vv-1
tstR: @tstWriteoV1 isA :TstClassVF = val=f2 line2
tstR: .FLD1 = FLD1=f2 line2
---file on disk out
line one on $dsn
line two on $dsn
$/tstCompFileObj/ */
call tstComp2 'tstCompFileObj', '='
return
endProcedure tstCompFile
tstCompPipe: procedure expose m.
/*
$=/tstCompPipe1/
### start tst tstCompPipe1 ########################################
compile @, 1 lines: call pipePreSuf "(1 ", " 1)"
run without input
#jIn eof 1#
run with 3 inputs
#jIn 1# eins zwei drei
(1 eins zwei drei 1)
#jIn 2# zehn elf zwoelf?
(1 zehn elf zwoelf? 1)
#jIn 3# zwanzig 21 22 23 24 ... 29|
(1 zwanzig 21 22 23 24 ... 29| 1)
#jIn eof 4#
$/tstCompPipe1/ */
call tstComp1 '@ tstCompPipe1 3',
, ' call pipePreSuf "(1 ", " 1)"'
/*
$=/tstCompPipe2/
### start tst tstCompPipe2 ########################################
compile @, 2 lines: call pipePreSuf "(1 ", " 1)"
run without input
#jIn eof 1#
run with 3 inputs
#jIn 1# eins zwei drei
#jIn 2# zehn elf zwoelf?
#jIn 3# zwanzig 21 22 23 24 ... 29|
#jIn eof 4#
¢2 (1 eins zwei drei 1) 2!
¢2 (1 zehn elf zwoelf? 1) 2!
¢2 (1 zwanzig 21 22 23 24 ... 29| 1) 2!
$/tstCompPipe2/ */
call tstComp1 '@ tstCompPipe2 3',
, ' call pipePreSuf "(1 ", " 1)"' ,
, ' $| call pipePreSuf "¢2 ", " 2!"'
/*
$=/tstCompPipe3/
### start tst tstCompPipe3 ########################################
compile @, 3 lines: call pipePreSuf "(1 ", " 1)"
run without input
#jIn eof 1#
run with 3 inputs
#jIn 1# eins zwei drei
#jIn 2# zehn elf zwoelf?
#jIn 3# zwanzig 21 22 23 24 ... 29|
#jIn eof 4#
<3 ¢2 (1 eins zwei drei 1) 2! 3>
<3 ¢2 (1 zehn elf zwoelf? 1) 2! 3>
<3 ¢2 (1 zwanzig 21 22 23 24 ... 29| 1) 2! 3>
$/tstCompPipe3/ */
call tstComp1 '@ tstCompPipe3 3',
, ' call pipePreSuf "(1 ", " 1)"' ,
, ' $| call pipePreSuf "¢2 ", " 2!"',
, ' $| call pipePreSuf "<3 ", " 3>"'
/*
$=/tstCompPipe4/
### start tst tstCompPipe4 ########################################
compile @, 7 lines: call pipePreSuf "(1 ", " 1)"
run without input
#jIn eof 1#
run with 3 inputs
#jIn 1# eins zwei drei
#jIn 2# zehn elf zwoelf?
#jIn 3# zwanzig 21 22 23 24 ... 29|
#jIn eof 4#
<3 ¢222 ¢221 ¢21 ¢20 (1 eins zwei drei 1) 20! 21! 221! 222! 3>
<3 ¢222 ¢221 ¢21 ¢20 (1 zehn elf zwoelf? 1) 20! 21! 221! 222! 3>
<3 ¢222 ¢221 ¢21 ¢20 (1 zwanzig 21 22 23 24 ... 29| 1) 20! 21! 221!+
. 222! 3>
$/tstCompPipe4/ */
call tstComp1 '@ tstCompPipe4 3',
, ' call pipePreSuf "(1 ", " 1)"' ,
, ' $| $@¢ call pipePreSuf "¢20 ", " 20!"',
, ' $| call pipePreSuf "¢21 ", " 21!"',
, ' $| $@¢ call pipePreSuf "¢221 ", " 221!"',
, ' $| call pipePreSuf "¢222 ", " 222!"',
, '$! $! ',
, ' $| call pipePreSuf "<3 ", " 3>"'
return
endProcedure tstCompPipe
tstCompRedir: procedure expose m.
/*
$=/tstCompRedir/
### start tst tstCompRedir ########################################
compile @, 6 lines: $>.$eins $@for vv $$ <$vv> $; .
run without input
#jIn eof 1#
output eins .
output piped zwei .
run with 3 inputs
#jIn 1# eins zwei drei
#jIn 2# zehn elf zwoelf?
#jIn 3# zwanzig 21 22 23 24 ... 29|
#jIn eof 4#
output eins <eins zwei drei> <zehn elf zwoelf?> <zwanzig 21 22 23 2+
4 ... 29|>
output piped zwei ab<eins zwei drei>yz ab<zehn elf zwoelf?>yz ab<zw+
anzig 21 22 23 24 ... 29|>yz
$/tstCompRedir/ */
call pipeIni
call envRemove 'eins' /* alte Variable loswerden */
dsn = word(tstPdsMbr(tstFilename('libvb', 'r'), 'redir1'), 1)
call envPut 'dsn', dsn
call tstComp1 '@ tstCompRedir 3' ,
, ' $>.$eins $@for vv $$ <$vv> $; ',
, ' $$ output eins $-=¢$@$eins$!$; ',
, ' $@for ww $$b${ww}y ',
, ' $>$-{ $dsn } 'tstFB('::v', 0),
, '$| call pipePreSuf "a", "z" $<.$eins',
, ' $; $$ output piped zwei $-=¢$@<$dsn$! '
return
endProcedure tstCompRedir
tstCompComp: procedure expose m.
/*
$=/tstCompCompShell/
### start tst tstCompCompShell ####################################
compile @, 5 lines: $$compiling shell $; $= rrr =. $.compile@ $<#/+
aaa/
run without input
compiling shell
running einmal
RUN 1 COMPILED einmal
#jIn eof 1#
running zweimal
RUN 1 COMPILED zweimal
#jIn eof 2#
run with 3 inputs
compiling shell
running einmal
RUN 1 COMPILED einmal
#jIn 1# eins zwei drei
compRun eins zwei dreieinmal
#jIn 2# zehn elf zwoelf?
compRun zehn elf zwoelf?einmal
#jIn 3# zwanzig 21 22 23 24 ... 29|
compRun zwanzig 21 22 23 24 ... 29|einmal
#jIn eof 4#
running zweimal
RUN 1 COMPILED zweimal
#jIn eof 5#
$/tstCompCompShell/ */
call tstComp1 '@ tstCompCompShell 3',
, "$$compiling shell $; $= rrr =. $.compile@ $<#/aaa/",
, "call out run 1*1*1 compiled $cc; $@for v $$ compRun $v$cc",
, "$/aaa/ $;",
, "$=cc=einmal $$ running $cc $@$rrr",
, "$=cc=zweimal $$ running $cc $@$rrr"
/*
$=/tstCompCompData/
### start tst tstCompCompData #####################################
compile @, 5 lines: $$compiling data $; $= rrr =. $.compile= +
$<#/aaa/
run without input
compiling data
running einmal
call out run 1*1*1 compiled einmal
running zweimal
call out run 1*1*1 compiled zweimal
run with 3 inputs
compiling data
running einmal
call out run 1*1*1 compiled einmal
running zweimal
call out run 1*1*1 compiled zweimal
$/tstCompCompData/ */
call tstComp1 '@ tstCompCompData 3',
, "$$compiling data $; $= rrr =. $.compile= $<#/aaa/",
, "call out run 1*1*1 compiled $cc",
, "$/aaa/ $;",
, "$=cc=einmal $$ running $cc $@$rrr",
, "$=cc=zweimal $$ running $cc $@$rrr"
return
endProcedure tstCompComp
tstCompDir: procedure expose m.
/*
$=/tstCompDirSrc/
'in src v1='$v1
$#@ call out 'src @ out v1='$v1
$#. s2o('src . v1=')
$v1
$#- 'src - v1='$v1
$#= src = v1=$v1
$/tstCompDirSrc/ */
/*
$=/tstCompDir/
### start tst tstCompDir ##########################################
compile call out 'before v1='$v1 $=v1=eins $#. s2o('. v1='$-$v1) $#+
@ call out '@ v1='$v1 $#= = v1=$v1 $#- '- v1='$v1, 6 lines: 'in src+
. v1='$v1
run without input
before v1=v1Before
.. v1=eins
@ v1=eins
. = v1=eins .
- v1=eins
in src v1=eins
src @ out v1=eins
src . v1=
eins
src - v1=eins
. src = v1=eins
$/tstCompDir/ */
call envPut 'v1', 'v1Before'
call tstComp2 'tstCompDir', "call out 'before v1='$v1 $=v1=eins" ,
"$#. s2o('. v1='$-$v1) $#@ call out '@ v1='$v1" ,
"$#= = v1=$v1 $#- '- v1='$v1"
/*
$=/tstCompDirPiSrc/
zeile 1 v1=$v1
zweite Zeile vor $"$@$#-"
$@pi2()
$#pi2#-
$'zeile drei nach $@$#- v1='v1
vierte und letzte Zeile
$/tstCompDirPiSrc/ */
/*
$=/tstCompDirPi/
### start tst tstCompDirPi ########################################
compile call pipePreSuf '<','>' $=v1=eiPi $<.$pi $#pi#=, 6 lines: +
zeile 1 v1=$v1
run without input
<zeile 1 v1=eins>
<zweite Zeile vor $@$#->
<zeile drei nach $@$#- v1=V1>
<VIERTE UND LETZTE ZEILE>
$/tstCompDirPi/ */
call tstComp2 'tstCompDirPi',
, "call pipePreSuf '<','>' $=v1=eiPi $<.$pi $#pi#="
return
endProcedure tstCompDir
tstCompSql: procedure expose m.
/*
$=/tstCompSqlSrc/
$@=¢
select strip(creator) cr, strip(name) tb,
(row_number()over())*(row_number()over()) rr
from sysibm.sysTables
where creator='SYSIBM' and name like 'SYSTABL%'
order by 2 fetch first 4 rows only
$!
$| call sqlSel
$| call fmtFTab abc
$/tstCompSqlSrc/
$=/tstCompSql/
### start tst tstCompSql ##########################################
compile @, 9 lines: $@=¢
run without input
CR TB RR
SYSIBM SYSTABLEPART 1
SYSIBM SYSTABLEPART_HIST 4
SYSIBM SYSTABLES 9
SYSIBM SYSTABLESPACE 16
$/tstCompSql/
*/
call sqlConnect
call tstComp2 'tstCompSql', '@'
return
endProcedure tstCompFile
tstTut0: procedure expose m.
/*
$=/tstTut01Src/
$#=
$*+>.fSub() Kommentar
$*+>~tmp.jcl(t) Kommentar
$*+@=¢ Kommentar
$=subsys=DBAF
$=db=DA540769
$=ts=A977A
$*+@<~wk.jcl(jc) Kommentar
??* -{sysvar(sysnode) date() time()} ts=$ts 10*len=$-{length($ts) * 10}
//P02 EXEC PGM=DSNUTILB,
// PARM='$subsys,A540769C.FULCOPL'
//SYSPRINT DD SYSOUT=*
//UTPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSTEMPL DD DSN=$subsys.DBAA.LISTDEF(TEMPL),DISP=SHR
//SYSIN DD *
LISTDEF C#LIST
INCLUDE TABLESPACE $db.$ts* PARTLEVEL
OPTIONS EVENT(ITEMERROR, SKIP)
COPY LIST C#LIST COPYDDN(TCOPYD)
$@¢if right($ts, 2) == '7A' then $@=¢
FULL YES
$! else
$$ $'' FULL NO
$!
SHRLEVEL CHANGE
$*+! Kommentar
$#out 20130224 11:48:24
$/tstTut01Src/
$=/tstTut01/
### start tst tstTut01 ############################################
compile , 28 lines: $#=
run without input
??* -{sysvar(sysnode) date() time()} ts=A977A 10*len=50
//P02 EXEC PGM=DSNUTILB,
// PARM='DBAF,A540769C.FULCOPL'
//SYSPRINT DD SYSOUT=*
//UTPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSTEMPL DD DSN=DBAF.DBAA.LISTDEF(TEMPL),DISP=SHR
//SYSIN DD *
LISTDEF C#LIST
INCLUDE TABLESPACE DA540769.A977A* PARTLEVEL
OPTIONS EVENT(ITEMERROR, SKIP)
COPY LIST C#LIST COPYDDN(TCOPYD)
FULL YES
SHRLEVEL CHANGE
$/tstTut01/
$=/tstTut02Src/
$#@
$**>.fSub()
$**@¢
$=subsys=DBAF
$=db=DA540769
$=jx=0
$@do tx = 976 to 977 $@=¢
$=ts=A$tx
$=jx=-$jx+1
//A540769$jx JOB (CP00,KE50),'DB2 REO',
// MSGCLASS=T,TIME=1440,
// NOTIFY=&SYSUID,REGION=0M
//C$ts EXEC PGM=DSNUTILB,
// PARM='$subsys,A540769$jx.FULCOPL'
//SYSPRINT DD SYSOUT=*
//UTPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSTEMPL DD DSN=$subsys.DBAA.LISTDEF(TEMPL),DISP=SHR
//SYSIN DD *
LISTDEF C#LIST
INCLUDE TABLESPACE $db.$ts* PARTLEVEL
OPTIONS EVENT(ITEMERROR, SKIP)
COPY LIST C#LIST COPYDDN(TCOPYD)
PARALLEL
SHRLEVEL CHANGE
$!
$**!
$#out 20101229 13
$/tstTut02Src/
$=/tstTut02/
### start tst tstTut02 ############################################
compile , 28 lines: $#@
run without input
//A5407691 JOB (CP00,KE50),'DB2 REO',
// MSGCLASS=T,TIME=1440,
// NOTIFY=&SYSUID,REGION=0M
//CA976 EXEC PGM=DSNUTILB,
// PARM='DBAF,A5407691.FULCOPL'
//SYSPRINT DD SYSOUT=*
//UTPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSTEMPL DD DSN=DBAF.DBAA.LISTDEF(TEMPL),DISP=SHR
//SYSIN DD *
LISTDEF C#LIST
INCLUDE TABLESPACE DA540769.A976* PARTLEVEL
OPTIONS EVENT(ITEMERROR, SKIP)
COPY LIST C#LIST COPYDDN(TCOPYD)
PARALLEL
SHRLEVEL CHANGE
//A5407692 JOB (CP00,KE50),'DB2 REO',
// MSGCLASS=T,TIME=1440,
// NOTIFY=&SYSUID,REGION=0M
//CA977 EXEC PGM=DSNUTILB,
// PARM='DBAF,A5407692.FULCOPL'
//SYSPRINT DD SYSOUT=*
//UTPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSTEMPL DD DSN=DBAF.DBAA.LISTDEF(TEMPL),DISP=SHR
//SYSIN DD *
LISTDEF C#LIST
INCLUDE TABLESPACE DA540769.A977* PARTLEVEL
OPTIONS EVENT(ITEMERROR, SKIP)
COPY LIST C#LIST COPYDDN(TCOPYD)
PARALLEL
SHRLEVEL CHANGE
$/tstTut02/
$=/tstTut03Src/
$#@
$=subsys=DBAF
$@|¢
db ts
DGDB9998 A976
DA540769 A977
!
$** $| call fmtFTab
$** $#end
$|
$=jx=0
$@forWith o $@=¢
$=jx=-$jx+1
//A540769$jx JOB (CP00,KE50),'DB2 REO',
// MSGCLASS=T,TIME=1440,
// NOTIFY=&SYSUID,REGION=0M
//C$ts EXEC PGM=DSNUTILB,
// PARM='$subsys,A540769$jx.FULCOPL'
//SYSPRINT DD SYSOUT=*
//UTPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSTEMPL DD DSN=$subsys.DBAA.LISTDEF(TEMPL),DISP=SHR
//SYSIN DD *
LISTDEF C#LIST
INCLUDE TABLESPACE $db.$ts* PARTLEVEL
OPTIONS EVENT(ITEMERROR, SKIP)
COPY LIST C#LIST COPYDDN(TCOPYD)
PARALLEL
SHRLEVEL CHANGE
$!
$#out
$/tstTut03Src/
$=/tstTut03/
### start tst tstTut03 ############################################
compile , 31 lines: $#@
run without input
//A5407691 JOB (CP00,KE50),'DB2 REO',
// MSGCLASS=T,TIME=1440,
// NOTIFY=&SYSUID,REGION=0M
//CA976 EXEC PGM=DSNUTILB,
// PARM='DBAF,A5407691.FULCOPL'
//SYSPRINT DD SYSOUT=*
//UTPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSTEMPL DD DSN=DBAF.DBAA.LISTDEF(TEMPL),DISP=SHR
//SYSIN DD *
LISTDEF C#LIST
INCLUDE TABLESPACE DGDB9998.A976* PARTLEVEL
OPTIONS EVENT(ITEMERROR, SKIP)
COPY LIST C#LIST COPYDDN(TCOPYD)
PARALLEL
SHRLEVEL CHANGE
//A5407692 JOB (CP00,KE50),'DB2 REO',
// MSGCLASS=T,TIME=1440,
// NOTIFY=&SYSUID,REGION=0M
//CA977 EXEC PGM=DSNUTILB,
// PARM='DBAF,A5407692.FULCOPL'
//SYSPRINT DD SYSOUT=*
//UTPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSTEMPL DD DSN=DBAF.DBAA.LISTDEF(TEMPL),DISP=SHR
//SYSIN DD *
LISTDEF C#LIST
INCLUDE TABLESPACE DA540769.A977* PARTLEVEL
OPTIONS EVENT(ITEMERROR, SKIP)
COPY LIST C#LIST COPYDDN(TCOPYD)
PARALLEL
SHRLEVEL CHANGE
$/tstTut03/
$=/tstTut04Src/
$#@
$=subsys=DBAF
$=db=DA540769
call sqlConnect $subsys
$@=¢ select dbName db , tsName ts
from sysibm.sysTables
where creator = 'SYSIBM' and name like 'SYSINDEXPAR%'
order by name desc
$!
$| call sqlSel
$** $| call fmtFTab
$** $#end
$|
$=jx=0
$@forWith o $@=¢
$=jx=-$jx+1
//A540769$jx JOB (CP00,KE50),'DB2 REO',
// MSGCLASS=T,TIME=1440,
// NOTIFY=&SYSUID,REGION=0M
//C$TS EXEC PGM=DSNUTILB,
// PARM='$subsys,A540769$jx.FULCOPL'
//SYSPRINT DD SYSOUT=*
//UTPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSTEMPL DD DSN=$subsys.DBAA.LISTDEF(TEMPL),DISP=SHR
//SYSIN DD *
LISTDEF C#LIST
INCLUDE TABLESPACE $DB.$TS* PARTLEVEL
OPTIONS EVENT(ITEMERROR, SKIP)
COPY LIST C#LIST COPYDDN(TCOPYD)
PARALLEL
SHRLEVEL CHANGE
$!
call sqlDisConnect
$#out 20101229
$/tstTut04Src/
$=/tstTut04/
### start tst tstTut04 ############################################
compile , 35 lines: $#@
run without input
//A5407691 JOB (CP00,KE50),'DB2 REO',
// MSGCLASS=T,TIME=1440,
// NOTIFY=&SYSUID,REGION=0M
//CSYSHIST EXEC PGM=DSNUTILB,
// PARM='DBAF,A5407691.FULCOPL'
//SYSPRINT DD SYSOUT=*
//UTPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSTEMPL DD DSN=DBAF.DBAA.LISTDEF(TEMPL),DISP=SHR
//SYSIN DD *
LISTDEF C#LIST
INCLUDE TABLESPACE DSNDB06 .SYSHIST * PARTLEVEL
OPTIONS EVENT(ITEMERROR, SKIP)
COPY LIST C#LIST COPYDDN(TCOPYD)
PARALLEL
SHRLEVEL CHANGE
//A5407692 JOB (CP00,KE50),'DB2 REO',
// MSGCLASS=T,TIME=1440,
// NOTIFY=&SYSUID,REGION=0M
//CSYSTSIPT EXEC PGM=DSNUTILB,
// PARM='DBAF,A5407692.FULCOPL'
//SYSPRINT DD SYSOUT=*
//UTPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSTEMPL DD DSN=DBAF.DBAA.LISTDEF(TEMPL),DISP=SHR
//SYSIN DD *
LISTDEF C#LIST
INCLUDE TABLESPACE DSNDB06 .SYSTSIPT* PARTLEVEL
OPTIONS EVENT(ITEMERROR, SKIP)
COPY LIST C#LIST COPYDDN(TCOPYD)
PARALLEL
SHRLEVEL CHANGE
$/tstTut04/
$=/tstTut05Src/
$#@
$=subsys = dbaf
$=lst=<:¢
db = DGDB9998
ts =<|¢
ts
A976
A977
!;
db = DA540769
<|/ts/
ts
A976
A975
/ts/
!
$** $$. $lst
$** $@ct $@¢$=tool =. $.compile@ $<~.wk.rexx(wshtut06)$!
$** $@$tool
$@do sx=1 to ${lst.0} $@¢
$=db = ${lst.$sx.db}
$** $$. ${lst.$sx}
$@do tx=1 to ${lst.$sx.ts.0} $@=¢
$*+ $$. ${lst.$sx.ts.$tx}
$=ts= ${lst.$sx.ts.$tx.ts}
$@¢ say $-=¢subsys $subsys db $db ts $ts $! $!
$@copy()
$!
$!
$@ct $@¢
cl = classNew('n? DbTsList u s' ,
classNew('n? DbTs u f db v, f ts s' ,
classNew('n? Ts u f ts v')))
$=lst=. oNew(cl)
$!
$@proc copy $@=¢
$@ct $=jx=0
$=jx=-$jx+1
//A540769$jx JOB (CP00,KE50),'DB2 REO',
// MSGCLASS=T,TIME=1440,
// NOTIFY=&SYSUID,REGION=0M
//C$ts EXEC PGM=DSNUTILB,
// PARM='$subsys,A540769$jx.FULCOPL'
//SYSPRINT DD SYSOUT=*
//UTPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSTEMPL DD DSN=$subsys.DBAA.LISTDEF(TEMPL),DISP=SHR
//SYSIN DD *
LISTDEF C#LIST
INCLUDE TABLESPACE $db.$ts* PARTLEVEL
OPTIONS EVENT(ITEMERROR, SKIP)
COPY LIST C#LIST COPYDDN(TCOPYD)
PARALLEL
SHRLEVEL CHANGE
$!
$#out 201012
$/tstTut05Src/
$=/tstTut05/
### start tst tstTut05 ############################################
compile , 56 lines: $#@
run without input
//A5407691 JOB (CP00,KE50),'DB2 REO',
// MSGCLASS=T,TIME=1440,
// NOTIFY=&SYSUID,REGION=0M
//CA976 EXEC PGM=DSNUTILB,
// PARM='dbaf,A5407691.FULCOPL'
//SYSPRINT DD SYSOUT=*
//UTPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSTEMPL DD DSN=dbaf.DBAA.LISTDEF(TEMPL),DISP=SHR
//SYSIN DD *
LISTDEF C#LIST
INCLUDE TABLESPACE DGDB9998.A976* PARTLEVEL
OPTIONS EVENT(ITEMERROR, SKIP)
COPY LIST C#LIST COPYDDN(TCOPYD)
PARALLEL
SHRLEVEL CHANGE
//A5407692 JOB (CP00,KE50),'DB2 REO',
// MSGCLASS=T,TIME=1440,
// NOTIFY=&SYSUID,REGION=0M
//CA977 EXEC PGM=DSNUTILB,
// PARM='dbaf,A5407692.FULCOPL'
//SYSPRINT DD SYSOUT=*
//UTPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSTEMPL DD DSN=dbaf.DBAA.LISTDEF(TEMPL),DISP=SHR
//SYSIN DD *
LISTDEF C#LIST
INCLUDE TABLESPACE DGDB9998.A977* PARTLEVEL
OPTIONS EVENT(ITEMERROR, SKIP)
COPY LIST C#LIST COPYDDN(TCOPYD)
PARALLEL
SHRLEVEL CHANGE
//A5407693 JOB (CP00,KE50),'DB2 REO',
// MSGCLASS=T,TIME=1440,
// NOTIFY=&SYSUID,REGION=0M
//CA976 EXEC PGM=DSNUTILB,
// PARM='dbaf,A5407693.FULCOPL'
//SYSPRINT DD SYSOUT=*
//UTPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSTEMPL DD DSN=dbaf.DBAA.LISTDEF(TEMPL),DISP=SHR
//SYSIN DD *
LISTDEF C#LIST
INCLUDE TABLESPACE DA540769.A976* PARTLEVEL
OPTIONS EVENT(ITEMERROR, SKIP)
COPY LIST C#LIST COPYDDN(TCOPYD)
PARALLEL
SHRLEVEL CHANGE
//A5407694 JOB (CP00,KE50),'DB2 REO',
// MSGCLASS=T,TIME=1440,
// NOTIFY=&SYSUID,REGION=0M
//CA975 EXEC PGM=DSNUTILB,
// PARM='dbaf,A5407694.FULCOPL'
//SYSPRINT DD SYSOUT=*
//UTPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSTEMPL DD DSN=dbaf.DBAA.LISTDEF(TEMPL),DISP=SHR
//SYSIN DD *
LISTDEF C#LIST
INCLUDE TABLESPACE DA540769.A975* PARTLEVEL
OPTIONS EVENT(ITEMERROR, SKIP)
COPY LIST C#LIST COPYDDN(TCOPYD)
PARALLEL
SHRLEVEL CHANGE
$/tstTut05/
tstTut06 ==> platz für copy aus tut05
$=/tstTut07Src/
$**$>.fEdit()
call sqlConnect dbtf
$@|¢ ts
VTCASHFLOW
VTCASHFLOWAMOUNT
VTINSTRFLATDATA
$!
$| $@=¢
select name, statstime, strip(dbName) || '.' || strip(tsName) dbts
from sysibm.sysTables
where creator = 'VDPS2' and name in
$=co=(
$@forWith t $@=¢
$co '$ts'
$=co=,
$!
)
$!
$| call sqlSel
$** $| call fmtFtab
$|
$=jx=0
$@forWith t $@=¢
$=jx=-$jx+1
//A540769$jx JOB (CP00,KE50),
// 'CATALOG',MSGCLASS=T,TIME=1440,
// NOTIFY=&SYSUID,REGION=0M
//STEP$jx EXEC PGM=DSNUTILB,TIME=1440,
// PARM=(DBTF,'A540769$jx.RUNSTA'),
// REGION=0M
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//UTPRINT DD SYSOUT=*
//SYSOUT DD SYSOUT=*
//RNPRIN01 DD SYSOUT=*
//SYSIN DD *
LISTDEF LST#STA INCLUDE TABLESPACE $DBTS
OPTIONS EVENT (ITEMERROR, SKIP)
RUNSTATS TABLESPACE LIST LST#STA
SHRLEVEL CHANGE
INDEX(ALL KEYCARD)
REPORT YES UPDATE ALL
$!
call sqlDisconnect dbaf
$#out 20101231 11:56:23
$/tstTut07Src/
$=/tstTut07/
$=/tstTut07/
### start tst tstTut07 ############################################
compile , 46 lines: $**$>.fEdit()
run without input
//A5407691 JOB (CP00,KE50),
// 'CATALOG',MSGCLASS=T,TIME=1440,
// NOTIFY=&SYSUID,REGION=0M
//STEP1 EXEC PGM=DSNUTILB,TIME=1440,
// PARM=(DBTF,'A5407691.RUNSTA'),
// REGION=0M
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//UTPRINT DD SYSOUT=*
//SYSOUT DD SYSOUT=*
//RNPRIN01 DD SYSOUT=*
//SYSIN DD *
LISTDEF LST#STA INCLUDE TABLESPACE VV27A1T.VDPS329
OPTIONS EVENT (ITEMERROR, SKIP)
..
RUNSTATS TABLESPACE LIST LST#STA
SHRLEVEL CHANGE
INDEX(ALL KEYCARD)
REPORT YES UPDATE ALL
//A5407692 JOB (CP00,KE50),
// 'CATALOG',MSGCLASS=T,TIME=1440,
// NOTIFY=&SYSUID,REGION=0M
//STEP2 EXEC PGM=DSNUTILB,TIME=1440,
// PARM=(DBTF,'A5407692.RUNSTA'),
// REGION=0M
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//UTPRINT DD SYSOUT=*
//SYSOUT DD SYSOUT=*
//RNPRIN01 DD SYSOUT=*
//SYSIN DD *
LISTDEF LST#STA INCLUDE TABLESPACE VV28A1T.VDPS390
OPTIONS EVENT (ITEMERROR, SKIP)
..
RUNSTATS TABLESPACE LIST LST#STA
SHRLEVEL CHANGE
INDEX(ALL KEYCARD)
REPORT YES UPDATE ALL
//A5407693 JOB (CP00,KE50),
// 'CATALOG',MSGCLASS=T,TIME=1440,
// NOTIFY=&SYSUID,REGION=0M
//STEP3 EXEC PGM=DSNUTILB,TIME=1440,
// PARM=(DBTF,'A5407693.RUNSTA'),
// REGION=0M
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//UTPRINT DD SYSOUT=*
//SYSOUT DD SYSOUT=*
//RNPRIN01 DD SYSOUT=*
//SYSIN DD *
LISTDEF LST#STA INCLUDE TABLESPACE VV21A1T.VDPS004
OPTIONS EVENT (ITEMERROR, SKIP)
..
RUNSTATS TABLESPACE LIST LST#STA
SHRLEVEL CHANGE
INDEX(ALL KEYCARD)
REPORT YES UPDATE ALL
$/tstTut07/
$=/tstTut08Src/
$/tstTut08Src/
$=/tstTut08/
$/tstTut08/
*/
call sqlOIni
call sqlDisconnect '*'
call tstComp2 'tstTut01'
call tstComp2 'tstTut02'
call tstComp2 'tstTut03'
call tstComp2 'tstTut04'
call tstComp2 'tstTut05'
call tstComp2 'tstTut07'
call tstTotal
return
endProcedure tstTut0
/* copx tstComp end *************************************************/
/* copx tstBase begin **************************************************
test the basic classes
***********************************************************************/
tstBase: procedure expose m.
call tstTstSay
call oIni
call tstO
call tstM
call classIni
call tstMCat
call tstMap
call tstMapVia
call tstClass
call tstClass2
call tstOEins
call tstOGet
call jIni
call tstJSay
call tstJ
call tstJ2
call tstJCatSql
call catIni
call tstCat
call pipeIni
CALL TstEnv
CALL TstEnvCat
call tstPipe
call tstPipeS
call tstEnvVars
call tstEnvWith
call tstTotal
call tstPipeLazy
call tstEnvClass
call tstFile
call tstFileList
call tstF
call tstFTab
call tstFmt
call tstFmtUnits
call tstTotal
call scanIni
call tstSb
call tstScan
call ScanReadIni
call tstScanRead
call tstScanUtilInto
call tstScanWin
call tstScanSQL
call tstTotal
return
endProcedure tstBase
/*--- test the tst Module, check the output visually ----------------*/
tstTstSay: procedure expose m.
call tstIni
oldErr = m.tst.err
oldNames = m.tst.errNames
say '+++ tstTstSay start with' oldErr 'totErrs and',
m.tst.tests 'tests'
/*
$=/tstTstSayEins/
### start tst tstTstSayEins #######################################
test eins einzige testZeile
$/tstTstSayEins/
$=/tstTstSayZwei/
### start tst tstTstSayZwei #######################################
zwei 1. testZeile
zwei 2. und letzte testZeile
$/tstTstSayZwei/
$=/tstTstSayDrei/
### start tst tstTstSayDrei #######################################
drei 1. testZeile vor empty Zeile
..
drei 3. testZeile vor 10 space
. .
drei 5. testZeile ziemlich lang 66 +
. 77 5 10 15++++++++++++++++++++
.+++++++++++++++++++++++++++++++++++++++++++.
$/tstTstSayDrei/
*/
call tst x, 'tstTstSayEins'
call tstOut x, "test eins einzige testZeile"
call tstEnd x, 'err 0'
call tst x, 'tstTstSayZwei'
call tstOut x, "zwei 1. testZeile"
call tstOut x, "zwei 2. und letzte testZeile"
call tstEnd x, 'err 0'
call tst x, 'tstTstSayZwei'
call tstOut x, "zwei 1. testZeile " /* ein space zuviel */
call tstOut x, "zwei 2. und letzte testZeile"
call tstOut x, "zwei 3. zuviel"
call tstEnd x, 'err 3'
call tst y, 'tstTstSayDrei'
call tstOut y, 'drei 1. testZeile vor empty Zeile'
call tstOut y, ''
call tstOut y, 'drei 3. testZeile vor 10 space'
call tstOut y, left('', 10)
call tstOut y, 'drei 5. testZeile ziemlich lang',
left(66, 66) left('77 5 10 15', 77, '+')
call tstEnd y, 'err 0'
if m.y.err <> 0 then
call err '+++ tstTstSay errs' m.x.err 'expected' 0
if m.tst.err <> oldErr + 3 then
call err '+++ tstTstSay totErrs' m.tst.err 'expected' 3
say '+++ tstTstSay end Ok with' m.tst.err 'totErrs and' ,
m.tst.tests 'tests'
m.tst.err = oldErr
m.tst.errNames = oldNames
return
endProcedure tstTstSay
tstMark: procedure expose m.
parse arg m, msg
if symbol('m.m') == 'VAR' then
m.m = msg';' m.m
else
m.m = msg 'new'
return m
endProcedure tstMark
tstM: procedure expose m.
/*
$=/tstMa/
### start tst tstMa ###############################################
mNew() 1=newM1 2=newM2
mNew(tst...) 2=2 new 3=4; 3; 1 new 4=5 new
iter 4; 3; 1 new
iter 2 new
iter 5 new
$/tstMa/
*/
call tst t, 'tstMa'
m1 = mNew()
m2 = mNew()
m.m1 = 'newM1'
m.m2 = 'newM2'
call tstOut t, 'mNew() 1='m.m1 '2='m.m2
call mNewArea 'tst'm1
t1 = tstMark(mNew('tst'm1), '1')
t2 = tstMark(mNew('tst'm1), '2')
call mFree tstMark(t1, '3')
t3 = tstMark(mNew('tst'm1), '4')
t4 = tstMark(mNew('tst'm1), '5')
call tstOut t, 'mNew(tst...) 2='m.t2 '3='m.t3 '4='m.t4
i = mIterBegin('tst'm1)
do while assNN('i', mIter(i))
call tstOut t, 'iter' m.i
end
call tstEnd t
/*
$=/tstM/
### start tst tstM ################################################
symbol m.b LIT
symbol m.a LIT
mAdd a A.2
mAdd a A.3
m.a: 3: 1=eins 2=zwei 3=drei 4=M.A.4
m.c: 5: 1=c vorAddSt a 2=eins 3=zwei 4=drei 5=c nacAddSt a 6=M.C.6
$/tstM/ */
drop m.b m.a m.a.0 m.a.1 m.a.2
call tst t, 'tstM'
call tstOut t, 'symbol m.b' symbol('m.b')
m.b = 1
call tstOut t, 'symbol m.a' symbol('m.a')
call tstOut t, 'mAdd a' mAdd(mCut(a, 0), 'eins', 'zwei')
call tstOut t, 'mAdd a' mAdd(a, 'drei')
call tstOut t, 'm.a:' m.a.0': 1='m.a.1 '2='m.a.2 '3='m.a.3 '4='m.a.4
call mAdd mCut(c, 0), 'c vorAddSt a'
call mAddSt c, a
call mAdd c, 'c nacAddSt a'
call tstOut t, 'm.c:' m.c.0': 1='m.c.1 '2='m.c.2 '3='m.c.3,
'4='m.c.4 '5='m.c.5 '6='m.c.6
call tstEnd t
return
endProcedure tstM
tstMCat: procedure expose m.
/*
$=/tstMCat/
### start tst tstMCat #############################################
mCat(0, ) =;
mCat(0, %qn1%s) =;
mCat(0, %qn112222%s%qe%s11) =;
mCat(0, 1%s%qn231%s%qe%s2) =;
mCat(0, 1%s2@%s%qn33341%s2@%s%=;
mCat(0, 1%s2@%s3@%s%qn451%s2@%=;
mCat(1, ) =eins;
mCat(1, %qn1%s) =eins;
mCat(1, %qn112222%s%qe%s11) =eins11;
mCat(1, 1%s%qn231%s%qe%s2) =1eins2;
mCat(1, 1%s2@%s%qn33341%s2@%s%=1eins2eins333;
mCat(1, 1%s2@%s3@%s%qn451%s2@%=1eins2eins3eins4;
mCat(2, ) =einszwei;
mCat(2, %qn1%s) =eins1zwei;
mCat(2, %qn112222%s%qe%s11) =eins112222zwei11;
mCat(2, 1%s%qn231%s%qe%s2) =1eins231zwei2;
mCat(2, 1%s2@%s%qn33341%s2@%s%=1eins2eins33341zwei2zwei333;
mCat(2, 1%s2@%s3@%s%qn451%s2@%=1eins2eins3eins451zwei2zwei3zwei4;
mCat(3, ) =einszweidrei;
mCat(3, %qn1%s) =eins1zwei1drei;
mCat(3, %qn112222%s%qe%s11) =eins112222zwei112222drei11;
mCat(3, 1%s%qn231%s%qe%s2) =1eins231zwei231drei2;
mCat(3, 1%s2@%s%qn33341%s2@%s%=1eins2eins33341zwei2zwei33341drei2dr+
ei333;
mCat(3, 1%s2@%s3@%s%qn451%s2@%=1eins2eins3eins451zwei2zwei3zwei451d+
rei2drei3drei4;
$/tstMCat/ */
call mIni
call tst t, "tstMCat"
m.qq.1 = "eins"
m.qq.2 = "zwei"
m.qq.3 = "drei"
do qx = 0 to 3
m.qq.0 = qx
call tstMCat1 qx
call tstMCat1 qx, '%qn1%s'
call tstMCat1 qx, '%qn112222%s%qe%s11'
call tstMCat1 qx, '1%s%qn231%s%qe%s2'
call tstMCat1 qx, '1%s2@%s%qn33341%s2@%s%qe333'
call tstMCat1 qx, '1%s2@%s3@%s%qn451%s2@%s3@%s%qe4'
end
call tstEnd t
return
endProcedure tstMCat
tstMCat1: procedure expose m.
parse arg m.qq.0, fmt
call out left("mCat("m.qq.0"," fmt")", 30)"="mCat(qq, fmt)";"
return
endProcedure tstMCat1
tstMap: procedure expose m.
/*
$=/tstMap/
### start tst tstMap ##############################################
mapNew m keys m-keys 0
map m zwei --> 2
map m Zwei is not defined
map stem m-keys 4
map m eins --> 1
map m zwei --> 2
map m drei --> 3
map m vier --> 4
*** err: duplicate key eins in map m
map m zwei is not defined
q 2 zw dr
map stem Q 2
map Q zw --> 2Q
map Q dr --> 3Q
map stem m 3
map m eins --> 1
map m zwei --> 2PUT
map m vier --> 4PUT
*** err: duplicate key zwei in map m
tstMapLong eins keys 3
tstMapLong zweiMal keys 48
tstMapLong dreiMal keys 93
tstMapLong vier keys 138
tstMapLong <fuenf> keys 188
tstMap clear keys 0
inline1 3
inline1 1 == inline1 eins==
inline1 2 ====
inline1 3 == inline1 drei==
inline2 1 1 == inline2 eins==
inline3 ?
$/tstMap/ */
/*
$=/tstMapInline1/
inline1 eins
inline1 drei
$/tstMapInline1/ */
/*
$=/tstMapInline2/
inline2 eins
$/tstMapInline2/ */
call tst t, 'tstMap'
m = mapNew('K')
ky = mapKeys(m)
call mAdd t'.TRANS', m 'm', ky 'm-keys'
call tstOut t, 'mapNew' m 'keys' ky m.ky.0
call mapAdd m, 'eins', 1
call mapAdd m, 'zwei', 2
call mapAdd m, 'drei', 3
call mapAdd m, 'vier', 4
call tstMapShow m, 'zwei'
call tstMapShow m, 'Zwei'
call tstMapShowSt m, mapKeys(m)
call mapAdd m, 'eins', 1
call mapReset m, '='
call tstMapShow m, 'zwei'
call mapAdd m, 'eins', 1
call mapAdd m, 'zwei', 2
call mapPut m, 'zwei', 2Put
call mapPut m, 'vier', 4Put
call mapReset q, '='
call mapAdd q, 'zw', 2q
call mapAdd q, 'dr', 3q
call tstOut t, 'q' m.q.0 m.q.1 m.q.2
call tstMapShowSt q, mapKeys(q)
call tstMapShowSt m, mapKeys(m)
call mapAdd m, 'zwei', 2addDup
call tstMapLong m, 'eins' ,201, 2000, -2, 2
call tstMapLong m, 'zweiMal' ,201, 2000, -2, 2
call tstMapLong m, 'dreiMal' ,201, 2000, 2,-2
call tstMapLong m, 'vier ' ,2010, 201, -2, 2
call tstMapLong m, '<fuenf>' ,2010, 201, 2,-2
call mapClear m
keys = mapKeys(m)
call tstOut t, 'tstMap clear keys' m.keys.0
i = mapInline('tstMapInline1')
call tstOut t, 'inline1' m.i.0
do x=1 to m.i.0
call tstOut t, 'inline1' x '=='m.i.x'=='
end
i = mapInline('tstMapInline2')
call tstOut t, 'inline2' m.i.0 '1 =='m.i.1'=='
call tstOut t, 'inline3' mapInline('tstMapInline3', 'r')'?'
call tstEnd t
return
endProcedure tstMap
tstMapLong: procedure expose m.
parse arg m, w, f1, t1, f2, t2
if f1 < t1 then
b1 = 201
else
b1 = -201
if f2 < t2 then
b2 = 1
else
b2 = -1
lo = copies(w, 2100 % length(w))
keys = mapKeys(m)
keyCn = m.keys.0
call tstOut t, 'tstMapLong' w 'keys' keyCn
do x = f1 by b1 to t1
do y = x+f2 by b2 to x+t2
k = left(lo, y)
if mapHasKey(m, k) then
call err 'mapLong hasKey before' w y
call mapAdd m, k, w y
if \ mapHasKey(m, k) then
call err 'mapLong \ hasKey after' w y
if mapGet(m, k) \== w y then
call err 'mapLong \ get <> ' w y
keys = mapKeys(m)
if keyCn + 1 \= m.keys.0 then
call err 'mapLong keys .0 <> ' w y
keyCn = m.keys.0
if k \== m.keys.keyCn then
call err 'mapLong keys . ' keyCn '<>' w y
end
end
return
endProcedure tstMapLong
tstMapVia: procedure expose m.
/*
$=/tstMapVia/
### start tst tstMapVia ###########################################
map M K --> A
mapVia(m, K) A
*** err: missing m.A at 3 in mapVia(M, K|)
mapVia(m, K|) M.A
mapVia(m, K|) valAt m.a
mapVia(m, K|) valAt m.a
*** err: missing m.A.aB at 5 in mapVia(M, K|aB)
mapVia(m, K|aB) M.A.aB
mapVia(m, K|aB) valAt m.A.aB
*** err: missing m.valAt m.a at 4 in mapVia(M, K||)
mapVia(m, K||) M.valAt m.a
mapVia(m, K||) valAt m.valAt m.a
mapVia(m, K||F) valAt m.valAt m.a.F
$/tstMapVia/ */
call tst t, 'tstMapVia'
u = 'A.aB'
v = 'valAt m.a'
drop m.a m.u m.v m.v.f
call mapReset m, 'K'
call mapAdd m, k, a
call tstMapShow m, k
call tstOut t, 'mapVia(m, K) ' mapVia(m, 'K')
call tstOut t, 'mapVia(m, K|) ' mapVia(m, 'K|')
m.a = v
call tstOut t, 'mapVia(m, K|) ' mapVia(m, 'K|')
call tstOut t, 'mapVia(m, K|) ' mapVia(m, 'K|')
call tstOut t, 'mapVia(m, K|aB) ' mapVia(m, 'K|aB')
m.u = 'valAt m.'u
call tstOut t, 'mapVia(m, K|aB) ' mapVia(m, 'K|aB')
call tstOut t, 'mapVia(m, K||) ' mapVia(m, 'K||')
v = m.a
m.v = 'valAt m.'v
m.v.f = 'valAt m.'v'.F'
call tstOut t, 'mapVia(m, K||) ' mapVia(m, 'K||')
call tstOut t, 'mapVia(m, K||F) ' mapVia(m, 'K||F')
call tstEnd t
return
endProcedure tstMapVia
tstMapShow: procedure expose m.
parse arg a, key
if mapHasKey(a, key) then
call tstOut t, 'map' a key '-->' mapGet(a, key)
else
call tstOut t, 'map' a key 'is not defined'
return
endProcedure tstMapShow
tstMapShowSt: procedure expose m.
parse arg a, st
call tstOut t, 'map stem' st m.st.0
do wx=1 to m.st.0
call tstMapShow a, m.st.wx
end
return
endProcedure tstMapShow
tstClass2: procedure expose m.
/*
$=/tstClass2o2/
### start tst tstClass2 ###########################################
@CLASS.5 isA :class = u
. choice u union
. .NAME = class
. stem 7
. .1 refTo @CLASS.1 :class = u
. choice v union
. choice c union
. .NAME = u
. .CLASS refTo @CLASS.15 :class = s
. choice s .CLASS refTo @CLASS.12 done :class @CLASS.12
. .2 refTo @CLASS.6 :class = c
. choice c union
. .NAME = v
. .CLASS refTo @CLASS.7 :class = u
. choice u stem 0
. .3 refTo @CLASS.8 :class = c
. choice c union
. .NAME = w
. .CLASS refTo @CLASS.7 done :class @CLASS.7
. .4 refTo @CLASS.9 :class = c
. choice c union
. .NAME = o
. .CLASS refTo @CLASS.7 done :class @CLASS.7
. .5 refTo @CLASS.10 :class = c
. choice c union
. .NAME = s
. .CLASS refTo @CLASS.11 :class = f
. choice f union
. .NAME = CLASS
. .CLASS refTo @CLASS.12 :class = r
. choice r .CLASS refTo @CLASS.5 done :class @CLASS.5
. .6 refTo @CLASS.13 :class = c
. choice c union
. .NAME = r
. .CLASS refTo @CLASS.11 done :class @CLASS.11
. .7 refTo @CLASS.14 :class = c
. choice c union
. .NAME = u
. .CLASS refTo @CLASS.15 :class = s
. choice s .CLASS refTo @CLASS.12 done :class @CLASS.12
. .8 refTo @CLASS.16 :class = c
. choice c union
. .NAME = n
. .CLASS refTo @CLASS.17 :class = u
. choice u stem 2
. .1 refTo @CLASS.18 :class = f
. choice f union
. .NAME = NAME
. .CLASS refTo @CLASS.1 done :class @CLASS.1
. .2 refTo @CLASS.15 done :class @CLASS.15
. .9 refTo @CLASS.19 :class = c
. choice c union
. .NAME = f
. .CLASS refTo @CLASS.20 :class = u
. choice u stem 2
. .1 refTo @CLASS.18 done :class @CLASS.18
. .2 refTo @CLASS.11 done :class @CLASS.11
. .10 refTo @CLASS.21 :class = c
. choice c union
. .NAME = c
. .CLASS refTo @CLASS.20 done :class @CLASS.20
. .11 refTo @CLASS.22 :class = c
. choice c union
. .NAME = m
. .CLASS refTo @CLASS.23 :class = u
. choice u stem 2
. .1 refTo @CLASS.18 done :class @CLASS.18
. .2 refTo @CLASS.24 :class = f
. choice f union
. .NAME = MET
. .CLASS refTo @CLASS.1 done :class @CLASS.1
$/tstClass2o2/
$=/tstClass2/
### start tst tstClass2 ###########################################
@CLASS.4 isA :class = u
. choice u union
. .NAME = class
. stem 7
. .1 refTo @CLASS.1 :class = u
. choice u union
. .NAME = v
. stem 2
. .1 refTo @CLASS.20 :class = m
. choice m union
. .NAME = o2String
. .MET = return m.m
. .2 refTo @CLASS.108 :class = m
. choice m union
. .NAME = o2File
. .MET = return file(m.m)
. .2 refTo @CLASS.5 :class = c
. choice c union
. .NAME = u
. .CLASS refTo @CLASS.6 :class = u
. choice u union
. .NAME = .
. stem 2
. .1 refTo @CLASS.7 :class = f
. choice f union
. .NAME = NAME
. .CLASS refTo @CLASS.1 done :class @CLASS.1
. .2 refTo @CLASS.8 :class = s
. choice s .CLASS refTo @CLASS.9 :class = r
. choice r .CLASS refTo @CLASS.4 done :class @CLASS.4
. .3 refTo @CLASS.10 :class = c
. choice c union
. .NAME = f
. .CLASS refTo @CLASS.11 :class = u
. choice u union
. .NAME = .
. stem 2
. .1 refTo @CLASS.7 done :class @CLASS.7
. .2 refTo @CLASS.12 :class = f
. choice f union
. .NAME = CLASS
. .CLASS refTo @CLASS.9 done :class @CLASS.9
. .4 refTo @CLASS.13 :class = c
. choice c union
. .NAME = s
. .CLASS refTo @CLASS.12 done :class @CLASS.12
. .5 refTo @CLASS.14 :class = c
. choice c union
. .NAME = c
. .CLASS refTo @CLASS.11 done :class @CLASS.11
. .6 refTo @CLASS.15 :class = c
. choice c union
. .NAME = m
. .CLASS refTo @CLASS.16 :class = u
. choice u union
. .NAME = .
. stem 2
. .1 refTo @CLASS.7 done :class @CLASS.7
. .2 refTo @CLASS.17 :class = f
. choice f union
. .NAME = MET
. .CLASS refTo @CLASS.1 done :class @CLASS.1
. .7 refTo @CLASS.18 :class = c
. choice c union
. .NAME = r
. .CLASS refTo @CLASS.12 done :class @CLASS.12
$/tstClass2/ */
call classIni
call tst t, 'tstClass2'
call classOut , m.class.class
call tstEnd t
return
endProcedure tstClass2
tstClass: procedure expose m.
/*
$=/tstClass/
### start tst tstClass ############################################
Q u =className= tstClassTf12
Q.eins.zwei v ==> M.Q.eins.zwei
*** err: bad type v: classNew(v tstClassTf12)
*** err: bad type v: classBasicNew(v, tstClassTf12, )
R u =className= uststClassTf12
R u =className= uststClassTf12in
R u =className= tstClassTf12
R.eins.zwei v ==> M.R.eins.zwei
R s =stem.0= 2
R.1 r ==> M.R.1 :CLASS.3
R.1 u =className= tstClassTf12
R.1.eins.zwei v ==> M.R.1.eins.zwei
R.2 r ==> M.R.2 :CLASS.3
R.2 u =className= tstClassTf12
R.2.eins.zwei v ==> M.R.2.eins.zwei
S u =className= TstClass7
S s =stem.0= 2
S.1 u =className= TstClass7s
S.1.eins v ==> M.S.1.eins
S.1 m =met-metA--> say "metA"
S.1 m =met-metB--> say "metB"
S.2 u =className= TstClass7s
S.2.zwei v ==> M.S.2.zwei
S.2 m =met-metA--> say "metA"
S.2 m =met-metB--> say "metB"
class of mutate qq tstClassTf12
$/tstClass/ */
f = 'eins.zwei'
e = 'eins'
z = 'zwei'
drop m.q.f m.r.f m.r.0 m.r.1 m.r.1.f m.r.2 m.r.2.f
drop m.s.0 m.s.1 m.s.1.e m.s.2 m.s.2.z
call classIni
call tst t, 'tstClass'
t1 = classNew('n? tstClassTf12 u f eins f zwei v')
call tstClassOut t, t1, q
z = m.class.0
if class4name('tstClassB', '') == '' then do
t2 = classNew('n tstClassB u n tstClassC u tstClassTf12,',
's u v tstClassTf12')
end
else do /* the second time we would get a duplicate error */
call tstOut t, '*** err: bad type v: classNew(v tstClassTf12)'
call tstOut t, '*** err: bad type v:' ,
'classBasicNew(v, tstClassTf12, )'
end
t2 = classNew('n? uststClassTf12 u' ,
'n? uststClassTf12in u tstClassTf12',
, classNew('s u r, tstClassTf12'))
m.r.0 = 2
call tstClassOut t, t2, r
t3 = classNew('n? TstClass7 u s',
classNew('n? TstClass7s u c 1 f eins v, c 2 f zwei v',
,'m', 'metA say "metA"', 'metB say "metB"'))
m.s.0 = 2
m.s.1 = 1
m.s.2 = 2
call tstClassOut t, t3, s
call oMutate qq, class4Name('tstClassTf12')
tt = objClass(qq)
call tstOut t, 'class of mutate qq' className(tt)
call tstEnd t
return
endProcedure tstClass
tstClassOut: procedure expose m.
parse arg o, t, a
if wordPos(t, m.class.classV m.class.classW m.class.classO) > 0 then
return tstOut(o, a m.t.name '==>' m.a)
if m.t == 'r' then
return tstOut(o, a m.t '==>' m.a ':'m.t.class)
if m.t == 'u' & m.t.name \== '' then
call tstOut o, a m.t '=className=' m.t.name
if m.t == 'f' then
return tstClassOut(o, m.t.class, a'.'m.t.name)
if m.t = 'u' then do
do ux=1 to m.t.0
call tstClassOut o, m.t.ux, a
end
return 0
end
if m.t = 's' then do
call tstOut o, a m.t '=stem.0=' m.a.0
do ux=1 to m.a.0
call tstClassOut o, m.t.class, a'.'ux
end
return 0
end
if m.t = 'c' then do
if m.t.name = m.a then
call tstClassOut o, m.t.class, a
return 0
end
if m.t = 'm' then
return tstOut(o, a m.t '=met-'m.t.name'-->' m.t.met)
call err 'bad class type' m.t
endProcedure tstClassOut
tstO: procedure expose m.
/*
$=/tstO/
### start tst tstO ################################################
oIsCla(TstOCla1) 0
TstOCla1 -
oIsCla(TstOCla1) 1
TstOCla1 -
oIsCla(TstOCla1) 1
TstOCla1 contents of met1
TstOCla1.met2 -
TstOCla2.met1 contents of met1
TstOCla2.met2 contents of met2
TstOCla1.TstOMet3 -
TstOCla1.TstOMet3 generated met TstOCla1:TstOMet3 code...;
TstOCla2.TstOMet3 generated met TstOCla2:TstOMet3 code...;
tstOObj1.met1 -
tstOObj1.met1 contents of met1
$/tstO/
*/
call mIni
call tst t, 'tstO'
call oIni
c1 = 'TstOCla1'
c2 = 'TstOCla2'
m1 = 'met1'
m2 = 'met2'
m3 = 'TstOMet3'
lg = m.o.lazyGen
call tstOut t, 'oIsCla('c1')' oIsCla(c1)
call tstOut t, c1 oClaMet(c1, 'met1', '-')
call oAddCla c1
call tstOut t, 'oIsCla('c1')' oIsCla(c1)
call tstOut t, c1 oClaMet(c1, 'met1', '-')
call oAddMet c1, m1, 'contents of met1'
call tstOut t, 'oIsCla('c1')' oIsCla(c1)
call tstOut t, c1 oClaMet(c1, m1, '-')
call oAddCla c2, c1
call oAddMet c2, 'met2', 'contents of met2'
call tstOut t, c1'.met2' oClaMet(c1, 'met2', '-')
call tstOut t, c2'.'m1 oClaMet(c2, m1, '-')
call tstOut t, c2'.met2' oClaMet(c2, 'met2', '-')
call tstOut t, c1'.'m3 oClaMet(c1, m3, '-')
call oAddMet lg, m3,
, "return 'generated met' cl':'me 'code...;'"
call tstOut t, c1'.'m3 oClaMet(c1, m3, '-')
call tstOut t, c2'.'m3 oClaMet(c2, m3, '-')
o1 = 'tstOObj1'
o2 = 'tstOObj2'
call tstOut t, o1'.met1' objMet(o1, 'met1', '-')
call oMutate o1, c1
call tstOut t, o1'.met1' objMet(o1, 'met1', '-')
call tstEnd t
drop m.o.cParent.c1 m.o.cMet.c1.m1 m.o.cMet.c1.m2 m.o.cMet.c1.m3
drop m.o.cParent.c2 m.o.cMet.c2.m1 m.o.cMet.c2.m2 m.o.cMet.c2.m3
drop m.o.o2c.o1 m.o.cMet.lg.m3
return
endProcedure tstO
tstOEins: procedure expose m.
/*
$=/tstOEins/
### start tst tstOEins ############################################
class method calls of TstOEins
. met Eins.eins M
FLDS of <obj e of TstOEins> .FEINS, .FZWEI
methodcalls of object e of TstOEins
. met Eins.eins <obj e of TstOEins>
. met Eins.zwei <obj e2 of TstOEins>
*** err: no method nein in class TstOEins of object <obj e+
. of TstOEins>
*** err: no class found for object noObj
class method calls of TstOEins
. met Elf.zwei M
FLDS of <obj f of TstOElf> .FEINS, .FZWEI, .FELF
methodcalls of object f of TstOElf
. met Eins.eins <obj f of TstOElf>
. met Elf.zwei <obj f of TstOElf>
. met Elf.drei <obj f of TstOElf>
oCopy c1 of class TstOEins, c2
C1 u =className= TstOEins
C1.FEINS v ==> M.C1.FEINS
C1.FZWEI v ==> M.C1.FZWEI
C1 m =met-eins--> call tstOut t, " met Eins.eins" m
C1 m =met-zwei--> call tstOut t, " met Eins.zwei" m
C2 u =className= TstOEins
C2.FEINS v ==> M.C1.FEINS
C2.FZWEI v ==> M.C1.FZWEI
C2 m =met-eins--> call tstOut t, " met Eins.eins" m
C2 m =met-zwei--> call tstOut t, " met Eins.zwei" m
oCopy c3 of class TstOElf, c4
C4 u =className= TstOElf
C4 u =className= TstOEins
C4.FEINS v ==> M.C3.FEINS
C4.FZWEI v ==> M.C3.FZWEI
C4 m =met-eins--> call tstOut t, " met Eins.eins" m
C4 m =met-zwei--> call tstOut t, " met Eins.zwei" m
C4.FELF r ==> M.C3.FELF :CLASS.3
C4 m =met-zwei--> call tstOut t, " met Elf.zwei" m
C4 m =met-drei--> call tstOut t, " met Elf.drei" m
tEinsDop <class TstOEins>
oRun 7*3 21
oRun 12*12 144
$/tstOEins/ */
call classIni
call tst t, 'tstOEins'
tEins = classNew('n? TstOEins u f FEINS v,f FZWEI v', 'm',
, 'eins call tstOut t, " met Eins.eins" m',
, 'zwei call tstOut t, " met Eins.zwei" m')
call mAdd t.trans, tEins '<class TstOEins>'
call tstOut t, 'class method calls of TstOEins'
interpret oClaMet('TstOEins', 'eins')
e = oNew('TstOEins')
e2 = oNew('TstOEins')
call mAdd t.trans, e '<obj e of TstOEins>'
call mAdd t.trans, e2 '<obj e2 of TstOEins>'
call tstOut t, 'FLDS of' e mCat(oFlds(e), '%qn, %s')
call tstOut t, 'methodcalls of object e of TstOEins'
call tstOmet e, 'eins'
call tstOmet e2, 'zwei'
call tstOmet e, 'nein'
call tstOmet 'noObj', 'nein'
tElf = classNew('n? TstOElf u TstOEins, f FELF r', 'm',
, 'zwei call tstOut t, " met Elf.zwei" m',
, 'drei call tstOut t, " met Elf.drei" m')
call tstOut t, 'class method calls of TstOEins'
interpret oClaMet('TstOElf', 'zwei')
f = oNew('TstOElf')
call mAdd t.trans, f '<obj f of TstOElf>'
call tstOut t, 'FLDS of' f mCat(oFlds(f), '%qn, %s')
call tstOut t, 'methodcalls of object f of TstOElf'
call tstOmet f, 'eins'
call tstOmet f, 'zwei'
call tstOmet f, 'drei'
/* call tstOut t, 'methodcalls of object f cast To TstOEins'
call tstOmet oCast(f, 'TstOEins'), 'eins'
call tstOmet oCast(f, 'TstOEins'), 'zwei'
call tstOut t, 'FLDS of <cast(f, TstOEins)>',
mCat(oFlds(oCast(f, 'TstOEins')), '%qn, %s')
*/
call oMutate c1, class4Name('TstOEins')
call tstOut t, 'oCopy c1 of class TstOEins, c2'
call tstClassOut t, tEins, c1
call oCopy c1, c2
call tstClassOut t, tEins, c2
call tstOut t, 'oCopy c3 of class TstOElf, c4'
call oMutate c3, class4Name('TstOElf')
call oCopy c3, c4
call tstClassOut t, tElf, c4
/* tEinsDop = classNew('n TstOEins u f FEINS v,f FZWEI v', 'm',
, 'eins call tstOut t, " met Eins.eins" m',
, 'zwei call tstOut t, " met Eins.zwei" m')
*/ tEinsDop = tEins
call tstOut t, 'tEinsDop' tEinsDop
e3 = oNew('TstOEins')
if e3 <<= e | e3 <<= e2 then
call err 'doppelt reinitialised objects'
rr = oRunner('return 7 * 3')
call tstOut t, 'oRun 7*3' oRun(rr)
r12 = oRunner('return 12 * 12')
call tstOut t, 'oRun 12*12' oRun(r12)
call tstEnd t
return
endProcedure tstOEins
tstOmet: procedure expose m.
parse arg m, met
interpret objMet(m, met)
return
endProcedure tstOmet
tstOGet: procedure expose m.
/*
$=/tstOGet/
### start tst tstOGet #############################################
class.NAME= class
class.NAME= class : w
class| = u
*** err: bad stem index 91>7 @ CLASS.4 class class in oGet(CLASS.4,+
. 91)
class.91 = 0
class.1 = CLASS.1 |= u
class.2 = CLASS.5 |= c
$/tstOGet/ */
call oIni
call tst t, 'tstOGet'
cc = m.class.class
call tstOut t, 'class.NAME=' oGet(cc, 'NAME')
o = oGetO(cc, 'NAME')
call tstOut t, 'class.NAME=' o2String(o) ':' className(objClass(o))
call tstOut t, 'class| =' oGet(cc, '|')
call tstOut t, 'class.91 =' className(oGet(cc, 91))
call tstOut t, 'class.1 =' oGetO(cc, '1') '|=' oGet(cc, '1||')
call tstOut t, 'class.2 =' className(oGetO(cc, '2')) ,
'|=' oGet(cc, '2||')
call tstEnd t
/*
$=/tstOGet2/
### start tst tstOGet2 ############################################
tstOGet1 get1 w
tstOGet1.f1 get1.f1 v
tstOGet1.f2 get1.f2 w
tstOGet1.F3| get1.f3 v
tstOGet1.f3.fEins get1.f3.fEins v
tstOGet1.f3.fZwei get1.f3.fZwei w
tstOGet1.f3%fDrei !get1.f3.fDrei w
tstOGet1.f3.fDrei get1.f3.fDrei w
tstOGet1.f3%1 get1.f3.fDrei.1 w
tstOGet1.f3.2 TSTOGET1
tstOGet1.f3.2|f1 get1.f1 v
tstOGet1.f3.2|f3.2|f2 get1.f2 w
*** err: bad stem index 4>3 @ TSTOGET1.F3 class TstOGet0 in oGet(TS+
TOGET1, F3.4)
tstOGet1.f3.4 0
tstOGet1.f3.3 get1.f3.fDrei.3 w
*** err: bad stem index 3>3A @ TSTOGET1.F3 class TstOGet0 in oGet(T+
STOGET1, F3.3)
tstOGet1.f3.2 0
$/tstOGet2/
*/
c0 = classNew('n? TstOGet0 u f FEINS v,f FZWEI w,f FDREI r,v,' ,
's r TstOGet0')
cl = classNew('n? TstOGet u r, f F1 v, f F2 r, f F3 TstOGet0')
call oMutate tstOGet1, cl
m.tstOGet1 = s2o('get1 w')
m.tstOGet1.f1 = 'get1.f1 v'
m.tstOGet1.f2 = s2o('get1.f2 w')
m.tstOGet1.f3 = 'get1.f3 v'
m.tstOGet1.f3.fEins = 'get1.f3.fEins v'
m.tstOGet1.f3.fZwei = s2o('get1.f3.fZwei w')
m.tstOGet1.f3.fDrei = s2o('get1.f3.fDrei w')
m.tstOGet1.f3.0 = 3
m.tstOGet1.f3.1 = s2o('get1.f3.fDrei.1 w')
m.tstOGet1.f3.2 = tstOGet1
m.tstOGet1.f3.3 = s2o('get1.f3.fDrei.3 w')
call tst t, 'tstOGet2'
call tstOut t, 'tstOGet1 ' oGet(tstOGet1, )
call tstOut t, 'tstOGet1.f1 ' oGet(tstOGet1, f1)
call tstOut t, 'tstOGet1.f2 ' oGet(tstOGet1, f2)
call tstOut t, 'tstOGet1.F3| ' oGet(tstOGet1, 'F3|')
call tstOut t, 'tstOGet1.f3.fEins ' oGet(tstOGet1, f3.fEins)
call tstOut t, 'tstOGet1.f3.fZwei ' oGet(tstOGet1, f3.fZwei)
call tstOut t, 'tstOGet1.f3%fDrei ' oGetO(tstOGet1, 'F3%FDREI')
call tstOut t, 'tstOGet1.f3.fDrei ' oGet(tstOGet1, f3.fDrei)
call tstOut t, 'tstOGet1.f3%1 ' oGet(tstOGet1, 'F3%1')
call tstOut t, 'tstOGet1.f3.2 ' oGetO(tstOGet1, 'F3.2')
call tstOut t, 'tstOGet1.f3.2|f1 ' oGet(tstOGet1, 'F3.2|F1')
call tstOut t, 'tstOGet1.f3.2|f3.2|f2' ,
oGet(tstOGet1, 'F3.2|F3.2|F2')
call tstOut t, 'tstOGet1.f3.4 ' oGet(tstOGet1, 'F3.4')
call tstOut t, 'tstOGet1.f3.3 ' oGet(tstOGet1, 'F3.3')
m.tstOGet1.f3.0 = 3a
call tstOut t, 'tstOGet1.f3.2 ' oGet(tstOGet1, 'F3.3')
call tstEnd t
/*
$=/tstOPut3/
### start tst tstOPut3 ############################################
tstOGet1.f1 get1.f1 v
tstOGet1.f1 aPut1 f1.put1
tstOGet1.f2 aPut2 f2.put2
tstOGet1.f3.fEins p3 f3.fEins,p3
tstOGet1.f3%0 3A
tstOGet1.f3%0 =4 4
tstOGet1.f3.4.feins val f3.4|feins
$/tstOPut3/
*/
call tst t, 'tstOPut3'
call tstOut t, 'tstOGet1.f1 ' oGet(tstOGet1, f1)
call oPut tstOget1, f1, 'f1.put1'
call tstOut t, 'tstOGet1.f1 aPut1' oGet(tstOGet1, f1)
call oPut tstOget1, f2, 'f2.put2'
call tstOut t, 'tstOGet1.f2 aPut2' oGet(tstOGet1, f2)
call oPut tstOget1, f3.fEins, 'f3.fEins,p3'
call tstOut t, 'tstOGet1.f3.fEins p3' oGet(tstOGet1, f3.fEins)
call tstOut t, 'tstOGet1.f3%0 ' oGet(tstOGet1, 'F3%0')
call oPut tstOget1, f3.0, 4
call tstOut t, 'tstOGet1.f3%0 =4' oGet(tstOGet1, 'F3%0')
call oPutO tstOget1, 'F3.4', ''
call oPut tstOget1, 'F3.4|FEINS', 'val f3.4|feins'
call tstOut t, 'tstOGet1.f3.4.feins' ,
oGet(tstOGet1, 'F3.4|FEINS')
call tstEnd t
return
endProcedure tstOGet
tstJSay: procedure expose m.
/*
$=/tstJSay/
### start tst tstJSay #############################################
*** err: bad option openArg in jOpen(<obj j of JRW>, openArg)
*** err: jWrite(<obj j of JRW>, writeArg) but not opened w
*** err: can only write JSay.jOpen(<obj s of JSay>, <)
*** err: jWrite(<obj s of JSay>, write s vor open) but not opened+
. w
*** err: can only read JRWEof.jOpen(<obj e of JRWEof>, >)
*** err: jRead(<obj e of JRWEof>, XX) but not opened r
read e vor open 0 m.xx valueBefore
read e nach open 0 m.xx M.XX
out eins
#jIn 1# tst in line 1 eins ,
out zwei in 1 vv=readAdrVV
#jIn 2# tst in line 2 zwei ; .
out drei in 1 vv=readAdrVV Schluss
$/tstJSay/ */
call jIni
call tst t, 'tstJSay'
jrw = oNew('JRW')
call mAdd t'.TRANS', jrw '<obj j of JRW>'
call jOpen jrw, 'openArg'
call jWrite jrw, 'writeArg'
s = oNew('JSay')
call mAdd t'.TRANS', s '<obj s of JSay>'
call jOpen s, m.j.cRead
s = oNew('JSay')
call mAdd t'.TRANS', s '<obj s of JSay>'
call jWrite s, 'write s vor open'
call jOpen s, '>'
call jWrite s, 'write s nach open'
e = oNew('JRWEof')
call mAdd t'.TRANS', e '<obj e of JRWEof>'
call jOpen e, '>'
e = oNew('JRWEof')
call mAdd t'.TRANS', e '<obj e of JRWEof>'
m.xx = 'valueBefore'
call tstOut t, 'read e vor open' jRead(e, xx) 'm.xx' m.xx
call jOpen e, m.j.cRead
call tstOut t, 'read e nach open' jRead(e, xx) 'm.xx' m.xx
call out 'out eins'
vv = 'readAdrVV'
m.vv = 'readAdrVVValueBefore'
call out 'out zwei in' in(vv) 'vv='vv
m.vv = 'readAdrVVValueBefore'
call out 'out drei in' in(vv) 'vv='vv 'Schluss'
call tstEnd t
return
endProcedure tstJSay
tstJ: procedure expose m.
/*
$=/tstJ/
### start tst tstJ ################################################
out eins
#jIn 1# tst in line 1 eins ,
1 in() tst in line 1 eins ,
#jIn 2# tst in line 2 zwei ; .
2 in() tst in line 2 zwei ; .
#jIn 3# tst in line 3 drei .schluss..
3 in() tst in line 3 drei .schluss..
#jIn eof 4#
in() 3 reads vv VV
line buf line one
line buf line two
line buf line three
line buf line four
*** err: jWrite(<buf b>, buf line five while reading) but not opene+
d w
$/tstJ/ */
call jIni
call tst t, "tstJ"
b = jOpen(jBuf(), '>')
call mAdd t'.TRANS', b '<buf b>'
call out 'out eins'
do lx=1 by 1 while in(var)
call out lx 'in()' m.var
end
call out 'in()' (lx-1) 'reads vv' vv
call jOpen b, '>'
call jWrite b, 'buf line one'
call jClose b
call mAdd m.b.stem, 'buf line two', 'buf line three'
call jWrite b, 'buf line four'
call jClose b
call jOpen b, m.j.cRead
do while (jRead(b, line))
call out 'line' m.line
end
call jWrite b, 'buf line five while reading'
call jClose b
call tstEnd t
return
endProcedure tstJ
tstJ2: procedure expose m.
/*
$=/tstJ2/
### start tst tstJ2 ###############################################
class1 <Tst?1 class> <Tst?1 name>
class2 <Tst?1 class> <Tst?1 name>
class3 <Tst?1 class> <Tst?1 name>
b read EINS feld eins, ZWEI feld zwei, DREI feld drei
b read EINS feld eins, ZWEI feld zwei 2, DREI feld drei
c read EINS feld eins, ZWEI feld zwei, DREI drei cat 1
tstR: @tstWriteoV3 isA :<Tst?1 name>
tstR: .EINS = feld eins
tstR: .ZWEI = feld zwei
tstR: .DREI = drei cat 1
c read EINS feld eins, ZWEI feld zwei 2, DREI drei cat 2
tstR: @tstWriteoV4 isA :<Tst?1 name>
tstR: .EINS = feld eins
tstR: .ZWEI = feld zwei 2
tstR: .DREI = drei cat 2
$/tstJ2/ */
call tst t, "tstJ2"
ty = classNew('n* Tst u f EINS v, f ZWEI v, f DREI v')
call mAdd t'.TRANS', ty '<Tst?1 class>'
call mAdd t'.TRANS', m.ty.name '<Tst?1 name>'
call tstOut t, 'class1' ty m.ty.name
ty = classNew('n* Tst u f EINS v, f ZWEI v, f DREI v')
call tstOut t, 'class2' ty m.ty.name
ty = classNew('n* Tst u f EINS v, f ZWEI v, f DREI v')
call tstOut t, 'class3' ty m.ty.name
call oMutate qq, ty
m.qq.eins = 'feld eins'
m.qq.zwei = 'feld zwei'
m.qq.drei = 'feld drei'
b = jBuf()
call jOpen b, '>'
call jWriteO b, oCopy(qq)
m.qq.zwei = 'feld zwei 2'
call jWriteO b, qq
call jOpen jClose(b), m.j.cRead
c = jOpen(jBuf(), '>')
do xx=1 while assNN('res', jReadO(b))
call out 'b read EINS' m.res.eins', ZWEI' m.res.zwei,
|| ', DREI' m.res.drei
m.res.drei = 'drei cat' xx
call jWriteO c, res
end
call jOpen jClose(c), m.j.cRead
do while assNN('ccc', jReadO(c))
call out 'c read EINS' m.ccc.eins', ZWEI' m.ccc.zwei,
|| ', DREI' m.ccc.drei
call outO ccc
end
call tstEnd t
return
endProcedure tstJ2
tstCat: procedure expose m.
/*
$=/tstCat/
### start tst tstCat ##############################################
catRead 1 line 1
catRead 2 line 2
catRead 3 line 3
appRead 1 line 1
appRead 2 line 2
appRead 3 line 3
appRead 4 append 4
appRead 5 append 5
$/tstCat/ */
call catIni
call tst t, "tstCat"
i = cat(jBuf('line 1', 'line 2'), jBuf('line 3'))
call jOpen i, m.j.cRead
do lx=1 by 1 while jRead(i, v)
call tstOut t, 'catRead' lx m.v
end
call jOpen jClose(i), m.j.cApp
call jWrite i, 'append 4'
call jWrite i, 'append 5'
call jOpen jClose(i), m.j.cRead
do lx=1 by 1 while jRead(i, v)
call tstOut t, 'appRead' lx m.v
end
call tstEnd t
return
endProcedure tstCat
tstEnv: procedure expose m.
call pipeIni
/*
$=/tstEnv/
### start tst tstEnv ##############################################
before pipeBeLa
after pipeEnd
*** err: jWrite(<jBuf c>, write nach pop) but not opened w
#jIn 1# tst in line 1 eins ,
#jIn 2# tst in line 2 zwei ; .
#jIn 3# tst in line 3 drei .schluss..
#jIn eof 4#
before writeNow 2 c --> std
before writeNow 1 b --> c
b line eins
b zwei |
nach writeNow 1 b --> c
add nach pop
after push c only
tst in line 1 eins ,
tst in line 2 zwei ; .
tst in line 3 drei .schluss..
nach writeNow 2 c --> std
*** err: jWrite(<jBuf c>, ) but not opened w
$/tstEnv/ */
call tst t, "tstEnv"
c = jBuf()
call mAdd t'.TRANS', c '<jBuf c>'
call out 'before pipeBeLa'
b = jBuf("b line eins", "b zwei |")
call pipe '+Ff', c, b
call out 'before writeNow 1 b --> c'
call pipeWriteNow
call out 'nach writeNow 1 b --> c'
call pipe '-'
call out 'after pipeEnd'
call jWrite c, 'write nach pop'
call mAdd c'.BUF', 'add nach pop'
call pipe '+A', c
call out 'after push c only'
call pipeWriteNow
call pipe '-'
call pipe '+f', , c
call out 'before writeNow 2 c --> std'
call pipeWriteNow
call out 'nach writeNow 2 c --> std'
call pipe '-'
call jWrite c
call tstEnd t
return
endProcedure tstEnv
tstEnvCat: procedure expose m.
call pipeIni
/*
$=/tstEnvCat/
### start tst tstEnvCat ###########################################
c1 contents
c1 line eins |
before writeNow 1 b* --> c*
b1 line eins|
b2 line eins
b2 zwei |
c2 line eins |
after writeNow 1 b* --> c*
c2 contents
c2 line eins |
$/tstEnvCat/ */
call tst t, "tstEnvCat"
b0= jBuf()
b0= jBuf()
b1= jBuf("b1 line eins|")
b2 = jBuf("b2 line eins", "b2 zwei |")
c1 = jBuf("c1 line eins |")
c2 = jBuf("c2 line eins |")
call pipe '+Af', c1, b0, b1, b2, c2
call out 'before writeNow 1 b* --> c*'
call pipeWriteNow
call out 'after writeNow 1 b* --> c*'
call pipe '-'
call out 'c1 contents'
call pipe '+f' , , c1
call pipeWriteNow
call pipe '-'
call pipe '+f' , , c2
call out 'c2 contents'
call pipeWriteNow
call pipe '-'
call tstEnd t
return
endProcedure tstEnvCat
tstPipe: procedure expose m.
call pipeIni
/*
$=/tstPipe/
### start tst tstPipe #############################################
.+0 vor pipeBegin
#jIn 1# tst in line 1 eins ,
#jIn 2# tst in line 2 zwei ; .
#jIn 3# tst in line 3 drei .schluss..
#jIn eof 4#
.+7 nach pipeLast
¢7 +6 nach pipe 7!
¢7 +2 nach pipe 7!
¢7 +4 nach nested pipeLast 7!
¢7 (4 +3 nach nested pipeBegin 4) 7!
¢7 (4 (3 +1 nach pipeBegin 3) 4) 7!
¢7 (4 (3 tst in line 1 eins , 3) 4) 7!
¢7 (4 (3 tst in line 2 zwei ; 3) 4) 7!
¢7 (4 (3 tst in line 3 drei .schluss. 3) 4) 7!
¢7 (4 (3 +1 nach writeNow vor pipe 3) 4) 7!
¢7 (4 +3 nach preSuf vor nested pipeLast 4) 7!
¢7 +4 nach preSuf vor nested pipeEnd 7!
¢7 +5 nach nested pipeEnd vor pipe 7!
¢7 +6 nach writeNow vor pipeLast 7!
.+7 nach writeNow vor pipeEnd
.+8 nach pipeEnd
$/tstPipe/ */
say 'x0' m.pipe.0
call tst t, 'tstPipe'
call out '+0 vor pipeBegin'
say 'x1' m.pipe.0
call pipe '+N'
call out '+1 nach pipeBegin'
call pipeWriteNow
call out '+1 nach writeNow vor pipe'
call pipe 'N|'
call out '+2 nach pipe'
call pipe '+N'
call out '+3 nach nested pipeBegin'
call pipePreSuf '(3 ', ' 3)'
call out '+3 nach preSuf vor nested pipeLast'
call pipe 'P|'
call out '+4 nach nested pipeLast'
call pipePreSuf '(4 ', ' 4)'
call out '+4 nach preSuf vor nested pipeEnd'
call pipe '-'
call out '+5 nach nested pipeEnd vor pipe'
call pipe 'N|'
call out '+6 nach pipe'
call pipeWriteNow
say 'out +6 nach writeNow vor pipeLast'
call out '+6 nach writeNow vor pipeLast'
call pipe 'P|'
call out '+7 nach pipeLast'
call pipePreSuf '¢7 ', ' 7!'
call out '+7 nach writeNow vor pipeEnd'
call pipe '-'
call out '+8 nach pipeEnd'
say 'xx' m.pipe.0
call tstEnd t
return
endProcedure tstPipe
tstPipeS: procedure expose m.
/*
$=/tstPipeS/
### start tst tstPipeS ############################################
eine einzige zeile
nach all einzige Zeile
select strip(creator) cr, strip(name) tb,
(row_number()over())*(row_number()over()) rr
from sysibm.sysTables
$/tstPipeS/
*/
call tst t, "tstPipeS"
call pipe '+s',, 'eine einzige zeile'
call pipeWriteAll
call out 'nach all einzige Zeile'
call pipe 's',,
, "select strip(creator) cr, strip(name) tb," ,
, "(row_number()over())*(row_number()over()) rr" ,
, "from sysibm.sysTables"
call pipeWriteAll
call pipe '-'
call tstEnd t
return
endProcedure tstPipeS
tstEnvVars: procedure expose m.
call pipeIni
/*
$=/tstEnvVars/
### start tst tstEnvVars ##########################################
put v1 value eins
v1 hasKey 1 get value eins
v2 hasKey 0
one to theBur
two to theBuf
$/tstEnvVars/ */
call tst t, "tstEnvVars"
call envRemove 'v2'
m.tst.adr1 = 'value eins'
put1 = envPutO('v1', oMutate(tst'.'adr1, m.class.classV))
call tstOut t, 'put v1' m.put1
call tstOut t, 'v1 hasKey' envHasKey('v1') 'get' envGet('v1')
call tstOut t, 'v2 hasKey' envHasKey('v2')
if 0 then
call tstOut t, 'v2 get' envGet('v2')
call pipe '+F' , envGetO('theBuf', '-b')
call out 'one to theBur'
call out 'two to theBuf'
call pipe '-'
call pipe '+f',, envGetO('theBuf')
call pipeWriteNow
call pipe '-'
call tstEnd t
return
endProcedure tstEnvVars
tstEnvWith: procedure expose m.
/*
$=/tstEW2/
### start tst tstEW2 ##############################################
tstK1| get1 w
tstK1%f1 get1.f1 v
tstK1.f2 get1.f2 w
tstK1%F3 get1.f3 v
ttstK1.F3.FEINS get1.f3.fEins v
tstK1%F3%FZWEI get1.f3.fZwei w
tstK1.F3.FDREI !get1.f3.fDrei w
tstK1%F3%FDREI| get1.f3.fDrei w
tstK1.F3.1 get1.f3.1 w
tstK1%F3%2 TSTEW1
tstK1.F3.2|F1 get1.f1 v
tstK1%F3%2|F3.2|F2 get1.f2 w
*** err: undefined variable F1 in envGet(F1)
F1 0
F1 get1.f1 v
f2 get1.f2 w
F3 get1.f3 v
F3.FEINS get1.f3.fEins v
F3.FZWEI get1.f3.fZwei w
F3%FDREI !get1.f3.fDrei w
F3%FDREI| get1.f3.fDrei w
F3%1 get1.f3.1 w
pu1 F1 get1.f1 v
pu2 F1 get2.f1 v
po-2 F1 get1.f1 v
*** err: undefined variable F1 in envGet(F1)
po-1 F1 0
$/tstEW2/ */
call pipeIni
c0 = classNew('n? TstEW0 u f FEINS v,f FZWEI w, f FDREI r,v,s r')
cl = classNew('n? TstEW u r TstEW0, f F1 v, f F2 r, f F3 TstEW0')
call oMutate tstEW1, cl
m.tstEW1 = s2o('get1 w')
m.tstEW1.f1 = 'get1.f1 v'
m.tstEW1.f2 = s2o('get1.f2 w')
m.tstEW1.f3 = 'get1.f3 v'
m.tstEW1.f3.fEins = 'get1.f3.fEins v'
m.tstEW1.f3.fZwei = s2o('get1.f3.fZwei w')
m.tstEW1.f3.fDrei = s2o('get1.f3.fDrei w')
m.tstEW1.f3.0 = 3
m.tstEW1.f3.1 = s2o('get1.f3.1 w')
m.tstEW1.f3.2 = tstEW1
m.tstEW1.f3.3 = s2o('get1.f3.3 w')
call oMutate tstEW2, cl
m.tstEW2 = s2o('get2 w')
m.tstEW2.f1 = 'get2.f1 v'
m.tstEW2.f2 = s2o('get2.f2 w')
call envPutO 'tstK1', tstEW1
call tst t, 'tstEW2'
call tstOut t, 'tstK1| ' envGet('tstK1|')
call tstOut t, 'tstK1%f1 ' envGet('tstK1%F1')
call tstOut t, 'tstK1.f2 ' envGet('tstK1.F2')
call tstOut t, 'tstK1%F3 ' envGet('tstK1%F3|')
call tstOut t, 'ttstK1.F3.FEINS ' envGet('tstK1.F3.FEINS')
call tstOut t, 'tstK1%F3%FZWEI ' envGet('tstK1%F3%FZWEI')
call tstOut t, 'tstK1.F3.FDREI ' envGetO('tstK1.F3.FDREI')
call tstOut t, 'tstK1%F3%FDREI| ' envGet('tstK1%F3%FDREI')
call tstOut t, 'tstK1.F3.1 ' envGet('tstK1.F3.1')
call tstOut t, 'tstK1%F3%2 ' envGetO('tstK1%F3%2')
call tstOut t, 'tstK1.F3.2|F1 ' envGet('tstK1.F3.2|F1')
call tstOut t, 'tstK1%F3%2|F3.2|F2' ,
envGet('tstK1%F3%2|F3%2|F2')
call tstOut t, 'F1 ' envGet('F1')
call envPushWith tstEW1
call tstOut t, 'F1 ' envGet('F1')
call tstOut t, 'f2 ' envGet('F2')
call tstOut t, 'F3 ' envGet('F3|')
call tstOut t, 'F3.FEINS ' envGet('F3.FEINS')
call tstOut t, 'F3.FZWEI ' envGet('F3.FZWEI')
call tstOut t, 'F3%FDREI ' envGetO('F3%FDREI')
call tstOut t, 'F3%FDREI| ' envGet('F3%FDREI|')
call tstOut t, 'F3%1 ' envGet('F3%1')
call tstOut t, 'pu1 F1 ' envGet('F1')
call envPushWith tstEW2
call tstOut t, 'pu2 F1 ' envGet('F1')
call envPopWith
call tstOut t, 'po-2 F1 ' envGet('F1')
call envPopWith
call tstOut t, 'po-1 F1 ' envGet('F1')
call tstEnd t
/*
$=/tstEW3/
### start tst tstEW3 ##############################################
. s c3.F1 = v(c3.f1)
*** err: no reference @ <c3>.F1 class CLASS.1 in envGet(c3.F1.FEINS+
)
. s c3.F1.FEINS = 0
. s c3.F3.FEINS = .
. s c3.F3.FEINS = val(c3.F3.FEINS)
*** err: no field FEINS @ <c3> class TstEW in envGet(c3.FEINS)
. s c3.FEINS = 0
*** err: null @ <c3> class TstEW in envGet(c3|FEINS)
. s c3|FEINS = 0
aft Put s c3|FEINS = val(c3|FEINS)
Push c3 s F3.FEINS = val(c3.F3.FEINS)
*** err: no field FEINS aftPuP= pushPut(F3 @ <c3>.F3 class TstEW0 i+
n envGet(F3.FEINS aftPuP= pushPut(F3.FEINS))
. s F3.FEINS aftPuP= 0
push c4 s F1 = v(c4.f1)
put f2 s F2 = put(f2)
*** err: no field F222 in class TstEW in EnvPut(F222, f222 stopped,+
. 1)
put .. s F3.FEINS = put(f3.fEins)
popW c4 s F1 = v(c3.f1)
*** err: undefined variable F1 in envGet(F1)
popW c3 s F1 = 0
. s F222 = f222 pop stop
$/tstEW3/
*/
call tst t, 'tstEW3'
c3 = oNew('TstEW')
call mAdd t.trans, c3 '<c3>'
m.c3.f1 = 'v(c3.f1)'
call envPutO 'c3', c3
call tstEnvSG , 'c3.F1'
call tstEnvSG , 'c3.F1.FEINS'
call tstEnvSG , 'c3.F3.FEINS'
call envPut 'c3.F3.FEINS', 'val(c3.F3.FEINS)'
call tstEnvSG , 'c3.F3.FEINS'
call tstEnvSG , 'c3.FEINS'
call tstEnvSG , 'c3|FEINS'
call envPut 'c3|FEINS', 'val(c3|FEINS)'
call tstEnvSG 'aft Put', 'c3|FEINS'
call envPushWith c3
call tstEnvSG 'Push c3', 'F3.FEINS'
call envPut 'F3.FEINS', 'pushPut(F3.FEINS)'
call tstEnvSG , 'F3.FEINS aftPuP=' envGet('F3.FEINS')
c4 = oNew('TstEW')
call mAdd t.trans, c4 '<c4>'
m.c4.f1 = 'v(c4.f1)'
call envPut f222, 'f222 no stop'
call envPushWith c4
call tstEnvSG 'push c4', f1
call envPut f2, 'put(f2)'
call tstEnvSG 'put f2', f2
call envPut f222, 'f222 stopped', 1
call envPut f3.fEins, 'put(f3.fEins)'
call tstEnvSG 'put .. ', f3.fEins
call envPopWith
call tstEnvSG 'popW c4', f1
call envPopWith
call envPut f222, 'f222 pop stop'
call tstEnvSG 'popW c3', f1
call tstEnvSG , f222
call tstEnd t
/*
$=/tstEW4/
### start tst tstEW4 ##############################################
tstO4 S.0 0 R.0 0 class TstEW4
*** err: no field FZWEI in class in EnvPut(FZWEI, v 1.fZwei, 1)
1 fEins s FEINS = v 1.fEins
1 fZwei s FZWEI = .
2 fEins s FEINS = .
2 fZwei s FZWEI = v 2.fZwei
v 1.fEins .# 1 vor
v 1.fEins .# 2 nach withNext e
*** err: undefined variable FEINS in envGet(FEINS)
? fEins s FEINS = 0
1 fEins s FEINS = v 1|fEins
1 fZwei s FZWEI = .
2 fEins s FEINS = .
2 fZwei s FZWEI = v 2.fZwei
v 1|fEins .# 2
$/tstEW4/
*/
c4 = classNew('n? TstEW4 u f S s TstEW0, f R s r TstEW0')
o4 = oClear(oMutate('tstO4', c4))
call tst t, 'tstEW4'
call tstout t, o4 'S.0' m.o4.s.0 'R.0' m.o4.r.0 ,
'class' className(objClass(o4))
call envPushWith o4'.S', m.c4.f2c.s, 'asM'
call envPut fZwei, 'v 1.fZwei', 1
call envWithNext 'b'
call envPut feins, 'v 1.fEins', 1
call tstEnvSG '1 fEins ', fEins
call tstEnvSG '1 fZwei ', fZwei
m.o4.s.2.feins = 'vorher'
m.o4.s.2.fZwei = s2o('vorher')
call envWithNext
call envPut fZwei, 'v 2.fZwei', 1
call tstEnvSG '2 fEins ', fEins
call tstEnvSG '2 fZwei ', fZwei
call tstOut t, m.o4.s.1.fEins '.#' m.o4.s.0 'vor'
call envWithNext 'e'
call tstOut t, m.o4.s.1.fEins '.#' m.o4.s.0 'nach withNext e'
call envPopWith
call tstEnvSG '? fEins ', fEins
call envPushWith o4'.R', m.c4.f2c.r, 'asM'
call envWithNext 'b'
call envPut fEins, 'v 1|fEins', 1
call tstEnvSG '1 fEins ', fEins
call tstEnvSG '1 fZwei ', fZwei
call envWithNext
call envPut fZwei, 'v 2.fZwei', 1
call tstEnvSG '2 fEins ', fEins
call tstEnvSG '2 fZwei ', fZwei
call envWithNext 'e'
call envPopWith
o41r = m.o4.r.1
call tstOut t, m.o41r.fEins '.#' m.o4.r.0
call tstEnd t
return
endProcedure tstEnvWith
tstEnvSG: procedure expose m. t
parse arg txt, nm
call tstOut t, left(txt,10)'s' left(nm, 15)'=' envGet(nm)
return
tstPipeLazy: procedure expose m.
call pipeIni
/*
$=/tstPipeLazy/
### start tst tstPipeLazy #########################################
a1 vor pipeBegin loop lazy 0 writeNow *** <class TstPipeLazyBuf>
bufOpen <
bufClose
#jIn 2# tst in line 2 zwei ; .
#jIn 3# tst in line 3 drei .schluss..
#jIn eof 4#
a5 vor 2 writeNow in inIx 4
a2 vor writeNow jBuf
jBuf line 1
jBuf line 2
a3 vor writeNow in inIx 1
tst in line 2 zwei ; .
tst in line 3 drei .schluss..
a4 vor barLast inIx 4
a6 vor barEnd inIx 4
a7 nach barEnd lazy 0 writeNow ***
b1 vor barBegin lazy 0 writeNow *** <class TstPipeLazyRdr>
RdrOpen <
#jIn 3# tst in line 3 drei .schluss..
#jIn eof 4#
rdrClose
b4 vor writeNow
b2 vor writeNow rdr inIx 2
jRead lazyRdr
tst in line 3 drei .schluss..
jRead lazyRdr
b3 vor barLast inIx 4
b5 vor barEnd inIx 4
b6 nach barEnd lazy 0 writeNow ***
a1 vor pipeBegin loop lazy 1 writeAll *** +
.<class TstPipeLazyBuf>
a5 vor 2 writeAll in inIx 0
a2 vor writeAll jBuf
bufOpen <
jBuf line 1
jBuf line 2
bufClose
a3 vor writeAll in inIx 0
#jIn 1# tst in line 1 eins ,
tst in line 1 eins ,
#jIn 2# tst in line 2 zwei ; .
tst in line 2 zwei ; .
#jIn 3# tst in line 3 drei .schluss..
tst in line 3 drei .schluss..
#jIn eof 4#
a4 vor barLast inIx 0
a6 vor barEnd inIx 4
a7 nach barEnd lazy 1 writeAll ***
b1 vor barBegin lazy 1 writeAll *** <class TstPipeLazyRdr>
b4 vor writeAll
b2 vor writeAll rdr inIx 1
RdrOpen <
jRead lazyRdr
#jIn 2# tst in line 2 zwei ; .
tst in line 2 zwei ; .
jRead lazyRdr
#jIn 3# tst in line 3 drei .schluss..
tst in line 3 drei .schluss..
jRead lazyRdr
#jIn eof 4#
rdrClose
b3 vor barLast inIx 1
b5 vor barEnd inIx 4
b6 nach barEnd lazy 1 writeAll ***
$/tstPipeLazy/ */
call tst t, "tstPipeLazy"
do lz=0 to 1
if lz then
w = 'writeAll'
else
w = 'writeNow'
m.t.inIx = 1-lz
ty = class4Name('TstPipeLazyBuf', '')
if ty == '' then do
ty = classNew('n TstPipeLazyBuf u JRWDeleg', 'm',
, 'jOpen call tstOut "T", "bufOpen" opt;',
'call jOpen m.m.deleg, opt',
, 'jClose call tstOut "T", "bufClose";',
'call jClose m.m.deleg')
end
if \ lz then
call mAdd t'.TRANS', ty '<class TstPipeLazyBuf>'
call out 'a1 vor pipeBegin loop lazy' lz w '***' ty
call pipe '+N'
call out 'a2 vor' w 'jBuf'
b = oNew('TstPipeLazyBuf', jBuf('jBuf line 1','jBuf line 2'))
interpret 'call pipe'w 'b'
call out 'a3 vor' w 'in inIx' m.t.inIx
interpret 'call pipe'w
call out 'a4 vor barLast inIx' m.t.inIx
call pipe 'P|'
call out 'a5 vor 2' w 'in inIx' m.t.inIx
interpret 'call pipe'w
call out 'a6 vor barEnd inIx' m.t.inIx
call pipe '-'
call out 'a7 nach barEnd lazy' lz w '***'
ty = class4Name('TstPipeLazyRdr', '')
if ty == '' then
ty = classNew('n TstPipeLazyRdr u JRW', 'm',
, 'jOpen call tstOut "T", "RdrOpen" opt',
, 'jRead call out "jRead lazyRdr";' ,
'return jRead(m.m.rdr, var);',
, 'jClose call tstOut "T", "rdrClose";')
if \ lz then
call mAdd t'.TRANS', ty '<class TstPipeLazyRdr>'
r = oNew('TstPipeLazyRdr')
m.r.rdr = m.j.in
if lz then
call mAdd t'.TRANS', r '<lazyRdr>'
m.t.inIx = 2-lz
call out 'b1 vor barBegin lazy' lz w '***' ty
call pipe '+N'
call out 'b2 vor' w 'rdr inIx' m.t.inIx
interpret 'call pipe'w 'r'
call out 'b3 vor barLast inIx' m.t.inIx
call pipe 'P|'
call out 'b4 vor' w
interpret 'call pipe'w
call out 'b5 vor barEnd inIx' m.t.inIx
call pipe '-'
call out 'b6 nach barEnd lazy' lz w '***'
end
call tstEnd t
return
endProcedure tstPipeLazy
tstEnvClass: procedure expose m.
call pipeIni
/*
$=/tstEnvClass/
### start tst tstEnvClass #########################################
a0 vor pipeBegin loop lazy 0 writeNow *** TY
#jIn 2# tst in line 2 zwei ; .
#jIn 3# tst in line 3 drei .schluss..
#jIn eof 4#
a5 vor writeNow
a1 vor jBuf()
a2 vor writeNow b
tstR: @<o20 of TstEnvClass10> isA :TstEnvClass10
tstR: .f11 = .
tstR: .F12 = value F12 of o1 <o20 of TstEnvClass10>
tstR: .f13 = .
WriteO o2
tstR: @<oc0 of TstEnvClass20> isA :TstEnvClass20 = valueO2Lazy0
tstR: .f24 = .
tstR: .F25 = value F25 of o20 <o20 of TstEnvClass20>
a3 vor writeNow
tst in line 2 zwei ; .
tst in line 3 drei .schluss..
a4 vor barLast inIx 4
a6 vor barEnd
a7 nach barEnd lazy 0 writeNow ***
a0 vor pipeBegin loop lazy 1 writeAll *** TY
a5 vor writeAll
a1 vor jBuf()
a2 vor writeAll b
tstR: @<o21 of TstEnvClass10> isA :TstEnvClass10
tstR: .f11 = .
tstR: .F12 = value F12 of o1 <o21 of TstEnvClass10>
tstR: .f13 = .
WriteO o2
tstR: @<oc1 of TstEnvClass20> isA :TstEnvClass20 = valueO2Lazy1
tstR: .f24 = .
tstR: .F25 = value F25 of o21 <o21 of TstEnvClass20>
a3 vor writeAll
#jIn 1# tst in line 1 eins ,
tst in line 1 eins ,
#jIn 2# tst in line 2 zwei ; .
tst in line 2 zwei ; .
#jIn 3# tst in line 3 drei .schluss..
tst in line 3 drei .schluss..
#jIn eof 4#
a4 vor barLast inIx 0
a6 vor barEnd
a7 nach barEnd lazy 1 writeAll ***
$/tstEnvClass/ */
call tst t, "tstEnvClass"
t10 = classNew('n? TstEnvClass10 u f f11 v, f F12 v, f f13 v')
t20 = classNew('n? TstEnvClass20 u v, f f24 v, f F25 v')
do lz=0 to 1
if lz then
w = 'writeAll'
else
w = 'writeNow'
m.t.inIx = 1-lz
call out 'a0 vor pipeBegin loop lazy' lz w '***' ty
call pipe '+N'
call out 'a1 vor jBuf()'
b = jOpen(jBuf(), m.j.cWri)
o1 = oNew('TstEnvClass10')
m.o1.F12 = 'value F12 of o1' o1
call mAdd t'.TRANS', o1 '<o2'lz 'of TstEnvClass10>'
call jWriteO b, o1
call jWrite b, 'WriteO o2'
o2 = oNew('TstEnvClass20')
m.o2 = 'valueO2Lazy'lz
m.o2.F25 = 'value F25 of o2'lz o2
oc = oCopy(oCopy(o2))
call mAdd t'.TRANS', o2 '<o2'lz 'of TstEnvClass20>'
call mAdd t'.TRANS', oc '<oc'lz 'of TstEnvClass20>'
call jWriteO b, oc
call out 'a2 vor' w 'b'
interpret 'call pipe'w jClose(b)
call out 'a3 vor' w
interpret 'call pipe'w
call out 'a4 vor barLast inIx' m.t.inIx
call pipe 'P|'
call out 'a5 vor' w
interpret 'call pipe'w
call out 'a6 vor barEnd'
call pipe '-'
call out 'a7 nach barEnd lazy' lz w '***'
end
call tstEnd t
m.t.trans.0 = 0
return
endProcedure tstEnvClass
tstFile: procedure expose m.
call catIni
/*
$=/tstFile/
### start tst tstFile #############################################
write read 0 last 10 vor anfang
write read 1 last 80 links1 1 und rechts | ..
write read 2 last 80 liinks2 2 und rechts | ..
write read 5 last 80 links5 5 rechts5
write read 99 last 80 links99 99 rechts
write read 100 last 80 links100 100 rechts
write read 101 last 80 links101 101 rechts
write read 999 last 80 links999 999 rechts
write read 1000 last 80 links1000 1000 rechts
write read 1001 last 80 links1001 1001 rechts
write read 2109 last 80 links2109 2109 rechts
out > eins 1 +
. .
out > eins 2 schluss. +
. .
buf eins
buf zwei
buf drei
out > zwei mit einer einzigen Zeile +
. .
. links1 1 und rechts | . +
. .
$/tstFile/ */
call tst t, "tstFile"
pds = tstFilename('lib', 'r')
call tstFileWr pds, 0, ' links0', ' und rechts | . '
call tstFileWr pds, 1, ' links1', ' und rechts | . '
call tstFileWr pds, 2, 'liinks2', ' und rechts | . '
call tstFileWr pds, 5, 'links5', 'rechts5'
call tstFileWr pds, 99, 'links99', 'rechts'
call tstFileWr pds, 100, 'links100', 'rechts'
call tstFileWr pds, 101, 'links101', 'rechts'
call tstFileWr pds, 999, 'links999', 'rechts'
call tstFileWr pds, 1000, 'links1000', 'rechts'
call tstFileWr pds, 1001, 'links1001', 'rechts'
call tstFileWr pds, 2109, 'links2109', 'rechts'
pd2 = tstFilename('li2', 'r')
call pipeIni
call pipe '+F', s2o(tstPdsMbr(pd2, 'eins'))
call out tstFB('out > eins 1') /* simulate fixBlock on linux */
call out tstFB('out > eins 2 schluss.')
call pipe '-'
call pipe '+F', s2o(tstPdsMbr(pd2, 'zwei'))
call out tstFB('out > zwei mit einer einzigen Zeile')
call pipe '-'
b = jBuf("buf eins", "buf zwei", "buf drei")
call pipe '+f', , s2o(tstPdsMbr(pd2, 'eins')), b,
,jBuf(),
,s2o(tstPdsMbr(pd2, 'zwei')),
,s2o(tstPdsMbr(pds, 'wr0')),
,s2o(tstPdsMbr(pds, 'wr1'))
call pipeWriteNow
call pipe '-'
call tstEnd t
return
endProcedure tstFile
/*--- simulate fixBlock 80 on linux ---------------------------------*/
tstFB: procedure expose m.
parse arg line, recL
if m.err.os \== 'LINUX' then
return line
else if recL == '' then
return left(line, 80)
else
return left(line, recL)
endProcedure tstFB
tstPdsMbr: procedure expose m.
parse arg pds, mbr
if m.err.os = 'TSO' then
return pds'('mbr') ::F'
if m.err.os = 'LINUX' then
return pds'.'mbr
call err 'tstPdsMbr implement os' m.err.os
endProcedure tstPdsMbr
tstFileWR: procedure expose m.
parse arg dsn, num, le, ri
io = file(tstPdsMbr(dsn, 'wr'num))
call jOpen io, m.j.cWri
do x = 1 to num /* simulate fixBlock 80 on LINUX*/
call jWrite io, tstFB(le x ri)
end
call jClose io
if num > 100 then
call jReset io, tstPdsMbr(dsn, 'wr'num)
call jOpen io, m.j.cRead
m.vv = 'vor anfang'
do x = 1 to num
if \ jRead(io, vv) then
call err x 'not jRead'
else if m.vv <> le x ri then
call err x 'read mismatch' m.vv
end
if jRead(io, vv) then
call err x 'jRead but should be eof 1'
if jRead(io, vv) then
call err x'+1 jjRead but should be eof 2'
call jClose io
call tstOut t, 'write read' num 'last' length(m.vv) strip(m.vv,'t')
return
endProcedure tstFileRW
tstFileList: procedure expose m.
call catIni
/*
$=/tstFileList/
### start tst tstFileList #########################################
empty dir
filled dir
<<pref 2 List>>eins
<<pref 2 List>>zwei
<<pref 2 List>>drei
<<pref 2 List>>vier
filled dir recursive
<<pref 2 List>>eins
<<pref 2 List>>zwei
<<pref 2 List>>drei
<<pref 2 List>>vier
<<pref 1 vier>>eins
<<pref 1 vier>>zwei
<<pref 1 vier>>drei
$/tstFileList/ */
/*
$=/tstFileListTSO/
### start tst tstFileListTSO ######################################
empty dir
filled dir
<<pref 2 LIST>>DREI
<<pref 2 LIST>>EINS
<<pref 2 LIST>>ZWEI
filled dir recursive
<<pref 2 LIST>>DREI
<<pref 2 LIST>>EINS
<<pref 1 VIER>>DREI
<<pref 1 VIER>>EINS
<<pref 1 VIER>>ZWEI
<<pref 2 LIST>>ZWEI
$/tstFileListTSO/ */
if m.err.os = 'TSO' then
call tst t, "tstFileListTSO"
else
call tst t, "tstFileList"
fi = file(tstFileName('FileList', 'r'))
call fileMkDir fi
fl = fileList(fi)
call tstOut t, 'empty dir'
call jWriteNow t, fl
call tstFileListMake t, fi, 2
call tstOut t, 'filled dir'
call jWriteNow t, fl
call tstOut t, 'filled dir recursive'
call jWriteNow t, fileList(fi, 'r')
call tstEnd t
return
endProcedure tstFileList
tstFileListMake: procedure expose m.
parse arg t, fi, lev
if \ fileIsDir(fi) then
call fileMkDir fi
call mAdd t'.TRANS', filePath(fi) || m.file.sep ,
'<<pref' lev right(filePath(fi),4)'>>'
call jCat fileChild(fi, 'eins','::F'),jBuf('zeile eins','eins' lev)
call jCat fileChild(fi, 'zwei','::F'),jBuf('zeile zwei','zwei' lev)
call jCat fileChild(fi, 'drei','::F'),jBuf('zeile drei','drei' lev)
if lev > 1 then
call tstFileListMake t, fileChild(fi, 'vier'), lev-1
return
endProcedure tstFileListMake
tstF: procedure expose m.
/*
$=/tstF/
### start tst tstF ################################################
f(1\s23%s345%s67\%8, eins, zwei ) =1 23eins345 zwei 67%8;
f(1\S23%s345%S67\%8, eins, zwei ) =1\S23eins345zwei67%8;
f(1\s23%s345%s67\%8, eins, zwei ) =1 23eins345 zwei 67%8;
f(1\s23%s345%S67\%8, eins, zwei ) =1 23eins345zwei67%8;
f(1%S2%s3@2%S4@%s5, eins, zwei ) =1eins2 zwei 3zwei4 zwei 5;
f(1%-2C2%3C3@2%3.2C4, eins, zwei ) =1ei2ei 3zwe4;
f(1@F1%s2@f2%s3@F3%s4, eins, zwei ) =1fEins2fZwei3fDrei4;
tstF2 _ %-9C @%5i @%8i @%+8i @%-8i -----
_ 0 0 0 +0 0 .
_ -1.2 -1 -1 -1 -1 .
_ 2.34 2 2 +2 2 .
_ -34.8765 -35 -35 -35 -35 .
_ 567.91234 568 568 +568 568 .
_ -8901 -8901 -8901 -8901 -8901 .
_ 23456 23456 23456 +23456 23456 .
_ -789012 ***** -789012 -789012 -789012 .
_ 34e6 ***** 34000000 ******** 34000000
_ -56e7 ***** ******** ******** ********
_ 89e8 ***** ******** ******** ********
_ txtli txtli txtli txtli txtli .
_ undEinLan Text? gerText? gerText? undEinLa
tstF2 _ %-9C @%5.2i @%12.2i @%+12.2i @%-12.2i -----
_ 0 0.00 0.00 +0.00 0.00 .
_ -1.2 -1.20 -1.20 -1.20 -1.20 .
_ 2.34 2.34 2.34 +2.34 2.34 .
_ -34.8765 ***** -34.88 -34.88 -34.88 .
_ 567.91234 ***** 567.91 +567.91 567.91 .
_ -8901 ***** -8901.00 -8901.00 -8901.00 .
_ 23456 ***** 23456.00 +23456.00 23456.00 .
_ -789012 ***** -789012.00 -789012.00 -789012.00 .
_ 34e6 ***** 34000000.00 +34000000.00 34000000.00 .
_ -56e7 ***** ************ ************ ************
_ 89e8 ***** ************ ************ ************
_ txtli txtli txtli txtli txtli .
_ undEinLan Text? nLangerText? nLangerText? undEinLanger
tstF2 _ %-9C @%7e @%8E @%9.2e @%11.3E -----
_ 0 0.00e00 0.00E00 0.00e+00 0.000E+000
_ -1.2 -1.2e00 -1.20E00 -1.20e+00 -1.200E+000
_ 2.34 2.34e00 2.34E00 2.34e+00 2.340E+000
_ -34.8765 -3.5e01 -3.49E01 -3.49e+01 -3.488E+001
_ 567.91234 5.68e02 5.68E02 5.68e+02 5.679E+002
_ -8901 -8.9e03 -8.90E03 -8.90e+03 -8.901E+003
_ 23456 2.35e04 2.35E04 2.35e+04 2.346E+004
_ -789012 -7.9e05 -7.89E05 -7.89e+05 -7.890E+005
_ 34e6 3.40e07 3.40E07 3.40e+07 3.400E+007
_ -56e7 -5.6e08 -5.60E08 -5.60e+08 -5.600E+008
_ 89e8 8.90e09 8.90E09 8.90e+09 8.900E+009
_ txtli txtli txtli txtli txtli .
_ undEinLan undEinL undEinLa undEinLan undEinLange
_ 8.76e-07 8.76e-7 8.76E-7 8.76e-07 8.760E-007
_ 5.43e-11 0.05e-9 0.05E-9 5.43e-11 5.430E-011
_ -8.76e-07 -8.8e-7 -8.76E-7 -8.76e-07 -8.760E-007
_ -5.43e-11 -0.1e-9 -0.05E-9 -5.43e-11 -5.430E-011
$/tstF/ */
call tst t, 'tstF'
call tstF1 '1\s23%s345%s67\%8'
call tstF1 '1\S23%s345%S67\%8'
call tstF1 '1\s23%s345%s67\%8'
call tstF1 '1\s23%s345%S67\%8'
call tstF1 '1%S2%s3@2%S4@%s5'
call tstF1 '1%-2C2%3C3@2%3.2C4'
call tstF1 '1@F1%s2@f2%s3@F3%s4'
nums = '0 -1.2 2.34 -34.8765 567.91234 -8901 23456' ,
'-789012 34e6 -56e7 89e8 txtli undEinLangerText?'
call tstF2 '_ %-9C @%5i @%8i @%+8i @%-8i', nums
call tstF2 '_ %-9C @%5.2i @%12.2i @%+12.2i @%-12.2i', nums
num2 = ' 8.76e-07 5.43e-11 -8.76e-07 -5.43e-11'
call tstF2 '_ %-9C @%7e @%8E @%9.2e @%11.3E', nums num2
call tstEnd t
return
endProcedure tstF
tstF1: procedure expose m.
parse arg fmt
e='eins'
z=' zwei '
f2 = 'f2'
m.e.f1 = 'fEins'
m.e.f2 = 'fZwei'
m.e.f3 = 'fDrei'
call out "f("fmt"," e"," z") ="f(fmt, e, z)";"
return
endProcedure tstF1
tstF2: procedure expose m.
parse arg fmt, vals
call out 'tstF2' fmt '-----'
do vx=1 to words(vals)
call out f(fmt, word(vals, vx))
end
return
endProcedure tstF2
tstFmt: procedure expose m.
call pipeIni
/*
$=/tstFmt/
### start tst tstFmt ##############################################
= a2i b3b d4 fl5 ex6
-11 -11 b3 d4-11+d4++++ -111.1000000 -1.11000E-12
-1 -10 b d4-10+d4+++ null1 null3
- -9 b3b-9 d4-9+d4+++ -11.0000000 -1.11900E-10
-8+ -8 b3b- d4-8+d4++ -18.0000000 -1.18000E010
-7 -7 b3b d4-7+d4+ -7.0000000 -1.70000E-07
- -6 b3 d4-6+d4 -0.1111160 -6.00000E006
-5+ -5 b d4-5+d null2 null2
-4 -4 b3b-4 d4-4+ -11114.0000000 -1.11140E008
- -3 b3b- d4-3 -0.1130000 -1.13000E-04
-2+ -2 b3b d4- -0.1200000 -1.20000E001
-1 -1 b3 d4 -0.1000000 -1.00000E-02
0 0 b d null1 null1
1+ 1 b3 d4 0.1000000 1.00000E-02
2++ 2 b3b d42 0.1200000 1.20000E001
3 3 b3b3 d43+ 0.1130000 1.13000E-04
4+ 4 b3b4+ d44+d 11114.0000000 1.11140E008
5++ 5 b d45+d4 null2 null2
6 6 b3 d46+d4+ 0.1111160 1.11116E005
7+ 7 b3b d47+d4++ 0.1111117 7.00000E-08
8++ 8 b3b8 d48+d4+++ 8.0000000 1.80000E009
9 9 b3b9+ d49+d4++++ 0.9000000 1.19000E-08
10 10 b d410+d4++++ null1 null3
11+ 11 b3 d411+d4+++++ 0.1110000 1.00000E-12
1 12 b3b d412+d4++++++ 11112.0000000 2.00000E012
13 13 b3b1 d 1111.3000000 1.13000E-12
14+ 14 b3b14 d4 111111.0000000 1.40000E013
1 15 b d41 null2 null1
16 16 b3 d416 6.0000000 1.16000E003
17+ 17 b3b d417+ 0.7000000 1.11170E-03
1 18 b3b1 d418+d 11.0000000 1.11800E003
19 19 b3b19 d419+d4 0.1190000 9.00000E-05
20+ 20 b d420+d4+ null1 null2
2 21 b3 d421+d4++ 11.1210000 1.11000E-05
22 22 b3b d422+d4+++ 11111.2000000 2.00000E007
23+ 23 b3b2 d423+d4++++ 0.1111123 1.11230E-09
c3L a2i drei d4 fl5 ex6
-11 -1.10E01 b3 d4-11+d -111.1000000 -1.11000E-12
-1 -1.00E01 b d4-10+d null1 null3
- -9.00E00 b3b-9 d4-9+d4 -11.0000000 -1.11900E-10
-8+ -8.00E00 b3b- d4-8+d4 -18.0000000 -1.18000E010
-7 -7.00E00 b3b d4-7+d4 -7.0000000 -1.70000E-07
- -6.00E00 b3 d4-6+d4 -0.1111160 -6.00000E006
-5+ -5.00E00 b d4-5+d null2 null2
-4 -4.00E00 b3b-4 d4-4+ -11114.0000000 -1.11140E008
- -3.00E00 b3b- d4-3 -0.1130000 -1.13000E-04
-2+ -2.00E00 b3b d4- -0.1200000 -1.20000E001
-1 -1.00E00 b3 d4 -0.1000000 -1.00000E-02
0 0.00E00 b d null1 null1
1+ 1.00E00 b3 d4 0.1000000 1.00000E-02
2++ 2.00E00 b3b d42 0.1200000 1.20000E001
3 3.00E00 b3b3 d43+ 0.1130000 1.13000E-04
4+ 4.00E00 b3b4+ d44+d 11114.0000000 1.11140E008
5++ 5.00E00 b d45+d4 null2 null2
6 6.00E00 b3 d46+d4+ 0.1111160 1.11116E005
7+ 7.00E00 b3b d47+d4+ 0.1111117 7.00000E-08
8++ 8.00E00 b3b8 d48+d4+ 8.0000000 1.80000E009
9 9.00E00 b3b9+ d49+d4+ 0.9000000 1.19000E-08
10 1.00E01 b d410+d4 null1 null3
11+ 1.10E01 b3 d411+d4 0.1110000 1.00000E-12
1 1.20E01 b3b d412+d4 11112.0000000 2.00000E012
13 1.30E01 b3b1 d 1111.3000000 1.13000E-12
14+ 1.40E01 b3b14 d4 111111.0000000 1.40000E013
1 1.50E01 b d41 null2 null1
16 1.60E01 b3 d416 6.0000000 1.16000E003
17+ 1.70E01 b3b d417+ 0.7000000 1.11170E-03
1 1.80E01 b3b1 d418+d 11.0000000 1.11800E003
19 1.90E01 b3b19 d419+d4 0.1190000 9.00000E-05
20+ 2.00E01 b d420+d4 null1 null2
2 2.10E01 b3 d421+d4 11.1210000 1.11000E-05
22 2.20E01 b3b d422+d4 11111.2000000 2.00000E007
23+ 2.30E01 b3b2 d423+d4 0.1111123 1.11230E-09
$/tstFmt/ */
call tst t, "tstFmt"
b = jBuf()
st = b'.BUF'
call pipe '+F', b
call tstDataClassOut '. c3 a2i i b3b c5 d4 c13 fl5 f8n2 ex6 e9n3',
, -11, + 23
call pipe '-'
call fmtFTab abc, b
call fmtFAddFlds fmtFReset(abc), oFlds(m.st.1)
m.abc.1.tit = 'c3L'
m.abc.2.fmt = 'e'
m.abc.3.tit = 'drei'
m.abc.4.fmt = 'l7'
call fmtFWriteSt abc, b'.BUF'
call tstEnd t
return
endProcedure tstFmt
tstFTab: procedure expose m.
call pipeIni
/*
$=/tstFTab/
### start tst tstFTab #############################################
testData begin
..---------a2i-b3b------------------d4------fl5-ex6-------
-11 -11 b3 -11+d4++++ -111.100 0.00e-9
-1 -10 b 4-10+d4+++ null1 null3 .
- -9 b3b-9 d4-9+d4+++ -11.000 -0.1e-9
-8+ -8 b3b- d4-8+d4++ -18.000 -1.2e10
-7 -7 b3b d4-7+d4+ -7.000 -1.7e-7
- -6 b3 d4-6+d4 -0.111 -6.0e06
-5+ -5 b d4-5+d null2 null2 .
-4 -4 b3b-4 d4-4+ ******** -1.1e08
- -3 b3b- d4-3 -0.113 -1.1e-4
-2+ -2 b3b d4- -0.120 -1.2e01
-1 -1 b3 d4 -0.100 -1.0e-2
0 0 b d null1 null1 .
1+ 1 b3 d4 0.100 1.00e-2
2++ 2 b3b d42 0.120 1.20e01
3 3 b3b3 d43+ 0.113 1.13e-4
4+ 4 b3b4+ d44+d ******** 1.11e08
5++ 5 b d45+d4 null2 null2 .
6 6 b3 d46+d4+ 0.111 1.11e05
7+ 7 b3b d47+d4++ 0.111 7.00e-8
8++ 8 b3b8 d48+d4+++ 8.000 1.80e09
9 9 b3b9+ d49+d4++++ 0.900 1.19e-8
10 10 b 410+d4++++ null1 null3 .
11+ 11 b3 11+d4+++++ 0.111 0.00e-9
1 12 b3b 2+d4++++++ ******** 2.00e12
13 13 b3b1 d 1111.300 0.00e-9
14+ 14 b3b14 d4 ******** 1.40e13
1 15 b d41 null2 null1 .
16 16 b3 d416 6.000 1.16e03
17+ 17 b3b d417+ 0.700 1.11e-3
1 18 b3b1 d418+d 11.000 1.12e03
19 19 b3b19 d419+d4 0.119 9.00e-5
20+ 20 b d420+d4+ null1 null2 .
2 21 b3 d421+d4++ 11.121 1.11e-5
22 22 b3b d422+d4+++ ******** 2.00e07
23+ 23 b3b2 423+d4++++ 0.111 1.11e-9
..---------a2i-b3b------------------d4------fl5-ex6-------
testData end
$/tstFTab/ */
call tst t, "tstFTab"
b = jBuf()
st = b'.BUF'
call pipe '+F', b
call tstDataClassOut '. c3 a2i i b3b c5 d4 c13 fl5 f8n2 ex6 e9n3',
, -11, + 23
call pipe 'P|'
call fTabReset ft, 2 1, 1 3
call fTabAdd ft, '.' , '%-6C' , '.', 'testData begin',
, 'testData end'
call fTabAdd ft, 'a2i' , ' %6i'
call fTabAdd ft, 'b3b' , ' %-12C'
call fTabAdd ft, 'd4' , ' %10C'
call fTabAdd ft, 'fl5' , ' %8.3i'
call fTabAdd ft, 'ex6' , ' %7e'
call fTab ft
call pipe '-'
call tstEnd t
return
endProcedure tstFTab
tstfmtUnits: procedure
/*
$=/tstFmtUnits/
### start tst tstFmtUnits #########################################
. .3 ==> 0s30 ++> 0s30 -+> -0s30 --> -0s30
. .8 ==> 0s80 ++> 0s80 -+> -0s80 --> -0s80
. 1 ==> 1s00 ++> 1s00 -+> -1s00 --> -1s00
. 1.2 ==> 1s20 ++> 1s20 -+> -1s20 --> -1s20
. 59 ==> 59s00 ++> 59s00 -+> -59s0 --> -59s00
. 59.07 ==> 59s07 ++> 59s07 -+> -59s0 --> -59s07
. 59.997 ==> 1m00 ++> 1m00 -+> -1m00 --> -1m00
. 60 ==> 1m00 ++> 1m00 -+> -1m00 --> -1m00
. 60.1 ==> 1m00 ++> 1m00 -+> -1m00 --> -1m00
. 611 ==> 10m11 ++> 10m11 -+> -10m1 --> -10m11
. 3599.4 ==> 59m59 ++> 59m59 -+> -59m5 --> -59m59
. 3599.5 ==> 1h00 ++> 1h00 -+> -1h00 --> -1h00
. 3661 ==> 1h01 ++> 1h01 -+> -1h01 --> -1h01
. 83400 ==> 23h10 ++> 23h10 -+> -23h1 --> -23h10
. 84700 ==> 23h32 ++> 23h32 -+> -23h3 --> -23h32
. 86400 ==> 1d00 ++> 1d00 -+> -1d00 --> -1d00
. 89900 ==> 1d01 ++> 1d01 -+> -1d01 --> -1d01
. 8467200 ==> 98d00 ++> 98d00 -+> -98d0 --> -98d00
. 8595936.00 ==> 99d12 ++> 99d12 -+> -99d1 --> -99d12
. 8638704.00 ==> 100d ++> 100d -+> -100d --> -100d
. 8640000 ==> 100d ++> 100d -+> -100d --> -100d
. 863913600 ==> 9999d ++> 9999d -+> ----d --> -9999d
. 863965440 ==> ++++d ++> 10000d -+> ----d --> -----d
. 8.6400E+9 ==> ++++d ++> +++++d -+> ----d --> -----d
. .3 ==> 0.300 ++> 0.300 -+> -0.300 --> -0.300
. .8 ==> 0.800 ++> 0.800 -+> -0.800 --> -0.800
. 1 ==> 1.000 ++> 1.000 -+> -1.000 --> -1.000
. 1.2 ==> 1.200 ++> 1.200 -+> -1.200 --> -1.200
. 59 ==> 59.000 ++> 59.000 -+> -59.000 --> -59.000
. 59.07 ==> 59.070 ++> 59.070 -+> -59.070 --> -59.070
. 59.997 ==> 59.997 ++> 59.997 -+> -59.997 --> -59.997
. 60 ==> 60.000 ++> 60.000 -+> -60.000 --> -60.000
. 60.1 ==> 60.100 ++> 60.100 -+> -60.100 --> -60.100
. 611 ==> 611.000 ++> 611.000 -+> -611.00 --> -611.000
. 3599.4 ==> 3k599 ++> 3k599 -+> -3k599 --> -3k599
. 3599.5 ==> 3k600 ++> 3k600 -+> -3k600 --> -3k600
. 3661 ==> 3k661 ++> 3k661 -+> -3k661 --> -3k661
. 83400 ==> 83k400 ++> 83k400 -+> -83k400 --> -83k400
. 999999.44 ==> 999k999 ++> 999k999 -+> -999k99 --> -999k999
. 999999.5 ==> 1M000 ++> 1M000 -+> -1M000 --> -1M000
. 567.6543E6 ==> 567M654 ++> 567M654 -+> -567M65 --> -567M654
. .9999991E9 ==> 999M999 ++> 999M999 -+> -999M99 --> -999M999
. .9999996E9 ==> 1G000 ++> 1G000 -+> -1G000 --> -1G000
. .9999991E12 ==> 999G999 ++> 999G999 -+> -999G99 --> -999G999
. .9999996E12 ==> 1T000 ++> 1T000 -+> -1T000 --> -1T000
. 567.6543E12 ==> 567T654 ++> 567T654 -+> -567T65 --> -567T654
. .9999991E15 ==> 999T999 ++> 999T999 -+> -999T99 --> -999T999
. .9999996E15 ==> 1P000 ++> 1P000 -+> -1P000 --> -1P000
. .9999991E18 ==> 999P999 ++> 999P999 -+> -999P99 --> -999P999
. .9999996E18 ==> 1E000 ++> 1E000 -+> -1E000 --> -1E000
. 567.6543E18 ==> 567E654 ++> 567E654 -+> -567E65 --> -567E654
. .9999991E21 ==> 999E999 ++> 999E999 -+> -999E99 --> -999E999
. .9999996E21 ==> 1000E ++> 1000E -+> -1000E --> -1000E
. .9999992E24 ==> 999999E ++> 999999E -+> ------E --> -999999E
. .9999995E24 ==> ++++++E ++> 1000000E -+> ------E --> -------E
. 10.6543E24 ==> ++++++E ++> +++++++E -+> ------E --> -------E
$/tstFmtUnits/ */
call jIni
call tst t, "tstFmtUnits"
d = 86400
lst = .3 .8 1 1.2 59 59.07 59.997 60 60.1 611 ,
3599.4 3599.5 3661 d-3000 d-1700 d d+3500 ,
d * 98 d * 99.49 d * 99.985 d*100 d * 9999 d * 9999.6 ,
d * 1e5
do wx=1 to words(lst)
call tstOut t, right(word(lst, wx), 14) ,
'==>' fmtTime( word(lst, wx) ) ,
'++>' fmtTime( word(lst, wx), 1),
'-+>' fmtTime('-'word(lst, wx), ),
'-->' fmtTime('-'word(lst, wx), 1)
end
lst = subword(lst, 1, 14) 999999.44 999999.5,
567.6543e6 .9999991e9 .9999996e9 .9999991e12 .9999996e12 ,
567.6543e12 .9999991e15 .9999996e15 .9999991e18 .9999996e18 ,
567.6543e18 .9999991e21 .9999996e21 .9999992e24 .9999995e24 ,
10.6543e24
do wx=1 to words(lst)
call tstOut t, right(word(lst, wx), 14) ,
'==>' fmtDec( word(lst, wx) ) ,
'++>' fmtDec( word(lst, wx), 1),
'-+>' fmtDec('-'word(lst, wx), ),
'-->' fmtDec('-'word(lst, wx), 1)
end
call tstEnd t
return
endProcedure tstfmtUnits
tstSb: procedure expose m.
/*
$=/tstSb/
### start tst tstSb ###############################################
end : 0
char 3 : 1 abc
lit d? : 0 .
lit de : 1 de
lit de ? fg fgh: 1 fg
while HIJ : 0 .
end : 0
while Jih : 1 hi
while ? klj: 1 jklkl ?
end : 1
while ? klj: 0 .
char 3 : 0 .
lit : 0 .
until cba : 0 .
until ?qd : 1 abc
until ?qr : 1 defdef .
until ?qr : 0 .
strEnd ? : 1 .
strEnd ? : 0 .
strEnd ? : 1 ab?cd??gh
strEnd ") ": 1 ab
strEnd ") ": 1 cd) gh
$/tstSb/ */
call tst t, 'tstSb'
call sbSrc s, 'abcdefghijklkl ?'
call out 'end :' sbEnd(s)
call out 'char 3 :' sbChar(s, 3) m.s.tok
call out 'lit d? :' sbLit(s, 'd?') m.s.tok
call out 'lit de :' sbLit(s, 'de') m.s.tok
call out 'lit de ? fg fgh:' sbLit(s, 'de ? fg fgh') m.s.tok
call out 'while HIJ :' sbWhile(s, 'HIJ') m.s.tok
call out 'end :' sbEnd(s)
call out 'while Jih :' sbWhile(s, 'Jih') m.s.tok
call out 'while ? klj:' sbWhile(s, '? klj') m.s.tok
call out 'end :' sbEnd(s)
call out 'while ? klj:' sbWhile(s, '? klj') m.s.tok
call out 'char 3 :' sbChar(s, 3) m.s.tok
call out 'lit :' sbLit(s, '') m.s.tok
call sbSrc s, 'abcdefdef ?'
call out 'until cba :' sbUntil(s, 'cba') m.s.tok
call out 'until ?qd :' sbUntil(s, '?qd') m.s.tok
call out 'until ?qr :' sbUntil(s, '?qr') m.s.tok
call out 'until ?qr :' sbUntil(s, '?qr') m.s.tok
call out 'strEnd ? :' sbStrEnd(s, '?') m.s.tok
call out 'strEnd ? :' sbStrEnd(s, '?') m.s.tok
call sbSrc s, 'ab??cd????gh?ijk'
call out 'strEnd ? :' sbStrEnd(s, '?') m.s.tok
call sbSrc s, 'ab) cd) ) gh) jk) )'
call out 'strEnd ") ":' sbStrEnd(s, ') ') m.s.tok
call out 'strEnd ") ":' sbStrEnd(s, ') ') m.s.tok
call tstEnd t
return
endProcedure tstSb
tstScan: procedure expose m.
/*
$=/tstScan.1/
### start tst tstScan.1 ###########################################
scan src a034,Und hr123sdfER"st1" 'str2''mit''apo''s' .
scan n tok 4: a034 key val .
scan , tok 1: , key val .
scan n tok 3: Und key val .
scan v tok 1: key val .
scan n tok 10: hr123sdfER key val .
scan q tok 5: "st1" key val st1
scan v tok 1: key val st1
scan a tok 19: 'str2''mit''apo''s' key val str2'mit'apo's
scan v tok 1: key val str2'mit'apo's
$/tstScan.1/ */
call tst t, 'tstScan.1'
call tstScan1 ,'l"litEins"l"litZwei"ndv" "aq1' ,
,"a034,Und hr123sdfER""st1"" 'str2''mit''apo''s' "
call tstEnd t
/*
$=/tstScan.2/
### start tst tstScan.2 ###########################################
scan src a034,Und hr123sdfER"st1" 'str2''mit''apo''s' .
scan n tok 4: a034 key val .
scan , tok 1: , key val .
scan n tok 3: Und key val .
scan b tok 0: key val .
scan n tok 10: hr123sdfER key val .
scan " tok 5: "st1" key val st1
scan b tok 0: key val st1
scan ' tok 19: 'str2''mit''apo''s' key val str2'mit'apo's
scan b tok 0: key val str2'mit'apo's
$/tstScan.2/ */
call tst t, 'tstScan.2'
call tstScan1 , 'ndsb1' ,
,"a034,Und hr123sdfER""st1"" 'str2''mit''apo''s' "
call tstEnd t
/*
$=/tstScan.3/
### start tst tstScan.3 ###########################################
scan src a034,'wie 789abc
scan n tok 4: a034 key val .
scan , tok 1: , key val .
*** err: scanErr ending Apostroph(') missing
. e 1: last token scanPosition 'wie 789abc
. e 2: pos 6 in string a034,'wie 789abc
scan ' tok 1: ' key val .
scan n tok 3: wie key val .
scan s tok 0: key val .
*** err: scanErr illegal number end after 789
. e 1: last token 789 scanPosition abc
. e 2: pos 14 in string a034,'wie 789abc
scan d tok 3: 789 key val .
scan n tok 3: abc key val .
$/tstScan.3/ */
call tst t, 'tstScan.3'
call tstScan1 , 'nds1' ,
,"a034,'wie 789abc"
call tstEnd t
/*
$=/tstScan.4/
### start tst tstScan.4 ###########################################
scan src litEinsefr 23 sdfER'str1'litZwei "str2""mit quo"s .
scan l tok 7: litEins key val .
scan n tok 3: efr key val .
scan b tok 0: key val .
scan d tok 2: 23 key val .
scan b tok 0: key val .
scan n tok 5: sdfER key val .
scan a tok 6: 'str1' key val str1
scan l tok 7: litZwei key val str1
scan b tok 0: key val str1
scan q tok 15: "str2""mit quo" key val str2"mit quo
scan n tok 1: s key val str2"mit quo
scan b tok 0: key val str2"mit quo
$/tstScan.4/ */
call tst t, 'tstScan.4'
call tstScan1 , 'l"litEins"l"litZwei"ndbaq1' ,
,"litEinsefr 23 sdfER'str1'litZwei ""str2""""mit quo""s "
call tstEnd t
/*
$=/tstScan.5/
### start tst tstScan.5 ###########################################
scan src aha;+-=f ab=cdEf eF='strIng' .
scan b tok 0: key val .
scan k tok 4: no= key aha val def
scan ; tok 1: ; key aha val def
scan + tok 1: + key aha val def
scan - tok 1: - key aha val def
scan = tok 1: = key aha val def
scan k tok 4: no= key f val def
scan k tok 4: cdEf key ab val cdEf
scan b tok 4: cdEf key ab val cdEf
scan k tok 8: 'strIng' key eF val strIng
scan b tok 8: 'strIng' key eF val strIng
$/tstScan.5/ */
call tst t, 'tstScan.5'
call tstScan1 , 'bk1'," aha;+-=f ab=cdEf eF='strIng' "
call tstEnd t
return
endProcedure tstScan
tstScanRead: procedure expose m.
/*
$=/tstScanRead/
### start tst tstScanRead #########################################
name erste
space
name Zeile
space
nextLine
nextLine
space
name dritte
space
name Zeile
space
name schluss
space
$/tstScanRead/ */
call scanReadIni
call tst t, 'tstScanRead'
b = jBuf('erste Zeile ',,' dritte Zeile schluss ')
s = jOpen(scanRead(b), m.j.cRead)
do while \scanAtEnd(s)
if scanName(s) then call tstOut t, 'name' m.s.tok
else if scanVerify(s, ' ') then call tstOut t, 'space'
else if scanReadNL(s) then call tstOut t, 'nextLine'
else if \scanAtEnd(s) then call scanErr s, 'cannot scan'
end
call jClose s
call tstEnd t
/*
$=/tstScanReadMitSpaceLn/
### start tst tstScanReadMitSpaceLn ###############################
name erste
spaceLn
name Zeile
spaceLn
name dritte
spaceLn
name Zeile
spaceLn
name schluss
spaceLn
$/tstScanReadMitSpaceLn/ */
call tst t, 'tstScanReadMitSpaceLn'
s = jOpen(scanRead(b), '>')
do forever
if scanName(s) then call out 'name' m.s.tok
else if scanSpaceNL(s) then call out 'spaceLn'
else if \scanAtEnd(s) then call scanErr s, 'cannot scan'
else leave
end
call jClose s
call tstEnd t
/*
$=/tstScanJRead/
### start tst tstScanJRead ########################################
1 jRead n tok erste val .
2 jRead s tok val .
3 jRead n tok Zeile val .
4 jRead s tok val .
5 jRead n tok dritte val .
6 jRead s tok val .
7 jRead n tok Zeile val .
8 jRead s tok val .
9 jRead n tok schluss val .
10 jRead s tok val .
11 jRead 0 tok 1 val 1
12 jRead s tok val 1
13 jRead + tok + val 1
14 jRead s tok val 1
15 jRead 0 tok 2. val 2..
16 jRead s tok val 2..
17 jRead + tok + val 2..
18 jRead . tok . val 2..
19 jRead s tok val 2..
20 jRead 0 tok +.3 val +.3
21 jRead 0 tok -45e-3 val -45E-3
22 jRead s tok val -45E-3
23 jRead " tok "a""b" val a"b
24 jRead s tok val a"b
25 jRead ' tok 'c''d' val c'd
className 1: Scan 18: Scan
$/tstScanJRead/ */
call tst t, 'tstScanJRead'
call jWrite jOpen(b,'>>'), '1 + 2. +. +.3-45e-3 "a""b"' "'c''d'"
s = jOpen(scanRead(jClose(b)), '>')
do x=1 while jRead(s, v.x)
call out x 'jRead' m.v.x.type 'tok' m.v.x.tok 'val' m.v.x.val
end
call jClose s
call out 'className 1:' className(objClass(v.1)),
'18:' className(objClass(v.18))
call tstEnd t
return
endProcedure tstScanRead
tstScanUtilInto: procedure expose m.
/*
$=/tstScanUtilIntoL/
TEMPLATE P3
DSN('DBAF.DA540769.A802A.P00003.BV5I3NRN.REC')
DISP(OLD,KEEP,KEEP)
TEMPLATE P4
DSN('DBAF.DA540769.A802A.P00004.BV5I3NTK.REC')
DISP(OLD,KEEP,KEEP)
LOAD DATA LOG NO RESUME NO REPLACE COPYDDN(TCOPYD)
STATISTICS INDEX(ALL) REPORT NO UPDATE ALL
EBCDIC CCSID(00500,00000,00000)
SORTKEYS
-- ENFORCE NO
SORTDEVT DISK
SORTNUM 160
WORKDDN(TSYUTD,TSOUTD)
INTO TABLE OA1P.TWB981 PART 1 INDDN TREC134
WORKDDN(TSYUTS,TSOUTS)
INTO TABLE "A540769"
."TWK802A1"
PART 00001 INDDN P0
WHEN(00001:00002) = X'0041'
( "DE1"
POSITION( 00003:00010) DECIMAL
, "CH2"
POSITION( 00011:00015) CHAR(00005)
, "TS3"
POSITION( 00016:00041) TIMESTAMP EXTERNAL
, "TI4"
POSITION( 00042:00049) TIME EXTERNAL
, "DA5"
POSITION( 00050:00059) DATE EXTERNAL
, "IN6"
POSITION( 00060:00063) INTEGER
, "RE7"
POSITION( 00064:00067) FLOAT(21)
)
INTO TABLE "A540769"."TWK802A1"
PART 00002 INDDN P0
WHEN(00001:00002) = X'0041'
( "DE1"
POSITION( 00003:00010) DECIMAL
, "CH2"
POSITION( 00011:00015) CHAR(00005)
)
dobido
$/tstScanUtilIntoL/
$=/tstScanUtilInto/
### start tst tstScanUtilInto #####################################
-- 1 scanUtilInto
. ( "DE1"
. POSITION( 00003:00010) DECIMAL
. , "CH2"
. POSITION( 00011:00015) CHAR(00005)
. , "TS3"
. POSITION( 00016:00041) TIMESTAMP EXTERNAL
. , "TI4"
. POSITION( 00042:00049) TIME EXTERNAL
. , "DA5"
. POSITION( 00050:00059) DATE EXTERNAL
. , "IN6"
. POSITION( 00060:00063) INTEGER
. , "RE7"
. POSITION( 00064:00067) FLOAT(21)
. ) .
. -- table OA1P.TWB981 part 00001
-- 2 scanUtilInto
. ( "DE1"
. POSITION( 00003:00010) DECIMAL
. , "CH2"
. POSITION( 00011:00015) CHAR(00005)
. ) .
. -- table A540769.TWK802A1 part 00002
-- 3 scanUtilInto
$/tstScanUtilInto/ */
call scanReadIni
b = jBuf()
call mAddst b'.BUF', mapInline('tstScanUtilIntoL')
call tst t, 'tstScanUtilInto'
s = jOpen(scanUtilReset(ScanRead(b)), '<')
do ix=1
call out '--' ix 'scanUtilInto'
if \ scanUtilInto(s) then
leave
call out ' -- table' m.s.tb 'part' m.s.part
end
call tstEnd t
return
endProcedure tstSCanUtilInto
tstScanWin: procedure expose m.
/*
$=/tstScanWin/
### start tst tstScanWin ##########################################
info 0: last token scanPosition erste Zeile dr+
itteZe\npos 1 in line 1: erste Zeile
name erste
spaceNL
name Zeile
spaceNL
name dritteZeeeile
info 5: last token dritteZeeeile scanPosition zeile4 +
. fuenfueberSechs\npos 1 in line 4: zeile4
spaceNL
name zeile4
spaceNL
name fuenfueberSechsUnddSiebenUNDundUndUAcht
spaceNL
info 10: last token scanPosition undZehnueberElfundNochWeiterZwoel+
fundim1\npos 9 in line 10: undZehn
name undZehnueberElfundNochWeiterZwoelfundim13
spaceNL
name Punkt
infoE 14: last token Punkt scanPosition \natEnd after line 13: im13+
. Punkt
$/tstScanWin/ */
call scanWinIni
call tst t, 'tstScanWin'
b = jBuf('?erste Zeile?',,'? dritteZeeeile?', '? zeile4 ',
,'? fuenf?', '?ueberSechsUnddS?', '?iebenUNDundUndU?',
,'?Acht ?', '? ?', '? undZehn?',
,'?ueberElfundNoch?', '?WeiterZwoelfund?', '?im13 Punkt?')
s = jOpen(scanWin(b, , , 2, 15), m.j.cRead)
call tstOut t, 'info 0:' scanInfo(s)
do sx=1 while \scanAtEnd(s)
if scanName(s) then call tstOut t, 'name' m.s.tok
else if scanSpaceNL(s) then call tstOut t, 'spaceNL'
else if \scanAtEnd(s) then call scanErr s, 'cannot scan'
if sx // 5 = 0 then
call tstOut t, 'info' sx':' scanInfo(s)
end
call tstOut t, 'infoE' sx':' scanInfo(s)
call tstEnd t
/*
$=/tstScanWinRead/
### start tst tstScanWinRead ######################################
info 0: last token scanPosition erste Zeile z3 +
com Ze\npos 1 in line 1: erste Zeile
name erste
spaceNL
name Zeile
spaceNL
name z3
info 5: last token z3 scanPosition com Zeeeile z4 come4 f+
uenf\npos 4 in line 3: z3 com Zeeeile
spaceNL
name z4
spaceNL
name fuenf
spaceNL
info 10: last token scanPosition com Sechs com sieben comAc+
ht com\npos 15 in line 5: fuenf c
name com
spaceNL
$/tstScanWinRead/ */
call tst t, 'tstScanWinRead'
call mAdd t.cmp,
, "name Sechs",
, "spaceNL",
, "name com",
, "info 15: last token com scanPosition sieben comAcht c",
|| "om com com\npos 2 in line 7: m sieben com" ,
, "spaceNL",
, "name sieben",
, "spaceNL",
, "name Acht",
, "spaceNL",
, "info 20: last token scanPosition ueberElfundNochWeit com ",
|| "elfundim13\npos 1 in line 11: ueberElfundNoch",
, "name ueberElfundNochWeit",
, "spaceNL",
, "name im13",
, "spaceNL",
, "name Punkt",
, "info 25: last token Punkt scanPosition \natEnd after line ",
|| "13: im13 Punkt",
, "infoE 26: last token Punkt scanPosition \natEnd after line",
|| " 13: im13 Punkt"
b = jBuf('?erste Zeile?',,'? z3 com Zeeeile?', '? z4 come4 ',
,'? fuenf c?', '?om Sechs co?', '?m sieben com?',
,'?Acht com com ?', '? com ?', '? com undZehn?',
,'?ueberElfundNoch?', '?Weit com elfund?', '?im13 Punkt?')
s = scanWin(b, , , 2, 15)
call scanOpts s, , , 'com'
call tstOut t, 'info 0:' scanInfo(jOpen(s, m.j.cRead))
do sx=1 while \scanAtEnd(s)
if scanName(s) then call tstOut t, 'name' m.s.tok
else if scanSpaceNL(s) then call tstOut t, 'spaceNL'
else if \scanAtEnd(s) then call scanErr s, 'cannot scan'
if sx // 5 = 0 then
call tstOut t, 'info' sx':' scanInfo(s)
end
call tstOut t, 'infoE' sx':' scanInfo(s)
call tstEnd t
return
endProcedure tstScanWin
tstjCatSql: procedure expose m.
/*
$=/tstJCatSql/
### start tst tstJCatSql ##########################################
cmd1 select current time stamp from s.1
cmd2 update ";--""'/*"
cmd3 delete '*/''"' / 3 - 1
cmd4 .
$/tstJCatSql/ */
call tst t, 'tstJCatSql'
b = jBuf('select -- /* c1', ' /* c1 */ current/* c2 " '' ',
,'c3"', ' c4 */time', 'stamp-- c5', 'from s.1; /* c6 */ ;' ,
,';update ";--""''/*";; del123',
, 'ete ''*/''''"'' / 3 - 1 -- c7', '/*c8 */ ')
call jCatSqlReset tstJCat, , jOpen(b, '<'), 30
do sx=1 until nx = ''
nx = jCatSqlNext(tstJCat, ';')
call tstOut t, 'cmd'sx nx
end
call jClose b
call tstEnd t
return
endProcedure tstJCatSql
tstScanSql: procedure expose m.
call scanWinIni
/*
$=/tstScanSqlId/
### start tst tstScanSqlId ########################################
sqlId ABC
spaceNL
sqlId AB__345EF
spaceNL
$/tstScanSqlId/ */
call tst t, 'tstScanSqlId'
b = jBuf('abc -- kommentar', right('ab_', 72), '_345ef-- kom')
s = jOpen(scanSql(b), m.j.cRead)
do sx=1 while \scanAtEnd(s)
if scanSqlID(s) then call tstOut t, 'sqlId' m.s.val
else if scanSpaceNL(s) then call tstOut t, 'spaceNL'
else call scanErr s, 'cannot scan'
end
call tstEnd t
/*
$=/tstScanSqlDelimited/
### start tst tstScanSqlDelimited #################################
sqlDeId ABC
spaceNL
sqlDeId AB_3F
spaceNL
sqlDeId abc
spaceNL
sqlDeId ab_Ef
spaceNL
$/tstScanSqlDelimited/ */
call tst t, 'tstScanSqlDelimited'
b = jBuf('abc -- kommentar',,' -- ',,right('ab_', 72),'3F-- kom',
, '"abc" -- ko', ' -- ',,right('"ab_', 72),'Ef"-- kom')
s = jOpen(scanSql(b), m.j.cRead)
do sx=1 while \scanAtEnd(s)
if scanSqlDeID(s) then call tstOut t, 'sqlDeId' m.s.val
else if scanSpaceNL(s) then call tstOut t, 'spaceNL'
else call scanErr s, 'cannot scan'
end
call tstEnd t
/*
$=/tstScanSqlQualified/
### start tst tstScanSqlQualified #################################
sqlQuId ABC 1 ABC
sqlQuId AB_3F 1 AB_3F
sqlQuId abc 1 abc
sqlQuId ab_Ef 1 ab_Ef
sqlQuId EINS.Zwei.DREI 3 EINS
sqlQuId vi er.fu enf 2 vi er
$/tstScanSqlQualified/ */
call tst t, 'tstScanSqlQualified'
b = jBuf('abc -- kommentar',,' -- ',,right('ab_', 72),'3F-- kom',
, '"abc" -- ko', ' -- ',right('"ab_', 72),'Ef"-- kom',
, 'eins."Zwei', '" -- com', ' . -- com', ' -- com',
, 'drei -- ko', '"vi er"."fu enf " -- co')
s = jOpen(scanSql(b), m.j.cRead)
do sx=1 while \scanAtEnd(s)
if scanSqlQuID(s) then
call tstOut t, 'sqlQuId' m.s.val m.s.val.0 m.s.val.1
else if scanSpaceNL(s) then call tstOut t, 'spaceNL'
else call scanErr s, 'cannot scan'
end
call tstEnd t
/*
$=/tstScanSqlNum/
### start tst tstScanSqlNum #######################################
sqlNum 1
spaceNL
sqlNum 2..
spaceNL
sqlNum .3
spaceNL
sqlNum 4.5
spaceNL
sqlNum +6
spaceNL
sqlNum +7.03
spaceNL
sqlNum -8
spaceNL
sqlNum -.9
spaceNL
sqlNum 1E2
spaceNL
sqlNum -2.E-2
spaceNL
sqlNum +.3E+3
spaceNL
$/tstScanSqlNum/ */
call tst t, 'tstScanSqlNum'
b = jBuf('1 2. .3 4.5 +6 + --kom', , ' -- com ', , ' 7.03 -8 - .9',
'1e2 - 2.e-2 + .3e+3')
s = jOpen(scanSql(b), m.j.cRead)
do sx=1 while \scanAtEnd(s)
if scanSqlNum(s) then
call tstOut t, 'sqlNum' m.s.val
else if scanSpaceNL(s) then call tstOut t, 'spaceNL'
else call scanErr s, 'cannot scan'
end
call tstEnd t
/*
$=/tstScanSqlNumUnit/
### start tst tstScanSqlNumUnit ###################################
sqlNumUnit 1 KB
spaceNL
sqlNumUnit .3 MB
sqlNumUnit .5
sqlNumUnit +6.E-5 B
spaceNL
sqlNumUnit -7
char *
spaceNL
sqlNumUnit -.8
char T
char B
spaceNL
*** err: scanErr scanSqlNumUnit after +9. bad unit TB
. e 1: last token Tb scanPosition .
. e 2: pos 41 in line 1: 1 kb .3mB.5 + 6.e-5B -7* -.8 TB + 9.T+
b
sqlNumUnit +9..
spaceNL
$/tstScanSqlNumUnit/ */
call tst t, 'tstScanSqlNumUnit'
b = jBuf('1 kb .3mB.5 + 6.e-5B -7* -.8 TB + 9.Tb')
s = jOpen(scanSql(b), m.j.cRead)
do sx=1 while \scanAtEnd(s)
if scanSqlNumUnit(s, 0, 'B KB MB') then
call tstOut t, 'sqlNumUnit' m.s.val
else if scanSpaceNL(s) then call tstOut t, 'spaceNL'
else if scanChar(s ,1) then call tstOut t, 'char' m.s.tok
else call scanErr s, 'cannot scan'
end
call tstEnd t
return
endProcedure tstScanSql
/*--- one single test scan with lines to scan in stem ln -------------*/
tstScan1:
parse arg sc, classs, ln
if sc == '' then do
call tstOut t, 'scan src' ln
call scanSrc scanReset(s), ln
end
else do
call tstOut t, 'scan scanner' sc
s = sc
end
do forever
x = tstScanType(s, classs)
if x == '' then
leave
call tstOut t, 'scan' x 'tok' length(m.s.tok)':' m.s.tok ,
'key' m.s.key 'val' m.s.val
end
return
endProcedure tstScan1
tstScanType: procedure expose m.
parse arg s, opt
cx = 1
a2 = ''
res = 0
do while cx <= length(opt)
f = substr(opt, cx, 1)
cx = cx + 1
if pos(substr(opt, cx, 1), "'""") > 0 then do
m.tstScanType.src = opt
m.tstScanType.pos = cx
call scanString tstScanType
a2 = m.tstScanType.val
cx = m.tstScanType.pos
end
if f == 'a' then
res = scanString(s, "'")
else if f == 'b' then
res = scanSpaceNl(s)
else if f == 'c' then
res = scanChar(s, a2)
else if f == 'd' then
res = scanNat(s, a2)
else if f == 'k' then
res = scanKeyValue(s, 'def')
else if f == 'l' then
res = scanLit(s, a2)
else if f == 'q' then
res = scanString(s, '"')
else if f == 'v' then
res = scanVerify(s, a2)
else if f == 'w' then
res = scanWord(s)
else if f == 'y' then
res = scanVerify(s, a2, 'm')
if res then
return f
end
return scanType(s)
endProcedure tstScanType
/* copx tstBase end *************************************************/
/* copx tst begin ****************************************************
test infrastructure
***********************************************************************/
/*--- migrate all compares to new ones:
tstCI input compare
tstCO ouput migrated compares
tstCIO input and output -------------------------------------*/
tstCI: procedure expose m.
parse arg m, nm
m.m.CIO = 0
signal tstCIwork
tstCIO: procedure expose m.
parse arg m, nm
m.m.CIO = 1
tstCIwork:
m.m.name = nm
m.m.cmp.1 = left('### start tst' nm '', 67, '#')
do ix=2 to arg()-1
m.m.cmp.ix = arg(ix+1)
end
m.m.cmp.0 = ix-1
if m.m.CIO then
call tstCO m
return
tstCO: procedure expose m.
parse arg m
call tst2dpSay m.m.name, m'.CMP', 68
return
/*--- initialise m as tester with name nm
use inline input nm as compare lines -----------------------*/
tstReset: procedure expose m.
parse arg m, nm
call tstIni
m.m.name = nm
m.m.inIx = 0
m.m.out.0 = 0
m.m.err = 0
m.m.errHand = 0
m.tst.act = m
if \ datatype(m.m.trans.0, 'n') then
m.m.trans.0 = 0
m.m.trans.old = m.m.trans.0
return
endProcedure tstReset
tst: procedure expose m.
parse arg m, nm, cmpSt
call tstReset m, nm
m.tst.tests = m.tst.tests+1
if cmpSt == '' then do
cmpSt = mCut(t'.CMP', 0)
call tst4dp cmpSt, mapInline(nm)
end
m.m.cmp = cmpSt
m.m.moreOutOk = 0
call mAdd mCut(m'.IN', 0), 'tst in line 1 eins ,' ,
, 'tst in line 2 zwei ; ' ,
, 'tst in line 3 drei .schluss.'
call tstOut m, left('### start tst' nm '', 67, '#')
call errReset 'h', 'return tstErrHandler(ggTxt)'
m.m.errCleanup = m.err.cleanup
if m.tst.ini.j \== 1 then do
/* call err implement outDest 'i', 'call tstOut' quote(m)', msg'
*/ end
else do
call oMutate m, class4name('Tst')
call oMutate m'.IN', class4name('Tst')
m.m.jReading = 1
m.m.jWriting = 1
m.m.jUsers = 0
m.m.in.jReading = 1
m.m.in.jWriting = 1
m.m.in.jUsers = 0
if m.tst.ini.e \== 1 then do
m.m.oldJin = m.j.in
m.m.oldOut = m.j.out
m.j.in = m
m.j.out = m
end
else do
if m.pipe.0 <> 2 then
call tstErr m, 'm.pipe.0' m.pipe.0 '<> 2'
call pipe '+Ff', m , m'.IN'
end
end
return m
endProcedure tst
tstEnd: procedure expose m.
parse arg m, opt opt2
cmp = m.m.cmp
m.m.jReading = 0
m.m.jWriting = 0
if m.tst.ini.j == 1 then do
m.m.jReading = 0
m.m.jWriting = 0
if m.tst.ini.e \== 1 then do
m.j.in = m.m.oldJin
m.j.out = m.m.oldOut
end
else do
if m.j.in \== m'.IN' | m.j.out \== m then
call tstErr m, m.j.in '\==' m '|' m.j.out '\==' m
call pipe '-'
if m.pipe.0 <> 2 then
call tstErr m, 'm.pipe.0' m.pipe.0 '<> 2'
end
end
if m.m.err = 0 then
if m.m.errCleanup \= m.err.cleanup then
call tstErr m, 'err.Cleanup' m.err.cleanup '<> old',
m.m.errCleanup
if m.m.out.0 \= m.cmp.0 & \ (m.m.moreOutOk,
& m.m.out.0 > m.cmp.0) then do
call tstErr m, 'old' m.cmp.0 'lines \= new' m.m.out.0
do nx = m.m.out.0 + 1 to min(m.m.out.0+10, m.cmp.0)
say 'old - ' m.cmp.nx
end
end
call errReset 'h'
m.tst.act = ''
soll = 0
if opt = 'err' then do
soll = opt2
if m.m.err \= soll then
call err soll 'errors expected, but got' m.m.err
end
if m.m.err \= soll then do
say 'new lines:' (m.m.out.0 - 1)
call tst2dpSay m.m.name, m'.OUT', 68
end
say left('###' m.m.name 'end with' m.m.err 'errors ', 67, '#')
if 1 & m.m.err \= soll then
call err 'dying because of' m.m.err 'errors'
m.m.trans.0 = m.m.trans.old
return
endProcedure tstEnd
tst2dp: procedure expose m.
parse arg st, dp, ml
dx = m.dp.0
do sx=1 to m.st.0
li = m.st.sx
cx = 1
do until cx > length(li)
c = substr(li, cx, 1)
ou = left('.', strip(c) == '' | pos(c, '.+') > 0)
ex = min(length(li),cx+ml-length(ou)-2)
ou = ou || substr(li, cx, ex+1-cx)
dx = dx + 1
c = right(ou, 1)
if ex < length(li) then
m.dp.dx = ou || '+'
else if strip(c) == '' | pos(c, '.+') > 0 then
m.dp.dx = ou || '.'
else
m.dp.dx = ou
cx = ex +1
end
end
m.dp.0 = dx
return
endProcedure tst2dp
tst2dpSay: procedure expose m.
parse arg name, st, ml
say '$=/'name'/'
call tst2dp st, mCut('TST.TMP', 0), 68
do nx=1 to m.tst.tmp.0
say ' ' m.tst.tmp.nx
end
say '$/'name'/'
return tst2dpSay
tst4dp: procedure expose m.
parse arg st, dp
sx = m.st.0
inData = 0
data = ''
do dx=1 to m.dp.0
li = strip(m.dp.dx)
if pos(left(li, 1), '.+') > 0 then
li = substr(li, 2)
if right(li, 1) == '+' then do
inData = 1
data = data || left(li, length(li)-1)
iterate
end
if right(li, 1) == '.' then
li = left(li, length(li)-1)
sx = sx + 1
m.st.sx = repAll(repAll(data || li, '$ä', '/*'), '$ö', '*/')
inData = 0
data = ''
end
m.st.0 = sx
if inData then
call err 'end inData'
return
endProcedure tst4dp
/*--- write to test: say lines and compare them ----------------------*/
tstWrite: procedure expose m.
parse arg m, arg
call tstOut m, 'out:' arg
return
endProcedure tstWrite
tstOut: procedure expose m.
parse arg m, arg
do tx=m.m.trans.0 by -1 to 1
arg = repAll(arg, word(m.m.trans.tx, 1),
, subword(m.m.trans.tx, 2))
end
call mAdd m'.OUT', arg
nx = m.m.out.0
cmp = m.m.cmp
c = m.cmp.nx
if nx > m.cmp.0 then do
if nx = m.cmp.0+1 & \ m.m.moreOutOK then
call tstErr m, 'more new Lines' nx
end
else if c \== arg then do
do cx=1 to min(length(c), length(arg)) ,
while substr(c, cx, 1) == substr(arg, cx, 1)
end
msg = 'old line' nx '<> new overnext, firstDiff' cx',',
'len old' length(c)', new' length(arg)
if cx > 10 then
msg = overlay('|', msg, cx-10)
call tstErr m, msg
say c
end
say arg
return 0
endProcedure tstOut
tstWriteO: procedure expose m.
parse arg m, var
cl = objClass(var, '')
if cl == '' then do
if var == '' then
call tstOut t, 'tstR: @ obj null'
else
call tstOut t, 'no class for' var 'in tstWriteO|'
end
else if abbrev(var, m.o.escW) then do
call tstOut t, o2String(var)
end
else if cl == m.class.classV then do
call tstOut t, m.var
end
else if oKindOf(var, 'JRW') then do
call tstOut t, 'tstWriteO kindOf JRW jWriteNow begin <<<'
call jWriteNow m, var
call tstOut t, 'tstWriteO kindOf JRW jWriteNow end >>>'
end
else if oKindOf(var, 'ORun') then do
call tstOut t, 'tstWriteO kindOf ORun oRun begin <<<'
call oRun var
call tstOut t, 'tstWriteO kindOf ORun oRun end >>>'
end
else do
do tx=m.m.trans.0 by -1 to 1 ,
while word(m.m.trans.tx, 1) \== var
end
if tx < 1 then
call mAdd M'.TRANS', var 'tstWriteoV' || (m.m.trans.0+1)
call classOut , var, 'tstR: '
end
return
endProcedure tstWriteO
tstReadO: procedure expose m.
parse arg m, arg
if right(m, 3) == '.IN' then
m = left(m, length(m)-3)
else
call err 'tstReadO bad m' m
ix = m.m.inIx + 1
m.m.inIx = ix
if ix <= m.m.in.0 then do
call tstOut m, '#jIn' ix'#' m.m.in.ix
return s2o(m.m.in.ix)
end
call tstOut m, '#jIn eof' ix'#'
return ''
endProcedure tstReadO
tstFilename: procedure expose m.
parse arg suf, opt
if m.err.os == 'TSO' then do
dsn = dsn2jcl('~tmp.tst.'suf)
if opt = 'r' then do
if sysDsn("'"dsn"'") \== 'DATASET NOT FOUND' then
call adrTso "delete '"dsn"'"
call csiOpen 'TST.CSI', dsn'.**'
do while csiNext('TST.CSI', 'TST.FINA')
say 'deleting csiNext' m.tst.fina
call adrTso "delete '"m.tst.fina"'"
end
end
return dsn
end
else if m.err.os == 'LINUX' then do
if abbrev(suf, '/') then
fn = suf
else
fn = .Stream%%new('~/tmp/tst/'suf)%%qualify /* full path */
cx = lastPos('/', fn)
if cx > 0 then do
dir = left(fn, cx-1)
if \sysIsFileDirectory(dir) then
call adrSh "mkdir -p" dir
if \sysIsFileDirectory(dir) then
call err 'tstFileName could not create dir' dir
end
if opt \= 'r' then
nop
else if sysIsFile(fn) then
call sysFileDelete fn
else if sysIsFileDirectory(fn) then
call adrSh 'rm -r' fn
return fn
end
else
call err 'tstFilename does not implement os' m.err.os
endProcedure tstFilename
/*--- say total errors and fail if not zero --------------------------*/
tstTotal: procedure expose m.
say '######'
say '######'
say '######' m.tst.tests 'tests with' ,
m.tst.err 'errors in' m.tst.errNames
say '######'
say '######'
if m.tst.err \== 0 then
call err m.tst.err 'errors total'
return
endProcedure tstTotal
/*--- test err: message, count it and continue -----------------------*/
tstErr: procedure expose m.
parse arg m, msg
say '### error' msg
m.m.err = m.m.err + 1
m.tst.err = m.tst.err + 1
nm = m.m.name
if wordPos(nm, m.tst.errNames) < 1 then
m.tst.errNames = m.tst.errNames nm
return 0
endProcedure tstErr
/*--- tstErrHandler: intercept errors --------------------------------*/
tstErrHandler: procedure expose m.
parse arg ggTxt
m = m.tst.act
if m == '' then
call err ggTxt
m.m.errHand = m.m.errHand + 1
call errMsg ggTxt
call tstOut m.tst.act, '*** err:' m.err.1
do x=2 to m.err.0
call tstOut m, ' e' (x-1)':' m.err.x
end
return 0
endSubroutine tstErrHandler
tstTrc: procedure expose m.
parse arg msg
m.tst.trc = m.tst.trc + 1
say 'tstTrc' m.tst.trc msg
return m.tst.trc
endProcedure tstTrc
/*--- tstIni: global initialization ----------------------------------*/
tstIni: procedure expose m.
if m.tst.ini \== 1 then do
m.tst.ini = 1
call mapIni
m.tst.err = 0
m.tst.trc = 0
m.tst.errNames = ''
m.tst.tests = 0
m.tst.act = ''
end
if m.tst.ini.j \== 1 & m.j.ini == 1 then do
m.tst.ini.j = 1
call classNew 'n Tst u JRWO', 'm',
, "jReadO return tstReadO(m)",
, "jWrite call tstOut m, line",
, "jWriteO call tstWriteO m, var"
end
if m.tst.ini.e \== 1 & m.pipe.ini == 1 then do
m.tst.ini.e = 1
end
return
endProcedure tstIni
/* copx tst end **************************************************/
/* copx tstData begin *************************************************/
tstData: procedure expose m.
parse arg ty 2 le 'n' nu, l, r, num
abs = abs(num)
if nu \== '' then do
if abs // 5 = 0 then
return 'null' || (abs % 5 // nu + 1)
end
if ty = 'c' then do
if le = '' then
le = 8
le = abs // le + 1
if r = '' then
r = '+'
return left(l || num || r, le, right(r, 1))
end
if pos(ty, 'ief') < 1 then
call err 'bad type' ty
nn = abs
if abbrev(num, '-') | abbrev(num, '+') then
parse var num si 2 nn
else
si = ''
if ty == 'e' then
ex = 'e' || left('-', abs // 2) || (abs // 15)
else
ex = ''
if le \== '' then
nn = right(nn, abs // max(1, le - length(si||ex)) + 1, 1)
if ty \== 'i' & (abs // 4) \= 0 & length(nn) > 1 then
nn = overlay('.', nn, length(nn) - abs // length(nn))
return si || nn || ex
endProcedure tstData
tstDataClassFo: procedure expose m.
parse arg flds
ty = ''
do fx=1 by 2 to words(flds)
if word(flds, fx) = '.' then
ty = ty', v'
else
ty = ty', f' word(flds, fx) 'v'
end
t = classNew('n* tstData u' substr(ty, 2))
fo = oNew(m.t.name)
fs = oFlds(fo)
do fx=1 to m.fs.0
f = fo || m.fs.fx
m.f = word(flds, 2*fx)
end
return fo
endProcedure tstDataClassFo
tstDataClassOut: procedure expose m.
parse arg flds, f, t
fo = tstDataClassFo(flds)
fs = oFlds(fo)
do x=f to t
o = oCopy(fo)
do fx=1 to m.fs.0
na = substr(m.fs.fx, 2)
f = o || m.fs.fx
m.f = tstData(m.f, na, '+'na'+', x)
end
call outO o
end
return
endProcedure tstDataClassOut
/* copx tstData end ***************************************************/
/* copy tstAll end **************************************************/
/* copy time begin -----------------------------------------------------
11.05.23 wk: numeric digits transparent: in jeder Procedure drin
time2jul, tst externalisiert
----------------------------------------------------------------------*/
/*--- read timeZoneOffset and leapSeconds registers
and set variables for uniq ----------------------------------*/
timeReadCvt: procedure expose m.
parse arg debug
numeric digits 15
/* offsets documented in z/OS Data Areas Vol.1 */
cvtOH = '00000010' /* cvt control block Address */
cvtext2O = x2d('00000560') /* offset to extension 2 */
cvtldtoO = x2d('00000038') /* offset to timezone */
cvtlsoO = x2d('00000050') /* offset to leapSeconds */
/* CVT CB address + extention2 */
cvtExt2A = C2D(STORAGE(cvtOH,4)) + cvtext2O
/* cvtLdto timeZone address +offset */
m.timeZone = c2d(STORAGE(d2x(cvtext2A+cvtldtoO, 8), 8))
m.timeStckUnit = 1e-6 / 256 / 16
/* cvtLso LeapSecs address +offset */
m.timeLeap = C2D(STORAGE(d2x(cvtext2A+cvtlsoO, 8), 8))
m.timeUQDigits = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ012345678'
/* find lrsn of day 0 */
m.timeUQZero = timeGmt2Lrsn('2004-12-31-00.00.22.000000')
/* 0 out last 6 bits */
m.timeUQZero = b2x(overlay('000000', x2b(m.timeUQZero), 43))
if debug == 1 then do
say 'stckUnit =' m.timeStckUnit
say 'timeLeap =' d2x(m.timeLeap,16) '=' m.timeLeap ,
'=' format(m.timeLeap * m.timeStckUnit, 9,3) 'secs'
say 'timeZone =' d2x(m.timeZone,16) '=' m.timeZone,
'=' format(m.timeZone * m.timeStckUnit, 6,3) 'secs'
say "cvtext2_adr =" d2x(cvtExt2A, 8)
say 'timeUQZero =' m.timeUQZero
say 'timeUQDigis =' ,
length(m.timeUQDigits) 'digits' m.timeUQDigits
end
m.timeReadCvt = 1
return
endSubroutine timeReadCvt
timestampParse:
parse arg yyyy'-'mo'-'dd'-'hh'.'mm'.'ss'.'ffffff
return
/*--- GMT timestamp yyyy-mm.... -> stck value char(8)
BLSUXTID is described in z/OS V1R7.0 MVS IPCS Customization
BLSUXTID format : mo/dd/yyyy hh:mm:ss.ffffff ---------------*/
timeGmt2Stck: procedure expose m.
parse arg tst
call timestampParse tst
tDate = mo'/'dd'/'yyyy' 'hh':'mm':'ss'.'ffffff
ACC=left('', 8, '00'x)
ADDRESS LINKPGM "BLSUXTID TDATE ACC"
RETURN acc
endProcedure timeGmt2Stck
/*--- GMT timestamp yyyy-mm.... -> stck value in hex(16) ------------*/
timeGmt2LRSN: procedure expose m.
return c2x(left(timeGmt2Stck(arg(1)), 6))
endProcedure timeGmt2LRSN
/*--- LZT (Locale Zurich Tst -> stck value in hex(16) ---------------*/
timeLZT2LRSN: procedure expose m.
parse arg tst
numeric digits 23
if m.timeReadCvt \== 1 then
call timeReadCvt
return left(d2x(c2d(timeGmt2Stck(tst)) ,
- m.timeZone + m.timeLeap, 16), 12)
endProcedure timeLZT2LRSN
/*--- conversion from Stck Clock Value to GMT Timestamp
BLSUXTOD is described in z/OS V1R7.0 MVS IPCS Customization
input -> + leapseconds -> output ----------------------------*/
timeStck2Gmt: PROCEDURE expose m.
parse arg stck
stck = left(stck, 8, '00'x)
TDATE = COPIES('0' , 26)
ADDRESS LINKPGM "BLSUXTOD stck TDATE"
/* return format : mo/dd/yyyy hh:mm:ss.ffffff */
/* Timestamp format: yyyy-mm-dd-hh.mm.ss.ffffff */
parse var TDATE mo '/' dd '/' yyyy hh ':' mm ':' ss '.' ffffff
RETURN yyyy'-'mo'-'dd'-'hh'.'mm'.'ss'.'ffffff
endProcedure timeStck2Gmt
/*--- conversion from Lrsn Clock Value to GMT Timestamp -------------*/
timeLrsn2Gmt:
return timeStck2Gmt(x2c(arg(1)))
endProcedure timeLrsn2Gmt
/*--- conversion from Lrsn Clock Value to LZT Local Zurich Time -----*/
timeLrsn2LZT: procedure expose m.
parse arg lrsn
numeric digits 23
if m.timeReadCvt \== 1 then
call timeReadCvt
return timeStck2Gmt(d2c(x2d(left(lrsn, 16, 0)) ,
+ m.timeZone-m.timeLeap))
endProcedure timeLrsn2LZT
/*--- timestamp to julian --------------------------------------------*/
time2jul: procedure expose m.
parse arg yyyy '-' mm '-' dd '-'
/* date function cannot convert to julian, only from julian
==> guess a julian <= the correct and
try the next values
*/
j = trunc((mm-1) * 29.5) + dd
yy = right(yyyy, 2)
do j=j by 1
j = right(j, 3, 0)
d = date('s', yy || j, 'j')
if substr(d, 3) = yy || mm || dd then
return yy || j
end
return
endProcedure time2jul
/* copy time end -----------------------------------------------------*/
/* copy fmt begin **************************************************/
/*--- format the first arg by the format in the second ---------------*/
fmt: procedure
parse arg v, f 2 l
if abbrev('-', f) then
return v
else if f == 'l' then
return left(v, l)
else if f == 'r' then
return right(v, l)
else if f == 'f' then do
parse value l'.0.0.' with b '.' a '.' e '.'
return format(v, b, a, e, 0)
end
else if f == 'e' then do
parse var l b '.' a '.' e '.'
if b == '' then b = 2
if a == '' then a = 2
if e == '' then e = 2
res = format(v, b, a, e, 0)
y = length(res)-e-1
if substr(res, y) = '' then
return left(res, y-1)left('E', e+1, 0)
else if substr(res, y+1, 1) == '+' then
return left(res, y)substr(res, y+2)
else if substr(res, y+2, 1) == '0' then
return left(res, y+1)substr(res, y+3)
else
call err 'formatoverflow' f || l 'for' v '-->' res
end
else if f = 's' then
if l == '' then
return strip(v, 't')
else
return strip(v, l)
else if f == 'w' then do
parse var l st ',' le
return substr(v, st, le)
end
else
call err 'bad format' f l 'for' v
endProcedure fmt
/*--- format special (title, null Value also for numbers) ------------*/
fmtS: procedure expose m.
parse arg v, ty 2 l
if ty == 'f' then do
if \ dataType(v, 'n') then do
parse value l'.0.0.' with b '.' a '.' e '.'
return right(v, b + a + (a \== 0) + e + 2 * (e > 0))
end
end
else if ty == 'e' then do
if \ dataType(v, 'n') then do
parse var l b '.' a '.' e '.'
if b == '' then b = 2
if a == '' then a = 2
if e == '' then e = 2
return right(v, b + a + (a \== 0) + e + (e > 0))
end
end
return fmt(v, ty || l)
endProcedure fmtS
fmtTime: procedure expose m.
parse arg s, signed
return fmtUnits(s, 't', signed==1)
endProcedure fmtTime
fmtDec: procedure expose m.
parse arg s, signed
return fmtUnits(s, 'd', signed==1)
endProcedure fmtDec
fmtUnits: procedure expose m.
parse arg s, scale, signed
if s >= 0 then
res = fmtUnitsNN(s, scale, wi)
else
res = '-'fmtUnitsNN(abs(s), scale, wi)
len = m.fmt.units.scale.f.length + signed
if length(res) <= len then
return right(res, len)
if \ abbrev(res, '-') then
return right(right(res, 1), len, '+')
if length(res) = len+1 & datatype(right(res, 1), 'n') then
return left(res, len)
return right(right(res, 1), len, '-')
endProcedure fmtUnits
fmtUnitsNN: procedure expose m.
parse arg s, scale
sf = 'FMT.UNITS.'scale'.F'
sp = 'FMT.UNITS.'scale'.P'
if m.sf \== 1 then do
call fmtIni
if m.sf \== 1 then
call err 'fmtUnitsNN bad scale' scale
end
do q=3 to m.sp.0 while s >= m.sp.q
end
do forever
qb = q-2
qu = q-1
r = format(s / m.sp.qb, ,0)
if q > m.sf.0 then
return r || substr(m.sf.units, qb, 1)
if r < m.sf.q * m.sf.qu then
return (r % m.sf.qu) || substr(m.sf.units, qu, 1) ,
|| right(r //m.sf.qu, m.sf.width, 0)
/* overflow because of rounding, thus 1u000: loop back */
q = q + 1
end
endProcedure fmtUnitsNN
fmtIni: procedure expose m.
if m.fmt.ini == 1 then
return
m.fmt.ini = 1
call fmtIniUnits 't', '?smhd', 0 100 60 60 24 100, 0.01, 2
call fmtIniUnits 'd', '?.kMGTPE', 0 copies('1000 ',8), 0.001, 3
return
endProcedure fmtIni
fmtIniUnits: procedure expose m.
parse arg sc, us, fact, prod, wi
sf = 'FMT.UNITS.'sc'.F'
sp = 'FMT.UNITS.'sc'.P'
m.sf.0 = words(fact)
if length(us) + 1 <> m.sf.0 then
call err 'fmtIniUnits mismatch' us '<==>' fact
m.sf.1 = word(fact, 1)
m.sp.1 = prod
do wx=2 to m.sf.0
wx1 = wx-1
m.sf.wx = word(fact, wx)
m.sp.wx = m.sp.wx1 * m.sf.wx
end
m.sp.0 = m.sf.0
m.sf.units = us
m.sf.width = wi
m.sf.length= 2 * wi + 1
m.sf = 1
return
endProcedure fmtIniUnits
/* copy fmt end **************************************************/
/* copy fmtF begin **************************************************/
fmtFCsvAll: procedure expose m.
parse arg fSep
if fSep = '' then
fSep = ','
if \ inO(i) then
return
f = oFlds(i)
li = ''
do fx=1 to m.f.0
li = li',' substr(m.f.fx, 2)
end
call out substr(li, 3)
do until \ inO(i)
li = ''
do fx=1 to m.f.0
if m.f.fx = '' then do
li = li',' m.i
end
else do
fld = substr(m.f.fx, 2)
li = li',' m.i.fld
end
end
call out substr(li, 3)
end
return
endProcedure fmtFCsvAll
fmtFAdd: procedure expose m.
parse arg m
fx = m.m.0
do ax=2 to arg()
fx = fx + 1
parse value arg(ax) with m.m.fx.fld m.m.fx.fmt m.m.fx.tit
end
m.m.0 = fx
return m
endProcedure fmtFAdd
fmtFAddFlds: procedure expose m.
parse arg m, st
fx = m.m.0
do sx=1 to m.st.0
fx = fx + 1
parse value m.st.sx with m.m.fx.fld m.m.fx.fmt m.m.fx.tit
end
m.m.0 = fx
return m
endProcedure fmtFAddFlds
fmtF: procedure expose m.
parse arg m, st
if arg() >= 3 then
mid = arg(3)
else
mid = ' '
li = ''
do fx=1 to m.m.0
f = st || m.m.fx.fld
li = li || mid || fmtS(m.f, m.m.fx.fmt)
end
return substr(li, 1 + length(mid))
endProcedure fmtF
fmtFTab: procedure expose m.
parse arg m, rdr, wiTi
if m == '' then
m = 'FMTF.F'
return fmtFWriteSt(fmtFReset('FMTF.F'), j2Buf(rdr)'.BUF', wiTi)
endProcedure fmtFTab
fmtFReset: procedure expose m.
parse arg m
m.m.0 = 0
return m
endProcedure fmtFReset
fmtFWriteSt: procedure expose m. ?????????
parse arg m, st, wiTi
if m.st.0 < 1 then
return 0
if m.m.0 < 1 then
call fmtFAddFlds m, oFlds(m.st.1)
call fmtFDetect m, st
if wiTi \== 0 then
call out fmtFTitle(m)
do sx=1 to m.st.0
call out fmtF(m, m.st.sx)
end
return st.0
fmtFWriteSt
fmtFTitle: procedure expose m.
parse arg m
if arg() >= 2 then
mid = arg(2)
else
mid = ' '
li = ''
do fx=1 to m.m.0
if m.m.fx.tit \= '' then
t = m.m.fx.tit
else if m.m.fx.fld = '' then
t = '='
else
t = substr(m.m.fx.fld, 1+abbrev(m.m.fx.fld, '.'))
li = li || mid || fmtS(t, m.m.fx.fmt)
end
return substr(li, 1 + length(mid))
res = ''
fs = m.form.FLDS
do ix=1 to m.fs.0
res = res fmtS(m.fs.ix, m.form.ix)
end
return substr(res, 2)
endProcedure fmtFldTitle
fmtFldTitle: procedure expose m.
parse arg form
res = ''
fs = m.form.FLDS
do ix=1 to m.fs.0
res = res fmtS(m.fs.ix, m.form.ix)
end
return substr(res, 2)
endProcedure fmtFldTitle
fmtFld: procedure expose m.
parse arg form, st
res = ''
fs = m.form.FLDS
do ix=1 to m.fs.0
f = m.fs.ix
res = res fmt(m.st.f, m.form.ix)
end
return substr(res, 2)
endProcedure fmtData
fmtFldSquash: procedure expose m.
parse arg newFo, class, src
fs = oFlds(class)
do fx = 1 to m.fs.0
fd = m.fs.fx
lMi = 9e9
lMa = 0
rMi = 9e9
rMa = 0
len = 0
do sx = 1 to m.src.0
x = verify(m.src.sx.fd, ' ', 'n')
if x < 1 then
iterate
lMi = min(lMi, x)
lMa = max(lMa, x)
x = length(strip(m.src.sx.fd, 't'))
rMi = min(rMi, x)
rMa = max(rMa, x)
end
if rMa = 0 then
m.newFo.fx = 'w1,1'len
else
m.newFo.fx = 'w'lMi',' || (rMa+1-lMi)
end
m.newFo.0 = m.fs.0
m.newFo.flds = fs
return newFo
endProcedure fmtFldSquash
fmtFDetect: procedure expose m.
parse arg m, st
do fx=1 to m.m.0
if m.m.fx.fmt = '' then
m.m.fx.fmt = fmtFDetect1(st, m.m.fx.fld)
end
return m
endProcedure fmtDetect
fmtFDetect1: procedure expose m.
parse arg st, suf
aMa = -1
aCnt = 0
aDiv = 0
nCnt = 0
nMi = ''
nMa = ''
nDi = -1
nBe = -1
nAf = -1
eMi = ''
eMa = ''
do sx=1 to m.st.0
f = m.st.sx || suf
v = m.f
aMa = max(aMa, length(v))
if \ dataType(v, 'n') then do
aCnt = aCnt + 1
if length(v) > 100 then
aDiv = 99
else if aDiv <=3 then
if aDiv.v \== 1 then do
aDiv.v = 1
aDiv = aDiv + 1
end
iterate
end
nCnt = nCnt + 1
if nMi == '' then
nMi = v
else
nMi = min(nMi, v)
if nMa == '' then
nMa = v
else
nMa = max(nMa, v)
parse upper var v man 'E' exp
if exp \== '' then do
en = substr(format(v, 2, 2, 9, 0), 7)
if en = '' then
en = exp
if eMi == '' then
eMi = en
else
eMi = min(eMi, en)
if eMa == '' then
eMa = en
else
eMa = max(eMa, en)
end
parse upper var man be '.' af
nBe = max(nBe, length(be))
nAf = max(nAf, length(af))
nDi = max(nDi, length(be || af))
end
/* say 'suf' suf aCnt 'a len' aMa 'div' aDiv
say ' ' nCnt 'n' nMi'-'nMa 'be' nBe 'af' nAf,
'di' nDi 'ex' eMi'-'eMa */
if nCnt = 0 | aDiv > 3 then
newFo = 'l'max(0, aMa)
else if eMi \== '' then do
f1 = substr(format(nMa, 2, 2, 9, 0), 7)
if f1 \= '' then
eMa = max(eMa, f1)
newFo = 'e' || (1+(eMi < 0)) || '.' || (max(0, nDi-1))'.' ,
|| max(length(eMa+0), length(eMi+0))
end
else if nAf > 0 then
newFo ='f'nBe'.'nAf
else
newFo ='f'nBe'.0'
/* say ' ' newFo */
return newFo
endProcedure fmtFDetect1
fmtFldRW: procedure expose m.
parse arg fo
ty = oGetClassPara(m.j.in)
call assert 'oFlds(ty) == m.fo.flds', 'fo different flds than class'
call out fmtFldTitle(fo)
do while in(ii)
call out fmtFld(fo, ii)
end
return
endProcedure fmtClassRW
fmtFldSquashRW: procedure expose m.
parse arg in, opCl
if in = '' then
in = m.j.in
if opCl == 'opCl' then
call jOpen in, 'r'
ty = oGetClassPara(in)
flds = oFlds(ty)
st = 'FMT.CLASSAD'
do ix=1 while jRead(in, st'.'ix)
end
m.st.0 = ix - 1
fo = fmtFldSquash(sqFo, ty, st)
call out fmtFldTitle(fo)
do ix = 1 to m.st.0
call out fmtFld(fo, st'.'ix)
end
if opCl == 'opCl' then
call jClose in
return
endProcedure fmtFldSquashRW
/* copy fmtF end * **************************************************/
/* copy sort begin ****************************************************/
sort: procedure expose m.
parse arg i, o, cmp
if cmp == '' then
m.sort.comparator = "cmp = m.l.l0 <<= m.r.r0"
else if length(cmp) < 6 then
m.sort.comparator = "cmp = m.l.l0" cmp "m.r.r0"
else if pos(';', cmp) < 1 then
m.sort.comparator = "aLe = l'.'l0; aRi = r'.'r0; cmp =" cmp
else
m.sort.comparator = "aLe = l'.'l0; aRi = r'.'r0;" cmp
call sort1 i, 1, m.i.0, o, 1, sort.work, 1
m.o.0 = m.i.0
return
endProcedure sort
sort1: procedure expose m.
parse arg i, i0, le, o, o0, w, w0
if le <= 3 then do
if le = 3 then do
call sortMerge i, i0, i0+1, i, i0+1, i0+2, w, w0
call sortMerge i, i0+2, i0+3, w, w0, w0+2, o, o0
end
else if le = 2 then
call sortMerge i, i0, i0+1, i, i0+1, i0+2, o, o0
else if le = 1 then
m.o.o0 = m.i.i0
return
end
h = (le + 1) % 2
call sort1 i, i0, h, o, o0+le-h, w, w0
call sort1 i, i0+h, le-h, w, w0, o, o0
call sortMerge o, o0+le-h, o0+le, w, w0, w0+le-h, o, o0
return
endProcedure sort1
sortMerge: procedure expose m.
parse arg l, l0, le, r, r0, re, o, o0
do while l0 < le & r0 < re
interpret m.sort.comparator
if cmp then do
m.o.o0 = m.l.l0
l0 = l0 + 1
end
else do
m.o.o0 = m.r.r0
r0 = r0 + 1
end
o0 = o0 + 1
end
do while l0 < le
m.o.o0 = m.l.l0
l0 = l0 + 1
o0 = o0 + 1
end
do while r0 < re
m.o.o0 = m.r.r0
r0 = r0 + 1
o0 = o0 + 1
end
return
endProcedure sortMerge
/* copy sort end ****************************************************/
/* copy match begin ***************************************************/
/************************************* begin copy match ******/
/*--- wildCard matching with the following wildchars:
* 0-n chars
? 1 char
fill matched expressions instem st if st is non empty
return 1 if mask matches wert ----------------------------------*/
match: procedure expose m.
parse arg wert, mask, st
if st == '' then
return matchRO(wert, mask)
m.st.0 = -9
return matchSt(wert, mask, st, 0)
endProcedure match
/*--- return the fixed prefix of maskt -------------------------------*/
matchPref: procedure
arg mask, suff
ix = verify(mask, '*?', 'm')
if ix = 0 then
return mask
else
return left(mask, ix-1)suff
endProcedure matchPref
/*--- return true if mask matches wert -------------------------------*/
matchRO: procedure
arg wert, mask
ix = verify(mask, '*?', 'm')
if ix < 1 then return (mask == wert)
if length(wert) < ix-1 then return 0
if left(mask, ix-1) \== left(wert, ix-1) then return 0
if substr(mask, ix, 1) == '?' then do
if length(wert) < ix then return 0
return matchRO(substr(wert, ix+1), substr(mask, ix+1))
end
mask = substr(mask, ix+1) /* * 0 - n Chars */
do ex = 1+length(wert) to ix by -1
if matchRO(substr(wert, ex), mask) then return 1
end
return 0
endProcedure matchRO
/*--- wildCard matching: fill matched expressions instem st
return 1 if mask matches wert ----------------------------------*/
matchSt: procedure expose m.
parse arg wert, mask, st, sx
ix = verify(mask, '*?', 'm')
if ix < 1 then do
if mask \== wert then
return 0
m.st.0 = sx
return 1
end
if \ abbrev(wert, left(mask, ix-1)) then
return 0
reMa = substr(mask, ix+1)
sx = sx + 1
if substr(mask, ix, 1) == '?' then do /* ? 1 Character */
if length(wert) < ix then
return 0
m.st.sx = substr(wert, ix, 1)
return matchSt(substr(wert, ix+1), reMa, st, sx)
end
do lx = 1+length(wert) to ix by -1 /* greedy: from all to empty */
if matchSt(substr(wert, lx), reMa, st, sx) then do
m.st.sx = substr(wert, ix, lx-ix)
return 1
end
end
return 0
endProcedure matchSt
matchTrans: procedure expose m.
parse arg mask, st
r = ''
ox = 1
sx = 0
ix = verify(mask, '*?', 'm')
do sx=1 to m.st.0 while ix > 0
if sx > m.st.0 then
call err 'matchTrans('mask',' st') has only' ,
m.st.0 'variables'
r = r || substr(mask, ox, ix-ox)m.st.sx
ox = ix+1
ix = verify(mask, '*?', 'm', ox)
end
if ix > 0 then
call err 'matchTrans('mask',' st') has only' ,
m.st.0 'variables'
return r || substr(mask, ox)
endProcedure matchTrans
/* copy match end *****************************************************/
/* copy comp begin *****************************************************
the shell compiler
syntax and semantics of the shell language see javaDoc
***********************************************************************/
/***** initialisation *************************************************/
/*--- module initialisation ------------------------------------------*/
compIni: procedure expose m.
if m.compIni = 1 then
return
m.compIni = 1
call pipeIni
call scanReadIni
cc = classNew('n Compiler u')
call mNewArea 'COMP.AST', '='
m.comp.stem.0 = 0
m.comp.idChars = m.scan.alfNum'@_'
call compIniKI '=', "skeleton", "expression or block"
call compIniKI '.', "object", "expression or block"
call compIniKI '-', "string", "expression or block"
call compIniKI '@', "shell", "pipe or $;"
call compIniKI ':', "assignAttributes", "assignment or statement"
call compIniKI '|', "assignTable", "header, sfmt or expr"
call compIniKI '#', "text", "literal data"
return
endProcedure compIni
compReset: procedure expose m.
parse arg m
m.m.scan = scanRead(,,'|0123456789')
m.m.chDol = '$'
m.m.chSpa = ' ' || x2c('09')
m.m.chNotBlock = '${}='
m.m.chNotWord = m.m.chNotBlock || m.m.chSpa
m.m.chKind = '.-=#@:|'
m.m.chKin2 = '.-=#;:|'
m.m.chKinC = '.-=@'
m.m.chOp = '.-<@|?'
m.m.chOpNoFi = '.-@|?'
return m
endProcedure compReset
compIniKI: procedure expose m.
parse arg ki, m.comp.kind.ki.name, m.comp.kind.ki.expec
return
/*--- constructor of Compiler ----------------------------------------*/
comp: procedure expose m.
parse arg src
nn = oNew('Compiler')
if src \== '' then
m.nn.cmpRdr = o2File(src)
else
m.nn.cmpRdr = ''
return nn
endProcedure comp
/**** user interface **************************************************/
/*--- compile and run ------------------------------------------------*/
compRun: procedure expose m.
parse arg spec, inO, ouO, infoA
cmp = comp(inO)
r = compile(cmp, spec)
if infoA \== '' then
m.infoA = 'run'
if ouO \== '' then
call pipe '+F', ouO
call oRun r
if ouO \== '' then
call pipe '-'
return 0
endProcedure compRun
/*--- compile the source and return an oRunner with the code ---------*/
compile: procedure expose m.
parse arg m, spec
call compReset m
kind = '@'
spec = strip(spec)
do while pos(left(spec, 1), m.m.chKind) > 0
kind = left(spec, 1)
spec = strip(substr(spec, 2))
end
call scanSrc m.m.scan, spec
m.m.compSpec = 1
res = compCUnit(m, kind, 1)
do while abbrev(m.m.dir, '$#')
call envPutO substr(m.m.dir, 3, length(m.m.dir)-4),
, compCUnit(m, right(m.m.dir, 1))
end
if \ m.m.compSpec then
call jClose m.m.scan
return res
endProcedure compile
/*--- cUnit = compilation Unit = separate compilations
no nesting| --------------------------------------------*/
compCUnit: procedure expose m.
parse arg m, ki, isFirst
s = m.m.scan
code = ''
do forever
m.m.dir = ''
src = compUnit(m, ki, '$#')
if \ compDirective(m) then
return scanErr(s, m.comp.kind.ki.expec "expected: compile",
m.comp.kind.ki.name "stopped before end of input")
if \ compIsEmpty(m, src) then do
/*wkTst??? allow assTb in separatly compiled units */
if isFirst == 1 & m.src.type == ':' ,
& pos(' ', src) < 1 & abbrev(src, 'COMP.AST.') then
call mAdd src, '', ''
code = code || ';'compAst2code(m, src, ';')
end
if m.m.dir == 'eof' then do
if \ m.m.compSpec | m.m.cmpRdr == '' then
return oRunner(code)
call scanReadReset s, m.m.cmpRdr
call jOpen s, m.j.cRead
m.m.compSpec = 0
end
else if length(m.m.dir) == 3 then
ki = substr(m.m.dir, 3, 1)
else
return oRunner(code)
end
endProcedure compCUnit
/*--- directives divide cUnits ---------------------------------------*/
compDirective: procedure expose m.
parse arg m
m.m.dir = ''
s = m.m.scan
lk = scanLook(s)
cx = pos('#', lk, 3)
if \ abbrev(lk, '$#') then do
if \ scanAtEnd(m.m.scan) then
return 0
m.m.dir = 'eof'
return 1
end
else if scanLit(s, '$#end' , '$#out') then do
m.m.dir = 'eof'
return 1
end
else if pos(substr(lk, 3, 1), m.m.chKinD) > 0 then do
m.m.dirKind = substr(lk, 3, 1)
m.m.dir = left(lk, 3)
end
else if cx > 3 & pos(substr(lk, cx+1, 1), m.m.chKinD) > 0 then do
m.m.dirKind = substr(lk, 3, 1)
m.m.dir = left(lk, cx+1)
end
else
call scanErr s, 'bad directive:' word(lk, 1)
if \ scanLit(s, m.m.dir) then
call scanErr m.m.scan, 'directive mismatch' m.m.dir
return 1
endProcedure compDirective
/**** parse the whole syntax *******************************************
currently, with the old code generation,
parsing and code generation is intermixec
migrating to AST should will separate these tasks
***********************************************************************/
compUnit: procedure expose m.
parse arg m, kind, stopper
s = m.m.scan
if pos(kind, m.m.chKind';') < 1 then
return scanErr(s, 'bad kind' kind 'in compUnit(...'stopper')')
if stopper == '}' then do
if kind \== '#' then do
one = compExpr(m, 'b', translate(kind, ';', '@'))
if compisEmpty(m, one) then
return compAST(m, 'block')
else
return compAST(m, 'block', one)
end
tx = '= '
cb = 1
do forever /* scan nested { ... } pairs */
call scanVerify s, '{}', 'm'
tx = tx || m.s.tok
if scanLit(s, '{') then
cb = cb + 1
else if scanLook(s, 1) \== '}' then
call scanErr s, 'closing } expected'
else if cb <= 1 then
leave
else if scanLit(s, '}') then
cb = cb - 1
else
call scanErr s, 'closing } programming error'
tx = tx || m.s.tok
end
return compAst(m, 'block', tx)
end
else if pos(kind, '.-=') > 0 then do
return compData(m, kind)
end
else if pos(kind, '@;') > 0 then do
call compSpNlComment m
return compShell(m)
end
else if kind == '|' | kind == ':' then do
if kind == '|' then
res = compAssTab(m)
else
res = compAssAtt(m)
if abbrev(res, '#') then
return compAst(m, ':', substr(res, 3))
else
return compAst(m, ';', substr(res, 3))
end
else if kind == '#' then do
res = compAST(m, 'block')
call compSpComment m
if \ scanReadNl(s) then
call scanErr s,
, 'space nl expected in heredata until' stopper
do while \ abbrev(m.s.src, stopper)
call mAdd res, '=' strip(m.s.src, 't')
if \ scanReadNl(s, 1) then do
if stopper = '$#' then
leave
call scanErr s, 'eof in heredata until' stopper
end
end
return res
end
endProcedure compUnit
/*--- compile data lines return stmts or expr ------------------------*/
compData: procedure expose m.
parse arg m, ki
s = m.m.scan
lines = compAST(m, 'block')
do forever
state = 'f'
do forever
l = compExpr(m, 'd', ki)
if \ scanReadNL(s) then
state = 'l'
if \ compIsEmpty(m, l) | (state=='' &\abbrev(l, 'c')) then
call mAdd lines, l
if state == 'l' then
leave
call compComment m
state = ''
end
one = compStmt(m)
if one == '' then
leave
call mAdd lines, one
call compComment m
end
return lines
endProcedure compData
/*--- compile shell and return code ----------------------------------*/
compShell: procedure expose m.
parse arg m
a = compAst(m, ';')
m.a.text = ''
do forever
one = compPipe(m)
if one \== '' then
m.a.text = m.a.text || one
if \ scanLit(m.m.scan, '$;') then
return a
call compSpNlComment m
end
endProcedure compShell
/*--- compile an expression, type d=data, b=block w=word, s=strip ---*/
compExpr: procedure expose m.
parse arg m, type, ki
s = m.m.scan
if length(type) \== 1 | pos(type, 'dsbw') < 1 then
call scanErr s, 'bad type' type 'in compExpr(,' type','ki ')'
if length(ki) \== 1 | pos(ki, m.m.chKind';') < 1 then
call scanErr s, 'bad kind' ki 'in compExpr(,' type','ki ')'
charsNot = if(type=='b', m.m.chNotBlock,
, if(type=='w', m.m.chNotWord,m.m.chDol))
laTx = 9e9
st = compNewStem(m)
gotCom = 0
if pos(type, 'sb') > 0 then do
call compSpComment m
gotCom = gotCom | m.m.gotComment
end
ki2 = if(ki=='=', '-=', ki)
do forever
if scanVerify(s, charsNot, 'm') then do
call mAdd st, ki2 m.s.tok
laTx = min(laTx, m.st.0)
end
else do
pr = compPrimary(m, ki, 1)
if pr = '' then
leave
call mAdd st, pr
laTx = 9e9
end
gotCom = gotCom | compComment(m)
end
do rx = m.st.0 by -1 to laTx while m.st.rx = ki2
end
if pos(type, 'bs') > 0 then do
if rx >= laTx then
m.st.rx = strip(m.st.rx, 't')
m.st.0 = rx
end
if ki == '=' then
if m.st.0 < 1 then
return 'e='
else
ki = '-'
return substr('ce', 2-gotCom, rx < 1)ki'0*' st
endProcedure compExpr
/*--- compile a primary and return code ------------------------------*/
compPrimary: procedure expose m.
parse arg m, ki, withChain
s = m.m.scan
if \ scanLit(s, '$') then
return ''
if scanString(s) then /*wkTst??? brauchts beides? */
return translate(ki, '.--', '@;=')'=' m.s.val
if withChain then do
if scanLit(s, '.', '-') then do
op = m.s.tok
return op'('compCheckNN(m, compObj(m, op),
, 'objRef expected after $'op)
end
end
if pos(ki, '.<') >= 1 then
f = '. envGetO'
else
f = '- envGet'
if scanLit(s, '{') then do
if scanLit(s, '?') then
f = '- envIsDefined'
else if scanLit(s, '>') then
f = '- envReadO'
res = compCheckNE(m, compExpr(m, 'b', '='), 'var name')
if \scanLit(s, '}') then
call scanErr s, 'closing } missing after ${'
return f'(' || comp2Code(m, '-'res)')'
end
if scanName(s) then
return f"('"m.s.tok"')"
call scanBack s, '$'
return ''
endProcedure compPrimary
compObj: procedure expose m.
parse arg m, ki
s = m.m.scan
pk = compOpKi(m, '?')
one = compBlock(m, ki pk)
if one \== '' then
return compAstAddOp(m, one, ki)
pp = ''
if pk \== '' then do
ki = right(pk, 1)
pp = left(pk, length(pk)-1)
end
one = compPrimary(m, translate(ki, '.', '@'), 0)
if one \== '' then
return pp || one
if ki == '.' then do
if scanLit(s, 'compile') then do
if pos(scanLook(s, 1), m.m.chKinC) < 1 then
call scanErr s, 'compile kind expected'
call scanChar s, 1
return pp'. compile(comp(j2Buf()), "'m.s.tok'")'
end
end
call scanBack s, pk
return ''
endProcedure compObj
compFile: procedure expose m.
parse arg m
res = compCheckNE(m, compExprBlock(m, '='),
, 'block or expr expected for file')
if \ abbrev(res, '.') then do
end
else if substr(res, verify(res, '.', n), 3) == '0* ' then do
st = word(res, 2)
if m.st.0 = 1 & abbrev(m.st.1, '. envGetO(') then
/* if undefined variable use new jbuf */
if pos(')', m.st.1) == length(m.st.1) then
m.st.1 = left(m.st.1, length(m.st.1)-1) ,
|| ", '-b')"
end
return compASTAddOp(m, res, '<')
endProcedure compFile
/*--- scan an operator chain and a kind ------------------------------*/
compOpKi: procedure expose m.
parse arg m, opt
s = m.m.scan
op = ''
if opt == '<' then do
call scanVerify s, m.m.chOpNoFi
op = m.s.tok
if scanLit(s, '<') then
return op'<'
end
call scanVerify s, m.m.chOp
op = op || m.s.tok
k1 = scanLook(s, 1)
if k1 \== '' & pos(k1, m.m.chKind) > 0 then do
call scanLit s, k1
return op || k1
end
if opt == '?' | op == '' | pos(right(op, 1), m.m.chKind) > 0 then
return op
call scanErr s, 'no kind after ops' op
endProcedure compOpKi
/*--- block or expression --------------------------------------------*/
compExprBlock: procedure expose m.
parse arg m, ki
s = m.m.scan
pk = compOpKi(m, '<')
if right(pk, 1) == '<' then
return compAstAddOp(m, compFile(m), pk)
res = compBlock(m, ki pk)
if res \== '' then
return res
if pk \== '' then
lk = right(pk, 1)
else
lk = translate(ki, '.', '@')
res = compExpr(m, 's', lk)
if res \== '' then
return compASTAddOp(m, res, pk)
call scanBack s, pk
return res
endProcedure compExprBlock
/*--- compile a pipe and return code ---------------------------------*/
compPipe: procedure expose m.
parse arg m
s = m.m.scan
inp = ''
out = ''
stmts = ''
sBef = ''
do forever
if scanLit(s, '$<') then
inp = inp',' comp2Code(m, compFile(m))
else if scanLit(s, '$>>', '$>') then
if out <> '' then
call scanErr s, 'duplicate output'
else
out = substr('?FA', length(m.s.tok), 1) ,
comp2Code(m, compFile(m))
else if scanLit(s, '$|') then do
if stmts == '' then
call scanErr s, 'stmts expected before $|'
sBef = sBef"; call pipe 'N|'" || stmts
stmts = ''
end
else do
one = comp2code(m, ';'compStmts(m))
if one == '' then
leave
stmts = stmts';' one
end
call compSpNlComment m
end
if sBef == '' then do
if inp == '' & out == '' then
return stmts
if stmts == '' then do
call scanErr s,'no statemtents in pipe'
stmts = '; call pipeWriteAll'
end
end
else if stmts == '' then
call scanErr s, 'stmts expected after $|'
inO = left('f', inp \== '')
inp = substr(inp, 3)
parse var out ouO out
if sBef == '' then
return "; call pipe '+"ouO || strip(inO"',"out","inp, "T", ","),
|| stmts"; call pipe '-'"
else
return "; call pipe '+N" || strip(inO"',,"inp, "T", ",") ,
|| substr(sBef, 17),
|| "; call pipe '"left(ouO'P', 1)"|'" ,
strip(","out,"T", ",") || stmts"; call pipe '-'"
endProcedure compPipe
/*--- compile stmts (stmt or java) -----------------------------------*/
compStmts: procedure expose m.
parse arg m
lst = compNewStem(m)
do forever
one = compStmt(m)
if one == '' then do
do forever
la = compExpr(m, 's', ';')
if compIsEmpty(m, la) then
leave
la = strip(comp2code(m, ';'la))
if right(la, 1) \== ',' then do
one = one la
leave
end
one = one strip(left(la, length(la)-1))
call compSpNlComment m
end
if one = '' then
return 'l*' lst
one = ';' one
end
call mAdd lst, one
call compSpNlComment m
end
endProcedure compStmts
/*--- compile a single statement -------------------------------------*/
compStmt: procedure expose m.
parse arg m
s = m.m.scan
if scanLit(s, "$=") then do
res = compAss(m)
if res == '' then
call scanErr s, 'assignment expected after $='
return res
end
if scanLit(s, '$@') then do
if \ scanName(s) then
return 'l;' comp2Code(m,
, '@'compCheckNE(m, compExprBlock(m, '@'),
, "block or expr expected after $@"))
fu = m.s.tok
if fu == 'for' | fu == 'with' | fu == 'forWith' then do
v = comp2Code(m, '-'compCheckNE(m, compExpr(m, 'b', '='),
, "variable name after $@for"))
call compSpComment m
st = comp2Code(m, ';'compCheckNN(m, compStmt(m, 'with'),
, "statement after $@for" v))
if fu == 'forWith' then
st = 'call envSetWith envGetO('v');' st
if abbrev(fu, 'for') then
st = 'do while envReadO('v');' st'; end'
if fu == 'forWith' then
st = 'call envPushWith "";' st '; call envPopWith'
else if fu == 'with' then
st = 'call envPushName' v';' st '; call envPopWith'
return ';' st
end
if fu == 'do' then do
call compSpComment m
var = if(scanName(s), m.s.tok, '')
pre = var
call compSpComment m
if scanLook(s, 1) \== '=' then
var = ''
call compSpComment m
suf = compExpr(m, 's', ';')
if \ compIsEmpty(m, suf) then
suf = comp2Code(m, ':'suf)
else if var \== '' then
call scanErr s, "$@do control construct expected"
else
suf = ''
call compSpComment m
st = comp2Code(m, ";"compCheckNN(m, compStmt(m),
, "$@do statement"))
return "; do" pre suf";",
if(var \== "", "call envPut '"var"'," var";") st"; end"
end
if fu == 'ct' then do
call compSpComment m
call compInter(comp2Code(m, ';'compCheckNN(m, compStmt(m),
, 'ct statement')));
return '; '
end
if fu == 'proc' then do
nm = compCheckNE(m, compExpr(m, 'b', '='), "proc name")
call compSpComment m
st = oRunner(comp2Code(m, ';'compCheckNN(m, compStmt(m),
, 'proc statement')));
call envPutO compInter('return' comp2Code(m, '-'nm)), st
return '; '
end
if scanLit(s, '(') then do
call compSpComment m
if \ scanLit(s, ')') then
call scanErr s, 'closing ) expected after $@'fu'('
return '; call oRun envGetO("'fu'")'
end
if scanLit(s, '{', '.{', '-{', '={') then do
br = m.s.tok
a = compExpr(m, 'b', if(br == '{', '-', left(br, 1)))
if \ scanLit(s, '}') then
call scanErr s, 'closing } expected after $@'fu || br
res = '; call oRun envGetO("'fu'")'
if pos(left(a, 1), 'ec') < 1 then
res = res',' comp2code(m, a)
return res
end
call scanErr s, 'procCall, for, do, ct, proc' ,
'or objRef expected after $@'
end
if scanLit(s, '$$') then
return compCheckNN(m, compExprBlock(m, '='),
, 'block or expression expected after $$')
return ''
endProcedure compStmt
compAss: procedure expose m.
parse arg m, aExt
s = m.m.scan
sla = scanLook(s)
slx = verify(sla, m.m.chKind'/'m.m.chOp, 'n')
if slx > 0 then
sla = left(sla, slx-1)
sla = pos('/', sla) > 0
nm = ''
if \ sla then do
nm = compExpr(m, 'b', '=')
if compIsEmpty(m, nm) then
return ''
nm = comp2Code(m, '-'nm)
if \ scanLit(s, "=") then
return scanErr(s, '= expected after $=' nm)
end
m.m.bName = ''
vl = compCheckNE(m, compExprBlock(m, '='),
, 'block or expression after $=' nm '=')
if sla then
if m.m.bName == '' then
call scanErr s, 'missing blockName'
else
nm = "'"m.m.bName"'"
va = compAstAftOp(m, vl)
if va \== '' & m.va.type == ':' then do
pu = "call envPushName" nm
if abbrev(m.m.astOps, '<') then
call mAdd va, pu ", 'asM'", "call envPopWith"
else if abbrev(m.m.astOps, '<<') then
call mAdd va, pu ", 'asM'", "call envPopWith"
else
call mAdd va, pu ", 'as1'", "call envPopWith"
return va
end
if compAstKind(m, vl) == '-' then
return '; call envPut' nm',' comp2Code(m, vl)aExt
else
return '; call envPutO' nm',' comp2Code(m, '.'vl)aExt
endProcedure compAss
/*--- block deals with the correct kind and operators
the content is parsed by compUnit ------------------------------*/
compBlock: procedure expose m.
parse arg m, dKi ops
s = m.m.scan
if \ scanLit(s, '{', '¢', '/') then
return ''
start = m.s.tok
if (ops \== '' & pos(right(ops, 1), m.m.chKind) < 1) ,
| pos(dKi, m.m.chKind) < 1 then
return scanErr(s, 'bad kind' ops 'for block (def' dKi')')
if ops == '' then do
ki = dKi
end
else do
ki = right(ops, 1)
ops = left(ops, length(ops)-1)
end
starter = start
if start == '{' then
stopper = '}'
else if start == '¢' then
stopper = '$!'
else do
call scanVerify s, '/', 'm'
starter = '/'m.s.tok'/'
stopper = '$'starter
if \scanLit(s, '/') then
call scanErr s, 'ending / after stopper' stopper 'expected'
end
res = compUnit(m, ki, stopper)
if \ scanLit(s, stopper) then do
if pos(ki, ':|') < 1 | \ abbrev(stopper, '$') then
call scanErr s, 'ending' stopper 'expected after' starter
else if \ scanLit(s, substr(stopper, 2)) then
call scanErr s, 'ending' stopper 'or' substr(stopper, 2),
'expected after' starter
end
if abbrev(starter, '/') then
m.m.bName = substr(starter, 2, length(starter)-2)
else
m.m.bName = ''
if m.res.text == '' then
m.res.text = ' '
return compAstAddOp(m, res, ops)
endProcedure compBlock
compAssAtt: procedure expose m. aClass
parse arg m
res = ''
aClass = ''
s = m.m.scan
last = ''
do forever
if compSpNlComment(m, '*') then do
end
else if pos(scanLook(s, 1), '/!}') > 0 then do
leave
end
else if scanLit(s, ';', '$;') then do
if last = ';' then
res = res'; call envWithNext'
last = ';'
end
else do
s1 = compAss(m, ", 1")
if s1 == '' then do
s1 = compStmt(m)
if s1 == '' then
leave
end
else do
if last == ';' then
res = res'; call envWithNext'
last = 'a'
end
res = res';' comp2code(m, ';'s1)
end
if res == '' then
res = ';'
end
if last == '' then
return res
else
return '# call envWithNext "b";' res ,
'; call envWithNext "e";'
endProcedure compAssAtt
compAssTab: procedure expose m. aClass
parse arg m
s = m.m.scan
call compSpNlComment m, '*'
hy = 0
tab = ''
do forever
bx = m.s.pos
if \ scanName(s) then
leave
hx = hy + 1
h.hx.beg = bx
if hx > 1 & bx <= h.hy.end then
call scanErr s, 'header overlap' m.s.tok 'pos' bx
h.hx = m.s.tok
tab = tab', f' m.s.tok 'v'
h.hx.end = m.s.pos
hy = hx
call compSpComment m, '*'
end
if tab \== '' then
aClass = classNew('n* Ass u' substr(tab, 3))
res = ''
isFirst = 1
do while scanReadNl(s)
do forever
call compSpNlComment m, '*'
s1 = compStmt(m)
if s1 == '' then
leave
res = res';' comp2code(m, ';'s1)
last = 's'
end
if pos(scanLook(s, 1), '/!}') > 0 then
leave
do qx=1
bx = m.s.pos
s1 = compExpr(m, 'w', '=')
if compIsEmpty(m, s1) then
leave
ex = m.s.pos
if ex <= bx then
return scanErr(s, 'colExpr backward')
do hy=1 to hx while bx >= h.hy.end
end
hz = hy+1
if hz <= hx & ex > h.hz.beg then
call scanErr s, 'value on hdr' h.hy 'overlaps' h.hz
else if hy > hx | bx >= h.hy.end | ex <= h.hy.beg then
call scanErr s, 'value from' bx 'to' ex ,
'no overlap with header' h.hy
if qx > 1 then
nop
else if isFirst then do
res = res"; call envWithNext 'b', '"aClass"'"
isFirst = 0
end
else
res = res"; call envWithNext"
res = res"; call envPut '"h.hy"'," comp2Code(m, "-"s1)", 1"
call compSpComment m, '*'
end
end
if isFirst then
return res
else
return '#' res"; call envWithNext 'e'"
endProcedure compassTab
/**** lexicals ********************************************************/
/*--- skip a comment. return 0 if there is none ----------------------*/
compComment: procedure expose m.
parse arg m
s = m.m.scan
res = 0
do forever
if scanLit(s, '$**') then
m.s.pos = 1 + length(m.s.src) /* before next nl */
else if scanLit(s, '$*+') then
call scanReadNl s, 1
else if scanLit(s, '$*(') then do
do forever
if scanVerify(s, m.m.chDol, 'm') then iterate
if scanReadNl(s) then iterate
if compComment(m) then iterate
if \ scanLit(s, '$') then
call scanErr s, 'source end in comment'
if scanLit(s, '*)') then
return 1
if scanLit(s, '$') then iterate
if scanString(s) then iterate
end
end
else
return res
res = 1
end
endProcedure compComment
/*--- skip spaces and comments ---------------------------------------*/
compSpComment: procedure expose m.
parse arg m, xtra
s = m.m.scan
sp = 0
co = 0
do forever
if scanVerify(s, m.m.chSpa) then
sp = 1
else if compComment(m) then
co = 1
else if xtra == '' then
leave
else if \ scanLit(s, xtra) then
leave
else do
co = 1
m.s.pos = 1+length(m.s.src)
end
end
m.m.gotComment = co
return co | sp
endProcedure compSpComment
/*--- skip spaces, NLs and comments ----------------------------------*/
compSpNlComment: procedure expose m.
parse arg m, xtra
found = 0
do forever
if compSpComment(m, xtra) then
found = 1
else if scanReadNl(m.m.scan) then
found = 1
else
return found
end
endProcedure compSpComment
/**** small helper routines ******************************************/
compInter: procedure expose m.
interpret arg(1)
return
endProcedure compInter
/*--- if va == null then issue an error with msg --------------------*/
compCheckNN: procedure expose m.
parse arg m, va, msg
if va == '' then
call scanErr m.m.scan, msg 'expected'
return va
endProcedure compCheckNN
/*--- return true iff expression is empty ---------------------------*/
compIsEmpty: procedure expose m.
parse arg m, ex
if pos(' ', ex) < 1 & pos('COMP.AST.', ex) > 0 then do
a = substr(ex, pos('COMP.AST.', ex))
a = compAstAftOp(m, a)
if m.a.type = 'block' then
return 0 /* m.a.0 == 0 */
else
return m.a.text == ''
end
e1 = word(ex, 1)
return ex = '' | verify(e1, 'ec', 'm') > 0
endProcedure compIsEmpty
/*--- if va == null or empty then issue an error with msg -----------*/
compCheckNE: procedure expose m.
parse arg m, ex, msg
e1 = left(ex, 1)
if compIsEmpty(m, ex) then
call scanErr m.m.scan, msg 'expected'
return ex
endProcedure compCheckNE
/**** AST = Astract Syntax Graph ***************************************
goal is to migrate to migrate to old codeGenerator to AST
***********************************************************************/
/*--- create a new AST -----------------------------------------------*/
compAST: procedure expose m.
parse arg m, tp
n = mNew('COMP.AST')
m.n.type = tp
if wordPos(tp, 'block') > 0 then do
do cx=1 to arg()-2
m.n.cx = arg(cx+2)
end
m.n.0 = cx-1
end
else do
m.n.text = arg(3)
m.n.0 = 0
end
m.a.isAnnotated = 1
return n
endProcedure compAST
/*--- add operandands to an AST -------------------------------------*/
compASTAddOp: procedure expose m.
parse arg m, a, ops
if ops == '' then
return a
if pos('COMP.AST.', a) < 1 then
return ops || a
if m.a.type = 'ops' then do
m.a.text = ops || m.a.text
return a
end
n = compAst(m, 'ops', ops)
call mAdd n, a
return n
endProcedure compAstAddOp
/*--- return the first AST after the operand chain
put the operands into m.m.astOps ---------------------------*/
compASTaftOp: procedure expose m.
parse arg m, a
m.m.astOps = ''
if \ abbrev(a, 'COMP.AST.') then
return ''
do while m.a.type == 'ops'
m.m.astOps = m.a.text || m.m.astOps
a = m.a.1
end
return a
endProcedure compASTAftOpType
/*--- return the kind of an AST --------------------------------------*/
compASTKind: procedure expose m.
parse arg m, a
m.m.astOps = ''
if \ abbrev(a, 'COMP.AST.') then
return left(a, 1)
c = a
do while m.c.type == 'ops'
if m.c.text \== '' then
return left(m.c.text, 1)
c = m.c.1
end
if a == c then
return '?'
return compAstKind(m, c)
endProcedure compASTKind
/*--- return the code for an AST with operand chain trg --------------*/
compAst2Code: procedure expose m.
parse arg m, a, aTrg
if pos(' ', a) > 0 | \ abbrev(a, 'COMP.AST.') then
return comp2Code(m, aTrg || a)
if \ abbrev(a, 'COMP.AST.') then
call err 'bad ast' a
do while m.a.type == 'ops'
aTrg = aTrg || m.a.text
a = m.a.1
end
trg = compAstOpsReduce(m, aTrg)
if m.a.type == translate(right(trg, 1), ';', '@') then do
if length(trg) == 1 then do
if pos(trg, ';@') > 0 then
return 'do;' m.a.text ';end'
else
return m.a.text
end
else
return compAST2Code(m, a, left(trg, length(trg)-1))
end
if m.a.type == 'block' then do
op = right(trg, 1)
tLe = left(trg, length(trg)-1)
call compASTAnnBlock m, a
if pos(m.a.maxKind, '.-<') > 0 & pos(op, '.-|?') > 0 then do
if m.a.0 = 1 then do
o1 = if(op=='-', '-', '.')
r = compAst2Code(m, m.a.1, o1)
r = compC2C(m, o1, compAstOpsReduce(m, tLe||o1), r)
if pos(op, '.-<') > 0 then
return '('r')'
else
return r
end
if m.a.0 = 0 & op == '?' then
return compC2C(m, '.', compAstOpsReduce(m, tLe'.'))
if op == '-' then do
cd = ''
do cx = 1 to m.a.0
cd = cd '('compAst2Code(m, m.a.cx, '-')')'
end
return compC2C(m, '-', trg, substr(cd, 2))
end
call scanErr m.m.scan, 'bad block cardinality' aTrg
end
cd = ''
do cx = 1 to m.a.0
cd = cd';' compAst2Code(m, m.a.cx, ';')
end
if right(trg, 1) == '@' then
trg = overlay(';', trg, length(trg))
return compC2C(m, ';', trg, 'do;' cd'; end')
end
else if m.a.type == ';' then do
return compC2C(m, ';', trg, m.a.text)
if right(trg, 1) == '-' then
return compAst2Code(m, "- o2String('"oRunner(m.a.text)"')",
, trg)
if right(trg, 1) == '<' then
return compAst2Code(m, "< o2File('"oRunner(m.a.text)"')",
, trg)
end
else if m.a.type == ':' then do
if m.a.0 = 0 then
call mAdd a, 'call envPushWith', 'call envPopWith'
return compC2C(m, ';', trg,
, 'do;' m.a.1';' m.a.text';' m.a.2'; end')
end
call scanErr m.m.scan, 'implement type' m.a.type 'for' a 'trg' trg
endProcedure compAst2Code
/*--- do a chain of code transformations
from code of kind fr by opList
op as from kind operand
= constant -
- rexx string Expr cast to string/ concat file/output
. rexx object Expr cast to object
< rexx file Expr cast to file
; rexx Statements execute, write obj, Str
@ - cast to ORun, run an obj, write file
| - extract exactlyOne
? - extract OneOrNull
----------------------------------------------------------------------*/
compC2C: procedure expose m.
parse arg m, fr, opList, code
oldCode = fr':' code '==>' opList '==>'
do tx=length(opList) by -1 to 1
to = substr(opList, tx, 1)
if fr == to then
iterate
nn = '||||'
if to == '-' then do
if fr == '=' then
nn = quote(code)
else if abbrev(fr code, '. envGetO(') then
nn = 'envGet(' || substr(code, 9)
else if fr == ';' then
nn = "o2String('"oRunner(code)"')"
else if pos(fr, '.<') > 0 then
nn = "o2String("code")"
end
else if to == '.' then do
if fr == '=' then
nn = quote(s2o(code))
else if abbrev(fr expr, '- envGet(') then
nn = 'envGetO('substr(expr, 8)
else if fr == '-' then
nn = 's2o('code')'
else if fr == '<' then
nn = code
else if fr == ';' then
nn = quote(oRunner(code))
end
else if to == '@' then do
if fr == '.' then
nn = 'call oRun' code
else if fr == '<' then
nn = 'call pipeWriteAll' code
else if fr == ';' then
nn = code
to = ';'
end
else if to == ';' then do
if fr == '=' then
nn = 'call out' quote(code)
else if fr == '-' then
nn = 'call out' code
else if fr == '.' | fr == '<' then
nn = 'call outO' code
end
else if to == ':' then do
if fr == '=' then
nn = quote(code)
else
nn = code
to = ';'
end
else if to == '<' then do
if fr == '-' then
nn = 'file('code')'
else if fr == '=' then
nn = "file("quote(code)")"
else if fr == '.' then
nn = 'o2File('code')'
else if fr == ';' then
nn = 'o2File('oRunner(code)')'
end
else if to == '|' | to == '?' then do
if fr == '<' | fr == '.' then
nn = 'fileSingle('code if(to == '|','', ", ''")')'
else if fr == '@' | fr == ';' then
/* ???wkTst optimize: do it directly */
nn = compC2C(m, fr, to'<', code)
to = '.'
end
if nn == '||||' then
return scanErr(m.m.scan,
,'compC2C bad fr' fr 'to' to 'list' opList)
fr = to
code = nn
end
return code
endProcedure compC2C
/*--- reduce a chain of operands -------------------------------------*/
eliminate duplicates and identity transformations ----------*/
compAstOpsReduce: procedure expose m.
parse arg m, ops
ki = ops
ki = space(translate(ops, ' ', 'e('), 0)
fr = ';<; <;< -.- <@<'
to = '; < - < '
fr = fr '== -- .. << ;; @@ @('
to = to '= - . < ; @ (@'
wc = words(fr)
do until ki = oldKi
oldKi = ki
do wx=1 to wc
do forever
wf = word(fr, wx)
cx = pos(wf, ki)
if cx < 1 then
leave
ki = left(ki, cx-1) || word(to, wx) ,
|| substr(ki, cx+length(wf))
end
end
end
return ki
endProcedure compASTOpsReduce
/*--- annotate a block if necessary ----------------------------------*/
compASTAnnBlock: procedure expose m.
parse arg m, a
if m.a.isAnnotated == 1 then
return
mk = ''
do cx=1 to m.a.0
c = m.a.cx
if pos(' ', c) > 0 | \ abbrev(c, 'COMP.AST.') then
ki = left(c, 1)
else if \ abbrev(c, 'COMP.AST.') then
return scanErr(m.m.scan, 'bad ast' c 'parent' a) /0
else
call scanErr m.m.scan, 'implement kind of' c 'type' m.c.type
if pos(ki, '=-.<;@:|') < 1 then do
if pos(ki, 'el0') < 1 then
call err 'bad kind' ki
end
else if mk == '' | pos(ki, '=-.<;@:|') > pos(mk, '=-.<;@:|') then
mk = ki
end
m.a.maxKind = mk
m.a.isAnnotated = 1
return
endProcedrue compASTAnnBlock
/**** old code generator ***********************************************
plan is to replace it with AST ******************************/
/*--- transform abstract syntax tree to code ------------------------
wkTst??? codeTree besser dokumentieren
optimizer an/und/abschaltbar machen
(test sollte laufen, allenfalls gehen rexx variabeln
verloren)
syntax tree is simple, only where
* a transformation is needed from several places or
* must be deferred for possible optimizations
sn = ops* syntax node op or syntax function
( '=' constant none
| '-' rexxExpr yielding string cast to string
| '.' rexxExpr yielding object cast to object
| '<' rexxExpr yielding file cast to file
| ';' rexxStmts execute, write obj, Str
| '*' stem yielding multiple sn none
)
ops = '@' cast to ORun
| '|' single
| 'e' empty = space only
| 'c' empty = including a comment
| '0' cat expression parts
| 'l' cat lines
| '(' add ( ... ) or do ... end
---------------------------------------------------------------------*/
comp2Code: procedure expose m.
parse arg m, ki expr
if expr == '' & pos(' ', ki) < 1 & pos('COMP.AST.', ki) > 0 then do
cx = pos('COMP.AST.', ki)
return compAst2Code(m, substr(ki, cx), left(ki, cx-1))
end
/* wkTst??? optimize: use stem with code and interpret */
if expr = '' & pos(right(ki, 1), '@;=') < 1 then
return scanErr(m.m.scan, 'comp2Code empty expr' ki expr)
do forever
ki = comp2CodeKind(m, ki)
if length(ki) <= 1 then
if pos(ki, m.m.chKind';<') > 0 then
return expr
else
call err 'comp2Code bad return' ki expr
fr = right(ki, 1)
to = substr(ki, length(ki)-1, 1)
opt = ''
if pos(to, 'l0') > 0 | (to == '*' & fr == '*') then do
opt = to
to = substr(ki, length(ki)-2, 1)
end
toBef = to
nn = '||||'
if fr == '*' then do
if opt == '' then
call scanErr m.m.scan, 'no sOp for * kind' ki expr
cat = comp2CodeCat(m, expr, opt, to)
parse var cat to nn
end
else if to == '-' then do
if fr == '=' then
nn = quote(expr)
else if abbrev(fr expr, '. envGetO(') then
nn = 'envGet(' || substr(expr, 9)
else if fr == ';' then
nn = "o2String('"oRunner(expr)"')"
else if pos(fr, '.<') > 0 then
nn = "o2String("expr")"
end
else if to == '.' then do
if fr == '=' then
nn = quote(s2o(expr))
else if abbrev(fr expr, '- envGet(') then
nn = 'envGetO('substr(expr, 8)
else if fr == '-' then
nn = 's2o('expr')'
else if fr == '<' then
nn = expr
else if fr == ';' then
nn = quote(oRunner(expr))
end
else if to == '@' then do
if fr == '.' then
nn = 'call oRun' expr
else if fr == '<' then
nn = 'call pipeWriteAll' expr
else if fr == ';' then
nn = expr
to = ';'
end
else if to == ';' then do
if fr == '=' then
nn = 'call out' quote(expr)
else if fr == '-' then
nn = 'call out' expr
else if fr == '.' | fr == '<' then
nn = 'call outO' expr
else if fr == '#' then
nn = 'call envPushWith ;'expr'; call envPopWith'
end
else if to == ':' then do
if fr == '=' then
nn = quote(expr)
else
nn = expr
to = ';'
end
else if to == '<' then do
if fr == '-' then
nn = 'file('expr')'
else if fr == '=' then
nn = "file("quote(expr)")"
else if fr == '.' then
nn = 'o2File('expr')'
else if fr == ';' then
nn = 'o2File('oRunner(expr)')'
end
else if to == '(' then do
nn = compAddBracks(m, fr, expr)
to = fr
end
else if to == '|' | to == '?' then do
if fr == '<' | fr == '.' then do
nn = 'fileSingle('expr if(to == '|','', ", ''")')'
to = '.'
end
else if fr == '@' | fr == ';' then do
to = to'<'fr
nn = expr
end
end
if nn == '||||' then
return scanErr(m.m.scan,
,'comp2code bad fr' fr 'to' toBef 'for' ki expr)
ki = left(ki, length(ki)-2-length(opt))to
expr = nn
end
endProcedure comp2Code
/*--- optimize operands: eliminate duplicates and
identity transformations -------------------*/
comp2CodeKind: procedure expose m.
parse arg m, ki
ki = '$'space(translate(ki, ' ', 'ce'), 0)
fr.2 = '== -- .. << ;; (( -( .( ;( (< @; @@ ;@ @( $l $0 @#'
to.2 = '= - . < ; ( (- (. (; < ; @ @ (@ $ $ ;#'
fr.3 = ';0; ;l; -.- -;- .-. .;. ;<; ;<( <(; @(- @(l |(l ?(l'
to.3 = ' 0; l; - - . . ; ;< <; ;(- ;(l (|l (?l'
do until ki = oldKi
oldKi = ki
do le=3 by-1 to 2
do cx=1 while cx <= length(ki)+1-le
wx = wordPos(substr(ki, cx, le), fr.le)
if wx > 0 then
ki = left(ki, cx-1) || ,
word(to.le, wx) || substr(ki, cx+le)
end
end
end
return substr(ki, 2)
endProcedure comp2CodeKind
/*--- generate one codeString for one stem -------------------------*/
comp2CodeCat: procedure expose m.
parse arg m, st, sOp, trgt
toCode = trgt == '@' | trgt == ';'
if m.st.0 < 1 & trgt \== '<' then
return trgt
tr1 = trgt
if \ toCode then do
/* check wether we need to evaluate statements
and cast the outptut to an object */
maxTy = 0
do x=1 to m.st.0
maxTy = max(maxTy, pos(left(m.st.x, 1), '=-.<;@'))
end
if trgt \== '<' then do
if maxTy >= 5 then do
tr1 = ';'
toCode = 1
end
end
else do /* handle files */
if maxTy > 1 then do /* not constant */
res = ';'
do sx=1 to m.st.0
res = res';' comp2Code(m, ';'m.st.sx)
end
return '<'res
end
/* constant file write to jBuf */
buf = jOpen(jBuf(), m.j.cWri)
do sx=1 to m.st.0
call jWrite buf, substr(m.st.sx, 3)
end
return '<' quote(jClose(buf))
end
end
if m.st.0 = 1 then do
if trgt == '|' | trgt == '?' then
return left(m.st.1, 1) comp2Code(m, m.st.1)
else if trgt \== '<' then
return trgt comp2Code(m, trgt || m.st.1)
end
tr2 = tr1
if toCode then do
mc = '; '
if sOp == 0 then do
mc = ''
tr2 = ':'
end
end
else if sOp == '0' then
mc = if(tr1 == '.' | tr1 == '-', '', ' || ')
else if sOp == 'l' then
mc = ' '
else
call scanErr m.m.scan, 'bad sOp' sOp ,
'in comp2CodeCat('m',' st',' sOp',' trgt')'
if symbol('m.st.1') \== 'VAR' then
return err("bad m."st'.1')
sep = if(tr1 == '.' | tr1 == '-' | tr1 == '=', ' || ', ' ')
sep = if(sOp = 0, ' || ', ' ')
tr3 = left(tr2, sOp \== 0)
res = comp2Code(m, tr3 || m.st.1)
do sx = 2 to m.st.0
if (tr2 == '.' | tr2 == '-') ,
& (m.st.sx = '-' | m.st.sx = '.') then do
/* empty expr is simply a rexx syntax space */
if right(res, 1) \== ' ' then
res = res' '
end
else do
act = comp2Code(m, tr3 || m.st.sx)
res = compCatRexx(res, act, mc, sep)
end
end
return copies(trgt || sOp, tr1 \== trgt)tr1 res
endProcedure comp2CodeCat
/*--- add expression brackets if necessary --------------------------*/
compAddBracks: procedure expose m.
parse arg m, ki, ex
if ki == ';' then
return 'do;' ex || left(';', ex \= '') 'end'
if \ (ki == '.' | ki == '-') then
return ex
ex = strip(ex)
e1 = left(ex, 1)
if e1 == '(' & pos('(', ex, 2) = 0 & pos(')', ex) = length(ex) then
return ex
if pos(e1, '"''') > 0 & pos(e1, ex, 2) = length(ex) then
return ex
return '('ex')'
endProcedure compAddBracks
/*--- cat two rexx parts, avoid strange effects--------------------*/
compCatRexx: procedure expose m.
parse arg le, ri, mi, sep
if mi \== '' then
return le || mi || ri
lr = right(le, 1)
rl = left(ri, 1)
if (lr == "'" | lr == '"') then do
if rl == lr then /* "a","b" -> "ab" */
return left(le, length(le)-1) || substr(ri, 2)
else if rl == '(' then /* "a",( -> "a" || ( */
return le||sep||ri /* avoid function call */
end
else if pos(lr, m.comp.idChars) > 0 then
if pos(rl, m.comp.idChars'(') > 0 then
return le || sep || ri /* a,b -> a || b */
return le || mi || ri
endProcedure compCatRexx
/*--- push an empty stem on the stack --------------------------------*/
compNewStem: procedure expose m.
parse arg m
st = mAdd('COMP.STEM', '')
do ix=1 to arg()-1
m.st.ix = arg(ix+1)
end
m.st.0 = ix-1
return st
endProcedure compNewStem
/* copy comp end ******************************************************/
/* copy scan begin ****************************************************
Scan: scan an input:
scanLine(m,ln) : begin scanning a single line (string)
scanRead??(m,ln): begin scanning all lines of an opened reader
scanAtEnd(m) : returns whether we reached end of input
scanLit(m,lit) : scan Literal lit if present or return 0
scanChar(m,n) : scan next n characters
scanName(m) : scan a name
ScanNat(m) : scan a natural number (without sign)
scanString(m,q): scan a String with quote q. (with doubble = 1)
scanVerify(m,c,o): verify(...,c,o,...)
scanKeyValue(m): scan a key = value clause (with spaces)
scanWord(m,u) : scan a space delimited word or a string,
if u=1 then uppercase non-strings
scanErr(m, txt): error with current scan location
m is an adress, to store our state
if a scan function succeeds, the scan posititon is moved
returns: true if scanned, false otherwise
m.m.tok ==> last token
m.m.val ==> last value for scanString/Word/KeyValue
m.key ==> key for scanKeyValue
m.m.pos ==> scan position
m.m.src ==> scan source
***********************************************************************/
scanIni: procedure expose m.
if m.scan.ini == 1 then
return
m.scan.ini = 1
m.scan.alfLC = 'abcdefghijklmnopqrstuvwxyz'
m.scan.alfUC = translate(m.scan.alfLC)
m.scan.alfa = m.scan.alfLC || m.scan.alfUC
m.scan.alfNum = m.scan.alfa || '0123456789'
return
endProcedure scanIni
scanReset: procedure expose m.
parse arg m, n1, np, co
m.m.rdr = ''
m.m.jReading = 0 /* if called without jReset */
m.m.jWriting = 0
return scanOpts(m, n1, np, co)
endProcedure scanReset
scanOpts: procedure expose m.
parse arg m, m.m.scanName1, namePlus, m.m.scanComment
if m.m.scanName1 == '' then
m.m.scanName1 = m.scan.alfa
if namePlus == '' then
m.m.scanNameR = m.m.scanName1 || '0123456789'
else
m.m.scanNameR = m.m.scanName1 || namePlus
return m
endProcedure scanOpts
/*--- begin scanning a single line -----------------------------------*/
scanSrc: procedure expose m.
parse arg m, m.m.src
return scanOpen(m)
endProcedure scanSrc
scanOpen: procedure expose m.
parse arg m
m.m.tok = ''
m.m.val = ''
m.m.key = ''
m.m.pos = 1
m.m.atEnd = m.m.rdr == ''
m.m.jReading = 1
return m
endProcedure scanOpen
/*--- return the next len characters ---------------------------------*/
scanLook: procedure expose m.
parse arg m, len
if len == '' then
return substr(m.m.src, m.m.pos)
else
return substr(m.m.src, m.m.pos,
, min(len, 1 + length(m.m.src) - m.m.pos))
endProcedure scanLook
/*--- scan the literal lit ------------------------------------------*/
scanLit: procedure expose m.
parse arg m
do ax=2 to arg()
if abbrev(substr(m.m.src, m.m.pos), arg(ax)) then do
m.m.tok = arg(ax)
m.m.pos = m.m.pos + length(arg(ax))
return 1
end
end
m.m.tok = ''
return 0
endProcedure scanLit
/*--- scan the next len characters -----------------------------------*/
scanChar: procedure expose m.
parse arg m, len
nx = 1 + length(m.m.src)
if len \= '' then
nx = min(m.m.pos + len, nx)
m.m.tok = substr(m.m.src, m.m.pos, nx - m.m.pos)
m.m.pos = nx
return m.m.tok \== ''
endProcedure scanChar
/*--- scan a string with quote char qu -------------------------------*/
scanString: procedure expose m.
parse arg m, prefs
m.m.tok = ''
bx = m.m.pos
if prefs = '' then do
qu = substr(m.m.src, bx, 1)
if pos(qu, "'""") < 1 then
return 0
ax = bx + 1
end
else do
do px=1 until abbrev(substr(m.m.src, bx), p1)
p1 = word(prefs, px)
if p1 = '' then
return 0
end
qu = right(p1, 1)
ax = bx + length(p1)
end
m.m.val = ''
do forever
qx = pos(qu, m.m.src, ax)
if qx < 1 then
return scanErr(m, 'ending Apostroph('qu') missing')
m.m.val = m.m.val || substr(m.m.src, ax, qx-ax)
if qx >= length(m.m.src) then
leave
else if substr(m.m.src, qx+1, 1) <> qu then
leave
ax = qx+2
m.m.val = m.m.val || qu
end
m.m.tok = substr(m.m.src, bx, qx+1-bx)
m.m.pos = qx+1
return 1
endProcedure scanString
/*--- scan a Name, first char in *.scanName1, rest in *.scanNameR ----*/
scanName: procedure expose m.
parse arg m
if pos(substr(m.m.src, m.m.pos, 1),
, m.m.scanName1) <= 0 then do
m.m.tok = ''
return 0
end
return scanVerify(m, m.m.scanNameR)
endProcedure scanName
/*--- scan with verify, vOpt is passed to verify ---------------------*/
scanVerify: procedure expose m.
parse arg m, alpha, vOpt, onlyIfMatch
if vOpt == '' then /* empty string does not take default */
nx = verify(m.m.src, alpha, , m.m.pos)
else
nx = verify(m.m.src, alpha, vOpt, m.m.pos)
if nx = 0 then
if onlyIfMatch == 1 then
nx = m.m.pos
else
nx = length(m.m.src) + 1
m.m.tok = substr(m.m.src, m.m.pos, nx - m.m.pos)
m.m.pos = nx
return m.m.tok \== ''
endProcedure scanVerify
/*--- scan a natural number (no sign, decpoint ...) ------------------*/
scanNat: procedure expose m.
parse arg m, chEn
if \ scanVerify(m, '0123456789') then
return 0
if chEn \== 0 then
if pos(scanLook(m , 1), m.m.scanNameR) > 0 then
call scanErr m, 'illegal number end after' m.m.tok
return 1
endProcedure ScanNat
/*--- scan an integer (optional sign, no decpoint ...) ---------------*/
scanInt: procedure expose m.
parse arg m, chEn
call scanLit m, '+', '-'
si = m.m.tok
if \ scanNat(m, chEn) then do
m.m.pos = m.m.pos - si
return 0
end
m.m.tok = si || m.m.tok
return 1
endProcedure scanInt
/*--- scan a number (optional sign, decpoint, exponent) ------------*/
scanNum: procedure expose m.
parse arg m, chEn
sx = m.m.pos
call scanLit m, '+', '-'
po = scanLit(m, '.')
if \ scanNat(m, 0) then do
m.m.pos = sx
return 0
end
if \ po then
if scanLit(m, '.') then
call scanNat m, 0
if scanLit(m, 'e', 'E') then
if \ scanInt(m, 0) then
call scanErr m, 'exponent expected after' ,
substr(m.m.src, sx, m.m.pos-sx)
m.m.tok = substr(m.m.src, sx, m.m.pos-sx)
m.m.val = translate(m.m.tok)
if chEn \== 0 then
if pos(scanLook(m , 1), m.m.scanNameR) > 0 then
call scanErr m, 'illegal number end after' m.m.tok
return 1
endProcedure scanNum
/*--- scan a word and put value into *.val
a word is either delimited by space or stopper
or a string (with single or double quotes -------*/
scanWord: procedure expose m.
parse arg m, stopper
if scanString(m) then return 1
if \scanVerify(m, ' 'stopper, 'm') then return 0
m.m.val = m.m.tok
return 1
endProcedure scanWord
scanType: procedure expose m.
parse arg m, opt
m.m.tok = ''
if scanName(m) then
m.m.type = 'n'
else if scanNum(m) then
m.m.type = 0
else if scanString(m) then
m.m.type = left(m.m.tok, 1)
else if scanSpaceNl(m) then
m.m.type = 's'
else do
call scanChar m, 1
m.m.type = m.m.tok
end
return m.m.type
endProcedure scanType
scanBack: procedure expose m.
parse arg m, tok
if m.m.pos <= length(tok) then
call scanErr sc, 'cannot back "'tok'" length'
cx = m.m.pos - length(tok)
if substr(m.m.src, cx, length(tok)) \== tok then
call scanErr sc, 'cannot back "'tok'" value'
m.m.pos = cx
return
endProcedure scanBack
/*--- scan a key = word phrase
put key into m.key and word into m.m.val -------*/
scanKeyValue: procedure expose m.
parse arg m, def
if \ scanName(m) then
return 0
m.m.key = m.m.tok
if \ scanLit(scanSkip(m), '=') then do
m.m.val = def
m.m.tok = ' no='
end
else if \scanWord(scanSkip(m)) then
return scanErr(m, 'word expected after' m.m.key '=')
return 1
endProcedure scanKeyValue
/*--- return true/false whether we are at the end of input ----------*/
scanAtEnd: procedure expose m.
parse arg m
return m.m.atEnd & m.m.pos > length(m.m.src)
endProcedure scanAtEnd
/*--- skip over spaces, nl and comments (if option set) --------------*/
scanSpaceNL: procedure expose m.
parse arg m
lastTok = m.m.tok
if m.m.rdr \== '' then
interpret 'res = ' objMet(m, 'scanSpaceNl')
else
res = scanSpaceCom(m)
m.m.tok = lastTok
return res
endProcedure scanSpaceNL
scanSpaceCom: procedure expose m.
parse arg m
res = scanVerify(m, ' ')
if m.m.scanComment \== '' then
if abbrev(substr(m.m.src, m.m.pos), m.m.scanComment) then do
m.m.pos = 1 + length(m.m.src)
return 1
end
return res
endProcedure scanSpaceCom
/*--- skip over space, nl and comments and return m -----------------*/
scanSkip: procedure expose m.
parse arg m
call scanSpaceNl m
return m
endProcedure scanSkip
/*--- emit an error with current scan pos ----------------------------*/
scanErr: procedure expose m.
parse arg m, txt
m.m.err.0 = 0
call err 'scanErr' txt'\n'scanInfo(m, m'.ERR')
return 0
endProcedure scanErr
scanPos: procedure expose m.
parse arg m
if m.m.rdr \== '' then
interpret 'return' objMet(m, 'scanPos')
else if scanAtEnd(m) then
return E
else
return 1 m.m.pos
endProcedure scanPos
scanInfo: procedure expose m.
parse arg m
msg = 'last token' m.m.tok 'scanPosition' ,
strip(left(substr(m.m.src, m.m.pos), 40), 't')
om = objMet(m, 'scanInfo', '')
if om == '' then
return msg'\npos' m.m.Pos 'in string' strip(m.m.src, 't')
else
interpret 'return msg ||' om
endProcedure scanInfo
/* copy scan end ****************************************************/
/* copy scanRead begin ************************************************/
scanReadIni: procedure expose m.
if m.scanRead.ini = 1 then
return
m.scanRead.ini = 1
call scanIni
call jIni
ts = classNew('n Scan u f TOK v, f VAL v, f KEY v, f TYPE v')
call classNew 'n ScanRead u JRW', 'm',
, 'jReset call scanReadReset m, arg, arg2, arg3',
, 'jOpen call scanReadOpen m',
, 'jClose call jClose m.m.rdr',
, 'jRead call scanType m; call oClaCopy "'ts'", m, var;' ,
'return m.m.type \== ""',
, 'scanReadNl return scanReadNlImpl(m, unCond)',
, 'scanSpaceNl scanReadSpaceNl(m)',
, 'scanInfo scanReadInfo(m)',
, 'scanPos scanReadPos(m)'
call classNew "n EditRead u JRW", "m",
, "jRead return editRead(m, var)",
, "jOpen" ,
, "jReset m.m.linex = arg - 1"
return
endProcedure scanReadIni
/*--- begin scanning the lines of a reader ---------------------------*/
scanRead: procedure expose m.
parse arg rdr, n1, np, co
return scanOpts(oNew('ScanRead', rdr), n1, np, co)
scanReadReset: procedure expose m.
parse arg m, r, n1, np, co
call scanReset m, n1, np, co
m.m.rdr = r
return m
endProcedure scanReadReset
scanReadOpen: procedure expose m.
parse arg m, r, n1, np, co
call scanOpen m
m.m.atEnd = 0
m.m.lineX = 0
call jOpen m.m.rdr, m.j.cRead
call scanReadNl m, 1
return m
endProcedure scanReadOpen
/*--- scan over next newLine
if unCond \== 1 only if we are already at endOfLine
return true if we scanned a NL ------------------------------*/
scanReadNl: procedure expose m.
parse arg m, unCond
interpret objMet(m, 'scanReadNl')
endProcedure scanReadNl
/*--- implementation of scanReadNl ----------------------------------*/
scanReadNLimpl: procedure expose m.
parse arg m, unCond
if unCond \== 1 then
if m.m.pos <= length(m.m.src) then
return 0
if m.m.atEnd then
return 0
m.m.atEnd = \ jRead(m.m.rdr, m'.SRC')
if m.m.atEnd then do
m.m.pos = 1 + length(m.m.src)
end
else do
m.m.pos = 1
m.m.lineX = m.m.lineX + 1
end
return \ m.m.atEnd
endProcedure scanReadNLimpl
scanReadSpaceNl: procedure expose m.
parse arg m
fnd = 0
do forever
if scanSpaceCom(m) then
fnd = 1
if \ scanReadNl(m) then
return fnd
fnd = 1
end
endProcedure scanReadSpaceNl
scanReadPos: procedure expose m.
parse arg m, msg
if scanAtEnd(m) then
return E
else
return m.m.lineX m.m.pos
endProcedure scanReadPos
scanReadInfo: procedure expose m.
parse arg m, msg
if scanAtEnd(m) then
msg = msg'\natEnd after'
else
msg = msg'\npos' m.m.pos 'in'
return msg 'line' m.m.lineX':' strip(m.m.src, 't')
endProcedure scanReadInfo
/*--- use scan sqlEdit macro --> temporarily here --------------------*/
/*--- read next line from edit data ----------------------------------*/
editRead: procedure expose m.
parse arg m, var
m.m.lineX = m.m.lineX + 1
if adrEdit('(ll) = line' m.m.lineX, 12) ^= 0 then
return 0
m.var = ll
return 1
endProcedure editRead
/*--- search loop in edit macro --------------------------------------*/
scanSqlSeekId: procedure expose m.
parse arg m, lx, cmd, opts
if opts = '' then
opts = word
/* line 1 col 0, otherwise first word is skipped*/
if adrEdit("cursor =" max(trunc(lx), 1) 0, 12) = 12 then
return -1
do while adrEdit("seek" cmd opts, 4) = 0 /* find each command*/
call adrEdit "(fx) = cursor"
if m.debug then do
call adrEdit "(LI) = LINE" fx
call debug 'scanSqlSeekId after' lx 'found' cmd 'at' fx li
end
call jReset m.m.rdr, fx
call jOpen m, '<'
m.m.lineX = fx
do while word(scanPos(m), 1) <= fx & scanSqlClass(m)
if m.m.sqlClass = 'i' & m.m.val == cmd then
return fx
end
call jClose m
end
return -1
endProcedure scanSqlSeekId
/* copy scanRead end **************************************************/
/* copy scanWin begin *************************************************
scan the the concatenation of the lines of a reader
any token my be split over several line
except the end-of-line-comment-token
***********************************************************************/
scanWinIni: procedure expose m.
if m.scanWin.ini = 1 then
return
m.scanWin.ini = 1
call scanReadIni
call jIni
call classNew 'n ScanWin u JRW', 'm',
, 'jReset call scanWinReset m, arg, arg2, arg3',
, 'jOpen call scanWinOpen m, arg(3) ',
, 'jClose call scanWinClose m ',
, 'scanReadNl return scanWinNl(m, unCond)',
, 'scanSpaceNl scanWinSpaceNl(m)',
, 'scanInfo scanWinInfo(m)',
, 'scanPos scanWinPos(m)'
return
endProcedure scanWinIni
/*--- instanciate a new window scanner, open rdr ---------------------*/
scanWin: procedure expose m.
parse arg rdr, wiSz, wiBa, cuPo, cuLe
return scanWinOpts(oNew('ScanWin', rdr), wiSz, wiBa, cuPo, cuLe)
/*--- set the reader and attributes of window scanner m -------------*/
scanWinReset: procedure expose m.
parse arg m, r, wiSz, wiGa, cuPo, cuLe
call scanReset m
m.m.rdr = r
m.m.atEnd = 'still closed'
return scanWinOpts(m, wiSz, wiGa, cuPo, cuLe)
endProcedure scanWinReset
/*--- set the attributes of window scanner m ------------------------*/
scanWinOpts: procedure expose m.
parse arg m, wiSz, wiGa, cuPo, cuLe
wiSz = word(wiSz 5, 1)
wiGa = word(wiGa 1, 1)
m.m.cutPos = word(cuPo 1, 1)
m.m.cutLen = word(cuLe 72, 1)
m.m.winTot = (wiSz * 2 + wiGa) * m.m.cutLen
m.m.posLim = (wiSz + wiGa) * m.m.cutLen
m.m.posOff = wiGa * m.m.cutLen
return m
endProcedure scanWinOpts
/*--- open reader and start scanning --------------------------------*/
scanWinOpen: procedure expose m.
parse arg m, lx
call scanOpen m
m.m.atEnd = 0
if lx = '' then
m.m.lineX = 1
else
m.m.lineX = lx
m.m.pos = 1
m.m.src = ''
call jOpen m.m.rdr, m.j.cRead
call scanWinRead m
return m
endProcedure scanWinOpen
scanWinClose: procedure expose m.
parse arg m
m.m.atEnd = 'still closed'
call jClose m.m.rdr
return
endProcedure scanWinClose
/*--- move the source window: cut left side and append at right side
return number of characters cut at left ------------------------*/
scanWinRead: procedure expose m.
parse arg m
dlt = 0
if m.m.atEnd then
return 0
if m.m.pos >= m.m.posLim then do /* cut left side */
dlt = m.m.pos - (m.m.pos // m.m.cutLen + m.m.posOff)
m.m.src = substr(m.m.src, dlt+1)
m.m.pos = m.m.pos - dlt
m.m.lineX = m.m.lineX + dlt % m.m.cutLen
end
do while length(m.m.src) < m.m.winTot /* read and fill to len */
if \ jRead(m.m.rdr, m'.'one) then do
m.m.atEnd = 1
return dlt
end
m.m.src = m.m.src || substr(m.m.one, m.m.cutPos, m.m.cutLen)
end
call assert 'length(m.m.src) = m.m.winTot'
return dlt
endProcedure scanWinRead
/*--- return position of next line start -----------------------------*/
scanWinNLPos: procedure expose m.
parse arg m
return m.m.pos + m.m.cutLen - ((m.m.pos - 1) // m.m.cutLen)
/*--- scan over spaces and comments ----------------------------------*/
scanWinSpaceNL: procedure expose m.
parse arg m
res = 0
do forever
call scanWinRead m
if scanVerify(m, ' ') then do
res = 1
iterate
end
else if scanLit(m, '/*') then do
ex = pos('*/', m.m.src, m.m.pos+2)
if ex <= m.m.pos then
return scanErr(m, '*/ missing after /*')
m.m.pos = ex+2
res = 1
end
else do
cl = length(m.m.scanComment)
np = scanWinNlPos(m)
if \ ( cl>0 & m.m.pos+cl <= np & m.m.scanComment ,
== substr(m.m.src, m.m.pos, cl)) then
return res
m.m.pos = np
res = 1
end
end
endProcedure scanWinSpaceNl
/*--- return current position in input ------------------------------*/
scanWinPos: procedure expose m.
parse arg m
if scanAtEnd(m) then
return 'E'
else
ps = m.m.pos - 1
return (m.m.lineX + (ps % m.m.cutLen)) (ps // m.m.cutLen + 1)
endProcedure scanWinPos
/*--- return a description of the current scan position --------------*/
scanWinInfo: procedure expose m.
parse arg m
p = scanWinPos(m)
if p == 'E' then do
res = 'atEnd after'
p = m.m.lineX - 1 + length(m.m.src) % m.m.cutLen
end
else do
res = 'pos' word(p, 2) 'in'
p = word(p, 1)
end
return '\n'res 'line' p':' strip(substr(m.m.src,
, 1 + (p - m.m.lineX) * m.m.cutLen, m.m.cutLen), 't')
endProcedure scanWinInfo
/* copy scanWin end *************************************************/
/* copy scanSql begin *************************************************/
/*--- initialize with reader inRdr ----------------------------------*/
scanSql: procedure expose m.
parse arg inRdr
return scanSqlReset(scanWin(inRdr), inRdr)
scanSqlReset: procedure expose m.
parse arg m, r, scanWin
if scanWin \== 0 then
call scanWinOpts m, 5, 2, 1, 72
m.m.rdr = r
return scanOpts(m, , '0123456789_' , '--')
endProcedure scanSqlReset
/*--- scan a sql token put class in m.sqlclass:
'i': ordinary identifier e.g. Name
'd': delimited identifier e.g. "Delimited"
'q': qualified identifier e.g. abc."efg"
'u': integer units e.g. 8G
'n': number e.g. -234 or .2e3
's': string e.g. 'abc''ef'
'' : at end
: any other character e.g. ;
----------------------------------------------------------------*/
scanSqlClass: procedure expose m.
parse arg m, retSpace
m.m.val = ''
if scanSpaceNl(m) & retSpace = 1 then do
m.m.sqlClass = 'b'
return 1
end
c2 = scanLook(m ,2)
if scanString(m, "' x' X'") then do
m.m.sqlClass = 's'
if \abbrev(m.m.tok, "'") then
m.m.val = x2c(m.m.val)
end
else if scanSqlQuId(m) then do
if m.m.val.0 > 1 then
m.m.sqlClass = 'q'
else if abbrev(m.m.tok, '"') then
m.m.sqlClass = 'd'
else
m.m.sqlClass = 'i'
end
else if scanSqlNum(m, 0) then
m.m.sqlClass = 'n'
else if scanChar(m, 1) then
m.m.sqlClass = m.m.tok
else if scanAtEnd(m) then do
m.m.sqlClass = ''
return 0
end
else
call scanErr m, 'cannot scan sql'
return 1
endProcedure scanSqlClass
scanSqlSkipBrackets: procedure expose m.
parse arg m, br
if br \== '' then
nop
else if scanLit(m, '(') then
br = 1
else
return 0
do while scanSqlClass(m) & m.m.sqlClass \== ';'
if m.m.sqlClass = '(' then br = br + 1
else if m.m.sqlClass \== ')' then iterate
else if br > 1 then br = br - 1
else return 1
end
call scanErr m, '; or eof, but' br 'closing ) expected'
endProcedure skipBrackets
/*--- scan an ordinary sql identifier e.g. abc, ef_12 ----------------*/
scanSqlId: procedure expose m.
parse arg m
if \ scanName(m) then
return 0
m.m.val = translate(m.m.tok)
return 1
endProcedure scanSqlId
/*--- scan a delimited or ordinay sql identifier ---------------------*/
scanSqlDeId: procedure expose m.
parse arg m
if scanSqlId(m) then
return 1
if \ scanString(m, '"') then
return 0
m.m.val = strip(m.m.val, 't')
return 1
endProcedure scanSqlDeId
/*--- scan a qualified sql identifier --------------------------------*/
scanSqlQuId: procedure expose m.
parse arg m
res = ''
rto = ''
do qx=1
if \ scanSqlDeId(m) then do
if qx <> 1 then
call scanErr m, 'id expected after .'
return 0
end
m.m.val.qx = m.m.val
res = res'.'m.m.val
rto = rto'.'m.m.tok
if \ scanLit(scanSkip(m), '.') then
leave
call scanSpaceNl m
end
m.m.val.0 = qx
m.m.val = substr(res, 2)
m.m.tok = substr(rto, 2)
return 1
endProcedure scanSqlQuId
/*--- scan a sql number ----------------------------------------------*/
scanSqlNum: procedure expose m.
parse arg m, checkEnd, noSp
si = ''
if noSp == 1 then
call err 'deimplement noSp, use scanNum instead'
if scanLit(m, '+', '-') then do
si = m.m.tok
call scanSpaceNl m
ch = scanLook(m, 2)
if left(ch, 1) == '.' then
ch = substr(ch, 2)
if pos(left(ch, 1), '0123456789') < 1 then do
call scanBack m, si
m.m.val = ''
return 0
end
end
res = scanNum(m, checkEnd)
m.m.val = si || m.m.val
return res
endProcedure scanSqlNum
/*--- scan a sql number with a unit which may follow without space ---*/
scanSqlNumUnit: procedure expose m.
parse arg m, both, units
if \ scanSqlNum(m, 0) then
return 0
nu = m.m.val
sp = scanSpaceNl(m)
if scanSqlId(m) then do
if units == '' | wordpos(m.m.val, units) > 0 then
nu = nu m.m.val
else if both | \ sp then
call scanErr m, 'scanSqlNumUnit after' nu 'bad unit' m.m.val
else
call scanBack m, m.m.tok
end
else if both then
call scanErr m, 'scanSqlNumUnit no unit after' nu
else if \sp & pos(scanLook(m, 1), m.m.scanNameR) > 0 then
call scanErr m, 'scanSqlNumUnit bad number end after' nu
m.m.val = nu
return 1
endProcedure scanSqlNumUnit
/* copy scanSql end *************************************************/
/* copy scanUtil begin *************************************************
scan db2 utility input statements using scan and a reader
**********************************************************************/
/*--- initialize with reader inRdr ----------------------------------*/
scanUtilReader: procedure expose m.
parse arg m, inRdr
call scanReader m, inRdr
call scanOptions sc, , , '--'
call scanUtilReset m
return m
endProcedure scanUtilReader
scanUtilSql: procedure expose m.
parse arg inRdr
m = scanSql(inRdr)
call scanUtilReset m
return m
endProcedure scanUtilReader
scanUtilReset: procedure expose m.
parse arg m
m.m.utilBrackets = 0
m.scanUtil = 'BACKUP CATENFM CATMAINT CHECK' ,
'COPY COPYTOCOPY DIAGNOSE EXEC LISTDEF LOAD' ,
'MERGECOPY MODIFY OPTIONS QUIESCE REBUILD' ,
'RECOVER REORG REPAIR REPORT RESTORE' ,
'RUNSTATS STOSPACE TEMPLATE UNLOAD'
return m
endProcedure scanUtilReset
/*--- scan next token and put its class in m.sc.utilClass:
'u' a utility name
'n' a name
'"' a quoted name
"'" an apostroph'd string
'.' a .
',' a ,
'v' a value
'' at end
---------------------------------------------------------------*/
scanUtil: procedure expose m.
parse arg sc
m.sc.utilSpace = scanSpaceNl(sc)
ty = '?'
if scanLit(sc, '(') then do
m.sc.utilBrackets = m.sc.utilBrackets + 1
end
else if scanLIT(sc, ')') then do
m.sc.utilBrackets = m.sc.utilBrackets - 1
if m.sc.utilBrackets < 0 then
call scanErr sc, 'unmatched closing bracket )'
end
else if scanLit(sc, ',') then do
end
else if scanLit(sc, '.') then do
end
else if scanString(sc, "'") then do
end
else if scanString(sc, '"') then do
end
else if scanName(sc) then do
m.sc.val = translate(m.sc.tok)
if m.sc.utilBrackets > 0 then
ty = 'n'
else if 0 < wordPos(m.sc.val, m.scanUtil) then
ty = 'u'
else
ty = 'n'
end
else if scanVerify(sc, ' (),''"', 'm') then do
ty = 'v'
m.sc.val = translate(m.sc.tok)
end
else if \scanAtEnd(sc) then do
call scanErr sc, 'scanUtil stopped before end'
end
else do
ty = ''
m.sc.val = ''
end
if ty == '?' then
m.sc.utilClass = left(m.sc.tok, 1)
else
m.sc.utilClass = ty
return m.sc.utilClass
endProcedure scanUtil
/*--- scan a value or a bracketed list of values ---------------------*/
scanUtilValue: procedure expose m.
parse arg sc, remApo, nl
if remApo = '' | rempApo = 0 then
remApo = "nv"
else if rempApo = 1 then
remApo = "nv'"
if '(' \== scanUtil(sc) then
return scanUtilValueOne(sc, remApo)
v = ''
brx = m.sc.utilBrackets
oLine = word(scanPos(sc), 1)
do forever
call scanUtil sc
one = scanUtilValueOne(sc, remApo)
if one == '' then
call scanErr sc, 'eof in brackets'
else if brx > m.sc.utilBrackets then
return v
nLine = word(scanPos(sc), 1)
if \ m.sc.utilSpace then
v = v || one
else if nl \== '' & oLine <> nLine then
v = v || nl || one
else
v = v' 'one
oLine = nLine
end
endProcedure scanUtilValue
scanUtilValueOne: procedure expose m.
parse arg sc, valTy
if m.sc.utilClass == '' then
return ''
else if m.sc.utilClass == 'u' then
call scanErr sc, 'util in scanUtilValueOne'
if pos(m.sc.utilClass, valTy) > 0 then
return m.sc.val
else
return m.sc.tok
endProcedure scanUtilValueOne
/*--- skip over nested brackets --------------------------------------*/
scanUtilSkipBrackets: procedure expose m.
parse arg m, br, doCat
if br \== '' then
lim = m.m.utilBrackets - br
else if scanLit(m, '(') then do
lim = m.m.utilBrackets
m.m.utilBrackets = lim + 1
end
else
return 0
doCat = doCat == 1
res = ''
do while scanUtil(m) \== ''
if m.m.utilBrackets <= lim then do
if doCat then
m.m.val = res
return 1
end
if doCat then
res = res m.m.tok
end
return scanErr(m, 'eof with' m.m.utilBrackets 'open (')
endProcedure skipBrackets
/*--- analyze a punch file write intoField to stdOut -----------------*/
scanUtilInto: procedure expose m.
parse arg m
if m.m.utilBrackets \== 0 then
call scanErr m, 'scanUtilInto with brackets' m.m.utilBrackets
/*sc = scanUtilReader(m.j.in)
call jOpen sc, 'r'
*/ do forever
cl = scanUtil(m)
if cl == '' then
return 0
if cl = 'n' & m.m.tok == 'INTO' then
leave
end
if scanUtil(m) \== 'n' | m.m.tok \== 'TABLE' then
call scanErr m, 'bad into table '
if \ scanSqlQuId(scanSkip(m)) then
call scanErr m, 'table name expected'
if m.m.utilBrackets \== 0 then
call scanErr m, 'into table in brackets' m.m.utilBrackets
m.m.tb = m.m.val
m.m.part = ''
m.m.when = ''
do forever
cl = scanUtil(m)
if cl == '' then
call scanErr m, 'eof after into'
if cl == 'n' & m.m.tok == 'PART' then do
if scanUtil(m) == 'v' then
m.m.part = m.m.val
else
call scanErr m, 'bad part'
end
else if cl == 'n' & wordPos(m.m.val, 'WHEN WORKDDN') > 0 then do
call scanUtilSkipBrackets m
end
else if cl == '(' then do
leave
end
end
oX = m.m.lineX
oL = overlay('', m.m.src, 1, m.m.pos-2)
do while m.m.utilBrackets > 0
call scanUtil m
if oX \== m.m.lineX then do
call out strip(oL, 't')
oX = m.m.lineX
oL = m.m.src
end
end
call out left(oL, m.m.pos)
/* call jClose sc
*/ return 1
endProcedure scanUtilInto
/* copy scanUtil end **************************************************/
/* copy pipe begin *****************************************************
***********************************************************************/
pipeIni: procedure expose m.
if m.pipe.ini == 1 then
return
m.pipe.ini = 1
call catIni
call mapReset env.vars
m.env.with.0 = 0
call mapReset env.c2w
call mNewArea 'ENV.WICO', '='
m.pipe.0 = 1
m.pipe.1.in = jOpen(oNew('JRWEof'), '<')
m.pipe.1.out = jOpen(oNew('JSay'), '>')
call pipe '+'
return
endProcedure pipeIni
/*-------------------------------
+- push pop frame
PYNFA ouput Parent saY Newcat File, Appendtofile
psf| parent string file oldOut
old --> new
pipeBegin --> pipe '+N'
pipeBeLa f --> pipe '+F'
pipeLast --> pipe 'P|'
pipeLast f --> pipe 'F|', f
pipeEnd --> pipe '-'
--------------------------------*/
pipe: procedure expose m.
parse arg opts, aO, aI
ox = 1; oc = substr(opts, ox, 1)
ax = m.pipe.0
px = ax -1
if oc == '-' then do
if px < 2 then
call err 'pipe pop empty'
call jClose m.pipe.ax.out
call jClose m.pipe.ax.in
ax = px
m.pipe.0 = ax
px = ax-1
ox = ox+1; oc = substr(opts, ox, 1)
end
if oc == '+' then do
px = ax
ax = ax+ 1
m.pipe.0 = ax
m.pipe.ax.in = jOpen(m.pipe.px.in, '<')
m.pipe.ax.out = jOpen(m.pipe.px.out, '>')
ox = ox+1; oc = substr(opts, ox, 1)
end
oOut = m.pipe.ax.out
if pos(oc, 'NYPFA') > 0 then do
call jClose oOut
if oc == 'Y' then
m.pipe.ax.out = jOpen(m.pipe.1.out, '>')
else if oc == 'P' then
m.pipe.ax.out = jOpen(m.pipe.px.out, '>')
else if oc == 'N' then
m.pipe.ax.out = jOpen(Cat(), '>')
else if oc == 'F' then
m.pipe.ax.out = jOpen(o2file(aO), '>')
else if oc == 'A' then
m.pipe.ax.out = jOpen(o2file(aO), '>>')
ox = ox+1; oc = substr(opts, ox, 1)
end
if pos(oc, 's|fp') > 0 then do
call jClose m.pipe.ax.in
if oc == 'p' then
m.pipe.ax.in = jOpen(m.pipe.px.in, '<')
else if oc == '|' then
m.pipe.ax.in = jOpen(oOut, '<')
else if oc == 'f' then do
if arg() <= 3 then
m.pipe.ax.in = jOpen(o2file(aI), '<')
else do
ct = jOpen(Cat(), '>')
do lx = 3 to arg()
call jWriteAll ct, arg(lx)
end
m.pipe.ax.in = jOpen(jclose(ct), '<')
end
end
else if arg() <= 3 then
m.pipe.ax.in = jOpen(jBuf(aI), '<')
else do
bu = jOpen(jBuf(), '>')
do lx = 3 to arg()
call jWrite bu, arg(lx)
end
m.pipe.ax.in = jOpen(jclose(bu), '<')
end
ox = ox+1; oc = substr(opts, ox, 1)
end
if oc \== ' ' then
call err 'implement' substr(opts, ox) 'in pipe' opts
m.j.in = m.pipe.ax.in
m.j.out = m.pipe.ax.out
return
endProcedure pipe
/*--- write all from rdr (rsp in) to out, not lazy ----------------*/
pipeWriteNow: procedure expose m.
parse arg rdr
call jWriteNow m.j.out, if(rdr == '', m.j.in, rdr)
return
endProcedure pipeWriteNow
/*--- write all from rdr (rsp in) to out, possibly lazy -----------*/
pipeWriteAll: procedure expose m.
parse arg rdr
call jWriteAll m.j.out, if(rdr == '', m.j.in, rdr)
return
endProcedure pipeWriteAll
pipePreSuf: procedure expose m.
parse arg le, ri
do while in(v)
call out le || m.v || ri
end
return
endProcedure pipePreSuf
envIsDefined: procedure expose m.
parse arg na
return '' \== mapValAdr(env.vars, na)
endProcedure envIsDefined
envPushWith: procedure expose m.
parse arg obj, cl, fn, elCl
tos = m.env.with.0 + 1
m.env.with.0 = tos
m.env.with.tos.fun = fn
m.env.with.tos.muElCl = ''
if fn == '' then do
call envSetWith obj, cl
return
end
if cl == '' then
cl = objClass(obj)
if fn == 'as1' then do
call envSetWith obj, cl
m.env.with.tos.muElRef = m.cl.valueCl \== '',
& m.cl.valueCl \== m.class.classV
if m.env.with.tos.muElRef then
m.env.with.tos.muElCl = m.cl.valueCl
else
m.env.with.tos.muElCl = cl
return
end
else if fn \== 'asM' then
call err 'bad fun' fn
ff = oClaMet(cl, 'oFlds') /*just be sure it's initialised */
if m.cl.stemCl == '' then
call err 'class' className(cl) 'not stem'
cc = m.cl.stemCl
isRef = m.cc == 'r'
m.env.with.tos.muElRef = isRef
if m.cc \== 'r' then
m.env.with.tos.muElCl = cc
else if elCl \== '' then
m.env.with.tos.muElCl = elCl
else if m.cc.class == '' then
call err 'elCl null for envPushWith('obj ','cl ','multi', ...)'
else
m.env.with.tos.muElCl = m.cc.class
m.env.with.tos.class = ''
m.env.with.tos.muCla = cl
m.env.with.tos.muObj = obj
return
endProcedure envPushWith
envSetWith: procedure expose m.
parse arg obj, cl
if cl == '' & obj \== '' then
cl = objClass(obj)
tos = m.env.with.0
m.env.with.tos = obj
m.env.with.tos.class = cl
return
endProcedure envSetWith
envWithObj: procedure expose m.
tos = m.env.with.0
if tos < 1 then
call err 'no with in envWithObj'
return m.env.with.tos
endProcedure envWithObj
envAccPath: procedure expose m. m cl
parse arg pa, stop, nllNw
nullNew = nllNw == 1
dx = verify(pa, m.class.cPath, 'm')
if dx = 0 then do
n1 = pa
p2 = ''
end
else do
n1 = left(pa, dx-1)
p2 = substr(pa, dx)
end
wCla = ''
do wx = m.env.with.0 by -1 to if(stop==1, m.env.with.0, 1)
wCla = m.env.with.wx.class
if symbol('m.wCla.f2c.n1') == 'VAR' then
return oAccPath(m.env.with.wx, pa, m.env.with.wx.class)
end
if stop == 1 then
return 'no field' n1 'in class' className(wCla)
vv = mapValAdr(env.vars, n1)
if vv \== '' then
if p2 == '' then
return oAccPath(vv, '', m.class.classR)
else
return oAccPath(vv, '|'p2, m.class.classR)
else if nullNew & p2 == '' then
return oAccPath(mapValAdr(env.vars, n1,'a'), p2,m.class.classR)
else
return 'undefined variable' pa
endProcedure envAccPath
envWithNext: procedure expose m.
parse arg beEn, defCl, obj
tos = m.env.with.0
if tos < 1 then
call err 'envWithNext with.0' tos
st = m.env.with.tos.muObj
if beEn == 'b' then do
if m.env.with.tos.fun == 'asM' then
m.st.0 = 0
if m.env.with.tos.muElCl == '' then
m.env.with.tos.muElCl = defCl
end
else if m.env.with.tos.fun == 'asM' then
m.st.0 = m.st.0 + 1
else if m.env.with.tos.fun == '' then
call outO m.env.with.tos
else if beEn = '' then
call err 'no multi allowed'
if beEn == 'e' then
return
if m.env.with.tos.fun == 'as1' then do
if m.env.with.tos == '' then
call err 'implement withNext null'
return
end
/* if obj \== '' then do
if \ m.env.with.tos.muElRef then
call err 'obj but not ref'
m.nn = obj
call envSetWith obj
end
*/
if m.env.with.tos.fun == '' then do
call envSetWith oNew(m.env.with.tos.muElCl)
return
end
nn = st'.' || (m.st.0 + 1)
if m.env.with.tos.muElRef then do
m.nn = oNew(m.env.with.tos.muElCl)
call envSetWith m.nn
end
else do
call oClear oMutate(nn, m.env.with.tos.muElCl)
call envSetWith nn
end
return
endProcedure envWithNext
envPushName: procedure expose m.
parse arg nm, multi, elCl
res = envAccPath(nm, , 1)
if res \== 1 then
return err(res 'in envPushName('nm',' multi')')
do while m.cl == 'r'
if m.m == '' then do
res = oRefSetNew(m, cl)
if res \== 1 then
call err res 'in envPushName('nm',' multi')'
end
m = m.m
cl = objClass(m)
end
call envPushWith m, cl, multi, elCl
return
endProcedure envPushName
envNewWiCo: procedure expose m.
parse arg co, cl
k1 = strip(co cl)
n = mapGet('ENV.C2W', k1, '')
if n \== '' then
return n
k2 = k1
if co \== '' then do
k2 = strip(m.co.classes cl)
n = mapGet('ENV.C2W', k2, '')
end
k3 = k2
if n == '' then do
cx = wordPos(cl, m.co.classes)
if cx > 0 then do
k3 = space(subWord(m.co.classes, 1, cx-1),
subWord(m.co.classes, cx+1) cl, 1)
n = mapGet('ENV.C2W', k3, '')
end
end
if n == '' then
n = envNewWico2(co, k3)
call mapAdd 'ENV.C2W', k1, n
if k2 \== k1 then
call mapPut 'ENV.C2W', k2, n
if k3 \== k2 & k3 \== k1 then
call mapPut 'ENV.C2W', k3, n
return n
endProcedure envNewWiCo
envNewWiCo2: procedure expose m.
parse arg co, clLi
n = mNew('ENV.WICO')
if co == '' then
m.n.level = 1
else
m.n.level = m.co.level + 1
m.n.classes = clLi
na = ''
do cx = 1 to words(clLi)
c1 = word(clLi, cx)
na = na className(c1)
do qx=1 to 2
ff = c1 || word('.FLDS .STMS', qx)
do fx = 1 to m.ff.0
fn = m.ff.fx
if fn == '' then
iterate
fn = substr(fn, 2)
m.n.f2c.fn = cx
end
end
end
m.n.classNames = space(na, 1)
return n
endProcedure envNewWiCo2
envPopWith:procedure expose m.
tos = m.env.with.0
m.env.with.0 = tos - 1
return
endProcedure envPopWith
envGet: procedure expose m.
parse arg na
res = envAccPath(na)
if res == 1 then
res = oAccStr(m, cl)
if res == 1 then
return str
return err(res 'in envGet('na')')
endProcedure envGet
envGetO: procedure expose m.
parse arg na, opt
res = envAccPath(na, , opt == '-b')
if res == 1 then
res = oAccO(m, cl, opt)
if res == 1 then
return ref
return err(res 'in envGetO('na')')
endProcedure envGetO
envPutO: procedure expose m.
parse arg na, ref, stop
res = envAccPath(na, stop, 1)
if res == 1 then
res = ocPutO(m, cl, ref)
if res = 1 then
return ref
return err(res 'in envPutO('na',' ref',' stop')')
endProcedure envPutO
envPut: procedure expose m.
parse arg na, va, stop
res = envAccPath(na, stop , 1)
if res == 1 then
res = ocPut(m, cl, va)
if res == 1 then
return va
return err(res 'in EnvPut('na',' va',' stop')')
endProcedure envPut
envRead: procedure expose m.
parse arg na
return in("ENV.VARS."na)
envReadO: procedure expose m.
parse arg na
res = inO()
if res == '' then
return 0
call envPutO na, res
return 1
endProcedure envReadO
envHasKey: procedure expose m.
parse arg na
return mapHasKey(env.vars, na)
envRemove: procedure expose m.
parse arg na
return mapRemove(env.vars, na)
/* copy pipe end ******************************************************/
/* copy cat begin ****************************************************
***********************************************************************/
/*--- create a new cat -----------------------------------------------*/
cat: procedure expose m.
m = oNew('Cat') /* calls catReset */
do ax=1 to arg()
call catWriteAll m, arg(ax)
end
return m
endProcedure cat
catReset: procedure expose m.
parse arg m
m.m.RWs.0 = 0
m.m.catWr = ''
m.m.catRd = ''
m.m.catIx = -9e9
m.m.catKeepOpen = ''
return m
endProcedure catReset
catClose: procedure expose m.
parse arg m
if m.m.catWr \== '' then do
call jClose m.m.catWr
call mAdd m'.RWS', m.m.catWr
m.m.catWr = ''
end
if m.m.catRd \== '' then do
call jClose m.m.catRd
m.m.catRd = ''
end
m.m.catIx = -9e9
return m
endProcedure catClose
catOpen: procedure expose m.
parse arg m, oo
if oo == m.j.cRead then do
m.m.catIx = 0
call catNextRdr m
m.m.jReading = 1
end
else if oo == m.j.cWri | oo == m.j.cApp then do
if oo == m.j.cWri then
m.m.RWs.0 = 0
m.m.catIx = -9e9
m.m.jWriting = 1
end
else do
call err 'catOpen('m',' oo') bad opt'
end
return m
endProcedure catOpen
/*--- return and open next reader ------------------------------------*/
catNextRdr: procedure expose m.
parse arg m
if m.m.catRd \== '' then
call jClose m.m.catRd
cx = m.m.catIx + 1
m.m.catIx = cx
if cx > m.m.RWs.0 then do
m.m.catRd = ''
return 0
end
m.m.catRd = m.m.RWs.cx
if cx = word(m.m.catKeepOpen, 1) then
m.m.catKeepOpen = subWord(m.catKeepOpen, 2)
else
call jOpen m.m.catRd , m.j.cRead
return 1
endProcedure catNextRdr
catReadO: procedure expose m.
parse arg m
do while m.m.catRd \== ''
res = jReadO(m.m.catRd)
if res \== '' then
return res
call catNextRdr m
end
return ''
endProcedure catReadO
catWrite: procedure expose m.
parse arg m, line
if m.m.catWr == '' then
m.m.catWr = jOpen(jBuf(), m.j.cWri)
call jWrite m.m.catWr, line
return
endProcedure catWrite
catWriteO: procedure expose m.
parse arg m, var
if m.m.catWr == '' then
m.m.catWr = jOpen(jBuf(), m.j.cWri)
call jWriteO m.m.catWr, var
return
endProcedure catWriteO
/*--- write contents of a reader to cat
or keep it for later reading -------------------------------*/
catWriteAll: procedure expose m.
parse arg m
if m.m.catWr \== '' then do
call mAdd m'.RWS', jClose(m.m.catWr)
m.m.catWr = ''
end
do ax=2 by 1 to arg()
r = o2File(arg(ax))
call mAdd m'.RWS', r
if m.r.jReading then do
m.m.catKeepOpen = m.m.rws.0 m.m.catKeepOpen
call jOpen r, m.j.cRead
end
end
return
endProcedure catWriteAll
/*--- create a reader/WriteO for an external file --------------------*/
file: procedure expose m.
parse arg str
return oNew('File', str)
endProcedure file
fileChild: procedure expose m.
parse arg m, name, opt
interpret objMet(m, 'fileChild')
endProcedure fileChild
fileRm: procedure expose m.
parse arg m
interpret objMet(m, 'fileRm')
return
endProcedure fileRm
filePath: procedure expose m.
parse arg m
interpret objMet(m, 'filePath')
endProcedure filePath
fileIsFile: procedure expose m.
parse arg m
interpret objMet(m, 'fileIsFile')
endProcedure fileIsFile
fileIsDir: procedure expose m.
parse arg m
interpret objMet(m, 'fileIsDir')
endProcedure fileIsDir
fileMkDir: procedure expose m.
parse arg m, opt
interpret objMet(m, 'fileMkDir')
return
endProcedure fileRm
fileRmDir: procedure expose m.
parse arg m, opt
interpret objMet(m, 'fileRmDir')
return
endProcedure fileRm
/*--- create a reader/WriteO for the filelist of a directory----------*/
fileList: procedure expose m.
parse arg m, opt
str = oIfStr(m, '')
if str == '' then
return oNew('FileList', filePath(m), opt)
else
return oNew('FileList', dsn2Jcl(str), opt)
endProcedure fileList
fileSingle: procedure expose m.
parse arg m
call jOpen m, '<'
res = jReadO(m)
two = jReadO(m)
call jClose m
if res == '' then
if arg() < 2 then
call err 'empty file in fileSingle('m')'
else
res = arg(2)
if two \== '' then
call err '2 or more recs in fileSingle('m')'
return res
endProcedure fileSingle
catIni: procedure expose m.
if m.cat.ini == 1 then
return
m.cat.ini = 1
call jIni
call classNew "n Cat u JRWO", "m",
, "jOpen call catOpen m, opt",
, "jReset call catReset m, arg",
, "jClose call catClose m",
, "jReadO return catReadO(m)",
, "jWrite call catWrite m, line; return",
, "jWriteO call catWriteO m, var; return",
, "jWriteAll call catWriteAll m, rdr; return"
call classAddMet m.class.classV, 'o2File return file(m.m)'
call classAddMet m.class.classW, 'o2File return file(substr(m,2))'
if m.err.os == 'TSO' then
call fileTsoIni
else if m.err.os == 'LINUX' then
call fileLinuxIni
else
call err 'file not implemented for os' m.err.os
return
endProcedure catIni
/* copy cat end ****************************************************/
/* copy fiLinux begin *************************************************/
/*--- send ggShCmd to shell bash,
fail if rc <> 0 or not listed in ggRet -----------------------*/
adrSh: procedure expose m. /* really no need for variables???? */
parse arg ggShCmd, ggRet
address 'bash' ggShCmd
if rc == 0 then return 0
else if ggRet == '*' then return rc
else if wordPos(rc, ggRet) > 0 then return rc
else
call err 'adrSh rc' rc 'for' ggShCmd
endProcedure adrSh
fileLinuxReset: procedure expose m.
parse arg m, nm
m.m.spec = nm
if abbrev(nm, '&') then do
if nm == '&in' then do
m.m.stream = .input
m.m.jReading = 1
end
else if nm == '&out' then do
m.m.stream = .output
m.m.jWriting = 1
end
else do
call err 'bad spec' nm
end
end
else do
m.m.stream = .Stream%%new(nm)
m.m.stream%%init(m.m.stream%%qualify)
end
return m
endProcedure fileLinuxReset
fileLinuxOpen: procedure expose m.
parse arg m, opt
if opt == m.j.cRead then do
res = m.m.stream%%open(read shareread)
m.m.jReading = 1
end
else do
if opt == m.j.cApp then
res = m.m.stream%%open(write append)
else if opt == m.j.cWri then
res = m.m.stream%%open(write replace)
else
call err 'fileLinuxOpen('m',' opt') with bad opt'
m.m.jWriting = 1
end
if res \== 'READY:' then
call err 'fileLinuxOpen fails' res':' opt ,
"'"m.m.stream%%qualify"'"
return m
endProcedure fileLinuxOpen
fileLinuxClose:
parse arg m
res = m.m.stream%%close
if res \== 'READY:' then
call err 'fileLinuxClose' res':' m.m.stream%%qualify
return m
endProcedure fileLinuxClose
fileLinuxRead: procedure expose m.
parse arg m, var
res = m.m.stream%%lineIn
if res == '' then
if m.m.stream%%state \== 'READY' then
return 0
m.var = res
m.o.o2c.var = m.class.classV
return 1
endProcedure fileLinuxRead
fileLinuxWrite: procedure expose m.
parse arg m, line
if m.m.stream%%lineOut(line) then
call err 'fileLinuxWrite'
return
endProcedure fileLinuxWrite
fileLinuxRmDir: procedure expose m.
parse arg m, opt
if opt == '' then
return adrSh('rmdir' m.m.spec)
else if opt == '-r' then
return adrSh('rm -r' m.m.spec)
else
call err 'bad opt' opt 'in fileLinuxRmDir'
endProcedure fileLInuxRmDir
fileLinuxListReset: procedure expose m.
parse arg m, m.m.spec, o
if o == 'r' then
m.m.opt = 'S'
else if o == '' then
m.m.opt = ''
else
call err 'bad opt' o 'in fileLinuxListReset'
m.m.rx = 'closed'
return m
endProcedure fileLinuxListReset
fileLinuxListOpen: procedure expose m.
parse arg m
if m \== translate(m) then
call err 'bad m for fileLinuxList:' m
if m.m.opt == '' then
rc = sysFileTree(m.m.spec'/*', 'm.'m'.LIST')
else
rc = sysFileTree(m.m.spec'/*', 'm.'m'.LIST', m.m.opt)
if rc \== 0 then
call err 'rc' rc 'in sysFileTree('m.m.spec', m.'m'.LIST)'
m.m.rx = 0
m.m.jReading = 1
return m
endProcedure fileLinuxListOpen
fileLinuxListRead: procedure expose m.
parse arg m, var
x = m.m.rx + 1
if x > m.m.list.0 then
return 0
m.var = substr(m.m.list.x, 43)
m.m.rx = x
call oMutate var, m.class.classV
return 1
endProcedure fileLinuxListRead
fileLinuxIni: procedure expose m.
if m.fileLinux.ini == 1 then
return
m.fileLinux.ini = 1
m.file.sep = '/'
call jIni
call classNew "n File u JRW", "m",
, "jReset call fileLinuxReset m, arg",
, "jOpen call fileLinuxOpen m, opt",
, "jClose call fileLinuxClose m",
, "jRead return fileLinuxRead(m, var)",
, "jWrite call fileLinuxWrite m, line",
, "jWriteO call jWrite m, o2String(var)",
, "filePath return m.m.stream%%qualify",
, "fileIsFile return sysIsFile(m.m.stream%%qualify)" ,
, "fileIsDir return sysIsFileDirectory(m.m.stream%%qualify)" ,
, "fileChild return file(m.m.stream%%qualify'/'name)",
, "fileRm return adrSh(m.m.spec)",
, "fileMkDir return adrSh('mkdir' m.m.stream%%qualify)" ,
, "fileRmDir return fileLinuxRmDir(m, opt)"
call classNew "n FileList u JRW", "m",
, "jReset call fileLinuxListReset m, arg, arg2",
, "jOpen call fileLinuxListOpen m, opt",
, "jClose m.m.rx = 'closed'",
, "jRead return fileLinuxListRead(m, var)"
return
endProcedure fileLinuxIni
/* copy fiLinux end *************************************************/
/* copy fileTso begin *************************************************/
fileTsoReset: procedure expose m.
parse arg m, sp
m.m.readIx = 'c'
if symbol('m.m.defDD') \== 'VAR' then do
m.m.defDD = 'CAT*'
m.fileTso.buf = m.fileTso.buf + 1
m.m.buf = 'FILETSO.BUF'm.fileTso.buf
m.m.spec = sp
end
if sp \== '' then do
m.m.spec = dsnSpec(sp)
rr = translate(subword(m.m.spec, 4))
m.m.stripT = \ (pos(':V', rr) > 0 | pos('RECFM(V', rr) > 0)
end
return m
endProcedure fileTsoReset
fileTsoOpen: procedure expose m.
parse arg m, opt
buf = m.m.buf
if opt == m.j.cRead then do
aa = dsnAlloc(m.m.spec, 'SHR', m.m.defDD)
if m.dsnAlloc.dsn <> '' then
if sysDsn("'"m.dsnAlloc.dsn"'") <> 'OK' then
call err 'cannot read' m.dsnAlloc.dsn':',
sysDsn("'"m.dsnAlloc.dsn"'")
call readDDBegin word(aa, 1)
m.m.jReading = 1
m.buf.0 = -1
m.m.readIx = 0
end
else do
if opt == m.j.cApp then
aa = dsnAlloc(m.m.spec, 'MOD', m.m.defDD)
else if opt == m.j.cWri then
aa = dsnAlloc(m.m.spec, 'OLD', m.m.defDD)
else
call err 'fileTsoOpen('m',' opt') with bad opt'
call writeDDbegin word(aa, 1)
m.m.jWriting = 1
m.buf.0 = 0
m.m.readIx = 'w'
end
m.m.dd = word(aa, 1)
m.m.free = subword(aa, 2)
m.m.dsn = m.dsnAlloc.dsn
return m
endProcedure fileTsoOpen
fileTsoClose: procedure expose m.
parse arg m
buf = m.m.buf
if m.m.readIx \== 'c' then do
if m.m.readIx == 'w' then do
if m.buf.0 > 0 then
call writeDD m.m.dd, 'M.'BUF'.'
call writeDDend m.m.dd
end
else do
call readDDend m.m.dd
end
interpret m.m.free
end
m.buf.0 = 'closed'
m.m.readIx = 'c'
m.m.free = ''
m.m.dd = ''
return m
endProcedure fileTsoClose
fileTsoRead: procedure expose m.
parse arg m, var
ix = m.m.readIx + 1
buf = m.m.buf
if ix > m.buf.0 then do
res = readDD(m.m.dd, 'M.'buf'.')
if \ res then
return 0
ix = 1
end
m.m.readIx = ix
m.var = m.buf.ix
call oMutate var, m.class.classV
return 1
endProcedure fileTsoRead
fileTsoWrite: procedure expose m.
parse arg m, var
buf = m.m.buf
ix = m.buf.0 + 1
m.buf.0 = ix
if m.m.stripT then
m.buf.ix = strip(var, 't')
else
m.buf.ix = var
if ix > 99 then do
call writeDD m.m.dd, 'M.'buf'.'
m.buf.0 = 0
end
return
endProcedure fileTsoWrite
fileTsoWriteO: procedure expose m.
parse arg m, var
if objClass(var, m.class.classV) == m.class.classV then do
call fileTsoWrite m, m.var
return
end
call err 'fileTsoWriteO('m',' var') cannot write objects of class',
objClass(var)
endProcedure fileTsoWriteO
fSub: procedure expose m.
return file('.sysout(T) writer(intRdr)')
endProcedure fSub
fEdit: procedure expose m.
parse arg spec, vw
if spec == '' then
spec = 'new ::f'
else if abbrev(spec, '::') then
spec = 'new' spec
else if abbrev(spec, ':') then
spec = 'new' ':'spec
f = oNew('FileEdit', spec)
m.f.editType = if(abbrev(translate(vw), 'V'), 'view', 'edit')
return f
endProcedure fEdit
fileTsoEditClose: procedure expose m.
parse arg m
dsn = m.m.dsn
if dsn \== '' then do
call fileTsoClose m
call adrIsp m.m.editType "dataset('"dsn"')", 4
return
end
fr = m.m.free
dd = m.m.dd
m.m.free = ''
call fileTsoClose m
call adrIsp "LMINIT DATAID(lmmId) ddName("dd") ENQ(SHRW)"
eRc = adrIsp(m.m.editType "dataid("lmmId")", '*')
lRc = adrIsp("LMFree DATAID("lmmId")", '*')
interpret fr
if (eRc \== 0 & eRc \== 4) | lRc \== 0 then
call err m.m.editType 'rc' eRc', lmFree rc' lRc
return
endProcedure fileTsoEditClose
fileTsoIni: procedure expose m.
if m.fileTso.ini == 1 then
return
m.fileTso.ini = 1
m.file.sep = '.'
m.fileTso.buf = 0
call jIni
um = "call err 'for tso undefined method'"
call classNew "n File u JRW", "m",
, "jOpen call fileTsoOpen m, opt",
, "jReset call fileTsoReset m, arg",
, "jClose call fileTsoClose m",
, "jRead return fileTsoRead(m, var)",
, "jWrite call fileTsoWrite m, line",
, "jWriteO call fileTsoWriteO m, var",
, "filePath return word(m.m.spec, 1)" ,
, "fileIsFile" um "'fileIsFile'" ,
, "fileIsDir return 1" ,
, "fileChild return file(word(m.m.spec, 1)'.'name opt)",
, "fileRm" um "'fileRm'" ,
, "fileMkDir" ,
, "fileRmDir" um "'fileRmDir'"
/* , "filePath return m.m.stream%%qualify",
, "fileIsFile return sysIsFile(m.m.stream%%qualify)" ,
, "fileIsDir return sysIsFileDirectory(m.m.stream%%qualify)" ,
, "fileChild return file(m.m.stream%%qualify'/'name)",
, "fileRm return adrSh(m.m.spec)",
, "fileMkDir return adrSh('mkdir' m.m.stream%%qualify)" ,
, "fileRmDir return fileLinuxRmDir(m, opt)" */
call classNew "n FileList u JRW", "m",
, "jReset if arg2 == 'r' then m.m.dsnMask=arg'.**';",
"else m.m.dsnMask=arg'.*';",
, "jOpen call csiOpen m, m.m.dsnMask",
, "jClose" ,
, "jRead return csiNext(m, var)"
call classNew "n FileEdit u File", "m",
, "jClose call fileTsoEditClose m"
return
endProcedure fileTsoIni
/* copy fileTso end *************************************************/
/* copy sqlDiv begin **************************************************/
/*--- generate the format m for a sql cx as specified in sp
use the information from the sqlDa -------------------------*/
sqlFTabReset: procedure expose m.
parse arg ff, cx, tBef, tAft, m.ff.maxChar, m.ff.blobMax, m.ff.maxDec
if m.ff.maxChar == '' then
m.ff.maxChar == 32
if m.ff.blobMax == '' then
m.ff.blobMax = 200
bf = '%-'max(m.ff.blobMax, 4)'C'
m.ff.flds = ''
m.ff.sqlX = cx
call fTabReset ff, tBef, tAft
m.ff.sql2fmt.384 = '%-10C' /* date */
m.ff.sql2fmt.388 = '%-8C' /* time */
m.ff.sql2fmt.392 = '%-26C' /* timestamp */
m.ff.sql2fmt.400 = 'c' /* graphic string */
m.ff.sql2fmt.404 = bf /* BLOB */
m.ff.sql2fmt.408 = bf /* CLOB */
m.ff.sql2fmt.412 = bf /* DBCLOB */
m.ff.sql2fmt.448 = 'c' /* varchar */
m.ff.sql2fmt.452 = 'c' /* char */
m.ff.sql2fmt.452 = 'c' /* long varchar */
m.ff.sql2fmt.460 = 'c' /* null term. string */
m.ff.sql2fmt.464 = 'c' /* graphic varchar */
m.ff.sql2fmt.468 = 'c' /* graphic char */
m.ff.sql2fmt.472 = 'c' /* long graphic varchar */
m.ff.sql2fmt.480 = '%7e' /* float */
m.ff.sql2fmt.484 = 'd' /* packed decimal */
m.ff.sql2fmt.492 = '%20i' /* bigInt */
m.ff.sql2fmt.496 = '%11i' /* int */
m.ff.sql2fmt.500 = '%6i' /* smallInt */
m.ff.sql2fmt.904 = '%-34H' /* rowID 17 Byte Binary */
return
endProcedure sqlFTabReset
/*--- set a defaultFormat for type tx in fTab ff ---------------------*/
sqlFTabDef: procedure expose m.
parse arg ff, tx, m.ff.sql2fmt.tx
return ff
sqlFTabAdd: procedure expose m.
parse arg m, c1 aDone, f1, l1
if symbol('m.m.set.c1') == 'VAR' then do
sx = m.m.set.c1
if word(m.m.set.sx, 1) == c1 & sx <= m.m.set.0 then do
parse var m.m.set.sx c1 aDone
f1 = m.m.set.sx.fmt
l1 = m.m.set.sx.label
end
end
cx = m.m.sqlX
kx = sqlCol2kx(cx, c1)
if kx == '' then
call err 'colName not found' c1
do tx=2 to arg()-3
if arg(tx+3) \== '' then
call fTabAddTit m, tx, arg(tx+3)
end
if f1 \== '' then do
if right(f1, 1) \== ' ' then
f1 = f1' '
return fTabAdd(m, c1 aDone, f1, l1)
end
ty = m.sql.cx.d.kx.sqlType
le = m.sql.cx.d.kx.sqlLen
withNulls = ty // 2
ty = ty - withNulls
if symbol('m.m.sql2fmt.ty') <> 'VAR' then
call err 'sqlType' ty 'col' c1 'not supported'
f2 = m.m.sql2fmt.ty
if f2 == 'c' then
f2 = '%-'min(le, m.m.maxChar)'C'
else if f2 == 'd' then do
trace ?r
pr = le % 256
de = le // 256
f2 = '%'pr'.'de'i'
end
if \ abbrev(f2, '%') then
call err 'sqlType' ty 'col' c1 'bad format' f2
return fTabAdd(m, c1 aDone, f2' ', l1)
endProcedure sqlFTabAdd
sqlFTabOthers: procedure expose m.
parse arg m, doNot
cx = m.m.sqlX
call sqlRxFetchVars cx
do kx=1 to m.sql.cx.d.sqlD
c1 = m.sql.cx.col.kx
wx = wordPos(c1, m.m.cols)
if (wx < 1 | m.m.wx.done \== 1) & wordPos(c1, doNot) < 1 then
call sqlFTabAdd m, m.sql.cx.col.kx
end
return
endProcedure sqlFTabOthers
sqlFTab: procedure expose m.
parse arg m
call fTabBegin m
do while sqlRxFetch(m.m.sqlX, 'sqlFTab')
call out f(m.m.fmt, 'sqlFTab')
end
return fTabEnd(m)
endProcedure sqlFTab
sqlFTabCol: procedure expose m.
parse arg m
do rx=1 while sqlRxFetch(m.m.sqlX, 'sqlFTab')
call out left('--- row' rx '', 100, '-')
call fTabCol m, 'sqlFTab'
end
call out left('--- end of' (rx-1) 'rows ', 100, '-')
return
endProcedure sqlFTabCol
/*--- generate the format ff for a sql cx as specified in sp
use the information from the sqlDa -------------------------*/
deleteSqlGenFmt: procedure expose m.
parse arg ff, cx, sp
if abbrev(sp, '=') then
return substr(sp, 2)
if sp = '' then
sp = '*st'
m.ff.0 = m.sql.cx.d.sqlD
m.ff.flds = oFlds(sqlType(cx))
if abbrev(sp, '*') then do
do ix=1 to m.ff.0
m.ff.ix = substr(sp, 2)
end
return ff
end
if abbrev(fmts, '=') then
m.Sql.cx.FMT = substr(fmts, 2)
defs = 'ir7 fr9 sl12 Tl26' sp
do wx = 1 to words(defs)
parse value word(defs, wx) with ty 2 fo
select
when ty = 'd' then t.384 = fo
when ty = 'f' then t.480 = fo'/f'
when ty = 'i' then t.496 = fo'/i'
when ty = 'n' then t.484 = fo'/n'
when ty = 's' then t.448 = fo
when ty = 't' then t.388 = fo
when ty = 'T' then t.392 = fo
otherwise call err 'bad type' ty 'for format' fo
end
end
if symbol('t.496') == 'VAR' then
t.500 = t.496
if symbol('t.448') == 'VAR' then do
t.452 = t.448
t.456 = t.448
t.464 = t.448
end
do wx = 1 to m.ff.0
ty = m.sql.cx.d.wx.sqlType
le = m.sql.cx.d.wx.sqlLen
withNulls = ty // 2
ty = ty - withNulls
if symbol('t.ty') <> 'VAR' then
call err 'sqlType' ty 'not supported'
parse var t.ty fo 2 fl '/' op
if op = 'i' then
if le = 2 then le = 6
else le = 12
else if op <> '' then
call err 'length for sqlType' ty 'op' op 'not implemented'
if fl = '=' then
fl = le
else if abbrev(fl, '<') then
fl = min(le, substr(fl, 2))
m.ff.wx = fo || fl
end
return ff
endProcedure sqlGenFmt
tstCatTb:
/*
$=/tstCatTb/
### start tst tstCatTb ############################################
..
select * from sysibm.SYSDUMMY1 .
IBMREQD
I .
Y .
I .
IBMREQD
$/tstCatTb/
*/
call sqlConnect
call tst t, 'tstCatTb'
call sqlCatTb 'sysDummy1'
call sqlCatTb 'SYSTableSpaceStats',
, "name = 'A403A1' and dbName = 'DA540769'"
call tstEnd t
return
endProcedure tstCatTb
sqlCatTb: procedure expose m.
parse arg ty gOnly, wh, ord, fTab, paPlus
tb = tkrTable(, ty)
if gOnly == 1 then
edFun = ''
else
edFun = tkrTable(, ty, 'e')
cx = 1
ft = 'ft'm.tb.alias
call sqlFTabReset ft, cx, 'c 1', '1 c', 12, if(fTab, , 2000)
call sqlFTabDef ft, 492, '%7e'
call FTabSet ft, 'CONTOKEN' , '%-16H'
call FTabSet ft, 'DBNAME' , '%-8C', 'db'
call FTabSet ft, 'DSNAME' , '%-44C'
call FTabSet ft, 'DSNUM' , '%5i'
call FTabSet ft, 'PARTITION' ,'%5i' , 'part'
call FTabSet ft, 'PIT_RBA' , '%-12H'
call FTabSet ft, 'RBA1' , '%-12H'
call FTabSet ft, 'RBA2' , '%-12H'
call FTabSet ft, 'START_RBA' ,'%-12H'
call FTabSet ft, 'TSNAME' , '%-8C', 'ts'
call FTabSet ft, 'VERSION' , '%-28C'
if edFun \== '' then do
interpret 'sq =' edFun'(ft, tb, wh, ord)'
end
else do
cl = sqlColList(m.tb.table, m.ft.blobMax)
sq = 'select' cl tkrTable( , tb, 'f') wh ,
'order by' if(ord=='', m.tb.order, ord)
call sqlPreOpen cx, sq
call sqlFTabOthers ft
end
if fTab then
call sqlFTab ft
else
call sqlFTabCol ft
call sqlRxClose cx
call sqlCatTbTrailer space(m.TKR.path paPlus, 1), sq
return 0
endProcedure sqlCatTb
sqlCatTbTrailer: procedure expose m.
parse arg pa, sq
ox = lastPos(' order by ', sq)
if ox < 1 then
call err 'order by not found in' sq
ord = substr(sq, ox+10)
sq = left(sq, ox-1)
sqUp = translate(sq)
call out ''
call out 'dbSys:' m.sql.conDbSys
call out 'path:' pa
int = ''
iNx = ' '
br = ''
cx = 1
stops = '(select from where'
do while cx < length(sq)
nx = -1
do sx=1 to words(stops)
n2 = pos(word(stops, sx), sq, cx+1)
if n2 > cx & (nx < 1 | n2 < nx) then
nx = n2
end
if nx < 0 then
leave
call out int || substr(sq, cx, nx-cx)
int = iNx
if substr(sq, nx, 3) = '(se' then do
iNx = iNx' '
br = left(br, length(int))')'
end
cx = nx
end
ll = strip(substr(sq, cx))
bq = strip(br)
do while bq <> ''
if right(bq, 1) \== ')' | right(ll, 1) \== ')' then
call err 'missing ) bq:' bq', ll:' ll
ll = strip(left(ll, length(ll) - 1))
bq = strip(left(bq, length(bq) - 1))
end
call out int || ll
if br <> '' then
call out br
if ord <> '' then
call out ' order by' ord
return
endProcedure sqlCatTbTrailer
sqlCatIxKeys: procedure expose m.
parse arg ft, tb, wh, ord
sq = 'select ikK.colSeq, ikK.colName, ikK.ordering, ikK.period' ,
', ik.creator, ik.name, ik.tbCreator, ik.tbName, ikC.*' ,
tkrTable(, tb ,'f') wh,
'order by' if(ord == '', m.tb.order, ord)
call sqlPreOpen m.ft.sqlX, sq
call sqlFTabAdd ft, CREATOR, '%-8C', 'creator'
call sqlFTabAdd ft, NAME , '%-16C','index'
call sqlFTabAdd ft, colSeq , '%5i', 'coSeq'
call sqlFTabAdd ft, colName, '%-16C', 'column'
call sqlFTabAdd ft, ordering
call sqlFTabAdd ft, period
call sqlFTabAdd ft, COLNO
call sqlFTabAdd ft, COLTYPE
call sqlFTabAdd ft, LENGTH
call sqlFTabAdd ft, SCALE
call sqlFTabAdd ft, NULLS
call sqlFTabOthers ft, 'COL9 COL10 COL11 COL47'
return sq
endProcedure sqlCatIxKeys
sqlCatIXStats: procedure expose m.
parse arg ft, tb, wh, ord
sq = 'select *' tkrTable( , tb, 'f') wh ,
'order by' if(ord == '', m.tb.order, ord)
call sqlPreOpen m.ft.sqlX, sq
call sqlFTabAdd ft, CREATOR, '%-8C', 'creator'
call sqlFTabAdd ft, NAME , , 'index'
call sqlFTabAdd ft, INSTANCE , '%1i' , 'i'
call sqlFTabAdd ft, PARTITION , , 'part'
call sqlFTabOthers ft
return sq
endProcedure sqlCatIXStats
sqlCatTables: procedure expose m.
parse arg ft, tb, wh, ord
al = m.tb.alias
sq = 'select' al'.*, tsX.type tsType, tsX.partitions',
', tsX.pgSize, tsX.dsSize' ,
', timestamp(rba1 || x''0000'') rba1Tst' ,
', timestamp(rba2 || x''0000'') rba2Tst' ,
'from' m.tb.table 'left join sysibm.sysTablespace tsX',
'on' al'.dbName = tsx.dbName and' al'.tsName = tsX.name',
'where' m.tb.cond wh ,
'order by' if(ord == '', m.tb.order, ord)
call sqlPreOpen m.ft.sqlX, sq
call sqlFTabAdd ft, creator , '%-8C', 'creator'
call sqlFTabAdd ft, NAME , '%-16C', 'table'
call sqlFTabAdd ft, type
call sqlFTabAdd ft, dbNAME , '%-8C', 'db'
call sqlFTabAdd ft, tsNAME , '%-8C', 'ts'
call sqlFTabAdd ft, tsType
call sqlFTabAdd ft, partitions, , 'parts'
call sqlFTabAdd ft, pgSize
call sqlFTabAdd ft, dsSize
call sqlFTabOthers ft, 'RBA1 RBA1TST RBA2 RBA2TST'
call sqlFTabAdd ft, rba1 , '%-12H'
call sqlFTabAdd ft, rba1Tst , , 'rba1Timestamp:GMT'
call sqlFTabAdd ft, rba2 , '%-12H'
call sqlFTabAdd ft, rba2Tst , , 'rba2Timestamp:GMT'
return sq
endProcedure sqlCatTables
sqlCatTSStats: procedure expose m.
parse arg ft, tb, wh, ord
sq = 'select' m.tb.alias'.*' ,
tkrTable( , tb, 'f') wh ,
'order by' if(ord == '', m.tb.order , ord)
call sqlPreOpen m.ft.sqlX, sq
call sqlFTabAdd ft, DBNAME, '%-8C', 'db'
call sqlFTabAdd ft, NAME , '%-8C', 'ts'
call sqlFTabAdd ft, INSTANCE , '%1i' , 'i'
call sqlFTabAdd ft, PARTITION , , 'part'
call sqlFTabAdd ft, NACTIVE , , 'nActive'
call sqlFTabAdd ft, NPAGES , , 'nPages'
call sqlFTabAdd ft, SPACE , , 'spaceKB'
call sqlFTabAdd ft, TOTALROWS , , 'totRows'
call sqlFTabAdd ft, DATASIZE , , 'dataSz'
call sqlFTabAdd ft, LOADRLASTTIME , , 'loadRLasttime'
call sqlFTabAdd ft, REORGLASTTIME , , 'reorgLasttime'
call sqlFTabAdd ft, REORGINSERTS , , 'inserts'
call sqlFTabAdd ft, REORGDELETES , , 'deletes'
call sqlFTabAdd ft, REORGUPDATES , , 'updates'
call sqlFTabAdd ft, REORGUNCLUSTINS , , 'unClIns'
call sqlFTabAdd ft, REORGDISORGLOB , , 'disorgL'
call sqlFTabAdd ft, REORGMASSDELETE , , 'massDel'
call sqlFTabAdd ft, REORGNEARINDREF , , 'nearInd'
call sqlFTabAdd ft, REORGFARINDREF , , 'farInd'
call sqlFTabAdd ft, REORGCLUSTERSENS , , 'cluSens'
call sqlFTabAdd ft, REORGSCANACCESS , , 'scanAcc'
call sqlFTabAdd ft, REORGHASHACCESS , , 'hashAcc'
call sqlFTabAdd ft, STATSLASTTIME , , 'statsLasttime'
call sqlFTabAdd ft, STATSINSERTS , , 'inserts'
call sqlFTabAdd ft, STATSDELETES , , 'deletes'
call sqlFTabAdd ft, STATSUPDATES , , 'updates'
call sqlFTabAdd ft, STATSMASSDELETE , , 'massDel'
call sqlFTabAdd ft, COPYLASTTIME , , 'copyLasttime'
call sqlFTabAdd ft, COPYUPDATETIME , , 'copyUpdatetime'
call sqlFTabAdd ft, COPYUPDATELRSN , '%-12H', 'updateLRSN'
call sqlFTabAdd ft, COPYUPDATEDPAGES , , 'updaPgs'
call sqlFTabAdd ft, COPYCHANGES , , 'changes'
call sqlFTabOthers ft
return sq
endProcedure sqlCatTSStats
sql4obj: procedure expose m.
parse arg m, tb
call out 'insert into' tb '--' className(objClass(m))
line = ''
ff = oFlds(m)
pr = ' ('
do fx=1 to m.ff.0
call sql4ObjOut substr(m.ff.fx, 2)
end
call sql4ObjOut , 1
call out ' ) values '
pr = ' ('
do fx=1 to m.ff.0
f1 = substr(m.ff.fx, 2)
v = m.m.f1
if dataType(v, n) then
call sql4ObjOut v
else do qx=1 until v == ''
vx = verify(v, m.mPrint)
if vx = 0 then do
l1 = min(60, length(v))
w = quote(left(v, l1), "'")
end
else if vx > 29 | vx = 0 then do
l1 = min(60, vx)
w = quote(left(v, l1), "'")
end
else do
l1 = min(29, length(v))
w = 'x'quote(c2x(left(v, l1)), "'")
end
if qx == 1 then
call sql4ObjOut w
else do
if qx = 2 then
call sql4ObjOut , 1
call out ' ||' w
end
v = substr(v, l1+1)
end
end
call sql4ObjOut , 1
call out ' ) ; '
return
endProcedure
sql4objOut:
parse arg t1, force
if (force == 1 & line \== '') | length(line t1) > 65 then do
call out pr substr(line, 3)
pr = ' ,'
line = ''
end
if force \== 1 then
line = line',' t1
return
endProcedure sql4objOut
/* copy sqlDiv end **************************************************/
/* copy db2Cat begin **************************************************/
catTbLastCol: procedure expose m.
parse upper arg cr, tb
return sql2one( ,
"select strip(char(colcount)) || ' ' || strip(c.name) one" ,
"from sysibm.sysTables t left join sysibm.sysColumns c" ,
"on c.tbCreator = t.creator and c.tbName = t.name" ,
"and c.colNo = t.colCount" ,
"where t.creator = '"cr"' and t.name = '"tb"'", ,'')
endProcedure catTbLastCol
catTbCols: procedure expose m.
parse upper arg cr, tb
if sql2St("select strip(name) name " ,
"from sysibm.sysColumns " ,
"where tbcreator = '"cr"' and tbname='"tb"'",
"order by colNo", ggSt) < 1 then
return ''
res = m.ggst.1.name
do cx=2 to m.ggst.0
res = res m.ggst.cx.name
end
return res
endProcedure catTbCols
catTbColsTrunc: procedure expose m.
parse upper arg cr, tb, maxL
if sql2St("select strip(name) name, colType, length, length2" ,
"from sysibm.sysColumns " ,
"where tbcreator = '"cr"' and tbname='"tb"'",
"order by colNo", ggSt) < 1 then
return ''
res = ''
do cx=1 to m.ggst.0
ty = m.ggSt.cx.colType
if pos('LOB', ty) > 0 then
res = res', substr('m.ggSt.cx.name', 1,' ,
min(maxL, m.ggSt.cx.length2)') 'm.ggSt.cx.name
else if pos('CHAR', ty) > 0 & m.ggSt.cx.length > maxL then
res = res', substr('m.ggSt.cx.name', 1,' maxL')',
m.ggSt.cx.name
else
res = res',' m.ggSt.cx.name
end
return substr(res, 3)
endProcedure catTbColsTrunc
catIxKeys: procedure expose m.
parse upper arg cr, ix
sql = "select colSeq, colName, ordering" ,
"from sysibm.sysKeys" ,
"where ixCreator = '"cr"' and ixName = '"ix"'" ,
"order by colSeq"
call sqlPreOpen 1, sql
res = ''
do kx=1 while sqlFetchInto(1, ':sq, :col, :ord')
if sq \= kx then
call err 'expected' kx 'but got colSeq' sq ,
'in index' cr'.'ix'.'col
res = res || strip(col) || translate(ord, '<>?', 'ADR')
end
call sqlClose 1
return res
endProcedure catIxKeys
catColCom: procedure expose m.
parse upper arg fCr, fTb, tCr, tTb
sql = "select t.name, t.colType, t.nulls, t.""DEFAULT""" ,
", coalesce(f.nulls, 'new')" ,
"from sysibm.sysColumns t" ,
"left join sysibm.sysColumns f" ,
"on f.tbCreator = '"fCr"' and f.tbName = '"fTb"'" ,
"and f.name = t.name" ,
"where t.tbCreator = '"tCr"' and t.tbName = '"tTb"'" ,
"order by t.colNo"
call sqlPreOpen 1, sql
pr = ' '
do kx=1 while sqlFetchInto(1, ':na, :ty, :nu, :de, :nn')
/* say kx na ty nu de 'nn' nn */
if pos('CHAR', ty) > 0 then
dv = "''"
else if pos('INT' ,ty) > 0 | wordPos(ty, 'REAL FLOAT') > 0 then
dv = 0
else if ty == 'TIMESTMP' then
dv = '0001-01-01-00.00.00'
else if pos('LOB', ty) > 0 then
dv = ty"('')"
else
dv = '???'
if nu = 'Y' then
dv = 'case when 1=0 then' dv 'else null end'
r = '???'
if ty = 'ROWID' then do
r = '--'
end
else if nn == 'new' then do
if de = 'Y' then
r = '--'
else if nu == 'N' then
r = dv
else
r = 'case when 1=0 then' dv 'else null end'
end
else do
if nu = 'Y' | (nu = nn) then
r = ''
else
r = 'coalesce('na',' dv')'
end
if abbrev(r, '--') then do
r = ' ' r
end
else do
r = pr r
pr = ','
end
if pos('???', r) > 0 then
call err 'no default for type' ty 'in' tCr'.'tTb'.'na
call out r na
end
call sqlClose 1
return
endProcedure catColCom
/* copy db2Cat end **************************************************/
/* copy sqlO begin ***************************************************
sql interface mit o und j Anbindung
***********************************************************************/
sqlOini: procedure expose m.
if m.sqlO.ini == 1 then
return
call sqlIni
m.sqlO.ini = 1
call jIni
m.sqlO.cursors = left('', 200)
call classNew 'n SqlResultRdr u JRWO', 'm',
, "jReset m.m.cursor = arg; m.m.type = arg2;",
, "jOpen call sqlResultRdrOpen m, opt",
, "jClose call sqlClose m.m.cursor",
, "jReadO return sqlSelReadO(m)"
call classNew 'n SqlSel u JRWO', 'm',
, "jReset m.m.src = arg; m.m.type = arg2;",
, "jOpen call sqlSelOpen m, opt",
, "jClose call sqlSelClose m",
, "jReadO return sqlSelReadO(m)"
call classNew 'n SqlDRS u SqlSel', 'm',
, "jReset m.m.loc = arg; m.m.type = arg2;",
, "jOpen call sqlDRSOpen m, opt",
, "jClose call sqlSelClose m",
, "jReadO return sqlSelReadO(m)"
call classNew 'n SqlRxConnection u', 'm',
, "sqlQuery return sqlRxQuery(cx, src, retOk)",
, "sqlFetch return sqlRxFetch(cx, dst, retOk)",
, "sqlClose return sqlRxClose(cx, retOk)",
, "sqlUpdate return sqlRxUpdate(cx, src, retOk)",
, "sqlCall call err 'implement sqlRxCall"
call classNew 'n SqlRxStatement u', 'm',
, "sqlQuery return sqlRxQuery(m.cx.cursor, src, retOk)",
, "sqlFetch return sqlRxFetch(m.cx.cursor, dst, retOk)",
, "sqlClose return sqlRxClose(m.cx.cursor, retOk)",
, "sqlUpdate return sqlRxUpdate(m.cx.cursor, src, retOk)",
, "sqlCall call err 'implement sqlRxCall"
call classNew 'n SqlCsmConnection u', 'm',
, "sqlQuery return sqlCsmQuery(cx, src, retOk)",
, "sqlFetch return sqlCsmFetch(cx, dst)",
, "sqlClose return 0",
, "sqlUpdate call err 'implement sqlCsmUpdate'" ,
, "sqlCall call err 'implement sqlCsmCall'"
call classNew 'n SqlCsmStatement u', 'm',
, "sqlQuery return sqlCsmQuery(m.cx.cursor, src, retOk)",
, "sqlFetch return sqlCsmFetch(m.cx.cursor, dst)",
, "sqlClose return 0",
, "sqlUpdate call err 'implement sqlCsmUpdate'" ,
, "sqlCall call err 'implement sqlCsmCall'"
return 0
endProcedure sqlOini
/*--- connect and/or disconnect to DB2 -------------------------------*/
sqlConnect: procedure expose m.
parse upper arg sys, retOk
call sqlOIni
if pos('/', sys) > 0 then do
parse value space(sys, 0) with hst '/' sys
cTy = 'Csm'
end
else do
hst = ''
cTy = 'Rx'
end
if m.sql.conType==cTy & m.sqlHost==hst & m.sqlconDbSYs == sys then
return 0
if m.sql.conType \== '' then
call sqlDisconnect
res = 0
if cTy = 'Rx' then
res = sqlRxConnect(sys, retOk)
else
m.sql.conDbSys = sys
if res < 0 then
return res
m.sql.conType = cTy
m.sql.conhost = hst
m.sql.connection = oNew('Sql'cTy'Connection')
return res
endProcedure sqlConnect
sqlDisconnect: procedure expose m.
parse arg retOk
if m.sql.conType == 'Rx' then
call sqlRxDisconnect
m.sql.conType = ''
m.sql.conDbSys = ''
return 0
endProcedure sqlDisonnect
/*--- execute a query from sql, with one resultset -------------------*/
sqlQuery: procedure expose m.
parse arg cx, src, retOk, m.sql.cx.type
if m.sql.cx.type \== '' then
m.sql.cx.type = class4Name(m.sql.cx.type)
if datatype(cx, 'n') then
interpret objMet(m.sql.connection, 'sqlQuery')
else
interpret objMet(cx, 'sqlQuery')
/*--- fetch next row to m.dst.* at end return false ------------------*/
sqlFetch: procedure expose m.
parse arg cx, dst, retOk
if datatype(cx, 'n') then
interpret objMet(m.sql.connection, 'sqlFetch')
else
interpret objMet(cx, 'sqlFetch')
/*--- close cursor 'c'cx ---------------------------------------------*/
sqlClose: procedure expose m.
parse arg cx, retOk
if datatype(cx, 'n') then
interpret objMet(m.sql.connection, 'sqlClose')
else
interpret objMet(cx, 'sqlClose')
return 0
/*-- execute an sql with no resultset, but possibly outParms ---------*/
sqlUpdate: procedure expose m.
parse arg cx, src, retOk
if cx == '' | datatype(cx, 'n') then
interpret objMet(m.sql.connection, 'sqlUpdate')
else
interpret objMet(cx, 'sqlUpdate')
endProcedue sqlUpdate
/*-- execute an sql call with outParms and multiple resultSets -------*/
sqlCall: procedure expose m.
parse arg cx, src, retOk
if cx == '' | datatype(cx, 'n') then
interpret objMet(m.sql.connection, 'sqlCall')
else
interpret objMet(cx, 'sqlCall')
endProcedure sqlCall
sqlSel: procedure expose m.
parse arg src, type
s = oNew('SqlSel', inp2str(src, '-sql'), type)
call pipeWriteAll s
return m.s.rowCount
endProcedure sqlSel
/*--- return a free cursor -------------------------------------------*/
sqlGetCursor: procedure expose m.
parse arg rng
if rng == '' then
return sqlGetCursorRng(rng, 10, 48)
else if rng == 'h' then
return sqlGetCursorRng(rng, 60, 99)
else if rng == 'a' then
return sqlGetCursorRng(rng, 110, 199)
else
call err 'bad cursor range' rng
endProcedure sqlGetCursor
sqlGetCursorRng: procedure expose m.
parse arg rng, fr, to
cx = pos(' ', m.sqlO.cursors, fr)
if cx < fr & cx > to then
call err "no more '"rng"' cursors between" fr "and" to,
":"m.sqlO.cursors
m.sqlO.cursors = overlay('u', m.sqlO.cursors, cx)
return cx
endProcedure sqlGetCursorRNG
/*--- mark a cursor as closed ----------------------------------------*/
sqlFreeCursor: procedure expose m.
parse arg cx
if substr(m.sqlO.cursors, cx, 1) \== 'u' then
call err 'sqlFreeCursor('cx') not in use :'m.sqlO.cursors
m.sqlO.cursors = overlay(' ', m.sqlO.cursors, cx)
return
endProcedure sqlFreeCursor
sqlStmtsOpt: procedure expose m.
parse arg src, opts
upper opts
sub = ''
o = ''
retOk = ''
do wx=1 to words(opts)
w = word(opts, wx)
if abbrev(w, '-SQL') then
o = o'-sql'substr(w, 5)
else if w == '-O' | w == 'O' then
o = o'-o'
else if w = '*' | datatype(w, 'n') then
retOk = retOk w
else if length(w) == 4 then
sub = w
else
call err 'bad opt' w 'in opts' opts 'not -sql? -o or subsys'
end
call sqlOIni
if (sub == '' & m.sql.conDbSys== '') ,
| (sub \== '' & m.sql.conDbSys \== sub) then
call sqlConnect sub
return sqlStmts(src, strip(retOk), strip(o))
endProcedure sqlStmtsOpt
/*** execute sql's in a stream (separated by ;)
opt: 'o' ==> write objects, otherwise fmtFTab
'sql72' ==> spufi formatting (window 72) else linebreaks */
sqlStmts: procedure expose m.
parse arg sqlSrc, retOk, opt
dlm = ';'
isStr = oStrOrObj(sqlSrc, m.j.in)
fLen = ''
if pos('sql', opt) > 0 then
fLen = word(substr(opt, pos('sql', opt)+3), 1)
if isStr then do
m.sqlStmts.rdr = ''
call sbSrc sqlStmts, ggStr
end
else do
fi = jOpen(o2File(ggObj), '<')
call jCatSqlReset sqlStmts, , fi, fLen
end
do forever
s1 = jCatSqlNext(sqlStmts, dlm)
if s1 = '' then
leave
if translate(left(s1, 10)) == 'TERMINATOR' then do
dlm = strip(substr(s1, 11))
if length(dlm) \== 1 then
call scanErr sqlStmts, 'bad terminator' dlm
iterate
end
call outSt(splitNl(sqlTmp, sqlStmt(s1, retOk, opt)))
end
if \ isStr then
call jClose fi
return 0
endProcedure sqlStmts
sqlStmt: procedure expose m.
parse arg src, retOk, opt
cx = sqlGetCursor()
r1 = sqlExecute(cx, src, retOK)
res = m.sql.sqlHaHi || sqlMsgLine(r1, m.sql.cx.updateCount, src)
if m.sql.cx.resultSet \== '' then do
rdr = sqlResultRdr(cx)
if pos('o', opt) > 0 then
call pipeWriteAll rdr
else
call fmtFTab sqlStmtFmt, rdr
res = sqlMsgLine(m.rdr.rowCount 'rows fetched', , src)
end
call sqlFreeCursor cx
return res
endProcedure sqlStmt
/*--- execute the given sql plus a commit
until no more rows are updated -----------------------------*/
sqlUpdComLoop: procedure expose m.
parse arg src, retOk, opt
src = inp2Str(src)
crs = sqlGetCursor()
upds = 0
if retOk == '' then
retOk = 100
do coms=0
cd = sqlExecute(crs, src, retOk)
if m.sql.crs.updateCount < 1 then
return sqlMsgLine( , upds, src, coms 'commits')
upds = upds + m.sql.crs.updateCount
call sqlCommit
if coms // 20 = 19 then
say sqlMsgLine(time(), upds, src, (coms+1) 'commits')
end
endProcedure sqlUpdComLoop
removeSqlStmt: procedure expose m.
parse arg src, ggRet, opt
bx = verify(src, '( ')
if bx < 1 then
return ''
fun = translate(word(substr(src, bx), 1))
w2 = translate(word(substr(src, bx), 2))
res = ''
if fun == 'SELECT' | fun = 'WITH' then do
s = oNew('SqlSel', inp2str(src, '%S%+Q\s'))
if pos('o', opt) > 0 then
call pipeWriteAll s
else
call fmtFTab sqlStmtFmt, s
res = m.s.rowCount 'rows fetched'
end
else if fun = 'SET' & abbrev(w2, ':') then do
ex = pos('=', w2)
if ex > 2 then
var = strip(substr(w2, 2, ex-2))
else
var = strip(substr(w2, 2))
if var = '' then
var = 'varUnbekannt'
call sqlExec src, ggRet
res = 'sqlCode' sqlCode var'='value(var)
end
else if fun = 'SET' | (fun = 'DECLARE' & w2 = 'GLOBAL') then do
call sqlExImm src, ggRet
res = 'sqlCode' sqlCode
end
else if fun = 'CALL' then do
res = sqlStmtCall(src, ggRet, opt)
end
else do
call sqlExec src, ggRet
res = 'sqlCode' sqlCode
if wordPos(fun, 'DELETE INSERT UPDATE') > 0 THEN
res = res',' sqlErrd.3 'rows' ,
translate(fun, m.mAlfLC, m.mAlfUC)'d'
end
aa = strip(src)
ll = 75 - length(res)
if length(aa) > ll then
aa = space(aa, 1)
if length(aa) > ll then
aa = left(aa, ll-3)'...'
return res':' aa
endProcedure removeSqlStmt
sqlStmtCall: procedure expose m.
parse arg src, retOk, opt
s = scanSrc(scanSqlReset(sqlstmtcall, ,0), src)
if \ scanSqlId(scanSkip(s)) | m.s.val \== 'CALL' then
call scanErr s, 'not a call'
if \ scanSqlQuId(scanSkip(s)) then
call scanErr s, 'qualified id missing after call'
loc = ''
if m.s.val.0 = 1 then
wh = 'name =' quote(m.s.val.1, "'")
else if m.s.val.0 = 2 then
wh = "schema = '"strip(m.s.val.1)"'" ,
"and name = '"strip(m.s.val.2)"'"
else if m.s.val.0 = 3 then do
loc = m.s.val.1
wh = "schema = '"strip(m.s.val.2)"'" ,
"and name = '"strip(m.s.val.3)"'"
end
else
call scanErr s, 'storedProcedureName' m.s.val ,
'has' m.s.val.0 'parts, should have 1, 2 or 3'
pn = m.s.val
da = sqlStmtCallDa(sqlStmtCall, loc, wh)
if \ scanLit(scanSkip(s), '(') then
call scanErr s, '( expected after call' pn
varChars = f
do ax=1
m.da.ax.varName = ''
isEmpty = 0
if scanLit(scanSkip(s), ':') then do
if \ scanVerify(scanSkip(s), m.mAlfDot) then
call scanErr s, 'variable expected after : in call' pn
m.da.ax.varName = m.s.tok
if m.da.ax.io == 'i' | m.da.ax.io == 'b' then
m.da.ax.sqlData = envGet(m.da.ax.varName)
end
else if scanString(s) then
m.da.ax.sqlData = m.s.val
else if scanVerify(s, ',):;', 'm') then
m.da.ax.sqlData = strip(m.s.tok)
else
isEmpty = 1
if scanLit(scanSkip(s), ')') then
leave
if \ scanLit(s, ',') then
call scanErr s, if(isEmpty, 'value, var, ') ,
|| "',' or ')' expected"
end
if ax \= m.da.sqlD then
if \ (ax=1 & m.da.sqlD = 0 & isEmpty) then
call scanErr s, 'call with' ax 'parms but' ,
pn 'needs' m.da.sqld
caCo = sqlExec('call' pn 'using descriptor :M.'da, 466)
call out '--- called' pn', sqlCode' caCo
do ax=1 to m.da.sqlD
call Out ' parm' ax m.da.ax.io m.da.ax.parmName,
|| if(m.da.ax.varName \== '',' $'m.da.ax.varName),
'=' m.da.ax.sqlData
if m.da.ax.varName \== '' then
call envPut m.da.ax.varName, m.da.ax.sqlData
end
if caCo = 466 then do
drop sqlDP
call sqlExec 'describe procedure :pn into :m.sqlDp'
if m.sqldp.sqlD < 1 then
call err 'bad sqldp sqlD='m.sqldp.sqlD 'for sqlCode' caCo
do dx=1 to m.sqldp.sqlD
call out ' dynamic result set' dx m.sqldp.dx.sqlName ,
'locator='m.sqldp.dx.sqlLocator
end
do dx=1 to m.sqldp.sqlD
drs = 'dynamic result set' dx'='m.sqldp.dx.sqlName 'of' pn
call out '--- begin of' drs
rdr = sqlDRS(m.sqldp.dx.sqlLocator)
if pos('o', opt) > 0 then
call pipeWriteAll rdr
else
call fmtFTab sqlStmtFmt, rdr
call out '---' m.rdr.rowCount 'rows fetched from' drs
end
end
return 'sqlCode' caCo
endProcedure sqlStmtCall
sqlStmtCallDa: procedure expose m.
parse arg da, loc, wh
cr = if(loc=='',,loc'.')'sysIbm'
sql = "select 'SCHEMA=''' || strip(schema) || ''''",
"|| ' and name=''' || strip(name ) || ''''",
"|| ' and specificName=''' || strip(specificName) || ''''",
"|| ' and routineType =''' || strip(routineType ) || ''''",
"|| ' and VERSION =''' || strip(VERSION ) || ''''",
"from" cr".SysRoutines ",
"where" wh "and active = 'Y'"
if sqlpreAllCl(49, sql, rou, ':m.rou') <> 1 then
call err m.rou.0 'routines found for' wh
rdr = jOpen(sqlRdr('select * from' cr'.sysParms where' m.rou,
'order by ordinal'), '<')
do ix=1 while assNN('A', jReadO(rdr))
if m.a.ordinal <> ix then
call err 'ix' ix 'mismatch ordinal' m.a.ordinal
ty = m.a.dataTypeId
m.da.ix.sqlType = ty
m.da.ix.sqlLen = m.a.length
m.da.ix.sqlLen.sqlPrecision = m.a.length
m.da.ix.sqlLen.sqlScale = m.a.scale
if wordPos(ty, 384 385) > 0 then /* date */
m.da.ix.sqlLen = 10
else if wordPos(ty, 388 389) > 0 then /* time */
m.da.ix.sqlLen = 8
else if wordPos(ty, 392 393) > 0 then /* timestamp */
m.da.ix.sqlLen = 26
m.da.ix.sqlData = ''
m.da.ix.parmName= m.a.parmName
m.da.ix.io = translate(m.a.rowType, 'iob', 'POB')
m.da.ix.sqlInd = 1
end
m.da.sqlD = ix - 1
return da
endProcedure sqlStmtCallDa
sqlResultRdr: procedure expose m.
parse arg cx, type
return oNew('SqlResultRdr', cx, type)
endProcedure sqlRdr
sqlRdr: procedure expose m.
parse arg src, type
return oNew('SqlSel', inp2str(src, '%S%qn %S'), type)
endProcedure sqlRdr
sqlResultRdrOpen: procedure expose m.
parse arg m, opt
if opt\== m.j.cRead then
call err 'opt not' m.j.cRead 'sqlResultRdrOpen('m',' opt')'
m.m.jReading = 1
m.m.rowCount = 0
return m
endProcedure sqlResultRdrOpen
/*--- prepare and open cursor
generate type and fetchList ------------------------------------*/
sqlSelOpen: procedure expose m.
parse arg m, opt
m.m.cursor = sqlGetCursor()
call sqlQuery m.m.cursor, m.m.src, ,m.m.type /* ????? */
return sqlResultRdrOpen(m, opt)
endProcedure sqlOpen
/*--- dynamic result sets --------------------------------------------*/
sqlDRS: procedure expose m.
parse arg loc, type
return oNew('SqlDRS', loc, type)
endProcedure sqlDRS
sqlDRSOpen: procedure expose m.
parse arg m, opt
if opt\== m.j.cRead then
call err 'opt not' m.j.cRead 'sqlDRSOpen('m',' opt')'
crs = sqlGetCursor('a')
crN = 'C'crs
m.m.cursor = crs
call sqlReset crs
call sqlexec 'allocate C'crs 'cursor for result set :m.m.loc'
call sqlExec 'describe cursor c'crs 'into :m.sql.'crs'.D'
m.m.jReading = 1
m.m.rowCount = 0
return m
endProcedure sqlDRSOpen
/*--- create the type, fetch vars etc. from the sqlDA ---------------*/
sqlFetchClass: procedure expose m.
parse arg cx
if m.sql.cx.type = '' then do
ff = mCat('SQL.'cx'.COL', '%qn v, f %s')
m.sql.cx.type = classNew('n* SQL u f' ff 'v')
end
return m.sql.cx.type
endProcedure sqlFetchClass
/*--- fetch cursor for this sqlSel -----------------------------------*/
sqlSelReadO: procedure expose m.
parse arg m
cx = m.m.cursor
v = oNew(sqlFetchClass(cx))
if \ sqlFetch(cx, v) then
return ''
m.m.rowCount = m.m.rowCount + 1
return v
endProcedure sqlSelReadO
/*--- close sql Cursor -----------------------------------------------*/
sqlSelClose: procedure expose m.
parse arg m, v
call sqlClose m.m.cursor
call sqlFreeCursor m.m.cursor
m.m.cursor = ''
return m
endProcedure sqlSelClose
/* copy sqlO end **************************************************/
/* copy sqlC begin ***************************************************
sql interface Compatibility mode
***********************************************************************/
/*--- prepare and declare 'c'cx from sql src -------------------------*/
sqlPreDeclare: procedure expose m.
parse arg cx, src, ggRetOk, descOut
m.sql.cx.type = ''
res = sqlPrepare(cx, src, ggRetOk, descOut)
if res >= 0 then
return sqlExec('declare c'cx 'cursor for s'cx)
return res
endProcedure sqlPreDeclare
/*--- prepare, declare and open 'c'cx from sql src -------------------*/
sqlPreOpen: procedure expose m.
parse arg cx, src, descOut, descInp
res = sqlPreDeclare(cx, src, descOut, descInp)
if res >= 0 then
return sqlOpen(cx)
return res
endProcedure sqlPreOpen
/*--- fetch cursor 'c'cx into variables ggVars -----------------------*/
sqlFetchInto:
parse arg ggCx, ggVars
if ggVars == '' then
ggVars = 'descriptor :M.SQL.'ggCX'.D'
/* accept sqlCodes > 0 except 100 */
ggRes = sqlExec('fetch c'ggCx 'into' ggVars, 100)
if ggRes == 0 then
return 1
if ggRes == 100 then
return 0
return ggRes
endProcedure sqlFetchInto
/*--- return sql variable list for stem st and fields the word in vars
if withInd == 1 then with sqlIndicator variables
sqlVars('S', 'A B') --> ':S.A, :S.B'
sqlVars('S', 'A B', 1) --> ':S.A :S.A.SQLIND, :S.B :S.B.SQLIND'
----------------------------------------------------------------------*/
sqlVars: procedure expose m.
parse arg st, vars, withInd
res = ''
if st ^== '' then
st = st'.'
do ix=1 to words(vars)
res = res', :'st || word(vars, ix)
if withInd == 1 then
res = res ':'st || word(vars, ix)'.sqlInd'
end
return substr(res, 3)
endProcedure sqlVars
/*--- open cursor 'c'cx fetch all into variables vars and close
st = passed stem, sx = row number
return number of rows fetched ----------------------------------*/
sqlOpAllCl:
parse arg ggCx, st, ggVars
if arg() >= 4 then do
call sqlDescribeInput ggCx
do ggAx=4 to arg()
call sqlDASet ggCx, 'I', ggAx-3, arg(ggAx)
end
ggRes = sqlOpen(ggCx use)
end
else do
ggRes = sqlOpen(ggCx)
end
if ggRes < 0 then
return ggRes
do sx = 1 until ggRes \== 1
ggRes = sqlFetchInto(ggCx, ggVars)
end
m.st.0 = sx - 1
call sqlRxClose ggCx
if ggRes == 0 then
return m.st.0
return ggRes
endProcedure sqlOpAllCl
/*--- prepare, declare open cursor 'c'cx, fetch all and close
return number of rows fetched ----------------------------------*/
sqlPreAllCl:
parse arg ggCx, ggSrc, st, ggVars
ggRes = sqlPreDeclare(ggCx, ggSrc)
if ggRes >= 0 then
return sqlOpAllCl(ggCx, st, ggVars)
return ggRes
endProcedure sqlPreAllCl
/*--- execute statement 's'cx using arguments arg(2), arg(3)... ------*/
sqlExecStmt:
parse arg ggCx ggRetOk /* no , for ggRetOk, arg(2) is used already| */
if ggAx > 1 then
call sqlDescribeInput ggCx
do ggAx=2 to arg()
call sqlDASet ggCx, 'I', ggAx-1, arg(ggAx)
end
return sqlExec('execute s'ggCx 'using descriptor :M.SQL.'ggCx'.I',
, ggRetOk)
endProcedure execStmt
/*--- execute immediate the sql src ----------------------------------*/
/* copy sqlC end **************************************************/
/* copy sqlCsm begin **************************************************/
/*--- send an sql to csm an handle sqlCode ---------------------------*/
sqlCsmExe:
parse arg cx, ggSqlStmt, ggRetOk
sql_HOST = m.sql.conHost
SQL_DB2SSID = m.sql.conDbSys
sql_query = ggSqlStmt
address tso "CSMAPPC START PGM(CSMASQL)"
if \ (rc = 0 | rc = 4) then
call err 'csmappc rc' rc
if sqlCode = 0 then
return 0
else if pos('*', ggRetOk) > 0 | wordPos(sqlCode, ggRetOk) > 0 ,
then do
if sqlCode < 0 & pos('say', ggRetOk) > 0 then
call errSay sqlmsg(sqlCA2Rx(sqlCa))
return sqlCode
end
else if sqlCode < 0 then
call err sqlmsg(sqlCA2rx(sqlCa))
else if pos('w', ggRetOk) < 1 then
if sqlCode = 100 then
call errSay 'sqlCode +100 row not found\nstmt =' ggSqlStmt
else
call errSay sqlMsg(sqlCA2rx(sqlCa)), 'w'
return sqlCode
endProcedure sqlCsmExe
/*--- execute a query from sql, with one resultset -------------------*/
sqlCsmQuery: procedure expose m.
parse arg cx, sqlSrc, retOk, src
res = sqlCsmExe(cx, sqlSrc, 100 retOk)
if res < 0 then
return res
f = m.sql.cx.type
if src == '' then
src = 'SQL.'cx'.DATA'
m.sql.cx.data = src
if f \== '' then do
f = f'.FLDS'
if m.f.0 < sqlD then
call err 'not enough fields in type'
end
do kx=1 to sqlD
rxNa = SQLDA_REXXNAME.kx
cn = sqlVarName(f, kx, sqlDa_name.kx)
m.sql.cx.col.kx = cn
do rx=1 to sqlRow#
if substr(sqlIndicator.rx, kx ,1) == 'ff'x then
m.src.rx.cn = m.sqlNull
else
m.src.rx.cn = value(rxNa'.'rx)
end
end
m.src.0 = sqlRow#
m.sql.cx.col.0 = sqlD
m.sql.cx.daIx = 0
return 0
endProcedure sqlCsmQuery
sqlCsmFetch: procedure expose m.
parse arg cx, dst
src = m.sql.cx.data
rx = m.sql.cx.daIx + 1
if rx > m.sql.cx.data.0 then
return 0
m.sql.cx.daIx = rx
do kx = 1 to m.sql.cx.col.0
c = m.sql.cx.col.kx
m.dst.c = m.src.rx.c
end
return 1
endProcedure sqlCsmFetch
/* copy sqlCsm end **************************************************/
/* copy sqlQCsm begin *************************************************/
/*--- execute a query from sql, with one resultset -------------------*/
sqlQuery: procedure expose m.
parse arg cx, src, retOk
return sqlCsmQuery(cx, src, retOk)
/*--- fetch next row to m.dst.* at end return false ------------------*/
sqlFetch: procedure expose m.
parse arg cx, dst, retOk
return sqlCsmFetch(cx, dst)
/*--- close cursor 'c'cx ---------------------------------------------*/
sqlClose: procedure expose m.
parse arg cx, retOk
return 0
/*-- execute an sql with no resultset, but possibly outParms ---------*/
sqlUpdate: procedure expose m.
parse arg cx, src, retOk
return sqlCsmUpdate(cx, src, retOk)
/*-- execute an sql call statement with outParms and several results--*/
sqlCall: procedure expose m.
parse arg cx, src, retOk
return sqlCsmCall(cx, src, retOk)
/* copy sqlQCsm end *************************************************/
/* copy sqlRx begin ***************************************************
Achtung: inc generiert sql aus sqlRx, Aenderungen nur in sqlRx|
sql interface
***********************************************************************/
/*--- initialize sqlRx -----------------------------------------------*/
sqlIni: procedure expose m.
if m.sql.ini == 1 then
return
m.sqlNull = '---'
m.sqlInd = 'sqlInd'
m.sql.defCurs= 49
m.sqlCAMsg = 0
m.sqlSuMsg = 2
m.sql.ini = 1
m.sql.conType = ''
m.sql.conDbSys = ''
m.sql.conhost = ''
isInProd = wordPos(sysvar(sysNode), 'RZ2 RZ4') > 0
m.sqlRetOK = 'dne' copies('rod', \ isInProd)
return 0
endProcedure sqlIni
/*--- connect to the db2 subsystem sys -----------------------------*/
sqlRxConnect: procedure expose m.
parse upper arg sys, ggRetOk
call sqlIni
address tso "SUBCOM DSNREXX"
if rc <> 0 then do
sRc = RXSUBCOM('ADD','DSNREXX','DSNREXX') /* ADD HOST CMD ENV */
if sRc <> 0 then
call err 'rc' sRc 'from RXSUBCOM(ADD, DSNREXX, DSNREXX)'
end
if sys = '-' then
return 0
if sys \== '' then
nop
else if sysvar(sysnode) == 'RZ1' then
sys = 'DBAF'
/* else if sysvar(sysnode) == 'RZ4' then
sys = 'DP4G'
*/ else
call err 'no default subsys for' sysvar(sysnode)
m.sql.conDbSys = sys
ggSqlStmt = 'connect' sys
address dsnRexx ggSqlStmt
if rc = 0 then
return 0
interpret sqlErrorHandler(rc, ggRetOk, ggSqlStmt)
endProcedure sqlRxConnect
/*--- diconnect from db2 ---------------------------------------------*/
sqlRxDisconnect: procedure expose m.
parse arg retOk
ggSqlStmt = 'disconnect'
m.sql.conDbSys = ''
address dsnRexx ggSqlStmt
if rc = 0 then
return 0
interpret sqlErrorHandler(rc, ggRetOk, ggSqlStmt)
endProcedure sqlDisconnect
/*--- execute a query from sql, with one resultset -------------------*/
sqlRxQuery: procedure expose m.
parse arg cx, src, retOk
res = sqlPrepare(cx, src, retOk, 1)
if res < 0 then
return res
res = sqlExec('declare c'cx 'cursor for s'cx, retOk)
if res < 0 then
return res
res = sqlExec('open c'cx, retOk)
if res < 0 then
return res
call sqlRxFetchVars cx
m.sql.cx.updateCount = sqlErrd.3
m.sql.cx.resultSet = cx
return res
endProcedure sqlRxQuery
/*--- fetch next row to m.dst.* at end return false ------------------*/
sqlRxFetch: procedure expose m.
parse arg cx, dst, retOk
fetCode = sqlExec('fetch c'cx 'into' sqlRxFetchVars(cx), 100 retOk)
if fetCode == 100 then
return 0
if fetCode < 0 then
return fetCode
call sqlSetNull cx, dst
return 1
endProcedure sqlRxFetch
/*--- close cursor 'c'cx ---------------------------------------------*/
sqlRxClose: procedure expose m.
parse arg cx, retOk
return sqlExec('close c'cx, retOk)
endProcedure sqlRxClose
/*-- execute an sql with no resultset, but possibly outParms ---------*/
sqlRxUpdate: procedure expose m.
parse arg cx, src, retOk
m.sql.cx.updateCount = ''
m.sql.cx.resultSet = ''
bx = verify(src, '( ')
if bx > 0 then
fun = translate(word(substr(src, bx), 1))
if fun = 'SET' then do
w2 = translate(word(substr(src, bx), 2))
if \ abbrev(w2, ':') then
return sqlExImm(src, retOk)
trace ?r
ex = pos('=', w2)
if ex = 0 then
ex = length(w2)+1
var = strip(substr(w2, 2, ex-2))
if var = '' then
call err 'bad hostVar in' src
m.sql.outVar = var
src2 = 'set :M.sql.out.'var substr(w, ex) subword(src, 3)
return sqlExec(src2, retOk)
end
if fun == 'DECLARE' then do
if 'GLOBAL' == translate(word(substr(src, bx), 2)) then
return sqlExImm(src, retOk)
end
res = sqlExec(src, retOk)
if wordPos(fun, 'DELETE INSERT UPDATE') > 0 then
m.sql.cx.updateCount = sqlErrd.3
return res
endProcedure sqlRxUpdate
/*-- execute a query, update or call ---------------------------------*/
sqlExecute: procedure expose m.
parse arg cx, src, retOk
src = inp2Str(src, '-sql')
f = translate(word(substr(src, max(verify(src, '( '), 1)), 1))
m.sql.cx.fun = f
if f == 'SELECT' | f == 'WITH' then
return sqlQuery(cx, src, retOk)
else if f == 'CALL' then
call err 'implement sql call for:' src
else
return sqlUpdate(cx, src, retOk)
endProcedure sqlExecute
/*-- execute a query, copy result to stem ----------------------------*/
sql2St: procedure expose m.
parse arg src, dst, retOk, type
cx = m.sql.defCurs
res = sqlQuery(cx, src, retOk, type)
if res >= 0 then do
do sx=1 while sqlFetch(cx, dst'.'sx)
end
res = sx-1
end
m.dst.0 = res
call sqlRxClose cx
return res
endProcedure sql2St
/*-- execute a query and return value of the first column
if > 1 row fail, if 0 rows return arg(3) or fail ----------*/
sql2One: procedure expose m.
parse arg src, dst
cx = m.sql.defCurs
call sqlQuery cx, src
if \ sqlFetch(cx, dst) then
if arg() > 2 then
return arg(3)
else
call err 'no row returned for:' src
if sqlFetch(cx, dst.2) then
call err '2 or more rows for' src
c1 = m.sql.cx.col.1
res = m.dst.c1
call sqlRxClose cx
return res
endProcedure sql2One
/*--- reset sql cursor 'c'cx fields ----------------------------------*/
sqlReset: procedure expose m.
parse arg cx
m.sql.cx.updateCount = ''
m.sql.cx.resultSet = ''
m.sql.cx.needDesc = 1
m.sql.cx.d.sqlD = 'noSqlDA'
m.sql.cx.i.sqlD = 'noDescInp'
m.sql.cx.fetchVars = ''
m.sql.cx.type = ''
m.sql.cx.col.0 = ''
m.sql.cx.into = ''
return
endProcedue sqlReset
/*--- prepare statement 's'cx from sql src into descriptor desc ------*/
sqlPrepare: procedure expose m.
parse arg cx, src, retOk, descOut
src = inp2str(src, '%qn%s ')
s = ''
if descOut == 1 then
s = 'into :M.SQL.'cx'.D'
call sqlReset cx
return sqlExec('prepare s'cx s 'from :src', retOk)
endProcedure sqlPrepare
/*--- open cursor 'c'cx using arguments arg(2), arg(3)... ------------*/
sqlOpen: procedure expose m.
parse arg cx us
if us == '' then do
if arg() <= 1 then
return sqlExec('open c'cx)
call sqlDescribeInput cx
do ix=1 to arg()-1
call sqlDASet cx , 'I', ix, arg(ix+1)
end
end
return sqlExec('open c'cx 'using descriptor :M.SQL.'cx'.I')
endProcedure sqlOpen
/*--- execute a prepared statement with arg(2), arg(3)... ------------*/
sqlExePreSt: procedure expose m.
parse arg cx retOk
if arg() <= 1 then
return sqlExec('execute s'cx, retOk)
call sqlDescribeInput cx
do ix=1 to arg()-1
call sqlDASet cx , 'I', ix, arg(ix+1)
end
return sqlExec('execute s'cx 'using descriptor :M.SQL.'cx'.I',
, retOk)
endProcedure sqlExePreSt
/*--- describe output (if not already done)
and return size of sqlDa ------------------------------------*/
sqlDescribeOutput: procedure expose m.
parse arg cx, force
if force == 1 | \ datatype(m.sql.cx.d.sqlD, 'n') then
call sqlExec 'describe s'cx 'into :M.SQL.'cx'.D', 0
return m.sql.cx.d.sqlD
endProcedure sqlDescribeOutput
/*--- describe input (if not already done)
and return size of input sqlDA ------------------------------*/
sqlDescribeInput: procedure expose m.
parse arg cx, force
if force == 1 | \ datatype(m.sql.cx.i.sqlD, 'n') then
call sqlExec 'describe input s'cx 'into :M.SQL.'cx'.I'
return m.sql.cx.i.sqlD
endProcedure sqlDescribeInput
/*--- describe table and return sqlDA --------------------------------*/
sqlDescribeTable: procedure expose m.
parse upper arg tb, force
if force == 1 | \ datatype(m.sql.table.tb.sqlD, 'n') then
call sqlExec 'describe table :tb into :M.SQL.TABLE.'tb
return 'SQL.TABLE.'tb
endProcedure sqlDescribeTable
/*--- return select column list for table tb
omit Blobs (blobMax < 0) or substr(blob, 1, blobMax) ----------*/
sqlColList: procedure expose m.
parse arg tb al, blobMax
sd = sqlDescribeTable(tb)
bs = ''
lst = ''
if al \== '' & right(al, 1) \== '.' then
al = al'.'
do sx=1 to m.sd.sqld
if wordPos(m.sd.sx.sqlType, '404 405 408 409 412 413') < 1 then
lst = lst',' al || m.sd.sx.sqlName
else do
bs = bs m.sd.sx.sqlName
if blobMax >= 0 then
lst = lst', length('al || m.sd.sx.sqlName')' ,
m.sd.sx.sqlName'Len' ,
|| ', substr('al || m.sd.sx.sqlName ,
|| ', 1,' blobMax')' m.sd.sx.sqlName
end
end
m.sd.colList = substr(lst, 3)
m.sd.blobs = strip(bs)
return substr(lst, 3)
endProcedure sqlColList
/*--- put sqlNull in all vars where indicator says so ---------------*/
sqlSetNull: procedure expose m.
parse arg cx, dst
do nx=1 to m.sql.cx.sqlNull.0
col = m.sql.cx.sqlNull.nx
if m.dst.col.sqlInd < 0 then
m.dst.col = m.sqlNull
end
return
endProcedure sqlSetNull
/*--- use describe output to generate column names,
fetchVariables and sqlNull names ---------------------*/
sqlRxFetchVars: procedure expose m.
parse arg cx
if m.sql.cx.fetchVars \== '' then
return m.sql.cx.fetchVars
call sqlDescribeOutput cx
f = m.sql.cx.type
if f \== '' then do
f = f'.FLDS'
if m.f.0 < m.sql.cx.d.sqlD then
call err 'not enough column names'
end
m.sql.cx.col.0 = m.sql.cx.d.sqlD
nx = 0
vars = ''
do kx=1 to m.sql.cx.d.sqlD
cn = sqlVarName(f, kx, m.sql.cx.d.kx.sqlName)
m.sql.cx.col.kx = cn
m.sql.cx.col2kx.cn = kx
vars = vars', :m.dst.'cn
if m.sql.cx.d.kx.sqlType // 2 = 1 then do
vars = vars' :m.dst.'cn'.sqlInd'
nx = nx + 1
m.sql.cx.sqlNull.nx = cn
end
end
m.sql.cx.sqlNull.0 = nx
m.sql.cx.fetchVars = substr(vars, 3)
return m.sql.cx.fetchVars
endProcedure sqlRxFetchVars
sqlCol2kx: procedure expose m.
parse arg cx, nm
call sqlRxFetchVars cx
if symbol('M.SQL.CX.COL2KX.NM') \== 'VAR' then
return ''
kx = m.sql.cx.col2kx.nm
if m.sql.cx.col.kx == nm then
return kx
drop m.sql.cx.col.kx
return ''
endProcedure sqlCol2kx
sqlVarName: procedure expose m. sqlVarName.
parse arg f, kx, sNa
if f == '' then do
cx = verifId(sNa)
if cx > 0 then /* avoid bad characters for classNew| */
sNa = left(sNa, cx-1)
upper sNa
if sNa == '' | symbol('sqlVarName.sNa') == 'VAR' then
sNa = 'COL'kx
sqlVarName.sNa = 1
return sNa
end
else do
if m.f.kx == '' then
call err 'implement empty varName'
return substr(m.f.kx, 2)
end
endProcedure sqlVarName
/*--- set one value in a DA, handle nulls ----------------------------*/
sqlDASet: procedure expose m.
parse arg cx, da, ix, val
m.sql.cx.da.ix.sqlData = val
m.sql.cx.da.ix.sqlInd = - (val == m.sqlNull)
/* data types schienen einmal nicht zu funktionieren .......
if wordPos(m.da.ix.sqlType, '384 385 388 389 392 393') > 0 then
m.da.ix.sqlType = 448 + (m.da.ix.sqlType // 2) */
return
endProcedure sqlDASet
sqlExImm:
parse arg ggSrc, ggRetOk
return sqlExec('execute immediate :ggSrc', ggRetOk)
endProcedure sqlExImm
sqlCommit: procedure expose m.
parse arg src
return sqlExec('commit')
endProcedure sqlCommit
/*--- execute sql thru the dsnRexx interface -------------------------*/
sqlExec: /* no procedure, to keep variables sql... */
parse arg ggSqlStmt, ggRetOk
m.sql.sqlHaHi = ''
address dsnRexx 'execSql' ggSqlStmt
/* say 'sqlCode' sqlCode 'rc' rc 'for' ggSqlStmt ggNo */
if rc = 0 then
return 0
interpret sqlErrorHandler(rc, ggRetOk, ggSqlStmt)
endProcedure sqlExec
sqlErrorHandler: procedure expose m. ,
sqlCode sqlErrMc sqlErrP sqlErrD. sqlWarn. sqlState
parse arg drC, retOk, verb rest
if drC == 0 then
return 'return 0'
if wordPos(drC, '1 -1') < 0 then
return "call err 'dsnRexx rc" drC"' sqlmsg()"
if pos('-', retOK) < 1 then
retOK = retOk m.sqlRetOk
if pos('*', retOK) > 0 | wordPos(sqlCode, retOK) > 0 then do
if sqlCode < 0 & pos('say', retOK) > 0 then
return "call outSt errMsg(' }'sqlMsg()); return" sqlCode
else
return "return" sqlCode
end
upper verb
if verb == 'DROP' then do
if sqlCode == -204 & wordPos('dne', retok) > 0 then
return 'return' sqlCode
if sqlCode = -672 & verb=='DROP' ,
& wordPos('rod', retok) > 1 then do
hahi = m.sql.sqlHaHi ,
|| sqlMsgLine(sqlCode, 'tb='sqlErrMc ,verb rest)'\n'
call sqlExec 'alter table' SqlErrMc ,
'drop restrict on drop'
hahi = hahi || m.sql.sqlHaHi ,
|| sqlMsgLine(sqlCode, , ggSqlStmt)'\n'
call sqlExec verb rest
m.sql.sqlHaHi = hahi
return 'return' sqlCode
end
end
if drC < 0 then
return "call err sqlmsg(); return" sqlCode
if (sqlCode <> 0 | sqlWarn.0 ^==' ') & pos('w',retOK) < 1 then
return "call outSt errMsg(' }'sqlMsg()); return" sqlCode
return 'return' sqlCode
endProcedure sqlErrorHandler
sqlMsgLine: procedure expose m. sqlErrD.
parse arg res, cnt, src, plus
verb = translate(word(src, 1))
if datatype(res, 'n') then
res = 'sqlCode' res
if cnt \== '' then do
res = res',' cnt
vx = wordPos(translate(word(src,1)), 'DELETE INSERT UPDATE')
if datatype(cnt, 'n') then
if vx > 0 then
res = res 'rows' word('deleted inserted updated', vx)
else if cnt <> 0 then
res = res 'rows updated'
end
if plus \== '' then
res = res',' plus
if abbrev(res, ', ') then
res = substr(res, 3)
if src \== '' then do
ll = 75 - length(res)
aa = strip(src)
if length(aa) > ll then
aa = space(aa, 1)
if length(aa) > ll then
aa = left(aa, ll-3)'...'
res = res':' aa
end
return res
endProcedure sqlMsgLine
/*--- send a command to db2 through the TSO dsn processor ------------*/
sqlDsn: procedure expose m.
parse arg st, sys, cmd, rcOk
x = outtrap('M.'st'.')
push 'END'
push cmd
address tso 'DSN SYSTEM('sys')'
rr = rc
x = outtrap(off)
if rr = 0 | rcOk = '*' | wordPos(rr, rcOk) > 0 then
return rr
fl = max(1, m.st.0 - 10)
em = 'rc' rr 'for DSN SYSTEM('sys') cmd' cmd,
'\nOuputlines' fl '-' m.st.0':'
do lx=fl to m.st.0
em = em '\n' strip(m.st.lx, 't')
end
call err em
endProcedure sqlDsn
/*--- issue an sql error message -------------------------------------*/
sqlMsg: /* no procedure, to keep variables sql... */
if \ dataType(sqlCode, 'n') then do
ggRes = 'sqlCode' sqlCode 'not numeric\n'sqlCaMsg()
end
else do
ggRes = sqlDsntiar(sqlRx2CA())
ggWa = sqlMsgWarn()
if ggWa \= '' then
ggRes = ggRes'\nwarnings' ggWa
if m.sqlCAMsg == 1 then
ggRes = ggRes'\n'sqlCaMsg()'\n'sqlCaMsg(sqlCa2Rx(sqlCa))
end
ggSt = 'SQL.HOST'
ggVa = 'SQL.HOST.VAR'
ggBe = 'SQL.HOST.BEF'
call sqlHostVars ggSqlStmt, 12, ggSt
if datatype(sqlErrd.5, 'n') & sqlErrd.5 > 0 then do
ggW1 = translate(word(ggSqlStmt, 1))
ggW2 = translate(word(ggSqlStmt, 2))
if ggW1 == 'PREPARE' then
ggVV = sqlHostVarFind(ggSt, 'FROM')
else if ggW1 ggW2 == 'EXECUTE IMMEDIATE' then
ggVV = sqlHostVarFind(ggSt, 1)
else
ggVV = ''
if ggVV == '' then
ggRes = ggRes || sqlMsgSrcPos(ggSqlStmt, sqlErrd.5)
else
ggRes = ggRes || sqlMsgSrcPos(value(ggVV), sqlErrd.5)
end
ggRes = ggRes'\nstmt =' ggSqlStmt
ggPref = '\nwith'
do ggXX=1 to m.ggSt.0
ggRes = ggRes || ggPref m.ggBe.ggXX ':'m.ggVa.ggXX ,
'=' value(m.ggVa.ggXX)
ggPref = '\n '
end
if m.sqlSuMsg == 1 | (m.sqlSuMsg == 2 & m.sql.conHost \== '') then
ggRes = ggRes'\nsubsys =' m.sql.conDbSys ,
|| ', host =' m.sql.conHost', interfaceType' m.sql.conType
return ggRes
endSubroutine sqlMsg
/*--- use dsnTiar to translate sql Info to error text ----------------*/
sqlDsnTiar: procedure expose m.
parse arg ca
if -438 = sqlCa2Rx(ca) then
return '\nSQLCODE = -438:',
'APPLICATION RAISED ERROR WITH sqlState' sqlState ,
'and DIAGNOSTIC TEXT:' sqlErrMc
liLe = 78
msLe = liLe * 10
msg = d2c(msLe,2) || left('', msLe)
len = d2c(liLe, 4)
ADDRESS LINKPGM "DSNTIAR ca msg len"
if rc = 0 then nop
else if rc = 4 then say 'warn linkPgm dsnTiar rc' rc 'sqlCa' ca
else call err 'linkPgm dsnTiar rc' rc 'sqlCa' ca
res = strip(substr(msg, 13, liLe-10))
cx = pos(', ERROR: ', res)
if cx > 0 then
res = left(res, cx-1)':' strip(substr(res, cx+9))
do c=3+liLe by liLe to msLe while substr(msg, c, 10) = ''
res = res'\n 'strip(substr(msg, c+10, liLe-10))
end
return res
endProcedure sqlDsnTiar
/*--- format all rexx sqlCa fields into a message --------------------*/
sqlCaMsg:
return 'sqlCode' sqlCode 'sqlState='sqlState ,
'\n errMC='translate(sqlErrMc, ',', 'ff'x) ,
'\n warnings='sqlWarnCat('+') 'erP='sqlErrP ,
'\n errD.1='sqlErrD.1 '2='sqlErrD.2 '3='sqlErrD.3 ,
'\n errD.4='sqlErrD.4 '5='sqlErrD.5 '6='sqlErrD.6
endProcedure sqlCaMsg
/*--- format the sqlCA into the dsnTiar SQLCA ------------------------*/
sqlRx2Ca: procedure expose m. ,
sqlCode sqlErrMc sqlErrP sqlErrD. sqlWarn. sqlState
if \ (datatype(sqlcode, 'n') & datatype(sqlErrD.1, 'n') ,
& datatype(sqlErrD.3, 'n')) then
return err('sqlCode etc. not numeric\nsqlCa =' sqlCaMsg())
if digits() < 10 then
numeric digits 10
sqlCa = 'SQLCA ' || d2c(136, 4) || d2c(sqlCode, 4) ,
|| d2c(min(70, length(sqlErrMc)), 2)left(sqlErrMc, 70) ,
|| left(sqlErrP, 8) ,
|| d2c(sqlErrD.1, 4)d2c(sqlErrD.2, 4)d2c(sqlErrD.3, 4) ,
|| d2c(sqlErrD.4, 4)d2c(sqlErrD.5, 4)d2c(sqlErrD.6, 4) ,
|| sqlWarnCat() || sqlState
if length(sqlCa) <> 136 then
call err 'sqlCa length' length(sqlCa) 'not 136' ,
'\n'sqlCaMsg() '==>' ca', hex='c2x(ca)
return sqlCa
endProcedure sqlRx2Ca
/*--- extract the fields from the SqlCA and put it to rexx vars ------*/
sqlCA2Rx: procedure expose m. ,
sqlCode sqlErrMc sqlErrP sqlErrD. sqlWarn. sqlState
parse arg ca
numeric digits 10
if length(ca) < 136 | c2d(substr(ca, 9, 4), 4) <> 136 then
call err 'bad sqlCa len' length(ca) 'not 136:' ca', hex='c2x(ca)
sqlCode = c2d(substr(ca, 13 ,4), 4)
sqlErrMC = substr(ca, 19, c2d(substr(ca, 17, 2), 2))
sqlErrP = substr(ca, 89, 8)
do ix=1 to 6
sqlErrD.ix = c2d(substr(ca, 93 + 4 * ix, 4), 4)
end
do ix=0 to 10
sqlWarn.ix = substr(ca, 121 + ix, 1)
end
sqlState = substr(ca, 132, 5)
return sqlCode
endProcedure sqlCA2Rx
/*--- concat the sql warnings with Separator sep --------------------*/
sqlWarnCat: procedure expose m. sqlWarn.
parse arg sep
return sqlWarn.0 || sep,
|| sqlWarn.1||sqlWarn.2||sqlWarn.3||sqlWarn.4||sqlWarn.5||sep ,
|| sqlWarn.6||sqlWarn.7||sqlWarn.8||sqlWarn.9||sqlWarn.10||sep
endProcedure sqlWarnCat
/*--- make the text for sqlWarnings ----------------------------------*/
sqlMsgWarn: procedure expose m. sqlWarn.
r = ''
text =' 1=W var truncated, 1=S scrollable, 1=N nonScrollable,' ,
'2=W nulls in aggregate,' ,
'3=W more cols than vars,' ,
'3=Z more result sets than locators,' ,
'4=W no where, 4=D sensitive dynamic, 4=I insensitive,' ,
'4=S sensitive static,' ,
'5=W not valid sql, 5=1 readOnly, 5=2 readDelete,' ,
'5=3 readDeleteUpdate,' ,
'6=W day changed to month range,' ,
'7=W dec digits truncated,' ,
'8=W char substituted,' ,
'9=W arith excep in count, 9=Z multipe result sets,' ,
'10=W char conversion err in ca,'
do wx = 1 to 10
w = sqlWarn.wx
if w = ' ' then
iterate
t = wx'='w
cx = pos(' 'wx'='w' ', text)
ex = pos(',' , text, cx + 1)
if cx > 0 & ex > cx then
r = r substr(text, cx+1, ex-cx)
else
r = r wx'='w '?,'
end
r = strip(r, 't', ',')
if r = '' & sqlwarn.0 <> '' then
call err 'sqlWarn.0='sqlWarn.0 'but all warns empty'
return r
endProcedure sqlMsgWarn
/*--- show in the source src the point pos (where error occured)
a few lines from src around pos and arrow to pos ----------*/
sqlMsgSrcPos: procedure expose m.
parse arg src, pos
liLe = 68
liCn = 3
afLe = 25
t1 = space(left(src, pos), 1)
t2 = left(' ', substr(src, pos, 1) == ' ' ,
| substr(src, pos+1, 1) == ' ') ,
|| space(substr(src, pos+1), 1)
afLe = min(afLe, length(t2))
if length(t1) + afLe > liLe * liCn then
t1 = '...'right(t1, liLe * liCn - afLe -3)
else if length(t1)+length(t2) > liLe then
t1 = left(' ', (liCn * liLe - length(t1) -afLe) // liLe)||t1
pL = length(t1) // liLe
if length(t2) <= liLe-pL then
tx = t1 || t2
else
tx = t1 || left(t2, liLe-pL-3)'...'
res = '\nsrc' strip(substr(tx, 1, liLe), 't')
do cx=1+liLe by liLe to length(tx)
res = res || '\n +' strip(substr(tx, cx, liLe), 't')
end
loc = 'pos' pos 'of' length(src)
if length(loc)+6 < pL then
return res'\n >' right('>>>'loc'>>>', pL)
else
return res'\n >' left('', pL-1)'<<<'loc'<<<'
endProcdedure sqlMsgSrcPos
/*--- get the hostVars in the sql in src and the word before ---------*/
sqlHostVars: procedure expose m.
parse arg src, cnt, st
cx = 1
sx = 0
do cnt
cx = pos(':', src, cx) + 1
if cx < 2 then
leave
if pos(substr(src, cx, 1), m.mAlfRex1) < 1 then
iterate
ex = verify(src, m.mAlfRexR, 'n', cx)
if ex - cx > 100 then
iterate
sx = sx + 1
if ex < 1 then
m.st.var.sx = substr(src, cx)
else
m.st.var.sx = substr(src, cx, ex - cx)
/* search word before */
do bE = cx-2 by -1 to 1 ,
while substr(src, bE, 1) == ' '
end
do bB = bE by -1 to max(1, bE-20),
while pos(substr(src, bB, 1), m.ut.alfa) > 0
end
if bB < bE & bB >= 0 then
m.st.bef.sx = substr(src, bB+1, bE-bB)
else
m.st.bef.sx = ''
end
m.st.0 = sx
return sx
endProcedure sqlHostVars
/*--- find the name of hostvar, by index or by before ----------------*/
sqlHostVarFind: procedure expose m.
parse arg st, fnd
if datatype(fnd, 'n') & fnd <= m.st.0 then
return m.st.var.fnd
do ix=1 to m.st.0
if translate(m.st.bef.ix) = fnd then
return m.st.var.ix
end
return ''
endSubroutine sqlHostVarFind
/* copy sqlRx end **************************************************/
/* copy csi begin ***************************************************
csi interface: see dfs managing catalogs appendix c
returncode/reason see message IDC3009I
**********************************************************************/
/*--- specify dsn mask and fields to start a csi catalog search --------
arguments:
m objectPointer
dsnMask specifies the dsns with wildcards:
% 1 character
* 0 - n character in one level
** 0 - n levels
fields a (space separated) list of field names -------------*/
csiOpen: procedure expose m.
parse arg m, dsnMask, fields
m.m.fld.0 = words(fields)
ffix = d2c(m.m.fld.0, 2)
do x=1 to m.m.fld.0
m.m.fld.x = translate(word(fields, x))
ffix = ffix || left(m.m.fld.x, 8)
end
if dsnMask \== '' & pos('*', dsnMask) < 1 then
dsnMask = dsnMask'.**'
m.m.filt = left(dsnMask, 149) ,
|| left('Y', 3) , /* resume offset 149 */
|| ffix /* csiNumEn offset 152 */
WORKLEN = 1024 * 64
m.m.work = D2C(WORKLEN,4) || COPIES('00'X,WORKLEN-4)
m.m.pos = workLen + 1
return
endProcedure csiOpen
/*--- put the next dsn into m.o and m.o.* (for other fields)
return 1 if next dsn exists 0 otherwise ------------------------*/
csiNext: procedure expose m.
parse arg m, o
usedL = C2D(SUBSTR(m.m.work,9,4)) /* GET AMOUNT OF WORK AREA USED */
px = m.m.pos
do forever
if px > usedL then do
if substr(m.m.filt, 150, 1) \== 'Y' then do
m.m.pos = px
m.o = ''
return 0
end
reason = left('', 4)
ADDRESS LINKPGM 'IGGCSI00 reason m.'m'.filt m.'m'.work'
if rc == 0 & substr(reason, 3, 2) == '0000'x then
nop
else if rc == 4 & substr(reason, 3, 2) == '0464'x then
say 'data set entry with error'
else
call err 'call csi returns' rc,
'rc' c2d(substr(reason, 4,1)),
'reason' c2d(substr(reason, 3,1)),
'module' substr(reason, 1,2)
usedL = C2D(SUBSTR(m.m.work,9,4)) /* GET WORK AREA USED */
numFD = C2D(SUBSTR(m.m.work,13,2)) /* no flds + 1 */
if numFd <> m.m.fld.0 + 1 then
call err 'csiNumFd' numFd 'not' m.m.fld.0 '+' 1
px = 15
iterate
end
eType = substr(m.m.work, px+1, 1)
m.o = strip(substr(m.m.work, px+2, 44), 't')
flag = substr(m.m.work, px, 1)
/* say 'eType' eType m.o 'flag' c2x(flag) */
if eType == '0' then do
if flag \== '00'x & flag \== '40'x then
call err 'flag' c2x(flag) 'for catalog' m.o
px = px + 50 /* length of catalog entry */
iterate
end
else do
if \ abbrev(x2b(c2x(flag)), '101') then
call err 'call csi entry flag' x2b(c2x(flag)),
'rc' c2d(substr(m.m.work, px+49,1)),
'reason' c2d(substr(m.m.work, px+48,1)),
'module' substr(m.m.work, px+46, 2),
'for entry' m.o,
'see qw IDC3009I'
py = px + 46
tl = c2d(substr(m.m.work, py, 2))
pl = py + 4
pf = py + m.m.fld.0 * 2 + 4
do fx = 1 to m.m.fld.0
fi = m.m.fld.fx
fl = c2d(substr(m.m.work, pl, 2))
m.o.fi = substr(m.m.work, pf, fl)
if fi = 'MGMTCLAS' then
m.o.fi = substr(m.o.fi, 3, c2d(left(m.o.fi ,2)))
else if wordPos(fi, 'COMUDSIZ NOBYTTRK') > 0 then
m.o.fi = c2d(m.o.fi)
pf = pf + fl
pl = pl + 2
end
if py + tl <> pf then
call err 'length mismatch for entry' m.o
m.m.pos = pf
return 1
end
end
endProcedure csiNext
/*--- if dsn is arcived return 'arcive'
if dsn is tape return 'tape'
otherwise return managment class ------------------------------*/
csiArcTape: procedure expose m.
parse arg vo, cl, dt, dsn
if vo = '' then
say err '||| no volume for dsn' dsn
else if vo = 'ARCIVE' then
res = 'arcive'
else if cl <> '' then
res = cl
else if abbrev(vo, 'SHR') then
res = 'SHR'
else
res = 'tape'
if res = 'arcive' then
return res
/*if abbrev(res, 'ar') \= abbrev(dt, '00'x) , */
if abbrev(res, 'ta') \= abbrev(c2x(left(dt, 1)), '7') ,
| (left(res, 1) >= 'A') \= abbrev(dt, '30'x) then
say '||| mismatch cl' cl 'vo' vo 'dt' c2x(dt) 'dsn' dsn
return res
endProcedure csiArcTape
/* copy csi end ******************************************************/
/* copy csm begin ******************************************************
interface to csm,
it is integrate with adrTso, eg. dsnAlloc , 'RZ3/..' uses csm
***********************************************************************/
adrCsm:
return adrTso('csmExec' arg(1), arg(2))
endProcedure adrCsm
csmCopy: procedure expose m.
parse arg csnFr, csnTo, retOk
if dsnGetMbr(csnTo) \= '' ,
& dsnGetMbr(csnFr) <> dsnGetMbr(csnTo) then
call err 'member rename' csnFr 'to' csnTo
parse value csmSysDsn(csnFr) with sysFr '/' dsnFr
parse value csmSysDsn(csnTo) with sysTo '/' dsnTo
if sysTo = '*' then do
old = sysDsn("'"dsnTo"'")
end
else if sysFr = '*' then do
pdsTo = dsnSetMbr(dsnTo)
al = "SYSTEM("sysTo") DDNAME(COPYTo)",
"DATASET('"pdsTo"') DISP(SHR)"
alRes = dsnAlloc(systo'/'pdsTo, ,'COPYTO', '*')
if datatype(alRes, 'n') then do
/* wir müssen es selbst allozieren csmxUtil
vergisst management class ||||| */
say 'could not allocate' al
say 'trying to create'
rc = listDsi("'"dsnSetMbr(dsnFr)"' SMSINFO")
if rc = 0 then
mv = ''
else if rc = 4 & sysReason = 19 then do
mv = 'UNITCNT(30)'
say 'multi volume' mv
end
else if rc \= 0 then
call err 'listDsi rc' rc 'reason' sysReason,
sysMsgLvl1 sysMsgLvl2
al = left(al, length(al)-4)'CAT)'
if right(sysDsSms, 7) == 'LIBRARY' ,
| abbrev(sysDsSms, 'PDS') then
al = al 'DSNTYPE(LIBRARY)'
if sysUnits = 'TRACK' then
sysUnits = 'TRACKS'
al = al "DSORG("sysDSorg") MGMTCLAS("sysMgmtClass")",
"RECFM("sysREcFM") LRECL("SYSLRECL")",
"blksize("sysBLkSIZE")",
"SPACE("sysPrimary"," sysSeconds")" sysUnits mv
call adrCsm "allocate" al
end
call adrTso 'free dd(copyTo)'
end
c = "'COPY" sysFr"/''"dsnFr"'' TO" ,
sysTo"/''"dsnSetMbr(dsnTo)"'' REPLACE'"
csmRc = adrTso("exec 'CSM.RZ1.P0.EXEC(CSRXUTIL)'" c , retOk)
if sysTo = '*' & old <> 'OK' then do
/* csm normally does not set mgmtclass - avoid delete | */
call adrTso "ALTER '"dsnTo"' mgmtclas(COM#A091)"
end
return csmRc
endProcedure csmCopy
csmAlloc: procedure expose m.
parse arg dsn dd disp rest ':' nn, retRc
sys = ''
a2 = ''
parse value csmSysDsn(dsn) with sys '/' dsn
if disp = '' then
disp = 'shr'
al = "SYSTEM("sys") DDNAME("dd")"
if dsn <> '' then do
a2 = "DATASET('"dsnSetMbr(dsn)"')"
mbr = dsnGetMbr(dsn)
if mbr <> '' then
a2 = a2 'MEMBER('mbr')'
end
if abbrev(disp, 'SYSOUT(') then
a2 = a2 disp
else
a2 = a2 "DISP("disp")"
if retRc <> '' | nn = '' then do
alRc = adrCsm('allocate' al a2 rest, retRc)
if alRc <> 0 then
return alRc
return dd 'call adrTso "free dd('dd')";'
end
do retry=0 by 1
alRc = adrCsm('allocate' al a2 rest, '*')
if alRc = 0 then
return dd 'call adrTso "free dd('dd')";'
if retry > 0 | nn = '' | wordPos(disp, 'OLD SHR') < 1 then
return err('cmsAlloc rc' alRc 'for' al rest)
say 'csmAlloc rc' alRc 'for' al a2 rest '...trying to create'
nn = al 'disp(cat)' dsnCreateAtts(dsn, nn, 1)
call adrCsm 'allocate' nn
call adrTso 'free dd('dd')'
end
endProcedure csmAlloc
csmSysDsn: procedure expose m.
parse upper arg dsn, withStar
if pos('/', dsn) < 1 then
sys = '*'
else
parse var dsn sys '/' dsn
if sys <> '' & sys <> '*' & sys <> sysvar(sysnode) then
return sys'/'dsn
else if withStar == 0 then
return dsn
else
return '*/'dsn
endProcedure csmSysDsn
/* copy csm end********************************************************/
/* copy adrIsp begin *************************************************/
/**********************************************************************
lmd: catalog read
call sequence: lmdBegin, lmdNext*, lmdEnd
mit lmd service (mit save in file und read,
weil list zu langsam und listcat abstürzt)
1. arg (grp) als group dataset für lmd save
und dd name für file read
***********************************************************************/
lmdBegin: procedure expose m.
parse arg grp, lev
call adrIsp 'lmdinit listid(lmdId) level('lev')'
res = adrIsp('lmdlist listid(&lmdId) option(save) group('grp')', 4)
call adrIsp 'lmdfree listid(&lmdId)'
if res = 0 then do
call trc timing() 'lmdlist save' grp lev
call adrTso 'alloc dd('grp') shr dsn('grp'.datasets)'
end
else do
call trc 'no datasets found' timing() 'lmdlist save' grp lev
call adrTso 'alloc dd('grp') dummy'
end
call readDDBegin grp
return /* end lmdBegin */
lmdNext:
parse arg ggGrp, ggSt, withVolume
if \ readDD(ggGrp, ggSt) then
return 0
if withVolume \== 1 then
do ggIx=1 to value(ggSt'0')
x = value(ggSt || ggIx, word(value(ggSt || ggIx), 1))
end
return 1
endSubroutin lmdNext
lmdEnd: procedure expose m.
parse arg grp
call readDDEnd grp
call adrTso 'free dd('grp')'
return /* end lmdEnd */
lmd: procedure expose m.
parse arg lev, withVol
call lmdBegin gg1, lev
do while lmdNext(gg1, q., withVol)
do x=1 to q.0
call out q.x
end
end
call lmdEnd gg1
return
endProcedure lmd
/**********************************************************************
member list of a pds:
call sequence x=lmmBegin(dsn) lmmNext(x) * lmmEnd(x)
***********************************************************************/
lmm: procedure expose m.
parse arg dsn
id = lmmBegin(dsn)
do ix=1 by 1
m = lmmNext(id)
if m = '' then
leave
call out m
end
call lmmEnd id
return
endProcedure lmm
lmmBegin: procedure expose m.
parse arg dsn
mbr = dsnGetMbr(dsn)
pds = dsnSetMbr(dsn, )
call adrIsp "LMINIT DATAID(lmmId) DATASET('"pds"') ENQ(SHRW)"
call adrIsp "LMOPEN DATAID("lmmId") OPTION(INPUT) "
res = lmmId
if mbr <> '' then
res = res 'pattern('mbr')'
return res
endProcedure lmmBegin
lmmEnd: procedure expose m.
parse arg lmmId opt
call adrIsp "LMMLIST DATAID("lmmId") option(free)", 8
call adrIsp "LMCLOSE DATAID("lmmId")"
call adrIsp "LMFREE DATAID("lmmId")"
return
endProcedure lmmEnd
lmmNext: procedure expose m.
parse arg lmmId opt
if adrIsp("LMMLIST DATAID("lmmid")" ,
"OPTION(LIST) MEMBER(Mbr)" opt, 4 8) = 0 then
return strip(mbr)
else
return ''
endProcedure lmmNext
lmmRm: procedure expose m.
parse arg dsn, mbrs
mbrs = dsnGetMbr(dsn) mbrs
pds = dsnSetMbr(dsn, )
call adrIsp "LMINIT DATAID(lmmId) DATASET("pds") ENQ(SHRW)"
call adrIsp "LMOPEN DATAID("lmmId") OPTION(OUTPUT) "
err = ''
do wx=1 to words(mbrs)
m1 = word(mbrs, wx)
rr = adrIsp("lmmDel dataid("lmmId") member("m1")", 0 8 12)
if rc = 0 then
say 'removed' m1 'from' pds
else if rc = 8 then
say 'not found' m1 'in' pds
else do
err = 'error deleting' m1 'in' pds 'rc' rr strip(zerrlm)
say err
leave
end
end
call adrIsp "LMCLOSE DATAID("lmmId")"
call adrIsp "LMFREE DATAID("lmmId")"
if err <> '' then
call err err
return
endProcedure lmmRm
/*--- address ispf with error checking -------------------------------*/
adrIsp:
parse arg ggIspCmd, ggRet
address ispexec ggIspCmd
if rc = 0 then return 0
else if ggRet == '*' then return rc
else if wordPOS(rc, ggRet) > 0 then return rc
else
call err 'adr ispExec rc' rc 'in' ggIspCmd':' strip(zerrlm)
endSubroutine adrIsp
/*--- address editor with error checking -----------------------------*/
adrEdit:
parse arg ggEditCmd, ggRet
address isrEdit ggEditCmd
if rc = 0 then return 0
else if ggRet == '*' then return rc
else if wordPOS(rc, ggRet) > 0 then return rc
else
call err 'adr isrEdit rc' rc 'for' ggEditCmd
endSubroutine adrEdit
/* copy adrIsp end *************************************************/
/* copy adrTso begin *************************************************/
/*--- send ggTsoCmd to tso, fail if rc <> 0 or not listed in ggRet ---*/
adrTso:
parse arg ggTsoCmd, ggRet
address tso ggTsoCmd
if rc == 0 then return 0
else if ggRet == '*' then return rc
else if wordPos(rc, ggRet) > 0 then return rc
else
call err 'adrTso rc' rc 'for' ggTsoCmd
return /* end adrTso */
/*--- format dsn from tso format to jcl format -----------------------*/
dsn2jcl: procedure expose m.
parse upper arg dsn ., addPrefix
if left(dsn,1) = "'" then
return strip(dsn, 'b', "'")
sp = sysvar('SYSPREF')
if sp == '' then
sp = userid()
cx = pos('~', dsn)
if cx < 1 & addPrefix == 1 then
return sp'.'dsn
do while cx \== 0
le = left(dsn, cx-1)
ri = substr(dsn, cx+1)
if right(le, 1) == '.' | left(ri, 1) == '.' then
dsn = le || sp || ri
else
dsn = le || left('.', le \== '') || sp ,
|| left('.', ri \== '') || ri
cx = pos('~', spec, cx)
end
return dsn
endProcedure dsn2Jcl
/*--- format dsn from jcl format to tso format -----------------------*/
jcl2dsn: procedure expose m.
parse arg dsn .
return "'"dsn"'"
endProcedure jcl2dsn
dsnSetMbr: procedure expose m.
parse arg dsn, mbr
bx = pos('(', dsn)
if bx > 0 then
dsn = strip(left(dsn, bx-1))
if mbr <> '' then
dsn = dsn'('strip(mbr)')'
return dsn
endProcedure dsnSetMbr
dsnGetMbr: procedure expose m.
parse arg dsn
lx = pos('(', dsn)
rx = pos(')', dsn, lx+1)
if lx < 1 then
return ''
else if lx < rx then
return substr(dsn, lx+1, rx-lx-1)
else
return strip(substr(dsn,lx+1))
endProcedure dsnGetMbr
/**********************************************************************
io: read or write a dataset with the following callsequences:
read: readDDBegin, readDD*, readDDEnd
write: writeBegin, writeDD*, writeEnd
readDD returns true if data read, false at eof
***********************************************************************/
/*--- prepare reading from a DD --------------------------------------*/
readDDBegin: procedure expose m.
parse upper arg ggDD
call errAddCleanup 'call readDDEnd' ggDD', "*"'
return /* end readDDBegin */
/*--- read from DD ggDD into ggSt, return false at eof ---------------*/
readDD:
parse arg ggDD, ggSt, ggCnt
if ggCnt = '' then
ggCnt = 100
call adrTso 'execio' ggCnt 'diskr' ggDD '(stem' ggSt')', 2
return (value(ggSt'0') > 0)
return /* end readDD */
/*--- finish reading DD ggDD ----------------------------------------*/
readDDEnd: procedure expose m.
parse upper arg ggDD, ggRet
call errRmCleanup 'call readDDEnd' ggDD', "*"'
return adrTso('execio 0 diskr' ggDD '(finis)', ggRet)
endProcedure readDDEnd
/*--- prepare writing to DD ggDD -------------------------------------*/
writeDDBegin: procedure expose m.
parse upper arg ggDD
/* ensure file is erased, if no records are written */
call adrTso 'execio' 0 'diskw' ggDD '(open)'
call errAddCleanup 'call writeDDEnd' ggDD', "*"'
return /* end writeDDBegin */
/*--- write to gg ggDD from stem ggSt, ggCnt records -----------------*/
writeDD:
parse arg ggDD, ggSt, ggCnt
if ggCnt == '' then
ggCnt = value(ggst'0')
call adrTso 'execio' ggCnt 'diskw' ggDD '(stem' ggSt')'
return
endSubroutine writeDD
/*--- end writing to dd ggDD (close) --------------------------------*/
writeDDEnd: procedure expose m.
parse upper arg ggDD, ggRet
call errRmCleanup 'call writeDDEnd' ggDD', "*"'
return adrTso('execio 0 diskw' ggDD '(finis)', ggRet)
endProcedure writeDDEnd
/*--- readNx: read next line, using buffer ---------------------------*/
/*--- begin: allocate dsnSpec and ini ------------------------ -------*/
readNxBegin: procedure expose m.
parse arg m, m.m.dsn, m.m.dd, m.m.Cnt
if m.m.dd = '' then
m.m.dd = 'DDNX'
if m.m.cnt = '' then
m.m.cnt = 1000
m.m.cx = m.m.cnt + 999
m.m.buf0x = 0
m.m.0 = 0
m.m.free = subword(dsnAlloc('dd('m.m.dd')' m.m.dsn), 2)
call readDDBegin m.m.dd
return m
endProcedure readDDNxBegin
/*--- return the stem of the next line, or '' at end -----------------*/
readNx: procedure expose m.
parse arg m
m.m.cx = m.m.cx + 1
if m.m.cx <= m.m.0 then
return m'.'m.m.cx
m.m.buf0x = m.m.buf0x + m.m.0
if \ readDD(m.m.dd, 'M.'m'.', m.m.cnt)then
return ''
m.m.cx = 1
return m'.1'
endProcedure readDDNx
/*--- return the stem of the curr line, '' at end --------------------*/
readNxCur: procedure expose m.
parse arg m
if m.m.cx <= m.m.0 then
return m'.'m.m.cx
else
return ''
endProcedure readNxCur
/*--- return the position (line number) of reader
plus le characters of the current line (default 50) ------*/
readnxPos: procedure expose m.
parse arg m, le
li = m'.'m.m.cx
li = strip(m.li, 't')
if arg() < 2 then
le = 50
if le < 1 then
li = ''
else if length(li) <= le then
li = ':' li
else
li = ':' left(li, le-3)'...'
return 'line' (m.m.buf0x + m.m.cx)li
endProcedure readnxPos
/*--- close and deallocate ------------------------------------------*/
readNxEnd: procedure expose m.
parse arg m
call readDDEnd m.m.dd
interpret m.m.free
return
endProcedure readDDNxEnd
/*--- standardise a dsn spec
word1 dsName or -
word2 dd or -
word3 disp or -
word4 to first : attributes in tso format
after first : attributes for new allocation
----------------------------------------------------------------------*/
dsnSpec: procedure expose m.
parse upper arg spec
rr = '' /* put leading - in separate words */
do sx=1 while words(rr) < 3 & wx \= ''
wx = word(spec, sx)
do while abbrev(wx, '-') & words(rr) < 3
wx = substr(wx, 2)
rr = rr '-'
end
rr = rr wx
end
spec = rr subWord(spec, sx)
na = ''
dd = ''
di = ''
if left(spec, 1) = '&' then /* external spec is handled ok */
spec = strip(substr(spec, 2))
do wx=1 by 1
w = word(spec, wx)
if w = '' | abbrev(w, '.') | abbrev(w, ':') then
leave
else if wordPos(w, 'OLD SHR MOD NEW')>0 | abbrev(w, 'SYSO') then
di = w
else if w = 'CATALOG' then
di = di w
else if abbrev(w, 'DD(') then
dd = substr(w, 4, length(w)-4)
else if abbrev(w, 'DSN(') then
na = strip(substr(w, 5, length(w)-5))
else if na == '' then
na = dsn2jcl(w)
else if dd == '' then
dd = w
else if di == '' then
di = w
else
leave
end
if na == '' then
na = '-'
else if abbrev(na, "'") then
na = substr(na, 2, length(na)-2)
if dd == '' then dd = '-'
if di == '' then di = '-'
re = subword(spec, wx)
if abbrev(re, '.') then
re = substr(re, 2)
return na dd di re
endProcedure dsnSpec
/*--- alloc a dsn with dsnAlloc
if the dsn is inuse wait and retry
until either the allocation is successfull
or the timeout occurs --------------------------------------*/
dsnAllocWait: procedure expose m.
parse upper arg spec, pDi, pDD, timeOut
x = max(1, arg() - 1)
do rt=0
m.adrTsoAl.1 = ''
m.adrTsoAl.2 = ''
m.adrTsoAl.3 = ''
call outtrap m.adrTsoAl.
res = dsnAlloc(spec, pDi, pDD, '*')
call outtrap off
if \ abbrev(res, ' ') then
return res
msg = m.adrTsoAl.1'\n'm.adrTsoAl.2'\n'm.adrTsoAl.3
if rt > timeOut & timeOut \== '' then
return err('timeout allocating' spec time() '\n'msg)
if pos('DATA SET IS ALLOCATED TO ANOTHER', msg) < 1 then
return err('allocating' spec'\n'msg)
say time() 'sleep and retry alloc' spec
call sleep 1, 0
end
endProcedure dsnAllocWait
/*--- alloc a dsn or a dd
spec '-'<ddName>
datasetName? disposition? '.'? attributes? (':' newAtts)?
disp default disposition
dd default dd name
retRc erlaubte ReturnCodes (leer = 0)
returns if ok then ddName <rexx for free> otherwise rc -----*/
dsnAlloc: procedure expose m.
parse upper arg spec, pDi, pDD, retRc
parse value dsnSpec(spec) with na dd di rest
if na = '-' then
m.dsnAlloc.dsn = ''
else
m.dsnAlloc.dsn = na
if na == '-' & dd \== '-' & di == '-' & rest = '' then
return dd
if dd == '-' & pDD \== '' then
dd = pDD
if dd == '-' then
dd = 'DD*'
dd = tsoDD(dd)
if di = '-' & pDi \== '' then
di = pDi
if di = '-' then
di = 'SHR'
else if pos('(', na) < 1 then
nop
else if di = 'MOD' then
call err 'disp mod for' na
else
di = 'SHR'
if pos('/', na) > 0 then
return csmAlloc(na dd di rest, retRc)
else
return tsoAlloc(na dd di rest, retRc)
endProcedure dsnAlloc
/*--- find a free dd with prefix dd ----------------------------------*/
tsoDD: procedure expose m.
parse arg dd, f
if m.err.ispf then
call adrIsp 'vget wshTsoDD shared', 0 8
else if symbol('m.tso.tsoDD') == 'VAR' then
wshTsoDD = m.tso.tsoDD
else
wshTsoDD = ''
if f == '-' then do
px = wordPos(dd, wshTsoDD)
if px < 1 then
call err 'tsoDD dd' dd 'not used' wshTsoDD
wshTsoDD = strip(subword(wshTsoDD, 1, px-1) ,
subWord(wshTsoDD, px+1))
end
else do
if right(dd, 1) = '*' then do
dd = left(dd, length(dd)-1) || m.err.screen
cx = lastPos(' 'dd, ' 'wshTsoDD)
if cx < 1 then
dd = dd'1'
else do
old = word(substr(wshTsoDD, cx), 1)
if datatype(substr(old, length(dd)+1), 'n') then
dd = dd || (substr(old, length(dd)+1) + 1)
else
call err 'tsoDD old' old 'suffix not numeric dd' dd
end
end
if wordPos(dd, wshTsoDD) > 0 then
call err 'tsoDD dd' dd 'already used' wshTsoDD
wshTsoDD = strip(wshTsoDD dd)
end
if m.err.ispf then
call adrIsp 'vPut wshTsoDD shared'
m.tso.tsoDD = wshTsoDD
return dd
endProcedure tsoDD
tsoAlloc: procedure expose m.
parse arg na dd disp rest ':' nn, retRc
c = 'alloc dd('dd')' disp
if na \== '-' then
c = c "DSN('"na"')"
else if disp = 'NEW' and nn \== '' then
c = c dsnCreateAtts(,nn)
call outtrap m.adrTsoAl.
alRc = adrTso(c rest, '*')
call outtrap off
if alRc = 0 then do
call errAddCleanup 'call tsoFree' dd', "*"'
return dd 'call tsoFree' dd';'
end
if nn \= '' & wordPos(disp, 'OLD SHR') > 0 ,
& sysDsn("'"m.dsnAlloc.dsn"'") == 'DATASET NOT FOUND' then do
say 'tsoAlloc creating' c rest ':'nn
call adrTso 'alloc dd('dd') new catalog' dsnCreateAtts(na, nn)
call adrTso 'free dd('dd')'
return tsoAlloc(na dd disp rest, retRc)
end
do ax=1 to m.adrTsoAl.0
say m.adrTsoal.ax
end
if retRc = '*' | wordPos(alRc, retRc) > 0 then
return ' ' alRc
call err 'tsoAlloc rc' alRc 'for' c rest
endProcedure tsoAlloc
tsoAtts: procedure expose m.
parse arg dsn
rc = listDsi("'"dsn"' SMSINFO")
if rc = 0 then
mv = ''
else if rc = 4 & sysReason = 19 then do
mv = 'UNITCNT(30)'
say 'multi volume' mv
end
else if rc ^= 0 then
call err 'listDsi rc' rc 'reason' sysReason,
sysMsgLvl1 sysMsgLvl2
al = 'CAT'
al = ''
if right(sysDsSms, 7) == 'LIBRARY' ,
| abbrev(sysDsSms, 'PDS') then
al = al 'DSNTYPE(LIBRARY)'
if sysUnits = 'TRACK' then
sysUnits = 'TRACKS'
al = al "DSORG("sysDSorg") MGMTCLAS("sysMgmtClass")",
"DATACLAS("sysDataClass")" ,
"RECFM("translate('1 2 3', ' 'sysREcFM, ' 123')")",
"LRECL("SYSLRECL")",
"blksize("sysBLkSIZE")",
"SPACE("sysPrimary"," sysSeconds")" sysUnits mv
return al
endProcedure tsoAtts
tsoFree: procedure expose m.
parse arg dd, ggRet
call adrTso 'free dd('dd')', ggRet
call tsoDD dd, '-'
call errRmCleanup 'call tsoFree' dd', "*"'
return
endProcedure tsoFree
dsnCreateAtts: procedure expose m.
parse arg dsn, atts, forCsm
forCsm = forCsm == 1
aU = ' 'translate(atts)
if abbrev(atts, ':') then do
parse var atts a1 atts
bl = 32760
rl = substr(a1, 3)
if abbrev(a1, ':F') then do
if rl = '' then
rl = 80
recfm='f b'
bl = bl - (bl // rl)
end
else do
if rl = '' then
rl = bl-4
recfm = substr(a1, 2, 1) 'b'
end
if forCsm then
atts = atts "recfm("space(recfm, 0)") lrecl("rl")",
"blkSize("bl")"
else
atts = atts "recfm("recfm") lrecl("rl") block("bl")"
end
if pos('(', dsn) > 0 & pos(' DSNTYPE(', aU) < 1 ,
& pos(' DSORG(', aU) < 1 then
atts = atts 'dsntype(library) dsorg(po)'
if pos(' MGMTCLAS(', aU) < 1 then
atts = atts 'mgmtclas(COM#A091)'
if pos(' SPACE(', aU) < 1 then
if forCsm then
atts = atts 'space(10, 1000) cylinder'
else
atts = atts 'space(10, 1000) cyl'
if dsn == '' then
return atts
return "dataset('"dsnSetMbr(dsn)"')" atts
endProcedure dsnCreateAtts
/*--- check if a dataset is archive ------------------------------------
returns 'ok' if dataset on disk
'not' if dataset is not catalogued
'arc' if dataset archived
listDsi errorMsg otherwise ------------------*/
dsnArc: procedure expose m.
parse upper arg dsn
lc = listDsi("'"strip(dsn)"' noRecall")
if lc = 0 then
return 'ok'
else if lc=4 & sysReason = 19 then /* multiple volumes */
return 'ok'
else if lc=16 & sysReason = 5 then
return 'notCat'
else if lc=16 & sysReason = 9 then
return 'arc'
else
return 'listDsi cc='lc', sysReason='sysReason ,
'm2='sysMsgLvl2', m1='sysMsgLvl1
endProcedure dsnArc
/*--- read the dataset specified in ggDsnSpec to stem ggSt -----------*/
readDSN:
parse arg ggDsnSpec, ggSt
ggAlloc = dsnAlloc(ggDsnSpec, 'SHR', 'readDsN')
call adrTso 'execio * diskr' word(ggAlloc, 1) '(stem' ggSt' finis)'
interpret subword(ggAlloc, 2)
return
endSubroutine readDsn
/*--- write the dataset specified in ggDsnSpec from stem ggSt
write ggCnt records if not empty otherwise ggst0
if ggSay 1 then say ... records written to ... -------------*/
writeDSN:
parse arg ggDsnSpec, ggSt, ggCnt, ggSay
if ggCnt == '' then
ggCnt = value(ggst'0')
ggAlloc = dsnAlloc(ggDsnSpec, 'OLD', 'readDsN')
call adrTso 'execio' ggCnt 'diskw' word(ggAlloc, 1) ,
'(stem' ggSt 'open finis)'
interpret subword(ggAlloc, 2)
if ggSay == 1 | m.debug == 1 then
say ggCnt 'records written to' ggDsnSpec
return
endSubroutine writeDsn
copyDSN: procedure expose m.
parse arg frSpec, toSpec, ggSay
frDD = dsnAlloc(frSpec, 'SHR', 'FRDD')
toDD = dsnAlloc(toSpec, 'OLD', 'TODD')
call readDDBegin word(frDD, 1)
call writeDDBegin word(toDD, 1)
cnt = 0
do while readDD(word(frDD, 1), r.)
call writeDD word(toDD, 1), r.
cnt = cnt + r.0
end
call readDDEnd word(frDD, 1)
call writeDDEnd word(toDD, 1)
interpret ';' subword(frDD, 2) '; ; ;' subword(toDD, 2)
if ggSay == 1 | m.debug == 1 then
say cnt 'records copied from' frSpec 'to' to toSpec
return
endSubroutine writeDsn
/* copy adrTso end ****************************************************/
/* copy j begin *******************************************************
the j framework
jReset
jOpen
jClose
jRead
jWrite
***********************************************************************/
jRead: procedure expose m.
parse arg m, var
met = objMet(m, 'jRead')
if m.m.jReading then
interpret met
else
return err('jRead('m',' var') but not opened r')
endProcedure jRead
jReadO: procedure expose m.
parse arg m
if arg() > 1 then call err '??? old interface'
met = objMet(m, 'jReadO')
if m.m.jReading then
interpret met
else
return err('jReadO('m',' var') but not opened r')
endProcedure jReadO
jWrite: procedure expose m.
parse arg m, line
met = objMet(m, 'jWrite')
if \ m.m.jWriting then
return err('jWrite('m',' line') but not opened w')
interpret met
return
endProcedure jWrite
jWriteO: procedure expose m.
parse arg m, var
met = objMet(m, 'jWriteO')
if \ m.m.jWriting then
return err('jWriteO('m',' var') but not opened w')
interpret met
return
endProcedure jWriteO
jWriteAll: procedure expose m.
parse arg m, rdr
rdr = o2file(rdr)
met = objMet(m, 'jWriteAll')
if \ m.m.jWriting then
return err('jWriteAll('m',' rdr') but not opened w')
interpret met
return
endProcedure jWriteAll
jWriteNow: procedure expose m.
parse arg m, rdr
rdr = o2file(rdr)
interpret objMet(m, 'jWriteNow')
return
endProcedure jWriteNow
jCat: procedure expose m.
parse arg opt m
if m = '' then do
m = opt
opt = m.j.cWri
end
call jOpen m, opt
do ax=2 to arg()
call jWriteAll m, arg(ax)
end
call jClose m
return m
endProcedure jCat
jWriteNowImpl: procedure expose m.
parse arg m, rdr
call jOpen rdr, m.j.cRead
do while jRead(rdr, line)
call jWrite m, m.line
end
call jClose rdr
return
endProcedure jWriteNow
jWriteNowImplO: procedure expose m.
parse arg m, rdr
call jOpen rdr, m.j.cRead
do while assNN('li', jReadO(rdr))
call jWriteO m, li
end
call jClose rdr
return
endProcedure jWriteNow
/*--- reset JRW: fail if open, initialise ---------------------------*/
jReset: procedure expose m.
parse arg m, arg, arg2, arg3
if m.m.jReading == 1 | m.m.jWriting == 1 then
return err('still open jReset('m',' arg2')') / 3
m.m.jReading = 0
m.m.jWriting = 0
m.m.jUsers = 0
interpret objMet(m, 'jReset')
return m
endProcedure jReset
jOpen: procedure expose m.
parse arg m, opt
met = objMet(m, 'jOpen')
oUsers = m.m.jUsers
if opt = m.j.cRead then do
if m.m.jReading then
nop
else if m.m.jWriting then
return err('already opened for writing jOpen('m',' opt')')
else do
interpret met
m.m.jReading = 1
end
end
else if \ abbrev('>>', opt, 1) then do
return err('bad option' opt 'in jOpen('m',' opt')')
end
else do
if m.m.jWriting then
nop
else if m.m.jReading then
return err('already opened for reading jOpen('m',' opt')')
else do
interpret met
m.m.jWriting = 1
end
end
m.m.jUsers = oUsers + 1
return m
endProcedure jOpen
jClose: procedure expose m.
parse arg m
met = objMet(m, 'jClose')
oUsers = m.m.jUsers
if oUsers = 1 then do
interpret met
m.m.jReading = 0
m.m.jWriting = 0
end
else if oUsers < 1 then
call err 'jClose' m 'but already closed'
m.m.jUsers = oUsers - 1
return m
endProcedure jClose
/*--- cat the lines of the file together, with mid between lines,
fail if not all lines are strings -------------------*/
jCatLines: procedure expose m.
parse arg m, fmt
if abbrev(fmt, '-sql') then
return jCatSql(m, substr(fmt, 5))
else
fmt = '%s%qn %s%qe%q^'fmt
call jOpen m, m.j.cRead
if \ jRead(m, line) then do
call jClose m
return ''
end
res = f(fmt, m.line)
do while jRead(m, line)
res = res || f(fmt'%Qn', m.line)
end
call jClose m
return res || f(fmt'%Qe')
endProcedure jCatLines
/*--- cat the line of a file, using comments
fixline (with token wrapping) or separate lines -------*/
jCatSql: procedure expose m.
parse arg m, fLen
call jCatSqlReset m'.JCATSQL', , jOpen(m, '<'), fLen
res = jCatSqlNext(m'.JCATSQL')
call jClose m
return res
endProcedure jCatSql
jCatSqlReset: procedure expose m.
parse arg m, aSrc, m.m.rdr, m.m.fLen
call jCatSqlNL m, aSrc
return m
endProcedure jCatSqlReset
jCatSqlNL: procedure expose m.
parse arg m
if m.m.rdr \== '' then
if jRead(m.m.rdr, m'.SRC') then do
if m.m.fLen \== '' then
m.m.src = left(m.m.src, m.m.fLen)
else if m.m.src == '' then
m.m.src = ' '
else if substr(m.m.src, length(m.m.src), 1) \== ' ' then
m.m.src = m.m.src' '
m.m.pos = 1
return 1
end
m.m.pos = length(m.m.src)+1
return 0
endProcedure jCatSqlNl
jCatSqlNext: procedure expose m.
parse arg m, stop
res = ''
bx = m.m.pos
do forever
call sbUntil m, '"''-/'stop
if sbEnd(m) then do
res = res || substr(m.m.src, bx)
bx = 0
end
else if substr(m.m.src, m.m.pos, 2) = '--' then do
res = res || substr(m.m.src, bx, m.m.pos-bx)' '
bx = 0
end
else if substr(m.m.src, m.m.pos, 2) = '/*' then do
res = res || substr(m.m.src, bx, m.m.pos-bx)' '
do forever
px = pos('*/', m.m.src, m.m.pos)
if px > 0 then
leave
if \ jCatSqlNL(m) then
return res
end
bx = px+2
m.m.pos = bx
end
else if sbLit(m, ''' "') then do
c1 = m.m.tok
do while \ sbStrEnd(m, c1)
res = res || substr(m.m.src, bx)
if m.m.fLen \== '' then
if jCatSqlNl(m) then do
bx = m.m.pos
iterate
end
call err 'unclosed' c1 'string:' m.m.src
end
end
else if pos(substr(m.m.src, m.m.pos, 1), stop) > 0 then do
res = strip(res||substr(m.m.src, bx, m.m.pos-bx), 't')
call sbChar m, 1
if res <> '' then
return strip(res)
bx = m.m.pos
end
else if \ sbLit(m, '- /') then do
call err 'bad char at' substr(m.m.src, m.m.pos) 'in' m.m.src
end
if bx = 0 then
if jCatSqlNl(m) then
bx = m.m.pos
else
return strip(res)
end
endProcedure jCatSqlNext
jIni: procedure expose m.
if m.j.ini == 1 then
return
m.j.ini = 1
m.j.cRead = '<'
m.j.cWri = '>'
m.j.cApp = '>>'
call classIni
am = "call err 'call of abstract method"
c1 = classNew('n JRW u ORun, f JREADING v, f JWRITING v', 'm',
, "new return jReset("m.class.basicNew", arg, arg2, arg3)",
, "jRead" am "jRead('m',' var')'" ,
, "jReadO if \ jRead(m, 'J.GGVAR') then return '';",
"return s2o(m.j.ggVar)" ,
, "jWrite" am "jWrite('m',' line')'" ,
, "jWriteO call jWrite(m, o2string(var))" ,
, "jWriteAll call jWriteNowImpl m, rdr",
, "jWriteNow call jWriteNowImpl m, rdr",
, "jReset",
, "jOpen" am" jOpen('m',' opt')'" ,
, "jClose" ,
, "oRun call pipeWriteAll m",
, "o2String return jCatLines(m, fmt)",
, "o2File return m")
m.class.forceDown.c1 = c1'#new'
c2 = classNew('n JRWDeleg u JRW', 'm',
, "new return jReset("m.class.basicNew", arg)",
, "jRead return jRead(m.m.deleg, var)" ,
, "jReadO return jReadO(m.m.deleg)" ,
, "jWrite call jWrite(m.m.deleg, line)" ,
, "jWriteO call jWrite(m.m.deleg, var)" ,
, "jWriteAll call jWriteAll m.m.deleg, rdr",
, "jWriteNow call jWriteNow m.m.deleg, rdr",
, "jReset if arg \== '' then m.m.deleg = arg;",
"else call jReset m.m.deleg;",
, "jOpen call jOpen m.m.deleg,' opt; return m" ,
, "jClose call jClose m.m.deleg; return m" )
m.class.forceDown.c2 = c2'#new'
call classNew 'n JRWO u JRW', 'm',
, "jRead res = jReadO(m); if res == '' then return 0;" ,
"m.var = o2string(res); return 1" ,
, "jReadO" am "jReadO('m')'" ,
, "jWrite call jWriteO(m, s2o(var))" ,
, "jWriteO" am "jWriteO('m',' line')'",
, "jWriteAll call jWriteNowImplO m, rdr",
, "jWriteNow call jWriteNowImplO m, rdr",
am = "call err 'call errObject"
call classNew 'n JRWErr u JRW', 'm',
, "jWriteAll" er "jWriteAll 'm', rdr'",
, "jWriteNow" er "jWriteNow 'm', 'rdr'",
, "jClose" er "jClose 'm'"
call classNew 'n JSay u JRW', 'm',
, "jWrite say line" ,
, "jWriteO call classOut , var, 'outO: '",
, "jOpen if \ abbrev(opt, m.j.cWri) then",
"call err 'can only write JSay.jOpen('m',' opt')';" ,
"else m.m.jWriting = 1"
call classNew 'n JStem u JSay', 'm',
, "jReset m.m.stem = arg;",
"if \ dataType(m.arg.0, 'n') then m.arg.0 = 0" ,
, "jWrite call mAdd m.m.stem, line"
call classNew 'n JRWEof u JRW', 'm',
, "jRead drop m.var; return 0",
, "jOpen if pos('>', opt) > 0 then",
"call err 'can only read JRWEof.jOpen('m',' opt')';" ,
"else m.m.jReading = 1"
m.j.in = jOpen(oNew('JRWEof'), m.j.cRead)
m.j.errRead = "return err('jRead('m',' var') but not opened r')"
m.j.errReadO = "return err('jReadO('m',' var') but not opened r')"
m.j.errWrite = "return err('jWrite('m',' line') but not opened w')"
m.j.errWriteO= "return err('jWriteO('m',' var') but not opened w')"
call classNew "n JBuf u JRWO, f BUF s r", "m",
, "jOpen call jBufOpen m, opt",
, "jClose call oMutate m, 'JBuf'",
, "jReset call jBufReset m, arg",
, "jRead" m.j.errRead ,
, "jReadO" m.j.errReadO ,
, "jWrite" m.j.errWrite ,
, "jWriteO" m.j.errWriteO
call classNew "n JBufOR u JBuf", "m",
, "jRead return jBufORead(m, var)",
, "jReadO return jBufOReadO(m)"
call classNew "n JBufSR u JBuf", "m",
, "jRead return jBufSRead(m, var)",
, "jReadO return jBufSReadO(m)"
call classNew "n JBufOW u JBuf", "m",
, "jWrite call jBufOWrite m, line",
, "jWriteO call jBufOWriteO m, var"
call classNew "n JBufSW u JBuf", "m",
, "jWrite call jBufSWrite m, line",
, "jWriteO call jBufSWriteO m, var"
call classNew "n JBufTxt u JBuf, f MAXL v ", "m",
, "jReset call jBufReset m, arg; m.m.maxl = 80",
, "jWriteO call jBufWrite m, o2Text(var, m.m.maxl)"
return
endProcedure jIni
/*--- return a JRW from rdr or in ------------------------------------*/
j2Rdr: procedure expose m.
parse arg rdr
if oStrOrObj(rdr, m.j.in) then
return jBuf(ggStr)
else
return o2file(ggObj)
endProcedure j2Rdr
/* jstr is part of out interface --> inp2str */
inp2str: procedure expose m.
parse arg rdr, fmt
if oStrOrObj(rdr, m.j.in) then
return ggStr
else
return o2String(ggObj, fmt)
endProcedure inp2str
j2Buf: procedure expose m.
parse arg rdr
if oStrOrObj(rdr, m.j.in) then
return jBuf(ggStr)
if oClaInheritsOf(ggCla, 'JBuf') & m.ggObj.jUsers < 1 then
return ggObj
b = jOpen(jBuf(), m.j.cWri)
call jWriteNow b, o2File(ggObj)
return jClose(b)
endProcedure j2Buf
in: procedure expose m.
parse arg arg
return jRead(m.j.in, arg)
endProcedure in
inO: procedure expose m.
if arg() > 0 then call err '??? old interface'
return jReadO(m.j.in)
endProcedure in
out: procedure expose m.
parse arg line
call jWrite m.j.out, line
return 0
endProcedure out
outO: procedure expose m.
parse arg arg
call jWriteO m.j.out, arg
return
endProcedure outO
JRWDeleg: procedure expose m.
parse arg arg
return oNew('JRWDeleg', arg)
endProcedure JRWDeleg
/*--- jBuf: buffer read or write (supports datataypes) ---------------*/
jBuf: procedure expose m.
m = oNew('JBuf') /* calls jBufReset */
do ax=1 to arg()
m.m.buf.ax = arg(ax)
end
m.m.buf.0 = ax-1
m.m.allS = 1
return m
endProcedure jBuf
/*--- jBuf: buffer read or write (supports datataypes) ---------------*/
jBufTxt: procedure expose m.
m = oNew('JBufTxt') /* calls jBufReset */
do ax=1 to arg()
m.m.buf.ax = arg(ax)
end
m.m.buf.0 = ax-1
m.m.allS = 1
return m
endProcedure jBufTxt
jBufReset: procedure expose m.
parse arg m
m.m.stem = m'.BUF'
do ax=1 to arg() - 1
m.m.buf.ax = arg(ax+1)
end
m.m.buf.0 = ax-1
m.m.allS = 1
return m
endProcedure jBufReset
jBufOpen: procedure expose m.
parse arg m, opt
if opt == m.j.cRead then do
m.m.readIx = 0
if m.m.allS then
call oMutate m, 'JBufSR'
else
call oMutate m, 'JBufOR'
return m
end
if opt == m.j.cWri then do
m.m.buf.0 = 0
m.m.allS = 1
end
else if opt \== m.j.cApp then
call err 'jBufOpen('m',' opt') with bad opt'
if m.m.allS then
call oMutate m, 'JBufSW'
else
call oMutate m, 'JBufOW'
return m
endProcedure jBufOpen
jBufOWrite: procedure expose m.
parse arg m, line
call mAdd m'.BUF', s2o(line)
return
endProcedure jBufOWrite
jBufSWrite: procedure expose m.
parse arg m, line
call mAdd m'.BUF', line
return
endProcedure jBufWrite
jBufWriteStem: procedure expose m.
parse arg m, st
ax = m.m.buf.0
if m.m.allS then do
do sx=1 to m.st.0
ax = ax + 1
m.m.buf.ax = m.st.sx
end
end
else do
do sx=1 to m.st.0
ax = ax + 1
m.m.buf.ax = o2String(m.st.sx)
end
end
m.m.buf.0 = ax
return m
endProcedure jBufWrite
jBufOWriteO: procedure expose m.
parse arg m, ref
call mAdd m'.BUF', ref
return
endProcedure jBufOWriteO
jBufSWriteO: procedure expose m.
parse arg m, ref
cl = objClass(ref)
if cl = m.class.classV then do
call mAdd m'.BUF', m.ref
return
end
if cl == m.class.classW then do
call mAdd m'.BUF', substr(ref, 2)
return
end
do ax=1 to m.m.buf.0
m.m.buf.ax = s2o(m.m.buf.ax)
end
m.m.allS = 0
call oMutate m, 'JBufOW'
call mAdd m'.BUF', ref
return
endProcedure jBufWriteO
jBufOReadO: procedure expose m.
parse arg m
nx = m.m.readIx + 1
if nx > m.m.buf.0 then
return ''
m.m.readIx = nx
return m.m.buf.nx
endProcedure jBufOReadO
jBufSReadO: procedure expose m.
parse arg m
nx = m.m.readIx + 1
if nx > m.m.buf.0 then
return ''
m.m.readIx = nx
return s2o(m.m.buf.nx)
endProcedure jBufSReadO
jBufORead: procedure expose m.
parse arg m, var
nx = m.m.readIx + 1
if nx > m.m.buf.0 then
return 0
m.m.readIx = nx
m.var = o2String(m'.BUF.'nx)
return 1
endProcedure jBufORead
jBufSRead: procedure expose m.
parse arg m, var
nx = m.m.readIx + 1
if nx > m.m.buf.0 then
return 0
m.m.readIx = nx
m.var = m.m.buf.nx
return 1
endProcedure jBufRead
jBufTxtWriteO: procedure expose m.
parse arg m, ref
if m.m.allS \== 1 then
call err '1 \== allS' m.m.allS 'in jBufTxtWriteO('m',' ref')'
cl = objClass(ref, '?')
if cl = m.class.classV then
call mAdd m'.BUF', m.ref
else if cl == m.class.classW then
call mAdd m'.BUF', substr(ref, 2)
else if ref == '' then
call mAdd m'.BUF', '@ null object'
else if cl == '?' then
call mAdd m'.BUF', '@'ref 'class=???'
else do
l = '@'ref 'class='className(cl)
ff = oFlds(ref)
do fx=1 to m.ff.0 while length(l) < m.m.maxl + 3
if m.ff.fx == '' then
l = l', .='m.ref
else do
f1 = substr(m.ff.fx, 2)
l = l',' f1'='m.ref.f1
end
end
if length(l) > m.m.maxl then
l = left(l, m.m.maxl-3)'...'
call mAdd m'.BUF', l
end
return
endProcedure jBufTxtWriteO
/* copy j end *********************************************************/
/* copy o begin ******************************************************
an object is register for a class in o2c
a class has a list of parents in cParent
a class has a methodTable cMet with lazy initialization
if the parent is class OLazyMet, a methof found there is
a method generator
otherwise an existing method is simply copied
***********************************************************************/
oIni: procedure expose m.
if m.o.ini == 1 then
return
m.o.ini = 1
call mIni
m.o.escW = '!'
m.o.lazyGen = 'OLazyMetGen' /* lazy method generator */
call oAddCla m.o.lazyGen
return
endProcedure oIni
/*--- return whether cl is a currently defined class ----------------*/
oIsCla: procedure expose m.
parse arg cl
return symbol('m.o.cParent.cl') == 'VAR'
endProcedure oIsCla
/*--- add class cl with the given parents ---------------------------*/
oAddCla: procedure expose m.
parse arg cl, parents
if verifId(cl, '.') > 0 | pos('.', cl) <> lastPos('.', cl) then
call err 'bad class name' cl 'in oAddCla('cl',' parents')'
if oIsCla(cl) then
call err 'duplicate class' cl 'in oAddCla('cl',' parents')'
do px=1 to words(parents)
if \ oIsCla(word(parents, px)) then
call err word(parents, px) 'is no class' ,
'in oAddCla('cl',' parents')'
end
m.o.cParent.cl = parents
return
endProcedure oAddCla
/*--- add to class cl method met ------------------------------------*/
oAddMet: procedure expose m.
parse arg cl, met, cont
if \ oIsCla(cl) then
call err 'undefined class' cl 'in oAddMet('cl',' met',' cont')'
if symbol('m.o.cMet.cl.met') == 'VAR' then
call err 'duplicate method' met 'in oAddMet('cl',' met',' cont')'
m.o.cMet.cl.met = cont
return
endProcedure oAddMet
/*--- create an an object of the class className
and call it's new method ------------------------------------*/
oNew: procedure expose m.
parse arg cl, arg, arg2, arg3
if symbol('m.o.cParent.cl') \== 'VAR' then
cl = class4name(cl)
interpret oClaMet(cl, 'new')
endProcedure oNew
/*--- return the class of object obj --------------------------------*/
objClass: procedure expose m.
parse arg m
if symbol('m.o.o2c.m') == 'VAR' then
return m.o.o2c.m
else if abbrev(m, m.o.escW) then
return m.class.classW
else if arg() >= 2 then
return arg(2)
else
return err('no class found for object' m)
endProcedure objClass
oKindOf: procedure expose m.
parse arg obj, sup
cl = objClass(obj, '')
if cl == '' then
return 0
return oClaInheritsOf(cl, sup)
endProcedure oKindOf
oClaInheritsOf: procedure expose m.
parse arg cl, sup /* wkTst optimierung in classAdded */
if symbol('m.o.cParent.cl') \== 'VAR' then
cl = class4name(cl)
if symbol('m.o.cParent.sup') \== 'VAR' then
sup = class4name(sup)
if cl == sup then
return 1
do sx=1 to words(m.o.cParent.cl)
if oClaInheritsOf(word(m.o.cParent.cl, sx), sup) then
return 1
end
return 0
endProcedure oClaInheritsOf
/*--- return the code of method me of object m
set m to the address and ggClass to the class ---------------*/
objMet: procedure expose m. m ggClass
parse arg m, me
if symbol('m.o.o2c.m') == 'VAR' then
ggClass = m.o.o2c.m
else if abbrev(m, m.o.escW) then
ggClass = "w"
else if arg() >= 3 then
return arg(3)
else
return err('no class found for object' m)
if symbol('m.o.cMet.ggClass.me') == 'VAR' then
return m.o.cMet.ggClass.me
code = oClaMet(ggClass, me, '---')
if code \== '---' then
return code
else if arg() >= 3 then
return arg(3)
return err('no method' me 'in class' className(ggClass) ,
'of object' m)
endProcedure objMet
oClaMet: procedure expose m.
parse arg cl, me
if symbol('m.o.cMet.cl.me') == 'VAR' then
return m.o.cMet.cl.me
if \ oIsCla(cl) then do
c2 = class4Name(cl, '')
if c2 \== '' & oIsCla(c2) then do
cl = c2
if symbol('m.o.cMet.cl.me') == 'VAR' then
return m.o.cMet.cl.me
end
else do
if arg() >= 3 then
return arg(3)
else
return err('no class' cl 'in oClaMet('cl',' me')')
end
end
code = oLazyMetGen(m.o.lazyGen, cl, me)
do px = 1 to words(m.o.cParent.cl) while code == '---'
code = oClaMet(word(m.o.cParent.cl, px), me, '---')
end
if code == '---' then do
if arg() >= 3 then
return arg(3)
else
return err('no met' me 'in class' cl)
end
m.o.cMet.cl.me = code
return code
endProcedure oClaMet
oLazyMetGen: procedure expose m.
parse arg lg, cl, me
if symbol('m.o.cMet.lg.me') \== 'VAR' then
return '---'
interpret m.o.cMet.lg.me
endProcedure oLazyMetGen
/*--- return the stem of fieldnames of object m ---------------------*/
oFlds: procedure expose m.
parse arg m
return objMet(m, 'oFlds')
endProcedure oFlds
/*--- return the contents of field f navigation along path ----*/
oGet: procedure expose m.
parse arg obj, path, clazz
nullNew = 0
ret = oAccPath(obj, path, clazz)
if ret == 1 then
ret = oAccStr(m, cl)
if ret == 1 then
return str
return err(ret 'in oGet('obj',' path')')
endProcedure oGet
oAccStr: procedure expose m. str
parse arg m, cl
if cl == m.class.classV then
str = m.m
else if m.cl.valueCl == '' then
return 'no value @' m 'class' className(cl)
else if m.m == '' then
return 'null @' m 'class' className(cl)
else if abbrev(m, m.o.escW) then
str = substr(m ,2)
else
str = o2String(m.m)
return 1
endProcedure oAccStr
oGetO: procedure expose m.
parse arg obj, path, opt, clazz
nullNew = pos('n', opt) > 0
ret = oAccPath(obj, path, clazz)
if ret == 1 then
ret = oAccO(m, cl, opt)
if ret == 1 then
return ref
else
return err(ret 'in oGetO('obj',' path')')
endProcedure oGetO
oAccO: procedure expose m. ref
parse arg m, cl, opt
if cl == m.class.classV then do
ref = s2o(m.m)
end
else if m.cl \== 'r' then do
ref = m
end
else if m.m == '' then do
if opt == '-b' then do
m.m = jBuf()
end
else if opt == '-n' then do
rsn = oRefSetNew(m, cl)
if rsn \==1 then
return rsn
end
ref = m.m
end
else if objClass(m.m, 0) \== 0 then do
ref = m.m
end
else do
return 'no class for' m.m '@' m 'class' cl
end
return 1
endProcedure oAccO
oPut: procedure expose m.
parse arg obj, path, str
nullNew = 1
res = oAccPath(obj, path)
if res == 1 then
res = ocPut(m, cl, str)
if res == 1 then
return str
return err(res 'in oPut('obj',' path',' str')')
endProceudre oPut
ocPut: procedure expose m.
parse arg m, cl, str
if m.cl.valueCl == m.class.classV then
m.m = str
else if m.cl.valueCl \== '' then
m.m = s2o(str)
else
return 'no value @' m 'class' className(cl)
return 1
endProcedure ocPut
oPutO: procedure expose m.
parse arg obj, path, ref
nullNew = 1
res = oAccPath(obj, path)
if res == 1 then
res = ocPutO(m, cl, ref)
if res == 1 then
return ref
return err(ret 'in oPut('obj',' path',' ref')')
endProcedure oPutO
ocPutO: procedure expose m.
parse arg m, cl, ref
if m.cl.valueCl == m.class.classV then
m.m = o2string(ref)
else if m.cl.valueCl \== '' then
m.m = ref
else if m.cl.stemCl \== '' then
return 'implement put to stem'
else
return 'no value @' m 'class' className(cl)
return 1
endProcedure ocPutO
oClear: procedure expose m.
parse arg m
interpret objMet(m, 'oClear')
return m
endProcedure oClear
oClaClear: procedure expose m.
parse arg cla, m
interpret "drop cla;" oClaMet(cla, 'oClear')
return m
endProcedure oClaClear
oAccPath: procedure expose m. m cl nullNew
parse arg m, pa, cl
if cl == '' & m \== '' then do
cl = objClass(m)
end
if pa == '' then
return 1
call oClaMet cl, 'oFlds'
if abbrev(pa, m.class.cRef) ,
| (\ m.cl.hasFlds & abbrev(pa, m.class.cNav)) then do
if pa == m.class.cRef & m.cl.valueCl == m.class.classV then do
cl = m.class.classV
return 1
end
if (m.cl.valueCl == '' | m.cl.valueCl == m.class.classV) ,
& m.cl \== 'r' then
return 'no reference @' m 'class' cl
if m.m = '' then do
if \ nullNew then
return 'null @' m 'class' className(cl)
rsn = oRefSetNew(m, cl)
if rsn \== 1 then
return rsn
end
return oAccPath(m.m, substr(pa, 2))
end
if pos(left(pa, 1), m.class.cPath) > 0 then
return oAccPath(m, substr(pa, 2), cl)
px = verify(pa, m.class.cPath, 'm')
if px < 1 then
px = length(pa)+1
fn = left(pa, px-1)
pa = substr(pa, px)
if symbol('m.cl.f2c.fn') == 'VAR' then
return oAccPath(m'.'fn, pa, m.cl.f2c.fn)
if m.cl.stemCl=='' | fn=='' | verify(fn, '0123456789','n')>0 then
return 'no field' fn '@' m 'class' className(cl)
if fn == 0 then
return oAccPath(m'.0', pa, m.class.classV)
if abbrev(fn, 0) | verify(m.m.0, '0123456789', 'n') > 0,
| fn > m.m.0 then
return 'bad stem index' fn'>'m.m.0 '@' m 'class' className(cl)
return oAccPath(m'.'fn, pa, m.cl.stemCl)
endProcedure oAccPath
oRefSetNew: procedure expose m.
parse arg m, cl
cr = m.cl.valueCl
if m.cr.class = '' then
return 'no class for null @' m 'class' className(cl)
if m.cr.class = m.class.classW then
m.m = o2s()
else if m.cr \== 'r' then
return 'class' className(cl) 'not ref'
else
m.m = oNew(m.cr.class)
return 1
endProcedure oRefSetNew
/*--- mutate object m to the class named name -----------------------*/
oMutate: procedure expose m.
parse arg m, cl
m.o.o2c.m = cl
return m
endProcedure oMutate
/*--- copy object m of class cl to t --------------------------------*/
oClaCopy: procedure expose m.
parse arg cl, m, t
interpret "drop cl;" oClaMet(cl, 'oCopy')
endProcedure oClaCopy
/*--- copy object m to t / create a new object if t=='' -------------*/
oCopy: procedure expose m.
parse arg m, t
interpret objMet(m, 'oCopy')
endProcedure oCopy
/*--- return a new instance of a subclass of Run
with code code in method oRun -------------------------------*/
oRunner: procedure expose m.
if arg() >= 1 then
r = oNew(classNew('n* ORun u ORun, m oRun' arg(1)))
else
r = oNew(classNew('n| ORun u ORun'))
return r
endProcedure oRunner
/*--- set code for runner -------------------------------------------*/
oRunnerCode: procedure expose m.
parse arg r, code
call classSetMet objClass(r), 'oRun', code
return r
endProcedure oRunnerCode
/*--- run method oRun of object m -----------------------------------*/
oRun: procedure expose m.
parse arg m, arg, arg2, arg3
interpret objMet(m, 'oRun')
return
endProcedure oRun
/*--- run method oRun and return output in new JBuf ------------------*/
oRun2File: procedure expose m.
parse arg rn
b = jBuf()
call pipe '+F' , b
call oRun rn
call pipe '-'
return b
endProcedure oRun2File
/*--- cast the object to a file -------------------------------------*/
o2File: procedure expose m.
parse arg m
interpret objMet(m, 'o2File')
call err 'o2file did not return'
endProcedure o2File
/*--- cast the object to a String -----------------------------------*/
o2String: procedure expose m.
parse arg m, fmt
if opt == '' then
opt = '-b '
interpret objMet(m, 'o2String')
return err('o2String did not return')
endProcedure o2String
/*--- return true if object is kind of String------------------------*/
oStrOrObj: procedure expose m. ggStr ggObj ggCla
parse arg ggObj, def
if ggObj == '' then
ggObj = def
ggCla = objClass(ggObj, '')
if ggCla == '' then do
ggStr = ggObj
ggObj = ''
return 1
end
else if wordPos(ggCla, m.class.classV m.class.classW) > 0 then do
ggStr = o2String(ggObj)
ggObj = ''
return 1
end
else do
ggStr = ''
return 0
end
endProcedure oStrOrObj
/*--- return true if object is kind of String ----- ???? -------------*/
oStrOrFile: procedure expose m. ggStr ggObj ggCla
parse arg m, def
if oStrOrObj(m, def) then
return 1
ggObj = o2File(ggObj)
return 0
endProcedure oStrOrFile
/*--- return a short string representation of an object -------------*/
o2Text: procedure expose m.
parse arg m, maxL
if m == '' then
return '@ null object'
if maxL == '' then
maxL = 80
cl = objClass(m, '?')
if cl = m.class.classV then
l = m.m
else if cl == m.class.classW then
l = substr(m, 2)
else if cl == '?' then
l = '@'m 'class=???'
else do
l = '@'m 'class='className(cl)
ff = oFlds(m)
do fx=1 to m.ff.0 while length(l) < maxL + 3
if m.ff.fx == '' then
l = l', .='m.m
else do
f1 = substr(m.ff.fx, 2)
l = l',' f1'='m.m.f1
end
end
end
if length(l) <= maxL then
return l
return left(l, maxL-3)'...'
endProcedure o2Text
/*--- cast a String to an object -----------------------------------*/
s2o: procedure expose m.
parse arg str
return m.o.escW || str
return r
endProcedure s2o
oIfStr: procedure expose m.
parse arg m
if length(m) > 200 then
return m
cl = objClass(m, '')
if cl = '' then
return m
else if cl = m.class.classV then
return = m.m
else if cl == m.class.classW then
return = substr(m, 2)
else if arg() >= 2 then
return arg(2)
else
call err m 'of class' className(cl) 'not kind of string'
endProcedure oIfStr
/* copy o end *******************************************************/
/* copy class begin **************************************************
a class has fields and methods,
the class module handles only the metadata,
object handling (instanciation, methodcalls etc.) is in O
classes are represented by a metadata tree,
its nodes of class class have diffenrent types:
class subTypes (implemented as choices)
'u' = union: NAME -> name of class if <> '',
stem -> references component classes
'f' = field: NAME -> fieldName (x.name),
CLASSS -> reference to class of fieldValue
's' = stem: class -> ref to class at each stem element
'c' = choice: NAME -> selection value,
CLASS -> ref to class of choice
'm' = method: NAME -> methodName,
MET -> rexxCode
'r' = reference CLASS -> ref to type at reference
special classes
'v' = Value String Value
'w' = ValueAsA StringValue packed into an adress (prefix escW)
'o' = AnyClass any class with dynamic classLookup on object
formal definition, see classIni
class expression (ce) allow the following syntax
ce = className | classAdr | 'n'('?','*','|')? name union | union
| 'f' name ce | 's' ce | 'c' name ce | 'm' name code | r ce?
union = 'u' (ce (',' ce)*)?
the modifiers of 'n' means
none: create new class, fail if name already defined
'?': create new class or return old of that name
'*': use an exisiting class of that definition
or create new class with a unique name
'|': create a new class with a unique name
'm' extends to then end of the ce (line)
'u' allows several components, in classNew also multiple args
Achtung, aber NICHT rekursiv|
***********************************************************************/
classIni: procedure expose m.
if m.class.ini == 1 then
return
m.class.ini = 1
m.class.in2 = 0
call oIni
call mapIni
call mNewArea 'CLASS', 'CLASS'
call mapReset 'CLASS.N2C' /* name to class */
m.class.classV = classBasicNew('u', 'v')
m.class.classW = classBasicNew('u', 'w')
m.class.classO = classBasicNew('u', 'o')
m.class.class = classNew('n class u v',
, 'c u u f NAME v, s r class',
, 'c f u f NAME v, f CLASS r class',
, 'c s f CLASS r class' ,
, 'c c u f NAME v, f CLASS r class',
, 'c m u f NAME v, f MET v' ,
, 'c r f CLASS r class' )
m.class.cNav = '.'
m.class.cRef = '|'
m.class.cDot = '%'
m.class.cPath = m.class.cNav || m.class.cRef || m.class.cDot
m.class.classR = classNew('r')
m.class.basicNew = "oMutate(mNew(cl), cl)"
call oAddMet m.o.lazyGen, 'new', "return classGenNew(cl, me)"
call oAddMet m.o.lazyGen,'oClear',"return classGenClear(cl, me)"
call oAddMet m.o.lazyGen,'oFlds',"return classGenFlds(cl, me)"
call oAddMet m.o.lazyGen, 'oCopy', "return classGenCopy(cl, me)"
cr = mIterBegin('CLASS')
do while assNN('cr', mIter(cr))
call classFinish cr
call oClaMet cr, 'oFlds' /* generate flds */
end
m.class.in2 = 1
call oAddMet m.class.classV, 'oCopy', "return oCopyV(m, t)"
call classAddMet m.class.classV, 'o2String return m.m'
call classAddMet m.class.classW, 'o2String return substr(m, 2)'
call classNew 'n ORun u',
, 'm oRun call err "call of abstract method oRun"',
, 'm o2File return oRun2File(m)',
, 'm o2String return jCatLines(oRun2File(m), fmt)'
return
endProcedure classIni
/*--- return the name of a class if it exists otherwise the class ---*/
className: procedure expose m.
parse arg cl
if m.cl = 'u' & m.cl.name \= '' then
return m.cl.name
else
return cl
endProcedure className
/*--- return class of given name or class ---------------------------*/
class4Name: procedure expose m.
parse arg nm
if symbol('m.class.n2c.nm') == 'VAR' then
return m.class.n2c.nm
if arg() > 1 then
return arg(2)
call err 'no class' nm
endProcedure class4Name
classBasicNew: procedure expose m.
parse arg ty, nm, cl, nmTy
n = mNew('CLASS')
m.n = ty
m.n.name = nm
m.n.nameComp = nm
if ty == 'u' & nm \== '' then do
if pos(nmTy, '*|') > 0 then do
m.n.name = nm || substr(n, 1+lastPos('.', n))
if nmTy == '*' then
m.n.nameComp = nm'*'
else
m.n.nameComp = m.n.name
end
call mapAdd class.n2c, m.n.name, n
end
call mapAdd class.n2c, n, n
m.n.class = ''
m.n.met = ''
m.n.0 = 0
if length(ty) \== 1 | pos(ty, 'ufscrm') < 1 then
call err 'bad type' ty': classBasicNew('ty',' nm',' cl')'
else if nm == '' & pos(ty, 'fm') > 0 then
call err 'empty name: classBasicNew('ty',' nm',' cl')'
else if nm \== '' & ty \== 'c' & verifId(nm) > 0 then
call err 'bad name' nm': classBasicNew('ty',' nm',' cl')'
else if nm \= '' & pos(ty, 'rs') > 0 then
call err 'name for type' ty': classBasicNew('ty',' nm',' cl')'
else if pos(ty, 'fcrs') > 0 then do
if cl \== '' then
m.n.class = mapGet(class.n2c, cl)
else if ty == 'r' then
m.n.class = m.class.classO
/* else say 'cl leer' ty nm nmTy ???????*/
end
else if ty == 'm' then
m.n.met = cl
else if cl \== '' then
call err 'class for type' ty': classBasicNew('ty',' nm',' cl')'
return n
endProcedure classBasicNew
classNew: procedure expose m.
parse arg clEx 1 ty rest
if abbrev(ty, 'n') then do
if wordPos(ty, 'n n? n* n|') < 1 then
call err 'bad type' ty': classNew('clEx')'
nmTy = right(ty, 1)
parse var rest nm ty rest
if ty \== 'u' then
call err 'class name' nm 'without u: classNew('clEx')'
if nmTy == 'n' then do
if mapHasKey(class.n2c, nm) then
call err 'class' nm 'already defined: classNew('clEx')'
end
else if nmTy == '?' then do
if mapHasKey(class.n2c, nm) then
return mapGet(class.n2c, nm)
end
else if nmTy == '*' then do
if arg() \== 1 then
call err 'arg()='arg() 'for n* : classNew('clEx')'
if mapHasKey(class.n2c, clEx) then
return mapGet(class.n2c, clEx)
end
n = classBasicNew('u', nm, , nmTy)
end
else do
nmTy = ''
if arg() \== 1 then
call err 'arg()='arg() 'without name: classNew('clEx')'
if mapHasKey(class.n2c, clEx) then
return mapGet(class.n2c, clEx)
if length(ty) <> 1 | pos(ty, 'ufscmr') < 1 then
call err 'bad type' ty': classNew('clEx')'
nm = ''
if pos(ty, 'usr') < 1 then
parse var rest nm rest
if ty = 'u' then do
n = classBasicNew(ty)
end
else if ty = 'm' then do
n = classBasicNew(ty, nm, rest)
rest = ''
end
else do
parse var rest t1 rest
if wordPos(t1, 'u f s c m r') > 0 then do
n = classBasicNew(ty, nm)
m.n.class = classNew(t1 rest)
rest = ''
end
else do
n = classBasicNew(ty, nm, t1)
end
end
end
if ty \== 'u' then do
if rest \== '' then
call err 'rest' rest 'but end of classExp expected:' clEx
end
else do
lx = 0
do while lx < length(rest)
cx = pos(',', rest, lx+1)
if cx <= lx | word(substr(rest, lx+1), 1) == 'm' then
cx = length(rest)+1
a = mAdd(n, classNew(strip(substr(rest, lx+1, cx-lx-1))))
lx=cx
end
pref = ''
do ax=2 to arg()
if length(arg(ax)) == 1 & arg(ax) \== ' ' then
pref = arg(ax)' '
else
call mAdd n, classNew(pref || arg(ax))
end
end
cr = mIterBegin('CLASS')
do while assNN('cr', mIter(cr)) & \ classEqual(n, cr)
end
isNew = cr == n
if \ isNew then do
if mapRemove(class.n2c, n) \== n then
call err 'mapRemove('n') mismatch'
if m.n == 'u' & m.n.name \== '' then
if mapRemove(class.n2c, m.n.name) \== n then
call err 'mapRemove('m.n.name') mismatch'
call mFree n
n = cr
end
if isNew & m.class.in2 then
call classFinish n
if nmTy == '' | nmTy == '*' then
call mapAdd class.n2c, clEx, n
return n
endProcedure classNew
/*--- to the finish for new class cl -------------------------------*/
classFinish: procedure expose m.
parse arg cl, force
call oMutate cl, m.class.class
/* find super and sub classes */
m.cl.sub = ''
sups = ''
do ux=1 to m.cl.0
u1 = m.cl.ux
if m.u1 \== 'u' then
iterate
if wordPos(u1, sups) > 0 then
call err u1 'already in sups' sups': classSuperSub('cl')'
sups = sups u1
if wordPos(m.cl.SUB, cl) > 0 | symbol('m.u1.sub') \== 'VAR' then
call err cl 'is already in' u1'.sub' u1.SUB ,
|| ': classSuperSub('cl')'
m.u1.sub = strip(m.u1.sub cl)
end
m.cl.super = sups
/* add class to o */
call oAddCla cl, sups
if pos(m.cl, 'mfrsv') < 1 then do
allMets = ''
forceMets = ''
do cx=1 to m.cl.0
ch = m.cl.cx
if m.ch == 'm' then do
call oAddMet cl, m.ch.name, m.ch.met
allMets = allMets m.ch.name
end
else if symbol('m.class.forceDown.ch') == 'VAR' then
forceMets = forceMets m.class.forceDown.ch
end
myForce = ''
do fx=1 to words(forceMets)
parse value word(forceMets, fx) with fCla '#' fMet
if wordPos(fMet, allMets) < 1 then do
call oAddMet cl, fMet, m.o.cMet.fCla.fMet
myForce = myForce cl'#'fMet
allMets = allMets fMet
end
end
if myForce \== '' then
m.class.forceDown.cl = strip(myForce)
end
if cl == m.class.class then
call mAlias 'CLASS', cl
else /* object adresses */
call mNewArea cl, 'O.'substr(cl,7)
if m.cl \== 'u' | m.cl.name == '' then
return
call mAlias cl, m.cl.name
return
endProcedure classFinish
classAddMet: procedure expose m.
parse arg clNm, met code
cl = class4Name(clNm)
if pos(m.cl, 'uvw') < 1 then
call err 'class not nvw but' m.cl,
'in classAdd1Method('clNm',' met code')'
call mAdd cl, classNew('m' met code)
call oAddMet cl, met, code
return cl
endProcedure classAddMet
/*--- return true iff the two classes are equal -------------------*/
classEqual: procedure expose m.
parse arg l, r
if m.l \== m.r | m.l.nameComp \== m.r.nameComp ,
| m.l.class \== m.r.class | m.l.0 \== m.r.0 then
return 0
if m.l.met \== m.r.met then
return 0
do sx=1 to m.l.0
if m.l.sx \== m.r.sx then
return 0
end
return 1
endProcedure classEqual
classGenNew: procedure expose m.
parse arg cl, met
return "m=" m.class.basicNew";" oClaMet(cl, 'oClear') ";" ,
"return m"
endProcedure classGenNew
classGenFlds: procedure expose m.
parse arg cl, met
m.cl.flds.0 = 0
m.cl.stms.0 = 0
m.cl.stemCl = ''
m.cl.valueCl = ''
call classGenFldsAdd cl, cl
m.cl.hasFlds = m.cl.flds.0 > 1 ,
| (m.cl.flds.0 == 1 & m.cl.flds.1 \== '') | m.cl.stms.0 > 0
return cl'.FLDS'
endProcedure classGenFlds
/*--- add the the fields of class cl to stem f ----------------------*/
classGenFldsAdd: procedure expose m.
parse arg f, cl, nm
n1 = substr(nm, 1+abbrev(nm, '.') )
if symbol('m.f.f2c.n1') \== 'VAR' then
m.f.f2c.n1 = cl
if cl == m.class.classV | cl == m.class.classW | m.cl=='r' then do
if nm == '' then do
if m.f.valueCl \== '' then
return err('value mistmatch')
m.f.valueCl = cl
end
if nm == '' then do
call mMove f'.FLDS', 1, 2
m.f.flds.1 = ''
end
else do
call mAdd f'.FLDS', nm
end
return 0
end
if m.cl = 's' then do
if m.cl.class == '' then
call err 'stem null class'
a1 = mAdd(f'.STMS', nm)
m.a1.class = m.cl.class
if nm == '' then
m.f.stemCl = m.cl.class
return 0
end
if m.cl = 'f' then
return classGenFldsAdd(f, m.cl.class, nm'.'m.cl.name)
if m.cl.class \== '' then
return classGenFldsAdd(f, m.cl.class, nm)
do tx=1 to m.cl.0
call classGenFldsAdd f, m.cl.tx, nm
end
return 0
endProcedure classGenFldsAdd
classGenClear: procedure expose m.
parse arg cl, met
r = ''
call oClaMet cl, 'oFlds'
do fx=1 to m.cl.flds.0
f1 = m.cl.flds.fx
if f1 == '' then
c1 = cl
else do
c1 = substr(f1, 2)
c1 = m.cl.f2c.c1
end
if c1 == m.class.classW then
r = r classGenStmt(f1, "m.m~ = '"m.o.escW"';")
else
r = r classGenStmt(f1, "m.m~ = '';")
end
do sx=1 to m.cl.stms.0
r = r classGenStmt(m.cl.stms.sx, "m.m~.0 = 0;")
end
return r
endProcedure classGenClear
classGenStmt: procedure expose m.
parse arg f, st, resWo
isNice = translate(f) == f
resWo = translate(resWo) 'GGFF M'
fDod = '.'f'.'
do wx=1 to words(resWo) while isNice
isNice = pos('.'word(resWo, wx)'.', fDot) < 1
end
if isNice then
return repAll(st, '~', f)
else
return "ggFF = '"substr(f, 2)"';" repAll(st, '~', '.ggFF')
endProceduer classGenAss
classGenCopy: procedure expose m.
parse arg cl, me
r = repAll("if t == '' then t =" m.class.basicNew ";" ,
"else call oMutate t, cl;", 'cl', "'"cl"'")
ff = oClaMet(cl, 'oFlds') /* build code for copy */
do fx=1 to m.cl.flds.0
r = r classGenStmt(m.cl.flds.fx, 'm.t~ = m.m~;', 't')
end
do fx=1 to m.cl.stms.0
nm = m.cl.stms.fx
sc = m.cl.stms.fx.class
if nm == '' then
st = ''
else do
r = r "st = '"substr(nm, 2)"';"
st = '.st'
end
r = r "m.t"st".0 = m.m"st".0;" ,
"do sx=1 to m.m"st".0;" ,
"call oClaCopy '"sc"', m"st".sx, t"st".sx; end;"
end
return r 'return t;'
endProcedure classGenCopy
/*--- oCopy for classW ----------------------------------------------*/
oCopyW: procedure expose m.
trace ?r
parse arg m, t
if t == '' then
return m
m.t = o2String(m)
return oMutate(t, m.class.classV)
endProcedure oCopyW
/*--- print object ---------------------------------------------------*/
objOut: procedure expose m.
parse arg m, pr, p1
c = objClass(m, '')
if c == '' then
call out p1 'no class for' m
else if c == m.class.classV then
call out p1 || m.m
else if c == m.class.classW then
call out p1 || o2String(m)
else
call classOutDone c, m, pr, p1
return
endProcedure objOut
/*--- recursively output (with out:) the object a with class t -------*/
classOut: procedure expose m.
parse arg t, a, pr, p1
return classOutDone(if(t=='',m.class.classO, t), a, pr, p1)
endProcedure classOut
/*--- ouput object a with class t and stopper done ------------------*/
classOutDone: procedure expose m. done.
parse arg t, a, pr, p1
if p1 == '' then
p1 = pr
if right(p1, 1) \== ' ' then
p1 = p1' '
if done.ini \== 1 then do
done.ini = 1
t = class4Name(t, t)
p1 = p1'@'a' '
end
if done.t.a == 1 then
return out(p1'done :'className(t) '@'a)
done.t.a = 1
if t = m.class.classO then do
if a == '' then
return out(p1'obj null')
t = objClass(a, '')
if t = '' then
return out(p1'obj has no class @'m.a)
else
return classOutDone(t, a, pr, p1'isA')
end
if t == m.class.classV then
return out(p1'=' m.a)
if t == m.class.classW == 'w' then
return out(p1'}' substr(a, 2))
if m.t == 'f' then
return classOutDone(m.t.class, a'.'m.t.name, pr, p1'.'m.t.name)
if m.t == 'r' then do
if m.a == '' then
return out(p1'refTo :'className(m.t.class) '@null@')
else
return classOutDone(m.t.class, m.a, pr,
, p1'refTo @'m.a)
end
if m.t = 'u' then do
t1 = m.t.1
vv = m.t.0 > 0 & m.t.1 == m.class.classV
call out p1 || if(m.t.name == '', 'union', ':'m.t.name) ,
|| copies(' =' m.a, vv)
do ux=1+vv to m.t.0
call classOutDone m.t.ux, a, pr' '
end
return 0
end
if m.t = 's' then do
call out p1'stem' m.a.0
do ux=1 to m.a.0
call classOutDone m.t.class, a'.'ux, pr' ', pr' .'ux
end
return 0
end
if m.t = 'c' then do
if m.t.name = m.a then
call classOutDone m.t.class, a, pr, p1'choice' m.a
return 0
end
if m.t = 'm' then
return 0
return err('bad class type' m.t)
endProcedure classOutDone
/* copy class end ***************************************************/
/* copy mapExp begin **************************************************/
mapVia: procedure expose m.
parse arg a, ky
sx = pos('|', ky)
if sx < 1 then
return mapGet(a, ky)
via = mapGet(a, left(ky, sx-1))
do while sx <= length(ky)
fx = sx+1
sx = pos('|', ky, fx)
if sx < 1 then
sx = length(ky) + 1
if sx = fx then do
if symbol('m.via') \== 'VAR' then
call err 'missing m.'via 'at' sx 'in mapVia('a',' ky')'
via = m.via
end
else do
f = substr(ky, fx, sx - fx)
if symbol('m.via.f') \== 'VAR' then
call err 'missing m.'via'.'f ,
'at' sx 'in mapVia('a',' ky')'
via = m.via.f
end
end
return via
endProcedure mapVia
mapExpAt: procedure expose m.
parse arg a, src, sx
m.map.ExpAt = 0
cx = pos('$', src, sx)
if cx < 1 then
return substr(src, sx)
res = substr(src, sx, cx-sx)
do forever
if substr(src, cx+1, 1) = '{' then do
ex = pos('}', src, cx+2)
if ex < 1 then
call err 'missing } after' substr(src, cx) 'in' src
res = res || mapVia(a, strip(substr(src, cx+2, ex-cx-2)))
ex = ex + 1
end
else do
ex = verify(src, m.mAlfDot, 'n', cx+1)
if ex < 1 then
return res || mapVia(a, substr(src, cx+1))
if ex = cx+1 then do
m.map.ExpAt = cx
return res
end
res = res || mapVia(a, substr(src, cx+1, ex-cx-1))
end
cx = pos('$', src, ex)
if cx < 1 then
return res || substr(src, ex)
res = res || substr(src, ex, cx-ex)
end
endProcedure mapExpAt
mapExp: procedure expose m.
parse arg a, src
res = mapExpAt(a, src, 1)
if m.map.ExpAt \== 0 then
call err 'mapExp stopped at' substr(src, map.ExpAt) 'in' src
return res
endProcedure mapExp
mapExpAllAt: procedure expose m.
parse arg a, dst, src, sx, cx
do while sx <= m.src.0
li = mapExpAt(a, m.src.sx, cx)
dx = m.map.ExpAt
if (cx=1 & dx = 0) | li \= '' then
call mAdd dst, li
if dx = 0 then do
cx = 1
sx = sx+1
end
else do
return sx dx
end
end
return ''
endProcedure mapExpAllAt
mapExpAll: procedure expose m.
parse arg a, dst, src
sto = mapExpAllAt(a, dst, src, 1, 1)
if sto == '' then
return
lx = word(sto, 1)
call err 'mapExpAll stopped at' sto':' m.src.lx
endProcedure mapExpAll
/* copy mapExp end ****************************************************/
/* copy map begin ******************************************************
a map stores values at keys
it may also maintain a list of keys
the basic ideas are similar to the java Interface java.util.Map
contrary to stems we also handle keys longer then 250 bytes
***********************************************************************/
/*--- initialize the module ------------------------------------------*/
mapIni: procedure expose m.
if m.map.ini = 1 then
return
m.map.ini = 1
call mIni
m.map.0 = 0
m.map.inlineSearch = 1
call mapReset map.inlineName, map.inline
return
endProcedure mapIni
mapInline: procedure expose m.
parse arg pName, opt
if mapHasKey(map.inlineName, pName) then do
im = mapGet(map.inlineName, pName)
if pos('l', opt) < 1 & symbol('m.im.0') \== 'VAR' then do
m.im.0 = m.im.lEnd - m.im.lBegin - 1
do ix=1 to m.im.0
m.im.ix = strip(sourceline(ix+m.im.lBegin), 't')
end
end
return im
end
name = '/'
do lx = m.map.inlineSearch to sourceline()
if \ abbrev(sourceline(lx), '$') then
iterate
li = sourceline(lx)
s1 = pos('/', li)+ 1
if s1 < 3 | s1 > 4 then
iterate
s2 = pos('/', li, s1)
if s2 <= s1 then
iterate
if s1 == 3 then do
if name \== substr(li, s1, s2-s1) then
iterate
im = 'MAP.INLINE.' || (m.map.inline.0+1)
call mapAdd map.inlineName, name, im
m.im.lBegin = lBeg
m.im.lEnd = lx
m.im.mark = mrk
if name == pName then do
m.map.inlineSearch = lx+1
return mapInline(pName)
end
name = '/'
end
else if \ mapHasKey(map.inlineName,
, substr(li, s1, s2-s1)) then do
lBeg = lx
mrk = substr(li, 2, s1-3)
name = substr(li, s1, s2-s1)
end
else do
name = '/'
end
end
if pos('r', opt) > 0 then
return ''
return err('no inline data /'pName'/ found')
endProcedure mapInline
/*--- create a new map ----------------------------------------------*/
mapNew: procedure expose m.
parse arg opt
m.map.0 = m.map.0 + 1
return mapReset('MAP.'m.map.0 , opt)
endProcedure mapNew
/*--- make an empty map, if opt <> '' maintain stem of keys
('K' in map.keys, '=' in a else in opt) --------------*/
mapReset: procedure expose m.
parse arg a, opt
if symbol('m.map.keys.a') == 'VAR' then
call mapClear a
if opt = '=' then
st = a
else if translate(opt) = 'K' then
st = 'MAP.KEYS.'a
else
st = opt
m.map.keys.a = st
if st \== '' then
m.st.0 = 0
return a
endProcedure
/*--- add a new key value pair to the map ----------------------------*/
mapAdd: procedure expose m.
parse arg a, ky, val
vv = mapValAdr(a, ky, 'a')
m.vv = val
return val
endProcedure mapAdd
/*--- change the value at a key or add key value ---------------------*/
mapPut: procedure expose m.
parse arg a, ky, val
vv = mapValAdr(a, ky, 'p')
m.vv = val
return val
endProcedure mapPut
/*--- return 1 if key ky exists in map a, 0 otherwise ----------------*/
mapHasKey: procedure expose m.
parse arg a, ky
return mapValAdr(a, ky) \== ''
endProcedure mapHasKey
/*--- return the value of key ky in map a if it exists,
else if called with a third argument return third argument
else issue an error ----------------------------------------*/
mapGet: procedure expose m.
parse arg a, ky
vv = mapValAdr(a, ky)
if vv \== '' then
return m.vv
else if arg() > 2 then
return arg(3)
else
return err('missing key in mapGet('a',' ky')')
endProcedure mapGet
/*--- return a stem of all keys --------------------------------------*/
mapKeys: procedure expose m.
parse arg a
if m.map.keys.a == '' then
call err 'mapKeys('a') with no keys'
return m.map.keys.a
endProcedure mapKeys
/*--- remove a key from the map, do nothing if it is missing ---------*/
mapRemove: procedure expose m.
parse arg a, ky
vv = mapValAdr(a, ky)
if vv == '' then
return ''
if m.map.keys.a \== '' then do
trace ?R /* not tested yet ???wkTest */
k = m.map.keys.a
mx = m.k.0
do i=1 to mx
if m.k.i == ky then do
m.k.i = m.k.mx
m.k.0 = mx - 1
return
end
end
end
val = m.vv
drop m.a.ky
return val
endProcedure mapRemove
/*--- remove all entries ---------------------------------------------*/
mapClear: procedure expose m.
parse arg a
st = mapKeys(a)
liLe = 243 - length(a)
do kx=1 to m.st.0
ky = m.st.kx
drop m.st.kx
if length(ky) <= liLe then do
drop m.a.ky
end
else do
adr = mapValAdr(a, ky)
if adr \== '' then do
ha = left(adr, lastPos('.', adr) - 3)
do i = 1 to m.ha.k.0
drop m.ha.k.i m.ha.v.i
end
drop m.ha.k.0
end
end
end
m.st.0 = 0
return a
endProcedure mapClear
/*--- return the value pointer for a key, '' if non existing
with fun = 'a' add a key, with 'p' put a key ------------*/
mapValAdr: procedure expose m.
parse arg a, ky, fun
if length(ky) + length(a) <= 243 then do
res = a'.'ky
if symbol('m.res') == 'VAR' then do
if fun == 'a' then
call err 'duplicate key' ky 'in map' a
return res
end
else if fun == '' then
return ''
end
else do
len = 243 - length(a)
q = len % 4
ha = a'.'left(ky, len - 2 * q) || substr(ky,
, (length(ky)-len) % 2 + 2 * q, q) || right(ky, q)
if symbol('M.ha.k.0') == 'VAR' then do
do i=1 to m.ha.k.0
if m.ha.k.i == ky then do
if fun == 'a' then
call err 'duplicate key' ky ,
'map' a 'hash' ha'.K.'i
return ha'.V.'i
end
end
end
else do
i = 1
end
if fun == '' then
return ''
if i > 9 then
call err 'overflow long key' y 'in map' a 'hash' ha'.K.'i
m.ha.k.0 = i
m.ha.k.i = ky
res = ha'.V.'i
end
if m.map.keys.a \== '' then
call mAdd m.map.Keys.a, ky
m.res = ''
return res
endProcedure mapValAdr
/* copy map end *******************************************************/
/* copy m begin ********************************************************
we use variables as follows
m. stem m: all global data and object data that must survive
a procedure call (m for memory in Memoria of B5000)
m.<mbr>.** to avoid conflicts: every rexx Module (copy) should
only allocate addresses m.<mbr>.** with <mbr> the name of
the rexx module
we pass parameters around (e.g. a=address, m=memory, st=stem)
and the called function may use m.a or m.a.subField etc.
gg*: local variable in subroutines without procedure
everything else: temporary data within procedure
every subroutine is declared as procedure expose m.
(also if no m. variable is used, because e.g. of error handling)
the few subroutines that cannot use procedure, should use only
variables starting with gg
***********************************************************************/
/*---make an area -----*/
mNewArea: procedure expose m.
parse arg nm, adr
m.m.area.0 = m.m.area.0 + 1
a = 'M.AREA.'m.m.area.0
if adr == '=' then
adr = nm
else if adr == '' then
adr = 'M.'m.m.area.0
if symbol('m.m.n2a.adr') == 'VAR' then
call err 'adr' adr 'for area' nm 'already used'
m.m.n2a.adr = a
call mAlias adr, nm
m.m.p2a.adr = a
m.a.0 = 0
m.a.free.0 = 0
m.a.address = adr
return nm
endProcedure mNewArea
mAlias: procedure expose m.
parse arg oldNa, newNa
if symbol('m.m.n2a.oldNa') \== 'VAR' then
call err 'area' oldNa 'does not exist'
if oldNa == newNa then
return
if symbol('m.m.n2a.newNa') == 'VAR' then
call err 'newName' newNa 'for old' oldNa 'already used'
m.m.n2a.newNa = m.m.n2a.oldNa
return
endProcedure mAlias
mNew: procedure expose m. ggArea
parse arg name
if symbol('m.m.n2a.name') \== 'VAR' then
call err 'area' name 'does not exists'
ggArea = m.m.n2a.name
if m.ggArea.free.0 > 0 then do
fx = m.ggArea.free.0
m.ggArea.free.0 = fx-1
m = m.ggArea.free.fx
end
else do
m.ggArea.0 = m.ggArea.0 + 1
m = m.ggArea.address'.'m.ggArea.0
end
return m
endProcedure mNew
mFree: procedure expose m.
parse arg m
p = 'M.P2A.'left(m, lastPos('.', m)-1)
area = m.p
fx = m.area.free.0 + 1
m.area.free.0 = fx
m.area.free.fx = m
return
endProcedure mFree
/*--- iterate over all allocate elements of an area ------------------*/
mIterBegin: procedure expose m.
parse arg nm
a = m.m.n2a.nm
return m.a.address'.0'
endProcedure mIterBegin
mIter: procedure expose m.
parse arg cur
if cur == '' then
return ''
lx = lastPos('.', cur)
p = 'M.P2A.'left(cur, lx-1)
a = m.p
ix = substr(cur, lx+1)
do ix=ix+1 to m.a.0
n = m.a.address'.'ix
do fx=1 to m.a.free.0 while m.a.free \== n
end
if fx > m.a.free.0 then
return n
end
return ''
endProcedure mIter
/*--- get m.a --------------------------------------------------------*/
mGet: procedure expose m.
parse arg a
return m.a
endProcedure mGet
/*--- cut stem a to length len ---------------------------------------*/
mCut: procedure expose m.
parse arg a, len
m.a.0 = len
return a
endProcedure mCut
/*--- add one or several arguments to stem m.a -----------------------*/
mAdd: procedure expose m.
parse arg a
ix = m.a.0
do ax = 2 to arg()
ix = ix + 1
m.a.ix = arg(ax)
end
m.a.0 = ix
return a'.'ix
endProcedure mAdd
/*--- pop last element from stem m.a ---------------------------------*/
mPop: procedure expose m.
parse arg a
ix = m.a.0
if ix < 1 then
call err 'pop from empty stem' a
m.a.0 = ix-1
return m.a.ix
endProcedure mPop
/*--- add to m.dst.* a (sub)sequence of m.src.* ----------------------*/
mAddSt: procedure expose m.
parse arg dst, src, fx , tx
dx = m.dst.0
if fx == '' then
fx = 1
if tx == '' then
tx = m.src.0
do sx = fx to tx
dx = dx + 1
m.dst.dx = m.src.sx
end
m.dst.0 = dx
return
endProcedure mAddSt
/*--- find position of first occurrence of ele in stem m,
return 0 if nonemove a part of a stem -----------------------*/
mPos: procedure expose m.
parse arg m, ele, sx
if sx == '' then
sx = 1
do x=sx to m.m.0
if m.m.x = ele then
return x
end
return 0
endProcedure mPos
/*--- move a part of a stem ------------------------------------------*/
mMove: procedure expose m.
parse arg m, sx, dx
if dx < sx then do
y = dx
do x=sx to m.m.0
m.m.y = m.m.x
y = y + 1
end
end
else if dx > sx then do
y = m.m.0 + dx - sx
do x=m.m.0 by -1 to sx
m.m.y = m.m.x
y = y - 1
end
end
m.m.0 = m.m.0 + dx - sx
return
endProcedure mMove
/*--- insert a stem into another ------------------------------------*/
mInsert: procedure expose m.
parse arg m, tx, st
call mMove m, tx, tx+m.st.0
do sx=1 to m.st.0
dx = tx-1+sx
m.m.dx = m.st.sx
end
return
endProcedure mInsert
/*--- strip all elements of a stem -----------------------------------*/
mStrip: procedure expose m.
parse arg st, opt
if opt == '' then
opt = 'b'
do x=1 to m.st.0
m.st.x = strip(m.st.x, opt)
end
return st
endProcedure mStrip
/* cat the lines of a stem, possibly repeated --------------------------
args: stem, fmt see fGen: -------------------------------------*/
mCat: procedure expose m.
parse arg st, fmt
return mCatFT(st, 1, m.st.0, fmt)
mCatFT: procedure expose m.
parse arg st, fx, tx, fmt
if tx < fx then
return ''
fmt = '%s%qn%s%qe%q^'fmt
res = f(fmt, m.st.fx)
do sx=fx+1 to tx
res = res || f(fmt'%Qn', m.st.sx)
end
return res || f(fmt'%Qe')
endProcedure mCatFT
mIni: procedure expose m.
if m.m.ini = 1 then
return
m.m.ini = 1
m.mDigits = '0123456789'
m.mAlfLC = 'abcdefghijklmnopqrstuvwxyz'
m.mAlfUC = translate(m.mAlfLC)
m.mAlfa = m.mAlfLC || m.mAlfUC
m.mAlfNum = m.mAlfa || m.mDigits
m.mAlfDot = m.mAlfNum || '.'
m.mBase64 = m.mAlfUC || m.mAlfLC || m.mDigits'+-'
m.mId = m.mAlfNum'_' /* avoid rexx allowed @ # $ ¬ . | ? */
m.mAlfRex1 = m.mAlfa'@#$?' /* charset problem with ¬| */
m.mAlfRexR = m.mAlfRex1'.0123456789'
m.mPrint = m.mAlfNum'+-*/=()¢!{}<> .:,;?|''"%&#@$£\_'
m.m.area.0 = 0
call mNewArea
return
endProcedure mIni
verifId: procedure expose m.
parse arg src, extra, sx
if sx == '' then
sx = 1
if pos(substr(src, sx, 1), m.mDigits) > 0 then
return sx
else
return verify(src, m.mId || extra, 'n', sx)
endProcedure verifId
/* copy m end *********************************************************/
/* copy fTab begin ****************************************************/
fTabReset: procedure expose m.
parse arg m, m.m.titBef, m.m.titAft
m.m.generated = ''
m.m.0 = 0
m.m.len = 0
m.m.cols = ''
m.m.tit.0 = words(m.m.titBef m.m.titAft) + 5
m.m.set.0 = 0
do tx=1 to m.m.tit.0
m.m.tit.tx = ''
end
return m
endProcedure fTabReset
/* add a piece to title tx at current pos */
fTabAddTit: procedure expose m.
parse arg m, tx, t1
m.m.generated = ''
m.m.tit.tx = left(m.m.tit.tx, m.m.len) || t1
return m
endProcedure fTabAddTit
/*--- set the infos for one column -----------------------------------*/
fTabSet: procedure expose m.
parse arg m, c1 aDone, f1, l1
sx = m.m.set.0 + 1
m.m.set.0 = sx
m.m.set.sx = c1 aDone
m.m.set.sx.fmt = f1
m.m.set.sx.label = l1
m.m.set.c1 = sx
return
endProcedure fTabSet
fTabAdd: procedure expose m.
parse arg m, c1 aDone, f1, l1
cx = m.m.0 + 1
m.m.generated = ''
m.m.0 = cx
m.m.cols = m.m.cols c1
if words(m.m.cols) <> cx then
call err 'mismatch of column number' cx 'col' c1
if length(aDone) > 1 | wordPos('<'aDone'>', '<> <0> <1>') < 1 then
call err 'bad done' length(aDone) '<'aDone'> after c1' c1
m.m.cx.col = c1
m.m.cx.done = aDone \== 0
if l1 == '' then
m.m.cx.label = c1
else
m.m.cx.label = l1
px = pos('%', f1)
ax = pos('@', f1)
if px < 1 | (ax > 0 & ax < px) then
m.m.cx.fmt = f1
else
m.m.cx.fmt = left(f1, px-1)'@'c1 || substr(f1, px)
m.fTabTst.c1 = m.m.cx.label
t1 = f(f1, m.m.cx.label)
if pos(strip(t1), m.m.cx.label) < 1 then
t1 = left(left('', max(0, verify(t1, ' ') -1))m.m.cx.label,
, length(t1))
m.m.cx.len = length(t1)
call fTabAddTit m, 1, t1
do tx=2 to arg()-3
if arg(tx+3) \== '' then
call fTabAddTit m, tx, arg(tx+3)
end
m.m.len = m.m.len + length(t1)
return m
endProcedure fTabAdd
fTabGenerate: procedure expose m.
parse arg m
f = ''
do kx=1 to m.m.0
f = f || m.m.kx.fmt
end
m.m.fmt = m'.fmtKey'
call fGen f, m.m.fmt
cSta = m.m.tit.0+3
do cEnd=cSta until kx > m.m.0
cycs = ''
do cx=cSta to cEnd
m.m.tit.cx = ''
cycs = cycs cx
end
cx = cSta
ll = 0
do kx=1 to m.m.0 while length(m.m.tit.cx) < max(ll,1)
m.m.tit.cx = left(m.m.tit.cx, ll)m.m.kx.col
cx = cx + 1
if cx > cEnd then
cx = cSta
ll = ll + m.m.kx.len
end
end
m.m.cycles = strip(cycs)
m.m.tit.1 = translate(lefPad(m.m.tit.1, m.m.len), '-', ' ')'---'
m.m.generated = m.m.generated't'
return
endProcedure fTabGenerate
fTabColGen: procedure expose m.
parse arg m
do kx=1 to m.m.0
l = if(m.m.kx.label == m.m.kx.col, , m.m.kx.label)
f = lefPad(l, 10) lefPad(m.m.kx.col, 18)
if length(f) > 29 then
if length(l || m.m.kx.col) < 29 then
f = l || left('', 29 - length(l||m.m.kx.col))m.m.kx.col
else
f = lefPad(strip(l m.m.kx.col), 29)
g = strip(m.m.kx.fmt)
o = right(g, 1)
if pos(o, 'dief') > 0 then
f = f '@'m.m.kx.col'%12e @'m.m.kx.col'%18c'
else if o = 'C' then
f = f left(g, length(g)-1)'c'
else
f = f g
m.m.kx.colFmt = f
end
m.m.generated = m.m.generated'c'
return
endProcedure fTabColGen
lefPad: procedure expose m
parse arg s, len
if length(s) >= len then
return s
return left(s, len)
endProcedure lefPad
rigPad: procedure expose m
parse arg s, len
if length(s) >= len then
return s
return right(s, len)
endProcedure rigPad
fTab: procedure expose m.
parse arg m
call fTabBegin m
do forever
i = inO()
if i == '' then
leave
call out f(m.m.fmt, i)
end
return fTabEnd(m)
endProcedure fTab
fTabCol: procedure expose m.
parse arg m, i
if pos('c', m.m.generated) < 1 then
call fTabColGen m
do cx=1 to m.m.0
call out f(m.m.cx.colFmt, i)
end
return 0
endProcedure fTabCol
fTabBegin: procedure expose m.
parse arg m
if pos('t', m.m.generated) < 1 then
call fTabGenerate m
return fTabTitles(m, m.m.titBef)
fTabEnd: procedure expose m.
parse arg m
return fTabTitles(m, m.m.titAft)
fTabTitles: procedure expose m.
parse arg m, list
list = repAll(list, 'c', m.m.cycles)
do tx=1 to words(list)
t1 = word(list, tx)
call out m.m.tit.t1
end
return m
endProcedure fTabTitles
/* copy fTab end ****************************************************/
/* copy f begin *******************************************************/
f: procedure expose m.
parse arg ggFmt, ggA1, ggA2
if symbol('M.f.fmt.ggFmt') == 'VAR' then
interpret M.f.fmt.ggFmt
else
interpret fGen(ggFmt)
endProcedure f
fAll: procedure expose m.
parse arg fmt
do forever
o = inO()
if o == '' then
return
call out f(fmt, o)
end
endProcedure f
/*--- format character2hex (if not sql null) -------------------------*/
fH: procedure expose m.
parse arg v, l
if v \== m.sqlNull then
v = c2x(v)
if l >= 0 then
return right(v, l)
else
return left(v, -l)
endProcedure fH
/*--- format integer or fixPoint Decimal -----------------------------*/
fI: procedure expose m.
parse arg v, l, d
if datatype(v, 'n') then do
if d == '' then
v = format(v, ,0,0)
else
v = format(v, ,d,0)
if abbrev(l, '+') then
if \ abbrev(v, '-') then
v = '+'v
if length(v) > abs(l) then
return right('', abs(l), '*')
end
if l >= 0 then
return right(v, l)
else
return left(v, -l)
endProcedure fI
/*--- format floating point in E notitaion ---------------------------*/
fE: procedure expose m.
parse arg v, l, d, eChar
if eChar == '' then
eChar = 'e'
if \ datatype(v, 'n') then
return left(v, l)
else if l = 7 then
return fEStrip(format(v, 2, 2, 2, 0), 0, 2, 0, 2, eChar)
else if l = 8 then
return fEStrip(format(v, 2, 2, 2, 0), 1, 2, 0, 2, eChar)
else if l < 7 then
call err 'bad width fE('v',' l',' d')'
else if d == '' then
return fEStrip(format(v, 2, l-6, 2, 0), 1, l-6, 0, 2, eChar)
else if l - d - 5 < 1 then
call err 'bad prec fE('v',' l',' d')'
else
return fEStrip(format(v, 2, d, l-d-5, 0), 1, d, 1, l-d-5, eChar)
endProcedure fE
fEStrip: procedure expose m.
parse arg v, mSi, de, eSi, ePr, eChar
parse var v ma 'E' ex
if ex == '' then do
ma = strip(ma, 't')
ex = '+'left('', ePr, 0)
end
if eSi == 0 then do
if abbrev(ex, '+') then
ex = substr(ex, 2)
else if abbrev(ex, '-0') then
ex = '-'substr(ex, 3)
else do
exO = ex
ex = left('-9', ePr, '9')
/* say 'format('ma '* (1E'exO') / (1E'ex'), 2,' de', 0)' */
ma = format(ma * ('1E'exO) / ('1E'ex), 2, de, 0)
end
end
if mSi == 0 then
if abbrev(ma, ' ') then
ma = substr(ma, 2)
else
ma = format(ma, 2, de-1)
r = ma || eChar || ex
if length(r) - length(eChar) <> 2 + mSi + de + eSi + ePr then
call err 'bad fEStrip('v',' mSi',' de',' eSi',' ePr',' eChar ,
|| ') ==>' r 'bad len' length(r)
return r
endProcedure fEStrip
/*--------------------------------------------------------------------
fGen: Format generator should be compatible with fPrint|
<<<< + extension of fPrint, - in fPrint but not implemented
+ \s a single space
+ \n a newLine
+ \% \@ \\ the escaped char
('@' argN? '.'? field)?'%' flags? width? ('.' precision)? specifier
specifier: is the most significant one and defines the type
- c Character a
- C Cut %-nC = left(v,n), %nC = right(v,n) %n.mC = substr(m, n)
- d or i Signed decimal integer
- e Scientific notation (mantissa/exponent) using e character 3.9265e+2
- E Scientific notation (mantissa/exponent) using E character 3.9265E+2
- f Decimal floating point
- g Use the shorter of %e or %f
- G Use the shorter of %E or %f
- h Characters in hex
- o Unsigned octal 610
- S Strip(..., both)
- u Unsigned decimal integer
- x Unsigned hexadecimal integer
- X Unsigned hexadecimal integer (capital letters)
- p Pointer address
- n Nothing printed. The argument must be a pointer to a signed int, wh
+ % A % followed by another % character will write % to stdout. %
+ Q for iterator first nxt end
Flags:
- - Left-justify within the given field width; Right justification is
- + Forces to precede the result with a plus or minus sign (+ or -)
- (space) If no sign is going to be written, a blank space is inserte
- # Used with o, x or X specifiers the value is preceeded with 0, 0x
force decimalpoint ...
- 0 Left-pads the number with zeroes (0) instead of spaces, where pad
+ = reuse previous input argument
length not implemented
----------------------------------------------------------------------*/
fGen: procedure expose m.
parse arg src, key
if key == '' then do
qSuf = right(src, 3)
if length(qSuf) == 3 & abbrev(qSuf, '%Q') then
s2 = left(src, length(src) - 3)
else
s2 = src
call fGen s2, s2
if symbol('m.f.fmt.src') == 'VAR' then
return m.f.fmt.src
call err fGen 'format' src 'still undefined'
end
cx = 1
ky = key
do forever
cy = pos('%q', src, cx)
if cy < 1 then do
m.f.fmt.ky = fGenCode(substr(src, cx), 'F.INFO.'ky)
leave
end
m.f.fmt.ky = fGenCode(substr(src, cx, cy-cx), 'F.INFO.'ky)
if substr(src, cy, 3) == '%q^' then do
if substr(src, cy, 5) == '%q^%q' then
cy = cy+3
else if length(src) = cy + 2 then
leave /* do not overrite existing fmt | */
end
if cy > length(src)-2 then
call err 'bad final %q in' src
if substr(src, cy, 3) == '%q^' then
ky = key
else
ky = key'%Q'substr(src, cy+2, 1)
m.f.tit.ky.0 = 0
cx = cy+3
end
if symbol('m.f.fmt.key') == 'VAR' then
return m.f.fmt.key
call sbErr fGen 'format' src 'still undefined'
endProcedure fGen
fGenCode: procedure expose m.
parse arg aS, jj
jx = 0
call sbSrc fGen, aS
ax = 0
cd = ''
do forever
txt = fText()
if txt \== '' then
cd = cd '||' quote(txt, "'")
if sbEnd(fGen) then do
m.jj.0 = jx
if cd \== '' then
return "return" substr(cd, 4)
else
return "return ''"
end
an = ''
af = '-'
if \ sbLit(fGen, '@') then do
ax = ax + 1
end
else do
if sbWhile(fGen, '0123456789') then
ax = m.fGen.tok
else if ax < 1 then
ax = 1
if substr(m.fGen.src, m.fGen.pos, 1) \== '%' then do
call sbLit fGen, '.'
af = fText()
end
end
if \ sbLit(fGen, '%') then
call sbErr fGen, 'missing %'
call sbWhile fGen, '-+'
flags = m.fGen.tok
call sbWhile fGen, '0123456789'
len = m.fGen.tok
siL = len
if len \== '' & flags \== '' then
siL = left(flags, 1)len
prec = ''
if sbLit(fGen, '.') then do
if len == '' then
call sbErr fGen, 'empty len'
call sbWhile fGen, '0123456789'
prec = m.fGen.tok
end
call sbChar fGen, 1
sp = m.fGen.tok
if ax < 3 then
aa = 'ggA'ax
else
aa = 'arg(' || (ax+1) || ')'
if af \== '-' then do
if af \== '' then
af = '.'af
if abbrev(aa, 'ggA') & pos('.GG', af) < 1 ,
& translate(af) == af then
aa = 'm.'aa || af
else
aa = 'mGet('aa '||' quote(af, "'")')'
end
if sp = 'c' then do
pd = word('rigPad lefPad', (pos('-', flags) > 0)+1)
if prec \== '' then
cd = cd '||' pd'(substr('aa',' prec'),' len')'
else
cd = cd '||' pd'('aa',' len')'
end
else if sp = 'C' then do
if prec \== '' then
cd = cd '|| substr('aa',' prec',' len')'
else if pos('-', flags) > 0 then
cd = cd '|| left('aa',' len')'
else
cd = cd '|| right('aa',' len')'
end
else if sp == 'H' then
cd = cd "|| fH("aa", '"siL"')"
else if sp == 'h' then
cd = cd "|| translate(fH("aa", '"siL"'), 'abcdef','ABCDEF')"
else if sp == 'i' then do
cd = cd "|| fI("aa", '"siL"'"
if prec == '' then
cd = cd')'
else
cd = cd',' prec')'
end
else if sp == 'E' | sp == 'e' then
cd = cd "|| fE("aa"," len"," prec", '"sp"')"
else if sp == 's' then
cd = cd '||' aa
else if sp = 'S' then
cd = cd '|| strip('aa')'
else
call sbErr fGen, 'bad specifier' sp
jx = jx + 1
m.jj.jx.arg = ax
m.jj.jx.name = af
end
endProcedure fGenCode
fText: procedure expose m. ft.
res = ''
do forever
if sbUntil(fGen, '\@%') then
res = res || m.fGen.tok
if \ sbLit(fGen, '\') then
return res
call sbChar fGen, 1
if pos(m.fGen.tok, 's\@%') < 1 then
res = res'\' || m.fGen.tok
else
res = res || translate(m.fgen.tok, ' ', 's')
end
endProcedure fText
/* copy f end *******************************************************/
/* copy sb begin *** scan basic ***************************************/
/*--- start scanning with a new src ----------------------------------*/
sbSrc: procedure expose m.
parse arg m, m.m.src
m.m.pos = 1
m.m.tok = ''
return m
sbErr: procedure expose m.
parse arg m, txt
call err txt 'lastToken' m.m.tok 'sbPos' m.m.pos':' ,
strip(substr(m.m.src, m.m.pos, 20), 't') 'in' m.m.src
endProcedure sbErr
/*--- return true if at end of src -----------------------------------*/
sbEnd: procedure expose m.
parse arg m
return m.m.pos > length(m.m.src)
/*--- scan n chararcters, atmost to end of src -----------------------*/
sbChar: procedure expose m.
parse arg m, len
prP = m.m.pos
m.m.pos = min(m.m.pos + len, length(m.m.src) + 1)
m.m.tok = substr(m.m.src, prP, m.m.pos -prP)
return m.m.pos > prP
/*--- scan first matching literal ------------------------------------*/
sbLit : procedure expose m.
parse arg m, lits
do lx=1 until substr(m.m.src, m.m.pos, length(l1)) == l1
l1 = word(lits, lx)
if l1 == '' then do
m.m.tok = ''
return 0
end
end
m.m.tok = l1
m.m.pos = m.m.pos + length(l1)
return 1
/*--- scan while in charset ------------------------------------------*/
sbWhile: procedure expose m.
parse arg m, chSet
vx = verify(m.m.src, chSet, 'n', m.m.pos)
if vx = 0 then
vx = length(m.m.src) + 1
m.m.tok = substr(m.m.src, m.m.pos, vx-m.m.pos)
m.m.pos = vx
return m.m.tok \== ''
/*--- scan until in charset ------------------------------------------*/
sbUntil: procedure expose m.
parse arg m, chSet
vx = verify(m.m.src, chSet, 'm', m.m.pos)
if vx = 0 then
vx = length(m.m.src) + 1
m.m.tok = substr(m.m.src, m.m.pos, vx-m.m.pos)
m.m.pos = vx
return m.m.tok \== ''
/*--- scan until (and over) string End -------------------------------*/
sbStrEnd: procedure expose m.
parse arg m, sep
px = m.m.pos
m.m.tok = ''
do forever
py = pos(sep, m.m.src, px)
if py = 0 then do
m.m.pos = length(m.m.src) + 1
m.m.tok = m.m.tok || substr(m.m.src, px)
return 0
end
m.m.tok = m.m.tok || substr(m.m.src, px, py-px)
px = py + length(sep)
if length(m.m.src) < px + length(sep) - 1 ,
| sep \== substr(m.m.src, px, length(sep)) then do
m.m.pos = px
return 1
end
m.m.tok = m.m.tok || sep
px = px + length(sep)
end
endProcedure sbStrEnd
/* copy sb end *** scan basic ***************************************/
/* copy err begin *** errorhandling, messages, help ****************/
errIni: procedure expose m.
if m.err.ini == 1 then
return
m.err.ini = 1
m.err.handler = ''
m.err.cleanup = ';'
m.err.opt = ''
parse source m.err.os .
m.err.ispf = 0
m.err.screen = ''
if m.err.os \== 'LINUX' then
if sysVar('sysISPF') = 'ACTIVE' then do
m.err.ispf = 1
address ispExec 'vget zScreen shared'
m.err.screen = zScreen
end
return
endProcedure errIni
/* configure err -----------------------------------------------------*/
errReset: procedure expose m.
call errIni
parse arg m.err.opt, m.err.handler
if pos('I', translate(m.err.opt)) > 0 & m.err.ispf then
call adrIsp 'control errors return'
return
endSubroutine errReset
/*--- error routine: abend with message ------------------------------*/
err:
parse arg ggTxt, ggOpt
call errIni
drop err handler cleanup opt call return
if ggOpt == '' & m.err.handler \== '' then
interpret m.err.handler
call errSay 'f}'ggTxt
call errCleanup
if ggOpt == '' then
ggOpt = m.err.opt
upper ggOpt
if pos('T', ggOpt) > 0 then do
trace ?r
say 'trace ?r in err'
end
if pos('H', ggOpt) > 0 & m.err.eCat == 'f' then do
call errSay ' }errorhandler exiting with divide by zero' ,
'to show stackHistory'
x = 1 / 0
end
call errSay ' }errorhandler exiting with exit(12)'
exit errSetRc(12)
endSubroutine err
/*--- set rc for ispf: -------------------------------------------------
if a cmd is run by ispStart, its RC is ignored,
but ISPF passes the value of the shared variable zIspfRc
back as return code
----------------------------------------------------------------------*/
errSetRc: procedure expose m.
parse arg zIspfRc
if m.err.ispf then
address ispExec vput 'zIspfRc' shared
return zIspfRc
endProcedure errSetRc
/*--- error routine: user message cleanup exit -----------------------*/
errAddCleanup: procedure expose m.
parse arg code
call errIni
/* concatenate backwards, then it is executed also backwards */
m.err.cleanup = ';'code || m.err.cleanup
return
endProcedure errAddCleanup
errRmCleanup: procedure expose m.
parse arg code
call errIni
cx = pos(';'code';', m.err.cleanup)
if cx > 0 then
m.err.cleanup = left(m.err.cleanup, cx) ,
|| substr(m.err.cleanup, cx + length(code)+2)
return
endProcedure errRmCleanup
errCleanup: procedure expose m.
call errIni
errCleanup = m.err.cleanup
if errCleanup = ';' then
return
m.err.cleanup = ';'
say 'err cleanup begin' errCleanup
interpret errCleanup
say 'err cleanup end' errCleanup
return
endProcedure errCleanup
/*--- say an errorMessage msg with pref and linesplits --------------*/
errSay: procedure expose m.
parse arg msg
return saySt(errMsg(msg))
/*--- prefix an errormessage with pref,
split it into lines at \n to stem m.err -------------------*/
errMsg: procedure expose m.
parse arg msg
m.err.eCat = 'f'
do while substr(msg, 2, 1) == '}'
parse var msg m.err.eCat '}' msg
end
if m.err.eCat <> '' then do
parse source . . ggS3 . /* current rexx */
pTxt = ',error,fatal error,input error,syntax error,warning,'
px = pos(','m.err.eCat, pTxt)
if px < 1 then do
m.err.eCat = 'f'
px = pos(','m.err.eCat, pTxt)
end
msg = substr(pTxt, px+1, pos(',', pTxt, px+2)-px-1) ,
'in' ggS3':' msg
end
return splitNl(err, msg) /* split lines at \n */
endProcedure errMsg
splitNL: procedure expose m.
parse arg st, msg
bx = 1
do lx=1 to 20
ex = pos('\n', msg, bx)
if ex < bx then
leave
m.st.lx = substr(msg, bx, ex-bx)
bx = ex+2
end
m.st.lx = substr(msg, bx)
m.st.0 = lx
return st
endProcedure splitNL
/*--- say (part of) the lines of a stem ----------------------------*/
saySt: procedure expose m.
parse arg st, fx, tx
do lx=word(fx 1, 1) to word(tx m.st.0, 1)
say m.st.lx
end
return st
endProcedure saySt
/*--- out (part of) the lines of a stem ----------------------------*/
outSt: procedure expose m.
parse arg st, fx, tx
do lx=word(fx 1, 1) to word(tx m.st.0, 1)
call out m.st.lx
end
return st
endProcedure outSt
/*--- say a trace message if m.trace is set --------------------------*/
debug: procedure expose m.
parse arg msg
if m.debug == 1 then
say 'debug:' msg
return
endProcedure debug
/*--- output a trace if m.trace is set -------------------------------*/
trc: procedure expose m.
parse arg msg
if m.trace == 1 then
call out 'trc:' msg
return
endProcedure trc
/*--- assert that the passed rexx expression evaluates to true -------*/
assert:
interpret 'assertRes =' arg(1)
if assertRes \==1 then
call err 'assert failed' arg(1) '==>' assertRes':' arg(2)
return
endProcedure assert
/*--- abend with Message after displaying help -----------------------*/
errHelp: procedure expose m.
parse arg msg
call errSay 'i}'msg
call help 0
call err 'i}'msg
endProcedure errHelp
/*--- display the first comment block of the source as help ----------*/
help: procedure expose m.
parse arg doClear
if doClear \== 0 then
address tso 'clear'
parse source . . s3 .
say right(' help for rexx' s3, 72, '*')
do lx=1 while pos('/*', sourceLine(lx)) < 1
if lx > 10 then
return err('initial commentblock not found for help')
end
doInc = 1
ho = m.err.helpOpt
do lx=lx+1 to sourceline() while pos('*/', sourceline(lx)) = 0
li = strip(sourceLine(lx), 't')
cx = lastPos('{', li)
if cx > 0 then do
if length(ho) = 1 then
doInc = cx = length(li) | pos(ho, li, cx+1) > 0
li = left(li, cx-1)
end
if doInc then
say li
end
say right(' end help for rexx' s3, 72, '*')
return 4
endProcedure help
/* copy err end *****************************************************/
/* copy ut begin *****************************************************/
utIni: procedure expose m.
if m.ut.ini == 1 then
return
m.ut.ini = 1
m.ut.digits = '0123456789'
m.ut.alfLC = 'abcdefghijklmnopqrstuvwxyz'
m.ut.alfUC = translate(m.ut.alfLc)
m.ut.Alfa = m.ut.alfLc || m.ut.alfUC
m.ut.alfNum = m.ut.alfa || m.ut.digits
m.ut.alfDot = m.ut.alfNum || '.'
return
endProcedure utIni
/*--- if function warning all3 arguments get evaluated|
e.g if(x=0, 'infinity', 1/0) will fail| -----------*/
if: procedure expose m.
parse arg co, ifTrue, ifFalse
if co then
return ifTrue
else
return ifFalse
endProcedure if
/*--- embedded ASSignement:
assign the second argument to the variable with name in first arg
and return the value assigned ----------------------------------*/
ass:
call value arg(1), arg(2)
return arg(2)
/*--- embedded ASSignement return NotNull:
assign the second argument to the variable with name in first arg
and return 1 if value not null, 0 if null ----------------------*/
assNN:
call value arg(1), arg(2)
return arg(2) \== ''
/*--- return current time and cpu usage ------------------------------*/
utTime: procedure expose m.
return time() 'ela='time('E') 'cpu='sysvar('syscpu'),
'su='sysvar('syssrv')
tstUtTime: procedure expose m.
say 'begin' utTime() sysvar('sysnode')
do 3000000
end
say 'end ' utTime()
return
/*--- sleep several seconds ------------------------------------------*/
sleep: procedure expose m.
parse arg secs, sayIt
if sayit <> 0 then
say 'sleeping' secs 'secs' time()
CALL SYSCALLS 'ON'
ADDRESS SYSCALL "sleep" secs
CALL SYSCALLS 'OFF'
if sayit <> 0 then
say 'slept' secs 'secs' time()
return
endProcedure sleep
/*--- left without truncation ----------------------------------------*/
lefPad: procedure expose m
parse arg s, len
if length(s) >= len then
return s
return left(s, len)
endProcedure lefPad
/*--- right without truncation ---------------------------------------*/
rigPad: procedure expose m
parse arg s, len
if length(s) >= len then
return s
return right(s, len)
endProcedure rigPad
/*--- quote string txt using quoteChar qu ("" ==> ") -----------------*/
quote: procedure expose m.
parse arg txt, qu
if qu = '' then
qu = '"'
res = qu
ix = 1
do forever
qx = pos(qu, txt, ix)
if qx = 0 then
return res || substr(txt, ix) || qu
res = res || substr(txt, ix, qx-ix) || qu || qu
ix = qx + length(qu)
end
endProcedure quote
/*--- translate to lowercase -----------------------------------------*/
ut2lc: procedure expose m.
parse arg s
return translate(s, m.ut.alfLc, m.ut.alfUc)
/*--- verify an id ---------------------------------------------------*/
verifId: procedure expose m.
parse arg src, extra
if pos(left(src, 1), m.ut.digits) > 0 then
return 1
else
return verify(src, m.mId || extra, 'n')
/*--- return the count of occurrences of needle in heyStack ----------*/
posCount: procedure expose m.
parse arg needle, hayStack, start, fin
if start = '' then
start = 1
if fin = '' then
fin = length(hayStack) + 1 - length(needle)
do cnt = 0 by 1
start = pos(needle, haystack, start)
if start < 1 | start > fin then
return cnt
start = start + length(needle)
end
endProcedure posCount
repAll: procedure expose m.
parse arg src
do ax = 2 by 2 to arg()
src = repAl2(src, src, arg(ax), arg(ax+1))
end
return src
endProcedure repAll
repAl2: procedure expose m.
parse arg src, sPos, old, new
res = ''
cx = 1
do forever
nx = pos(old, sPos, cx)
if nx < 1 then
return res || substr(src, cx)
res = res || substr(src, cx, nx-cx) || new
cx = nx + length(old)
end
endProcedure repAl2
repAllWords: procedure expose m.
parse arg src, w, new
res = ''
wx = 0
cx = 1
do forever
wx = wordPos(w, src, wx+1)
if wx < 1 then
return res || substr(src, cx)
nx = wordindex(src, wx)
res = res || substr(src, cx, nx-cx) || new
cx = nx + length(w)
end
endProcedure repAllWords
/* copy ut end ********************************************************/
}¢--- A540769.WK.REXX.O13(CA1) cre=2012-11-14 mod=2012-11-14-13.28.45 A540769 ---
/* rexx ----------------------------------------------------------------
call a cs-ca UsaLine Cmd
----------------------------------------------------------------------*/
parse arg a1, a2, a3
parse source . . self .
return caX(self, a1, a2, a3)
}¢--- A540769.WK.REXX.O13(CCSID) cre=2006-04-19 mod=2006-04-19-14.09.04 F540769 ---
/* rexx */
address ispexec 'vget ( ZTERMCID ZTERMCP ZTERMCP5 ZTERMCS5 ZTERMCS )'
say 'ZTERMCID' ZTERMCID 'ZTERMCP' ZTERMCP 'ZTERMCP5' ZTERMCP5 ,
'ZTERMCS5' ZTERMCS5 'ZTERMCS' ZTERMCS
}¢--- A540769.WK.REXX.O13(CD) cre= mod= ----------------------------------------
/* copy cd begin **************************************************
send the file frDsn from the current not
to the node toNode as toDsn if not empty
using connect direct
default attributes may be overridden (inDISP=(OLD))
or additional connect direct attributes may be specified
in argument 4 with syntax a=b c = d etc.
***********************************************************************/
cd: procedure expose m.
parse upper arg frDsn, toNode, args
if toNode == 'RZ1' | toNode == 'RZ2' then
toNode = 'SKA.'toNode
toDsn = 'outDsn...fehlt'
as = wrArgs("CD.AS", 0 ,
, "SIGNON" ,
, " SUBMIT PROC=MVS03DSN - " ,
, "NEWNAME=PVT760MP - " ,
, "MAXDELAY=UNLIMITED - " ,
, "&DEST="toNode "- " ,
, "&INDSN="frDsn "- " ,
, "&INDISP=(SHR,KEEP,KEEP) - " ,
, "&OUTDSN="toDsn "- " ,
, "&OUTDISP=(NEW,CATLG,DELETE) - " )
call scanBegin s, args
call trc 'scanBegin' args
ax = 0
do while scanKeyValue(s, 1, 1)
k = m.s.key
if k = 'DSN' | k == 'OUTDSN' then do
k = 'OUTDSN'
toDsn = m.s.val
end
do y=2 to m.as.0
px = pos(k'=', m.as.y)
if px > 0 then
leave
end
if px > 0 then do
m.as.y= left(m.as.y, px-1)k'='m.s.val '-'
end
else do
ax = ax + 1
call wrArgs as, , "&OPARM" || ax || "="k"="m.s.val "-"
end
end
call scanVerify s, ' '
if ^scanAtEol(s) then
call scanErr s, 'key = value expected'
if pos('..', toDsn) > 0 then
call err 'no dsn specified in' args
say 'sending' frDsn 'to' toNode toDsn 'with connect direct'
hx = m.as.0
m.as.hx = left(m.as.hx, length(m.as.hx) - 1)
call wrArgs as, , 'SIGNOFF'
if m.trace == 1 then do
call trc 'connectDirect sysin'
call out as
end
if m.foreground then
if listdsi('dmpublib FILE') = 0 then
call err 'dmPublib already allocated, cdadm running?'
doAlloc = m.foreground
call adrTso "alloc new delete dd(sysIN) recfm(f,b) lrecl(80)"
call writeDDBegin sysin
call wrDSfromDS 'dd=sysIn', 'stem='as
if doAlloc then do
say 'dynamically allocating connectDirect files'
call adrTso "alloc dd(DMPUBLIB) shr" ,
"dsn('JOBP.FT1A.PRCS' 'SFT.DIV.X0.CD.PRCS')"
call adrTso "alloc dd(DMNETMAP) shr dsn('SFT.SKA.P0.CD.NETMAP')"
call adrTso "alloc dd(DMMSGFIL) shr dsn('SFT.DIV.X0.CD.MSG')"
call adrTso "alloc dd(DMPRINT) sysout(T)"
end
call trc "everything allocated callin dmBatch"
cdRc = adrTso("CALL *(DMBATCH) 'YYSLYNN'", '*')
call trc 'dmBatch rc' cdRc
call adrTso "free dd(sysin)"
if doAlloc then
call adrTso "free dd(DMPUBLIB DMPRINT DMNETMAP DMMSGFIL)"
if cdRc ^= 0 then
call err 'rc' cdRc 'in connectDirect'
return
endProcedure cd
/* copy cd end ******************************************************/
}¢--- A540769.WK.REXX.O13(CDOS29) cre= mod= ------------------------------------
/* copy connDir begin **************************************************
send the file frDsn from the current not
to the node toNode as toDsn if not empty
using connect direct
additional connect direct attributes may be specified
by arguments 4... (with ,a b, or equifalently , a='b',
***********************************************************************/
connectDirect: procedure
parse upper arg frDsn, toNode, toDsn
say 'sending' frDsn 'to' toNode toDsn 'with connect direct'
call adrTso "alloc shr dd(sysut1) reuse dsn("frDsn")"
call adrTso "alloc new delete dd(DDIN) dsn("dsnTemp(connDir)")" ,
"recfm(f,b) lrecl(80)"
call writeDDBegin ddIn
t.1 = "DEST='"toNode"'"
t.2 = "DSNCOPY='YES'"
x=2
if toDsn ^= '' then do
x = x + 1
t.x = "DSN='"dsn2Jcl(toDsn)"'"
end
do ax=4 to arg()
parse upper value arg(ax) with key val
val = strip(val)
call trc 'arg' ax':' arg(ax) 'key' key "val '"val"'"
if key = '' then
iterate
x = x+1
if pos("=", key) > 0 then
t.x = key val
else
t.x = key"='"val"'"
end
call writeDD ddIn, t., x
call writeDDEnd ddIn
if 1 then do
call trc 'connectDirect ddIn' x
do i=1 to x
call trc i t.i
end
end
call adrTso "call *(OS2900)"
call adrTsoRc 'free dd(sysut1)' /* a ghost freed it already */
call adrTso 'free dd(ddin) delete'
/* os2900 does not free it dd's, so we do it
otherwise the second run will fail... */
call adrTsoRc 'free dd(ddPrint work01 cmdout dmprint)'
say 'end connectDirect'
return /* end connectDirect */
/* copy connDir end *************************************************/
}¢--- A540769.WK.REXX.O13(CDT) cre=2006-05-23 mod=2006-05-23-16.28.51 F540769 ---
/* REXX *************************************************************
this editmacro replaces all #dt# by the current date time
**********************************************************************/
call adrEdit('macro (args)')
say 'macro args' args
tst = time('N')
tst = 'D'date('j')'.T'left(tst,2)substr(tst, 4, 2)right(tst,2)
say 'timestamp' tst
call adrEdit "c '#dt#' '"tst"' all"
exit 0
/************** member copy adr **************************************/
/**********************************************************************
dsn*: manipulate dataSetNames
dsn2Jcl: convert from tso to JCL format
dsnFromJcl: convert from jcl to TSO format
dsnGetLLQ: get the llq from a dsn
dsnGetMbr: get the Member name from a dsn
dsnApp: cleanup and append dsn parts (preserve apos ...)
dsnSetMbr: set a Member name or remove it if mbr = ''
***********************************************************************/
say dsnApp("a.b c(d e) f' ))) h")
say dsnApp("'a.b c(d e) f' ))) h")
call help
call errHelp(test errHelp)
dsn2jcl: procedure
parse arg dsn .
if left(dsn,1) = "'" then
return strip(dsn, 'b', "'")
else if sysvar('SYSPREF') = '' then
return dsn
else
return sysvar('SYSPREF')'.'dsn
endProcedure dsn2Jcl
dsnFromJcl: procedure
parse arg dsn .
return "'"dsn"'"
endProcedure dsnFromJcl
dsnApp: procedure
parse arg parts
dsn = ''
do wx=1 by 1
w = word(parts, wx)
if w = '' then
leave
do while w <> ''
if pos(right(w, 1), "') ") <= 0 then
leave
w = left(w, length(w)-1)
end
dsn = dsn || w
end
if pos('(', dsn) > 0 then
dsn = dsn')'
if left(dsn,1) = "'" then
return dsn"'"
else
return dsn
endProcedure dsnApp
dsnSetMbr: procedure
parse arg dsn, mbr
mbr = strip(mbr)
bx = pos('(', dsn)
if mbr = '' then do
if bx < 1 then
return dsn
else if left(dsn, 1) = "'" then
return left(dsn,bx-1)"'"
else
return left(dsn,bx-1)
end
else do
if bx < 1 then
return dsnApp(dsn '('mbr)
else
return dsnApp(left(dsn, bx) mbr)
end
endProcedure dsnSetMbr
dsnGetMbr: procedure
parse arg dsn
lx = pos('(', dsn)
rx = pos(')', dsn, lx+1)
if lx < 1 then
return ''
else if lx < rx then
return substr(dsn, lx+1, rx-lx-1)
else
return strip(substr(dsn,lx+1), 't', "'")
endProcedure dsnGetMbr
dsnGetLLQ: procedure
parse arg dsn
rx = pos('(', dsn) - 1
if rx < 0 then
rx = length(dsn)
lx = lastPos('.', dsn, rx)
return strip(substr(dsn, lx+1, rx-lx), 'b', "'")
endProcedure dsnGetLLQ
/**********************************************************************
lmd: catalog read
call sequence: lmdBegin, lmdNext*, lmdEnd
mit lmd service (mit save in file und read,
weil list zu langsam und listcat abstürzt)
1. arg (grp) als group dataset für lmd save
und dd name für file read
***********************************************************************/
lmdTest: procedure
parse arg lev
say showTime() 'lmdTest' lev
call lmdBegin 'test', lev
say showTime() 'lmdTest after begin' lev
z = 0
do while lmdNext('test', st.)
do y=1 to st.0
z=z+1
say z word(st.y, 1)
end
end
call lmdEnd 'test'
say showTime() 'lmdTest' z 'files in' lev
return /* readTest */
lmdBegin: procedure
parse arg grp, lev
call adrIsp 'lmdinit listid(lmdId) level('lev')'
call adrIsp 'lmdlist listid(&lmdId) option(save) group('grp')'
call adrIsp 'lmdfree listid(&lmdId)'
say showTime() 'lmdlist save' grp lev
call readBegin grp, grp'.datasets'
return /* end lmdBegin */
lmdNext:
parse arg lvGrp, lvSt
return readNext(lvGrp, lvSt)
lmdEnd: procedure
parse arg grp
call readEnd grp
return /* end lmdEnd */
/**********************************************************************
member list of a pds:
call sequence x=lmmBegin(dsn) lmmNext(x) * lmmEnd(x)
***********************************************************************/
lmmTest: procedure
parse arg dsn
if dsn = '' then
dsn = 'wk.pli(*)'
say 'lmmTest for dsn' dsn
id = lmmBegin(dsn)
do ix=1 by 1
m = lmmNext(id)
if m = '' then
leave
say ix m
end
call lmmEnd id
say 'lmmTest end' (ix-1) 'members in' dsn
return
endProcedure lmmTest
lmmBegin: procedure
parse arg dsn
mbr = dsnGetMbr(dsn)
pds = dsnSetMbr(dsn, )
call adrIsp "LMINIT DATAID(lmmId) DATASET("pds") ENQ(SHRW)"
call adrIsp "LMOPEN DATAID("lmmId") OPTION(INPUT) "
res = lmmId
if mbr <> '' then
res = res 'pattern('mbr')'
say 'lmmBegin returning' res
return res
end lmmBegin
lmmEnd: procedure
parse arg lmmId opt
if adrIspRc("LMMLIST DATAID("lmmId") option(free)") <> 0 then
if rc <> 8 then
call err "lmmEnd" id lmmId "rc" rc "for lmmList free"
call adrIsp "LMCLOSE DATAID("lmmId")"
call adrIsp "LMFREE DATAID("lmmId")"
return
endProcedure lmmEnd
lmmNext: procedure
parse arg lmmId opt
gmRc = adrIspRc("LMMLIST DATAID("lmmid")" ,
"OPTION(LIST) MEMBER(Mbr)" opt)
if gmRc = 0 then
return mbr
else if gmRc = 8 | gmRC = 4 then
return ''
else
call err 'lmmList rc' gmRc
endProcedure lmmNext
/**********************************************************************
read: read a file
call sequence: readBegin, readNext*, readEnd
1. arg (dd) dd name, wird alloziert in begin und free in end
readNext liest 100 records in übergebenen stem,
returns false at eof
***********************************************************************/
readTest: procedure
parse arg dsn
say showTime() 'readTest' dsn
call readBegin 'ddEins', dsn
z = 0
do while readNext('ddEins', st.)
do y=1 to st.0
z=z+1
say z strip(st.y, 't')
end
end
call readEnd 'ddEins'
say showTime() 'readTest' z 'records in' dsn
return /* readTest */
readBegin: procedure
parse arg dd, dsn
call adrTso 'alloc dd('dd') shr reuse dsn('dsn')'
return /* end readBegin */
readNext:
parse arg lv_DD, lv_St
if adrTsoRc('execio 100 diskr' lv_DD '(stem' lv_St')') = 0 then
return 1
else if rc = 2 then
return (value(lv_St'0') > 0)
else
call err 'execio 100 diskr' lv_DD 'rc' rc
return /* end readNext */
readEnd: procedure
parse arg dd
call adrTso 'execio 0 diskr' dd '(finis)'
call adrTso 'free dd('dd')'
return /* end readEnd */
/**********************************************************************
writeApp: append lines to a file
ggDsn: dsn to append lines
ggStem stem containing line (with dot|)
ggNr number of lines, if empty <stem>.0
***********************************************************************/
writeApp:
parse arg ggDsn, ggStem, ggNr
if ggNr = '' then
ggNr = value(ggStem'0')
if pos('(', ggDsn) < 1 then do /* sequential ds, use disp=mod */
call adrTso 'alloc mod reuse dd(ddApp) dsn('ggDsn')'
end
else do /* pds: read and rewrite */
call adrTso 'alloc shr reuse dd(ddApp) dsn('ggDsn')'
if sysdsn(ggDsn) = 'OK' then do
call adrTso 'execio * diskr ddApp (stem ggL. finis)'
call adrTso 'execio' ggL.0 'diskw ddApp (stem ggL.)'
end
end
call adrTso 'execio' ggNr 'diskw ddApp (stem' ggStem 'finis)'
call adrTso 'free dd(ddApp)'
return
endProcedure writeApp
log: procedure
parse arg logLine
l.1 = date('s') time() logLine
call writeApp 'wk.out(ll)', l., 1
return
endProcedure log
/**********************************************************************
variable Expansion: replace variable by their value
***********************************************************************/
varExpandTest: procedure
m.v.eins ='valEins'
m.v.zwei ='valZwei'
m.l.1='zeile eins geht unverändert'
m.l.2='$EINS auf zeile ${ZWEI} und \$EINS'
m.l.3='...$EINS?auf zeile ${ZWEI}und $EINS'
m.l.4='...$EINS,uf zeile ${ZWEI}und $EINS$$'
m.l.5='${EINS}$ZWEI$EINS${ZWEI}'
m.l.0=5
call varExpand l, r, v
do y=1 to m.r.0
say 'old' y m.l.y
say 'new' y m.r.y
end
return
endProcedure varExpandTest
varExpand: procedure expose m.
parse arg old, new, var
varChars = ,
'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
do lx=1 to m.old.0
cx = 1
res = ''
do forever
dx = pos('$', m.old.lx, cx)
if dx < cx then do
m.new.lx = res || strip(substr(m.old.lx, cx), 't')
leave
end
res = res || substr(m.old.lx, cx, dx - cx)
if dx >= length(m.old.lx) then
call err '$ at end line m.'old'.'lx'='m.old.lx
if substr(m.old.lx, dx+1, 1) = '$' then do
res = res || '$'
cx = dx + 2
iterate
end
if substr(m.old.lx, dx+1, 1) = '{' then do
cx = pos('}', m.old.lx, dx+1)
if cx <= dx then
call err 'ending } missing line m.'old'.'lx'='m.old.lx
na = substr(m.old.lx, dx+2, cx-dx-2)
cx = cx + 1
end
else do
cx = verify(m.old.lx, varChars, 'N', dx+1);
if cx <= dx then
cx = length(m.old.lx) + 1
na = substr(m.old.lx, dx+1, cx-dx-1)
end
if symbol('m.v.na') = 'VAR' then
res = res || m.var.na
else
call err 'var' na 'not defined line m.'old'.'lx'='m.old.lx
end
m.new.0 = m.old.0
end
return /* var expand */
/**********************************************************************
adrSql: execute sql thru the dsnRexx interface
***********************************************************************/
adrSql: /* no procedure, to keep variables sql... */
parse arg ggStmt, ggNo
if ggNo <> '1' then
ggStmt = 'execSql' ggStmt
address dsnRexx ggStmt
if rc = 0 then
nop /* say "sql ok:" ggStmt */
else if rc > 0 then
say "sql warn rc" rc sqlmsg()':' ggStmt
else
call err "sql rc" rc sqlmsg()':' ggStmt
return
endSubroutine adrSql
adrSqlConnect: procedure
parse arg sys
if adrTSORc("SUBCOM DSNREXX") <> 0 then do
sRC = RXSUBCOM('ADD','DSNREXX','DSNREXX') /* ADD HOST CMD ENV */
say 'subcom' sRc
end
call adrSql "connect" sys, 1
return
endProcedure adrSqlConnect
adrSqlDisconnect: procedure
call adrSql "disconnect ", 1
return
endProcedure adrSqlDisconnect
sqlMsg: /* no procedure, to keep variables sql... */
if sqlCode = 0 then
return 'ok (sqlCode=0)'
else
return 'sqlCode='sqlCode,
'errMc' strip(translate(sqlerrmc, ',', 'FF'x))
endSubroutine sqlMsg
/**********************************************************************
adrDsn: send a command to db2 with the TSO dsn command
***********************************************************************/
adrDsn: procedure
parse arg sys, cmd, rcOk
call adrTso 'alloc dd(sysprint) new reuse'
push 'END'
push cmd
rr = adrTsoRc('DSN SYSTEM('sys')')
say 'rc' rr 'adrTso DSN SYSTEM('sys') cmd' cmd
if wordPos(rr, rcOk) < 1 then do
say 'error rc' rr 'in adrTso DSN SYSTEM('sys') cmd' cmd
call adrTso 'execio * diskr sysprint (finis stem pr.)'
say 'sysprint' pr.0 'lines'
do x=1 to pr.0
say strip(pr.x, 't')
end
call adrTso 'free dd(sysprint) '
call err 'rc' rr 'in adrTso DSN SYSTEM('sys') cmd' cmd
end
call adrTso 'free dd(sysprint)'
return rr
endProcedure adr Dsn
/**********************************************************************
adr*: address an environment
adrTso: fails if rc <> 0
adrTsoRc: returns rc without failing
***********************************************************************/
adrTsoRc:
parse arg tsoCmd
address tso tsoCmd
return rc /* end adrTsoRc */
adrTso:
parse arg tsoCmd
address tso tsoCmd
if rc <> 0 then
call err 'adrTso rc' rc 'for' tsoCmd
return /* end adrTso */
adrIspRc:
parse arg ispCmd
address ispexec ispCmd
return rc /* end adrIspRc */
adrIsp:
parse arg ispCmd
address ispexec ispCmd
if rc <> 0 then
call err 'adrIsp rc' rc 'for' ispCmd
return /* end adrIsp */
adrEdit:
parse arg editCmd, ret
address isrEdit editCmd
if rc <> 0 then
call err 'adr isrEdit rc' rc 'for' editCmd
return /* end adrEdit */
adrEditRc:
parse arg editCmd
address isrEdit editCmd
return rc /* end adrEditRc */
err:
parse arg txt
parse source s1 s2 s3 .
say 'fatal error in' s3':' txt
exit 12
errHelp: procedure
parse arg errMsg
say 'fatal error:' errMsg
call help
call err errMsg
endProcedure errHelp
help: procedure
parse source . . s3 .
say 'help for rexx' s3
do lx=1 by 1
if pos('/*', sourceLine(lx)) > 0 then
leave
else if lx > 10 then do
say 'initial commentblock not found for help'
return
end
end
do lx=lx+1 by 1
li = strip(sourceLine(lx), 't', ' ')
if pos('*/', li) > 0 then
leave
say li
end
return
endProcedure help
showtime:
parse arg showmsg
return time() sysvar('syscpu') sysvar('syssrv') showmsg
}¢--- A540769.WK.REXX.O13(CDTEST) cre= mod= ------------------------------------
/* rexx */
m.trace = 1
m.foreground = sysvar(sysenv) == 'FORE'
call cd A540769.TEST.out,
, 'rz2',
, 'A540769.test.rz1sys1',
, 'proc = ska03dsn newName = wktest' ,
'MGMTCLAS=S005Y000 LRECL=22756'
call cd A540769.TEST.out,
, 'rz2',
, 'A540769.test.rz1sys2',
, 'proc = ska03dsn newName = wktest' ,
'MGMTCLAS=S005Y000 LRECL=22756'
call cd A540769.TEST.out,
, 'rz2',
, 'A540769.test.rz1sys3',
, 'proc = ska03dsn newName = wktest' ,
'MGMTCLAS=S005Y000 LRECL=22756'
exit
call cd PVSO.RZ1.P0.TS4SXXXX.D05300.TXXXXXX.TRACK2,
, 'TEST',
, 'T1DAT.DOCSYS.FTSCS.PVSTRACK(+1)',
, 'proc = mvs03dsn newName = wktest' ,
'MGMTCLAS=MCGDG DATACLAS=DCVFILE LRECL=32756'
err:
parse arg ggMsg
call errA ggMsg
exit 12
endSubroutine err
/* copy scan begin ****************************************************/
/**********************************************************************
Scan: scan an input:
scanBegin(m,ln): set scan Source to ln
scanEol (m) : returns whether we reached end of line already
scanLit(m,lit) : scan Literal lit if present or return 0
scanChar(m,n) : scan next n characters
scanName(m) : scan a name
scanNum(m) : scan integer (without sign)
scanString(m,q): scan a String with quote q. (with doubble = 1)
scanVerify(m,c,o): verify(...,c,o,...)
scanKeyValue(m): scan a key = value clause (with spaces)
scanWord(m,u) : scan a space delimited word or a string,
if u=1 then uppercase non-strings
scanErr(m, txt): error with current scan location
returns: true if scanned 0 otherwise
m.m.tok ==> last token
m.m.val ==> last value for scanString/Word/KeyValue
m.m.key ==> key for scanKeyValue
m.scan.m.pos ==> scan position
m.scan.m.src ==> scan source
***********************************************************************/
scanBegin: procedure expose m.
parse arg m, aSrc
m.scan.m.src = aSrc
m.scan.m.pos = 1
m.scan.m.tok = ''
m.scan.m.val = ''
if symbol('m.scan.m.Name') ^== 'VAR' then do
m.scan.LC = 'abcdefghijklmnopqurstuvwxyz'
m.scan.UC = 'ABCDEFGHIJKLMNOPQURSTUVWXYZ'
m.scan.Alpha = m.scan.LC || m.scan.UC
m.scan.AlNum = '0123456789' || m.scan.ALPHA
m.scan.m.Name1 = m.scan.ALPHA
m.scan.m.Name = m.scan.ALNUM
end
return
endProcedure scanBegin
scanEOL: procedure expose m.
parse arg m, qu
return m.scan.m.pos > length(m.scan.m.src)
endProcedure scanEOL
scanChar: procedure expose m.
parse arg m, len
nx = 1 + length(m.scan.m.src)
if len ^== '' then
if nx > m.scan.m.pos + len then
nx = m.scan.m.pos + len
if nx = m.scan.m.pos then
return 0
m.m.tok = substr(m.scan.m.src, m.scan.m.pos, nx - m.scan.m.pos)
m.scan.m.pos = nx
return 1
endProcedure scanChar
scanLit: procedure expose m.
parse arg m, lit
if ^ abbrev(substr(m.scan.m.src, m.scan.m.pos), lit) then
return 0
m.scan.m.pos = m.scan.m.pos + length(lit)
return 1
endProcedure scanLit
scanString: procedure expose m.
parse arg m, qu
m.m.val = ''
if qu = '' then
qu = "'"
if substr(m.scan.m.src, m.scan.m.pos, 1) ^== qu then
return 0
bx = m.scan.m.pos
qx = m.scan.m.pos + 1
do forever
px = pos(qu, m.scan.m.src, qx)
if px < 1 then
call scanErr m, 'ending Apostroph('qu') missing'
m.m.val = m.m.val || substr(m.scan.m.src, qx, px-qx)
if px >= length(m.scan.m.src) then
leave
else if substr(m.scan.m.src, px+1, 1) <> qu then
leave
qx = px+2
m.m.val = m.m.val || qu
end
m.m.tok = substr(m.scan.m.src, bx, px+1-bx)
m.scan.m.pos = px+1
return 1
endProcedure scanString
scanName: procedure expose m.
parse arg m, alpha
if pos(substr(m.scan.m.src, m.scan.m.pos, 1),
, m.scan.m.Name1) <= 0 then
return 0
bx = m.scan.m.pos
m.scan.m.pos = bx + 1
call scanVerify m, m.scan.m.Name
m.m.tok = substr(m.scan.m.src, bx, m.scan.m.pos - bx)
return 1
endProcedure scanName
scanVerify: procedure expose m.
parse arg m, alpha, vOpt
if vOpt == '' then /* empty string does not take default| */
nx = verify(m.scan.m.src, alpha, , m.scan.m.pos)
else
nx = verify(m.scan.m.src, alpha, vOpt, m.scan.m.pos)
if nx = 0 then
nx = length(m.scan.m.src) + 1
m.m.tok = substr(m.scan.m.src, m.scan.m.Pos, nx - m.scan.m.Pos)
if nx <= m.scan.m.pos then
return 0
m.scan.m.pos = nx
return 1
endProcedure scanVerify
scanNum: procedure expose m.
parse arg m
if ^ scanVerify(m, '0123456789') then
return 0
else if pos(substr(m.scan.m.src, m.scan.m.pos, 1), m.scan.m.name1) ,
> 0 then
call scanErr m, 'illegal number end'
return 1
endProcedure scanNum
scanWord: procedure expose m.
parse arg m, uc
call scanVerify m, ' '
if scanString(m, "'") then return 1
else if scanString(m, """") then return 1
else
res = scanVerify(m, ' ', 'm')
m.m.val = m.m.tok
if uc == 1 then
upper m.m.val
return res
endProcedure scanWord
scanKeyValue: procedure expose m.
parse arg m, uk, uv
bx = m.scan.m.pos
call scanVerify m, ' '
if scanName(m) then do
m.m.key = translate(m.m.tok)
if uk == 1 then
upper m.m.key
call scanVerify m, ' '
if scanLit(m, '=') then do
call scanWord m, uv
return 1
end
end
m.scan.m.pos = bx
return 0
endProcedure scanKeyValue
scanErr: procedure expose m.
parse arg m, txt
say 'scanErr' txt
say ' last token' m.scan.m.tok
say ' charPos' m.scan.m.Pos':',
strip(substr(m.scan.m.src, m.scan.m.Pos), 't')
say ' in line:' strip(m.scan.m.src, 't')
if symbol('m.scan.m.lineinfo') == 'VAR' then
interpret 'say " lineinfo:" ('m.scan.m.lineinfo')'
call err 'scanErr' txt
endProcedure scanErr
/* copy scan end ****************************************************/
/* copy adr begin ****************************************************/
/**********************************************************************
dsn*: manipulate dataSetNames
dsn2Jcl: convert from tso to JCL format
dsnFromJcl: convert from jcl to TSO format
dsnPosLev: get the index of first char of level
(negativ levels are counted from the right)
dsnGetMbr: get the Member name from a dsn
dsnApp: cleanup and append dsn parts (preserve apos ...)
dsnSetMbr: set a Member name or remove it if mbr = ''
dsnTemp return the name of a temporary dataset
dsnGetLLQ ==> dsnGetLev(..., -1) depreciated
***********************************************************************/
dsn2jcl: procedure
parse arg dsn .
if left(dsn,1) = "'" then
return strip(dsn, 'b', "'")
else if sysvar('SYSPREF') = '' then
return dsn
else
return sysvar('SYSPREF')'.'dsn
endProcedure dsn2Jcl
dsnFromJcl: procedure
parse arg dsn .
return "'"dsn"'"
endProcedure dsnFromJcl
dsnApp: procedure
parse arg parts
dsn = ''
do wx=1 by 1
w = word(parts, wx)
if w = '' then
leave
do while w <> ''
if pos(right(w, 1), "') ") <= 0 then
leave
w = left(w, length(w)-1)
end
dsn = dsn || w
end
if pos('(', dsn) > 0 then
dsn = dsn')'
if left(dsn,1) = "'" then
return "'"strip(dsn, 'b', "'")"'"
else
return dsn
endProcedure dsnApp
dsnSetMbr: procedure
parse arg dsn, mbr
mbr = strip(mbr)
bx = pos('(', dsn)
if mbr = '' then do
if bx < 1 then
return dsn
else if left(dsn, 1) = "'" then
return left(dsn,bx-1)"'"
else
return left(dsn,bx-1)
end
else do
if bx < 1 then
return dsnApp(dsn '('mbr)
else
return dsnApp(left(dsn, bx) mbr)
end
endProcedure dsnSetMbr
dsnGetMbr: procedure
parse arg dsn
lx = pos('(', dsn)
rx = pos(')', dsn, lx+1)
if lx < 1 then
return ''
else if lx < rx then
return substr(dsn, lx+1, rx-lx-1)
else
return strip(substr(dsn,lx+1), 't', "'")
endProcedure dsnGetMbr
dsnPosLev: procedure
parse arg dsn, lx
sx = posLev('.', dsn, lx)
if sx ^= 1 then
return sx
else
return 1 + (left(dsn, 1) == "'")
endProcedure dsnPosLev
dsnGetLev: procedure
parse arg dsn, lx
sx = dsnPosLev(dsn, lx)
if sx < 1 then
return ''
ex = pos('.', dsn, sx)
if ex < 1 then do
ex = pos('(', dsn, sx)
if ex < 1 then
return substr(dsn, sx)
end
return substr(dsn, sx, ex-sx)
endProcedure dsnGetLev
dsnTemp: procedure
parse upper arg suf
l = time(l);
d = 'tempFile.t'left(l,2)substr(l,4,2)substr(l,7,2)'.m'right(l,6)
call trc 'jobName' mvsVar('SYMDEF', 'JOBNAME')
d = 'tmpFile.'mvsVar('SYMDEF', 'JOBNAME')'.'suf
call trc 'tempFile' sub '=>' d
return d
endProcedure dsnTemp
/**********************************************************************
StringHandling
posRep: return the index of rep'th occurrence of needle
negativ rep are counted from the right
***********************************************************************/
quote: procedure
parse arg txt, qu
if qu = '' then
qu = "'"
res = qu
ix = 1
do forever
qx = pos(qu, txt, ix)
if qx = 0 then
return res || substr(txt, ix) || qu
res = res || substr(txt, ix, qx-ix) || qu || qu
ix = qx + length(qu)
end
endProcedure quote
posRep: procedure
parse arg needle, hayStack, rep, start
if rep > 0 then do
if start = '' then
start = 1
do cc = 1 to rep
sx = pos(needle, hayStack, start)
if sx < 1 then
return 0
start = sx + length(needle)
end
return sx
end
else if rep < 0 then do
if start = '' then
start = length(hayStack)
do cc = 1 to -rep
sx = lastPos(needle, hayStack, start)
if sx < 1 then
return 0
start = sx - length(needle)
end
return sx
end
else
return 0
endProcedure posRep
posLev: procedure
parse arg needle, hayStack, rep, start
if rep > 1 then do
sx = posRep(needle, hayStack, rep-1, start)
if sx < 1 then
return 0
return 1+sx
end
else if rep < -1 then do
sx = posRep(needle, hayStack, rep+1, start)
if sx < 1 then
return 0
return 1+lastPos(needle, hayStack, sx-1)
end
else if rep ^= -1 then
return rep /* for 0 and 1 */
else if start == '' then /* pos fails with empty start| */
return 1 + lastPos(needle, hayStack)
else
return 1 + lastPos(needle, hayStack, start)
endProcedure posLev
posCount: procedure
parse arg needle, hayStack, start, fin
if start = '' then
start = 1
if fin = '' then
fin = length(hayStack) + 1 - length(needle)
cnt = 0
do forever
start = pos(needle, haystack, start)
if start < 1 | start > fin then
return cnt
cnt = cnt + 1
start = start + length(needle)
end
endProcedure posCount
/**********************************************************************
lmd: catalog read
call sequence: lmdBegin, lmdNext*, lmdEnd
mit lmd service (mit save in file und read,
weil list zu langsam und listcat abstürzt)
1. arg (grp) als group dataset für lmd save
und dd name für file read
***********************************************************************/
lmdBegin: procedure
parse arg grp, lev
call adrIsp 'lmdinit listid(lmdId) level('lev')'
res = adrIspRC('lmdlist listid(&lmdId) option(save) group('grp')')
call adrIsp 'lmdfree listid(&lmdId)'
if res = 0 then do
call trc showTime() 'lmdlist save' grp lev
call adrTso 'alloc dd('grp') shr dsn('grp'.datasets)'
end
else if res = 4 then do
call trc 'no datasets found' showTime() 'lmdlist save' grp lev
call adrTso 'alloc dd('grp') dummy'
end
else
call err 'rc' res 'in lmdlist save' grp lev
call readDDBegin grp
return /* end lmdBegin */
lmdNext:
parse arg ggGrp, ggSt
return readDD(ggGrp, ggSt)
lmdEnd: procedure
parse arg grp
call readDDEnd grp
call adrTso 'free dd('grp')'
return /* end lmdEnd */
/**********************************************************************
member list of a pds:
call sequence x=lmmBegin(dsn) lmmNext(x) * lmmEnd(x)
***********************************************************************/
lmmTest: procedure
parse arg dsn
if dsn = '' then
dsn = 'wk.pli(*)'
say 'lmmTest for dsn' dsn
id = lmmBegin(dsn)
do ix=1 by 1
m = lmmNext(id)
if m = '' then
leave
say ix m
end
call lmmEnd id
say 'lmmTest end' (ix-1) 'members in' dsn
return
endProcedure lmmTest
lmmBegin: procedure
parse arg dsn
mbr = dsnGetMbr(dsn)
pds = dsnSetMbr(dsn, )
call adrIsp "LMINIT DATAID(lmmId) DATASET("pds") ENQ(SHRW)"
call adrIsp "LMOPEN DATAID("lmmId") OPTION(INPUT) "
res = lmmId
if mbr <> '' then
res = res 'pattern('mbr')'
say 'lmmBegin returning' res
return res
endProcedure lmmBegin
lmmEnd: procedure
parse arg lmmId opt
if adrIspRc("LMMLIST DATAID("lmmId") option(free)") <> 0 then
if rc <> 8 then
call err "lmmEnd" id lmmId "rc" rc "for lmmList free"
call adrIsp "LMCLOSE DATAID("lmmId")"
call adrIsp "LMFREE DATAID("lmmId")"
return
endProcedure lmmEnd
lmmNext: procedure
parse arg lmmId opt
gmRc = adrIspRc("LMMLIST DATAID("lmmid")" ,
"OPTION(LIST) MEMBER(Mbr)" opt)
if gmRc = 0 then
return mbr
else if gmRc = 8 | gmRC = 4 then
return ''
else
call err 'lmmList rc' gmRc
endProcedure lmmNext
/**********************************************************************
read: read a file
valid call sequences:
readDsn read a whole dsn
readDDBegin, readDD*, readDDEnd read dd in chunks
writeBegin, writeDD*, writeEnd write dsn in chunks
readDD liest 100 records in übergebenen stem,
returns false at eof
***********************************************************************/
readTest: procedure
parse arg dsn
say showTime() 'readTest' dsn
call readBegin 'ddEins', dsn
z = 0
do while readDD('ddEins', st.)
do y=1 to st.0
z=z+1
say z strip(st.y, 't')
end
end
call readEnd 'ddEins'
say showTime() 'readTest' z 'records in' dsn
return /* readTest */
readDDBegin: procedure
return /* end readDDBegin */
readDD:
parse arg ggDD, ggSt, ggCnt
if ggCnt = '' then
ggCnt = 100
if adrTsoRc('execio' ggCnt 'diskr' ggDD '(stem' ggSt')') = 0 then
return (value(ggSt'0') > 0)
else if rc = 2 then
return (value(ggSt'0') > 0)
else
call err 'execio' ggCnt 'diskr' ggDD 'rc' rc
return /* end readDD */
readDDEnd: procedure
parse arg dd
call adrTso 'execio 0 diskr' dd '(finis)'
return /* end readDDEnd */
writeDDBegin: procedure
parse arg ggDD
call adrTso 'execio' 0 'diskw' ggDD '(open)'
return /* end writeDDBegin */
writeDD:
parse arg ggDD, ggSt, ggCnt
if ggCnt == '' then
ggCnt = value(ggst'0')
call adrTso 'execio' ggCnt 'diskw' ggDD '(stem' ggSt')'
return
endSubroutine writeDD
writeDDEnd: procedure
parse arg dd
call adrTso 'execio 0 diskw' dd '(finis)'
return /* end writeDDEnd */
writeDsn:
parse arg ggDsn, ggSt
call adrTso 'alloc dd(ggWrite) dsn('ggDsn')'
call writeDDBegin 'ggWrite'
call writeDD 'ggWrite', ggSt
call writeDDEnd 'ggWrite'
call adrTso 'free dd(ggWrite)'
return
endProcedure writeDsn
/**********************************************************************
writeApp: append lines to a file
ggDsn: dsn to append lines
ggStem stem containing line (with dot|)
ggNr number of lines, if empty <stem>.0
***********************************************************************/
writeApp:
parse arg ggDsn, ggStem, ggNr
if ggNr = '' then
ggNr = value(ggStem'0')
if pos('(', ggDsn) < 1 then do /* sequential ds, use disp=mod */
call adrTso 'alloc mod reuse dd(ddApp) dsn('ggDsn')'
end
else do /* pds: read and rewrite */
call adrTso 'alloc shr reuse dd(ddApp) dsn('ggDsn')'
if sysdsn(ggDsn) = 'OK' then do
call adrTso 'execio * diskr ddApp (stem ggL. finis)'
call adrTso 'execio' ggL.0 'diskw ddApp (stem ggL.)'
end
end
call adrTso 'execio' ggNr 'diskw ddApp (stem' ggStem 'finis)'
call adrTso 'free dd(ddApp)'
return
endProcedure writeApp
log: procedure
parse arg logLine
l.1 = date('s') time() logLine
call writeApp 'wk.out(ll)', l., 1
return
endProcedure log
/**********************************************************************
adrSql: execute sql thru the dsnRexx interface
***********************************************************************/
adrSqlRc: /* no procedure, to keep variables sql... */
parse arg ggSqlStmt, ggNo
if ggNo <> '1' then
ggSqlStmt = 'execSql' ggSqlStmt
address dsnRexx ggSqlStmt
if rc = 0 then
return 0 /* say "sql ok:" ggSqlStmt */
else if rc < 0 then
call err "sql rc" rc sqlmsg()
if sqlCode = 0 then
say 'warning' sqlMsg()
return sqlCode
endSubroutine adrSqlRc
adrSql: /* no procedure, to keep variables sql... */
parse arg ggSqlStmt, ggNo
if adrSqlRc(ggSqlStmt, ggNo) = 0 then
return
call err "sql rc" rc sqlmsg()
endSubroutine adrSql
adrSqlConnect: procedure
parse arg sys
if adrTSORc("SUBCOM DSNREXX") <> 0 then do
sRc = RXSUBCOM('ADD','DSNREXX','DSNREXX') /* ADD HOST CMD ENV */
if sRc <> 0 then
call err 'rc' sRc 'from RXSUBCOM(ADD, DSNREXX, DSNREXX)'
end
call adrSql "connect" sys, 1
return
endProcedure adrSqlConnect
adrSqlDisconnect: procedure
call adrSql "disconnect ", 1
return
endProcedure adrSqlDisconnect
sqlMsg: /* no procedure, to keep variables sql... */
ggW = ''
do ggX=0 to 10
if sqlWarn.ggx <> '' then
ggw = ggw ggx'='sqlWarn.ggx
end
return 'sqlCode' sqlCode 'state' sqlState 'warn' ggW ,
'errMc' strip(translate(sqlerrmc, ',', 'FF'x))':' ggSqlStmt
endSubroutine sqlMsg
/**********************************************************************
adrDsn: send a command to db2 with the TSO dsn command
***********************************************************************/
adrDsn: procedure
parse arg sys, cmd, rcOk
call adrTso 'alloc dd(sysprint) new reuse'
push 'END'
push cmd
rr = adrTsoRc('DSN SYSTEM('sys')')
say 'rc' rr 'adrTso DSN SYSTEM('sys') cmd' cmd
if wordPos(rr, rcOk) < 1 then do
say 'error rc' rr 'in adrTso DSN SYSTEM('sys') cmd' cmd
call adrTso 'execio * diskr sysprint (finis stem pr.)'
say 'sysprint' pr.0 'lines'
do x=1 to pr.0
say strip(pr.x, 't')
end
call adrTso 'free dd(sysprint) '
call err 'rc' rr 'in adrTso DSN SYSTEM('sys') cmd' cmd
end
call adrTso 'free dd(sysprint)'
return rr
endProcedure adr Dsn
/**********************************************************************
adr*: address an environment
adrTso: fails if rc <> 0
adrTsoRc: returns rc without failing
***********************************************************************/
adrTsoRc:
parse arg ggTsoCmd
address tso ggTsoCmd
return rc /* end adrTsoRc */
adrTso:
parse arg ggTsoCmd
address tso ggTsoCmd
if rc <> 0 then
call err 'adrTso rc' rc 'for' ggTsoCmd
return /* end adrTso */
adrIspRc:
parse arg ggIspCmd
address ispexec ggIspCmd
return rc /* end adrIspRc */
adrIsp:
parse arg ggIspCmd
address ispexec ggIspCmd
if rc <> 0 then
call err 'adrIsp rc' rc 'for' ggIspCmd
return /* end adrIsp */
adrEdit:
parse arg ggEditCmd, ret
address isrEdit ggEditCmd
if rc <> 0 then
call err 'adr isrEdit rc' rc 'for' ggEditCmd
return /* end adrEdit */
adrEditRc:
parse arg ggEditCmd
address isrEdit ggEditCmd
return rc /* end adrEditRc */
/**********************************************************************
messages, errorhandling help
***********************************************************************/
/* caller should define err as follows ---------------------------------
err:
parse arg ggMsg
call errA ggMsg
exit 12
endSubroutine err
end call should define err ----------------------------------------*/
errA:
parse arg ggTxt
parse source . . ggS3 .
say 'fatal error in' ggS3':' ggTxt
exit setRc(12)
endSubroutine errA
trc: procedure expose m.
parse arg msg
if m.trace == 1 then
say 'trc:' msg
return
endProcedure trc
setRc: procedure
parse arg zIspfRc
/**********************************************************************
if a cmd is run by ispStart, its RC is ignored,
but ISPF passes the value of the shared varible zIspfRc
back as return code
***********************************************************************/
if sysVar('sysISPF') = 'ACTIVE' then do
say 'exitRc setting zIspfRc='zIspfRc
address ispExec vput 'zIspfRc' shared
end
return zIspfRc
endProcedure setRc
errHelp: procedure
parse arg ggMsg
say 'fatal error:' ggMsg
call help
call err ggMsg
endProcedure errHelp
help: procedure
/**********************************************************************
display the first comment block of the source as help text
***********************************************************************/
parse source . . s3 .
say 'help for rexx' s3
do lx=1 by 1
if pos('/*', sourceLine(lx)) > 0 then
leave
else if lx > 10 then do
say 'initial commentblock not found for help'
return
end
end
do lx=lx+1 by 1
li = strip(sourceLine(lx), 't', ' ')
if pos('*/', li) > 0 then
leave
say li
end
return 4
endProcedure help
showtime: procedure
parse arg showmsg
return time() sysvar('syscpu') sysvar('syssrv') showmsg
/* copy adr end ****************************************************/
}¢--- A540769.WK.REXX.O13(CHECKRTS) cre=2011-09-09 mod=2011-09-09-10.24.36 A540769 ---
/* REXX **************************************************************
synopsis: CHECKRTS db fun
db = db2 subsystem
type = TS oder IX
Aufruf von reoCheck, Docu siehe dort
docu: http://chsa4212/host/db2wiki/pmwiki.php?n=Main.RtsReo
history ***************************************************************
09.09.2011 v5.7 alter code eliminiert
*******************************************************************/
parse upper arg ssid type
result = 0
call reoCheck ssid type
if \ datatype(result, 'n') then
result = 0
exit result
}¢--- A540769.WK.REXX.O13(CLASS) cre=2009-09-03 mod=2013-05-27-11.47.08 A540769 ---
/* copy class begin **************************************************
a class has fields and methods,
the class module handles only the metadata,
object handling (instanciation, methodcalls etc.) is in O
classes are represented by a metadata tree,
its nodes of class class have diffenrent types:
class subTypes (implemented as choices)
'u' = union: NAME -> name of class if <> '',
stem -> references component classes
'f' = field: NAME -> fieldName (x.name),
CLASSS -> reference to class of fieldValue
's' = stem: class -> ref to class at each stem element
'c' = choice: NAME -> selection value,
CLASS -> ref to class of choice
'm' = method: NAME -> methodName,
MET -> rexxCode
'r' = reference CLASS -> ref to type at reference
special classes
'v' = Value String Value
'w' = ValueAsA StringValue packed into an address (prefix escW)
'o' = AnyClass any class with dynamic classLookup on object
formal definition, see classIni
class expression (ce) allow the following syntax
ce = className | classAdr | 'n'('?','*','|')? name union | union
| 'f' name ce | 's' ce | 'c' name ce | 'm' name code | r ce?
union = 'u' (ce (',' ce)*)?
the modifiers of 'n' means
none: create new class, fail if name already defined
'?': create new class or return old of that name
'*': use an exisiting class of that definition
or create new class with a unique name
'|': create a new class with a unique name
'm' extends to then end of the ce (line)
'u' allows several components, in classNew also multiple args
Achtung, aber NICHT rekursiv|
***********************************************************************/
classIni: procedure expose m.
if m.class.ini == 1 then
return
m.class.ini = 1
m.class.in2 = 0
call oIni
call mapIni
call mNewArea 'CLASS', 'CLASS'
call mapReset 'CLASS.N2C' /* name to class */
m.class.classV = classBasicNew('u', 'v')
m.class.classW = classBasicNew('u', 'w')
m.class.classO = classBasicNew('u', 'o')
m.class.class = classNew('n class u v',
, 'c u u f NAME v, s r class',
, 'c f u f NAME v, f CLASS r class',
, 'c s f CLASS r class' ,
, 'c c u f NAME v, f CLASS r class',
, 'c m u f NAME v, f MET v' ,
, 'c r f CLASS r class' )
m.class.cNav = '.'
m.class.cRef = '|'
m.class.cDot = '%'
m.class.cPath = m.class.cNav || m.class.cRef || m.class.cDot
m.class.classR = classNew('r')
m.class.basicNew = "oMutate(mNew(cl), cl)"
call oAddMet m.o.lazyGen, 'new', "return classGenNew(cl, me)"
call oAddMet m.o.lazyGen,'oClear',"return classGenClear(cl, me)"
call oAddMet m.o.lazyGen,'oFlds',"return classGenFlds(cl, me)"
call oAddMet m.o.lazyGen, 'oCopy', "return classGenCopy(cl, me)"
cr = mIterBegin('CLASS')
do while assNN('cr', mIter(cr))
call classFinish cr
call oClaMet cr, 'oFlds' /* generate flds */
end
m.class.in2 = 1
call oAddMet m.class.classV, 'oCopy', "return oCopyV(m, t)"
call classAddMet m.class.classV, 'o2String return m.m'
call classAddMet m.class.classW, 'o2String return substr(m, 2)'
call classNew 'n ORun u',
, 'm oRun call err "call of abstract method oRun"',
, 'm o2File return oRun2File(m)',
, 'm o2String return jCatLines(oRun2File(m), fmt)'
return
endProcedure classIni
/*--- return the name of a class if it exists otherwise the class ---*/
className: procedure expose m.
parse arg cl
if m.cl = 'u' & m.cl.name \= '' then
return m.cl.name
else
return cl
endProcedure className
/*--- return class of given name or class ---------------------------*/
class4Name: procedure expose m.
parse arg nm
if symbol('m.class.n2c.nm') == 'VAR' then
return m.class.n2c.nm
if arg() > 1 then
return arg(2)
call err 'no class' nm
endProcedure class4Name
classBasicNew: procedure expose m.
parse arg ty, nm, cl, nmTy
n = mNew('CLASS')
m.n = ty
m.n.name = nm
m.n.nameComp = nm
if ty == 'u' & nm \== '' then do
if pos(nmTy, '*|') > 0 then do
m.n.name = nm || substr(n, 1+lastPos('.', n))
if nmTy == '*' then
m.n.nameComp = nm'*'
else
m.n.nameComp = m.n.name
end
call mapAdd class.n2c, m.n.name, n
end
call mapAdd class.n2c, n, n
m.n.class = ''
m.n.met = ''
m.n.0 = 0
if length(ty) \== 1 | pos(ty, 'ufscrm') < 1 then
call err 'bad type' ty': classBasicNew('ty',' nm',' cl')'
else if nm == '' & pos(ty, 'fm') > 0 then
call err 'empty name: classBasicNew('ty',' nm',' cl')'
else if nm \== '' & ty \== 'c' & verifId(nm) > 0 then
call err 'bad name' nm': classBasicNew('ty',' nm',' cl')'
else if nm \= '' & pos(ty, 'rs') > 0 then
call err 'name for type' ty': classBasicNew('ty',' nm',' cl')'
else if pos(ty, 'fcrs') > 0 then do
if cl \== '' then
m.n.class = mapGet(class.n2c, cl)
else if ty == 'r' then
m.n.class = m.class.classO
/* else say 'cl leer' ty nm nmTy ???????*/
end
else if ty == 'm' then
m.n.met = cl
else if cl \== '' then
call err 'class for type' ty': classBasicNew('ty',' nm',' cl')'
return n
endProcedure classBasicNew
classNew: procedure expose m.
parse arg clEx 1 ty rest
if abbrev(ty, 'n') then do
if wordPos(ty, 'n n? n* n|') < 1 then
call err 'bad type' ty': classNew('clEx')'
nmTy = right(ty, 1)
parse var rest nm ty rest
if ty \== 'u' then
call err 'class name' nm 'without u: classNew('clEx')'
if nmTy == 'n' then do
if mapHasKey(class.n2c, nm) then
call err 'class' nm 'already defined: classNew('clEx')'
end
else if nmTy == '?' then do
if mapHasKey(class.n2c, nm) then
return mapGet(class.n2c, nm)
end
else if nmTy == '*' then do
if arg() \== 1 then
call err 'arg()='arg() 'for n* : classNew('clEx')'
if mapHasKey(class.n2c, clEx) then
return mapGet(class.n2c, clEx)
end
n = classBasicNew('u', nm, , nmTy)
end
else do
nmTy = ''
if arg() \== 1 then
call err 'arg()='arg() 'without name: classNew('clEx')'
if mapHasKey(class.n2c, clEx) then
return mapGet(class.n2c, clEx)
if length(ty) <> 1 | pos(ty, 'ufscmr') < 1 then
call err 'bad type' ty': classNew('clEx')'
nm = ''
if pos(ty, 'usr') < 1 then
parse var rest nm rest
if ty = 'u' then do
n = classBasicNew(ty)
end
else if ty = 'm' then do
n = classBasicNew(ty, nm, rest)
rest = ''
end
else do
parse var rest t1 rest
if wordPos(t1, 'u f s c m r') > 0 then do
n = classBasicNew(ty, nm)
m.n.class = classNew(t1 rest)
rest = ''
end
else do
n = classBasicNew(ty, nm, t1)
end
end
end
if ty \== 'u' then do
if rest \== '' then
call err 'rest' rest 'but end of classExp expected:' clEx
end
else do
lx = 0
do while lx < length(rest)
cx = pos(',', rest, lx+1)
if cx <= lx | word(substr(rest, lx+1), 1) == 'm' then
cx = length(rest)+1
a = mAdd(n, classNew(strip(substr(rest, lx+1, cx-lx-1))))
lx=cx
end
pref = ''
do ax=2 to arg()
if length(arg(ax)) == 1 & arg(ax) \== ' ' then
pref = arg(ax)' '
else
call mAdd n, classNew(pref || arg(ax))
end
end
cr = mIterBegin('CLASS')
do while assNN('cr', mIter(cr)) & \ classEqual(n, cr)
end
isNew = cr == n
if \ isNew then do
if mapRemove(class.n2c, n) \== n then
call err 'mapRemove('n') mismatch'
if m.n == 'u' & m.n.name \== '' then
if mapRemove(class.n2c, m.n.name) \== n then
call err 'mapRemove('m.n.name') mismatch'
call mFree n
n = cr
end
if isNew & m.class.in2 then
call classFinish n
if nmTy == '' | nmTy == '*' then
call mapAdd class.n2c, clEx, n
return n
endProcedure classNew
/*--- to the finish for new class cl -------------------------------*/
classFinish: procedure expose m.
parse arg cl, force
call oMutate cl, m.class.class
/* find super and sub classes */
m.cl.sub = ''
sups = ''
do ux=1 to m.cl.0
u1 = m.cl.ux
if m.u1 \== 'u' then
iterate
if wordPos(u1, sups) > 0 then
call err u1 'already in sups' sups': classSuperSub('cl')'
sups = sups u1
if wordPos(m.cl.SUB, cl) > 0 | symbol('m.u1.sub') \== 'VAR' then
call err cl 'is already in' u1'.sub' u1.SUB ,
|| ': classSuperSub('cl')'
m.u1.sub = strip(m.u1.sub cl)
end
m.cl.super = sups
/* add class to o */
call oAddCla cl, sups
if pos(m.cl, 'mfrsv') < 1 then do
allMets = ''
forceMets = ''
do cx=1 to m.cl.0
ch = m.cl.cx
if m.ch == 'm' then do
call oAddMet cl, m.ch.name, m.ch.met
allMets = allMets m.ch.name
end
else if symbol('m.class.forceDown.ch') == 'VAR' then
forceMets = forceMets m.class.forceDown.ch
end
myForce = ''
do fx=1 to words(forceMets)
parse value word(forceMets, fx) with fCla '#' fMet
if wordPos(fMet, allMets) < 1 then do
call oAddMet cl, fMet, m.o.cMet.fCla.fMet
myForce = myForce cl'#'fMet
allMets = allMets fMet
end
end
if myForce \== '' then
m.class.forceDown.cl = strip(myForce)
end
if cl == m.class.class then
call mAlias 'CLASS', cl
else /* object addresses */
call mNewArea cl, 'O.'substr(cl,7)
if m.cl \== 'u' | m.cl.name == '' then
return
call mAlias cl, m.cl.name
return
endProcedure classFinish
classAddMet: procedure expose m.
parse arg clNm, met code
cl = class4Name(clNm)
if pos(m.cl, 'uvw') < 1 then
call err 'class not nvw but' m.cl,
'in classAdd1Method('clNm',' met code')'
call mAdd cl, classNew('m' met code)
call oAddMet cl, met, code
return cl
endProcedure classAddMet
/*--- return true iff the two classes are equal -------------------*/
classEqual: procedure expose m.
parse arg l, r
if m.l \== m.r | m.l.nameComp \== m.r.nameComp ,
| m.l.class \== m.r.class | m.l.0 \== m.r.0 then
return 0
if m.l.met \== m.r.met then
return 0
do sx=1 to m.l.0
if m.l.sx \== m.r.sx then
return 0
end
return 1
endProcedure classEqual
classGenNew: procedure expose m.
parse arg cl, met
return "m=" m.class.basicNew";" oClaMet(cl, 'oClear') ";" ,
"return m"
endProcedure classGenNew
classGenFlds: procedure expose m.
parse arg cl, met
m.cl.flds.0 = 0
m.cl.stms.0 = 0
m.cl.stemCl = ''
m.cl.valueCl = ''
call classGenFldsAdd cl, cl
m.cl.hasFlds = m.cl.flds.0 > 1 ,
| (m.cl.flds.0 == 1 & m.cl.flds.1 \== '') | m.cl.stms.0 > 0
return cl'.FLDS'
endProcedure classGenFlds
/*--- add the the fields of class cl to stem f ----------------------*/
classGenFldsAdd: procedure expose m.
parse arg f, cl, nm
n1 = substr(nm, 1+abbrev(nm, '.') )
if symbol('m.f.f2c.n1') \== 'VAR' then
m.f.f2c.n1 = cl
if cl == m.class.classV | cl == m.class.classW | m.cl=='r' then do
if nm == '' then do
if m.f.valueCl \== '' then
return err('value mistmatch')
m.f.valueCl = cl
end
if nm == '' then do
call mMove f'.FLDS', 1, 2
m.f.flds.1 = ''
end
else do
call mAdd f'.FLDS', nm
end
return 0
end
if m.cl = 's' then do
if m.cl.class == '' then
call err 'stem null class'
a1 = mAdd(f'.STMS', nm)
m.a1.class = m.cl.class
if nm == '' then
m.f.stemCl = m.cl.class
return 0
end
if m.cl = 'f' then
return classGenFldsAdd(f, m.cl.class, nm'.'m.cl.name)
if m.cl.class \== '' then
return classGenFldsAdd(f, m.cl.class, nm)
do tx=1 to m.cl.0
call classGenFldsAdd f, m.cl.tx, nm
end
return 0
endProcedure classGenFldsAdd
classGenClear: procedure expose m.
parse arg cl, met
r = ''
call oClaMet cl, 'oFlds'
do fx=1 to m.cl.flds.0
f1 = m.cl.flds.fx
if f1 == '' then
c1 = cl
else do
c1 = substr(f1, 2)
c1 = m.cl.f2c.c1
end
if c1 == m.class.classW then
r = r classGenStmt(f1, "m.m~ = '"m.o.escW"';")
else
r = r classGenStmt(f1, "m.m~ = '';")
end
do sx=1 to m.cl.stms.0
r = r classGenStmt(m.cl.stms.sx, "m.m~.0 = 0;")
end
return r
endProcedure classGenClear
classGenStmt: procedure expose m.
parse arg f, st, resWo
isNice = translate(f) == f
resWo = translate(resWo) 'GGFF M'
fDod = '.'f'.'
do wx=1 to words(resWo) while isNice
isNice = pos('.'word(resWo, wx)'.', fDot) < 1
end
if isNice then
return repAll(st, '~', f)
else
return "ggFF = '"substr(f, 2)"';" repAll(st, '~', '.ggFF')
endProceduer classGenAss
classGenCopy: procedure expose m.
parse arg cl, me
r = repAll("if t == '' then t =" m.class.basicNew ";" ,
"else call oMutate t, cl;", 'cl', "'"cl"'")
ff = oClaMet(cl, 'oFlds') /* build code for copy */
do fx=1 to m.cl.flds.0
r = r classGenStmt(m.cl.flds.fx, 'm.t~ = m.m~;', 't')
end
do fx=1 to m.cl.stms.0
nm = m.cl.stms.fx
sc = m.cl.stms.fx.class
if nm == '' then
st = ''
else do
r = r "st = '"substr(nm, 2)"';"
st = '.st'
end
r = r "m.t"st".0 = m.m"st".0;" ,
"do sx=1 to m.m"st".0;" ,
"call oClaCopy '"sc"', m"st".sx, t"st".sx; end;"
end
return r 'return t;'
endProcedure classGenCopy
/*--- oCopy for classW ----------------------------------------------*/
oCopyW: procedure expose m.
trace ?r
parse arg m, t
if t == '' then
return m
m.t = o2String(m)
return oMutate(t, m.class.classV)
endProcedure oCopyW
/*--- print object ---------------------------------------------------*/
objOut: procedure expose m.
parse arg m, pr, p1
c = objClass(m, '')
if c == '' then
call out p1 'no class for' m
else if c == m.class.classV then
call out p1 || m.m
else if c == m.class.classW then
call out p1 || o2String(m)
else
call classOutDone c, m, pr, p1
return
endProcedure objOut
/*--- recursively output (with out:) the object a with class t -------*/
classOut: procedure expose m.
parse arg t, a, pr, p1
return classOutDone(if(t=='',m.class.classO, t), a, pr, p1)
endProcedure classOut
/*--- ouput object a with class t and stopper done ------------------*/
classOutDone: procedure expose m. done.
parse arg t, a, pr, p1
if p1 == '' then
p1 = pr
if right(p1, 1) \== ' ' then
p1 = p1' '
if done.ini \== 1 then do
done.ini = 1
t = class4Name(t, t)
p1 = p1'@'a' '
end
if done.t.a == 1 then
return out(p1'done :'className(t) '@'a)
done.t.a = 1
if t = m.class.classO then do
if a == '' then
return out(p1'obj null')
t = objClass(a, '')
if t = '' then
return out(p1'obj has no class @'m.a)
else
return classOutDone(t, a, pr, p1'isA')
end
if t == m.class.classV then
return out(p1'=' m.a)
if t == m.class.classW == 'w' then
return out(p1'}' substr(a, 2))
if m.t == 'f' then
return classOutDone(m.t.class, a'.'m.t.name, pr, p1'.'m.t.name)
if m.t == 'r' then do
if m.a == '' then
return out(p1'refTo :'className(m.t.class) '@null@')
else
return classOutDone(m.t.class, m.a, pr,
, p1'refTo @'m.a)
end
if m.t = 'u' then do
t1 = m.t.1
vv = m.t.0 > 0 & m.t.1 == m.class.classV
call out p1 || if(m.t.name == '', 'union', ':'m.t.name) ,
|| copies(' =' m.a, vv)
do ux=1+vv to m.t.0
call classOutDone m.t.ux, a, pr' '
end
return 0
end
if m.t = 's' then do
call out p1'stem' m.a.0
do ux=1 to m.a.0
call classOutDone m.t.class, a'.'ux, pr' ', pr' .'ux
end
return 0
end
if m.t = 'c' then do
if m.t.name = m.a then
call classOutDone m.t.class, a, pr, p1'choice' m.a
return 0
end
if m.t = 'm' then
return 0
return err('bad class type' m.t)
endProcedure classOutDone
/* copy class end ***************************************************/
}¢--- A540769.WK.REXX.O13(COMP) cre=2012-04-02 mod=2012-09-17-15.23.53 A540769 ---
/* copy comp begin *****************************************************
the shell compiler
syntax and semantics of the shell language see javaDoc
***********************************************************************/
/***** initialisation *************************************************/
/*--- module initialisation ------------------------------------------*/
compIni: procedure expose m.
if m.compIni = 1 then
return
m.compIni = 1
call pipeIni
call scanReadIni
cc = classNew('n Compiler u')
call mNewArea 'COMP.AST', '='
m.comp.stem.0 = 0
m.comp.idChars = m.scan.alfNum'@_'
call compIniKI '=', "skeleton", "expression or block"
call compIniKI '.', "object", "expression or block"
call compIniKI '-', "string", "expression or block"
call compIniKI '@', "shell", "pipe or $;"
call compIniKI ':', "assignAttributes", "assignment or statement"
call compIniKI '|', "assignTable", "header, sfmt or expr"
call compIniKI '#', "text", "literal data"
return
endProcedure compIni
compReset: procedure expose m.
parse arg m
m.m.scan = scanRead(,,'|0123456789')
m.m.chDol = '$'
m.m.chSpa = ' ' || x2c('09')
m.m.chNotBlock = '${}='
m.m.chNotWord = m.m.chNotBlock || m.m.chSpa
m.m.chKind = '.-=#@:|'
m.m.chKin2 = '.-=#;:|'
m.m.chKinC = '.-=@'
m.m.chOp = '.-<@|?'
m.m.chOpNoFi = '.-@|?'
return m
endProcedure compReset
compIniKI: procedure expose m.
parse arg ki, m.comp.kind.ki.name, m.comp.kind.ki.expec
return
/*--- constructor of Compiler ----------------------------------------*/
comp: procedure expose m.
parse arg src
nn = oNew('Compiler')
if src \== '' then
m.nn.cmpRdr = o2File(src)
else
m.nn.cmpRdr = ''
return nn
endProcedure comp
/**** user interface **************************************************/
/*--- compile and run ------------------------------------------------*/
compRun: procedure expose m.
parse arg spec, inO, ouO, infoA
cmp = comp(inO)
r = compile(cmp, spec)
if infoA \== '' then
m.infoA = 'run'
if ouO \== '' then
call pipeBeLa '>' ouO
call oRun r
if ouO \== '' then
call pipeEnd
return 0
endProcedure compRun
/*--- compile the source and return an oRunner with the code ---------*/
compile: procedure expose m.
parse arg m, spec
call compReset m
kind = '@'
spec = strip(spec)
do while pos(left(spec, 1), m.m.chKind) > 0
kind = left(spec, 1)
spec = strip(substr(spec, 2))
end
call scanSrc m.m.scan, spec
m.m.compSpec = 1
res = compCUnit(m, kind, 1)
do while abbrev(m.m.dir, '$#')
call envPutO substr(m.m.dir, 3, length(m.m.dir)-4),
, compCUnit(m, right(m.m.dir, 1))
end
if \ m.m.compSpec then
call jClose m.m.scan
return res
endProcedure compile
/*--- cUnit = compilation Unit = separate compilations
no nesting| --------------------------------------------*/
compCUnit: procedure expose m.
parse arg m, ki, isFirst
s = m.m.scan
code = ''
do forever
m.m.dir = ''
src = compUnit(m, ki, '$#')
if \ compDirective(m) then
return scanErr(s, m.comp.kind.ki.expec "expected: compile",
m.comp.kind.ki.name "stopped before end of input")
if \ compIsEmpty(m, src) then do
/*wkTst??? allow assTb in separatly compiled units */
if isFirst == 1 & m.src.type == ':' ,
& pos(' ', src) < 1 & abbrev(src, 'COMP.AST.') then
call mAdd src, '', ''
code = code || ';'compAst2code(m, src, ';')
end
if m.m.dir == 'eof' then do
if \ m.m.compSpec | m.m.cmpRdr == '' then
return oRunner(code)
call scanReadReset s, m.m.cmpRdr
call jOpen s, m.j.cRead
m.m.compSpec = 0
end
else if length(m.m.dir) == 3 then
ki = substr(m.m.dir, 3, 1)
else
return oRunner(code)
end
endProcedure compCUnit
/*--- directives divide cUnits ---------------------------------------*/
compDirective: procedure expose m.
parse arg m
m.m.dir = ''
s = m.m.scan
lk = scanLook(s)
cx = pos('#', lk, 3)
if \ abbrev(lk, '$#') then do
if \ scanAtEnd(m.m.scan) then
return 0
m.m.dir = 'eof'
return 1
end
else if scanLit(s, '$#end' , '$#out') then do
m.m.dir = 'eof'
return 1
end
else if pos(substr(lk, 3, 1), m.m.chKinD) > 0 then do
m.m.dirKind = substr(lk, 3, 1)
m.m.dir = left(lk, 3)
end
else if cx > 3 & pos(substr(lk, cx+1, 1), m.m.chKinD) > 0 then do
m.m.dirKind = substr(lk, 3, 1)
m.m.dir = left(lk, cx+1)
end
else
call scanErr s, 'bad directive:' word(lk, 1)
if \ scanLit(s, m.m.dir) then
call scanErr m.m.scan, 'directive mismatch' m.m.dir
return 1
endProcedure compDirective
/**** parse the whole syntax *******************************************
currently, with the old code generation,
parsing and code generation is intermixec
migrating to AST should will separate these tasks
***********************************************************************/
compUnit: procedure expose m.
parse arg m, kind, stopper
s = m.m.scan
if pos(kind, m.m.chKind';') < 1 then
return scanErr(s, 'bad kind' kind 'in compUnit(...'stopper')')
if stopper == '}' then do
if kind \== '#' then do
one = compExpr(m, 'b', translate(kind, ';', '@'))
if compisEmpty(m, one) then
return compAST(m, 'block')
else
return compAST(m, 'block', one)
end
tx = '= '
cb = 1
do forever /* scan nested { ... } pairs */
call scanVerify s, '{}', 'm'
tx = tx || m.s.tok
if scanLit(s, '{') then
cb = cb + 1
else if scanLook(s, 1) \== '}' then
call scanErr s, 'closing } expected'
else if cb <= 1 then
leave
else if scanLit(s, '}') then
cb = cb - 1
else
call scanErr s, 'closing } programming error'
tx = tx || m.s.tok
end
return compAst(m, 'block', tx)
end
else if pos(kind, '.-=') > 0 then do
return compData(m, kind)
end
else if pos(kind, '@;') > 0 then do
call compSpNlComment m
return compShell(m)
end
else if kind == '|' | kind == ':' then do
if kind == '|' then
res = compAssTab(m)
else
res = compAssAtt(m)
if abbrev(res, '#') then
return compAst(m, ':', substr(res, 3))
else
return compAst(m, ';', substr(res, 3))
end
else if kind == '#' then do
res = compAST(m, 'block')
call compSpComment m
if \ scanReadNl(s) then
call scanErr s,
, 'space nl expected in heredata until' stopper
do while \ abbrev(m.s.src, stopper)
call mAdd res, '=' strip(m.s.src, 't')
if \ scanReadNl(s, 1) then do
if stopper = '$#' then
leave
call scanErr s, 'eof in heredata until' stopper
end
end
return res
end
endProcedure compUnit
/*--- compile data lines return stmts or expr ------------------------*/
compData: procedure expose m.
parse arg m, ki
s = m.m.scan
lines = compAST(m, 'block')
do forever
state = 'f'
do forever
l = compExpr(m, 'd', ki)
if \ scanReadNL(s) then
state = 'l'
if \ compIsEmpty(m, l) | (state=='' &\abbrev(l, 'c')) then
call mAdd lines, l
if state == 'l' then
leave
call compComment m
state = ''
end
one = compStmt(m)
if one == '' then
leave
call mAdd lines, one
call compComment m
end
return lines
endProcedure compData
/*--- compile shell and return code ----------------------------------*/
compShell: procedure expose m.
parse arg m
a = compAst(m, ';')
m.a.text = ''
do forever
one = compPipe(m)
if one \== '' then
m.a.text = m.a.text || one
if \ scanLit(m.m.scan, '$;') then
return a
call compSpNlComment m
end
endProcedure compShell
/*--- compile an expression, type d=data, b=block w=word, s=strip ---*/
compExpr: procedure expose m.
parse arg m, type, ki
s = m.m.scan
if length(type) \== 1 | pos(type, 'dsbw') < 1 then
call scanErr s, 'bad type' type 'in compExpr(,' type','ki ')'
if length(ki) \== 1 | pos(ki, m.m.chKind';') < 1 then
call scanErr s, 'bad kind' ki 'in compExpr(,' type','ki ')'
charsNot = if(type=='b', m.m.chNotBlock,
, if(type=='w', m.m.chNotWord,m.m.chDol))
laTx = 9e9
st = compNewStem(m)
gotCom = 0
if pos(type, 'sb') > 0 then do
call compSpComment m
gotCom = gotCom | m.m.gotComment
end
ki2 = if(ki=='=', '-=', ki)
do forever
if scanVerify(s, charsNot, 'm') then do
call mAdd st, ki2 m.s.tok
laTx = min(laTx, m.st.0)
end
else do
pr = compPrimary(m, ki, 1)
if pr = '' then
leave
call mAdd st, pr
laTx = 9e9
end
gotCom = gotCom | compComment(m)
end
do rx = m.st.0 by -1 to laTx while m.st.rx = ki2
end
if pos(type, 'bs') > 0 then do
if rx >= laTx then
m.st.rx = strip(m.st.rx, 't')
m.st.0 = rx
end
if ki == '=' then
if m.st.0 < 1 then
return 'e='
else
ki = '-'
return substr('ce', 2-gotCom, rx < 1)ki'0*' st
endProcedure compExpr
/*--- compile a primary and return code ------------------------------*/
compPrimary: procedure expose m.
parse arg m, ki, withChain
s = m.m.scan
if \ scanLit(s, '$') then
return ''
if scanString(s) then /*wkTst??? brauchts beides? */
return translate(ki, '.--', '@;=')'=' m.s.val
if withChain then do
if scanLit(s, '.', '-') then do
op = m.s.tok
return op'('compCheckNN(m, compObj(m, op),
, 'objRef expected after $'op)
end
end
if pos(ki, '.<') >= 1 then
f = '. envGetO'
else
f = '- envGet'
if scanLit(s, '{') then do
if scanLit(s, '?') then
f = '- envIsDefined'
else if scanLit(s, '>') then
f = '- envReadO'
res = compCheckNE(m, compExpr(m, 'b', '='), 'var name')
if \scanLit(s, '}') then
call scanErr s, 'closing } missing after ${'
return f'(' || comp2Code(m, '-'res)')'
end
if scanName(s) then
return f"('"m.s.tok"')"
call scanBack s, '$'
return ''
endProcedure compPrimary
compObj: procedure expose m.
parse arg m, ki
s = m.m.scan
pk = compOpKi(m, '?')
one = compBlock(m, ki pk)
if one \== '' then
return compAstAddOp(m, one, ki)
pp = ''
if pk \== '' then do
ki = right(pk, 1)
pp = left(pk, length(pk)-1)
end
one = compPrimary(m, translate(ki, '.', '@'), 0)
if one \== '' then
return pp || one
if ki == '.' then do
if scanLit(s, 'compile') then do
if pos(scanLook(s, 1), m.m.chKinC) < 1 then
call scanErr s, 'compile kind expected'
call scanChar s, 1
return pp'. compile(comp(j2Buf()), "'m.s.tok'")'
end
end
call scanBack s, pk
return ''
endProcedure compObj
compFile: procedure expose m.
parse arg m
res = compCheckNE(m, compExprBlock(m, '='),
, 'block or expr expected for file')
if \ abbrev(res, '.') then do
end
else if substr(res, verify(res, '.', n), 3) == '0* ' then do
st = word(res, 2)
if m.st.0 = 1 & abbrev(m.st.1, '. envGetO(') then
/* if undefined variable use new jbuf */
if pos(')', m.st.1) == length(m.st.1) then
m.st.1 = left(m.st.1, length(m.st.1)-1) ,
|| ", '-b')"
end
return compASTAddOp(m, res, '<')
endProcedure compFile
/*--- scan an operator chain and a kind ------------------------------*/
compOpKi: procedure expose m.
parse arg m, opt
s = m.m.scan
op = ''
if opt == '<' then do
call scanVerify s, m.m.chOpNoFi
op = m.s.tok
if scanLit(s, '<') then
return op'<'
end
call scanVerify s, m.m.chOp
op = op || m.s.tok
k1 = scanLook(s, 1)
if k1 \== '' & pos(k1, m.m.chKind) > 0 then do
call scanLit s, k1
return op || k1
end
if opt == '?' | op == '' | pos(right(op, 1), m.m.chKind) > 0 then
return op
call scanErr s, 'no kind after ops' op
endProcedure compOpKi
/*--- block or expression --------------------------------------------*/
compExprBlock: procedure expose m.
parse arg m, ki
s = m.m.scan
pk = compOpKi(m, '<')
if right(pk, 1) == '<' then
return compAstAddOp(m, compFile(m), pk)
res = compBlock(m, ki pk)
if res \== '' then
return res
if pk \== '' then
lk = right(pk, 1)
else
lk = translate(ki, '.', '@')
res = compExpr(m, 's', lk)
if res \== '' then
return compASTAddOp(m, res, pk)
call scanBack s, pk
return res
endProcedure compExprBlock
/*--- compile a pipe and return code ---------------------------------*/
compPipe: procedure expose m.
parse arg m
s = m.m.scan
ios = ''
stmts = ''
stmtLast = ''
do forever
io1 = compRedirIO(m, 1)
if io1 \== '' then do
ios = ios',' io1
call compSpNlComment m
end
else do
if stmtLast \== '' then do
if \ scanLit(s, '$|') then
leave
call compSpNlComment m
end
one = comp2code(m, ';'compStmts(m))
if one == '' then do
if stmtLast \== '' then
call scanErr s, 'stmts expected after $|'
if ios == '' then
return ''
leave
end
if stmtLast \== '' then
stmts = stmts'; call pipe' || stmtLast
stmtLast = ';' one
end
end
if stmts \== '' then
stmtLast = insert('Begin', stmts, pos('pipe;', stmts)+3) ,
|| '; call pipeLast' stmtLast'; call pipeEnd'
if ios \== '' then do
if stmtLast == '' then
stmtLast = '; call pipeWriteAll'
stmtLast = '; call pipeBeLa 'substr(ios, 3) || stmtLast';' ,
'call pipeEnd'
end
return stmtLast
endProcedure compPipe
/*--- compile an io redirection, return
if makeExpr then "option", expr
else code write inut to standard out -------------*/
compRedirIO: procedure expose m.
parse arg m
s = m.m.scan
if \ scanLit(s, '$<', '$>>', '$>') then
return ''
opt = substr(m.s.tok, 2)
return "'"opt"'" comp2Code(m, compFile(m))
endProcedure compRedirIO
/*--- compile stmts (stmt or java) -----------------------------------*/
compStmts: procedure expose m.
parse arg m
lst = compNewStem(m)
do forever
one = compStmt(m)
if one == '' then do
do forever
la = compExpr(m, 's', ';')
if compIsEmpty(m, la) then
leave
la = strip(comp2code(m, ';'la))
if right(la, 1) \== ',' then do
one = one la
leave
end
one = one strip(left(la, length(la)-1))
call compSpNlComment m
end
if one = '' then
return 'l*' lst
one = ';' one
end
call mAdd lst, one
call compSpNlComment m
end
endProcedure compStmts
/*--- compile a single statement -------------------------------------*/
compStmt: procedure expose m.
parse arg m
s = m.m.scan
if scanLit(s, "$=") then do
res = compAss(m)
if res == '' then
call scanErr s, 'assignment expected after $='
return res
end
if scanLit(s, '$@') then do
if \ scanName(s) then
return 'l;' comp2Code(m,
, '@'compCheckNE(m, compExprBlock(m, '@'),
, "block or expr expected after $@"))
fu = m.s.tok
if fu == 'for' | fu == 'with' | fu == 'forWith' then do
v = comp2Code(m, '-'compCheckNE(m, compExpr(m, 'b', '='),
, "variable name after $@for"))
call compSpComment m
st = comp2Code(m, ';'compCheckNN(m, compStmt(m, 'with'),
, "statement after $@for" v))
if fu == 'forWith' then
st = 'call envSetWith envGetO('v');' st
if abbrev(fu, 'for') then
st = 'do while envReadO('v');' st'; end'
if fu == 'forWith' then
st = 'call envPushWith "";' st '; call envPopWith'
else if fu == 'with' then
st = 'call envPushName' v';' st '; call envPopWith'
return ';' st
end
if fu == 'do' then do
call compSpComment m
var = if(scanName(s), m.s.tok, '')
pre = var
call compSpComment m
if scanLook(s, 1) \== '=' then
var = ''
call compSpComment m
suf = compExpr(m, 's', ';')
if \ compIsEmpty(m, suf) then
suf = comp2Code(m, ':'suf)
else if var \== '' then
call scanErr s, "$@do control construct expected"
else
suf = ''
call compSpComment m
st = comp2Code(m, ";"compCheckNN(m, compStmt(m),
, "$@do statement"))
return "; do" pre suf";",
if(var \== "", "call envPut '"var"'," var";") st"; end"
end
if fu == 'ct' then do
call compSpComment m
call compInter(comp2Code(m, ';'compCheckNN(m, compStmt(m),
, 'ct statement')));
return '; '
end
if fu == 'proc' then do
nm = compCheckNE(m, compExpr(m, 'b', '='), "proc name")
call compSpComment m
st = oRunner(comp2Code(m, ';'compCheckNN(m, compStmt(m),
, 'proc statement')));
call envPutO compInter('return' comp2Code(m, '-'nm)), st
return '; '
end
if scanLit(s, '(') then do
call compSpComment m
if \ scanLit(s, ')') then
call scanErr s, 'closing ) expected after $@'fu'('
return '; call oRun envGetO("'fu'")'
end
if scanLit(s, '{', '.{', '-{', '={') then do
br = m.s.tok
a = compExpr(m, 'b', if(br == '{', '-', left(br, 1)))
if \ scanLit(s, '}') then
call scanErr s, 'closing } expected after $@'fu || br
res = '; call oRun envGetO("'fu'")'
if pos(left(a, 1), 'ec') < 1 then
res = res',' comp2code(m, a)
return res
end
call scanErr s, 'procCall, for, do, ct, proc' ,
'or objRef expected after $@'
end
if scanLit(s, '$$') then
return compCheckNN(m, compExprBlock(m, '='),
, 'block or expression expected after $$')
return ''
endProcedure compStmt
compAss: procedure expose m.
parse arg m, aExt
s = m.m.scan
sla = scanLook(s)
slx = verify(sla, m.m.chKind'/'m.m.chOp, 'n')
if slx > 0 then
sla = left(sla, slx-1)
sla = pos('/', sla) > 0
nm = ''
if \ sla then do
nm = compExpr(m, 'b', '=')
if compIsEmpty(m, nm) then
return ''
nm = comp2Code(m, '-'nm)
if \ scanLit(s, "=") then
return scanErr(s, '= expected after $=' nm)
end
m.m.bName = ''
vl = compCheckNE(m, compExprBlock(m, '='),
, 'block or expression after $=' nm '=')
if sla then
if m.m.bName == '' then
call scanErr s, 'missing blockName'
else
nm = "'"m.m.bName"'"
va = compAstAftOp(m, vl)
if va \== '' & m.va.type == ':' then do
pu = "call envPushName" nm
if abbrev(m.m.astOps, '<') then
call mAdd va, pu ", 'asM'", "call envPopWith"
else if abbrev(m.m.astOps, '<<') then
call mAdd va, pu ", 'asM'", "call envPopWith"
else
call mAdd va, pu ", 'as1'", "call envPopWith"
return va
end
if compAstKind(m, vl) == '-' then
return '; call envPut' nm',' comp2Code(m, vl)aExt
else
return '; call envPutO' nm',' comp2Code(m, '.'vl)aExt
endProcedure compAss
/*--- block deals with the correct kind and operators
the content is parsed by compUnit ------------------------------*/
compBlock: procedure expose m.
parse arg m, dKi ops
s = m.m.scan
if \ scanLit(s, '{', '¢', '/') then
return ''
start = m.s.tok
if (ops \== '' & pos(right(ops, 1), m.m.chKind) < 1) ,
| pos(dKi, m.m.chKind) < 1 then
return scanErr(s, 'bad kind' ops 'for block (def' dKi')')
if ops == '' then do
ki = dKi
end
else do
ki = right(ops, 1)
ops = left(ops, length(ops)-1)
end
starter = start
if start == '{' then
stopper = '}'
else if start == '¢' then
stopper = '$!'
else do
call scanVerify s, '/', 'm'
starter = '/'m.s.tok'/'
stopper = '$'starter
if \scanLit(s, '/') then
call scanErr s, 'ending / after stopper' stopper 'expected'
end
res = compUnit(m, ki, stopper)
if \ scanLit(s, stopper) then do
if pos(ki, ':|') < 1 | \ abbrev(stopper, '$') then
call scanErr s, 'ending' stopper 'expected after' starter
else if \ scanLit(s, substr(stopper, 2)) then
call scanErr s, 'ending' stopper 'or' substr(stopper, 2),
'expected after' starter
end
if abbrev(starter, '/') then
m.m.bName = substr(starter, 2, length(starter)-2)
else
m.m.bName = ''
if m.res.text == '' then
m.res.text = ' '
return compAstAddOp(m, res, ops)
endProcedure compBlock
compAssAtt: procedure expose m. aClass
parse arg m
res = ''
aClass = ''
s = m.m.scan
last = ''
do forever
if compSpNlComment(m, '*') then do
end
else if pos(scanLook(s, 1), '/!}') > 0 then do
leave
end
else if scanLit(s, ';', '$;') then do
if last = ';' then
res = res'; call envWithNext'
last = ';'
end
else do
s1 = compAss(m, ", 1")
if s1 == '' then do
s1 = compStmt(m)
if s1 == '' then
leave
end
else do
if last == ';' then
res = res'; call envWithNext'
last = 'a'
end
res = res';' comp2code(m, ';'s1)
end
if res == '' then
res = ';'
end
if last == '' then
return res
else
return '# call envWithNext "b";' res ,
'; call envWithNext "e";'
endProcedure compAssAtt
compAssTab: procedure expose m. aClass
parse arg m
s = m.m.scan
call compSpNlComment m, '*'
hy = 0
tab = ''
do forever
bx = m.s.pos
if \ scanName(s) then
leave
hx = hy + 1
h.hx.beg = bx
if hx > 1 & bx <= h.hy.end then
call scanErr s, 'header overlap' m.s.tok 'pos' bx
h.hx = m.s.tok
tab = tab', f' m.s.tok 'v'
h.hx.end = m.s.pos
hy = hx
call compSpComment m, '*'
end
if tab \== '' then
aClass = classNew('n* Ass u' substr(tab, 3))
res = ''
isFirst = 1
do while scanReadNl(s)
do forever
call compSpNlComment m, '*'
s1 = compStmt(m)
if s1 == '' then
leave
res = res';' comp2code(m, ';'s1)
last = 's'
end
if pos(scanLook(s, 1), '/!}') > 0 then
leave
do qx=1
bx = m.s.pos
s1 = compExpr(m, 'w', '=')
if compIsEmpty(m, s1) then
leave
ex = m.s.pos
if ex <= bx then
return scanErr(s, 'colExpr backward')
do hy=1 to hx while bx >= h.hy.end
end
hz = hy+1
if hz <= hx & ex > h.hz.beg then
call scanErr s, 'value on hdr' h.hy 'overlaps' h.hz
else if hy > hx | bx >= h.hy.end | ex <= h.hy.beg then
call scanErr s, 'value from' bx 'to' ex ,
'no overlap with header' h.hy
if qx > 1 then
nop
else if isFirst then do
res = res"; call envWithNext 'b', '"aClass"'"
isFirst = 0
end
else
res = res"; call envWithNext"
res = res"; call envPut '"h.hy"'," comp2Code(m, "-"s1)", 1"
call compSpComment m, '*'
end
end
if isFirst then
return res
else
return '#' res"; call envWithNext 'e'"
endProcedure compassTab
/**** lexicals ********************************************************/
/*--- skip a comment. return 0 if there is none ----------------------*/
compComment: procedure expose m.
parse arg m
s = m.m.scan
res = 0
do forever
if scanLit(s, '$**') then
m.s.pos = 1 + length(m.s.src) /* before next nl */
else if scanLit(s, '$*+') then
call scanReadNl s, 1
else if scanLit(s, '$*(') then do
do forever
if scanVerify(s, m.m.chDol, 'm') then iterate
if scanReadNl(s) then iterate
if compComment(m) then iterate
if \ scanLit(s, '$') then
call scanErr s, 'source end in comment'
if scanLit(s, '*)') then
return 1
if scanLit(s, '$') then iterate
if scanString(s) then iterate
end
end
else
return res
res = 1
end
endProcedure compComment
/*--- skip spaces and comments ---------------------------------------*/
compSpComment: procedure expose m.
parse arg m, xtra
s = m.m.scan
sp = 0
co = 0
do forever
if scanVerify(s, m.m.chSpa) then
sp = 1
else if compComment(m) then
co = 1
else if xtra == '' then
leave
else if \ scanLit(s, xtra) then
leave
else do
co = 1
m.s.pos = 1+length(m.s.src)
end
end
m.m.gotComment = co
return co | sp
endProcedure compSpComment
/*--- skip spaces, NLs and comments ----------------------------------*/
compSpNlComment: procedure expose m.
parse arg m, xtra
found = 0
do forever
if compSpComment(m, xtra) then
found = 1
else if scanReadNl(m.m.scan) then
found = 1
else
return found
end
endProcedure compSpComment
/**** small helper routines ******************************************/
compInter: procedure expose m.
interpret arg(1)
return
endProcedure compInter
/*--- if va == null then issue an error with msg --------------------*/
compCheckNN: procedure expose m.
parse arg m, va, msg
if va == '' then
call scanErr m.m.scan, msg 'expected'
return va
endProcedure compCheckNN
/*--- return true iff expression is empty ---------------------------*/
compIsEmpty: procedure expose m.
parse arg m, ex
if pos(' ', ex) < 1 & pos('COMP.AST.', ex) > 0 then do
a = substr(ex, pos('COMP.AST.', ex))
a = compAstAftOp(m, a)
if m.a.type = 'block' then
return 0 /* m.a.0 == 0 */
else
return m.a.text == ''
end
e1 = word(ex, 1)
return ex = '' | verify(e1, 'ec', 'm') > 0
endProcedure compIsEmpty
/*--- if va == null or empty then issue an error with msg -----------*/
compCheckNE: procedure expose m.
parse arg m, ex, msg
e1 = left(ex, 1)
if compIsEmpty(m, ex) then
call scanErr m.m.scan, msg 'expected'
return ex
endProcedure compCheckNE
/**** AST = Astract Syntax Graph ***************************************
goal is to migrate to migrate to old codeGenerator to AST
***********************************************************************/
/*--- create a new AST -----------------------------------------------*/
compAST: procedure expose m.
parse arg m, tp
n = mNew('COMP.AST')
m.n.type = tp
if wordPos(tp, 'block') > 0 then do
do cx=1 to arg()-2
m.n.cx = arg(cx+2)
end
m.n.0 = cx-1
end
else do
m.n.text = arg(3)
m.n.0 = 0
end
m.a.isAnnotated = 1
return n
endProcedure compAST
/*--- add operandands to an AST -------------------------------------*/
compASTAddOp: procedure expose m.
parse arg m, a, ops
if ops == '' then
return a
if pos('COMP.AST.', a) < 1 then
return ops || a
if m.a.type = 'ops' then do
m.a.text = ops || m.a.text
return a
end
n = compAst(m, 'ops', ops)
call mAdd n, a
return n
endProcedure compAstAddOp
/*--- return the first AST after the operand chain
put the operands into m.m.astOps ---------------------------*/
compASTaftOp: procedure expose m.
parse arg m, a
m.m.astOps = ''
if \ abbrev(a, 'COMP.AST.') then
return ''
do while m.a.type == 'ops'
m.m.astOps = m.a.text || m.m.astOps
a = m.a.1
end
return a
endProcedure compASTAftOpType
/*--- return the kind of an AST --------------------------------------*/
compASTKind: procedure expose m.
parse arg m, a
m.m.astOps = ''
if \ abbrev(a, 'COMP.AST.') then
return left(a, 1)
c = a
do while m.c.type == 'ops'
if m.c.text \== '' then
return left(m.c.text, 1)
c = m.c.1
end
if a == c then
return '?'
return compAstKind(m, c)
endProcedure compASTKind
/*--- return the code for an AST with operand chain trg --------------*/
compAst2Code: procedure expose m.
parse arg m, a, aTrg
if pos(' ', a) > 0 | \ abbrev(a, 'COMP.AST.') then
return comp2Code(m, aTrg || a)
if \ abbrev(a, 'COMP.AST.') then
call err 'bad ast' a
do while m.a.type == 'ops'
aTrg = aTrg || m.a.text
a = m.a.1
end
trg = compAstOpsReduce(m, aTrg)
if m.a.type == translate(right(trg, 1), ';', '@') then do
if length(trg) == 1 then do
if pos(trg, ';@') > 0 then
return 'do;' m.a.text ';end'
else
return m.a.text
end
else
return compAST2Code(m, a, left(trg, length(trg)-1))
end
if m.a.type == 'block' then do
op = right(trg, 1)
tLe = left(trg, length(trg)-1)
call compASTAnnBlock m, a
if pos(m.a.maxKind, '.-<') > 0 & pos(op, '.-|?') > 0 then do
if m.a.0 = 1 then do
o1 = if(op=='-', '-', '.')
r = compAst2Code(m, m.a.1, o1)
r = compC2C(m, o1, compAstOpsReduce(m, tLe||o1), r)
if pos(op, '.-<') > 0 then
return '('r')'
else
return r
end
if m.a.0 = 0 & op == '?' then
return compC2C(m, '.', compAstOpsReduce(m, tLe'.'))
if op == '-' then do
cd = ''
do cx = 1 to m.a.0
cd = cd '('compAst2Code(m, m.a.cx, '-')')'
end
return compC2C(m, '-', trg, substr(cd, 2))
end
call scanErr m.m.scan, 'bad block cardinality' aTrg
end
cd = ''
do cx = 1 to m.a.0
cd = cd';' compAst2Code(m, m.a.cx, ';')
end
if right(trg, 1) == '@' then
trg = overlay(';', trg, length(trg))
return compC2C(m, ';', trg, 'do;' cd'; end')
end
else if m.a.type == ';' then do
return compC2C(m, ';', trg, m.a.text)
if right(trg, 1) == '-' then
return compAst2Code(m, "- o2String('"oRunner(m.a.text)"')",
, trg)
if right(trg, 1) == '<' then
return compAst2Code(m, "< o2File('"oRunner(m.a.text)"')",
, trg)
end
else if m.a.type == ':' then do
if m.a.0 = 0 then
call mAdd a, 'call envPushWith', 'call envPopWith'
return compC2C(m, ';', trg,
, 'do;' m.a.1';' m.a.text';' m.a.2'; end')
end
call scanErr m.m.scan, 'implement type' m.a.type 'for' a 'trg' trg
endProcedure compAst2Code
/*--- do a chain of code transformations
from code of kind fr by opList
op as from kind operand
= constant -
- rexx string Expr cast to string/ concat file/output
. rexx object Expr cast to object
< rexx file Expr cast to file
; rexx Statements execute, write obj, Str
@ - cast to ORun, run an obj, write file
| - extract exactlyOne
? - extract OneOrNull
----------------------------------------------------------------------*/
compC2C: procedure expose m.
parse arg m, fr, opList, code
oldCode = fr':' code '==>' opList '==>'
do tx=length(opList) by -1 to 1
to = substr(opList, tx, 1)
if fr == to then
iterate
nn = '||||'
if to == '-' then do
if fr == '=' then
nn = quote(code)
else if abbrev(fr code, '. envGetO(') then
nn = 'envGet(' || substr(code, 9)
else if fr == ';' then
nn = "o2String('"oRunner(code)"')"
else if pos(fr, '.<') > 0 then
nn = "o2String("code")"
end
else if to == '.' then do
if fr == '=' then
nn = quote(s2o(code))
else if abbrev(fr expr, '- envGet(') then
nn = 'envGetO('substr(expr, 8)
else if fr == '-' then
nn = 's2o('code')'
else if fr == '<' then
nn = code
else if fr == ';' then
nn = quote(oRunner(code))
end
else if to == '@' then do
if fr == '.' then
nn = 'call oRun' code
else if fr == '<' then
nn = 'call pipeWriteAll' code
else if fr == ';' then
nn = code
to = ';'
end
else if to == ';' then do
if fr == '=' then
nn = 'call out' quote(code)
else if fr == '-' then
nn = 'call out' code
else if fr == '.' | fr == '<' then
nn = 'call outO' code
end
else if to == ':' then do
if fr == '=' then
nn = quote(code)
else
nn = code
to = ';'
end
else if to == '<' then do
if fr == '-' then
nn = 'file('code')'
else if fr == '=' then
nn = "file("quote(code)")"
else if fr == '.' then
nn = 'o2File('code')'
else if fr == ';' then
nn = 'o2File('oRunner(code)')'
end
else if to == '|' | to == '?' then do
if fr == '<' | fr == '.' then
nn = 'fileSingle('code if(to == '|','', ", ''")')'
else if fr == '@' | fr == ';' then
/* ???wkTst optimize: do it directly */
nn = compC2C(m, fr, to'<', code)
to = '.'
end
if nn == '||||' then
return scanErr(m.m.scan,
,'compC2C bad fr' fr 'to' to 'list' opList)
fr = to
code = nn
end
return code
endProcedure compC2C
/*--- reduce a chain of operands -------------------------------------*/
eliminate duplicates and identity transformations ----------*/
compAstOpsReduce: procedure expose m.
parse arg m, ops
ki = ops
ki = space(translate(ops, ' ', 'e('), 0)
fr = ';<; <;< -.- <@<'
to = '; < - < '
fr = fr '== -- .. << ;; @@ @('
to = to '= - . < ; @ (@'
wc = words(fr)
do until ki = oldKi
oldKi = ki
do wx=1 to wc
do forever
wf = word(fr, wx)
cx = pos(wf, ki)
if cx < 1 then
leave
ki = left(ki, cx-1) || word(to, wx) ,
|| substr(ki, cx+length(wf))
end
end
end
return ki
endProcedure compASTOpsReduce
/*--- annotate a block if necessary ----------------------------------*/
compASTAnnBlock: procedure expose m.
parse arg m, a
if m.a.isAnnotated == 1 then
return
mk = ''
do cx=1 to m.a.0
c = m.a.cx
if pos(' ', c) > 0 | \ abbrev(c, 'COMP.AST.') then
ki = left(c, 1)
else if \ abbrev(c, 'COMP.AST.') then
return scanErr(m.m.scan, 'bad ast' c 'parent' a) /0
else
call scanErr m.m.scan, 'implement kind of' c 'type' m.c.type
if pos(ki, '=-.<;@:|') < 1 then do
if pos(ki, 'el0') < 1 then
call err 'bad kind' ki
end
else if mk == '' | pos(ki, '=-.<;@:|') > pos(mk, '=-.<;@:|') then
mk = ki
end
m.a.maxKind = mk
m.a.isAnnotated = 1
return
endProcedrue compASTAnnBlock
/**** old code generator ***********************************************
plan is to replace it with AST ******************************/
/*--- transform abstract syntax tree to code ------------------------
wkTst??? codeTree besser dokumentieren
optimizer an/und/abschaltbar machen
(test sollte laufen, allenfalls gehen rexx variabeln
verloren)
syntax tree is simple, only where
* a transformation is needed from several places or
* must be deferred for possible optimizations
sn = ops* syntax node op or syntax function
( '=' constant none
| '-' rexxExpr yielding string cast to string
| '.' rexxExpr yielding object cast to object
| '<' rexxExpr yielding file cast to file
| ';' rexxStmts execute, write obj, Str
| '*' stem yielding multiple sn none
)
ops = '@' cast to ORun
| '|' single
| 'e' empty = space only
| 'c' empty = including a comment
| '0' cat expression parts
| 'l' cat lines
| '(' add ( ... ) or do ... end
---------------------------------------------------------------------*/
comp2Code: procedure expose m.
parse arg m, ki expr
if expr == '' & pos(' ', ki) < 1 & pos('COMP.AST.', ki) > 0 then do
cx = pos('COMP.AST.', ki)
return compAst2Code(m, substr(ki, cx), left(ki, cx-1))
end
/* wkTst??? optimize: use stem with code and interpret */
if expr = '' & pos(right(ki, 1), '@;=') < 1 then
return scanErr(m.m.scan, 'comp2Code empty expr' ki expr)
do forever
ki = comp2CodeKind(m, ki)
if length(ki) <= 1 then
if pos(ki, m.m.chKind';<') > 0 then
return expr
else
call err 'comp2Code bad return' ki expr
fr = right(ki, 1)
to = substr(ki, length(ki)-1, 1)
opt = ''
if pos(to, 'l0') > 0 | (to == '*' & fr == '*') then do
opt = to
to = substr(ki, length(ki)-2, 1)
end
toBef = to
nn = '||||'
if fr == '*' then do
if opt == '' then
call scanErr m.m.scan, 'no sOp for * kind' ki expr
cat = comp2CodeCat(m, expr, opt, to)
parse var cat to nn
end
else if to == '-' then do
if fr == '=' then
nn = quote(expr)
else if abbrev(fr expr, '. envGetO(') then
nn = 'envGet(' || substr(expr, 9)
else if fr == ';' then
nn = "o2String('"oRunner(expr)"')"
else if pos(fr, '.<') > 0 then
nn = "o2String("expr")"
end
else if to == '.' then do
if fr == '=' then
nn = quote(s2o(expr))
else if abbrev(fr expr, '- envGet(') then
nn = 'envGetO('substr(expr, 8)
else if fr == '-' then
nn = 's2o('expr')'
else if fr == '<' then
nn = expr
else if fr == ';' then
nn = quote(oRunner(expr))
end
else if to == '@' then do
if fr == '.' then
nn = 'call oRun' expr
else if fr == '<' then
nn = 'call pipeWriteAll' expr
else if fr == ';' then
nn = expr
to = ';'
end
else if to == ';' then do
if fr == '=' then
nn = 'call out' quote(expr)
else if fr == '-' then
nn = 'call out' expr
else if fr == '.' | fr == '<' then
nn = 'call outO' expr
else if fr == '#' then
nn = 'call envPushWith ;'expr'; call envPopWith'
end
else if to == ':' then do
if fr == '=' then
nn = quote(expr)
else
nn = expr
to = ';'
end
else if to == '<' then do
if fr == '-' then
nn = 'file('expr')'
else if fr == '=' then
nn = "file("quote(expr)")"
else if fr == '.' then
nn = 'o2File('expr')'
else if fr == ';' then
nn = 'o2File('oRunner(expr)')'
end
else if to == '(' then do
nn = compAddBracks(m, fr, expr)
to = fr
end
else if to == '|' | to == '?' then do
if fr == '<' | fr == '.' then do
nn = 'fileSingle('expr if(to == '|','', ", ''")')'
to = '.'
end
else if fr == '@' | fr == ';' then do
to = to'<'fr
nn = expr
end
end
if nn == '||||' then
return scanErr(m.m.scan,
,'comp2code bad fr' fr 'to' toBef 'for' ki expr)
ki = left(ki, length(ki)-2-length(opt))to
expr = nn
end
endProcedure comp2Code
/*--- optimize operands: eliminate duplicates and
identity transformations -------------------*/
comp2CodeKind: procedure expose m.
parse arg m, ki
ki = '$'space(translate(ki, ' ', 'ce'), 0)
fr.2 = '== -- .. << ;; (( -( .( ;( (< @; @@ ;@ @( $l $0 @#'
to.2 = '= - . < ; ( (- (. (; < ; @ @ (@ $ $ ;#'
fr.3 = ';0; ;l; -.- -;- .-. .;. ;<; ;<( <(; @(- @(l |(l ?(l'
to.3 = ' 0; l; - - . . ; ;< <; ;(- ;(l (|l (?l'
do until ki = oldKi
oldKi = ki
do le=3 by-1 to 2
do cx=1 while cx <= length(ki)+1-le
wx = wordPos(substr(ki, cx, le), fr.le)
if wx > 0 then
ki = left(ki, cx-1) || ,
word(to.le, wx) || substr(ki, cx+le)
end
end
end
return substr(ki, 2)
endProcedure comp2CodeKind
/*--- generate one codeString for one stem -------------------------*/
comp2CodeCat: procedure expose m.
parse arg m, st, sOp, trgt
toCode = trgt == '@' | trgt == ';'
if m.st.0 < 1 & trgt \== '<' then
return trgt
tr1 = trgt
if \ toCode then do
/* check wether we need to evaluate statements
and cast the outptut to an object */
maxTy = 0
do x=1 to m.st.0
maxTy = max(maxTy, pos(left(m.st.x, 1), '=-.<;@'))
end
if trgt \== '<' then do
if maxTy >= 5 then do
tr1 = ';'
toCode = 1
end
end
else do /* handle files */
if maxTy > 1 then do /* not constant */
res = ';'
do sx=1 to m.st.0
res = res';' comp2Code(m, ';'m.st.sx)
end
return '<'res
end
/* constant file write to jBuf */
buf = jOpen(jBuf(), m.j.cWri)
do sx=1 to m.st.0
call jWrite buf, substr(m.st.sx, 3)
end
return '<' quote(jClose(buf))
end
end
if m.st.0 = 1 then do
if trgt == '|' | trgt == '?' then
return left(m.st.1, 1) comp2Code(m, m.st.1)
else if trgt \== '<' then
return trgt comp2Code(m, trgt || m.st.1)
end
tr2 = tr1
if toCode then do
mc = '; '
if sOp == 0 then do
mc = ''
tr2 = ':'
end
end
else if sOp == '0' then
mc = if(tr1 == '.' | tr1 == '-', '', ' || ')
else if sOp == 'l' then
mc = ' '
else
call scanErr m.m.scan, 'bad sOp' sOp ,
'in comp2CodeCat('m',' st',' sOp',' trgt')'
if symbol('m.st.1') \== 'VAR' then
return err("bad m."st'.1')
sep = if(tr1 == '.' | tr1 == '-' | tr1 == '=', ' || ', ' ')
sep = if(sOp = 0, ' || ', ' ')
tr3 = left(tr2, sOp \== 0)
res = comp2Code(m, tr3 || m.st.1)
do sx = 2 to m.st.0
if (tr2 == '.' | tr2 == '-') ,
& (m.st.sx = '-' | m.st.sx = '.') then do
/* empty expr is simply a rexx syntax space */
if right(res, 1) \== ' ' then
res = res' '
end
else do
act = comp2Code(m, tr3 || m.st.sx)
res = compCatRexx(res, act, mc, sep)
end
end
return copies(trgt || sOp, tr1 \== trgt)tr1 res
endProcedure comp2CodeCat
/*--- add expression brackets if necessary --------------------------*/
compAddBracks: procedure expose m.
parse arg m, ki, ex
if ki == ';' then
return 'do;' ex || left(';', ex \= '') 'end'
if \ (ki == '.' | ki == '-') then
return ex
ex = strip(ex)
e1 = left(ex, 1)
if e1 == '(' & pos('(', ex, 2) = 0 & pos(')', ex) = length(ex) then
return ex
if pos(e1, '"''') > 0 & pos(e1, ex, 2) = length(ex) then
return ex
return '('ex')'
endProcedure compAddBracks
/*--- cat two rexx parts, avoid strange effects--------------------*/
compCatRexx: procedure expose m.
parse arg le, ri, mi, sep
if mi \== '' then
return le || mi || ri
lr = right(le, 1)
rl = left(ri, 1)
if (lr == "'" | lr == '"') then do
if rl == lr then /* "a","b" -> "ab" */
return left(le, length(le)-1) || substr(ri, 2)
else if rl == '(' then /* "a",( -> "a" || ( */
return le||sep||ri /* avoid function call */
end
else if pos(lr, m.comp.idChars) > 0 then
if pos(rl, m.comp.idChars'(') > 0 then
return le || sep || ri /* a,b -> a || b */
return le || mi || ri
endProcedure compCatRexx
/*--- push an empty stem on the stack --------------------------------*/
compNewStem: procedure expose m.
parse arg m
st = mAdd('COMP.STEM', '')
do ix=1 to arg()-1
m.st.ix = arg(ix+1)
end
m.st.0 = ix-1
return st
endProcedure compNewStem
/* copy comp end ******************************************************/
}¢--- A540769.WK.REXX.O13(CONSUMGE) cre=2012-06-20 mod=2012-06-28-17.29.55 A540769 ---
$#@
$=out=~tmp.sql
$=exclNew=1
if 1 then $@¢
$>$out(rz2Sql)
$@gen{rz2, dbof, QMW0008}
$@gen{rz2, dp2g, QMW0013}
$@gen{rz2, dvbp, QMW0010}
$!
if 1 then $@¢
$>$out(rz4Sql)
$@gen{rz4, dbol}
$@gen{rz4, dp4g}
$!
if 1 then $@¢
$>$out(rz1Sql)
$@gen{rz1, dbaf, QMW0001}
$@gen{rz1, dbtf, QMW0002}
$@gen{rz1, dbba, QMW0005}
$@gen{rz1, dblf}
$@gen{rz1, dvtb, QMW0006}
$@gen{rz1, dboc, QMW0007}
$!
if 1 then $@¢
$>$out(rz8Sql)
$@gen{rz8, dc0g}
$@gen{rz8, dd0g}
$@gen{rz8, dp8g}
$@gen{rz8, daeg}
$@gen{rz8, dcvg}
$@gen{rz8, ddvg}
$@gen{rz8, dx0g}
$!
if 1 then $@¢
$>$out(rzzSql)
$@gen{rzz, de0g}
$@gen{rzz, devg}
$!
$@proc gen $@¢
parse upper arg ., rz, subsys
$=rz=-rz
$=subsys=-subsys
$=isElar=-wordPos($subsys, 'DVBP DBBA DVTB DEVG DCVG DDVG')>0
say 'gen rz='$rz', subsys='$subsys', isElar='$isElar
$$ ¢$subsys!
if m.done.rz \== 1 then $@¢
$@rzBegin()
m.done.rz = 1
$!
$@=/genAll/
--************************************************************
$@¢if \ $isElar then $@=¢
--$'$$' fehlende Fullcopies Tablespaces, letzte 8 Tage:
$! else $@=¢
--$'$$' DXB - fehlende Fullcopies TS, letzte 8 Tage:
$! $!
--************************************************************
$@missFullcopies1()
$@exclude{PT}
$@missFullcopies2db{8}
--************************************************************
$@¢if \ $isElar then $@=¢
--$'$$' fehlende Fullcopies Indexspaces, letzte 8 Tage:
$! else $@=¢
--$'$$' DXB - fehlende Fullcopies IX, letzte 8 Tage:
$! $!
--************************************************************
SELECT SUBSTR(IX.CREATOR,1,8) AS CREATOR
,SUBSTR(IX.NAME,1,8) AS IXNAME
,SUBSTR(IX.DBNAME,1,8) AS DBNAME
,SUBSTR(IX.INDEXSPACE,1,8) AS IXSPACE
,IP.PARTITION
,DATE(IX.CREATEDTS) AS CREATEDATE
FROM SYSIBM.SYSINDEXES IX,
SYSIBM.SYSINDEXPART IP
WHERE IX.CREATOR = IP.IXCREATOR
AND IX.NAME = IP.IXNAME
AND IX.COPY = 'Y'
AND IP.SPACE <> -1
AND DATE(IX.CREATEDTS) < CURRENT DATE
$@exclude{IX}
AND NOT EXISTS
(SELECT ' '
FROM SYSIBM.SYSCOPY CP
WHERE IX.DBNAME = CP.DBNAME
AND IX.INDEXSPACE = CP.TSNAME
AND (IP.PARTITION = CP.DSNUM OR CP.DSNUM = 0)
AND CP.ICTYPE IN ('F','R','X')
AND CP.TIMESTAMP > CURRENT TIMESTAMP - 8 DAYS
)
ORDER BY CREATOR, IXNAME, IP.PARTITION
WITH UR;
--************************************************************
$@¢if \ $isElar then $@=¢
--$'$$' Imagecopy Datasets die nicht katalogisiert sind:
$! else $@=¢
--$'$$' DXB - Imagecopy Datasets, nicht katalogisiert:
$! $!
--************************************************************
$@¢ if $exclNew | wordPos($subsys, DBOF) > 0 then $@=¢
WITH DS AS
(
SELECT DBNAME, TSNAME, DSNUM
,MAX(ICDATE) ICDATE
,MAX(JOBNAME)JOBNAME
,DSNAME
FROM SYSIBM.SYSCOPY C
WHERE ICTYPE IN ('F','I')
AND C.TIMESTAMP >= CURRENT TIMESTAMP - 21 DAYS
$! else $@=¢
SELECT SUBSTR(DBNAME,1,8) AS DBNAME
,SUBSTR(TSNAME,1,8) AS TSNAME
,CHAR(DSNUM) AS PART
,ICDATE
,JOBNAME
,DSNAME
FROM SYSIBM.SYSCOPY C
WHERE ICTYPE IN ('F','I')
AND C.TIMESTAMP >= CURRENT TIMESTAMP - 21 DAYS
AND S100447.DSLOCATE(DSNAME) IS NULL
$!
$!
$@exclude{C}
$@¢ if $exclNew | wordPos($subsys, DBOF) > 0 then $@=¢
GROUP BY DBNAME, TSNAME, DSNUM, DSNAME
)
SELECT SUBSTR(DBNAME,1,8) AS DBNAME
,SUBSTR(TSNAME,1,8) AS TSNAME
,CHAR(DSNUM) AS PART
,ICDATE, JOBNAME, DSNAME
FROM DS
where S100447.DSLOCATE(DSNAME) IS NULL
$!
$!
ORDER BY DBNAME, TSNAME, PART
WITH UR;
$@¢
if wordPos($subsys, DBOF) > 0 then
$@=¢
--************************************************************
--$'$$' fehlende Fullcopies XBS Tablespaces, letzte 2 Tage:
--************************************************************
$@missFullcopies1()
AND PT.DBNAME = 'BE01A1P'
AND ( PT.TSNAME LIKE 'A00%'
OR PT.TSNAME LIKE 'A01%'
OR PT.TSNAME LIKE 'A02%' )
$@missFullcopies2{2}
$!
if $isElar & $subsys \= DBBA then $@=/elar2/
--************************************************************
--$'$$' XB - kein oder falscher eintrag in txbc181:
--************************************************************
SELECT SUBSTR(T1.DBNAME,1,8) AS DBNAME
,SUBSTR(T1.NAME,1,8) AS NAME
,T1.PARTITION
,SUBSTR(T1.CREATOR,1,8) AS CREATOR
,T1.TABLE
,ST.XBC181_STATUS
FROM (
SELECT SP.DBNAME
,SP.NAME
,PT.PARTITION
,SUBSTR(TB.CREATOR,1,18) AS CREATOR
,SUBSTR(TB.NAME,1,18) AS TABLE
FROM SYSIBM.SYSTABLESPACE SP
,SYSIBM.SYSTABLEPART PT
,SYSIBM.SYSTABLES TB
WHERE SP.DBNAME LIKE 'XB%'
AND SP.PARTITIONS > 0
AND TB.NAME LIKE 'XB%'
AND SP.DBNAME = PT.DBNAME
AND SP.NAME = PT.TSNAME
AND SP.DBNAME = TB.DBNAME
AND SP.NAME = TB.TSNAME
AND TB.TYPE = 'T'
) AS T1
LEFT OUTER JOIN BUA.TXBC181 ST
ON T1.CREATOR = ST.XBC181_CREATOR
AND T1.TABLE = ST.XBC181_TABNAME
AND T1.PARTITION = ST.XBC181_PARTNR
INNER JOIN BUA.TXBC111
ON DBNAME = EYPREF || ENSTORAR || ENSEG
WHERE ST.XBC181_STATUS IS NULL
OR ST.XBC181_STATUS NOT IN ('UL','FZ','RU','RO')
WITH UR;
--************************************************************
--$'$$' xb - fehlende fullcopies ts, letzte 8 tage:
--************************************************************
SELECT SUBSTR(TB.DBNAME,1,8) AS DBNAME
,SUBSTR(TB.TSNAME,1,8) AS TSNAME
,ST.XBC181_PARTNR AS PART
,SUBSTR(ST.XBC181_CREATOR,1,8) AS CREATOR
,SUBSTR(ST.XBC181_TABNAME,1,18) AS TABLE
,ST.XBC181_STATUS
FROM BUA.TXBC181 ST
,SYSIBM.SYSTABLES TB
WHERE ST.XBC181_STATUS IN ('RU','FZ','RO')
AND ST.XBC181_TABNAME = TB.NAME
AND TB.TYPE = 'T'
AND NOT EXISTS
(SELECT ' '
FROM SYSIBM.SYSCOPY CP
WHERE TB.DBNAME = CP.DBNAME
AND TB.TSNAME = CP.TSNAME
AND (ST.XBC181_PARTNR = CP.DSNUM OR CP.DSNUM = 0)
AND CP.ICTYPE IN ('F','R','X')
AND CP.TIMESTAMP > CURRENT TIMESTAMP - 8 DAYS
)
$@¢if wordPos($subsys, 'DVBP') > 0 then $@=¢
AND NOT (TB.DBNAME = 'XBD2R001')
AND NOT (TB.DBNAME = 'XBD2R002')
AND NOT (TB.DBNAME = 'XBDPL001')
AND NOT (TB.DBNAME = 'XBDPL002')
AND NOT (TB.DBNAME = 'XBDL1001')
AND NOT (TB.DBNAME = 'XBDL1002')
AND NOT (TB.DBNAME = 'XBDL0001')
AND NOT (TB.DBNAME = 'XBDL0002')
AND NOT (TB.DBNAME = 'XBDPK001')
AND NOT (TB.DBNAME = 'XBDPK002')
AND NOT (TB.DBNAME = 'XBDJH001')
AND NOT (TB.DBNAME = 'XBDJH002')
AND NOT (TB.DBNAME = 'XBDT0001')
AND NOT (TB.DBNAME = 'XBDT0002')
AND NOT (TB.DBNAME = 'XBDT2001')
AND NOT (TB.DBNAME = 'XBDT2002')
AND NOT (TB.DBNAME = 'XBDT3001')
AND NOT (TB.DBNAME = 'XBDT3002')
AND NOT (TB.DBNAME = 'XBDM3001')
AND NOT (TB.DBNAME = 'XBDM3002')
AND NOT (TB.DBNAME = 'XBDT1001')
AND NOT (TB.DBNAME = 'XBDT1002')
AND NOT (TB.DBNAME = 'XBDNT001')
AND NOT (TB.DBNAME = 'XBDNT002')
$! $!
order by TB.DBNAME, TB.tsNAME, ST.XBC181_PARTNR
WITH UR;
--************************************************************
--$'$$' XB - imagecopy datasets, nicht katalogisiert:
--************************************************************
SELECT CP.DBNAME
,CP.TSNAME
,CP.DSNUM
,CP.ICDATE
,CP.JOBNAME
,CP.DSNAME
FROM BUA.TXBC181 ST
,SYSIBM.SYSTABLES TB
,SYSIBM.SYSCOPY CP
WHERE ST.XBC181_STATUS IN ('RU','FZ','RO')
AND ST.XBC181_TABNAME = TB.NAME
AND TB.TYPE = 'T'
AND TB.DBNAME = CP.DBNAME
AND TB.TSNAME = CP.TSNAME
AND ST.XBC181_PARTNR = CP.DSNUM
AND CP.ICTYPE IN ('F','I')
AND CP.TIMESTAMP >= CURRENT TIMESTAMP - 21 DAYS
AND S100447.DSLOCATE(CP.DSNAME) IS NULL
order by CP.DBNAME, CP.tsNAME, CP.DSNUM
WITH UR;
--************************************************************
--$'$$' XB - unld/punch datasets, nicht katalogisiert:
--************************************************************
SELECT SUBSTR(XBC181_CREATOR,1,8) AS CREATOR
,SUBSTR(XBC181_TABNAME,1,18) AS TABLE
,XBC181_PARTNR AS PART
,XBC181_UNL_DSN_C AS PUNCH
,XBC181_UNL_DSN AS SYSREC
FROM BUA.TXBC181
WHERE XBC181_STATUS IN ('UL')
AND ( S100447.DSLOCATE(CHAR(XBC181_UNL_DSN_C)) IS NULL
OR S100447.DSLOCATE(CHAR(XBC181_UNL_DSN )) IS NULL )
order by XBC181_CREATOR, XBC181_TABNAME, XBC181_PARTNR
WITH UR;
$/elar2/
if $isElar then $@=/elar3/
--************************************************************
--$'$$' xb - tablepaces mit > 200 Partitionen:
--************************************************************
SELECT DBNAME, NAME, PARTITIONS
FROM SYSIBM.SYSTABLESPACE
WHERE PARTITIONS > 200
AND DBNAME LIKE 'XB%'
--------- START EXCLUDE LIST -------------------------------
--AND NOT (DBNAME = 'XBxxxxx' AND NAME = 'xxxxxxx' ) -- comment
--------- END EXCLUDE LIST ---------------------------------
ORDER BY PARTITIONS DESC
WITH UR;
$/elar3/
$!
--************************************************************
--$'$$' LOB-Tablespaces mit falschen Spezifikationen:
--************************************************************
SELECT SUBSTR(DBNAME,1,8) AS DBNAME
,SUBSTR(NAME,1,8) AS TSNAME
,BPOOL
,LOG
FROM SYSIBM.SYSTABLESPACE S
WHERE TYPE = 'O'
AND (BPOOL NOT IN('BP8','BP32K') OR LOG = 'N')
$@¢ if $exclNew then $@=¢
$@exclGen{S, F}
$! else $@=¢
AND DBNAME NOT IN ('DSNDB01','DSNDB06','DSNDB04','DSNTESQ'
,'DUTILTST','XSN8D71L','DB2XML')
AND DBNAME NOT LIKE 'DSNX%'
AND DBNAME NOT LIKE 'IDTA%'
$@¢ if pos($subsys, 'DBOF') > 0 then $@#¢
AND DBNAME NOT LIKE 'DB2OSC%'
AND DBNAME NOT LIKE 'DSNO%'
$! $!
AND DBNAME NOT LIKE 'DB2PLAN%'
$!
$!
ORDER BY DBNAME, TSNAME
WITH UR;
--************************************************************
--$'$$' Tablespaces mit fehlerhafter Spezifikation:
--************************************************************
SELECT DISTINCT SUBSTR(TS.DBNAME,1,8) AS DBNAME
,SUBSTR(TS.NAME,1,8) AS TSNAME
,TS.BPOOL
,SUBSTR(PT.STORNAME,1,8) AS STORNAME
,PT.STORTYPE
FROM SYSIBM.SYSDATABASE DB,
SYSIBM.SYSTABLESPACE TS,
SYSIBM.SYSTABLEPART PT
WHERE DB.NAME = TS.DBNAME
AND DB.NAME = PT.DBNAME
AND TS.NAME = PT.TSNAME
$@exclude{PT,F}
AND DB.TYPE <> 'W'
AND (TS.BPOOL = 'BP0'
OR PT.STORNAME <> 'GSMS'
OR PT.STORTYPE = 'E')
ORDER BY DBNAME, TSNAME
WITH UR;
$@¢ if $exclNew then $@=/new/
--************************************************************
--$'$$' Indexspaces mit fehlerhafter Spezifikation:
--************************************************************
SELECT DISTINCT SUBSTR(IX.CREATOR,1,8) AS CREATOR
,SUBSTR(IX.NAME,1,8) AS IXNAME
,IX.BPOOL
,SUBSTR(IP.STORNAME,1,8) AS STORNAME
,IP.STORTYPE
FROM SYSIBM.SYSINDEXES IX,
SYSIBM.SYSINDEXPART IP
WHERE IX.CREATOR = IP.IXCREATOR
AND IX.NAME = IP.IXNAME
$@exclude{IX,F}
$@¢ if $subsys = 'DBAF' then $@=¢
AND NOT (IX.DBNAME LIKE 'DHPS%')
$! $!
AND (IX.BPOOL = 'BP0'
OR IP.STORNAME <> 'GSMS'
OR IP.STORTYPE = 'E')
ORDER BY CREATOR, IXNAME
WITH UR;
--************************************************************
--$'$$' tableParts mit pri/secQty <> -1 oder vielen extents
--************************************************************
SELECT SUBSTR(PT.DBNAME,1,8) "db"
,SUBSTR(PT.TSNAME,1,8) "ts"
,PT.PARTITION "part"
,pt.pQty "priQty"
,pt.sQty "secQty"
,r.extents
FROM
SYSIBM.SYSTableSpace ts
join SYSIBM.SYSTABLEPART pt
on pt.dbName = ts.dbName and pt.tsname = ts.name
left join sysibm.sysTableSpaceStats r
on pt.dbNAME = r.DBNAME
AND pt.tsName = r.NAME
AND ts.dbid = r.dbid
AND ts.psid = r.psid
AND pt.partition = r.partition
WHERE (pt.pQty <> -1 or pt.sQty <> -1 or r.extents > 300)
$@exclGen{PT, F}
ORDER BY pt.DBNAME, pt.tsNAME, PT.PARTITION
fetch first 999 rows only
WITH UR;
--************************************************************
--$'$$' IndexParts mit pri/secQty <> -1 oder vielen extents
--************************************************************
SELECT SUBSTR(Ip.ixCREATOR,1,8) AS CREATOR
,SUBSTR(Ip.ixNAME,1,16) AS IXNAME
,IP.PARTITION
,ip.pQty "priQty"
,ip.sQty "secQty"
,ip.extents
FROM
SYSIBM.SYSINDEXES Ix
join SYSIBM.SYSINDEXPART IP
on ix.creator = ip.ixCreator and ix.name = ip.ixName
left join SYSIBM.SYSINDEXSpaceStats r
on ix.creator = r.creator and ix.name = r.creator
and ix.dbid = r.dbid and ix.isobid = r.isobid
and ip.partition = r.partition
WHERE (ip.pQty <> -1 or ip.sQty <> -1 or r.extents > 300)
$@exclGen{IX, F}
order by ix.creator, ix.name, ip.partition
fetch first 999 rows only
WITH UR;
$/new/
$!
$/genAll/
$!
$@proc rzBegin $@/rzBegin/
if $rz == 'RZ2' then
$@#¢
--* 23.12.09 W. Keller dsLocate verschoben wegen Performance
--* Anpassung erfolgte nur für DBOF und Sektion Image Copy
--* Datasets welche nicht katalogisiert sind||||||
$!
$/rzBegin/
$@proc exclGen $@/exclGen/
parse upper arg , q, var
$=q=-q
$=var=-var
$@=¢
AND NOT ($q.DBNAME like 'DSNDB%') -- DB2 CATALOG
AND NOT ($q.DBNAME LIKE 'DSN8%') -- IBM TEST DB
AND NOT ($q.DBNAME LIKE 'WKDBD%') -- DB2 WORK DATABASE
AND NOT ($q.DBNAME = 'DSNTESQ') -- DB2 CATALOG CLONE
AND NOT ($q.DBNAME LIKE 'DB2MAPP%') -- REORG MAPPING TABLES
AND NOT ($q.DBNAME LIKE 'DB2PLAN%') -- explain tables
and not translate($q.dbName, '999999999AAAAAA', '012345678FISWXY')
= 'DA999999' -- user datenbanken
AND NOT ($q.DBNAME LIKE 'DB2ALA%') -- marec generated
AND NOT ($q.DBNAME LIKE '%MAREC%') -- marec generated
AND NOT ($q.DBNAME LIKE 'DACME%') -- Mail Heinz Bühler
$!
if pos($var, ' FG') > 1 then $@=¢
AND NOT ($q.DBNAME = 'SYSIBMTA') -- engineering
AND NOT ($q.DBNAME = 'SYSIBMTS') -- engineering
AND NOT ($q.DBNAME = 'DB2PM') -- PERF.EXPERT DATABASE
AND NOT ($q.DBNAME = 'DB2OSC') -- osc
AND NOT ($q.DBNAME like 'DSN%') -- div databases
AND NOT ($q.DBNAME like 'DSQ%') -- qmf databse
AND $q.DBNAME NOT IN ('DUTILTST','XSN8D71L','DB2XML')
AND $q.DBNAME NOT LIKE 'IDTA%' -- tools
$!
if wordPos($subsys, 'DBAF DBTF') > 0 then $@=¢
AND NOT ($q.DBNAME LIKE 'DGDB%') -- PROTOTYPEN
AND NOT ($q.DBNAME LIKE 'DGO%') -- PROTOTYPEN
AND NOT ($q.DBNAME LIKE '%A1X%') -- Neue Prototypen
AND NOT ($q.DBNAME LIKE 'DAU%') -- Schulung Gerrit
AND NOT ($q.DBNAME LIKE 'IDT%') -- ibm tools
$!
$/exclGen/
$@proc exclude $@/exclude/
parse upper arg , q, var
$=q=-q
$=var=-var
$@=¢
--------- START EXCLUDE LIST -------------------------------
-- COMMON SECTION: EXCLUDE LIST SAVE PROCEDURE --
$!
if $exclNew then $@/exclNew/
$@exclGen{$q, $var}
if wordPos($subsys, 'DBOF') > 0 & $q <> 'IX' & $var == '' then $@=¢
AND NOT ($q.DBNAME = 'XC01A1P' AND $q.TSNAME LIKE 'A2%' )
-- EOS: Armin Breyer
AND NOT ($q.DBNAME = 'XR01A1P' AND $q.TSNAME LIKE 'A2%' )
-- ERET: Armin Breyer
AND NOT ($q.DBNAME = 'CSQDBOF' AND $q.TSNAME like 'TSBLOB%' )
$!
else if wordPos($subsys, 'DP2G') > 0 & $var == '' then $@=¢
AND NOT ($q.DBNAME LIKE 'OS80%') -- HAT EIGENE IMAGECOPY
$!
else if wordPos($rz, 'RZ4 RZ8') > 0 & $var == 'F' then $@¢
if $q == IX then $@=¢
AND NOT $q.DBNAME = 'DB2PMPDB' -- PMON KITD2
$! else $@=¢
AND NOT ($q.DBNAME = 'DB2PMPDB'
AND $q.TSNAME like 'ACCS%') -- PMON KITD2
$!
$!
if wordPos($subsys, 'DBOC DP4G') > 0 then $@=¢
AND NOT ($q.DBNAME = 'DB2PDB') -- performance DB
AND NOT ($q.DBNAME = 'DB2XML') -- performance DB
AND NOT ($q.DBNAME like 'DSN%')
$!
if wordPos($rz, 'RZ1 RZ8 RZZ') > 0 then $@=¢
AND NOT ($q.DBNAME LIKE 'OE02%') -- Mail Ivo Eichmann
AND NOT ($q.DBNAME LIKE 'CSQ%') -- M-QUEUE DATENBANK
$!
if $isElar then $@=¢
AND NOT ($q.DBNAME LIKE 'XB%') -- ELAR Dokumente
$!
$/exclNew/ else $@/exclOld/
if pos($var, ' FG') > 1 then $@=¢
AND NOT ($q.DBNAME = 'DB2PM') -- PERF.EXPERT DATABASE
AND NOT ($q.DBNAME LIKE 'WKDBD%') -- DB2 WORK DATABASE
AND NOT ($q.DBNAME LIKE 'DSN%') -- IBM DATENBANKEN
$! else $@=¢
AND NOT ($q.DBNAME = 'DSNDB06') -- DB2 CATALOG
AND NOT ($q.DBNAME = 'DSNDB01') -- DB2 DIRECTORY
AND NOT ($q.DBNAME = 'DSNDB04') -- DB2 SAMPLE DB
AND NOT ($q.DBNAME = 'DSNTESQ') -- DB2 CATALOG CLONE
AND NOT ($q.DBNAME LIKE 'WKDBD%') -- DB2 WORK DATABASE
AND NOT ($q.DBNAME LIKE 'DSN8%') -- IBM TEST DB
$!
if wordPos($subsys, 'DBAF DBTF') > 0 then $@=¢
AND NOT ($q.DBNAME LIKE 'DGDB%') -- PROTOTYPEN
$!
$@=¢
AND NOT ($q.DBNAME LIKE 'DB2MAPP%') -- REORG MAPPING TABLES
AND NOT ($q.DBNAME LIKE 'DA0%')
AND NOT ($q.DBNAME LIKE 'DA1%')
AND NOT ($q.DBNAME LIKE 'DA2%')
AND NOT ($q.DBNAME LIKE 'DA3%')
AND NOT ($q.DBNAME LIKE 'DA4%')
AND NOT ($q.DBNAME LIKE 'DA5%')
AND NOT ($q.DBNAME LIKE 'DA6%')
AND NOT ($q.DBNAME LIKE 'DA7%')
AND NOT ($q.DBNAME LIKE 'DA8%')
AND NOT ($q.DBNAME LIKE 'DA9%')
AND NOT ($q.DBNAME LIKE 'DF0%')
AND NOT ($q.DBNAME LIKE 'DF1%')
AND NOT ($q.DBNAME LIKE 'DF2%')
AND NOT ($q.DBNAME LIKE 'DF3%')
AND NOT ($q.DBNAME LIKE 'DF4%')
AND NOT ($q.DBNAME LIKE 'DF5%')
AND NOT ($q.DBNAME LIKE 'DF6%')
AND NOT ($q.DBNAME LIKE 'DF7%')
AND NOT ($q.DBNAME LIKE 'DF8%')
AND NOT ($q.DBNAME LIKE 'DF9%')
$!
if wordPos($rz, 'RZ1 RZ4') > 0 & $var == 'F' then $@=¢
AND NOT ($q.DBNAME LIKE 'DS1%')
$!
if $subsys == 'DBAF' then $@=¢
AND NOT ($q.DBNAME LIKE 'DW0%')
AND NOT ($q.DBNAME LIKE 'DX0%')
AND NOT ($q.DBNAME LIKE 'DX1%')
AND NOT ($q.DBNAME LIKE 'DX2%')
AND NOT ($q.DBNAME LIKE 'DX3%')
AND NOT ($q.DBNAME LIKE 'DX4%')
AND NOT ($q.DBNAME LIKE 'DX5%')
AND NOT ($q.DBNAME LIKE 'DX6%')
AND NOT ($q.DBNAME LIKE 'DX7%')
AND NOT ($q.DBNAME LIKE 'DX8%')
AND NOT ($q.DBNAME LIKE 'DX9%')
AND NOT ($q.DBNAME LIKE 'DY0%')
AND NOT ($q.DBNAME LIKE 'DY1%')
AND NOT ($q.DBNAME LIKE 'DY2%')
AND NOT ($q.DBNAME LIKE 'DY3%')
AND NOT ($q.DBNAME LIKE 'DY4%')
AND NOT ($q.DBNAME LIKE 'DY5%')
AND NOT ($q.DBNAME LIKE 'DY6%')
AND NOT ($q.DBNAME LIKE 'DY7%')
AND NOT ($q.DBNAME LIKE 'DY8%')
AND NOT ($q.DBNAME LIKE 'DY9%')
AND NOT ($q.DBNAME LIKE 'DI017%')
$!
$@=¢
AND NOT ($q.DBNAME LIKE 'DB2ALA%') -- marec generated
AND NOT ($q.DBNAME LIKE $"'$MAREC%'") -- marec generated
-- END COMMON SECTION (START SUBSYSTEM SPECIFIC EXEPTIONS)
$!
if wordPos($subsys, 'DBOF') > 0 & $q <> 'IX' & $var == '' then $@=¢
AND NOT ($q.DBNAME = 'CSQDBOF' AND $q.TSNAME = 'TSBLOB1' ) -- G.KERN
AND NOT ($q.DBNAME = 'CSQDBOF' AND $q.TSNAME = 'TSBLOB2' ) -- G.KERN
AND NOT ($q.DBNAME = 'CSQDBOF' AND $q.TSNAME = 'TSBLOB3' ) -- G.KERN
AND NOT ($q.DBNAME = 'CSQDBOF' AND $q.TSNAME = 'TSBLOB4' ) -- G.KERN
AND NOT ($q.DBNAME = 'XC01A1P' AND $q.TSNAME LIKE 'A2%' )
-- EOS: Armin Breyer
AND NOT ($q.DBNAME = 'XR01A1P' AND $q.TSNAME LIKE 'A2%' )
-- ERET: Armin Breyer
$!
else if wordPos($subsys, 'DP2G') > 0 & $var == '' then $@=¢
AND NOT ($q.DBNAME LIKE 'OS80%') -- HAT EIGENE IMAGECOPY
$!
else if wordPos($rz, 'RZ4 RZ8') > 0 & $var == 'F' then $@¢
if $q == IX then $@=¢
AND NOT $q.DBNAME = 'DB2PMPDB' --PMON KITD2
$! else $@=¢
AND NOT ($q.DBNAME = 'DB2PMPDB' AND $q.TSNAME = 'ACCS1') --PMON KITD2
AND NOT ($q.DBNAME = 'DB2PMPDB' AND $q.TSNAME = 'ACCS2') --PMON KITD2
AND NOT ($q.DBNAME = 'DB2PMPDB' AND $q.TSNAME = 'ACCS3') --PMON KITD2
AND NOT ($q.DBNAME = 'DB2PMPDB' AND $q.TSNAME = 'ACCS4') --PMON KITD2
$!
$!
$@¢if $isElar then $@=¢
AND NOT ($q.DBNAME LIKE 'XB%') -- ELAR Dokumente
$! $!
if pos($var, ' F') > 1 then $@=¢
$@¢ if $subsys == 'DBOF' then $@=¢
AND NOT ($q.DBNAME LIKE 'DACME%') -- Mail Heinz Bühler
$! $!
AND NOT ($q.DBNAME LIKE 'DSQ%') -- QMF DATENBANK
AND NOT ($q.DBNAME LIKE 'SYSIBMTS%') -- KIDI61
AND NOT ($q.DBNAME LIKE 'SYSIBMTA%') -- KIDI61
$!
if $subsys == 'DBOL' & $var == '' then $@=¢
AND NOT ($q.DBNAME = 'CM01A1P') -- MAIL VON WALTER GOETZ
$!
if wordPos($subsys, 'DBAF DBBA') > 0 then $@=¢
AND NOT ($q.DBNAME LIKE 'DGO%') -- PROTOTYPEN
AND NOT ($q.DBNAME LIKE 'OE02%') -- Mail Ivo Eichmann
AND NOT ($q.DBNAME LIKE 'DACME%') -- Mail Heinz Bühler
AND NOT ($q.DBNAME LIKE 'CSQ%') -- M-QUEUE DATENBANK
AND NOT ($q.DBNAME LIKE 'DAU%') -- Schulung Gerrit
AND NOT ($q.DBNAME LIKE '%A1X%') -- Neue Prototypen
AND NOT ($q.DBNAME LIKE 'DSN%') -- db2
AND NOT ($q.DBNAME LIKE 'IDT%') -- ibm tools
$!
if wordPos($rz, 'RZ8') > 0 then $@=¢
AND NOT ($q.DBNAME LIKE 'DS1%')
$!
if wordPos($subsys, 'DC0G DD0G DP8G DX0G') > 0 then $@=¢
AND NOT ($q.DBNAME LIKE 'DW0%')
AND NOT ($q.DBNAME LIKE 'DY0%')
AND NOT ($q.DBNAME LIKE 'DY1%')
AND NOT ($q.DBNAME LIKE 'DX0%') -- Schulungs DB's
AND NOT ($q.DBNAME LIKE 'DX1%') -- Unilog Integrata
AND NOT ($q.DBNAME LIKE 'DX2%')
AND NOT ($q.DBNAME LIKE 'DX9%')
$!
if wordPos($rz, 'RZ8') > 0 & $q \== IX & $var == '' $*+
& \ $isElar then $@=¢
AND NOT ($q.DBNAME LIKE 'OE02%') -- Mail Ivo Eichmann
AND NOT ($q.DBNAME LIKE 'DACME%') -- Mail Heinz Bühler
AND NOT ($q.DBNAME LIKE 'DDASE%') -- MAIL WERNER KURZ (TÄGL. CREATE)
AND NOT ($q.DBNAME LIKE 'VV11%') -- MAIL JÜRG GUBLER
AND NOT ($q.DBNAME LIKE 'VV12%') -- MAIL JÜRG GUBLER
AND NOT ($q.DBNAME LIKE 'VV13%') -- MAIL JÜRG GUBLER
AND NOT ($q.DBNAME LIKE 'VV14%') -- MAIL JÜRG GUBLER
AND NOT ($q.DBNAME LIKE 'VV15%') -- MAIL JÜRG GUBLER
AND NOT ($q.DBNAME LIKE 'VV16%') -- MAIL JÜRG GUBLER
AND NOT ($q.DBNAME LIKE 'VV17%') -- MAIL JÜRG GUBLER
AND NOT ($q.DBNAME LIKE 'VV18%') -- MAIL JÜRG GUBLER
AND NOT ($q.DBNAME LIKE 'CSQ%') -- M-QUEUE DATENBANK
$!
$/exclOld/
$@=¢
--------- END EXCLUDE LIST -------------------------------
$!
$/exclude/
$@proc missFullcopies1 $@=/missFullCopies1/
SELECT SUBSTR(PT.DBNAME,1,8) AS DBNAME
,SUBSTR(PT.TSNAME,1,8) AS TSNAME
,PT.PARTITION
,DATE(TS.CREATEDTS) AS CREATEDATE
FROM SYSIBM.SYSDATABASE DB,
SYSIBM.SYSTABLESPACE TS,
SYSIBM.SYSTABLEPART PT
WHERE DB.NAME = PT.DBNAME
AND DB.NAME = TS.DBNAME
AND TS.NAME = PT.TSNAME
$/missFullCopies1/
$@proc missFullcopies2db $@=/missFullCopies2db/
AND DB.TYPE NOT IN ('T','W')
$@missFullcopies2-{arg(2)}
$/missFullCopies2db/
$@proc missFullcopies2 $@/missFullCopies2/
parse arg , days
$=days=-days
$@=¢
AND TS.NTABLES <> 0
AND PT.SPACE <> -1
AND DATE(TS.CREATEDTS) < CURRENT DATE
AND NOT EXISTS
(SELECT ' '
FROM SYSIBM.SYSCOPY CP
WHERE PT.DBNAME = CP.DBNAME
AND PT.TSNAME = CP.TSNAME
AND (PT.PARTITION = CP.DSNUM OR CP.DSNUM = 0)
AND CP.ICTYPE IN ('F','R','X')
AND CP.TIMESTAMP > CURRENT TIMESTAMP - $days DAYS
)
ORDER BY DBNAME, TSNAME, PT.PARTITION
WITH UR;
$!
$/missFullCopies2/
$#out 20120628 17:25:18
$#out 20120626 17:01:14
$#out 20120626 16:57:50
$#out 20120626 16:00:50
$#out 20120626 15:11:39
}¢--- A540769.WK.REXX.O13(CSI) cre=2009-09-03 mod=2013-09-23-12.19.50 A540769 ---
/* copy csi begin ***************************************************
csi interface: see dfs managing catalogs chapt. 11
returncode/reason see message IDC3009I
**********************************************************************/
/*--- specify dsn mask and fields to start a csi catalog search --------
arguments:
m objectPointer
dsnMask specifies the dsns with wildcards:
% 1 character
* 0 - n character in one level
** 0 - n levels
fields a (space separated) list of field names -------------*/
csiOpen: procedure expose m.
parse arg m, dsnMask, fields
m.m.fld.0 = words(fields)
ffix = d2c(m.m.fld.0, 2)
do x=1 to m.m.fld.0
m.m.fld.x = translate(word(fields, x))
ffix = ffix || left(m.m.fld.x, 8)
end
if dsnMask \== '' & pos('*', dsnMask) < 1 then
dsnMask = dsnMask'.**'
m.m.filt = left(dsnMask, 149) ,
|| left('Y', 3) , /* resume offset 149 */
|| ffix /* csiNumEn offset 152 */
WORKLEN = 1024 * 64
m.m.work = D2C(WORKLEN,4) || COPIES('00'X,WORKLEN-4)
m.m.pos = workLen + 1
return
endProcedure csiOpen
/*--- put the next dsn into m.o and m.o.* (for other fields)
return 1 if next dsn exists 0 otherwise ------------------------*/
csiNext: procedure expose m.
parse arg m, o
usedL = C2D(SUBSTR(m.m.work,9,4)) /* GET AMOUNT OF WORK AREA USED */
px = m.m.pos
do forever
if px > usedL then do
if substr(m.m.filt, 150, 1) \== 'Y' then do
m.m.pos = px
m.o = ''
return 0
end
reason = left('', 4)
ADDRESS LINKPGM 'IGGCSI00 reason m.'m'.filt m.'m'.work'
if rc == 0 & substr(reason, 3, 2) == '0000'x then
nop
else if rc == 4 & substr(reason, 3, 2) == '0464'x then
say 'data set entry with error'
else
call err 'call csi returns' rc,
'rc' c2d(substr(reason, 4,1)),
'reason' c2d(substr(reason, 3,1)),
'module' substr(reason, 1,2)
usedL = C2D(SUBSTR(m.m.work,9,4)) /* GET WORK AREA USED */
numFD = C2D(SUBSTR(m.m.work,13,2)) /* no flds + 1 */
if numFd <> m.m.fld.0 + 1 then
call err 'csiNumFd' numFd 'not' m.m.fld.0 '+' 1
px = 15
iterate
end
eType = substr(m.m.work, px+1, 1)
m.o = strip(substr(m.m.work, px+2, 44), 't')
flag = substr(m.m.work, px, 1)
/* say 'eType' eType m.o 'flag' c2x(flag) */
if eType == '0' then do
if flag \== '00'x & flag \== '40'x then
call err 'flag' c2x(flag) 'for catalog' m.o
px = px + 50 /* length of catalog entry */
iterate
end
else do
if \ abbrev(x2b(c2x(flag)), '101') then
call err 'call csi entry flag' x2b(c2x(flag)),
'rc' c2d(substr(m.m.work, px+49,1)),
'reason' c2d(substr(m.m.work, px+48,1)),
'module' substr(m.m.work, px+46, 2),
'for entry' m.o,
'see qw IDC3009I'
py = px + 46
tl = c2d(substr(m.m.work, py, 2))
pl = py + 4
pf = py + m.m.fld.0 * 2 + 4
do fx = 1 to m.m.fld.0
fi = m.m.fld.fx
fl = c2d(substr(m.m.work, pl, 2))
m.o.fi = substr(m.m.work, pf, fl)
if fi = 'MGMTCLAS' then
m.o.fi = substr(m.o.fi, 3, c2d(left(m.o.fi ,2)))
else if wordPos(fi, 'COMUDSIZ NOBYTTRK') > 0 then
m.o.fi = utc2d(m.o.fi)
/* say fi '=??? <'m.o.fi'>' c2x(m.o.fi) */
pf = pf + fl
pl = pl + 2
end
if py + tl <> pf then
call err 'length mismatch for entry' m.o
m.m.pos = pf
return 1
end
end
endProcedure csiNext
/*--- if dsn is arcived return 'arcive'
if dsn is tape return 'tape'
otherwise return managment class ------------------------------*/
csiArcTape: procedure expose m.
parse arg vo, cl, dt, dsn
if vo = '' then
say err '||| no volume for dsn' dsn
else if vo = 'ARCIVE' then
res = 'arcive'
else if cl <> '' then
res = cl
else if abbrev(vo, 'SHR') then
res = 'SHR'
else
res = 'tape'
if res = 'arcive' then
return res
/*if abbrev(res, 'ar') \= abbrev(dt, '00'x) , */
if abbrev(res, 'ta') \= abbrev(c2x(left(dt, 1)), '7') ,
| (left(res, 1) >= 'A') \= abbrev(dt, '30'x) then
say '||| mismatch cl' cl 'vo' vo 'dt' c2x(dt) 'dsn' dsn
return res
endProcedure csiArcTape
/* copy csi end ******************************************************/
}¢--- A540769.WK.REXX.O13(CSM) cre=2013-09-27 mod=2013-09-27-11.36.33 A540769 ---
/* copy csm begin ******************************************************
interface to csm,
it is integrate with adrTso, eg. dsnAlloc , 'RZ3/..' uses csm
***********************************************************************/
adrCsm:
return adrTso('csmExec' arg(1), arg(2))
endProcedure adrCsm
csmCopy: procedure expose m.
parse arg csnFr, csnTo, retOk
if dsnGetMbr(csnTo) \= '' & dsnGetMbr(csnTo) \= '' then do
if dsnGetMbr(csnFr) <> dsnGetMbr(csnTo) then
call err 'member rename' csnFr 'to' csnTo
csnTo = dsnSetMbr(csnTo)
end
parse value csmSysDsn(csnFr) with sysFr '/' dsnFr
parse value csmSysDsn(csnTo) with sysTo '/' dsnTo
if sysTo = '*' then do
old = sysDsn("'"dsnTo"'")
end
else if sysFr = '*' then do
pdsTo = dsnSetMbr(dsnTo)
al = "SYSTEM("sysTo") DDNAME(COPYTo)",
"DATASET('"pdsTo"') DISP(SHR)"
alRes = dsnAlloc(systo'/'pdsTo, ,'COPYTO', '*')
if datatype(alRes, 'n') then do
/* wir müssen es selbst allozieren csmxUtil
vergisst management class ||||| */
say 'could not allocate' al
say 'trying to create'
rc = listDsi("'"dsnSetMbr(dsnFr)"' SMSINFO")
if rc = 0 then
mv = ''
else if rc = 4 & sysReason = 19 then do
mv = 'UCOUNT(30)' /* 7.8.13 corrected attribute */
say 'creating' dsn 'with multi volume' mv
end
else if rc \= 0 then
call err 'listDsi rc' rc 'reason' sysReason,
sysMsgLvl1 sysMsgLvl2
al = left(al, length(al)-4)'CAT)'
if right(sysDsSms, 7) == 'LIBRARY' ,
| abbrev(sysDsSms, 'PDS') then
al = al 'DSNTYPE(LIBRARY)'
if sysUnits = 'TRACK' then
sysUnits = 'TRACKS'
al = al "DSORG("sysDSorg") MGMTCLAS("sysMgmtClass")",
"RECFM("sysREcFM") LRECL("SYSLRECL")",
"blksize("sysBLkSIZE")",
"SPACE("sysPrimary"," sysSeconds")" sysUnits mv
call adrCsm "allocate" al
end
call tsoFree word(alRes, 2)
end
c = "'COPY" sysFr"/''"dsnFr"'' TO" ,
sysTo"/''"dsnSetMbr(dsnTo)"'' REPLACE'"
csmRc = adrTso("exec 'CSM."sysvar("sysnode")".P0.EXEC(CSRXUTIL)'",
c , retOk)
if sysTo = '*' & old <> 'OK' then do
/* csm normally does not set mgmtclass - avoid delete | */
call adrTso "ALTER '"dsnTo"' mgmtclas(COM#A091)"
end
return csmRc
endProcedure csmCopy
csmAlloc: procedure expose m.
parse arg dsn dd disp rest ':' nn, retRc
sys = ''
a2 = ''
parse value csmSysDsn(dsn) with sys '/' dsn
if disp = '' then
disp = 'shr'
al = "SYSTEM("sys") DDNAME("dd")"
if dsn <> '' then do
a2 = "DATASET('"dsnSetMbr(dsn)"')"
mbr = dsnGetMbr(dsn)
if mbr <> '' then
a2 = a2 'MEMBER('mbr')'
end
if abbrev(disp, 'SYSOUT(') then
a2 = a2 disp
else
a2 = a2 "DISP("disp")"
if disp = 'NEW' & nn \== '' then
a2 = a2 dsnCreateAtts( , nn, 1)
if retRc <> '' | nn = '' then
return adrCsm('allocate' al a2 rest, retRc)
do retry=0 by 1
alRc = adrCsm('allocate' al a2 rest, '*')
if alRc = 0 then
return 0
if retry > 0 | nn = '' | wordPos(disp, 'OLD SHR') < 1 then
return err('cmsAlloc rc' alRc 'for' al rest)
say 'csmAlloc rc' alRc 'for' al a2 rest '...trying to create'
nn = al 'disp(cat)' dsnCreateAtts(dsn, nn, 1)
call adrCsm 'allocate' nn
call adrTso 'free dd('dd')'
end
endProcedure csmAlloc
csmSysDsn: procedure expose m.
parse upper arg dsn, withStar
if pos('/', dsn) < 1 then
sys = '*'
else
parse var dsn sys '/' dsn
if sys <> '' & sys <> '*' & sys <> sysvar(sysnode) then
return sys'/'dsn
else if withStar == 0 then
return dsn
else
return '*/'dsn
endProcedure csmSysDsn
/*--- execute a rexx (under tso) in another rz
here we use rexx TPSYSIKJ which was written for
jcl procedure RM@IKJ01
arguments
rz which rz to run rexx
proc the (remote) procedure library to use
opt options
cmd the tso command to execute
----------------------------------------------------------------------*/
/*--- execute a rexx (under tso) in another rz
directly (without TPSYSIKJ) --------------------------------*/
csmExRx: procedure expose m.
parse arg rz, proc, opt, cmd
do cx=1 to (length(cmd)-1) % 68
cmd.cx = substr(cmd, 68*cx-67,68)'-'
end
cmd.cx = substr(cmd, 68*cx-67)
cmd.0 = cx
timeout = 11
if 0 then do
call adrTso 'free ed(rmtSys)' ,'*'
call tsoFree tsoDD(rmtsPrt, 'a')
call adrTso 'free dd(rmtsIn)','*'
call adrTso 'free dd(sysproc)' ,'*'
end
call dsnAlloc rz"/"proc "dd(rmSyPro) rmtDDn(sysProc)"
call dsnAlloc rz"/tmp.tsin new dd(rmTsIn) rmtDdn(sysTsIn) ::f "
call tsoOpen rmTsIn, 'w'
call writeDD rmTsIn, cmd.
call tsoClose rmtsin
call dsnAlloc rz"/tmp.prt new dd(rmtsprt) rmtDdn(sysTsPrt)",
"::f133"
call dsnAlloc rz"/tmp.rmt new dd(rmtSys) timeout("timeout")"
call adrtso "csmappc start pgm(csmexec)" ,
"parm('select tsocmd(''csmappc allocate plu(*.rmtSys)" ,
"tpname(sysikj) dealloc '')')",
"timeout("timeOut")", '*'
if rc <> 0 | appc_rc <> 0 then do
ee = 'csm tso exec rc='rc 'appc_rc='appc_rc
say ee
say ' rexx rz='rz 'proc='proc 'opt=opt'
say ' cmd='cmd
call csmappcRcSay ggTsoCmd
call readDD 'rmTsPrt', p.
call tsoClose rmtsPrt
say p.0 'tso output lines'
do px=1 to p.0
say ' ' strip(p.px, 't')
end
call err ee
end
call tsoFree rmSyPro rmtsPrt rmtSys rmtsIn
return
/*--- sys the re and result variables from csmAppcRc -----------------*/
csmappcRcSay: procedure expose appc_rc appc_reason appc_msg. ,
appc_state_c appc_state_f
parse arg cmd
say 'rc='appc_rc 'reason='appc_reason ,
'state_c='appc_state_c appc_state_f
say ' for' cmd
do ix=1 to appc_msg.0
say ' ' appc_msg.ix
end
return appc_rc
endProcedure csmappcRcSay
/* copy csm end *******************************************************/
}¢--- A540769.WK.REXX.O13(CSMCOPY) cre=2012-01-20 mod=2012-01-20-17.12.43 A540769 ---
$#@
$<#/dsn/
A540769.TMPUL.SV03A1P.A033A.PUN
A540769.TMPUL.SV03A1P.A033A.UNL
$/dsn/ $@for v $@¢
call csmCopy 'RZ2/'strip($v), 'RR2/'strip($v)
$!
$#out 20120120 16:59:40
$#out 20120117 16:06:03
}¢--- A540769.WK.REXX.O13(CSMSQL) cre=2012-03-21 mod=2012-03-21-16.30.05 A540769 ---
call sqlIni
call sqldisConnect 'DBAF'
say 'start cmsSql'
sql_HOST = rz8
sql_query = 'select current server cs, current timestamp ts' ,
'from sysibm.sysdummy1'
sql_query = 'select creator, name, createdTs ,current server',
', case when mod(row_number() over(), 2) = 0 then 1 else null end',
'from sysibm.sysTables fetch first 7 rows only'
SQL_DB2SSID = 'DD0G'
sql_PLAN = 'DB2TS'
address tso "CSMAPPC START PGM(CSMASQL)"
say 'csmappc' rc 'sqlCode' sqlCode', sqlD' sqlD', sqlRow#' sqlRow#
call outNl sqlDsnTiarCall(sqlCa)
Do I = 1 To SQL_Message.0
Say SQL_Message.I
End
say _name SQLDA_NAME.0 SQLDA_NAME.1 SQLDA_NAME.2
say rexxName SQLDA_REXXNAME.0 SQLDA_REXXNAME.1 SQLDA_REXXNAME.2
do rx=1 to sqlRow#
t = 'row' rx
say c2x(sqlIndicator.rx)
do cx=1 to sqlD
t = t', da='SQLDA_NAME.1 'rx='SQLDA_REXXNAME.cx
rr = SQLDA_REXXNAME.cx
if substr(sqlIndicator.rx, cx ,1) == 'ff'x then
t = t m.sqlNull
else
t = t value(SQLDA_REXXNAME.cx'.'rx)
end
say t
end
exit
/* copy sql begin ***************************************************
sql interface
***********************************************************************/
sqlIni: procedure expose m.
parse arg opt
if m.sql.ini == 1 & opt \== 1 then
return
m.sqlNull = '---'
m.sqlInd = 'sqlInd'
m.sqlRetOK.0 = 0
m.sqlMsgCa = 0
m.sqlMsgDsntiar = 1
m.sqlMsgCodeT = 0
call sqlPushRetOk
m.sql.ini = 1
m.sql.connected = ''
return
endProcedure sqlIni
/*--- prepare statement 's'cx from sql src into descriptor desc ------*/
sqlPrepare: procedure expose m.
parse arg cx, src, descOut, descInp
s = ''
if descOut == 1 then
s = 'into :M.SQL.'cx'.D'
res = sqlExec('prepare s'cx s 'from :src')
if res < 0 then
return res
if descInp == 1 | (descInp == '' & pos('?', src) > 0) then
res = sqlExec('describe input s'cx 'into :M.SQL.'cx'.I')
else
m.sql.cx.i.sqlD = 0
return res
endProcedure
/*--- prepare and declare 'c'cx from sql src -------------------------*/
sqlPreDeclare: procedure expose m.
parse arg cx, src, descOut, descInp
res = sqlPrepare(cx, src, descOut, descInp)
if res >= 0 then
return sqlExec('declare c'cx 'cursor for s'cx)
return res
endProcedure sqlPreDeclare
/*--- prepare, declare and open 'c'cx from sql src -------------------*/
sqlPreOpen: procedure expose m.
parse arg cx, src, descOut, descInp
res = sqlPreDeclare(cx, src, descOut, descInp)
if res >= 0 then
return sqlOpen(cx)
return res
endProcedure sqlPreOpen
/*--- open cursor 'c'cx using arguments arg(2), arg(3)... ------------*/
sqlOpen: procedure expose m.
parse arg cx
do ix=1 to arg()-1
call sqlDataSet 'SQL.'cx'.I', ix, arg(ix+1)
end
return sqlExec('open c'cx 'using descriptor :M.SQL.'cx'.I')
endProcedure sqlOpen
/*--- close cursor 'c'cx ---------------------------------------------*/
sqlClose: procedure expose m.
parse arg cx, src
return sqlExec('close c'cx)
endProcedure sqlClose
/*--- fetch cursor 'c'cx into variables ggVars -----------------------*/
sqlFetchInto:
parse arg ggCx, ggVars
if ggVars == '' then
ggVars = 'descriptor :M.SQL.'ggCX'.D'
/* accept sqlCodes > 0 except 100 */
ggRes = sqlExec('fetch c'ggCx 'into' ggVars, 100 m.sqlRetOk)
if ggRes == 0 then
return 1
if ggRes == 100 then
return 0
return ggRes
endProcedure sqlFetchInto
/*--- return sql variable list for stem st and fields the word in vars
if withInd == 1 then with sqlIndicator variables
sqlVars('S', 'A B') --> ':S.A, :S.B'
sqlVars('S', 'A B', 1) --> ':S.A :S.A.SQLIND, :S.B :S.B.SQLIND'
----------------------------------------------------------------------*/
sqlVars: procedure expose m.
parse arg st, vars, withInd
res = ''
if st ^== '' then
st = st'.'
do ix=1 to words(vars)
res = res', :'st || word(vars, ix)
if withInd == 1 then
res = res ':'st || word(vars, ix)'.sqlInd'
end
return substr(res, 3)
endProcedure sqlVars
sqlVarsNull: procedure expose m.
parse arg st, vars
hasNulls = 0
do ix = 1 to words(vars)
fld = word(vars, ix)
if m.st.fld.sqlInd < 0 then do
m.st.fld = m.sqlNull
hasNulls = 1
end
end
return hasNulls
endProcedure sqlVarsNull
/*--- open cursor 'c'cx fetch all into variables vars and close
st = passed stem, sx = row number
return number of rows fetched ----------------------------------*/
sqlOpAllCl:
parse arg ggCx, st, ggVars
do ggAx=4 to arg()
call sqlDataSet 'SQL.'ggCx'.I', ggAx-3, arg(ggAx)
end
ggRes = sqlOpen(ggCx)
if ggRes < 0 then
return ggRes
do sx = 1 until ggRes \== 1
ggRes = sqlFetchInto(ggCx, ggVars)
end
m.st.0 = sx - 1
call sqlClose ggCx
if ggRes == 0 then
return m.st.0
return ggRes
endProcedure sqlOpAllCl
sqlDataSet: procedure expose m.
parse arg da, ix, val
m.da.ix.sqlData = val
m.da.ix.sqlInd = - (arg(ix+2) == m.sqlNull)
/* data types schienen einmal nicht zu funktionieren .......
if wordPos(m.da.ix.sqlType, '384 385 388 389 392 393') > 0 then
m.da.ix.sqlType = 448 + (m.da.ix.sqlType // 2) */
return
endProcedure sqlDataSet
/*--- prepare, declare open cursor 'c'cx, fetch all and close
return number of rows fetched ----------------------------------*/
sqlPreAllCl:
parse arg ggCx, ggSrc, st, ggVars
ggRes = sqlPreDeclare(ggCx, ggSrc)
if ggRes >= 0 then
return sqlOpAllCl(ggCx, st, ggVars)
return ggRes
endProcedure sqlPreAllCl
/*--- execute statement 's'cx using arguments arg(2), arg(3)... ------*/
sqlExecute:
parse arg ggCx ggRetOk /* no , for ggRetOk, arg(2) is used already| */
do ggAx=2 to arg()
call sqlDataSet 'SQL.'ggCx'.I', ggAx-1, arg(ggAx)
end
return sqlExec('execute s'ggCx 'using descriptor :M.SQL.'ggCx'.I',
, ggRetOk)
endProcedure
/*--- execute immediate the sql src ----------------------------------*/
sqlExImm:
parse arg ggSrc, ggRetOk
return sqlExec('execute immediate :ggSrc', ggRetOk)
endProcedure sqlExImm
sqlCommit: procedure expose m.
parse arg src
return sqlExec('commit')
endProcedure sqlCommit
/*--- execute sql thru the dsnRexx interface -------------------------*/
sqlExec: /* no procedure, to keep variables sql... */
parse arg ggSqlStmt, ggRetOk, ggNo
if ggNo <> '1' then
ggSqlStmt = 'execSql' ggSqlStmt
address dsnRexx ggSqlStmt
/* say 'sqlCode' sqlCode 'rc' rc 'for' ggSqlStmt ggNo */
if rc = 0 then
return 0
if ggRetOk = '' then
ggRetOk = m.sqlRetOk
if wordPos(rc, '1 -1') < 0 then
call err 'dsnRexx rc' rc sqlmsg()
else if pos('*', ggRetOk) > 0 | wordPos(sqlCode, ggRetOk) > 0 ,
then do
if sqlCode < 0 & pos('say', ggRetOk) > 0 then
say 'sqlError' sqlmsg()
return sqlCode
end
else if rc < 0 then
call err sqlmsg()
else if sqlCode <> 0 | (pos('w',ggRetOk)<1 & sqlWarn.0^==' ') then
call errSay sqlMsg(), ,'w'
return sqlCode
endSubroutine sqlExec
/*--- connect to the db2 subsystem sys -----------------------------*/
sqlConnect: procedure expose m.
parse upper arg sys, retOk
call sqlIni
address tso "SUBCOM DSNREXX"
if rc <> 0 then do
sRc = RXSUBCOM('ADD','DSNREXX','DSNREXX') /* ADD HOST CMD ENV */
if sRc <> 0 then
call err 'rc' sRc 'from RXSUBCOM(ADD, DSNREXX, DSNREXX)'
end
if sys = '-' then
return 0
res = sqlExec("connect" sys, retOk ,1)
if res >= 0 then
m.sql.connected = sys
return res
endProcedure sqlConnect
/*--- diconnect from db2 ---------------------------------------------*/
sqlDisconnect: procedure expose m.
parse arg retOk
m.sql.connected = ''
return sqlExec("disconnect ", retOk, 1)
endProcedure sqlDisconnect
/*--- connect and/or disconnect to DB2 -------------------------------*/
sqlConDis: procedure expose m.
parse upper arg sys, retOk
if sys \== '' then
nop
else if sysvar(sysnode) == 'RZ1' then
sys = 'DBAF'
else
call err 'no default subsys for' sysvar(sysnode)
call sqlIni
if sys == m.sql.connected then
return 0
if m.sql.connected \== '' then
call sqlDisconnect
if sys = '-' then
return 0
return sqlConnect(sys, retOk)
endProcedure sqlConDis
/*--- push and pop currently accepted sqlCodes -----------------------*/
sqlPushRetOk: procedure expose m.
parse arg rr
nx = m.sqlRetOk.0 + 1
m.sqlRetOk.0 = nx
m.sqlRetOk.nx = rr
m.sqlRetOk = rr
return
endProcedure sqlPushRetOk
sqlPopRetOk: procedure expose m.
nx = m.sqlRetOk.0 - 1
if nx < 1 then
call err 'sqlPopRetOk with .0' m.sqlRetOk.0
m.sqlRetOk = m.sqlRetOk.nx
m.sqlRetOk.0 = nx
return
endProcedure sqlPopRetOk
/*--- issue an sql error message -------------------------------------*/
sqlMsg: /* no procedure, to keep variables sql... */
ggRes = ''
if \ dataType(sqlCode, 'n') then do
ggRes = 'sqlCode' sqlCode 'not numeric\n'sqlMsgCa()
end
else do
signal on syntax name sqlMsgOnSyntax
if m.sqlMsgCodeT == 1 then
ggRes = 'sqlCode' sqlCodeT(sqlCode, sqlErrMc, sqlwarn.0':' ,
|| sqlwarn.1||sqlwarn.2||sqlwarn.3||sqlwarn.4||sqlwarn.5',',
|| sqlwarn.6||sqlwarn.7||sqlwarn.8||sqlwarn.9||sqlwarn.10)
if 0 then
sqlMsgOnSyntax: do
ggRes = sqlMsgCa(),
'\n<<rexx sqlCodeT not found or syntax>>'
end
signal off syntax
if m.sqlMsgDsnTiar == 1 then do
ggRes = ggRes || sqlDsntiar()
ggWa = sqlMsgWarn(sqlWarn)
if ggWa \= '' then
ggRes = ggRes'\nwarnings' ggWa
end
if m.sqlMsgCa == 1 then
ggRes = ggRes'\n'sqlMsgCa()
end
ggSqlSp = ' ,:+-*/&%?|()¢!'
ggXX = pos(':', ggSqlStmt)+1
do ggSqlVx=1 to 12 while ggXX > 1
ggYY = verify(ggSqlStmt, ggSqlSp, 'm', ggXX)
if ggYY < 1 then
ggYY = length(ggSqlStmt) + 1
ggSqlVa.ggSqlVx = substr(ggSqlStmt, ggXX, ggYY - ggXX)
do ggQQ = ggXX-2 by -1 to 1 ,
while substr(ggSqlStmt, ggQQ, 1) == ' '
end
do ggRR = ggQQ by -1 to 1 ,
while pos(substr(ggSqlStmt, ggRR, 1), ggSqlSp) < 1
end
if ggRR < ggQQ & ggRR > 0 then
ggSqlVb.ggSqlVx = substr(ggSqlStmt, ggRR+1, ggQQ-ggRR)
else
ggSqlVb.ggSqlVx = ''
ggXX = pos(':', ggSqlStmt, ggYY+1) + 1
end
ggSqlVa.0 = ggSqlVx-1
if datatype(sqlErrd.5, 'n') & sqlErrd.5 > 0 then do
ggW2 = translate(word(ggSqlStmt, 2))
ggW3 = translate(word(ggSqlStmt, 3))
if ggW2 == 'PREPARE' then
ggRes = ggRes || sqlMsgSrF('FROM')
else if ggW2 ggW3 == 'EXECUTE IMMEDIATE' then
ggRes = ggRes || sqlMsgSrF(1)
else
ggRes = ggRes || sqlMsgSrF()
end
ggRes = ggRes'\nstmt = ' ggSqlStmt
ggPref = '\nwith'
do ggXX=1 to ggSqlVa.0
ggRes = ggRes || ggPref ggSqlVb.ggXX ':'ggSqlVa.ggXX ,
'=' value(ggSqlVa.ggXX)
ggPref = '\n '
end
if abbrev(ggRes, '\n') then
return substr(ggRes, 3)
return ggRes
endSubroutine sqlMsg
sqlMsgSrF:
parse arg ggF
if ggF \== '' & \ datatype(ggF, 'n') then do
do ggSqlVx=1 to ggSqlVa.0
if translate(ggSqlVb.ggSqlVx) = ggF then
return sqlMsgSrc(value(ggSqlVa.ggSqlVx), sqlErrd.5)
end
end
if datatype(ggF, 'n') & ggF <= ggSqlVa.0 then
return sqlMsgSrc(value(ggSqlVa.ggF), sqlErrd.5)
return sqlMsgSrc(ggSqlStmt , sqlErrd.5)
endSubroutine sqlMsgSrF
/*--- use dsnTiar to translate sql Info to error text ----------------*/
sqlDsnTiar:
sqlWarn = sqlWarn.0 || sqlWarn.1 || sqlWarn.2 || sqlWarn.3,
|| sqlWarn.4 || sqlWarn.5 || sqlWarn.6 || sqlWarn.7,
|| sqlWarn.8 || sqlWarn.9 || sqlWarn.10
if sqlCode = -438 then
return '\nSQLCODE = -438:',
'APPLICATION RAISED ERROR WITH sqlState' sqlState,
'and DIAGNOSTIC TEXT:' sqlErrMc
if digits() < 10 then
numeric digits 10
sqlCa = d2c(sqlCode, 4) ,
|| d2c(max(70, length(sqlErrMc)), 2)left(sqlErrMc, 70) ,
|| left(sqlErrP, 8) ,
|| d2c(sqlErrD.1, 4)d2c(sqlErrD.2, 4)d2c(sqlErrD.3, 4) ,
|| d2c(sqlErrD.4, 4)d2c(sqlErrD.5, 4)d2c(sqlErrD.6, 4) ,
|| sqlWarn || sqlState
if length(sqlCa) <> 124 then
call err 'sqlDa length' length(sqlCa) 'not 124' ,
'\nsqlCa=' sqlMsgCa()
return sqlDsnTiarCall(sqlCa)
/*--- call dsnTiar o translate sql Info to error text ----------------*/
sqlDsnTiarCall: procedure expose m.
parse arg ca
liLe = 78
msLe = liLe * 10
if length(ca) <> 124 then
/* call err 'sqlDa length' length(ca) 'not 124:' ca', hex='c2x(ca)
ca = 'SQLCA ' || d2c(136, 4) || ca
*/ msg = d2c(msLe,2) || left('', msLe)
len = d2c(liLe, 4)
ADDRESS LINKPGM "DSNTIAR ca msg LEN"
if rc <> 0 then
call err 'linkPgm dsnTiar rc' rc 'sqlCa' ca
res = ''
do c=3 by liLe to msLe
if c = 3 then do
l1 = strip(substr(msg, c+10, 68))
cx = pos(', ERROR: ', l1)
if cx > 0 then
l1 = left(l1, cx-1)':' strip(substr(l1, cx+9))
res = res'\n'l1
end
else if substr(msg, c, 10) = '' then
res = res'\n 'strip(substr(msg, c+10, 68))
else
leave
end
return res
endProcedure sqlDsnTiarCall
sqlMsgCa:
ggWarn = ''
do ggX=0 to 10
if sqlWarn.ggX \== ' ' then
ggWarn = ggWarn ggx'='sqlWarn.ggx
end
if ggWarn = '' then
ggWarn = 'none'
return 'sqlCode' sqlCode 'sqlState='sqlState,
'\n errMC='translate(sqlErrMc, ',', 'ff'x),
'\n warnings='ggWarn 'erP='sqlErrP,
'\n errD.1='sqlErrD.1 '2='sqlErrD.2 '3='sqlErrD.3,
'\n errD.4='sqlErrD.4 '5='sqlErrD.5 '6='sqlErrD.6
endProcedure sqlMsgCa
/*--- make the text for sqlWarnings
input warn.0..warn.10 as a 11 character string ------------*/
sqlMsgWarn: procedure expose m.
parse arg w0 2 wAll
if w0 = '' & wAll = '' then
return ''
if length(wAll) \= 10 | ((w0 = '') <> (wAll = '')) then
return 'bad warn' w0':'wAll
r = ''
text =' 1=W var truncated, 1=S scrollable, 1=N nonScrollable,' ,
'2=W nulls in aggregate,' ,
'3=W more cols than vars,' ,
'3=Z more result sets than locators,' ,
'4=W no where, 4=D sensitive dynamic, 4=I insensitive,' ,
'4=S sensitive static,' ,
'5=W not valid sql, 5=1 readOnly, 5=2 readDelete,' ,
'5=3 readDeleteUpdate,' ,
'6=W day changed to month range,' ,
'7=W dec digits truncated,' ,
'8=W char substituted,' ,
'9=W arith excep in count, 9=Z multipe result sets,' ,
'10=W char conversion err in ca,'
do wx = 1 to 10
w = substr(wAll, wx, 1)
if w = ' ' then
iterate
t = wx'='w
cx = pos(' 'wx'='w' ', text)
ex = pos(',' , text, cx + 1)
if cx < 1 then
r = r wx'='w '?,'
else
r = r substr(text, cx+1, ex-cx)
end
return strip(r, 't', ',')
endProcedure sqlMsgWarn
sqlMsgSrc: procedure expose m.
parse arg src, pos, opt
if 0 then do /* old version, before and after txt */
tLe = 150
t1 = space(left(src, pos), 1)
if length(t1) > tLe then
t1 = '...'right(t1, tLe-3)
t2 = space(substr(src, pos+1), 1)
if length(t2) > tLe then
t2 = left(t2, tLe-3)'...'
res = '\nsource' t1 '<<<error>>>' t2
end
liLe = 68
liCn = 3
afLe = 25
if translate(word(src, 1)) == 'EXECSQL' then
src = substr(src, wordIndex(src, 2))
t1 = space(left(src, pos), 1)
t2 = left(' ', substr(src, pos, 1) == ' ' ,
| substr(src, pos+1, 1) == ' ') ,
|| space(substr(src, pos+1), 1)
afLe = min(afLe, length(t2))
if length(t1) + afLe > liLe * liCn then
t1 = '...'right(t1, liLe * liCn - afLe -3)
else if length(t1)+length(t2) > liLe then
t1 = left(' ', (liCn * liLe - length(t1) -afLe) // liLe)||t1
pL = length(t1) // liLe
if length(t2) <= liLe-pL then
tx = t1 || t2
else
tx = t1 || left(t2, liLe-pL-3)'...'
res = '\nsrc' strip(substr(tx, 1, liLe), 't')
do cx=1+liLe by liLe to length(tx)
res = res || '\n +' strip(substr(tx, cx, liLe), 't')
end
loc = 'pos' pos 'of' length(src)
if length(loc)+6 < pL then
return res'\n >' right('>>>'loc'>>>', pL)
else
return res'\n >' left('', pL-1)'<<<'loc'<<<'
endProcdedur sqlMsgSrc
/*--- send a command to db2 through the TSO dsn processor ------------*/
sqlDsn: procedure expose m.
parse arg st, sys, cmd, rcOk
x = outtrap('M.'st'.')
push 'END'
push cmd
address tso 'DSN SYSTEM('sys')'
rr = rc
x = outtrap(off)
if rr = 0 | rcOk = '*' | wordPos(rr, rcOk) > 0 then
return rr
fl = max(1, m.st.0 - 10)
em = 'rc' rr 'for DSN SYSTEM('sys') cmd' cmd,
'\nOuputlines' fl '-' m.st.0':'
do lx=fl to m.st.0
em = em '\n' strip(m.st.lx, 't')
end
call err em
endProcedure sqlDsn
/* copy sql end **************************************************/
/* copy err begin ******************************************************
messages, errorhandling,help
***********************************************************************/
errIni: procedure expose m.
if m.err.ini == 1 then
return
call outIni
m.err.ini = 1
m.err.handler = ''
m.err.cleanup = ';'
m.err.opt = ''
return
endProcedure errIni
/* configure err -----------------------------------------------------*/
errReset: procedure expose m.
call errIni
parse arg m.err.opt, m.err.handler
if pos('I', translate(m.err.opt)) > 0 then
if errOS() \== 'LINUX' then
if sysVar('sysISPF') = 'ACTIVE' then
call adrIsp 'control errors return'
return
endSubroutine errReset
/*--- error routine: abend with message ------------------------------*/
err:
parse arg ggTxt, ggOpt
call errIni
drop err handler cleanup opt call return
if ggOpt == '' & m.err.handler \== '' then do
if 1 then do /* no detection of recursive err call loop
--> will anyway fail by stack overflow */
interpret m.err.handler
end
else do
/* avoid recursive err call loop */
drop call return
if symbol('m.err.call') \== 'VAR' then
m.err.call = 1
else
m.err.call = m.err.call + 1
if m.err.call > 10 then do
say 'errHandler loop:' m.err.handler
end
else do
m.err.return = 1
call errInterpret m.err.handler
m.err.call = m.err.call - 1
if m.err.return then
return result
end
end
end
call outDst
call errSay ggTxt, 'e'
call errCleanup
if ggOpt == '' then
ggOpt = m.err.opt
ggOpt = translate(ggOpt)
if pos('T', ggOpt) > 0 then do
trace ?r
say 'trace ?r in err'
end
if pos('H', ggOpt) > 0 then do
call errSay 'divide by zero to show stackHistory', 'e'
x = 1 / 0
end
call errSay 'exit(12)', 'e'
exit errSetRc(12)
endSubroutine err
/*--- error routine: user message cleanup exit -----------------------*/
errEx:
parse arg ggTxt
call errIni
call outDst
call errSay ggTxt
call errCleanup
exit 8
endProcedure errEx
errAddCleanup: procedure expose m.
parse arg code
if m.err.ini \== 1 then
call errIni
/* concatenate backwards, then it is executed also backwards */
m.err.cleanup = ';'code || m.err.cleanup
return
endProcedure errAddCleanup
errRmCleanup: procedure expose m.
parse arg code
if m.err.ini \== 1 then
call errIni
cx = pos(';'code';', m.err.cleanup)
if cx > 0 then
m.err.cleanup = left(m.err.cleanup, cx) ,
|| substr(m.err.cleanup, cx + length(code)+2)
return
endProcedure errRmCleanup
errCleanup: procedure expose m.
call errIni
cl = m.err.cleanup
if cl = ';' then
return
m.err.cleanup = ';'
say 'err cleanup begin' cl
call errInterpret cl
say 'err cleanup end' cl
return
endProcedure errCleanup
errInterpret: procedure expose m.
parse arg code
interpret code
m.err.return = 0
return
endProcedure errInterpret
/*--- assert that the passed rexx expression evaluates to true -------*/
assert:
interpret 'assertRes =' arg(1)
if \ assertRes then
call err 'assert failed' arg(1)':' arg(2)
return
endProcedure assert
/*--- output an errorMessage msg with pref pref
split message in lines at '/n' ---------------------------*/
errSay: procedure expose m.
parse arg msg, pref
parse source . . ggS3 . /* current rexx */
if pref == 'e' then
msg = 'fatal error in' ggS3':' msg
else if pref == 'w' then
msg = 'warning in' ggS3':' msg
else if pref \== '' then
msg = pref':' msg
return outNl(msg)
endProcedure errSay
/*--- abend with Message after displaying help -----------------------*/
errHelp: procedure expose m.
parse arg msg, op
call errSay msg, 'e'
call help
call err msg, op
endProcedure errHelp
/*--- return the Operating System we are running on: TSO or LINUX ---*/
errOS: procedure expose m.
parse source os .
return os
endProcedure errOS
/*--- set rc for ispf: -------------------------------------------------
if a cmd is run by ispStart, its RC is ignored,
but ISPF passes the value of the shared varible 3IspfRc
back as return code
----------------------------------------------------------------------*/
errSetRc: procedure expose m.
parse arg zIspfRc
if errOS() \== 'LINUX' then
if sysVar('sysISPF') = 'ACTIVE' then
address ispExec vput 'zIspfRc' shared
return zIspfRc
endProcedure errSetRc
/*--- output a trace message if m.tr is set -----------------------*/
trc: procedure expose m.
parse arg msg
if m.trace == 1 then
call out 'trc:' msg
return
endProcedure trc
debug: procedure expose m.
parse arg msg
if m.debug == 1 then
call out 'debug' msg
return
endProcedure debug
/*--- display the first comment block of the source as help ----------*/
help: procedure expose m.
parse source . . s3 .
call out right(' help for rexx' s3, 79, '*')
do ax=1 to arg()
say ' ' arg(ax)
end
do lx=1 by 1
if pos('/*', sourceLine(lx)) > 0 then
leave
else if lx > 10 then do
call out 'initial commentblock not found for help'
return
end
end
do lx=lx+1 by 1
li = strip(sourceLine(lx), 't', ' ')
if pos('*/', li) > 0 then
leave
call out li
end
call out right(' end help for rexx' s3, 79, '*')
return 4
endProcedure help
/*--- output all lines (separated by '\n') of all args --------------*/
outNl: procedure expose m.
do ax=1 to max(1, arg())
msg = arg(ax)
sx = 0
bx = -1
do lx=1 until bx >= length(msg)
ex = pos('\n', msg, bx+2)
if ex < 1 then
ex = length(msg)+1
call out substr(msg, bx+2, ex-bx-2)
bx = ex
end
end
return 0
endProcedure outNl
/* copy err end *****************************************************/
/* copy out begin ******************************************************
out interface simple with say only
***********************************************************************/
outIni: procedure expose m.
parse arg msg
return
endProcedure outIni
/*--- output a message to the current destination -------------------*/
out: procedure expose m.
parse arg msg
say msg
return 0
endProcedure out
/*--- set a new out destination and return old one ------------------*/
outDst: procedure expose m.
parse arg d
return ''
endProcedure outDst
/* return the contents of a string or std input */
inp2str: procedure expose m.
parse arg rdr, opt
return rdr
endProcedure inp2str
/* copy out end *****************************************************/
}¢--- A540769.WK.REXX.O13(CSV) cre=2013-09-23 mod=2013-09-23-10.04.43 A540769 ---
/* copy csv begin *****************************************************/
csvIni: procedure expose m.
if m.csv.ini == 1 then
return
m.csv.ini = 1
call jIni
call classNew "n CsvRdr u JRWO, f RDR r", "m",
, "jReset m.m.rdr = arg",
, "jOpen call csvRdrOpen m, opt",
, "jClose call jClose m.m.rdr; call oMutatName m, 'CsvRdr'"
call classNew "n CsvRdrR u CsvRdr", "m",
, "jReadO return csvRdrReadO(m)"
call classNew "n CsvWrt u JRW, f RDR r", "m",
, "jReset m.m.rdr = arg",
, "jOpen call csvWrtOpen m, opt",
, "jClose call jClose m.m.rdr; call oMutatName m, 'CsvWrt'"
call classNew "n CsvWrtR u CsvWrt", "m",
, "jRead return csvWrtRead(m, var)"
return
endProcedure csvIni
/*--- create a new csvRdr --------------------------------------------*/
csvRdr: procedure expose m.
parse arg rdr
return jReset(oNew('CsvRdr'), rdr)
endProcedure csvRdr
/*--- open csvRdr: read first line and create dataClass --------------*/
csvRdrOpen: procedure expose m.
parse arg m
call jOpen m.m.rdr, '<'
if jRead(m.m.rdr, m'.LINE') then do
ff = 'f' repAll(m.m.line, ',', ' v, f ') 'v'
m.m.class = classNew("n* CsvF u" ff)
end
call oMutatName m, 'CsvRdrR'
return
endProcedure csvRdrOpen
/*--- read next line and return derived object -----------------------*/
csvRdrReadO: procedure expose m.
parse arg m
do until m.m.line <> ''
if \ jRead(m.m.rdr, m'.LINE') then
return ''
end
var = oNew(m.m.class)
ff = oClaMet(m.m.class, 'oFlds')
s = m'.SCAN'
call scanSrc s, m.m.line
do fx=1
f1 = substr(m.ff.fx, 2)
if scanString(s, '"') then
m.var.f1 = m.s.val
else do
call scanUntil s, ','
m.var.f1 = m.s.tok
end
if scanEnd(s) then
leave
if \ scanLit(s, ',') then
call scanErr s, ',' expected
end
if fx <> m.ff.0 then
call scanerr s, 'csv cla' m.ff.0 'fields but' cx 'in line'
return var
endProcedure csvRdrReadO
/*--- create a new csvRdr --------------------------------------------*/
csvWrt: procedure expose m.
parse arg rdr
return jReset(oNew('CsvWrt'), rdr)
endProcedure csvWrt
/*--- open csvRdr: read first line and create dataClass --------------*/
csvWrtOpen: procedure expose m.
parse arg m
call jOpen m.m.rdr, '<'
m.m.class = ''
m.m.o1 = ''
call oMutatName m, 'CsvWrtR'
return
endProcedure csvWrtOpen
/*--- read next line and return derived object -----------------------*/
csvWrtRead: procedure expose m.
parse arg m, var
if m.m.o1 == '' then
i1 = jReadO(m.m.rdr)
else do
i1 = m.m.o1
m.m.o1 = ''
end
if i1 == '' then
return 0
if m.m.class == '' then do
m.m.class = objClass(i1)
m.m.o1 = i1
t = ''
ff = oFlds(i1)
do fx=1 to m.ff.0
t = t','substr(m.ff.fx, 2)
end
m.var = substr(t, 2)
return 1
end
else do
t = ''
ff = oFlds(i1)
do fx=1 to m.ff.0
f1 = i1 || m.ff.fx
val = m.f1
if pos(',', val) > 0 | pos('"', val) > 0 then
t = t','quote(val, '"')
else
t = t','val
end
m.var = substr(t, 2)
return 1
end
endProcedure csvWrtRead
/* copy csv end *****************************************************/
}¢--- A540769.WK.REXX.O13(DBACHECK) cre=2009-06-09 mod=2012-11-26-17.12.39 A540769 ---
/* rexx ****************************************************************
synopsis: DBACHECK v1.0
edit macro to enforce CS defaults for DB2:
createTablespace createIndex
stoGroup GSMS stoGroup GSMS
priQty -1 priQty -1
secQty -1 secQty -1
compress YES copy NO
segSize 64 falls |0 falls nicht part or LOB
dssize 16G falls partitioniert
large entfernen
lockmax SYSTEM falls 0 oder lockSize
************************************************************************
26.11.2011 w. keller fix add segsize 0 if not segmented (not 64|||)
end of help */ /*
27.08.2011 w. keller segSize 0 erlauben und nicht ändern
24.06.2011 w. keller lockmax abhängig von lockSize
22.06.2011 w. keller neue copies
1.09.2010 w. keller support index on auxilary table without columns
8.06.2010 w. keller dsSize 16GB
11.02.2010 w. keller EX0 für exit 0, damit's keinen macro fehler gibt
18.01.2010 w. keller tentative: allow $ in sql identifiers
08.09.2009 w. keller fix error that dbaMulti flag was ignored
25.08.2009 w. keller Frage für Universal TS, Fehler fuer rotate
12.08.2009 w. keller argument end macht save und end
13.11.2008 w. keller kein Absturz auf leerem input
25.09.2008 w. keller geht auch für CDL und PartitonenAttribute
26.06.2008 w. keller scanner geht über recordGrenzen
26.06.2008 w. keller create auf last Line und - 1 gehen jetzt
11.12.2007 w. keller dsSize 32G
26.11.2007 w. keller priqty/secQty immer auf -1
24.09.2007 w. keller priqty/secQty < 1 auf -1 übersetzen
13.07.2007 w. keller remove large option in create tablespace
09.02.2007 w. keller remove // dd * lines if first line is not jcl
07.02.2007 w. keller dssize
05.02.2007 w. keller neu erstellt
toDo & Ideas
load data auf resume no replace umstellen, wegen RTS?
bekommt edit error, wenn letztes Zeile mit ; --> testCase
***********************************************************************/
parse arg args
call errReset 'h'
call jIni
m.debug = 0 /* debug output */
if pos('?', args) > 0 then
exit help()
call adrIsp 'control errors return'
if args = '' then
if adrEdit('macro (args)', '*') <> 0 then
exit errHelp('please run as edit macro')
uArgs = translate(args)
changes = dbaCheck(args)
if wordPos('END', uArgs) > 0 then do
if changes > 0 then
call adrEdit 'save', 0 4
call adrEdit 'end'
end
if wordPos('EX0', uArgs) > 0 | wordPos('END', uArgs) > 0 then
exit 0
exit changes
dbaCheck: procedure expose m.
parse upper arg args
call adrEdit "(cn) = linenum .zl", 4
if cn < 1 then
exit 0
/* call adrEdit 'setUndo on' nützt nicht, initMacro kann
nicht undo't werden ... */
m.cdl = isCdl()
call mCut fatal, 0
call debug 'isCdl' m.cdl
call overrideTree mapReset(os, 'k')
if m.debug then
call overrideTreeShow os
call scanWinIni
call editReadIni
call jReset oMutate(er, 'EditRead'), 1
es = scanSql(er)
if m.cdl then
call scanWinOpts es, 5, 2, 9, 72
lx = 0
m.an.0 = 0
/* jedes create suchen und analysieren -> an */
do forever
lx = seekId(es, lx+1, 'CREATE')
if lx < 1 then
leave
call debug 'seek found CREATE at' lx scanPos(es)
call analyseCreate es, os, an
call jClose es
end
do forever
lx = seekId(es, lx+1, 'ROTATE')
if lx < 1 then
leave
say 'never do a rotate|'
call mAdd fatal, 'fehler: rotate'
call jClose es
end
if m.debug then
call anaShow an
m.wr.0 = 0
/* overrides und adds bestimmen -> wr */
call override an, wr
if m.debug then
do y=1 to m.wr.0
w = wr'.'y
say 'over' m.w.fPos '-' m.w.tPos '=' m.w
end
oCnt = m.wr.0
ddSt = findDDStar(0)
say oCnt 'overrides and' ddSt '//DD*'
if (oCnt + ddSt + m.fatal.0) <= 0 then
return 0
if args ^= 'DBAMULTI' then do
call applyOverrides wr /* apply to edited file */
if ddSt > 0 then
call findDDStar 1
return oCnt + ddSt
end
do forever /* Benutzer muss entscheiden */
say 'bitte wählen Sie'
say ' m = multiClone ohne overrides'
say ' o = override Werte, save und end'
say ' e = edit override Werte'
say ' f = edit ohne override'
parse upper pull w
w = left(strip(w), 1)
if w = 'M' then
exit 0
if w == 'O' | w == 'E' then do
call applyOverrides wr /* apply to edited file */
if ddSt > 0 then
call findDDStar 1
end
if w == 'O' then do
call adrEdit 'SAVE'
call adrEdit 'END'
end
if pos(w, 'OEF') > 0 then
exit 4
say 'ungültige Antwort' w
end
endProcedure dbaCheck
isCdl: procedure expose m.
parse arg lx
if lx = '' then do
if isCdl(1) then
return 1
if isCdl('CREATE') then
return 1
if isCdl('DROP') then
return 1
return 0
end
if ^ datatype(lx, 'n') then do
if adrEdit("seek" lx "word first", 4) = 4 then
return 0
call adrEdit "(lx) = cursor"
end
call adrEdit '(ll) = line' lx
if left(ll, 8) = 'SQLID' then
return subword(ll, 2, 2) = 'SET CURRENT'
if left(ll, 8) = 'CREATE' then
return wordPos(word(ll, 2), 'CREATE ALTER ADMIN --#SET') > 0
if left(ll, 8) = 'ALTER' then
return wordPos(word(ll, 2), 'CREATE ALTER ADMIN --#SET') > 0
if left(ll, 8) = 'DROP' then
return wordPos(word(ll, 2), 'DROP ADMIN --#SET') > 0
return 0
endProcedure isCdl
seekId: procedure expose m.
parse arg es, lx, id
if ^ m.cdl then
return scanSqlSeekId(es, lx, id)
do forever
lx = scanSqlSeekId(es, lx, id, 'WORD 9 80')
if lx < 1 then
return lx
call debug 'seek found CREATE at' lx scanPos(es)
call adrEdit '(ll) = line' lx
if word(left(ll, 8), 1) = 'CREATE' then
return lx
call jClose es
end
endProcedure seekId
/*--- we define the scan structure and overrides
in a tree ---------------------------------------------------*/
overrideTree: procedure expose m.
parse arg rt
ts = overrideTreeNd(rt, 'TABLESPACE', 'TS')
us = overrideTreeNd(ts, 'USING', 'US')
sg = overrideTreeNd(us, 'STOGROUP', 'SG', 'i GSMS')
c = overrideTreeNd(sg, 'PRIQTY', 'PQ', 'n -1')
c = overrideTreeNd(sg, 'SECQTY', 'SQ', 'n -1' , PQ)
c = overrideTreeNd(ts, 'SEGSIZE', 'SE', 'n 64', '|0')
c = overrideTreeNd(ts, 'DSSIZE', 'DS', 'G 16 G')
c = overrideTreeNd(ts, 'NUMPARTS', 'PA', 'n')
c = overrideTreeNd(ts, 'LOCKMAX', 'LM', 'ni SYSTEM')
c = overrideTreeNd(ts, 'LOCKSIZE', 'LS', 'i')
co = overrideTreeNd(ts, 'COMPRESS', 'CR', 'i YES')
br = overrideTreeNd(ts, '(', '(')
c = overrideTreeNd(br, 'PARTITION', 'PR?', 'n')
call mapAdd c, 'USING', us
call mapAdd c, 'COMPRESS', co
call mapAdd br, 'PART', c
ix = overrideTreeNd(rt, 'INDEX', 'IX')
call mapAdd ix, 'USING', us
c = overrideTreeNd(ix, 'COPY', 'CY', 'i NO')
br = overrideTreeNd(ix, '(', '(')
c = overrideTreeNd(br, 'PARTITION', 'PR?', 'n')
call mapAdd c, 'USING', us
call mapAdd br, 'PART', c
return
endProcedure overrideTree
/*--- create a node in the overrideTree with
pa=parent, scan=token, ident,
over=data type and override value, ty=id of type node ------*/
overrideTreeNd: procedure expose m.
parse arg pa, scan, ident, over, ty
ch = mapReset(pa'.'ident, 'k')
call mapAdd pa, scan, ch
m.ch.id = ident
m.ch.att = scan
m.ch.dataType = word(over, 1)
m.ch.overVal = subword(over, 2)
if ty ^== '' then
m.ch.overType = ty
else
m.ch.overType = ident
return ch
endProcedure overrideTreeNd
/*--- show the override tree -----------------------------------------*/
overrideTreeShow: procedure expose m.
parse arg pa, pr
ks = mapKeys(pa)
do kx = 1 to m.ks.0
ch = mapGet(pa, m.ks.kx)
say left(pr m.ks.kx, 20) right(ch, 2) ,
'over' m.ch.overVal 'type' m.ch.overType
call overrideTreeShow ch, pr' '
end
return
endProcedure overrideTreeShow
/*--- analyse a create statement -------------------------------------*/
analyseCreate: procedure expose m.
parse arg m, os, an
if m.m.val ^== 'CREATE' then
call scanErr m, 'analyseCreate but token' m.m.val 'not CREATE'
fp = scanPos(m)
if ^ scanSqlId(m) then
call scanErr m, 'no id'
subTyp = ''
do while wordPos(m.m.val, 'LARGE LOB UNIQUE WHERE') > 0
subTyp = strip(subTyp m.m.val)
if m.m.val = 'WHERE' then do
call checkIds m, 'NOT', 'NULL'
subTyp = subTyp 'NOT NULL'
end
if ^ scanSqlId(scanSkip(m)) then
call scanErr m, 'no id'
end
typ = m.m.val
if ^ mapHasKey(os, typ) then do
call scanSqlQuId scanSkip(m)
call debug 'analyseCreate skipping' subTyp typ 'name' m.m.val
return
end
nP = scanPos(m)
if ^ scanSqlQuId(scanSkip(m)) then
call scanErr m, 'name missing for create' subtyp typ
na = m.m.val
on = ''
if typ = 'TABLESPACE' then do
call checkIds m, 'IN'
if ^ scanSqlId(scanSkip(m)) then
call scanErr m 'dbName expected'
na = m.m.val'.'na
end
else if typ = 'INDEX' then do
/* wir muessen ueber die Column List scannen,
damit wir sie nicht mit der PartitionListe verwechseln*/
if ^ (scanSqlId(m) & m.m.val = 'ON') then
call scanErr m, 'ON expected after index' na
if ^ scanSqlQuId(scanSkip(m)) then
call scanErr m, 'table name expected'
on = 'on' m.m.val
/* aux tables haben keine column list ||| */
if (scanSqlClass(m) & m.m.sqlClass = '(') then
call scanSqlSkipBrackets m, 1
end
say left('analyse', 8) leftl(na, 17) strip(subtyp typ) on
a = mapReset(mAdd(an, mapGet(os, typ)), 'k')
m.a.name = na
m.a.subType = subTyp
m.a.fPos = fP
m.a.nPos = nP
call analyseNode m, a
call checkFatal a
tP = scanPos(m)
if m.m.sqlClass = ';' then
tP = word(tP, 1) word(tP, 2) - 1
m.a.tPos = tP
return
endProcedure analyseCreate
/*--- analyse the substatement at scanner sc,
according to the description in node nd.1 -----------------*/
analyseNode: procedure expose m.
parse arg sc, nd.1, stopper
top = 1 /* top of node stack */
do while scanSqlClass(sc) & pos(m.sc.sqlClass, ';'stopper) < 1
if m.sc.sqlClass = 'i' then
att = m.sc.val
else if pos(m.sc.sqlClass, '()') > 0 then
att = m.sc.sqlClass
else
iterate
do ox=top by -1 to 1 /* search id in all nodes in stack */
nd = nd.ox
os = m.nd
if mapHasKey(os, att) then
leave
end
if ox < 1 then do
if att == '(' then
call scanSqlSkipBrackets sc, 1
iterate
end
osNx = mapGet(os, att) /* the os node */
chfPos = scanPos(sc)
ty = m.osNx.dataType
if ty ^== '' then do /* scan the value of the attribute */
if ty = 'i' then
res = scanSqlId(sc)
else if ty = 'n' then
res = scanSqlNum(sc)
else if ty = 'G' then
res = scanSqlNumUnit(sc, 'G M K')
else if ty = 'ni' then do
res = scanSqlNum(sc)
if \ res then
res = scanSqlId(sc)
end
else
call err 'overwrite type' ty 'not supported'
if ^ res then
call scanErr sc, ty 'value expected after' att
res = m.sc.val
end
chId = m.osNx.id
if right(chId, 1) = '?' then
chId = chId || res
ch = mapReset(nd.ox'.'chId, 'k') /* the new analysis node*/
m.ch.fPos = chfPos
m.ch.tPos = scanPos(sc)
if ty ^== '' then
m.ch.val = res
call mapAdd nd.ox, chId, osNx
if att = '(' then do
top = ox
call analyseNode sc, ch, ')'
if m.sc.sqlClass ^== ')' then
call scanErr sc, 'closing ) expected'
iterate
end
top = ox+1 /* pop higher nodes and push new one */
nd.top = ch
end
return
endProcedure analyseNode
/*--- show the the root analysises in stem a -------------------------*/
anaShow: procedure expose m.
parse arg a
do x=1 to m.a.0
call anaShow1 a'.' || x
end
return
/*--- show the analysis node a and its subnodes ----------------------*/
anaShow1: procedure expose m.
parse arg a
os = m.a
say a '->' os
if ^ abbrev(os, 'OS.') then
return
say ' val' m.a.val 'fr' m.a.fPos 'to' m.a.tPos
if wordPos(m.os.id, 'TS IX') > 0 then
say ' name' m.a.name '@' m.a.nPos
ks = mapKeys(a)
do kx = 1 to m.ks.0
call anaShow1 a'.'m.ks.kx
end
return
/*--- show the analysis node a and its subnodes ----------------------*/
checkFatal: procedure expose m.
parse arg a
if mapHasKey(a, 'PA') & mapHasKey(a, 'SE') then
if mapGet(a,'SE.VAL') <> 0 then do
say 'do you really want an universal tablespace' m.a.name,
'numParts' mapGet(a,'PA.VAL') 'segSize' mapGet(a,'SE.VAL')
parse upper pull yes
if \ (abbrev(yes, 'Y') | abbrev(yes, 'J')) then
call mAdd fatal, 'fehler: universal TS' m.a.name
end
return
endProcedure checkFatal
/*--- generate the override for all anaysis root nodes ---------------*/
override: procedure expose m.
parse arg an, wr
do ax=1 to m.an.0
call overrideNode an'.'ax, an'.'ax, wr
end
return
endProcedure override
/*--- create the necessary overrides for node rt and it's subnodes ---*/
overrideNode: procedure expose m.
parse arg rt, an, wr
os = m.an
doOv = m.os.overVal <> '' & m.os.overVal <> m.an.val
if doOv & abbrev(m.os.overType, '|') then
doOv = m.an.val <> substr(m.os.overType, 2)
if doOv & m.os.overType == 'LM' then do
ls = mapGet(rt, 'LS.VAL', '')
doOv = m.an.val = 0 & \ abbrev(ls, 'TABL', 1)
end
if doOv then
call overrideAtt rt, an, os, wr
if m.os.overType = 'TS' then do
wx = wordPos('LARGE', m.an.subType)
if wx > 0 then do
o = m.an.subType
n = subWord(o, 1, wx-1) subWord(o, wx+1)
call overrideOne wr, n 'TABLESPACE', m.an.fPos, m.an.nPos
call overrideSay 'override', rt, 'subType', n, o
end
end
ids = ''
keys = mapKeys(an)
do ax=1 to m.keys.0
nd = an'.'m.keys.ax
o1 = m.nd
ids = ids m.o1.id
call overrideNode rt, nd, wr
end
keys = mapKeys(os)
do ox=1 to m.keys.0
nd = mapGet(os, m.keys.ox)
if wordPos(m.nd.id, ids) < 1 then
call overrideAdd rt, an, nd, wr
end
return
endProcedure overrideNode
/*--- add to wr the override attribute osprefixed by tokens in scPa
for analysis node an with root rt pre ----------------------*/
overrideAdd: procedure expose m.
parse arg rt, an, os, wr, scPa
scPa = strip(scPa m.os.att)
if pos('?', os an) > 0 then
return
if m.os.overVal ^== '' then do
ov = m.os.overVal
ty = m.os.overType
jj = m.os.id
if jj = 'SE' then
if mapHasKey(rt, 'PA') | pos('LOB', m.rt.subType) > 0 then
ov = 0
if ty = 'DS' then
if ^mapHasKey(rt, 'PA') | pos('LOB', m.rt.subType) > 0 then
ty = ''
if ty = 'LM' then do
ls = mapGet(rt, 'LS.VAL', '')
if ls == '' | ls == 'ANY' | abbrev(ls, 'TABL', 1) then
ty = ''
end
if ty <> '' then do
call overrideOne wr, scPa ov,
, m.an.tPos, m.an.tPos
call overrideSay 'add', rt, scPa, ov
scPa = ''
end
else
call debug 'no overrideAdd' scPa
end
keys = mapKeys(os)
do ox=1 to m.keys.0
call overrideAdd rt, an, mapGet(os, m.keys.ox), wr, scPa
end
return
endProcedure overrideAdd
/*--- override an attribute of cp with overrideNode on ---------------*/
overrideAtt: procedure expose m.
parse arg rt, an, os, wr
o = overrideOne(wr, m.os.overVal, m.an.fPos, m.an.tPos)
call overrideSay 'override', rt, m.os.att, m.os.overVal,m.an.val' '
return 0
endProcedure overrideAtt
/*--- create on override node an add it ------------------------------*/
overrideOne: procedure expose m.
parse arg wr, new, fp, tp
o = mAdd(wr, new)
m.o.fPos = fp
m.o.tPos = tp
return o
endProcedure overrideOne
/*--- say what we want to override -----------------------------------*/
overrideSay: procedure expose m.
parse arg f, rt, att, new, old
m = left(f, 8) leftl(m.rt.name, 17) leftl(att, 8) leftl(new, 8)
if old ^== '' then
m = m 'from' old
say m
return
endProcedure overrideSay
/*--- edit a sequence of overrides into data -------------------------*/
applyOverrides: procedure expose m.
parse arg wr
call adrEdit "(w) = linenum .zl"
w = max(w, m.wr.0) + 10
w = length(w)
do x=1 to m.wr.0
m.si.x = right(word(m.wr.x.fPos, 1)+0, w, 0) ,
right(word(m.wr.x.fPos, 2)+0, 3, 0) right(x, w)
end
m.si.0 = m.wr.0
call sort si, so
delta = 0
cx = 1
wx = word(m.so.cx, 3)
do while cx <= m.so.0
lx = word(m.wr.wx.fPos, 1)
line = applyGetLine(lx+delta)
call mAdd mCut(wrk, 0), left(line, word(m.wr.wx.fPos, 2)-1)
lStX = lx
wy = wx
do forever
call app72 wrk, m.wr.wx
cx = cx + 1
if cx > m.so.0 then
leave
wx = word(m.so.cx, 3)
if word(m.wr.wx.fPos, 1) > word(m.wr.wy.tPos, 1) then
leave
else if m.wr.wx.tPos == m.wr.wy.tPos ,
& (m.wr.wx.fPos == m.wr.wy.fPos ,
|m.wr.wx.fPos == m.wr.wx.tPos) then
nop
else if word(m.wr.wx.fPos, 1) <> word(m.wr.wy.tPos, 1) then
call err 'bad sequence in override'
else if word(m.wr.wx.fPos, 2) <= word(m.wr.wy.tPos, 2) then
do
say wy m.wr.wy.tPos
call err 'overlap in override'
end
else do
if lx <> word(m.wr.wx.fPos, 1) then do
lx = word(m.wr.wx.fPos, 1)
line = applyGetLine(lx+delta)
end
px = word(m.wr.wy.tPos, 2)
call app72 wrk, substr(line, px,
, word(m.wr.wx.fPos, 2) - px), px
wy = wx
end
end
if lx <> word(m.wr.wy.tPos, 1) then do
lx = word(m.wr.wy.tPos, 1)
line = applyGetLine(lx+delta)
end
px = word(m.wr.wy.tPos, 2)
call app72 wrk, substr(line, px, 72+1-px), px, 1
do xx = lStx to lx
call adrEdit 'delete' (lStx+delta)
end
delta = delta + lStX - lx - 1
do xx=1 to m.wrk.0
if m.cdl then
li = left(m.applyGetLineMark || m.wrk.xx, 80)
else
li = left(m.wrk.xx, 72)m.applyGetLineMark
call adrEdit "line_after" (lx+delta) "= (li)"
delta = delta + 1
end
end
do fx=1 to m.fatal.0
li = copies('CREATE ', m.cdl) m.fatal.fx
call adrEdit "line_after 1 = (li)"
end
return
endProcedure applyOverrides
/*--- return the sql portion of line lx
and put the mark field into m.applyGetLineMark -------------*/
applyGetLine: procedure expose m.
parse arg lx
call adrEdit "(line) = line" (lx)
if m.cdl then do
m.applyGetLineMark = left(line, 8)
if m.applyGetLineMark <> 'CREATE' then
call err 'bad applyGetLine mark' m.applyGetLineMark ,
'in line' lx':' strip(line, 't')
return substr(line, 9, 72)
end
else do
m.applyGetLineMark = substr(line, 73, 8)
return left(line, 72)
end
endProcedure applyGetLine
/*--- append to stem st string val, at position miLe
if fix=1 exactly at the position else can shift to right ---*/
app72: procedure expose m.
parse arg st, val, miLe, fix
sx = m.st.0
li = strip(m.st.sx, 't')
if miLe ^== '' then do
vx = verify(val, ' ')
if vx = 0 then
miLe = miLe + length(val)
else
miLe = miLe + vx - 1
end
val = strip(val)
if fix = 1 then do
if length(li)+1 >= miLe then do
sx = sx + 1
li = ''
end
nn = left(li, miLe-1)val
end
else do
if length(li)+1 < miLe then
nn = left(li, miLe-1)val
else if length(li val) < 72 then
nn = li val
else
nn = left(li, 80)val
do while length(nn) >= 72
m.st.sx = left(nn, 72)
sx = sx + 1
nn = substr(nn, 73)
end
end
m.st.sx = nn
m.st.0 = sx
return
endProcedure app72
/*--- scan from scanner m the ids arg(2) ... arg(arg()) --------------*/
checkids: procedure expose m.
parse arg m
do ax=2 to arg()
if ^ scanSqlId(scanSkip(m)) & m.m.val <> translate(arg(ax)) then
call scanErr m, 'sqlId' arg(ax) 'expected'
end
return
endProcedure checkIds
/*--- find the errously genereate // DD * statements ----------------*/
findDDStar: procedure expose m.
parse arg rem
parse arg m, lx, cmd
c = 0
call adrEdit "cursor = 1"
do while adrEdit("seek '//' 1", 4) = 0 /* find each command */
call adrEdit "(lx) = cursor"
call adrEdit "(li) = line" lx
if lx = 1 then do
say 'first line looks like jcl, no search for //DD*'
return 0
end
if space(li, 0) ^== '//DD*' then do
if ^ rem then
say 'ignoring // line' lx strip(li,'t')
end
else do
c = c + 1
if rem then do
call adrEdit 'delete' lx
call adrEdit "cursor =" (lx-1)
end
end
end
return c
endProcedure findDDStar
/*--- fill src with spaces to get at least length len ----------------*/
leftl: procedure
parse arg src, len
if len > length(src) then
return left(src, len)
else
return src
endProcedure leftl
/*--- define reader reading edit data from line lx -------------------*/
editReadIni: procedure expose m.
call classNew "n EditRead u JRW", "m",
, "jRead return editRead(m, var)",
, "jOpen" ,
, "jReset m.m.linex = arg - 1"
return m
endProcedure editReadIni
/*--- read next line from edit data ----------------------------------*/
editRead: procedure expose m.
parse arg m, var
m.m.lineX = m.m.lineX + 1
if adrEdit('(ll) = line' m.m.lineX, 12) ^= 0 then
return 0
m.var = ll
return 1
endProcedure editRead
/* copy sort begin ****************************************************/
sort: procedure expose m.
parse arg i, o, cmp
if cmp == '' then
m.sort.comparator = "cmp = m.l.l0 <<= m.r.r0"
else if length(cmp) < 6 then
m.sort.comparator = "cmp = m.l.l0" cmp "m.r.r0"
else if pos(';', cmp) < 1 then
m.sort.comparator = "aLe = l'.'l0; aRi = r'.'r0; cmp =" cmp
else
m.sort.comparator = "aLe = l'.'l0; aRi = r'.'r0;" cmp
call sort1 i, 1, m.i.0, o, 1, sort.work, 1
m.o.0 = m.i.0
return
endProcedure sort
sort1: procedure expose m.
parse arg i, i0, le, o, o0, w, w0
if le <= 3 then do
if le = 3 then do
call sortMerge i, i0, i0+1, i, i0+1, i0+2, w, w0
call sortMerge i, i0+2, i0+3, w, w0, w0+2, o, o0
end
else if le = 2 then
call sortMerge i, i0, i0+1, i, i0+1, i0+2, o, o0
else if le = 1 then
m.o.o0 = m.i.i0
return
end
h = (le + 1) % 2
call sort1 i, i0, h, o, o0+le-h, w, w0
call sort1 i, i0+h, le-h, w, w0, o, o0
call sortMerge o, o0+le-h, o0+le, w, w0, w0+le-h, o, o0
return
endProcedure sort1
sortMerge: procedure expose m.
parse arg l, l0, le, r, r0, re, o, o0
do while l0 < le & r0 < re
interpret m.sort.comparator
if cmp then do
m.o.o0 = m.l.l0
l0 = l0 + 1
end
else do
m.o.o0 = m.r.r0
r0 = r0 + 1
end
o0 = o0 + 1
end
do while l0 < le
m.o.o0 = m.l.l0
l0 = l0 + 1
o0 = o0 + 1
end
do while r0 < re
m.o.o0 = m.r.r0
r0 = r0 + 1
o0 = o0 + 1
end
return
endProcedure sortMerge
/* copy sort end ****************************************************/
/* copy scanSql begin *************************************************/
/*--- initialize with reader inRdr ----------------------------------*/
scanSql: procedure expose m.
parse arg inRdr
return scanSqlReset(scanWin(inRdr), inRdr)
scanSqlReset: procedure expose m.
parse arg m, r, scanWin
if scanWin \== 0 then
call scanWinOpts m, 5, 2, 1, 72
else
m.m.rdr = r
return scanOpts(m, , '0123456789_' , '--')
scanSqlSeekId: procedure expose m.
parse arg m, lx, cmd, opts
if opts = '' then
opts = word
if adrEdit("cursor =" max(trunc(lx), 1), 12) = 12 then
return -1
do while adrEdit("seek" cmd opts, 4) = 0 /* find each command*/
call adrEdit "(fx) = cursor"
if m.debug then do
call adrEdit "(LI) = LINE" fx
call debug 'scanSqlSeekId after' lx 'found' cmd 'at' fx li
end
call jReset m.m.rdr, fx
call jOpen m, '<', fx
do while word(scanPos(m), 1) <= fx & scanSqlClass(m)
if m.m.sqlClass = 'i' & m.m.val == cmd then
return fx
end
call jClose m
end
return -1
endProcedure scanSqlSeekId
/*--- scan a sql token put class in m.sqlclass:
'i': ordinary identifier e.g. Name
'd': delimited identifier e.g. "Delimited"
'q': qualified identifier e.g. abc."efg"
'u': integer units e.g. 8G
'n': number e.g. -234 or .2e3
's': string e.g. 'abc''ef'
'' : at end
: any other character e.g. ;
----------------------------------------------------------------*/
scanSqlClass: procedure expose m.
parse arg m, retSpace
m.m.val = ''
if scanSpaceNl(m) & retSpace = 1 then do
m.m.sqlClass = 'b'
return 1
end
c2 = scanLook(m ,2)
if scanString(m, "' x' X'") then do
m.m.sqlClass = 's'
if \abbrev(m.m.tok, "'") then
m.m.val = x2c(m.m.val)
end
else if scanSqlQuId(m) then do
if m.m.val.0 > 1 then
m.m.sqlClass = 'q'
else if abbrev(m.m.tok, '"') then
m.m.sqlClass = 'd'
else
m.m.sqlClass = 'i'
end
else if scanSqlNum(m, 0) then
m.m.sqlClass = 'n'
else if scanChar(m, 1) then
m.m.sqlClass = m.m.tok
else if scanAtEnd(m) then do
m.m.sqlClass = ''
return 0
end
else
call scanErr m, 'cannot scan sql'
return 1
endProcedure scanSqlClass
scanSqlSkipBrackets: procedure expose m.
parse arg m, br
if br \== '' then
nop
else if scanLit(m, '(') then
br = 1
else
return 0
do while scanSqlClass(m) & m.m.sqlClass \== ';'
if m.m.sqlClass = '(' then br = br + 1
else if m.m.sqlClass \== ')' then iterate
else if br > 1 then br = br - 1
else return 1
end
call scanErr m, '; or eof, but' br 'closing ) expected'
endProcedure skipBrackets
/*--- scan an ordinary sql identifier e.g. abc, ef_12 ----------------*/
scanSqlId: procedure expose m.
parse arg m
if \ scanName(m) then
return 0
m.m.val = translate(m.m.tok)
return 1
endProcedure scanSqlId
/*--- scan a delimited or ordinay sql identifier ---------------------*/
scanSqlDeId: procedure expose m.
parse arg m
if scanSqlId(m) then
return 1
if \ scanString(m, '"') then
return 0
m.m.val = strip(m.m.val, 't')
return 1
endProcedure scanSqlDeId
/*--- scan a qualified sql identifier --------------------------------*/
scanSqlQuId: procedure expose m.
parse arg m
res = ''
rto = ''
do qx=1
if \ scanSqlDeId(m) then do
if qx <> 1 then
call scanErr m, 'id expected after .'
return 0
end
m.m.val.qx = m.m.val
res = res'.'m.m.val
rto = rto'.'m.m.tok
if \ scanLit(scanSkip(m), '.') then
leave
call scanSpaceNl m
end
m.m.val.0 = qx
m.m.val = substr(res, 2)
m.m.tok = substr(rto, 2)
return 1
endProcedure scanSqlQuId
/*--- scan a sql number ----------------------------------------------*/
scanSqlNum: procedure expose m.
parse arg m, checkEnd, noSp
si = ''
if noSp == 1 then
call err 'deimplement noSp, use scanNum instead'
if scanLit(m, '+', '-') then do
si = m.m.tok
call scanSpaceNl m
ch = scanLook(m, 2)
if left(ch, 1) == '.' then
ch = substr(ch, 2)
if pos(left(ch, 1), '0123456789') < 1 then do
call scanBack m, si
m.m.val = ''
return 0
end
end
res = scanNum(m, checkEnd)
m.m.val = si || m.m.val
return res
endProcedure scanSqlNum
/*--- scan a sql number with a unit which may follow without space ---*/
scanSqlNumUnit: procedure expose m.
parse arg m, both, units
if \ scanSqlNum(m, 0) then
return 0
nu = m.m.val
sp = scanSpaceNl(m)
if scanSqlId(m) then do
if units == '' | wordpos(m.m.val, units) > 0 then
nu = nu m.m.val
else if both | \ sp then
call scanErr m, 'scanSqlNumUnit after' nu 'bad unit' m.m.val
else
call scanBack m, m.m.tok
end
else if both then
call scanErr m, 'scanSqlNumUnit no unit after' nu
else if \sp & pos(scanLook(m, 1), m.m.scanNameR) > 0 then
call scanErr m, 'scanSqlNumUnit bad number end after' nu
m.m.val = nu
return 1
endProcedure scanSqlNumUnit
/*--- scan a sql number with a unit which may follow without space ---*/
scanSqlStmt: procedure expose m.
parse arg m, delim
if delim == '' then
delim = ';'
res = ''
vChrs = strip('''"/'delim || left(m.m.scanComment, 1))
do forever
if scanSpaceNl(m) then
if right(res, 1) \== ' ' then
res = res' '
if scanVerify(m, vChrs, 'm') then
res = res || m.m.tok
else if scanString(m) then
res = res || m.m.tok
else if scanLit(m, delim) then do
m.m.val = res
return 1
end
else if scanChar(m, 1) then do
res = res || m.m.tok
end
else do
m.m.val = res
return res \= ''
end
end
endProcedure scanSqlStmt
/* copy scanSql end *************************************************/
/* copy scanWin begin *************************************************
scan the the concatenation of the lines of a reader
any token my be split over several line
except the end-of-line-comment-token
***********************************************************************/
scanWinIni: procedure expose m.
if m.scanWin.ini = 1 then
return
m.scanWin.ini = 1
call scanReadIni
call jIni
call classNew 'n ScanWin u JRW', 'm',
, 'jReset call scanWinReset m, arg, arg2, arg3',
, 'jOpen call scanWinOpen m, arg(3) ',
, 'jClose call scanWinClose m ',
, 'scanReadNl return scanWinNl(m, unCond)',
, 'scanSpaceNl scanWinSpaceNl(m)',
, 'scanInfo scanWinInfo(m)',
, 'scanPos scanWinPos(m)'
return
endProcedure scanReadIni
/*--- instanciate a new window scanner, open rdr ---------------------*/
scanWin: procedure expose m.
parse arg rdr, wiSz, wiBa, cuPo, cuLe
return scanWinOpts(oNew('ScanWin', rdr), wiSz, wiBa, cuPo, cuLe)
/*--- set the reader and attributes of window scanner m -------------*/
scanWinReset: procedure expose m.
parse arg m, r, wiSz, wiGa, cuPo, cuLe
call scanReset m
m.m.rdr = r
m.m.atEnd = 'still closed'
return scanWinOpts(m, wiSz, wiGa, cuPo, cuLe)
endProcedure scanWinReset
/*--- set the attributes of window scanner m ------------------------*/
scanWinOpts: procedure expose m.
parse arg m, wiSz, wiGa, cuPo, cuLe
wiSz = word(wiSz 5, 1)
wiGa = word(wiGa 1, 1)
m.m.cutPos = word(cuPo 1, 1)
m.m.cutLen = word(cuLe 72, 1)
m.m.winTot = (wiSz * 2 + wiGa) * m.m.cutLen
m.m.posLim = (wiSz + wiGa) * m.m.cutLen
m.m.posOff = wiGa * m.m.cutLen
return m
endProcedure scanWinOpts
/*--- open reader and start scanning --------------------------------*/
scanWinOpen: procedure expose m.
parse arg m, lx
call scanOpen m
m.m.atEnd = 0
if lx = '' then
m.m.lineX = 1
else
m.m.lineX = lx
m.m.pos = 1
m.m.src = ''
call jOpen m.m.rdr, m.j.cRead
call scanWinRead m
return m
endProcedure scanWinOpen
scanWinClose: procedure expose m.
parse arg m
m.m.atEnd = 'still closed'
call jClose m.m.rdr
return
endProcedure scanWinClose
/*--- move the source window: cut left side and append at right side
return number of characters cut at left ------------------------*/
scanWinRead: procedure expose m.
parse arg m
dlt = 0
if m.m.atEnd then
return 0
if m.m.pos >= m.m.posLim then do /* cut left side */
dlt = m.m.pos - (m.m.pos // m.m.cutLen + m.m.posOff)
m.m.src = substr(m.m.src, dlt+1)
m.m.pos = m.m.pos - dlt
m.m.lineX = m.m.lineX + dlt % m.m.cutLen
end
do while length(m.m.src) < m.m.winTot /* read and fill to len */
if \ jRead(m.m.rdr, m'.'one) then do
m.m.atEnd = 1
return dlt
end
m.m.src = m.m.src || substr(m.m.one, m.m.cutPos, m.m.cutLen)
end
call assert 'length(m.m.src) = m.m.winTot'
return dlt
endProcedure scanWinRead
/*--- return position of next line start -----------------------------*/
scanWinNLPos: procedure expose m.
parse arg m
return m.m.pos + m.m.cutLen - ((m.m.pos - 1) // m.m.cutLen)
/*--- scan over spaces and comments ----------------------------------*/
scanWinSpaceNL: procedure expose m.
parse arg m
res = 0
do forever
call scanWinRead m
if scanVerify(m, ' ') then do
res = 1
iterate
end
else if scanLit(m, '/*') then do
ex = pos('*/', m.m.src, m.m.pos+2)
if ex <= m.m.pos then
return scanErr(m, '*/ missing after /*')
m.m.pos = ex+2
res = 1
end
else do
cl = length(m.m.scanComment)
np = scanWinNlPos(m)
if \ ( cl>0 & m.m.pos+cl <= np & m.m.scanComment ,
== substr(m.m.src, m.m.pos, cl)) then
return res
m.m.pos = np
res = 1
end
end
endProcedure scanWinSpaceNl
/*--- return current position in input ------------------------------*/
scanWinPos: procedure expose m.
parse arg m
if scanAtEnd(m) then
return 'E'
else
ps = m.m.pos - 1
return (m.m.lineX + (ps % m.m.cutLen)) (ps // m.m.cutLen + 1)
endProcedure scanWinPos
/*--- return a description of the current scan position --------------*/
scanWinInfo: procedure expose m.
parse arg m
p = scanWinPos(m)
if p == 'E' then do
res = 'atEnd after'
p = m.m.lineX - 1 + length(m.m.src) % m.m.cutLen
end
else do
res = 'pos' word(p, 2) 'in'
p = word(p, 1)
end
return '\n'res 'line' p':' strip(substr(m.m.src,
, 1 + (p - m.m.lineX) * m.m.cutLen, m.m.cutLen), 't')
endProcedure scanWinInfo
/* copy scanWin end *************************************************/
/* copy scanRead begin ************************************************/
scanReadIni: procedure expose m.
if m.scanRead.ini = 1 then
return
m.scanRead.ini = 1
call scanIni
call jIni
ts = classNew('n Scan u f TOK v, f VAL v, f KEY v, f TYPE v')
call classNew 'n ScanRead u JRW', 'm',
, 'jReset call scanReadReset m, arg, arg2, arg3',
, 'jOpen call scanReadOpen m',
, 'jClose call jClose m.m.rdr',
, 'jRead call scanType m; call oClaCopy "'ts'", m, var;' ,
'return m.m.type \== ""',
, 'scanReadNl return scanReadNlImpl(m, unCond)',
, 'scanSpaceNl scanReadSpaceNl(m)',
, 'scanInfo scanReadInfo(m)',
, 'scanPos scanReadPos(m)'
return
endProcedure scanReadIni
/*--- begin scanning the lines of a reader ---------------------------*/
scanRead: procedure expose m.
parse arg rdr, n1, np, co
return scanOpts(oNew('ScanRead', rdr), n1, np, co)
scanReadReset: procedure expose m.
parse arg m, r, n1, np, co
call scanReset m, n1, np, co
m.m.rdr = r
return m
endProcedure scanReadReset
scanReadOpen: procedure expose m.
parse arg m, r, n1, np, co
call scanOpen m
m.m.atEnd = 0
m.m.lineX = 0
call jOpen m.m.rdr, m.j.cRead
call scanReadNl m, 1
return m
endProcedure scanReadOpen
/*--- scan over next newLine
if unCond \== 1 only if we are already at endOfLine
return true if we scanned a NL ------------------------------*/
scanReadNl: procedure expose m.
parse arg m, unCond
interpret objMet(m, 'scanReadNl')
endProcedure scanReadNl
/*--- implementation of scanReadNl ----------------------------------*/
scanReadNLimpl: procedure expose m.
parse arg m, unCond
if unCond \== 1 then
if m.m.pos <= length(m.m.src) then
return 0
if m.m.atEnd then
return 0
m.m.atEnd = \ jRead(m.m.rdr, m'.SRC')
if m.m.atEnd then do
m.m.pos = 1 + length(m.m.src)
end
else do
m.m.pos = 1
m.m.lineX = m.m.lineX + 1
end
return \ m.m.atEnd
endProcedure scanReadNLimpl
scanReadSpaceNl: procedure expose m.
parse arg m
fnd = 0
do forever
if scanSpaceCom(m) then
fnd = 1
if \ scanReadNl(m) then
return fnd
fnd = 1
end
endProcedure scanReadSpaceNl
scanReadPos: procedure expose m.
parse arg m, msg
if scanAtEnd(m) then
return E
else
return m.m.lineX m.m.pos
endProcedure scanReadPos
scanReadInfo: procedure expose m.
parse arg m, msg
if scanAtEnd(m) then
msg = msg'\natEnd after'
else
msg = msg'\npos' m.m.pos 'in'
return msg 'line' m.m.lineX':' strip(m.m.src, 't')
endProcedure scanReadInfo
/* copy scanRead end **************************************************/
/* copy scan begin ****************************************************
Scan: scan an input:
scanLine(m,ln) : begin scanning a single line (string)
scanRead??(m,ln): begin scanning all lines of an opened reader
scanAtEnd(m) : returns whether we reached end of input
scanLit(m,lit) : scan Literal lit if present or return 0
scanChar(m,n) : scan next n characters
scanName(m) : scan a name
ScanNat(m) : scan a natural number (without sign)
scanString(m,q): scan a String with quote q. (with doubble = 1)
scanVerify(m,c,o): verify(...,c,o,...)
scanKeyValue(m): scan a key = value clause (with spaces)
scanWord(m,u) : scan a space delimited word or a string,
if u=1 then uppercase non-strings
scanErr(m, txt): error with current scan location
m is an adress, to store our state
if a scan function succeeds, the scan posititon is moved
returns: true if scanned, false otherwise
m.m.tok ==> last token
m.m.val ==> last value for scanString/Word/KeyValue
m.key ==> key for scanKeyValue
m.m.pos ==> scan position
m.m.src ==> scan source
***********************************************************************/
scanIni: procedure expose m.
if m.scan.ini == 1 then
return
m.scan.ini = 1
m.scan.alfLC = 'abcdefghijklmnopqrstuvwxyz'
m.scan.alfUC = translate(m.scan.alfLC)
m.scan.alfa = m.scan.alfLC || m.scan.alfUC
m.scan.alfNum = m.scan.alfa || '0123456789'
return
endProcedure scanIni
scanReset: procedure expose m.
parse arg m, n1, np, co
m.m.rdr = ''
m.m.jReading = 0 /* if called without jReset */
m.m.jWriting = 0
return scanOpts(m, n1, np, co)
endProcedure scanReset
scanOpts: procedure expose m.
parse arg m, m.m.scanName1, namePlus, m.m.scanComment
if m.m.scanName1 == '' then
m.m.scanName1 = m.scan.alfa
if namePlus == '' then
m.m.scanNameR = m.m.scanName1 || '0123456789'
else
m.m.scanNameR = m.m.scanName1 || namePlus
return m
endProcedure scanOpts
/*--- begin scanning a single line -----------------------------------*/
scanSrc: procedure expose m.
parse arg m, m.m.src
return scanOpen(m)
endProcedure scanSrc
scanOpen: procedure expose m.
parse arg m
m.m.tok = ''
m.m.val = ''
m.m.key = ''
m.m.pos = 1
m.m.atEnd = m.m.rdr == ''
m.m.jReading = 1
return m
endProcedure scanOpen
/*--- return the next len characters ---------------------------------*/
scanLook: procedure expose m.
parse arg m, len
if len == '' then
return substr(m.m.src, m.m.pos)
else
return substr(m.m.src, m.m.pos,
, min(len, 1 + length(m.m.src) - m.m.pos))
endProcedure scanLook
/*--- scan the literal lit ------------------------------------------*/
scanLit: procedure expose m.
parse arg m
do ax=2 to arg()
if abbrev(substr(m.m.src, m.m.pos), arg(ax)) then do
m.m.tok = arg(ax)
m.m.pos = m.m.pos + length(arg(ax))
return 1
end
end
m.m.tok = ''
return 0
endProcedure scanLit
/*--- scan the next len characters -----------------------------------*/
scanChar: procedure expose m.
parse arg m, len
nx = 1 + length(m.m.src)
if len \= '' then
nx = min(m.m.pos + len, nx)
m.m.tok = substr(m.m.src, m.m.pos, nx - m.m.pos)
m.m.pos = nx
return m.m.tok \== ''
endProcedure scanChar
/*--- scan a string with quote char qu -------------------------------*/
scanString: procedure expose m.
parse arg m, prefs
m.m.tok = ''
bx = m.m.pos
if prefs = '' then do
qu = substr(m.m.src, bx, 1)
if pos(qu, "'""") < 1 then
return 0
ax = bx + 1
end
else do
do px=1 until abbrev(substr(m.m.src, bx), p1)
p1 = word(prefs, px)
if p1 = '' then
return 0
end
qu = right(p1, 1)
ax = bx + length(p1)
end
m.m.val = ''
do forever
qx = pos(qu, m.m.src, ax)
if qx < 1 then
return scanErr(m, 'ending Apostroph('qu') missing')
m.m.val = m.m.val || substr(m.m.src, ax, qx-ax)
if qx >= length(m.m.src) then
leave
else if substr(m.m.src, qx+1, 1) <> qu then
leave
ax = qx+2
m.m.val = m.m.val || qu
end
m.m.tok = substr(m.m.src, bx, qx+1-bx)
m.m.pos = qx+1
return 1
endProcedure scanString
/*--- scan a Name, first char in *.scanName1, rest in *.scanNameR ----*/
scanName: procedure expose m.
parse arg m
if pos(substr(m.m.src, m.m.pos, 1),
, m.m.scanName1) <= 0 then do
m.m.tok = ''
return 0
end
return scanVerify(m, m.m.scanNameR)
endProcedure scanName
/*--- scan with verify, vOpt is passed to verify ---------------------*/
scanVerify: procedure expose m.
parse arg m, alpha, vOpt, onlyIfMatch
if vOpt == '' then /* empty string does not take default */
nx = verify(m.m.src, alpha, , m.m.pos)
else
nx = verify(m.m.src, alpha, vOpt, m.m.pos)
if nx = 0 then
if onlyIfMatch == 1 then
nx = m.m.pos
else
nx = length(m.m.src) + 1
m.m.tok = substr(m.m.src, m.m.pos, nx - m.m.pos)
m.m.pos = nx
return m.m.tok \== ''
endProcedure scanVerify
/*--- scan a natural number (no sign, decpoint ...) ------------------*/
scanNat: procedure expose m.
parse arg m, chEn
if \ scanVerify(m, '0123456789') then
return 0
if chEn \== 0 then
if pos(scanLook(m , 1), m.m.scanNameR) > 0 then
call scanErr m, 'illegal number end after' m.m.tok
return 1
endProcedure ScanNat
/*--- scan an integer (optional sign, no decpoint ...) ---------------*/
scanInt: procedure expose m.
parse arg m, chEn
call scanLit m, '+', '-'
si = m.m.tok
if \ scanNat(m, chEn) then do
m.m.pos = m.m.pos - si
return 0
end
m.m.tok = si || m.m.tok
return 1
endProcedure scanInt
/*--- scan a number (optional sign, decpoint, exponent) ------------*/
scanNum: procedure expose m.
parse arg m, chEn
sx = m.m.pos
call scanLit m, '+', '-'
po = scanLit(m, '.')
if \ scanNat(m, 0) then do
m.m.pos = sx
return 0
end
if \ po then
if scanLit(m, '.') then
call scanNat m, 0
if scanLit(m, 'e', 'E') then
if \ scanInt(m, 0) then
call scanErr m, 'exponent expected after' ,
substr(m.m.src, sx, m.m.pos-sx)
m.m.tok = substr(m.m.src, sx, m.m.pos-sx)
m.m.val = translate(m.m.tok)
if chEn \== 0 then
if pos(scanLook(m , 1), m.m.scanNameR) > 0 then
call scanErr m, 'illegal number end after' m.m.tok
return 1
endProcedure scanNum
/*--- scan a word and put value into *.val
a word is either delimited by space or stopper
or a string (with single or double quotes -------*/
scanWord: procedure expose m.
parse arg m, stopper
if scanString(m) then return 1
if \scanVerify(m, ' 'stopper, 'm') then return 0
m.m.val = m.m.tok
return 1
endProcedure scanWord
scanType: procedure expose m.
parse arg m, opt
m.m.tok = ''
if scanName(m) then
m.m.type = 'n'
else if scanNum(m) then
m.m.type = 0
else if scanString(m) then
m.m.type = left(m.m.tok, 1)
else if scanSpaceNl(m) then
m.m.type = 's'
else do
call scanChar m, 1
m.m.type = m.m.tok
end
return m.m.type
endProcedure scanType
scanBack: procedure expose m.
parse arg m, tok
if m.m.pos <= length(tok) then
call scanErr sc, 'cannot back "'tok'" length'
cx = m.m.pos - length(tok)
if substr(m.m.src, cx, length(tok)) \== tok then
call scanErr sc, 'cannot back "'tok'" value'
m.m.pos = cx
return
endProcedure scanBack
/*--- scan a key = word phrase
put key into m.key and word into m.m.val -------*/
scanKeyValue: procedure expose m.
parse arg m, def
if \ scanName(m) then
return 0
m.m.key = m.m.tok
if \ scanLit(scanSkip(m), '=') then do
m.m.val = def
m.m.tok = ' no='
end
else if \scanWord(scanSkip(m)) then
return scanErr(m, 'word expected after' m.m.key '=')
return 1
endProcedure scanKeyValue
/*--- return true/false whether we are at the end of input ----------*/
scanAtEnd: procedure expose m.
parse arg m
return m.m.atEnd & m.m.pos > length(m.m.src)
endProcedure scanAtEnd
/*--- skip over spaces, nl and comments (if option set) --------------*/
scanSpaceNL: procedure expose m.
parse arg m
lastTok = m.m.tok
if m.m.rdr \== '' then
interpret 'res = ' objMet(m, 'scanSpaceNl')
else
res = scanSpaceCom(m)
m.m.tok = lastTok
return res
endProcedure scanSpaceNL
scanSpaceCom: procedure expose m.
parse arg m
res = scanVerify(m, ' ')
if m.m.scanComment \== '' then
if abbrev(substr(m.m.src, m.m.pos), m.m.scanComment) then do
m.m.pos = 1 + length(m.m.src)
return 1
end
return res
endProcedure scanSpaceCom
/*--- skip over space, nl and comments and return m -----------------*/
scanSkip: procedure expose m.
parse arg m
call scanSpaceNl m
return m
endProcedure scanSkip
/*--- emit an error with current scan pos ----------------------------*/
scanErr: procedure expose m.
parse arg m, txt
m.m.err.0 = 0
call err 'scanErr' txt'\n'scanInfo(m, m'.ERR')
return 0
endProcedure scanErr
scanPos: procedure expose m.
parse arg m
if m.m.rdr \== '' then
interpret 'return' objMet(m, 'scanPos')
else if scanAtEnd(m) then
return E
else
return 1 m.m.pos
endProcedure scanPos
scanInfo: procedure expose m.
parse arg m
msg = 'last token' m.m.tok 'scanPosition' ,
strip(left(substr(m.m.src, m.m.pos), 40), 't')
if m.m.rdr == '' then
return msg'\npos' m.m.Pos 'in string' strip(m.m.src, 't')
else
interpret 'return msg ||' objMet(m, 'scanInfo')
endProcedure scanInfo
/* copy scan end ****************************************************/
/* copy j begin *******************************************************
the j framework
jReset
jOpen
jClose
jRead
jWrite
***********************************************************************/
jRead: procedure expose m.
parse arg m, var
call objMetClaM m, 'jRead'
if m.m.jReading then
interpret ggCode
else
return err('jRead('m',' var') but not opened r')
endProcedure jRead
jReadO: procedure expose m.
parse arg m
if arg() > 1 then call err '??? old interface'
call objMetClaM m, 'jReadO'
if m.m.jReading then
interpret ggCode
else
return err('jReadO('m',' var') but not opened r')
endProcedure jReadO
jWrite: procedure expose m.
parse arg m, line
call objMetClaM m, 'jWrite'
if \ m.m.jWriting then
return err('jWrite('m',' line') but not opened w')
interpret ggCode
return
endProcedure jWrite
jWriteO: procedure expose m.
parse arg m, var
call objMetClaM m, 'jWriteO'
if \ m.m.jWriting then
return err('jWriteO('m',' var') but not opened w')
interpret ggCode
return
endProcedure jWriteO
jWriteAll: procedure expose m.
parse arg m, rdr
rdr = o2file(rdr)
call objMetClaM m, 'jWriteAll'
if \ m.m.jWriting then
return err('jWriteAll('m',' rdr') but not opened w')
interpret ggCode
return
endProcedure jWriteAll
jWriteNow: procedure expose m.
parse arg m, rdr
rdr = o2file(rdr)
interpret objMet(m, 'jWriteNow')
return
endProcedure jWriteNow
jCat: procedure expose m.
parse arg opt m
if m = '' then do
m = opt
opt = m.j.cWri
end
call jOpen m, opt
do ax=2 to arg()
call jWriteAll m, arg(ax)
end
call jClose m
return m
endProcedure jCat
jWriteNowImpl: procedure expose m.
parse arg m, rdr
call jOpen rdr, m.j.cRead
do while jRead(rdr, line)
call jWrite m, m.line
end
call jClose rdr
return
endProcedure jWriteNow
jWriteNowImplO: procedure expose m.
parse arg m, rdr
call jOpen rdr, m.j.cRead
do while assNN('li', jReadO(rdr))
call jWriteO m, li
end
call jClose rdr
return
endProcedure jWriteNow
/*--- reset JRW: fail if open, initialise ---------------------------*/
jReset: procedure expose m.
parse arg m, arg, arg2, arg3
if m.m.jReading == 1 | m.m.jWriting == 1 then
return err('still open jReset('m',' arg2')') / 3
m.m.jReading = 0
m.m.jWriting = 0
m.m.jUsers = 0
interpret objMet(m, 'jReset')
return m
endProcedure jReset
jOpen: procedure expose m.
parse arg m, opt
call objMetClaM m, 'jOpen'
oUsers = m.m.jUsers
if opt = m.j.cRead then do
if m.m.jReading then
nop
else if m.m.jWriting then
return err('already opened for writing jOpen('m',' opt')')
else do
interpret ggCode
m.m.jReading = 1
end
end
else if \ abbrev('>>', opt, 1) then do
return err('bad option' opt 'in jOpen('m',' opt')')
end
else do
if m.m.jWriting then
nop
else if m.m.jReading then
return err('already opened for reading jOpen('m',' opt')')
else do
interpret ggCode
m.m.jWriting = 1
end
end
m.m.jUsers = oUsers + 1
return m
endProcedure jOpen
jClose: procedure expose m.
parse arg m
call objMetClaM m, 'jClose'
oUsers = m.m.jUsers
if oUsers = 1 then do
interpret ggCode
m.m.jReading = 0
m.m.jWriting = 0
end
else if oUsers < 1 then
call err 'jClose' m 'but already closed'
m.m.jUsers = oUsers - 1
return m
endProcedure jClose
/*--- cat the lines of the file together, with mid between lines,
fail if not all lines are strings -------------------*/
jCatLines: procedure expose m.
parse arg m, opt
call jOpen m, m.j.cRead
if \ jRead(m, line) then do
call jClose m
return ''
end
res = jCat1(m.line)
if \ abbrev(opt, '-', 1) then
do while jRead(m, line)
res = res || opt || m.line
end
else if opt == '-s' then
do while jRead(m, line)
res = res strip(m.line)
end
else if opt == '-72' then
do while jRead(m, line)
res = res || left(m.line, 72)
end
call jClose m
return res
endProcedure jCatLines
jCat1: procedure expose m.
parse arg v, opt
if \ abbrev(opt, '-', 1) then
return v
if opt == '-s' then
return strip(v)
if opt == '-72' then
return left(v, 72)
call err 'bad opt' opt 'in jCat1('v',' opt')'
endProcedure jCat1
jIni: procedure expose m.
if m.j.ini == 1 then
return
m.j.ini = 1
m.j.cRead = '<'
m.j.cWri = '>'
m.j.cApp = '>>'
call oIni
am = "call err 'call of abstract method"
call classNew 'n JRW u ORun, f JREADING v, f JWRITING v', 'm',
, "new call jReset m, arg, arg2, arg3",
, "jRead" am "jRead('m',' var')'" ,
, "jReadO if \ jRead(m, 'J.GGVAR') then return '';",
"return s2o(m.j.ggVar)" ,
, "jWrite" am "jWrite('m',' line')'" ,
, "jWriteO call jWrite(m, o2string(var))" ,
, "jWriteAll call jWriteNowImpl m, rdr",
, "jWriteNow call jWriteNowImpl m, rdr",
, "jReset",
, "jOpen" am" jOpen('m',' opt')'" ,
, "jClose" ,
, "oRun call pipeWriteAll m",
, "o2String return jCatLines(m, ' ')",
, "o2File return m"
call classNew 'n JRWO u JRW', 'm',
, "jRead res = jReadO(m); if res == '' then return 0;" ,
"m.var = o2string(res); return 1" ,
, "jReadO" am "jReadO('m')'" ,
, "jWrite call jWriteO(m, s2o(var))" ,
, "jWriteO" am "jWriteO('m',' line')'",
, "jWriteAll call jWriteNowImplO m, rdr",
, "jWriteNow call jWriteNowImplO m, rdr",
am = "call err 'call errObject"
call classNew 'n JRWErr u JRW', 'm',
, "jWriteAll" er "jWriteAll 'm', rdr'",
, "jWriteNow" er "jWriteNow 'm', 'rdr'",
, "jClose" er "jClose 'm'"
call classNew 'n JRWOut u JRWO', 'm',
, "jReset m.m.stem = arg;",
"if arg \== '' & \ dataType(m.arg.0, 'n') then",
"m.arg.0 = 0" ,
, "jWrite if m.m.stem == '' then say line;" ,
"else call mAdd m.m.stem, line" ,
, "jWriteO call classOut , var, 'outO: '",
, "jOpen if \ abbrev(opt, m.j.cWri) then",
"call err 'can only write JRWOut.jOpen('m',' opt')';" ,
"else m.m.jWriting = 1"
call classNew 'n JRWEof u JRW', 'm',
, "jRead drop m.var; return 0",
, "jOpen if pos('>', opt) > 0 then",
"call err 'can only read JRWEof.jOpen('m',' opt')';" ,
"else m.m.jReading = 1"
m.j.in = jOpen(oNew('JRWEof'), m.j.cRead)
m.j.out = jOpen(oNew('JRWOut'), m.j.cWri)
call classNew "n JBuf u JRWO, f BUF s r", "m",
, "jOpen call jBufOpen m, opt",
, "jReset call jBufReset m, arg",
, "jRead return jBufRead(m, var)",
, "jReadO return jBufReadO(m)",
, "jWrite call jBufWrite m, line",
, "jWriteO call jBufWriteO m, var"
call classNew "n JBufTxt u JBuf, f MAXL v ", "m",
, "jReset call jBufReset m, arg; m.m.maxl = 80",
, "jWriteO call jBufWrite m, o2Text(var, m.m.maxl)"
return
endProcedure jIni
in: procedure expose m.
parse arg arg
return jRead(m.j.in, arg)
endProcedur in
inO: procedure expose m.
if arg() > 0 then call err '??? old interface'
return jReadO(m.j.in)
endProcedur in
out: procedure expose m.
parse arg line
call jWrite m.j.out, line
return 0
endProcedure out
outO: procedure expose m.
parse arg arg
call jWriteO m.j.out, arg
return
endProcedure outO
/*--- jBuf: buffer read or write (supports datataypes) ---------------*/
jBuf: procedure expose m.
m = oNew('JBuf') /* calls jBufReset */
do ax=1 to arg()
m.m.buf.ax = arg(ax)
end
m.m.buf.0 = ax-1
m.m.allV = 1
return m
endProcedure jBuf
/*--- jBuf: buffer read or write (supports datataypes) ---------------*/
jBufTxt: procedure expose m.
m = oNew('JBufTxt') /* calls jBufReset */
do ax=1 to arg()
m.m.buf.ax = arg(ax)
end
m.m.buf.0 = ax-1
m.m.allV = 1
return m
endProcedure jBufTxt
jBufReset: procedure expose m.
parse arg m
m.m.stem = m'.BUF'
do ax=1 to arg() - 1
m.m.buf.ax = arg(ax+1)
end
m.m.buf.0 = ax-1
m.m.allV = 1
return m
endProcedure jBufReset
jBufOpen: procedure expose m.
parse arg m, opt
if opt == m.j.cRead then do
m.m.readIx = 0
m.m.jReading = 1
return m
end
if opt == m.j.cWri then do
m.m.buf.0 = 0
m.m.allV = 1
end
else if opt \== m.j.cApp then
call err 'jBufOpen('m',' opt') with bad opt'
m.m.jWriting = 1
return m
endProcedure jBufOpen
jBufWrite: procedure expose m.
parse arg m, line
if m.m.allV then
call mAdd m'.BUF', line
else
call mAdd m'.BUF', s2o(line)
return
endProcedure jBufWrite
jBufWriteStem: procedure expose m.
parse arg m, st
ax = m.m.buf.0
if m.m.allV then do
do sx=1 to m.st.0
ax = ax + 1
m.m.buf.ax = m.st.sx
end
end
else do
do sx=1 to m.st.0
ax = ax + 1
m.m.buf.ax = o2String(m.st.sx)
end
end
m.m.buf.0 = ax
return m
endProcedure jBufWrite
jBufWriteO: procedure expose m.
parse arg m, ref
if m.m.allV then do
cl = objClass(ref)
if cl = m.class.classV then do
call mAdd m'.BUF', m.ref
return
end
if cl == m.class.classW then do
call mAdd m'.BUF', substr(ref, 2)
return
end
m.m.allV = 0
do ax=1 to m.m.buf.0
m.m.buf.ax = s2o(m.m.buf.ax)
end
end
call mAdd m'.BUF', ref
return
endProcedure jBufWriteO
jBufReadO: procedure expose m.
parse arg m
nx = m.m.readIx + 1
if nx > m.m.buf.0 then
return ''
m.m.readIx = nx
if m.m.allV then
return s2o(m.m.buf.nx)
else
return m.m.buf.nx
endProcedure jBufReadO
jBufRead: procedure expose m.
parse arg m, var
nx = m.m.readIx + 1
if nx > m.m.buf.0 then
return 0
m.m.readIx = nx
if m.m.allV then
m.var = m.m.buf.nx
else
m.var = o2String(m'.BUF.'nx)
return 1
endProcedure jBufRead
jBufTxtWriteO: procedure expose m.
parse arg m, ref
if m.m.allV \== 1 then
call err '1 \== allV' m.m.allV 'in jBufTxtWriteO('m',' ref')'
cl = objClass(ref, '?')
if cl = m.class.classV then
call mAdd m'.BUF', m.ref
else if cl == m.class.classW then
call mAdd m'.BUF', substr(ref, 2)
else if ref == '' then
call mAdd m'.BUF', '@ null object'
else if cl == '?' then
call mAdd m'.BUF', '@'ref 'class=???'
else do
l = '@'ref 'class='className(cl)
ff = cl'.FLDS'
do fx=1 to m.ff.0 while length(l) < m.m.maxl + 3
if m.ff.fx == '' then
l = l', .='m.ref
else do
f1 = substr(m.ff.fx, 2)
l = l',' f1'='m.ref.f1
end
end
if length(l) > m.m.maxl then
l = left(l, m.m.maxl-3)'...'
call mAdd m'.BUF', l
end
return
endProcedure jBufTxtWriteO
/* copy j end *********************************************************/
/* copy o begin ******************************************************
an object has a class which describes fields and methods
an object has fields (e.g. m.o.fld1)
an object may call it's methods (dynamic binding)
***********************************************************************/
oIni: procedure expose m.
if m.o.ini = 1 then
return
m.o.ini = 1
call classIni
call oAdd1Method m.class.classV, 'o2String return m.m'
m.class.escW = '!'
call oAdd1Method m.class.classW, 'o2String return substr(m, 2)'
or = classNew('n ORun u',
, 'm oRun call err "call of abstract method oRun"',
, 'm o2File return oRun2File(m)',
, 'm o2String return jCatLines(oRun2File(m), " ")')
/* oRunner does not work yet ||||| */
rc = classNew('n* ORun u ORun, m oRun call oClassAdded arg(2)')
call oAddMethod rc'.OMET', rc
call classAddedRegister oMutate(mNew(), rc)
return
endProcedure oIni
/*--- when notified about a new class cl, build the redundancies ----*/
oClassAdded: procedure expose m.
parse arg cl
m.class.o2c.cl = m.class.class
call oAddMethod cl'.OMET', cl
new = "m.class.o2c.m =" cl
if m.cl.flds.0 > 0 | m.cl.stms.0 > 0 then
new = new"; call oClear m, '"cl"'"
new = new";" classMet(cl, 'new', '')
if cl == m.class.class then
call mAlias 'CLASS', cl
else /* object adresses */
call mNewArea cl, 'O.'substr(cl,7), new
if m.cl \== 'u' | m.cl.name == '' then
return
call mAlias cl, m.cl.name
new = 'new'
m.cl.oMet.new = ''
co = '' /* build code for copy */
do fx=1 to m.cl.flds.0
nm = m.cl.flds.fx
if translate(nm) == nm & \ abbrev(nm, 'GG') ,
& pos('.M.', nm'.') < 1 & pos('.T.', nm'.') < 1 then
co = co'm.t'nm '= m.m'nm';'
else
co = co 'f='quote(substr(nm, 2))';m.t.f = m.m.f;'
end
do fx=1 to m.cl.stms.0
nm = m.cl.stms.fx
sc = m.cl.stms.fx.class
if nm == ''then
co = co "m.t.0=m.m.0;" ,
"do sx=1 to m.m.0;" ,
"call oClaCopy '"sc"',m'.'sx, t'.'sx; end;"
else
co = co "st='"substr(nm, 2)"';m.t.st.0=m.m.st.0;",
"do sx=1 to m.m.st.0;",
"call oClaCopy '"sc"',m'.'st'.'sx, t'.'st'.'sx; end;"
end
p = cl'.OMET.oCopy'
if symbol('m.p') \== VAR then
m.p = co
return
endProcedure oClassAdded
/*--- add the methods of class cl to the methodtable mt -------------*/
oAddMethod: procedure expose m.
parse arg mt, cl
if pos(m.cl, 'frsv') > 0 then
return
if m.cl = 'm' then do
nm = m.cl.name
m.mt.nm = m.cl.met
return
end
/* if m.cl.class \== '' then
call oAddMethod mt, m.cl.class
*/ do x=1 to m.cl.0
call oAddMethod mt, m.cl.x
end
return
endProcedure oAddMethod
/* add 1 method to a completed class and its subclasses -------------*/
oAdd1Method: procedure expose m.
parse arg clNm, met code
cl = classAdd1Method(clNm, met code)
m.cl.omet.met = code
call oAdd1MethodSubs cl, met code
return cl
endProcedure oAdd1Method
/* add 1 method code to OMET of all subclasses of cl -------------*/
oAdd1MethodSubs: procedure expose m.
parse arg cl, met code
do sx=1 to m.cl.sub.0
sc = m.cl.sub.sx
if pos(m.sc, 'nvw') > 0 then do
do mx=1 to m.sc.0
ms = m.sc.mx
if m.ms == 'm' & m.ms.name == met then
call err 'method' med 'already in' sc
end
m.sc.omet.met = code
end
call oAdd1MethodSubs sc, met code
end
return cl
endProcedure oAdd1MethodSubs
/*--- create an an object of the class className
mutate it to class but DO NOT call it's new method ----------*/
oBasicNew: procedure expose m.
parse arg cl
return oMutate(mBasicNew(cl), cl)
/*--- create an an object of the class className
and call it's new method ------------------------------------*/
oNew: procedure expose m.
signal labelMNew /* work is done there | ???? remove */
/*--- return the class of object obj --------------------------------*/
objClass: procedure expose m.
parse arg obj
if symbol('m.class.o2c.obj') == 'VAR' then
return m.class.o2c.obj
if abbrev(obj, m.class.escW) then
return m.class.classW
if abbrev(obj, 'CLASS.CAST.') then
return substr(obj, 12, pos(':', obj, 12)-12)
if arg() >= 2 then
return arg(2)
return err('objClass no class found for object' obj)
endProcedure objClass
oKindOf: procedure expose m.
parse arg obj, sup
cl = objClass(obj, '')
if cl == '' then
return 0
return classInheritsOf(cl, class4name(sup))
endProcedure oKindOf
classInheritsOf: procedure expose m.
parse arg cl, sup /* wkTst optimierung in classAdded */
if cl == sup then
return 1
do while m.cl \== 'n' & m.cl \== 'u'
if m.cl.class == '' then
return 0
cl = m.cl.class
end
do cx=1 to m.cl.0
d = m.cl.cx
if m.d == 'u' then
if classInheritsOf(d, sup) then
return 1
end
return 0
endProcedure classInheritsOf
classSetMet: procedure expose m.
parse arg na, me, code
if symbol('m.class.n2c.na') \== 'VAR' then
call err 'no class' na 'in classMet('na',' me')'
cl = m.class.n2c.na
if symbol('m.cl.oMet.me') \== 'VAR' then
call err 'no method in classMet('na',' me')'
m.cl.oMet.me = code
return cl
endProcedure classSetMet
/*--- return the code of method me of the class with name na --------*/
classMet: procedure expose m.
parse arg na, me
if symbol('m.class.n2c.na') \== 'VAR' then
call err 'no class' na 'in classMet('na',' me')'
cl = m.class.n2c.na
if symbol('m.cl.oMet.me') == 'VAR' then
return m.cl.oMet.me
if arg() >= 3 then
return arg(3)
call err 'no method in classMet('na',' me')'
endProcedure classMethod
/*--- set m, ggClass, ggCode to the address, class and code
of method me of object m ------------------------------------*/
objMetClaM: procedure expose m. m ggClass ggCode
parse arg m, me
if symbol('m.class.o2c.m') == 'VAR' then
ggClass = m.class.o2c.m
else if abbrev(m, 'CLASS.CAST.') then
parse var m 'CLASS.CAST.' ggClass ':' m
else
return err('no class found for object' m)
if symbol('m.ggClass.oMet.me') == 'VAR' then
ggCode = m.ggClass.oMet.me
else
call err 'no method' me 'in class' className(ggClass),
'of object' m
return
endProcedure objMetClaM
/*--- return the code of method me of object obj --------------------*/
objMet: procedure expose m.
parse arg obj, me
/* handle the easy and frequent case directly */
if symbol('m.class.o2c.obj') == 'VAR' then
c = m.class.o2c.obj
else if abbrev(obj, m.class.escW) then
c = m.class.classW
else do
call objMetClaM obj, me
return 'M="'m'";'ggCode
end
if symbol('m.c.oMet.me') == 'VAR' then
return m.c.oMet.me
return err('no method' me 'in class' className(c) 'of object' obj)
endProcedure objMet
/*--- return the stem of fieldnames of object m ---------------------*/
oFlds: procedure expose m.
parse arg m
return objClass(m)'.FLDS'
endProcedure oFlds
/*--- return the contents of field f navigation along path ----*/
oGet: procedure expose m.
parse arg obj, path, clazz
nullNew = 0
ret = oAccPath(obj, path, clazz)
if ret == 1 then
ret = oAccStr(m, cl)
if ret == 1 then
return str
return err(ret 'in oGet('obj',' path')')
endProcedure oGet
oAccStr: procedure expose m. str
parse arg m, cl
if cl == m.class.classV then
str = m.m
else if m.cl.valueCl == '' then
return 'no value @' m 'class' className(cl)
else if m.m == '' then
return 'null @' m 'class' className(cl)
else if abbrev(m, m.class.escW) then
str = substr(m ,2)
else
str = o2String(m.m)
return 1
endProcedure oAccStr
oGetO: procedure expose m.
parse arg obj, path, opt, clazz
nullNew = pos('n', opt) > 0
ret = oAccPath(obj, path, clazz)
if ret == 1 then
ret = oAccO(m, cl, opt)
if ret == 1 then
return ref
else
return err(ret 'in oGetO('obj',' path')')
endProcedure oGetO
oAccO: procedure expose m. ref
parse arg m, cl, opt
if cl == m.class.classV then do
ref = s2o(m.m)
end
else if m.cl \== 'r' then do
ref = m
end
else if m.m == '' then do
if opt == '-b' then do
m.m = jBuf()
end
else if opt == '-n' then do
rsn = oRefSetNew(m, cl)
if rsn \==1 then
return rsn
end
ref = m.m
end
else if objClass(m.m, 0) \== 0 then do
ref = m.m
end
else do
return 'no class for' m.m '@' m 'class' cl
end
return 1
endProcedure oAccO
oPut: procedure expose m.
parse arg obj, path, str
nullNew = 1
res = oAccPath(obj, path)
if res == 1 then
res = ocPut(m, cl, str)
if res == 1 then
return str
return err(res 'in oPut('obj',' path',' str')')
endProceudre oPut
ocPut: procedure expose m.
parse arg m, cl, str
if m.cl.valueCl == m.class.classV then
m.m = str
else if m.cl.valueCl \== '' then
m.m = s2o(str)
else
return 'no value @' m 'class' className(cl)
return 1
endProcedure ocPut
oPutO: procedure expose m.
parse arg obj, path, ref
nullNew = 1
res = oAccPath(obj, path)
if res == 1 then
res = ocPutO(m, cl, ref)
if res == 1 then
return ref
return err(ret 'in oPut('obj',' path',' ref')')
endProcedure oPutO
ocPutO: procedure expose m.
parse arg m, cl, ref
if m.cl.valueCl == m.class.classV then
m.m = o2string(ref)
else if m.cl.valueCl \== '' then
m.m = ref
else if m.cl.stemCl \== '' then
return 'implement put to stem'
else
return 'no value @' m 'class' className(cl)
return 1
endProcedure ocPutO
oClear: procedure expose m.
parse arg obj, cl
if cl == '' then
cl = objClass(obj)
do fx=1 to m.cl.flds.0
f1 = m.cl.flds.fx
o1 = obj || f1
if f1 == '' then
c1 = cl
else do
c1 = substr(f1, 2)
c1 = m.cl.f2c.c1
end
if c1 == m.class.classW then
m.o1 = m.class.escW
else
m.o1 = ''
end
do sx=1 to m.cl.stms.0
f1 = obj || m.cl.stms.sx
m.f1.0 = 0
end
return obj
endProcedure oClear
oAccPath: procedure expose m. m cl nullNew
parse arg m, pa, cl
if cl == '' & m \== '' then do
cl = objClass(m)
end
if pa == '' then
return 1
if abbrev(pa, m.class.cRef) ,
| (\ m.cl.hasFlds & abbrev(pa, m.class.cNav)) then do
if pa == m.class.cRef & m.cl.valueCl == m.class.classV then do
cl = m.class.classV
return 1
end
if (m.cl.valueCl == '' | m.cl.valueCl == m.class.classV) ,
& m.cl \== 'r' then
return 'no reference @' m 'class' cl
if m.m = '' then do
if \ nullNew then
return 'null @' m 'class' className(cl)
rsn = oRefSetNew(m, cl)
if rsn \== 1 then
return rsn
end
return oAccPath(m.m, substr(pa, 2))
end
if pos(left(pa, 1), m.class.cPath) > 0 then
return oAccPath(m, substr(pa, 2), cl)
px = verify(pa, m.class.cPath, 'm')
if px < 1 then
px = length(pa)+1
fn = left(pa, px-1)
pa = substr(pa, px)
if symbol('m.cl.f2c.fn') == 'VAR' then
return oAccPath(m'.'fn, pa, m.cl.f2c.fn)
if m.cl.stemCl=='' | fn=='' | verify(fn, '0123456789','n')>0 then
return 'no field' fn '@' m 'class' className(cl)
if fn == 0 then
return oAccPath(m'.0', pa, m.class.classV)
if abbrev(fn, 0) | verify(m.m.0, '0123456789', 'n') > 0,
| fn > m.m.0 then
return 'bad stem index' fn'>'m.m.0 '@' m 'class' className(cl)
return oAccPath(m'.'fn, pa, m.cl.stemCl)
endProcedure oAccPath
oRefSetNew: procedure expose m.
parse arg m, cl
cr = m.cl.valueCl
if m.cr.class = '' then
return 'no class for null @' m 'class' className(cl)
if m.cr.class = m.class.classW then
m.m = o2s()
else if m.cr \== 'r' then
return 'class' className(cl) 'not ref'
else
m.m = mNew(m.cr.class)
return 1
endProcedure oRefSetNew
/*--- mutate object m to the class named name -----------------------*/
oMutate: procedure expose m.
parse arg m, name
m.class.o2c.m = class4Name(name)
return m
endProcedure oMutate
/*--- return object obj cast'd to class named cl --------------------*/
oCast: procedure expose m.
parse arg obj, cl
if abbrev(obj, 'CLASS.CAST.') then
obj = substr(obj, 1 + pos(':', obj, 12))
return 'CLASS.CAST.'class4Name(cl)':'obj
endProcedure oCast
/*--- copy object m of class c to t ---------------------------------*/
oClaCopy: procedure expose m.
parse arg ggCla, m, t
if t == '' then do
if ggCla == m.class.classW then
return m
t = mBasicNew(ggCla)
end
else if ggCla == m.class.classW then do
m.t = o2String(m)
m.class.o2c.t = m.class.classV
return t
end
ggCode = ggCla'.OMET.oCopy'
interpret m.ggCode
m.class.o2c.t = ggCla
return t
endProcedure oClaCopy
/*--- copy object m to t --------------------------------------------*/
oCopy: procedure expose m.
parse arg m, t
return oClaCopy(objClass(m), m, t)
endProcedure oCopy
/*--- copy object to a newly created object -------------------------*/
oCopyNew: procedure expose m.
parse arg m
if symbol('m.class.o2c.m') == 'VAR' then
return oCopy(m, mBasicNew(m.class.o2c.m))
return oCopy(m, mBasicNew(m.class.classV))
endProcedure oCopyNew
/*--- return a new instance of a subclass of Run
with code code in method oRun -------------------------------*/
oRunner: procedure expose m.
if arg() >= 1 then
r = oNew(classNew('n* ORun u ORun, m oRun' arg(1)))
else
r = oNew(classNew('n| ORun u ORun'))
return r
endProcedure oRunner
/*--- set code for runner -------------------------------------------*/
oRunnerCode: procedure expose m.
parse arg r, code
call classSetMet objClass(r), 'oRun', code
return r
endProcedure oRunnerCode
/*--- run method oRun of object m -----------------------------------*/
oRun: procedure expose m.
parse arg m, arg, arg2, arg3
interpret objMet(m, 'oRun')
return
endProcedure oRun
/*--- run method oRun and return output in new JBuf ------------------*/
oRun2File: procedure expose m.
parse arg rn
b = jBuf()
call pipeBeLa '>' b
call oRun rn
call pipeEnd
return b
endProcedure oRun2File
/*--- cast the object to a file -------------------------------------*/
o2File: procedure expose m.
parse arg m
interpret objMet(m, 'o2File')
call err 'o2file did not return'
endProcedure o2File
/*--- cast the object to a String -----------------------------------*/
o2String: procedure expose m.
parse arg m, arg, arg2, arg3
interpret objMet(m, 'o2String')
return err('o2String did not return')
endProcedure o2String
/*--- return a short string representation of an object -------------*/
o2Text: procedure expose m.
parse arg m, maxL
if m == '' then
return '@ null object'
if maxL == '' then
maxL = 80
cl = objClass(m, '?')
if cl = m.class.classV then
l = m.m
else if cl == m.class.classW then
l = substr(m, 2)
else if cl == '?' then
l = '@'m 'class=???'
else do
l = '@'m 'class='className(cl)
ff = cl'.FLDS'
do fx=1 to m.ff.0 while length(l) < maxL + 3
if m.ff.fx == '' then
l = l', .='m.m
else do
f1 = substr(m.ff.fx, 2)
l = l',' f1'='m.m.f1
end
end
end
if length(l) <= maxL then
return l
return left(l, maxL-3)'...'
endProcedure o2Text
/*--- cast a String to an object -----------------------------------*/
s2o: procedure expose m.
parse arg str
return m.class.escW || str
return r
endProcedure s2o
oIfStr: procedure expose m.
parse arg m
if length(m) > 200 then
return m
cl = objClass(m, '')
if cl = '' then
return m
else if cl = m.class.classV then
return = m.m
else if cl == m.class.classW then
return = substr(m, 2)
else if arg() >= 2 then
return arg(2)
else
call err m 'of class' className(cl) 'not kind of string'
endProcedure oIfStr
/* copy o end *******************************************************/
/* copy class begin **************************************************
a class has fields and methods,
the class module handles only the metadata,
object handling (instanciation, methodcalls etc.) is in O
classes are represented by a metadata tree,
its nodes of class class have diffenrent types:
class subTypes (implemented as choices)
'u' = union: NAME -> name of class if <> '',
stem -> references component classes
'f' = field: NAME -> fieldName (x.name),
CLASSS -> reference to class of fieldValue
's' = stem: class -> ref to class at each stem element
'c' = choice: NAME -> selection value,
CLASS -> ref to class of choice
'm' = method: NAME -> methodName,
MET -> rexxCode
'r' = reference CLASS -> ref to type at reference
special classes
'v' = Value String Value
'w' = ValueAsA StringValue packed into an adress (prefix escW)
'o' = AnyClass any class with dynamic classLookup on object
formal definition, see classIni
class expression (ce) allow the following syntax
ce = className | classAdr | 'n'('?','*','|')? name union | union
| 'f' name ce | 's' ce | 'c' name ce | 'm' name code | r ce?
union = 'u' (ce (',' ce)*)?
the modifiers of 'n' means
none: create new class, fail if name already defined
'?': create new class or return old of that name
'*': use an exisiting class of that definition
or create new class with a unique name
'|': create a new class with a unique name
'm' extends to then end of the ce (line)
'u' allows several components, in classNew also multiple args
Achtung, aber NICHT rekursiv|
***********************************************************************/
classIni: procedure expose m.
if m.class.ini == 1 then
return
m.class.ini = 1
call mapIni
call mNewArea 'CLASS', 'CLASS'
call mapReset 'CLASS.N2C' /* name to class */
/* to notify other modules (e.g. O) on every new named class */
m.class.addedSeq.0 = 0
m.class.addedListeners.0 = 0
m.class.classV = classBasicNew('u', 'v')
m.class.classW = classBasicNew('u', 'w')
m.class.classO = classBasicNew('u', 'o')
cr = mIterBegin('CLASS')
do while assNN('cr', mIter(cr))
call classAddedNotify cr
end
m.class.class = classNew('n class u v',
, 'c u u f NAME v, s r class',
, 'c f u f NAME v, f CLASS r class',
, 'c s f CLASS r class' ,
, 'c c u f NAME v, f CLASS r class',
, 'c m u f NAME v, f MET v' ,
, 'c r f CLASS r class' )
m.class.cNav = '.'
m.class.cRef = '|'
m.class.cDot = '%'
m.class.cPath = m.class.cNav || m.class.cRef || m.class.cDot
m.class.classR = classNew('r')
return
endProcedure classIni
/*--- return the name of a class if it exists otherwise the class ---*/
className: procedure expose m.
parse arg cl
if m.cl = 'u' & m.cl.name \= '' then
return m.cl.name
else
return cl
endProcedure class4Name
/*--- return class of given name or class ---------------------------*/
class4Name: procedure expose m.
parse arg nm
if symbol('m.class.n2c.nm') == 'VAR' then
return m.class.n2c.nm
if arg() > 1 then
return arg(2)
call err 'no class' nm
endProcedure class4Name
classBasicNew: procedure expose m.
parse arg ty, nm, cl, nmTy
n = mNew('CLASS')
m.n = ty
m.n.name = nm
m.n.nameComp = nm
if ty == 'u' & nm \== '' then do
if pos(nmTy, '*|') > 0 then do
m.n.name = nm || substr(n, 1+lastPos('.', n))
if nmTy == '*' then
m.n.nameComp = nm'*'
else
m.n.nameComp = m.n.name
end
call mapAdd class.n2c, m.n.name, n
end
call mapAdd class.n2c, n, n
m.n.class = ''
m.n.met = ''
m.n.0 = 0
m.n.sub.0 = 0
m.n.super.0 = 0
if length(ty) \== 1 | pos(ty, 'ufscrm') < 1 then
call err 'bad type' ty': classBasicNew('ty',' nm',' cl')'
else if nm == '' & pos(ty, 'fm') > 0 then
call err 'empty name: classBasicNew('ty',' nm',' cl')'
else if nm \== '' & ty \== 'c' ,
& ( verify(nm, '0123456789') < 1 ,
| verify(nm, ' .*|@', 'm') > 0 ) then
call err 'bad name' nm': classBasicNew('ty',' nm',' cl')'
else if nm \= '' & pos(ty, 'rs') > 0 then
call err 'name for type' ty': classBasicNew('ty',' nm',' cl')'
else if pos(ty, 'fcrs') > 0 then do
if cl \== '' then
m.n.class = mapGet(class.n2c, cl)
else if ty == 'r' then
m.n.class = m.class.classO
/* else say 'cl leer' ty nm nmTy ???????*/
end
else if ty == 'm' then
m.n.met = cl
else if cl \== '' then
call err 'class for type' ty': classBasicNew('ty',' nm',' cl')'
return n
endProcedure classBasicNew
classNew: procedure expose m.
parse arg clEx 1 ty rest
if abbrev(ty, 'n') then do
if wordPos(ty, 'n n? n* n|') < 1 then
call err 'bad type' ty': classNew('clEx')'
nmTy = right(ty, 1)
parse var rest nm ty rest
if ty \== 'u' then
call err 'class name' nm 'without u: classNew('clEx')'
if nmTy == 'n' then do
if mapHasKey(class.n2c, nm) then
call err 'class' nm 'already defined: classNew('clEx')'
end
else if nmTy == '?' then do
if mapHasKey(class.n2c, nm) then
return mapGet(class.n2c, nm)
end
else if nmTy == '*' then do
if arg() \== 1 then
call err 'arg()='arg() 'for n* : classNew('clEx')'
if mapHasKey(class.n2c, clEx) then
return mapGet(class.n2c, clEx)
end
n = classBasicNew('u', nm, , nmTy)
end
else do
nmTy = ''
if arg() \== 1 then
call err 'arg()='arg() 'without name: classNew('clEx')'
if mapHasKey(class.n2c, clEx) then
return mapGet(class.n2c, clEx)
if length(ty) <> 1 | pos(ty, 'ufscmr') < 1 then
call err 'bad type' ty': classNew('clEx')'
nm = ''
if pos(ty, 'usr') < 1 then
parse var rest nm rest
if ty = 'u' then do
n = classBasicNew(ty)
end
else if ty = 'm' then do
n = classBasicNew(ty, nm, rest)
rest = ''
end
else do
parse var rest t1 rest
if wordPos(t1, 'u f s c m r') > 0 then do
n = classBasicNew(ty, nm)
m.n.class = classNew(t1 rest)
rest = ''
end
else do
n = classBasicNew(ty, nm, t1)
end
end
end
if ty \== 'u' then do
if rest \== '' then
call err 'rest' rest 'but end of classExp expected:' clEx
end
else do
lx = 0
do while lx < length(rest)
cx = pos(',', rest, lx+1)
if cx <= lx | word(substr(rest, lx+1), 1) == 'm' then
cx = length(rest)+1
a = mAdd(n, classNew(strip(substr(rest, lx+1, cx-lx-1))))
lx=cx
end
pref = ''
do ax=2 to arg()
if length(arg(ax)) == 1 & arg(ax) \== ' ' then
pref = arg(ax)' '
else
call mAdd n, classNew(pref || arg(ax))
end
end
cr = mIterBegin('CLASS')
do while assNN('cr', mIter(cr)) & \ classEqual(n, cr)
end
isNew = cr == n
if \ isNew then do
if mapRemove(class.n2c, n) \== n then
call err 'mapRemove('n') mismatch'
if m.n == 'u' & m.n.name \== '' then
if mapRemove(class.n2c, m.n.name) \== n then
call err 'mapRemove('m.n.name') mismatch'
call mFree n
n = cr
end
if nmTy == '' | nmTy == '*' then
call mapAdd class.n2c, clEx, n
if isNew then
call classAddedNotify n
return n
endProcedure classNew
classAdd1Method: procedure expose m.
parse arg clNm, met code
cl = class4Name(clNm)
if pos(m.cl, 'uvw') < 1 then
call err 'class not nvw but' m.cl,
'in classAdd1Method('clNm',' met code')'
do sx = 1 to m.cl.0
su = m.cl.sx
if m.cl.sx = 'm' & m.cl.name == met then
call err 'met' met 'already in' clNm
end
call mAdd cl, classNew('m' met code)
return cl
endProcedure classAdd1Method
/*--- register a listener for newly defined classes
and call it for all already defined classes -----------------*/
classAddedRegister: procedure expose m.
parse arg li
call mAdd 'CLASS.ADDEDLISTENERS', li
do cx = 1 to m.class.addedSeq.0
call oRun li, m.class.addedSeq.cx
end
return
endProcedure classAddedRegister
/*--- to notify all listeners about a newly defined classes --------*/
classAddedNotify: procedure expose m.
parse arg cl
call mAdd 'CLASS.ADDEDSEQ', cl
if m.cl == 'u' then
call classSuperSub cl
m.cl.flds.0 = 0
m.cl.stms.0 = 0
m.cl.stemCl = ''
m.cl.valueCl = ''
call classAddFields cl, cl
m.cl.hasFlds = m.cl.flds.0 > 1 ,
| (m.cl.flds.0 == 1 & m.cl.flds.1 \== '') | m.cl.stms.0 > 0
do lx = 1 to m.class.addedListeners.0
call oRun m.class.addedListeners.lx, cl
end
return
endProcedure classAddedNotify
/*--- add supper and sub links for class cl -------------------------*/
classSuperSub: procedure expose m.
parse arg cl
do ux=1 to m.cl.0
u1 = m.cl.ux
if m.u1 == 'u' then do
if mPos(cl'.SUPER', u1) > 0 then
call err u1 'is already in' cl'.SUPER.'sx ,
|| ': classSuperSub('cl')'
call mAdd cl'.SUPER', u1
if mPos(cl'.SUB', cl) > 0 then
call err cl 'is already in' u1'.SUB.'sx ,
|| ': classSuperSub('cl')'
call mAdd u1'.SUB', cl
end
end
return
endProcedure classSuperSub
/*--- add the the fields of class cl to stem f ----------------------*/
classAddFields: procedure expose m.
parse arg f, cl, nm
n1 = substr(nm, 1+abbrev(nm, '.') )
if symbol('m.f.f2c.n1') \== 'VAR' then
m.f.f2c.n1 = cl
/* else if cl == m.f.f2c.n1 then
return 0 */
if cl == m.class.classV | cl == m.class.classW | m.cl=='r' then do
if nm == '' then do
if m.f.valueCl \== '' then
return err('value mistmatch')
m.f.valueCl = cl
end
if nm == '' then do
call mMove f'.FLDS', 1, 2
m.f.flds.1 = ''
end
else do
call mAdd f'.FLDS', nm
end
return 0
end
if m.cl = 's' then do
if m.cl.class == '' then
call err 'stem null class'
a1 = mAdd(f'.STMS', nm)
m.a1.class = m.cl.class
if nm == '' then
m.f.stemCl = m.cl.class
return 0
end
if m.cl = 'f' then
return classAddFields(f, m.cl.class, nm'.'m.cl.name)
if m.cl.class \== '' then
return classAddFields(f, m.cl.class, nm)
do tx=1 to m.cl.0
call classAddFields f, m.cl.tx, nm
end
return 0
endProcedure classAddFields
/*--- return true iff the two classes are equal -------------------*/
classEqual: procedure expose m.
parse arg l, r
if m.l \== m.r | m.l.nameComp \== m.r.nameComp ,
| m.l.class \== m.r.class | m.l.0 \== m.r.0 then
return 0
if m.l.met \== m.r.met then
return 0
do sx=1 to m.l.0
if m.l.sx \== m.r.sx then
return 0
end
return 1
endProcedure classEqual
/*--- print object ---------------------------------------------------*/
objOut: procedure expose m.
parse arg m, pr, p1
c = objClass(m, '')
if c == '' then
call out p1 'no class for' m
else if c == m.class.classV then
call out p1 || m.m
else if c == m.class.classW then
call out p1 || o2String(m)
else
call classOutDone c, m, pr, p1
return
endProcedure objOut
/*--- recursively output (with out:) the object a with class t -------*/
classOut: procedure expose m.
parse arg t, a, pr, p1
return classOutDone(if(t=='',m.class.classO, t), a, pr, p1)
endProcedure classOut
/*--- ouput object a with class t and stopper done ------------------*/
classOutDone: procedure expose m. done.
parse arg t, a, pr, p1
if p1 == '' then
p1 = pr
if right(p1, 1) \== ' ' then
p1 = p1' '
if done.ini \== 1 then do
done.ini = 1
t = class4Name(t, t)
p1 = p1'@'a' '
end
if done.t.a == 1 then
return out(p1'done :'className(t) '@'a)
done.t.a = 1
if t = m.class.classO then do
if a == '' then
return out(p1'obj null')
t = objClass(a, '')
if t = '' then
return out(p1'obj has no class @'m.a)
else
return classOutDone(t, a, pr, p1'isA')
end
if t == m.class.classV then
return out(p1'=' m.a)
if t == m.class.classW == 'w' then
return out(p1'}' substr(a, 2))
if m.t == 'f' then
return classOutDone(m.t.class, a'.'m.t.name, pr, p1'.'m.t.name)
if m.t == 'r' then do
if m.a == '' then
return out(p1'refTo :'className(m.t.class) '@null@')
else
return classOutDone(m.t.class, m.a, pr,
, p1'refTo @'m.a)
end
if m.t = 'u' then do
t1 = m.t.1
vv = m.t.0 > 0 & m.t.1 == m.class.classV
call out p1 || if(m.t.name == '', 'union', ':'m.t.name) ,
|| copies(' =' m.a, vv)
do ux=1+vv to m.t.0
call classOutDone m.t.ux, a, pr' '
end
return 0
end
if m.t = 's' then do
call out p1'stem' m.a.0
do ux=1 to m.a.0
call classOutDone m.t.class, a'.'ux, pr' ', pr' .'ux
end
return 0
end
if m.t = 'c' then do
if m.t.name = m.a then
call classOutDone m.t.class, a, pr, p1'choice' m.a
return 0
end
if m.t = 'm' then
return 0
return err('bad class type' m.t)
endProcedure classOutDone
/* copy class end ***************************************************/
/* copy map begin ******************************************************
a map stores values at keys
it may also maintain a list of keys
the basic ideas are similar to the java Interface java.util.Map
contrary to stems we also handle keys longer then 250 bytes
***********************************************************************/
/*--- initialize the module ------------------------------------------*/
mapIni: procedure expose m.
if m.map.ini = 1 then
return
m.map.ini = 1
call mIni
m.map.0 = 0
m.map.inlineSearch = 1
call mapReset map.inlineName, map.inline
return
endProcedure mapIni
mapInline: procedure expose m.
parse arg pName, opt
if mapHasKey(map.inlineName, pName) then do
im = mapGet(map.inlineName, pName)
if pos('l', opt) < 1 & symbol('m.im.0') \== 'VAR' then do
m.im.0 = m.im.lEnd - m.im.lBegin - 1
do ix=1 to m.im.0
m.im.ix = strip(sourceline(ix+m.im.lBegin), 't')
end
end
return im
end
name = '/'
do lx = m.map.inlineSearch to sourceline()
if \ abbrev(sourceline(lx), '$') then
iterate
li = sourceline(lx)
s1 = pos('/', li)+ 1
if s1 < 3 | s1 > 4 then
iterate
s2 = pos('/', li, s1)
if s2 <= s1 then
iterate
if s1 == 3 then do
if name \== substr(li, s1, s2-s1) then
iterate
im = 'MAP.INLINE.' || (m.map.inline.0+1)
call mapAdd map.inlineName, name, im
m.im.lBegin = lBeg
m.im.lEnd = lx
m.im.mark = mrk
if name == pName then do
m.map.inlineSearch = lx+1
return mapInline(pName)
end
name = '/'
end
else if \ mapHasKey(map.inlineName,
, substr(li, s1, s2-s1)) then do
lBeg = lx
mrk = substr(li, 2, s1-3)
name = substr(li, s1, s2-s1)
end
else do
name = '/'
end
end
if pos('r', opt) > 0 then
return ''
return err('no inline data /'pName'/ found')
endProcedure mapInline
/*--- create a new map ----------------------------------------------*/
mapNew: procedure expose m.
parse arg opt
m.map.0 = m.map.0 + 1
return mapReset('MAP.'m.map.0 , opt)
endProcedure mapNew
/*--- make an empty map, if opt <> '' maintain stem of keys
('K' in map.keys, '=' in a else in opt) --------------*/
mapReset: procedure expose m.
parse arg a, opt
if symbol('m.map.keys.a') == 'VAR' then
call mapClear a
if opt = '=' then
st = a
else if translate(opt) = 'K' then
st = 'MAP.KEYS.'a
else
st = opt
m.map.keys.a = st
if st \== '' then
m.st.0 = 0
return a
endProcedure
/*--- add a new key value pair to the map ----------------------------*/
mapAdd: procedure expose m.
parse arg a, ky, val
vv = mapValAdr(a, ky, 'a')
m.vv = val
return val
endProcedure mapAdd
/*--- change the value at a key or add key value ---------------------*/
mapPut: procedure expose m.
parse arg a, ky, val
vv = mapValAdr(a, ky, 'p')
m.vv = val
return val
endProcedure mapPut
/*--- return 1 if key ky exists in map a, 0 otherwise ----------------*/
mapHasKey: procedure expose m.
parse arg a, ky
return mapValAdr(a, ky) \== ''
endProcedure mapHasKey
/*--- return the value of key ky in map a if it exists,
else if called with a third argument return third argument
else issue an error ----------------------------------------*/
mapGet: procedure expose m.
parse arg a, ky
vv = mapValAdr(a, ky)
if vv \== '' then
return m.vv
else if arg() > 2 then
return arg(3)
else
return err('missing key in mapGet('a',' ky')')
endProcedure mapGet
/*--- return a stem of all keys --------------------------------------*/
mapKeys: procedure expose m.
parse arg a
if m.map.keys.a == '' then
call err 'mapKeys('a') with no keys'
return m.map.keys.a
endProcedure mapKeys
/*--- remove a key from the map, do nothing if it is missing ---------*/
mapRemove: procedure expose m.
parse arg a, ky
vv = mapValAdr(a, ky)
if vv == '' then
return ''
if m.map.keys.a \== '' then do
trace ?R /* not tested yet ???wkTest */
k = m.map.keys.a
mx = m.k.0
do i=1 to mx
if m.k.i == ky then do
m.k.i = m.k.mx
m.k.0 = mx - 1
return
end
end
end
val = m.vv
drop m.a.ky
return val
endProcedure mapRemove
/*--- remove all entries ---------------------------------------------*/
mapClear: procedure expose m.
parse arg a
st = mapKeys(a)
liLe = 243 - length(a)
do kx=1 to m.st.0
ky = m.st.kx
drop m.st.kx
if length(ky) <= liLe then do
drop m.a.ky
end
else do
adr = mapValAdr(a, ky)
if adr \== '' then do
ha = left(adr, lastPos('.', adr) - 3)
do i = 1 to m.ha.k.0
drop m.ha.k.i m.ha.v.i
end
drop m.ha.k.0
end
end
end
m.st.0 = 0
return a
endProcedure mapClear
/*--- return the value pointer for a key, '' if non existing
with fun = 'a' add a key, with 'p' put a key ------------*/
mapValAdr: procedure expose m.
parse arg a, ky, fun
if length(ky) + length(a) <= 243 then do
res = a'.'ky
if symbol('m.res') == 'VAR' then do
if fun == 'a' then
call err 'duplicate key' ky 'in map' a
return res
end
else if fun == '' then
return ''
end
else do
len = 243 - length(a)
q = len % 4
ha = a'.'left(ky, len - 2 * q) || substr(ky,
, (length(ky)-len) % 2 + 2 * q, q) || right(ky, q)
if symbol('M.ha.k.0') == 'VAR' then do
do i=1 to m.ha.k.0
if m.ha.k.i == ky then do
if fun == 'a' then
call err 'duplicate key' ky ,
'map' a 'hash' ha'.K.'i
return ha'.V.'i
end
end
end
else do
i = 1
end
if fun == '' then
return ''
if i > 9 then
call err 'overflow long key' y 'in map' a 'hash' ha'.K.'i
m.ha.k.0 = i
m.ha.k.i = ky
res = ha'.V.'i
end
if m.map.keys.a \== '' then
call mAdd m.map.Keys.a, ky
m.res = ''
return res
endProcedure mapValAdr
/* copy map end *******************************************************/
/* copy m begin ********************************************************
we use variables as follows
m. stem m: all global data and object data that must survive
a procedure call (m for memory in Memoria of B5000)
m.<mbr>.** to avoid conflicts: every rexx Module (copy) should
only allocate addresses m.<mbr>.** with <mbr> the name of
the rexx module
we pass parameters around (e.g. a=address, m=memory, st=stem)
and the called function may use m.a or m.a.subField etc.
gg*: local variable in subroutines without procedure
everything else: temporary data within procedure
every subroutine is declared as procedure expose m.
(also if no m. variable is used, because e.g. of error handling)
the few subroutines that cannot use procedure, should use only
variables starting with gg
***********************************************************************/
/*---make an area -----*/
mNewArea: procedure expose m.
parse arg nm, adr, newCd, freeCd
m.m.area.0 = m.m.area.0 + 1
a = 'M.AREA.'m.m.area.0
if adr == '=' then
adr = nm
else if adr == '' then
adr = 'M.'m.m.area.0
if symbol('m.m.n2a.adr') == 'VAR' then
call err 'adr' adr 'for area' nm 'already used'
m.m.n2a.adr = a
call mAlias adr, nm
m.m.p2a.adr = a
m.a.0 = 0
m.a.free.0 = 0
m.a.address = adr
m.a.newCode = newCd
m.a.freeCode = freeCd
return nm
endProcedure mNewArea
mAlias: procedure expose m.
parse arg oldNa, newNa
if symbol('m.m.n2a.oldNa') \== 'VAR' then
call err 'area' oldNa 'does not exist'
if oldNa == newNa then
return
if symbol('m.m.n2a.newNa') == 'VAR' then
call err 'newName' newNa 'for old' oldNa 'already used'
m.m.n2a.newNa = m.m.n2a.oldNa
return
endProcedure mAlias
mBasicNew: procedure expose m. ggArea
parse arg name
if symbol('m.m.n2a.name') \== 'VAR' then
call err 'area' name 'does not exists'
ggArea = m.m.n2a.name
if m.ggArea.free.0 > 0 then do
fx = m.ggArea.free.0
m.ggArea.free.0 = fx-1
m = m.ggArea.free.fx
end
else do
m.ggArea.0 = m.ggArea.0 + 1
m = m.ggArea.address'.'m.ggArea.0
end
return m
endProcedure mBasicNew
mNew: procedure expose m.
labelMNew:
parse arg name, arg, arg2, arg3
m = mBasicNew(name)
interpret m.ggArea.newCode
return m
endProcedure mNew
mReset: procedure expose m.
parse arg a, name
ggArea = m.m.n2a.name
m = a
interpret m.ggArea.newCode
return m
endProcedure mReset
mFree: procedure expose m.
parse arg m
p = 'M.P2A.'left(m, lastPos('.', m)-1)
area = m.p
if m.area.freeCode \== '' then
interpret m.area.freeCode
fx = m.area.free.0 + 1
m.area.free.0 = fx
m.area.free.fx = m
return
endProcedure mFree
/*--- iterate over all allocate elements of an area ------------------*/
mIterBegin: procedure expose m.
parse arg nm
a = m.m.n2a.nm
return m.a.address'.0'
endProcedure mIterBegin
mIter: procedure expose m.
parse arg cur
if cur == '' then
return ''
lx = lastPos('.', cur)
p = 'M.P2A.'left(cur, lx-1)
a = m.p
ix = substr(cur, lx+1)
do ix=ix+1 to m.a.0
n = m.a.address'.'ix
do fx=1 to m.a.free.0 while m.a.free \== n
end
if fx > m.a.free.0 then
return n
end
return ''
endProcedure mIter
/*--- cut stem a to length len ---------------------------------------*/
mCut: procedure expose m.
parse arg a, len
m.a.0 = len
return a
endProcedure mCut
/*--- add one or several arguments to stem m.a -----------------------*/
mAdd: procedure expose m.
parse arg a
ix = m.a.0
do ax = 2 to arg()
ix = ix + 1
m.a.ix = arg(ax)
end
m.a.0 = ix
return a'.'ix
endProcedure mAdd
/*--- pop last element from stem m.a ---------------------------------*/
mPop: procedure expose m.
parse arg a
ix = m.a.0
if ix < 1 then
call err 'pop from empty stem' a
m.a.0 = ix-1
return m.a.ix
endProcedure mPop
/*--- add to m.dst.* a (sub)sequence of m.src.* ----------------------*/
mAddSt: procedure expose m.
parse arg dst, src
dx = m.dst.0
do sx = 1 to m.src.0
dx = dx + 1
m.dst.dx = m.src.sx
end
m.dst.0 = dx
return
endProcedure mAddSt
/*--- find position of first occurrence of ele in stem m,
return 0 if nonemove a part of a stem -----------------------*/
mPos: procedure expose m.
parse arg m, ele, sx
if sx == '' then
sx = 1
do x=sx to m.m.0
if m.m.x = ele then
return x
end
return 0
endProcedure mPos
/*--- move a part of a stem ------------------------------------------*/
mMove: procedure expose m.
parse arg m, sx, dx
if dx < sx then do
y = dx
do x=sx to m.m.0
m.m.y = m.m.x
y = y + 1
end
end
else if dx > sx then do
y = m.m.0 + dx - sx
do x=m.m.0 by -1 to sx
m.m.y = m.m.x
y = y - 1
end
end
m.m.0 = m.m.0 + dx - sx
return
endProcedure mMove
/*--- insert a stem into another ------------------------------------*/
mInsert: procedure expose m.
parse arg m, tx, st
call mMove m, tx, tx+m.st.0
do sx=1 to m.st.0
dx = tx-1+sx
m.m.dx = m.st.sx
end
return
endProcedure mInsert
/*--- strip all elements of a stem -----------------------------------*/
mStrip: procedure expose m.
parse arg st, opt
if opt == '' then
opt = 'b'
do x=1 to m.st.0
m.st.x = strip(m.st.x, opt)
end
return st
endProcedure mStrip
/*--- cat all elements of a stem together ----------------------------*/
mCat: procedure expose m.
parse arg st, mid
if m.st.0 < 1 then
return ''
res = m.st.1
do x=2 to m.st.0
res = res || mid || m.st.x
end
return res
endProcedure mCat
mIni: procedure expose m.
if m.m.ini = 1 then
return
m.m.ini = 1
m.mAlfLC = 'abcdefghijklmnopqrstuvwxyz'
m.mAlfUC = translate(m.mAlfLC)
m.mAlfa = m.mAlfLC || m.mAlfUC
m.mAlfNum = m.mAlfa || '0123456789'
m.mAlfDot = m.mAlfNum || '.'
m.m.area.0 = 0
call mNewArea
return
endProcedure mIni
/* copy m end *********************************************************/
/* copy adrIsp begin *************************************************/
/**********************************************************************
lmd: catalog read
call sequence: lmdBegin, lmdNext*, lmdEnd
mit lmd service (mit save in file und read,
weil list zu langsam und listcat abstürzt)
1. arg (grp) als group dataset für lmd save
und dd name für file read
***********************************************************************/
lmdBegin: procedure expose m.
parse arg grp, lev
call adrIsp 'lmdinit listid(lmdId) level('lev')'
res = adrIsp('lmdlist listid(&lmdId) option(save) group('grp')', 4)
call adrIsp 'lmdfree listid(&lmdId)'
if res = 0 then do
call trc timing() 'lmdlist save' grp lev
call adrTso 'alloc dd('grp') shr dsn('grp'.datasets)'
end
else do
call trc 'no datasets found' timing() 'lmdlist save' grp lev
call adrTso 'alloc dd('grp') dummy'
end
call readDDBegin grp
return /* end lmdBegin */
lmdNext:
parse arg ggGrp, ggSt, withVolume
if \ readDD(ggGrp, ggSt) then
return 0
if withVolume \== 1 then
do ggIx=1 to value(ggSt'0')
x = value(ggSt || ggIx, word(value(ggSt || ggIx), 1))
end
return 1
endSubroutin lmdNext
lmdEnd: procedure expose m.
parse arg grp
call readDDEnd grp
call adrTso 'free dd('grp')'
return /* end lmdEnd */
lmd: procedure expose m.
parse arg lev, withVol
call lmdBegin gg1, lev
do while lmdNext(gg1, q., withVol)
do x=1 to q.0
call out q.x
end
end
call lmdEnd gg1
return
endProcedure lmd
/**********************************************************************
member list of a pds:
call sequence x=lmmBegin(dsn) lmmNext(x) * lmmEnd(x)
***********************************************************************/
lmm: procedure expose m.
parse arg dsn
id = lmmBegin(dsn)
do ix=1 by 1
m = lmmNext(id)
if m = '' then
leave
call out m
end
call lmmEnd id
return
endProcedure lmm
lmmBegin: procedure expose m.
parse arg dsn
mbr = dsnGetMbr(dsn)
pds = dsnSetMbr(dsn, )
call adrIsp "LMINIT DATAID(lmmId) DATASET('"pds"') ENQ(SHRW)"
call adrIsp "LMOPEN DATAID("lmmId") OPTION(INPUT) "
res = lmmId
if mbr <> '' then
res = res 'pattern('mbr')'
return res
endProcedure lmmBegin
lmmEnd: procedure expose m.
parse arg lmmId opt
call adrIsp "LMMLIST DATAID("lmmId") option(free)", 8
call adrIsp "LMCLOSE DATAID("lmmId")"
call adrIsp "LMFREE DATAID("lmmId")"
return
endProcedure lmmEnd
lmmNext: procedure expose m.
parse arg lmmId opt
if adrIsp("LMMLIST DATAID("lmmid")" ,
"OPTION(LIST) MEMBER(Mbr)" opt, 4 8) = 0 then
return strip(mbr)
else
return ''
endProcedure lmmNext
lmmRm: procedure expose m.
parse arg dsn, mbrs
mbrs = dsnGetMbr(dsn) mbrs
pds = dsnSetMbr(dsn, )
call adrIsp "LMINIT DATAID(lmmId) DATASET("pds") ENQ(SHRW)"
call adrIsp "LMOPEN DATAID("lmmId") OPTION(OUTPUT) "
err = ''
do wx=1 to words(mbrs)
m1 = word(mbrs, wx)
rr = adrIsp("lmmDel dataid("lmmId") member("m1")", 0 8 12)
if rc = 0 then
say 'removed' m1 'from' pds
else if rc = 8 then
say 'not found' m1 'in' pds
else do
err = 'error deleting' m1 'in' pds 'rc' rr strip(zerrlm)
say err
leave
end
end
call adrIsp "LMCLOSE DATAID("lmmId")"
call adrIsp "LMFREE DATAID("lmmId")"
if err <> '' then
call err err
return
endProcedure lmmRm
/*--- address ispf with error checking -------------------------------*/
adrIsp:
parse arg ggIspCmd, ggRet
address ispexec ggIspCmd
if rc = 0 then return 0
else if ggRet == '*' then return rc
else if wordPOS(rc, ggRet) > 0 then return rc
else
call err 'adr ispExec rc' rc 'in' ggIspCmd':' strip(zerrlm)
endSubroutine adrIsp
/*--- address editor with error checking -----------------------------*/
adrEdit:
parse arg ggEditCmd, ggRet
address isrEdit ggEditCmd
if rc = 0 then return 0
else if ggRet == '*' then return rc
else if wordPOS(rc, ggRet) > 0 then return rc
else
call err 'adr isrEdit rc' rc 'for' ggEditCmd
endSubroutine adrEdit
/* copy adrIsp end *************************************************/
/* copy adrTso begin *************************************************/
/*--- send ggTsoCmd to tso, fail if rc <> 0 or not listed in ggRet ---*/
adrTso:
parse arg ggTsoCmd, ggRet
address tso ggTsoCmd
if rc == 0 then return 0
else if ggRet == '*' then return rc
else if wordPos(rc, ggRet) > 0 then return rc
else
call err 'adrTso rc' rc 'for' ggTsoCmd
return /* end adrTso */
/*--- format dsn from tso format to jcl format -----------------------*/
dsn2jcl: procedure expose m.
parse upper arg dsn ., addPrefix
if left(dsn,1) = "'" then
return strip(dsn, 'b', "'")
sp = sysvar('SYSPREF')
if sp == '' then
sp = userid()
cx = pos('~', dsn)
if cx < 1 & addPrefix == 1 then
return sp'.'dsn
do while cx \== 0
le = left(dsn, cx-1)
ri = substr(dsn, cx+1)
if right(le, 1) == '.' | left(ri, 1) == '.' then
dsn = le || sp || ri
else
dsn = le || left('.', le \== '') || sp ,
|| left('.', ri \== '') || ri
cx = pos('~', spec, cx)
end
return dsn
endProcedure dsn2Jcl
/*--- format dsn from jcl format to tso format -----------------------*/
jcl2dsn: procedure expose m.
parse arg dsn .
return "'"dsn"'"
endProcedure jcl2dsn
dsnSetMbr: procedure expose m.
parse arg dsn, mbr
bx = pos('(', dsn)
if bx > 0 then
dsn = strip(left(dsn, bx-1))
if mbr <> '' then
dsn = dsn'('strip(mbr)')'
return dsn
endProcedure dsnSetMbr
dsnGetMbr: procedure expose m.
parse arg dsn
lx = pos('(', dsn)
rx = pos(')', dsn, lx+1)
if lx < 1 then
return ''
else if lx < rx then
return substr(dsn, lx+1, rx-lx-1)
else
return strip(substr(dsn,lx+1))
endProcedure dsnGetMbr
/**********************************************************************
io: read or write a dataset with the following callsequences:
read: readDDBegin, readDD*, readDDEnd
write: writeBegin, writeDD*, writeEnd
readDD returns true if data read, false at eof
***********************************************************************/
/*--- prepare reading from a DD --------------------------------------*/
readDDBegin: procedure expose m.
parse upper arg ggDD
call errAddCleanup 'call readDDEnd' ggDD', "*"'
return /* end readDDBegin */
/*--- read from DD ggDD into ggSt, return false at eof ---------------*/
readDD:
parse arg ggDD, ggSt, ggCnt
if ggCnt = '' then
ggCnt = 100
call adrTso 'execio' ggCnt 'diskr' ggDD '(stem' ggSt')', 2
return (value(ggSt'0') > 0)
return /* end readDD */
/*--- finish reading DD ggDD ----------------------------------------*/
readDDEnd: procedure expose m.
parse upper arg ggDD, ggRet
call errRmCleanup 'call readDDEnd' ggDD', "*"'
return adrTso('execio 0 diskr' ggDD '(finis)', ggRet)
endProcedure readDDEnd
/*--- prepare writing to DD ggDD -------------------------------------*/
writeDDBegin: procedure expose m.
parse upper arg ggDD
/* ensure file is erased, if no records are written */
call adrTso 'execio' 0 'diskw' ggDD '(open)'
call errAddCleanup 'call writeDDEnd' ggDD', "*"'
return /* end writeDDBegin */
/*--- write to gg ggDD from stem ggSt, ggCnt records -----------------*/
writeDD:
parse arg ggDD, ggSt, ggCnt
if ggCnt == '' then
ggCnt = value(ggst'0')
call adrTso 'execio' ggCnt 'diskw' ggDD '(stem' ggSt')'
return
endSubroutine writeDD
/*--- end writing to dd ggDD (close) --------------------------------*/
writeDDEnd: procedure expose m.
parse upper arg ggDD, ggRet
call errRmCleanup 'call writeDDEnd' ggDD', "*"'
return adrTso('execio 0 diskw' ggDD '(finis)', ggRet)
endProcedure writeDDEnd
/*--- standardise a dsn spec
word1 dsName or -
word2 dd or -
word3 disp or -
word4 to first : attributes in tso format
after first : attributes for new allocation
----------------------------------------------------------------------*/
dsnSpec: procedure expose m.
parse upper arg spec
rr = '' /* put leading - in separate words */
do sx=1 while words(rr) < 3 & wx \= ''
wx = word(spec, sx)
do while abbrev(wx, '-') & words(rr) < 3
wx = substr(wx, 2)
rr = rr '-'
end
rr = rr wx
end
spec = rr subWord(spec, sx)
na = ''
dd = ''
di = ''
if left(spec, 1) = '&' then /* external spec is handled ok */
spec = strip(substr(spec, 2))
do wx=1 by 1
w = word(spec, wx)
if w = '' | abbrev(w, '.') | abbrev(w, ':') then
leave
else if wordPos(w, 'OLD SHR MOD NEW')>0 | abbrev(w, 'SYSO') then
di = w
else if w = 'CATALOG' then
di = di w
else if abbrev(w, 'DD(') then
dd = substr(w, 4, length(w)-4)
else if abbrev(w, 'DSN(') then
na = strip(substr(w, 5, length(w)-5))
else if na == '' then
na = dsn2jcl(w)
else if dd == '' then
dd = w
else if di == '' then
di = w
else
leave
end
if na == '' then
na = '-'
else if abbrev(na, "'") then
na = substr(na, 2, length(na)-2)
if dd == '' then dd = '-'
if di == '' then di = '-'
re = subword(spec, wx)
if abbrev(re, '.') then
re = substr(re, 2)
return na dd di re
endProcedure dsnSpec
/*--- alloc a dsn with dsnAlloc
if the dsn is inuse wait and retry
until either the allocation is successfull
or the timeout occurs --------------------------------------*/
dsnAllocWait: procedure expose m.
parse upper arg spec, pDi, pDD, timeOut
x = max(1, arg() - 1)
do rt=0
m.adrTsoAl.1 = ''
m.adrTsoAl.2 = ''
m.adrTsoAl.3 = ''
call outtrap m.adrTsoAl.
res = dsnAlloc(spec, pDi, pDD, '*')
call outtrap off
if \ abbrev(res, ' ') then
return res
msg = m.adrTsoAl.1'\n'm.adrTsoAl.2'\n'm.adrTsoAl.3
if rt > timeOut & timeOut \== '' then
return err('timeout allocating' spec time() '\n'msg)
if pos('DATA SET IS ALLOCATED TO ANOTHER', msg) < 1 then
return err('allocating' spec'\n'msg)
say time() 'sleep and retry alloc' spec
call sleep 1, 0
end
endProcedure dsnAllocWait
/*--- alloc a dsn or a dd
spec '-'<ddName>
datasetName? disposition? '.'? attributes? (':' newAtts)?
disp default disposition
dd default dd name
retRc erlaubte ReturnCodes (leer = 0)
returns if ok then ddName <rexx for free> otherwise rc -----*/
dsnAlloc: procedure expose m.
parse upper arg spec, pDi, pDD, retRc
parse value dsnSpec(spec) with na dd di rest
if na = '-' then
m.dsnAlloc.dsn = ''
else
m.dsnAlloc.dsn = na
if na == '-' & dd \== '-' & di == '-' & rest = '' then
return dd
if dd == '-' & pDD \== '' then
dd = pDD
if dd == '-' then do
if symbol('m.adrTso.ddNum') = 'VAR' then
dd = m.adrTso.ddNum + 1
else
dd = 1
m.adrTso.ddNum = dd
dd = 'DD' || dd
end
if di = '-' & pDi \== '' then
di = pDi
if di = '-' then
di = 'SHR'
else if pos('(', na) < 1 then
nop
else if di = 'MOD' then
call err 'disp mod for' na
else
di = 'SHR'
if pos('/', na) > 0 then
return csmAlloc(na dd di rest, retRc)
else
return tsoAlloc(na dd di rest, retRc)
endProcedure dsnAlloc
tsoAlloc: procedure expose m.
parse arg na dd disp rest ':' nn, retRc
c = 'alloc dd('dd')' disp
if na \== '-' then
c = c "DSN('"na"')"
else if disp = 'NEW' and nn \== '' then
c = c dsnCreateAtts(,nn)
call outtrap m.adrTsoAl.
alRc = adrTso(c rest, '*')
call outtrap off
if alRc = 0 then do
call errAddCleanup 'call tsoFree' dd', "*"'
return dd 'call tsoFree' dd';'
end
if nn \= '' & wordPos(disp, 'OLD SHR') > 0 ,
& sysDsn("'"m.dsnAlloc.dsn"'") == 'DATASET NOT FOUND' then do
say 'tsoAlloc creating' c rest ':'nn
call adrTso 'alloc dd('dd') new catalog' dsnCreateAtts(na, nn)
call adrTso 'free dd('dd')'
return tsoAlloc(na dd disp rest, retRc)
end
do ax=1 to m.adrTsoAl.0
say m.adrTsoal.ax
end
if retRc = '*' | wordPos(alRc, retRc) > 0 then
return ' ' alRc
call err 'tsoAlloc rc' alRc 'for' c rest
endProcedure tsoAlloc
tsoAtts: procedure expose m.
parse arg dsn
rc = listDsi("'"dsn"' SMSINFO")
if rc = 0 then
mv = ''
else if rc = 4 & sysReason = 19 then do
mv = 'UNITCNT(30)'
say 'multi volume' mv
end
else if rc ^= 0 then
call err 'listDsi rc' rc 'reason' sysReason,
sysMsgLvl1 sysMsgLvl2
al = 'CAT'
al = ''
if right(sysDsSms, 7) == 'LIBRARY' ,
| abbrev(sysDsSms, 'PDS') then
al = al 'DSNTYPE(LIBRARY)'
if sysUnits = 'TRACK' then
sysUnits = 'TRACKS'
al = al "DSORG("sysDSorg") MGMTCLAS("sysMgmtClass")",
"DATACLAS("sysDataClass")" ,
"RECFM("translate('1 2 3', ' 'sysREcFM, ' 123')")",
"LRECL("SYSLRECL")",
"blksize("sysBLkSIZE")",
"SPACE("sysPrimary"," sysSeconds")" sysUnits mv
return al
endProcedure tsoAtts
tsoFree: procedure expose m.
parse arg dd, ggRet
call adrTso 'free dd('dd')', ggRet
call errRmCleanup 'call tsoFree' dd', "*"'
return
endProcedure tsoFree
dsnCreateAtts: procedure expose m.
parse arg dsn, atts, forCsm
forCsm = forCsm == 1
aU = ' 'translate(atts)
if abbrev(atts, ':') then do
parse var atts a1 atts
bl = 32760
rl = substr(a1, 3)
if abbrev(a1, ':F') then do
if rl = '' then
rl = 80
recfm='f b'
bl = bl - (bl // rl)
end
else do
if rl = '' then
rl = bl-4
recfm = substr(a1, 2, 1) 'b'
end
if forCsm then
atts = atts "recfm("space(recfm, 0)") lrecl("rl")",
"blkSize("bl")"
else
atts = atts "recfm("recfm") lrecl("rl") block("bl")"
end
if pos('(', dsn) > 0 & pos(' DSNTYPE(', aU) < 1 ,
& pos(' DSORG(', aU) < 1 then
atts = atts 'dsntype(library) dsorg(po)'
if pos(' MGMTCLAS(', aU) < 1 then
atts = atts 'mgmtclas(COM#A091)'
if pos(' SPACE(', aU) < 1 then
if forCsm then
atts = atts 'space(10, 1000) cylinder'
else
atts = atts 'space(10, 1000) cyl'
if dsn == '' then
return atts
return "dataset('"dsnSetMbr(dsn)"')" atts
endProcedure dsnCreateAtts
/*--- read the dataset specified in ggDsnSpec to stem ggSt -----------*/
readDSN:
parse arg ggDsnSpec, ggSt
ggAlloc = dsnAlloc(ggDsnSpec, 'SHR', 'readDsN')
call adrTso 'execio * diskr' word(ggAlloc, 1) '(stem' ggSt' finis)'
interpret subword(ggAlloc, 2)
return
endSubroutine readDsn
/*--- write the dataset specified in ggDsnSpec from stem ggSt
write ggCnt records if not empty otherwise ggst0
if ggSay 1 then say ... records written to ... -------------*/
writeDSN:
parse arg ggDsnSpec, ggSt, ggCnt, ggSay
if ggCnt == '' then
ggCnt = value(ggst'0')
ggAlloc = dsnAlloc(ggDsnSpec, 'OLD', 'readDsN')
call adrTso 'execio' ggCnt 'diskw' word(ggAlloc, 1) ,
'(stem' ggSt 'open finis)'
interpret subword(ggAlloc, 2)
if ggSay == 1 | m.debug == 1 then
say ggCnt 'records written to' ggDsnSpec
return
endSubroutine writeDsn
copyDSN: procedure expose m.
parse arg frSpec, toSpec, ggSay
frDD = dsnAlloc(frSpec, 'SHR', 'FRDD')
toDD = dsnAlloc(toSpec, 'OLD', 'TODD')
call readDDBegin word(frDD, 1)
call writeDDBegin word(toDD, 1)
cnt = 0
do while readDD(word(frDD, 1), r.)
call writeDD word(toDD, 1), r.
cnt = cnt + r.0
end
call readDDEnd word(frDD, 1)
call writeDDEnd word(toDD, 1)
interpret ';' subword(frDD, 2) '; ; ;' subword(toDD, 2)
if ggSay == 1 | m.debug == 1 then
say cnt 'records copied from' frSpec 'to' to toSpec
return
endSubroutine writeDsn
/* copy adrTso end ****************************************************/
/* copy err begin ******************************************************
messages, errorhandling,help
***********************************************************************/
errIni: procedure expose m.
if m.err.ini == 1 then
return
call outIni
m.err.ini = 1
m.err.handler = ''
m.err.cleanup = ';'
m.err.opt = ''
return
endProcedure errIni
/* configure err -----------------------------------------------------*/
errReset: procedure expose m.
call errIni
parse arg m.err.opt, m.err.handler
if pos('I', translate(m.err.opt)) > 0 then
if errOS() \== 'LINUX' then
if sysVar('sysISPF') = 'ACTIVE' then
call adrIsp 'control errors return'
return
endSubroutine errReset
/*--- error routine: abend with message ------------------------------*/
err:
parse arg ggTxt, ggOpt
call errIni
drop err handler cleanup opt call return
if ggOpt == '' & m.err.handler \== '' then do
if 1 then do /* no detection of recursive err call loop
--> will anyway fail by stack overflow */
interpret m.err.handler
end
else do
/* avoid recursive err call loop */
drop call return
if symbol('m.err.call') \== 'VAR' then
m.err.call = 1
else
m.err.call = m.err.call + 1
if m.err.call > 10 then do
say 'errHandler loop:' m.err.handler
end
else do
m.err.return = 1
call errInterpret m.err.handler
m.err.call = m.err.call - 1
if m.err.return then
return result
end
end
end
call outPush
call errSay ggTxt, 'e'
call errCleanup
if ggOpt == '' then
ggOpt = m.err.opt
ggOpt = translate(ggOpt)
if pos('T', ggOpt) > 0 then do
trace ?r
say 'trace ?r in err'
end
if pos('H', ggOpt) > 0 then do
call errSay 'divide by zero to show stackHistory', 'e'
x = 1 / 0
end
call errSay 'exit(12)', 'e'
exit errSetRc(12)
endSubroutine err
/*--- error routine: user message cleanup exit -----------------------*/
errEx:
parse arg ggTxt
call errIni
call outPush
call errSay ggTxt
call errCleanup
exit 8
endProcedure errEx
errAddCleanup: procedure expose m.
parse arg code
if m.err.ini \== 1 then
call errIni
/* concatenate backwards, then it is executed also backwards */
m.err.cleanup = ';'code || m.err.cleanup
return
endProcedure errAddCleanup
errRmCleanup: procedure expose m.
parse arg code
if m.err.ini \== 1 then
call errIni
cx = pos(';'code';', m.err.cleanup)
if cx > 0 then
m.err.cleanup = left(m.err.cleanup, cx) ,
|| substr(m.err.cleanup, cx + length(code)+2)
return
endProcedure errRmCleanup
errCleanup: procedure expose m.
call errIni
cl = m.err.cleanup
if cl = ';' then
return
m.err.cleanup = ';'
call out 'err cleanup begin' cl
call errInterpret cl
call out 'err cleanup end' cl
return
endProcedure errCleanup
errInterpret: procedure expose m.
parse arg code
interpret code
m.err.return = 0
return
endProcedure errInterpret
/*--- assert that the passed rexx expression evaluates to true -------*/
assert:
interpret 'assertRes =' arg(1)
if \ assertRes then
call err 'assert failed' arg(1)':' arg(2)
return
endProcedure assert
/*--- output an errorMessage msg with pref pref
split message in lines at '/n' ---------------------------*/
errSay: procedure expose m.
parse arg msg, pref
parse source . . ggS3 . /* current rexx */
if pref == 'e' then
msg = 'fatal error in' ggS3':' msg
else if pref == 'w' then
msg = 'warning in' ggS3':' msg
else if pref \== '' then
msg = pref':' msg
return outNl(msg)
endProcedure errSay
/*--- abend with Message after displaying help -----------------------*/
errHelp: procedure expose m.
parse arg msg, op
call errSay msg, 'e'
call help
call err msg, op
endProcedure errHelp
/*--- return the Operating System we are running on: TSO or LINUX ---*/
errOS: procedure expose m.
parse source os .
return os
endProcedure errOS
/*--- set rc for ispf: -------------------------------------------------
if a cmd is run by ispStart, its RC is ignored,
but ISPF passes the value of the shared varible 3IspfRc
back as return code
----------------------------------------------------------------------*/
errSetRc: procedure expose m.
parse arg zIspfRc
if errOS() \== 'LINUX' then
if sysVar('sysISPF') = 'ACTIVE' then
address ispExec vput 'zIspfRc' shared
return zIspfRc
endProcedure errSetRc
/*--- output a trace message if m.tr is set -----------------------*/
trc: procedure expose m.
parse arg msg
if m.trace == 1 then
call out 'trc:' msg
return
endProcedure trc
debug: procedure expose m.
parse arg msg
if m.debug == 1 then
call out 'debug' msg
return
endProcedure debug
/*--- display the first comment block of the source as help ----------*/
help: procedure expose m.
parse source . . s3 .
call out right(' help for rexx' s3, 79, '*')
do ax=1 to arg()
say ' ' arg(ax)
end
do lx=1 by 1
if pos('/*', sourceLine(lx)) > 0 then
leave
else if lx > 10 then do
call out 'initial commentblock not found for help'
return
end
end
do lx=lx+1 by 1
li = strip(sourceLine(lx), 't', ' ')
if pos('*/', li) > 0 then
leave
call out li
end
call out right(' end help for rexx' s3, 79, '*')
return 4
endProcedure help
/*--- output all lines (separated by '\n') of all args --------------*/
outNl: procedure expose m.
do ax=1 to max(1, arg())
msg = arg(ax)
sx = 0
bx = -1
do lx=1 until bx >= length(msg)
ex = pos('\n', msg, bx+2)
if ex < 1 then
ex = length(msg)+1
call out substr(msg, bx+2, ex-bx-2)
bx = ex
end
end
return 0
endProcedure outNl
/* copy err end *****************************************************/
/* copy out begin ******************************************************
out interface with simplistic implementation
***********************************************************************/
outIni: procedure expose m.
parse arg msg
if m.out.ini == 1 then
return
m.out.ini = 1
m.out.dst = ''
return
endProcedure outIni
/*--- output a message to the current destination -------------------*/
out: procedure expose m.
parse arg msg
if m.out.ini \== 1 then
call outIni
if m.out.dst == '' then do
say msg
end
else do
st = m.out.dst
sx = m.st.0 + 1
m.st.0 = sx
m.st.sx = msg
end
return 0
endProcedure out
/*--- push an out destination ---------------------------------------*/
outPush: procedure expose m.
parse arg m.out.dst
return
endProcedure outPush
/* copy out end *****************************************************/
/* copy ut begin *****************************************************/
/*--- if function warning all3 arguments get evaluated|
e.g if(x=0, 'infinity', 1/0) will fail| -----------*/
if: procedure expose m.
parse arg co, ifTrue, ifFalse
if co then
return ifTrue
else
return ifFalse
endProcedure if
/*--- embedded ASSignement:
assign the second argument to the variable with name in first arg
and return the value assigned ----------------------------------*/
ass:
call value arg(1), arg(2)
return arg(2)
/*--- embedded ASSignement only if NotNull:
assign the second argument to the variable with name in first arg
if the second arg is not null, return new value ---------------*/
assIf:
if arg(2) == '' then
return value(arg(1))
call value arg(1), arg(2)
return arg(2)
/*--- return first nonNull argument ---------------------------------*/
nn:
if arg(1) \== '' then
return arg(1)
if arg(2) \== '' then
return arg(2)
call err 'nn() both args empty'
/*--- embedded ASSignement return NotNull:
assign the second argument to the variable with name in first arg
and return 1 if value not null, 0 if null ----------------------*/
assNN:
call value arg(1), arg(2)
return arg(2) \== ''
/*--- return current time and cpu usage ------------------------------*/
timing: procedure expose m.
return return time() 'ela='time('E') 'cpu='sysvar('syscpu'),
'su='sysvar('syssrv')
timingTest: procedure expose m.
say 'begin' timing() sysvar('sysnode')
do 30000000
end
say 'end ' timing()
return
/*--- sleep several seconds ------------------------------------------*/
sleep: procedure expose m.
parse arg secs, sayIt
if sayit <> 0 then
say 'sleeping' secs 'secs' time()
CALL SYSCALLS 'ON'
ADDRESS SYSCALL "sleep" secs
CALL SYSCALLS 'OFF'
if sayit <> 0 then
say 'slept' secs 'secs' time()
return
endProcedure sleep
/*--- quote string txt using quoteChar qu ("""" ==> ") ---------------*/
quote: procedure expose m.
parse arg txt, qu
if qu = '' then
qu = '"'
res = qu
ix = 1
do forever
qx = pos(qu, txt, ix)
if qx = 0 then
return res || substr(txt, ix) || qu
res = res || substr(txt, ix, qx-ix) || qu || qu
ix = qx + length(qu)
end
endProcedure quote
/*--- return the count of occurrences of needle in heyStack ----------*/
posCount: procedure expose m.
parse arg needle, hayStack, start, fin
if start = '' then
start = 1
if fin = '' then
fin = length(hayStack) + 1 - length(needle)
do cnt = 0 by 1
start = pos(needle, haystack, start)
if start < 1 | start > fin then
return cnt
start = start + length(needle)
end
endProcedure posCount
repAll: procedure expose m.
parse arg src, w, new
res = ''
cx = 1
do forever
nx = pos(w, src, cx)
if nx < 1 then
return res || substr(src, cx)
res = res || substr(src, cx, nx-cx) || new
cx = nx + length(w)
end
endProcedure repAll
repAllWords: procedure expose m.
parse arg src, w, new
res = ''
wx = 0
cx = 1
do forever
wx = wordPos(w, src, wx+1)
if wx < 1 then
return res || substr(src, cx)
nx = wordindex(src, wx)
res = res || substr(src, cx, nx-cx) || new
cx = nx + length(w)
end
endProcedure repAllWords
/* copy ut end ********************************************************/
}¢--- A540769.WK.REXX.O13(DBADO) cre=2009-11-10 mod=2009-11-10-17.27.57 A540769 ---
call sqlConnect DBOF
$=pds=DSN.DBA.ZUEGEL.NOV.RUN
$=chgs=DSN.DBA.ZUEGEL.NOV.JCL(ALL)
$=run = DSN.DBA.ZUEGEL.NOV.RUN
m.run.1 = 'DSN.DBA.ZUEGEL.NOV.RUNDIPRO'
m.run.2 = 'DSN.DBA.DBOF.RUN.JCL'
m.run.0 = 2
$;
$<$chgs
$@for li $@¢
parse value $li with aCh aTi aPl .
call sqlPreAllCl 1, 'select changeid, name, status' ,
'from s100447.adbChg',
'where name like '''aCh'.%''',
, c, ':m.st.sx.ch, :m.st.sx.na, :m.st.sx.st'
fx = -1
do cx=1 to m.c.0
if wordPos(m.c.cx.st, 'COMPLETE CANCEL') > 0 then
iterate
if fx > 0 then
call err 'multiple' aCh':' ,
|| cx m.c.cx.ch m.c.cx.na m.c.cx.st
fx = cx
end
if fx < 1 then do
$$- 'ch' aCh 'not found' aPl
iterate
end
else if m.c.fx.st \== 'ANALYZED' then do
$$- 'ch' aCh':'cx m.c.fx.ch m.c.fx.na m.c.fx.st
iterate
end
mbr = 'E'right(0 + m.c.fx.ch, 7, 0)
ex = ''
do rx=1 to m.run.0
if sysDsn("'"m.run.rx"("mbr")'") = OK then
ex = ex rx
end
if words(ex) = 1 then
msg = 'once'
else if words(ex) < 1 then
msg = 'miss'
else
msg = 'dupp'
$$- 'ch' aCh msg ex':'fx m.c.fx.ch m.c.fx.na m.c.fx.st
if 1 then do
job = 'Y'left(aCh, 7)
ey = word(ex, 1)
call readDsn m.run.ey'('mbr')', j.
jx = pos(' JOB ', j.1)
if jx < 1 | jx > 16 then
call err 'no jobCard in' aCh':' j.1
j.1 = '//'job strip(substr(j.1, jx))
call writeDsn $run'('aCh')', j., , 1
end
$!
$#end
$#out 20091110 17:17:31
ch SV30003C once 2:1 2441. SV30003C.0.004.IMP ANALYZED
ch SV30004C once 2:1 2501. SV30004C.0-1.008.IMP ANALYZED
ch SV30005C once 1:1 2522. SV30005C.0.004.IMP ANALYZED
ch SV30002W once 1:1 2292. SV30002W.0.003.IMP ANALYZED
ch AV15010C once 2:1 2541. AV15010C.0-6.008.IMP ANALYZED
ch AVIN017C once 1:1 2248. AVIN017C.0.003.IMP ANALYZED
ch DP08004C once 1:1 2316. DP08004C.0-2.009.IMP ANALYZED
ch EX01001C once 1:1 2269. EX01001C.0.003.IMP ANALYZED
ch PC11005C once 1:1 2273. PC11005C.1.003.IMP ANALYZED
ch RB01016C once 1:1 2249. RB01016C.0-1.004.IMP ANALYZED
ch RV01007C once 1:1 2286. RV01007C.0-1.005.IMP ANALYZED
ch SV04001C once 1:1 2275. SV04001C.0.003.IMP ANALYZED
ch SV70005C once 2:1 2462. SV70005C.0-2.011.IMP ANALYZED
ch TN01050C once 1:1 2288. TN01050C.0.003.IMP ANALYZED
ch VDPS441C once 1:1 2582. VDPS441C.0-A.040.IMP ANALYZED
ch VDPS442C once 1:1 2289. VDPS442C.0.004.IMP ANALYZED
ch VDPS443C once 1:1 2318. VDPS443C.0.003.IMP ANALYZED
ch VDPS444C once 1:1 2343. VDPS444C.0-1.007.IMP ANALYZED
ch WI03014C once 1:1 2341. WI03014C.0-1.006.IMP ANALYZED
ch WQ01035C once 2:1 2561. WQ01035C.0.004.IMP ANALYZED
ch YMF01A1C not found JCL
ch NZ01014C once 1:1 2272. NZ01014C.0.003.IMP ANALYZED
ch DG01031C not found ALT
ch ED02001C once 1:1 2268. ED02001C.0.003.IMP ANALYZED
ch ID01010C once 1:1 2270. ID01010C.1-2.009.IMP ANALYZED
ch LC02003C once 1:1 2271. LC02003C.0.003.IMP ANALYZED
ch TN01051C once 1:1 2362. TN01051C.0-1.007.IMP ANALYZED
ch TP01007C once 1:1 2276. TP01007C.0.003.IMP ANALYZED
ch TR03003C once 1:1 2321. TR03003C.0.003.IMP ANALYZED
ch WB01007C not found JCL
ch WB11013C once 1:1 2278. WB11013C.0.003.IMP ANALYZED
ch WB12021C once 1:1 2279. WB12021C.0-1.006.IMP ANALYZED
ch WB12022C once 1:1 2280. WB12022C.0-1.006.IMP ANALYZED
ch WI01002C once 2:1 2581. WI01002C.0.003.IMP ANALYZED
ch WL07002C once 1:1 2342. WL07002C.0-2.009.IMP ANALYZED
ch SN01045C once 1:1 2250. SN01045C.4.006.IMP ANALYZED
ch SN01046C once 1:1 2251. SN01046C.4.006.IMP ANALYZED
ch SN01048C once 1:1 2287. SN01048C.4.006.IMP ANALYZED
ch SN01049C dupp 1 2:1 2361. SN01049C.7.026.IMP ANALYZED
ch WQ01033C once 1:1 2290. WQ01033C.0.003.IMP ANALYZED
}¢--- A540769.WK.REXX.O13(DBAMULTI) cre=2009-09-08 mod=2009-09-08-10.58.02 A540769 ---
/* rexx ****************************************************************
synopsis: dbaMulti ¢-r¦s¦u¦?! <member>
start multiClon for <member>
<member> must end with a W (new) or C (change)
as a tso command member must be 8 characters long
as an editmacro mbr defaults to the member being edited
and a single character overwrites its last character
dbaCheck applies the CS defaults (if run as editMacro)
if the member exists already in a WSL
it is removed, if the user whishes
the input dataset is overwritten for mbr
the appropriate mulitCloneJob is started
options:
-s silent: remove members without asking
-u unchecked: do not run dbaCheck
-? or ?: this help
***********************************************************************
02.06.2008 uses dbx
*/ /* end of help --- history
04.12.2007 copies wsl to DSN.DBA.CLON.WSLSRC
05.01.2007 uses DbaCheck
20.11.2006 runs also in RZ2, RZ4 RR2 and RR4
**********************************************************************/
nd = sysvar(sysnode)
libPre = 'DSN.DBA.'
if nd = 'RZ1' then
libMid = 'DBAF DBBA DBLF DBOC DBTF DBZF DVTB'
else if nd = 'RZ2' | nd = 'RR2' then
libMid = 'DBOF'
else if nd = 'RZ4' | nd = 'RR4' then
libMid = 'DBCP DBII DBOL DVBP'
else
call errHelp 'rz' nd 'is not supported'
libSuf = '.WSL'
multiInp = 'DSN.DBA.MULTI.CLON.INPUT'
multiNew = 'DSN.DBA.MULTI.CLON.NEW.JCL'
multiChg = 'DSN.DBA.MULTI.CLON.CDL.JCL'
multiCopy= 'DSN.DBA.CLON.WSLSRC'
parse arg args
call adrIsp 'control errors return'
mbr = ''
opt = ''
isMacro = 0
if args = '' then
if adrEdit('macro (args)', 20) == 0 then
isMacro = 1
if pos('?', args) > 0 then
return help()
do ax=1 to words(args)
wo = translate(word(args, ax))
if left(wo, 1) = '-' then do
if verify(wo, '-URS') <> 0 then
call errHelp 'bad option "'wo'" in "'args'"'
opt = opt substr(wo, 2)
end
else if mbr ^== '' then
call errHelp 'more than one member "'wo'" in "'args'"'
else
mbr = wo
end
if pos('U', opt) < 1 then do
res = dbaCheck('dbaMulti')
if res = 4 then
return
else if res ^== 0 then
call err 'dbaCheck returns' res
end
if length(mbr) <= 1 & isMacro then do
fnd = 'DSN.DBA. first'
if adrEdit("seek" fnd, 4) ^= 0 then
call err 'could not find member, dsn.dba not found'
call adrEdit "(lx, cx) = cursor"
call adrEdit "(line) = line" lx
sx = cx + 8
do 4
ex = verify(line, ' .', 'm', sx)
if ex <= sx then
ex = 1+length(line)
em = strip(substr(line, sx, ex-sx))
if length(em) = 8 then
leave
sx = ex+1
end
if length(em) <> 8 then
call errHelp 'no mbr detected in line' lx':' line
mbr = overlay(mbr, em, 9 - length(mbr))
say 'detected qualifier' em 'in edit data yielding member' mbr
end
if length(mbr) <> 8 then
call errHelp 'mbr "'mbr'" should have length 8'
else if pos(right(mbr, 1), 'CW') = 0 then
call errHelp 'mbr "'mbr'" should end with C or W'
doRm = pos('S', opt) > 0
do mx = 1 to words(libMid) while ^doRm
dsn = jcl2dsn(libPre || word(libMid, mx) || libSuf"("mbr")")
sd = sysDsn(dsn)
if sd = 'OK' then do
if pos('S', opt) < 1 then do
say 'remove existing mbr' mbr 'in' dsn' (r for remove)?'
parse upper pull a
if left(a, 1) ^== 'R' then do
say 'exiting because answer was' a 'and not r'
exit
end
doRm = 1
end
end
else if sd ^== 'MEMBER NOT FOUND' then do
call err 'unexpected sysDsn('dsn') =' sd
end
end
call dbx cloneWsl '*' mbr doRm
if isMacro & nd = 'RZ1' then do
call adrEdit '(zl) = lineNum .zl'
do x=2 to zl+1
call adrEdit '(li) = line' (x-1)
li.x = li
end
li.1 ='-- Copied by dbamulti for' userid() 'on' date() 'at' time()
call writeDsn multiCopy'('left(mbr,7)'Q)', li., zl+1
end
exit
/* copy adrIsp begin *************************************************/
/**********************************************************************
lmd: catalog read
call sequence: lmdBegin, lmdNext*, lmdEnd
mit lmd service (mit save in file und read,
weil list zu langsam und listcat abstürzt)
1. arg (grp) als group dataset für lmd save
und dd name für file read
***********************************************************************/
lmdBegin: procedure
parse arg grp, lev
call adrIsp 'lmdinit listid(lmdId) level('lev')'
res = adrIsp('lmdlist listid(&lmdId) option(save) group('grp')', 4)
call adrIsp 'lmdfree listid(&lmdId)'
if res = 0 then do
call trc timing() 'lmdlist save' grp lev
call adrTso 'alloc dd('grp') shr dsn('grp'.datasets)'
end
else do
call trc 'no datasets found' timing() 'lmdlist save' grp lev
call adrTso 'alloc dd('grp') dummy'
end
call readDDBegin grp
return /* end lmdBegin */
lmdNext:
parse arg ggGrp, ggSt, withVolume
if ^ readDD(ggGrp, ggSt) then
return 0
if withVolume ^== 1 then
do ggIx=1 to value(ggSt'0')
x = value(ggSt || ggIx, word(value(ggSt || ggIx), 1))
end
return 1
endSubroutin lmdNext
lmdEnd: procedure
parse arg grp
call readDDEnd grp
call adrTso 'free dd('grp')'
return /* end lmdEnd */
lmd: procedure expose m.
parse arg lev, withVol
call lmdBegin gg1, lev
do while lmdNext(gg1, q., withVol)
do x=1 to q.0
call jOut q.x
end
end
call lmdEnd gg1
return
endProcedure lmd
/**********************************************************************
member list of a pds:
call sequence x=lmmBegin(dsn) lmmNext(x) * lmmEnd(x)
***********************************************************************/
lmm: procedure expose m.
parse arg dsn
id = lmmBegin(dsn)
do ix=1 by 1
m = lmmNext(id)
if m = '' then
leave
call jOut m
end
call lmmEnd id
return
endProcedure lmm
lmmBegin: procedure
parse arg dsn
mbr = dsnGetMbr(dsn)
pds = dsnSetMbr(dsn, )
call adrIsp "LMINIT DATAID(lmmId) DATASET('"pds"') ENQ(SHRW)"
call adrIsp "LMOPEN DATAID("lmmId") OPTION(INPUT) "
res = lmmId
if mbr <> '' then
res = res 'pattern('mbr')'
return res
endProcedure lmmBegin
lmmEnd: procedure
parse arg lmmId opt
call adrIsp "LMMLIST DATAID("lmmId") option(free)", 8
call adrIsp "LMCLOSE DATAID("lmmId")"
call adrIsp "LMFREE DATAID("lmmId")"
return
endProcedure lmmEnd
lmmNext: procedure
parse arg lmmId opt
if adrIsp("LMMLIST DATAID("lmmid")" ,
"OPTION(LIST) MEMBER(Mbr)" opt, 4 8) = 0 then
return strip(mbr)
else
return ''
endProcedure lmmNext
lmmRm: procedure
parse arg dsn, mbrs
mbrs = dsnGetMbr(dsn) mbrs
pds = dsnSetMbr(dsn, )
call adrIsp "LMINIT DATAID(lmmId) DATASET("pds") ENQ(SHRW)"
call adrIsp "LMOPEN DATAID("lmmId") OPTION(OUTPUT) "
err = ''
do wx=1 to words(mbrs)
m1 = word(mbrs, wx)
rr = adrIsp("lmmDel dataid("lmmId") member("m1")", 0 8 12)
if rc = 0 then
say 'removed' m1 'from' pds
else if rc = 8 then
say 'not found' m1 'in' pds
else do
err = 'error deleting' m1 'in' pds 'rc' rr strip(zerrlm)
say err
leave
end
end
call adrIsp "LMCLOSE DATAID("lmmId")"
call adrIsp "LMFREE DATAID("lmmId")"
if err <> '' then
call err err
return
endProcedure lmmRm
/*--- address ispf with error checking -------------------------------*/
adrIsp:
parse arg ggIspCmd, ggRet
address ispexec ggIspCmd
if rc = 0 then return 0
else if ggRet == '*' then return rc
else if wordPOS(rc, ggRet) > 0 then return rc
else
call err 'adr ispExec rc' rc 'in' ggIspCmd':' strip(zerrlm)
endSubroutine adrIsp
/*--- address editor with error checking -----------------------------*/
adrEdit:
parse arg ggEditCmd, ggRet
address isrEdit ggEditCmd
if rc = 0 then return 0
else if ggRet == '*' then return rc
else if wordPOS(rc, ggRet) > 0 then return rc
else
call err 'adr isrEdit rc' rc 'for' ggEditCmd
endSubroutine adrEdit
/* copy adrIsp end *************************************************/
/* copy adrTso begin *************************************************/
/*--- send ggTsoCmd to tso, fail if rc <> 0 or not listed in ggRet ---*/
adrTso:
parse arg ggTsoCmd, ggRet
address tso ggTsoCmd
if rc == 0 then return 0
else if ggRet == '*' then return rc
else if wordPos(rc, ggRet) > 0 then return rc
else
call err 'adrTso rc' rc 'for' ggTsoCmd
return /* end adrTso */
/*--- format dsn from tso format to jcl format -----------------------*/
dsn2jcl: procedure
parse arg dsn ., addPrefix
if left(dsn,1) = "'" then
return strip(dsn, 'b', "'")
sp = sysvar('SYSPREF')
if sp == '' then
sp = userid()
cx = pos('~', dsn)
if cx < 1 & addPrefix == 1 then
return sp'.'dsn
do while cx ^== 0
le = left(dsn, cx-1)
ri = substr(dsn, cx+1)
if right(le, 1) == '.' | left(ri, 1) == '.' then
dsn = le || sp || ri
else
dsn = le || left('.', le ^== '') || sp ,
|| left('.', ri ^== '') || ri
cx = pos('~', spec, cx)
end
return dsn
endProcedure dsn2Jcl
/*--- format dsn from jcl format to tso format -----------------------*/
jcl2dsn: procedure
parse arg dsn .
return "'"dsn"'"
endProcedure jcl2dsn
dsnSetMbr: procedure
parse arg dsn, mbr
bx = pos('(', dsn)
if bx > 0 then
dsn = strip(left(dsn, bx-1))
if mbr <> '' then
dsn = dsn'('strip(mbr)')'
return dsn
endProcedure dsnSetMbr
dsnGetMbr: procedure
parse arg dsn
lx = pos('(', dsn)
rx = pos(')', dsn, lx+1)
if lx < 1 then
return ''
else if lx < rx then
return substr(dsn, lx+1, rx-lx-1)
else
return strip(substr(dsn,lx+1))
endProcedure dsnGetMbr
/**********************************************************************
io: read or write a dataset with the following callsequences:
read: readDDBegin, readDD*, readDDEnd
write: writeBegin, writeDD*, writeEnd
readDD returns true if data read, false at eof
***********************************************************************/
/*--- prepare reading from a DD --------------------------------------*/
readDDBegin: procedure
return /* end readDDBegin */
/*--- read from DD ggDD into ggSt, return false at eof ---------------*/
readDD:
parse arg ggDD, ggSt, ggCnt
if ggCnt = '' then
ggCnt = 100
call adrTso 'execio' ggCnt 'diskr' ggDD '(stem' ggSt')', 2
return (value(ggSt'0') > 0)
return /* end readDD */
/*--- finish reading DD ggDD ----------------------------------------*/
readDDEnd: procedure
parse arg ggDD
call adrTso 'execio 0 diskr' ggDD '(finis)'
return /* end readDDEnd */
/*--- prepare writing to DD ggDD -------------------------------------*/
writeDDBegin: procedure
parse arg ggDD
/* ensure file is erased, if no records are written */
call adrTso 'execio' 0 'diskw' ggDD '(open)'
return /* end writeDDBegin */
/*--- write to gg ggDD from stem ggSt, ggCnt records -----------------*/
writeDD:
parse arg ggDD, ggSt, ggCnt
if ggCnt == '' then
ggCnt = value(ggst'0')
call adrTso 'execio' ggCnt 'diskw' ggDD '(stem' ggSt')'
return
endSubroutine writeDD
/*--- end writing to dd ggDD (close) --------------------------------*/
writeDDEnd: procedure
parse arg ggDD
call adrTso 'execio 0 diskw' ggDD '(finis)'
return /* end writeDDEnd */
/*--- alloc a dsn or a dd
spec '-'<ddName>
datasetName? disposition? '.'? attributes? (':' newAtts)?
disp default disposition
dd default dd name
retRc erlaubte ReturnCodes (leer = 0)
returns if ok then ddName <rexx for free> otherwise rc -----*/
dsnAlloc: procedure expose m.
parse upper arg spec, disp, dd, retRc
ds = ''
m.dsnAlloc.dsn = ds
if left(spec, 1) = '-' then
return strip(substr(spec, 2))
if left(spec, 1) = '&' then /* external spec is handled ok */
spec = strip(substr(spec, 2))
do wx=1 by 1
w = word(spec, wx)
if w = '' | abbrev(w, '.') | abbrev(w, ':') then
leave
else if wordPos(w, 'OLD SHR MOD NEW')>0 | abbrev(w, 'SYSO') then
disp = w
else if w = 'CATALOG' then
disp = disp w
else if abbrev(w, 'DD(') then
dd = substr(w, 4, length(w)-4)
else if abbrev(w, 'DSN(') then
ds = strip(substr(w, 5, length(w)-5))
else if ds = '' then
ds = dsn2jcl(w)
else
leave
end
rest = subword(spec, wx)
if abbrev(rest, '.') then
rest = substr(rest, 2)
parse var rest rest ':' nn
if dd <> '' & ds = '' & rest = '' & ^ abbrev(disp, 'SYSO') then
call err "'return" dd"' no longer supported please use ="dd
if dd = '' then do
if symbol('m.adrTso.ddNum') = 'VAR' then
dd = m.adrTso.ddNum + 1
else
dd = 1
m.adrTso.ddNum = dd
dd = 'DD' || dd
end
if disp = '' then
disp = 'SHR'
else if pos('(', ds) < 1 then
nop
else if disp = 'MOD' then
call err 'disp mod for' ds
else
disp = 'SHR'
m.dsnAlloc.dsn = ds
if pos('/', ds) > 0 then
return csmAlloc(dd, disp, ds, rest, nn, retRc)
else
return tsoAlloc(dd, disp, ds, rest, nn, retRc)
endProcedure dsnAlloc
tsoAlloc: procedure expose m.
parse arg dd, disp, dsn, rest, nn, retRc
c = 'alloc dd('dd')' disp
if dsn <> '' then
c = c "DSN('"dsn"')"
if retRc <> '' | nn = '' then do
alRc = adrTso(c rest, retRc)
if alRc <> 0 then
return alRc
return dd 'call adrTso "free dd('dd')";'
end
do retry=0 to 1
alRc = adrTso(c rest, '*')
if alRc = 0 then
return dd 'call adrTso "free dd('dd')";'
if nn = '' | wordPos(disp, 'OLD SHR') < 1 ,
| sysDsn("'"m.dsnAlloc.dsn"'") ^== 'DATASET NOT FOUND' then
leave
say 'tsoAlloc rc' alRc 'for' c rest '...trying to create'
call adrTso 'alloc dd('dd') new catalog' dsnCreateAtts(dsn, nn)
call adrTso 'free dd('dd')'
end
call err 'tsoAlloc rc' alRc 'for' c rest
endProcedure tsoAlloc
dsnCreateAtts: procedure expose m.
parse arg dsn, atts
if abbrev(atts, ':') then do
rl = substr(atts, 3)
if abbrev(atts, ':F') then do
if rl = '' then
rl = 80
atts = 'recfm(f b) lrecl('rl')' ,
'block(' (32760 - 32760 // rl)')'
end
else do
if rl = '' then
rl = 32756
atts = 'recfm('substr(atts, 2, 1) 'b) lrecl('rl')' ,
'block(32760)'
end
end
if pos('(', dsn) > 0 then
atts = atts 'dsntype(library) dsorg(po)' ,
"dsn('"dsnSetMbr(dsn)"')"
else
atts = atts "dsn('"dsn"')"
return atts 'mgmtclas(s005y000) space(10, 1000) cyl'
endProcedure dsnCreateAtts
/*--- read the dataset specified in ggDsnSpec to stem ggSt -----------*/
readDSN:
parse arg ggDsnSpec, ggSt
ggAlloc = dsnAlloc(ggDsnSpec, 'SHR', 'readDsN')
call adrTso 'execio * diskr' word(ggAlloc, 1) '(stem' ggSt' finis)'
interpret subword(ggAlloc, 2)
return
endSubroutine readDsn
/*--- write the dataset specified in ggDsnSpec from stem ggSt
write ggCnt records if not empty otherwise ggst0
if ggSay 1 then say ... records written to ... -------------*/
writeDSN:
parse arg ggDsnSpec, ggSt, ggCnt, ggSay
if ggCnt == '' then
ggCnt = value(ggst'0')
ggAlloc = dsnAlloc(ggDsnSpec, 'OLD', 'readDsN')
call adrTso 'execio' ggCnt 'diskw' word(ggAlloc, 1) ,
'(stem' ggSt 'open finis)'
interpret subword(ggAlloc, 2)
if ggSay == 1 | m.debug == 1 then
say ggCnt 'records written to' ggDsnSpec
return
endSubroutine writeDsn
/* copy adrTso end ****************************************************/
/* copy err begin ******************************************************
messages, errorhandling,help
***********************************************************************/
/* configure err -----------------------------------------------------*/
errReset: procedure expose m.
parse arg oo, ha
if pos('I', translate(oo)) > 0 then
call adrIsp 'control errors return'
m.err.opt = translate(oo, 'h', 'H')
if ha == '' then
drop m.err.handler
else
m.err.handler = ha
return
endSubroutine errReset
/*--- error routine: abend with message ------------------------------*/
err:
parse arg ggTxt, ggOpt
drop err handler opt
if ggOpt == '' & symbol('m.err.handler') == 'VAR' then
interpret m.err.handler
call errSay ggTxt
parse source . . ggS3 . /* current rexx */
if ggOpt == '' | ggOpt == '*' then
ggOpt = translate(value('m.err.opt'), 'ht', 'HT')
if pos('h', ggOpt) > 0 then do
say 'fatal error in' ggS3': divide by zero to show stackHistory'
x = 1 / 0
end
say 'fatal error in' ggS3': exit(12)'
exit errSetRc(12)
endSubroutine err
/*--- assert that the passed rexx expression evaluates to true -------*/
assert:
interpret 'assertRes =' arg(1)
if ^ assertRes then
call err 'assert failed' arg(1)':' arg(2)
return
endProcedure assert
/*--- say an errorMessage msg with pref pref
split message in lines at '/n'
say addition message in stem st ---------------------------*/
errSay: procedure expose m.
parse arg msg, st, pref
parse source . . ggS3 . /* current rexx */
if pref == 'e' | (pref == '' & st == '') then
msg = 'fatal error:' msg
else if pref == 'w' then
msgf = 'warning:' msg
else if pref == 0 then
nop
else if right(pref, 1) ^== ' ' then
msg = pref':' msg
else
msg = pref || msg
sx = 0
bx = -1
do lx=1 until bx >= length(msg)
ex = pos('\n', msg, bx+2)
if ex < 1 then
ex = length(msg)+1
if st == '' then do
say substr(msg, bx+2, ex-bx-2)
end
else do
sx = sx+1
m.st.sx = substr(msg, bx+2, ex-bx-2)
m.st.0 = sx
end
bx = ex
end
return
endProcedure errSay
/*--- abend with Message after displaying help -----------------------*/
errHelp: procedure expose m.
parse arg msg, op
say 'fatal error:' msg
call help
call err msg, op
endProcedure errHelp
/*--- set rc for ispf: -------------------------------------------------
if a cmd is run by ispStart, its RC is ignored,
but ISPF passes the value of the shared varible 3IspfRc
back as return code
----------------------------------------------------------------------*/
errSetRc: procedure
parse arg zIspfRc
if sysVar('sysISPF') = 'ACTIVE' then do
address ispExec vput 'zIspfRc' shared
end
return zIspfRc
endProcedure errSetRc
/*--- output a trace message if m.trace is set -----------------------*/
trc: procedure expose m.
parse arg msg
if m.trace == 1 then
say 'trc:' msg
return
endProcedure trc
/*--- quote string txt using quoteChar qu ("""" ==> ") ---------------*/
quote: procedure
parse arg txt, qu
if qu = '' then
qu = '"'
res = qu
ix = 1
do forever
qx = pos(qu, txt, ix)
if qx = 0 then
return res || substr(txt, ix) || qu
res = res || substr(txt, ix, qx-ix) || qu || qu
ix = qx + length(qu)
end
endProcedure quote
debug: procedure expose m.
parse arg msg
if m.debug == 1 then
say 'debug' msg
return
endProcedure debug
/*--- return current time and cpu usage ------------------------------*/
timing: procedure
return time() time('E') sysvar('syscpu') /* sysvar('syssrv') */
/--- display the first comment block of the source as help -----------*/
help: procedure
parse source . . s3 .
say right(' help for rexx' s3, 79, '*')
do lx=1 by 1
if pos('/*', sourceLine(lx)) > 0 then
leave
else if lx > 10 then do
say 'initial commentblock not found for help'
return
end
end
do lx=lx+1 by 1
li = strip(sourceLine(lx), 't', ' ')
if pos('*/', li) > 0 then
leave
say li
end
say right(' end help for rexx' s3, 79, '*')
return 4
endProcedure help
/* copy err end *****************************************************/
}¢--- A540769.WK.REXX.O13(DBARB) cre=2011-09-20 mod=2012-01-19-15.15.49 A540769 ---
/* rexx ****************************************************************
synopsis: DBARB (-(a¦n¦i)+)? subsys?
version vom 20.09.2011
edit macro to generate rebinds for a worklist
function:
search sql DDL statements in currently edited data
find packages dependent on created/dropped/altered1
tablespaces, tables, views, indexes, aliases or synonyms,
append rebind statements for these packages and
remove existing rebinds at the end of the data
options
a = alle Packages (default)
n = only new packages = aktive packages
= 1bef7: das neueste Package älter 1 Woche und alle jüngeren
i = info line für jedes package
subsys may be one of the following
? for this help
empty for deduce subsys from WSLLib, qualifiers or sysnode
x for DBxF
yy for DByy
zzzz for zzzz
** history *************************************************************
19.01.2012 options -ani und neue copies
************* end of help */ /****************************************
20.09.2011 defaults: RZZ ==> DE0G, RZ8 ==> DD0G
14.12.2006 scan start robuster gemacht gegen ScanErr
20.10.2006 synonym und tablespace eingebaut
19.10.2006 viewDep muss nicht berücksichtigt werden, weil DB2
mit einem Objekt auch alle abhängigen Views löscht
***********************************************************************/
parse arg args
call errReset 'h'
call scanWinIni
m.debug = 0 /* debug output */
m.cmp = userid() = 'F540769' /* compare old and new rebinds */
call adrIsp 'control errors return'
isMacro = 0
if word(args, 1) == 'isMacro' then do
isMacro = 1
args = subword(args, 2)
end
else if args = '' then do
if adrEdit('macro (args)', 20) == 0 then
isMacro = 1
end
if ^ isMacro then
call errHelp 'not started as editMacro'
if pos('?', args) > 0 then
exit help()
m.types = 'R T V X A S'
m.typNames = 'tablespace table view index alias synonym'
m.cmp.0 = 0
do tyx=1 to words(m.types)
typ = word(m.types, tyx)
m.obj.typ.0 = 0
end
args = translate(strip(args))
m.opt = ''
if abbrev(args, '-') then do
m.opt = substr(word(args, 1), 2)
args = subWord(args, 2)
end
/* analyze ddl in data
and extract changed db2 objects */
if isMacro then
call searchObjects
li = '' /* format and display counts */
do tyx=1 to words(m.types)
typ = word(m.types, tyx)
li = li',' m.obj.typ.0 word(m.typNames, tyx)
end
li = substr(li, 3)
say 'found' li
/* find db2 subsystem */
m.subsys = dbSubSys(translate(args))
/* show db2 objects in data */
call adrEdit '(origZl) = lineNum .zl'
call appLine '-- generating rebinds in' m.subsys ,
'at' time('n') date('e') 'for' userid()
call appLine '-- for' li
do tyx=1 to words(m.types)
typ = word(m.types, tyx)
tNa = left(word(m.typNames, tyx), 10)
do x=1 to m.obj.typ.0
call appLine '-- ' tNa m.obj.typ.x
end
end
/* search dependent packages in db2 catalog */
sql = genSql()
if sql ^== '' then do
sp = left('-- rebind old state', 72-39-2)
say 'connecting to' m.subsys
call sqlConnect m.subsys
call sqlPreOpen 1, sql
cnt = 0
new = 0
/* fetch each package and write rebind */
do while sqlFetchInto(1, ':coll, :name, :vers, :type, :info, :bef7')
cnt = cnt + 1
if bef7 == 0 then
new = new + 1
else if pos('N', m.opt) > 0 then
iterate
coll = strip(coll)
name = strip(name)
vers = strip(vers)
if type == 'T' then
call appLine 'REBIND TRIGGER PACKAGE('coll'.'name');'
else
call appLine 'REBIND PACKAGE('coll'.'name'.('vers'));'
if pos('I', m.opt) > 0 then
call appLine ' --'info 'bef7='bef7
end
call sqlClose 1
if pos('N', m.opt) > 0 then
say 'rebind' new 'new of total' cnt 'packages'
else
say 'rebind' cnt 'including' new 'new packages'
end
call deleteRebindsUntil origZl
if m.cmp then
call cmpPrint
call sqlDisconnect
exit
/--- search db2 objects changed in the ddl ---------------------------*/
searchObjects: procedure expose m.
sqls = 'CREATE ALTER DROP'
mr = scanSql(mNew('EditRead', 0))
do sx =1 to words(sqls) /* for each sql command */
s1 = word(sqls, sx)
lx = 0
do forever
if lx > 0 then
call jClose mr
lx = scanSqlSeekId(mr, lx+1, s1) /* find each command*/
if lx < 1 then
leave
typ = sqlId(mr)
if wordpos(typ, 'UNIQUE LARGE LOB') > 0 then
typ = sqlId(mr)
if typ = '' then
call scanErr mr, 'object type expected'
if wordPos(typ, translate(m.typNames)) <= 0 then
iterate
tyCh = word(m.types, wordPos(typ, translate(m.typNames)))
if s1 ^= 'CREATE' then do
nm = sqlQuId(mr)
end
else if typ = 'INDEX' then do
nm = sqlQuId(mr)
if sqlId(mr) ^== 'ON' then
call scanErr mr, 'ON expected after create index' nm
call addObj t, sqlQuId(mr)
end
else if typ = 'TABLESPACE' then do
nm = sqlDeId(mr)
if sqlId(mr) ^== 'IN' then
call scanErr mr,
, 'IN expected after create tablespace' nm
nm = sqlDeId(mr)'.'nm
end
else if typ = 'SYNONYM' then do
nm = sqlDeId(mr)
if sqlId(mr) ^== 'FOR' then
call scanErr mr,
, 'FOR expected after create synonym' nm
nm = sqlDeId(mr)'.'nm
end
else do
nm = sqlQuId(mr)
end
call addObj tyCh, nm
end /* each command found */
end /* each sql command */
return
endProcedure searchObjects
/*--- add a db2 object nm of type typ to the list,
if not done already -----------------------------------*/
addObj: procedure expose m.
parse arg typ, nm
if symbol('m.obj.typ.nm') ^= 'VAR' then do
nx = m.obj.typ.0 + 1
m.obj.typ.0 = nx
m.obj.typ.nx = nm
m.obj.typ.nm = nx
end
return
endProcedure addObj
/*--- return the sql to retrieve the packages
dependent on db2 objects in out list ----------------------*/
genSql: procedure expose m.
m.obj.ow.0 = 0
cntTav = 0
cntIdx = 0
/* build lists of names by qualifier */
do tyx=1 to words(m.types)
typ = word(m.types, tyx)
do ox=1 to m.obj.typ.0
qu = anaQualIdent(m.obj.typ.ox)
cntTav = cntTav + 1
if symbol('m.obj.ow.qu') ^== 'VAR' then do
call addObj ow, qu
m.tav.qu = m.ident
m.idx.qu = ''
end
else do
m.tav.qu = m.tav.qu"," m.ident
end
if typ == 'X' then do
/* additional list for indexes */
cntIdx = cntIdx + 1
if m.idx.qu = '' then
m.idx.qu = m.ident
else
m.idx.qu = m.idx.qu"," m.ident
end
end
end
if cntTav = 0 & cntIdx = 0 then
return ''
do y=1 to m.debug * m.obj.ow.0 /* debug lists */
qu = m.obj.ow.y
say y 'qual' qu 'tav:' m.tav.qu 'index:' m.idx.qu
end
/* build sql */
sql = 'select distinct p.collid, p.Name, p.version, p.type,' ,
"'vivo=' || p.validate || p.isolation ||" ,
"p.valid || p.operative ||" ,
"' con=' || hex(p.contoken) ||" ,
"' tst=' || char(p.timestamp) ," ,
" value((select count(*)",
"from sysibm.syspackage r",
"where r.location = p.location and r.collid = p.collid",
"and r.name = p.name",
"and r.timestamp > p.timestamp",
"and r.timestamp < current timestamp - 7 days),0)",
'from sysibm.syspackdep d join sysibm.syspackage p' ,
'on p.location = d.dLocation and p.collid = d.dCollid' ,
'and p.name = d.dName and p.conToken = d.dConToken' ,
'where'
do y=1 to m.obj.ow.0 /* add each qualifier */
qu = m.obj.ow.y
if m.tav.qu ^= '' then
sql=sql '( bQualifier =' qu 'and bName in ('m.tav.qu')) or'
end
if cntIdx <= 0 then do
sql = left(sql, length(sql) - 3)
end
else do /* subselect for tables of indexes */
sql=sql '( (bQualifier, bName) in' ,
'( select tbcreator, tbname' ,
'from sysibm.sysindexes where'
do y=1 to m.obj.ow.0
qu = m.obj.ow.y
if m.idx.qu ^= '' then
sql=sql '( creator =' qu 'and name in ('m.idx.qu')) or'
end
sql = left(sql, length(sql) - 3) ') )'
end
if m.debug then do /* debug generated sql */
l = 60
c = 1
do while length(sql) - c > l
do e = c+l by -1 while substr(sql, e, 1) ^== ' '
end
say substr(sql, c, e - c)
c = e + 1
end
say substr(sql, c)
end
return sql
endProcedure genSql
/*--- analyze the two parts of a qualified sql identifier ------------*/
anaQualIdent: procedure expose m.
parse arg s
if left(s, 1) = '"' then do
dx = pos('"', s, 2)
m.qual = substr(s, 2, dx - 2)
dx = dx + 1
end
else do
dx = pos('.', s)
m.qual = left(s, dx - 1)
end
if substr(s, dx+1, 1) = '"' then do
ex = pos('"', s, dx+2)
m.ident = substr(s, dx+2, ex - dx - 2)
end
else do
m.ident = substr(s, dx+ 1)
end
m.qual = "'"m.qual"'"
m.ident = "'"m.ident"'"
return m.qual
endProcedure anaQualIdent
/*--- detect the db2 subsystem ---------------------------------------*/
dbSubSys: procedure expose m.
parse arg a
/* subsys may be passed as argument */
if length(a) = 4 then
return a
else if length(a) = 2 then
return 'DB'a
else if length(a) = 1 then
return 'DB'a'F'
else if length(a) ^= 0 then
call errHelp 'bad abbreviation for db2 subsystem: "'a'"'
/* the db admin tool puts the name of the curren WSL library
in the variable ADBWLDSN in the shared pool,
however the session might be in a different split screen */
wslSubSys= ''
if ADRISP('VGET ADBWLDSN', '*') = 0 then do
if left(adbwldsn, 9) == "'DSN.DBA." ,
& substr(adbwldsn, 14) == ".WSL'" then
wslSubSys = substr(adbwldsn, 10, 4)
/* say 'db2SubSys' wslSubSys 'deduced from WSLLib' adbwldsn */
end
/* can we deduce the db2SubSys from the qualifiers? */
quaSubSys = ''
aa = ''
q = ''
do tyx=1 to words(m.types)
typ = word(m.types, tyx)
do x=1 to m.obj.typ.0
id = anaQualIdent(m.obj.typ.x)
upper m.qual
if pos(m.qual, aa) > 0 then
iterate
aa = aa m.qual
if substr(m.qual, 2, 3) = 'OA1' then
n = substr(m.qual, 5, 1)
else if substr(m.qual, 2, 3) = 'GDB' then
n = 'A'
else
iterate
/* compare new char with previous */
if q == '' then
q = n
else if q ^== n then
q = '*'
end
end
nd = sysvar(sysnode)
if length(q) = 1 & pos(q, 'ATZLP') > 0 then do
quaSubSys = 'DB'translate(q, 'O', 'P')'F'
if nd = 'RZ8' & quaSubSys = 'DBOF' then
quaSubSys = 'DD0G'
else if nd = 'RZZ' & quaSubSys = 'DBOF' then
quaSubSys = 'DE0G'
/* say 'db2SubSys' quaSubSys 'deduced from qualifiers:' aa */
end
/* compare what we got */
if wslSubSys <> '' then
if wslSubSys == quaSubSys | quaSubSys == '' then
return wslSubSys
else
call errHelp 'specify subsys because' wslSubSys,
'from WSLLib mismatches' quaSubsys 'from qualifiers ('aa')'
else if quaSubSys <> '' then
return quaSubSys
if nd = 'RZ2' | nd = 'RR2' then
return 'DBOF' /* here we have only one subsys | */
else if nd = 'RZ8' then
return 'DM0G' /* here we have only one subsys | */
else
call errHelp 'specify subsys.' ,
'Neither WSLLib nor qualifiers ('aa') do'
endProcecdure dbSubSys
/*--- delete comments and rebind statements
backward from given line and position cursor --------------*/
deleteRebindsUntil: procedure expose m.
parse arg origZl
/* scan backward over old rebind statements */
do lx = origZl by -1 to 1
call adrEdit '(li) = line' lx
w = word(li, 1)
if w = '' | left(w, 2) = '--' then
nop
else if translate(left(w, 6)) = 'REBIND' then
call cmp 'o', li
else
leave
end
/* scan forward over comments without rebind */
do lx = lx+1 by 1 to origZl
call adrEdit '(li) = line' lx
if li = '' | (left(word(li, 1), 2) = '--' ,
& pos('REBIND', translate(li)) < 1) then nop
else
leave
end
if lx < origZl then
call adrEdit 'delete' lx origZl
/* position cursor */
if lx < 10 then
lx = 2
call adrEdit 'locate' (lx-1)
return
endProcedure deleteRebinds
/*--- append 1 line at the end of the data ---------------------------*/
appLine: procedure expose m.
parse arg line
call adrEdit 'line_after .zl = (line)'
if word(line, 1) = 'REBIND' then
call cmp 'n' , line
return
endProcedure appLine
/*--- compare rebind statements --------------------------------------*/
cmp: procedure expose m.
parse arg typ, line
line = strip(line)
do x=1 to m.cmp.0
if m.cmp.x = line then do
m.cmpTyp.x = m.cmpTyp.x || typ
return
end
end
m.cmp.0 = x
m.cmp.x = line
m.cmpTyp.x = typ
return
endProcedure cmp
/*--- print compare rebind statements --------------------------------*/
cmpPrint: procedure expose m.
parse arg typ, line
eq = 0
nw = 0
od = 0
un = 0
do x=1 to m.cmp.0
if m.cmpTyp.x = 'no' | m.cmpTyp.x = 'on' then do
m.cmpTyp.x = '='
eq = eq + 1
end
else if m.cmpTyp.x = 'n' then
nw = nw + 1
else if m.cmpTyp.x = 'o' then
od = od + 1
else
un = un + 1
end
call appLine '---- compare' eq '=,' nw 'new,' od 'old,' ,
un 'others, total' m.cmp.0
do x=1 to m.cmp.0
call appLine '--'left(m.cmpTyp.x, 5)m.cmp.x
end
return
endProcedure cmpPrint
/***********************************************************************
scanning sql
***********************************************************************/
/*--- scan a qualified sql identifier --------------------------------*/
sqlQuId: procedure expose m.
parse arg mr
if \ scanSqlQuId(scanSkip(mr)) then
return ''
return m.mr.val
endProcedure sqlQualId
/*--- scan a sql identifier e.g. abc or "efg" ------------------------*/
sqlDeId: procedure expose m.
parse arg mr
if \ scanSqlDeId(scanSkip(mr)) then
return ''
return m.mr.val
endProcedure sqlDeId
/*--- scan a name after skipping over space and newLines -------------*/
sqlId: procedure expose m.
parse arg mr
if \ scanSqlId(scanSkip(mr)) then
return ''
return m.mr.val
endProcedure sqlId
/***********************************************************************
interface to scan - use edit data as scanner input
***********************************************************************/
/*--- error handling -------------------------------------------------*/
/* copy scan begin ****************************************************
Scan: scan an input:
scanLine(m,ln) : begin scanning a single line (string)
scanRead??(m,ln): begin scanning all lines of an opened reader
scanAtEnd(m) : returns whether we reached end of input
scanLit(m,lit) : scan Literal lit if present or return 0
scanChar(m,n) : scan next n characters
scanName(m) : scan a name
ScanNat(m) : scan a natural number (without sign)
scanString(m,q): scan a String with quote q. (with doubble = 1)
scanVerify(m,c,o): verify(...,c,o,...)
scanKeyValue(m): scan a key = value clause (with spaces)
scanWord(m,u) : scan a space delimited word or a string,
if u=1 then uppercase non-strings
scanErr(m, txt): error with current scan location
m is an adress, to store our state
if a scan function succeeds, the scan posititon is moved
returns: true if scanned, false otherwise
m.m.tok ==> last token
m.m.val ==> last value for scanString/Word/KeyValue
m.key ==> key for scanKeyValue
m.m.pos ==> scan position
m.m.src ==> scan source
***********************************************************************/
scanIni: procedure expose m.
if m.scan.ini == 1 then
return
m.scan.ini = 1
m.scan.alfLC = 'abcdefghijklmnopqrstuvwxyz'
m.scan.alfUC = translate(m.scan.alfLC)
m.scan.alfa = m.scan.alfLC || m.scan.alfUC
m.scan.alfNum = m.scan.alfa || '0123456789'
return
endProcedure scanIni
scanReset: procedure expose m.
parse arg m, n1, np, co
m.m.rdr = ''
m.m.jReading = 0 /* if called without jReset */
m.m.jWriting = 0
return scanOpts(m, n1, np, co)
endProcedure scanReset
scanOpts: procedure expose m.
parse arg m, m.m.scanName1, namePlus, m.m.scanComment
if m.m.scanName1 == '' then
m.m.scanName1 = m.scan.alfa
if namePlus == '' then
m.m.scanNameR = m.m.scanName1 || '0123456789'
else
m.m.scanNameR = m.m.scanName1 || namePlus
return m
endProcedure scanOpts
/*--- begin scanning a single line -----------------------------------*/
scanSrc: procedure expose m.
parse arg m, m.m.src
return scanOpen(m)
endProcedure scanSrc
scanOpen: procedure expose m.
parse arg m
m.m.tok = ''
m.m.val = ''
m.m.key = ''
m.m.pos = 1
m.m.atEnd = m.m.rdr == ''
m.m.jReading = 1
return m
endProcedure scanOpen
/*--- return the next len characters ---------------------------------*/
scanLook: procedure expose m.
parse arg m, len
if len == '' then
return substr(m.m.src, m.m.pos)
else
return substr(m.m.src, m.m.pos,
, min(len, 1 + length(m.m.src) - m.m.pos))
endProcedure scanLook
/*--- scan the literal lit ------------------------------------------*/
scanLit: procedure expose m.
parse arg m
do ax=2 to arg()
if abbrev(substr(m.m.src, m.m.pos), arg(ax)) then do
m.m.tok = arg(ax)
m.m.pos = m.m.pos + length(arg(ax))
return 1
end
end
m.m.tok = ''
return 0
endProcedure scanLit
/*--- scan the next len characters -----------------------------------*/
scanChar: procedure expose m.
parse arg m, len
nx = 1 + length(m.m.src)
if len \= '' then
nx = min(m.m.pos + len, nx)
m.m.tok = substr(m.m.src, m.m.pos, nx - m.m.pos)
m.m.pos = nx
return m.m.tok \== ''
endProcedure scanChar
/*--- scan a string with quote char qu -------------------------------*/
scanString: procedure expose m.
parse arg m, prefs
m.m.tok = ''
bx = m.m.pos
if prefs = '' then do
qu = substr(m.m.src, bx, 1)
if pos(qu, "'""") < 1 then
return 0
ax = bx + 1
end
else do
do px=1 until abbrev(substr(m.m.src, bx), p1)
p1 = word(prefs, px)
if p1 = '' then
return 0
end
qu = right(p1, 1)
ax = bx + length(p1)
end
m.m.val = ''
do forever
qx = pos(qu, m.m.src, ax)
if qx < 1 then
return scanErr(m, 'ending Apostroph('qu') missing')
m.m.val = m.m.val || substr(m.m.src, ax, qx-ax)
if qx >= length(m.m.src) then
leave
else if substr(m.m.src, qx+1, 1) <> qu then
leave
ax = qx+2
m.m.val = m.m.val || qu
end
m.m.tok = substr(m.m.src, bx, qx+1-bx)
m.m.pos = qx+1
return 1
endProcedure scanString
/*--- scan a Name, first char in *.scanName1, rest in *.scanNameR ----*/
scanName: procedure expose m.
parse arg m
if pos(substr(m.m.src, m.m.pos, 1),
, m.m.scanName1) <= 0 then do
m.m.tok = ''
return 0
end
return scanVerify(m, m.m.scanNameR)
endProcedure scanName
/*--- scan with verify, vOpt is passed to verify ---------------------*/
scanVerify: procedure expose m.
parse arg m, alpha, vOpt, onlyIfMatch
if vOpt == '' then /* empty string does not take default */
nx = verify(m.m.src, alpha, , m.m.pos)
else
nx = verify(m.m.src, alpha, vOpt, m.m.pos)
if nx = 0 then
if onlyIfMatch == 1 then
nx = m.m.pos
else
nx = length(m.m.src) + 1
m.m.tok = substr(m.m.src, m.m.pos, nx - m.m.pos)
m.m.pos = nx
return m.m.tok \== ''
endProcedure scanVerify
/*--- scan a natural number (no sign, decpoint ...) ------------------*/
scanNat: procedure expose m.
parse arg m, chEn
if \ scanVerify(m, '0123456789') then
return 0
if chEn \== 0 then
if pos(scanLook(m , 1), m.m.scanNameR) > 0 then
call scanErr m, 'illegal number end after' m.m.tok
return 1
endProcedure ScanNat
/*--- scan an integer (optional sign, no decpoint ...) ---------------*/
scanInt: procedure expose m.
parse arg m, chEn
call scanLit m, '+', '-'
si = m.m.tok
if \ scanNat(m, chEn) then do
m.m.pos = m.m.pos - si
return 0
end
m.m.tok = si || m.m.tok
return 1
endProcedure scanInt
/*--- scan a number (optional sign, decpoint, exponent) ------------*/
scanNum: procedure expose m.
parse arg m, chEn
sx = m.m.pos
call scanLit m, '+', '-'
po = scanLit(m, '.')
if \ scanNat(m, 0) then do
m.m.pos = sx
return 0
end
if \ po then
if scanLit(m, '.') then
call scanNat m, 0
if scanLit(m, 'e', 'E') then
if \ scanInt(m, 0) then
call scanErr m, 'exponent expected after' ,
substr(m.m.src, sx, m.m.pos-sx)
m.m.tok = substr(m.m.src, sx, m.m.pos-sx)
m.m.val = translate(m.m.tok)
if chEn \== 0 then
if pos(scanLook(m , 1), m.m.scanNameR) > 0 then
call scanErr m, 'illegal number end after' m.m.tok
return 1
endProcedure scanNum
/*--- scan a word and put value into *.val
a word is either delimited by space or stopper
or a string (with single or double quotes -------*/
scanWord: procedure expose m.
parse arg m, stopper
if scanString(m) then return 1
if \scanVerify(m, ' 'stopper, 'm') then return 0
m.m.val = m.m.tok
return 1
endProcedure scanWord
scanType: procedure expose m.
parse arg m, opt
m.m.tok = ''
if scanName(m) then
m.m.type = 'n'
else if scanNum(m) then
m.m.type = 0
else if scanString(m) then
m.m.type = left(m.m.tok, 1)
else if scanSpaceNl(m) then
m.m.type = 's'
else do
call scanChar m, 1
m.m.type = m.m.tok
end
return m.m.type
endProcedure scanType
scanBack: procedure expose m.
parse arg m, tok
if m.m.pos <= length(tok) then
call scanErr sc, 'cannot back "'tok'" length'
cx = m.m.pos - length(tok)
if substr(m.m.src, cx, length(tok)) \== tok then
call scanErr sc, 'cannot back "'tok'" value'
m.m.pos = cx
return
endProcedure scanBack
/*--- scan a key = word phrase
put key into m.key and word into m.m.val -------*/
scanKeyValue: procedure expose m.
parse arg m, def
if \ scanName(m) then
return 0
m.m.key = m.m.tok
if \ scanLit(scanSkip(m), '=') then do
m.m.val = def
m.m.tok = ' no='
end
else if \scanWord(scanSkip(m)) then
return scanErr(m, 'word expected after' m.m.key '=')
return 1
endProcedure scanKeyValue
/*--- return true/false whether we are at the end of input ----------*/
scanAtEnd: procedure expose m.
parse arg m
return m.m.atEnd & m.m.pos > length(m.m.src)
endProcedure scanAtEnd
/*--- skip over spaces, nl and comments (if option set) --------------*/
scanSpaceNL: procedure expose m.
parse arg m
lastTok = m.m.tok
if m.m.rdr \== '' then
interpret 'res = ' objMet(m, 'scanSpaceNl')
else
res = scanSpaceCom(m)
m.m.tok = lastTok
return res
endProcedure scanSpaceNL
scanSpaceCom: procedure expose m.
parse arg m
res = scanVerify(m, ' ')
if m.m.scanComment \== '' then
if abbrev(substr(m.m.src, m.m.pos), m.m.scanComment) then do
m.m.pos = 1 + length(m.m.src)
return 1
end
return res
endProcedure scanSpaceCom
/*--- skip over space, nl and comments and return m -----------------*/
scanSkip: procedure expose m.
parse arg m
call scanSpaceNl m
return m
endProcedure scanSkip
/*--- emit an error with current scan pos ----------------------------*/
scanErr: procedure expose m.
parse arg m, txt
m.m.err.0 = 0
call err 'scanErr' txt'\n'scanInfo(m, m'.ERR')
return 0
endProcedure scanErr
scanPos: procedure expose m.
parse arg m
if m.m.rdr \== '' then
interpret 'return' objMet(m, 'scanPos')
else if scanAtEnd(m) then
return E
else
return 1 m.m.pos
endProcedure scanPos
scanInfo: procedure expose m.
parse arg m
msg = 'last token' m.m.tok 'scanPosition' ,
strip(left(substr(m.m.src, m.m.pos), 40), 't')
if m.m.rdr == '' then
return msg'\npos' m.m.Pos 'in string' strip(m.m.src, 't')
else
interpret 'return msg ||' objMet(m, 'scanInfo')
endProcedure scanInfo
/* copy scan end ****************************************************/
/* copy scanRead begin ************************************************/
scanReadIni: procedure expose m.
if m.scanRead.ini = 1 then
return
m.scanRead.ini = 1
call scanIni
call jIni
ts = classNew('n Scan u f TOK v, f VAL v, f KEY v, f TYPE v')
call classNew 'n ScanRead u JRW', 'm',
, 'jReset call scanReadReset m, arg, arg2, arg3',
, 'jOpen call scanReadOpen m',
, 'jClose call jClose m.m.rdr',
, 'jRead call scanType m; call oClaCopy "'ts'", m, var;' ,
'return m.m.type \== ""',
, 'scanReadNl return scanReadNlImpl(m, unCond)',
, 'scanSpaceNl scanReadSpaceNl(m)',
, 'scanInfo scanReadInfo(m)',
, 'scanPos scanReadPos(m)'
call classNew "n EditRead u JRW", "m",
, "jRead return editRead(m, var)",
, "jOpen" ,
, "jReset m.m.linex = arg - 1"
return
endProcedure scanReadIni
/*--- begin scanning the lines of a reader ---------------------------*/
scanRead: procedure expose m.
parse arg rdr, n1, np, co
return scanOpts(oNew('ScanRead', rdr), n1, np, co)
scanReadReset: procedure expose m.
parse arg m, r, n1, np, co
call scanReset m, n1, np, co
m.m.rdr = r
return m
endProcedure scanReadReset
scanReadOpen: procedure expose m.
parse arg m, r, n1, np, co
call scanOpen m
m.m.atEnd = 0
m.m.lineX = 0
call jOpen m.m.rdr, m.j.cRead
call scanReadNl m, 1
return m
endProcedure scanReadOpen
/*--- scan over next newLine
if unCond \== 1 only if we are already at endOfLine
return true if we scanned a NL ------------------------------*/
scanReadNl: procedure expose m.
parse arg m, unCond
interpret objMet(m, 'scanReadNl')
endProcedure scanReadNl
/*--- implementation of scanReadNl ----------------------------------*/
scanReadNLimpl: procedure expose m.
parse arg m, unCond
if unCond \== 1 then
if m.m.pos <= length(m.m.src) then
return 0
if m.m.atEnd then
return 0
m.m.atEnd = \ jRead(m.m.rdr, m'.SRC')
if m.m.atEnd then do
m.m.pos = 1 + length(m.m.src)
end
else do
m.m.pos = 1
m.m.lineX = m.m.lineX + 1
end
return \ m.m.atEnd
endProcedure scanReadNLimpl
scanReadSpaceNl: procedure expose m.
parse arg m
fnd = 0
do forever
if scanSpaceCom(m) then
fnd = 1
if \ scanReadNl(m) then
return fnd
fnd = 1
end
endProcedure scanReadSpaceNl
scanReadPos: procedure expose m.
parse arg m, msg
if scanAtEnd(m) then
return E
else
return m.m.lineX m.m.pos
endProcedure scanReadPos
scanReadInfo: procedure expose m.
parse arg m, msg
if scanAtEnd(m) then
msg = msg'\natEnd after'
else
msg = msg'\npos' m.m.pos 'in'
return msg 'line' m.m.lineX':' strip(m.m.src, 't')
endProcedure scanReadInfo
/*--- use scan sqlEdit macro --> temporarily here --------------------*/
/*--- read next line from edit data ----------------------------------*/
editRead: procedure expose m.
parse arg m, var
m.m.lineX = m.m.lineX + 1
if adrEdit('(ll) = line' m.m.lineX, 12) ^= 0 then
return 0
m.var = ll
return 1
endProcedure editRead
/*--- search loop in edit macro --------------------------------------*/
scanSqlSeekId: procedure expose m.
parse arg m, lx, cmd, opts
if opts = '' then
opts = word
/* line 1 col 0, otherwise first word is skipped*/
if adrEdit("cursor =" max(trunc(lx), 1) 0, 12) = 12 then
return -1
do while adrEdit("seek" cmd opts, 4) = 0 /* find each command*/
call adrEdit "(fx) = cursor"
if m.debug then do
call adrEdit "(LI) = LINE" fx
call debug 'scanSqlSeekId after' lx 'found' cmd 'at' fx li
end
call jReset m.m.rdr, fx
call jOpen m, '<'
m.m.lineX = fx
do while word(scanPos(m), 1) <= fx & scanSqlClass(m)
if m.m.sqlClass = 'i' & m.m.val == cmd then
return fx
end
call jClose m
end
return -1
endProcedure scanSqlSeekId
/* copy scanRead end **************************************************/
/* copy scanWin begin *************************************************
scan the the concatenation of the lines of a reader
any token my be split over several line
except the end-of-line-comment-token
***********************************************************************/
scanWinIni: procedure expose m.
if m.scanWin.ini = 1 then
return
m.scanWin.ini = 1
call scanReadIni
call jIni
call classNew 'n ScanWin u JRW', 'm',
, 'jReset call scanWinReset m, arg, arg2, arg3',
, 'jOpen call scanWinOpen m, arg(3) ',
, 'jClose call scanWinClose m ',
, 'scanReadNl return scanWinNl(m, unCond)',
, 'scanSpaceNl scanWinSpaceNl(m)',
, 'scanInfo scanWinInfo(m)',
, 'scanPos scanWinPos(m)'
return
endProcedure scanWinIni
/*--- instanciate a new window scanner, open rdr ---------------------*/
scanWin: procedure expose m.
parse arg rdr, wiSz, wiBa, cuPo, cuLe
return scanWinOpts(oNew('ScanWin', rdr), wiSz, wiBa, cuPo, cuLe)
/*--- set the reader and attributes of window scanner m -------------*/
scanWinReset: procedure expose m.
parse arg m, r, wiSz, wiGa, cuPo, cuLe
call scanReset m
m.m.rdr = r
m.m.atEnd = 'still closed'
return scanWinOpts(m, wiSz, wiGa, cuPo, cuLe)
endProcedure scanWinReset
/*--- set the attributes of window scanner m ------------------------*/
scanWinOpts: procedure expose m.
parse arg m, wiSz, wiGa, cuPo, cuLe
wiSz = word(wiSz 5, 1)
wiGa = word(wiGa 1, 1)
m.m.cutPos = word(cuPo 1, 1)
m.m.cutLen = word(cuLe 72, 1)
m.m.winTot = (wiSz * 2 + wiGa) * m.m.cutLen
m.m.posLim = (wiSz + wiGa) * m.m.cutLen
m.m.posOff = wiGa * m.m.cutLen
return m
endProcedure scanWinOpts
/*--- open reader and start scanning --------------------------------*/
scanWinOpen: procedure expose m.
parse arg m, lx
call scanOpen m
m.m.atEnd = 0
if lx = '' then
m.m.lineX = 1
else
m.m.lineX = lx
m.m.pos = 1
m.m.src = ''
call jOpen m.m.rdr, m.j.cRead
call scanWinRead m
return m
endProcedure scanWinOpen
scanWinClose: procedure expose m.
parse arg m
m.m.atEnd = 'still closed'
call jClose m.m.rdr
return
endProcedure scanWinClose
/*--- move the source window: cut left side and append at right side
return number of characters cut at left ------------------------*/
scanWinRead: procedure expose m.
parse arg m
dlt = 0
if m.m.atEnd then
return 0
if m.m.pos >= m.m.posLim then do /* cut left side */
dlt = m.m.pos - (m.m.pos // m.m.cutLen + m.m.posOff)
m.m.src = substr(m.m.src, dlt+1)
m.m.pos = m.m.pos - dlt
m.m.lineX = m.m.lineX + dlt % m.m.cutLen
end
do while length(m.m.src) < m.m.winTot /* read and fill to len */
if \ jRead(m.m.rdr, m'.'one) then do
m.m.atEnd = 1
return dlt
end
m.m.src = m.m.src || substr(m.m.one, m.m.cutPos, m.m.cutLen)
end
call assert 'length(m.m.src) = m.m.winTot'
return dlt
endProcedure scanWinRead
/*--- return position of next line start -----------------------------*/
scanWinNLPos: procedure expose m.
parse arg m
return m.m.pos + m.m.cutLen - ((m.m.pos - 1) // m.m.cutLen)
/*--- scan over spaces and comments ----------------------------------*/
scanWinSpaceNL: procedure expose m.
parse arg m
res = 0
do forever
call scanWinRead m
if scanVerify(m, ' ') then do
res = 1
iterate
end
else if scanLit(m, '/*') then do
ex = pos('*/', m.m.src, m.m.pos+2)
if ex <= m.m.pos then
return scanErr(m, '*/ missing after /*')
m.m.pos = ex+2
res = 1
end
else do
cl = length(m.m.scanComment)
np = scanWinNlPos(m)
if \ ( cl>0 & m.m.pos+cl <= np & m.m.scanComment ,
== substr(m.m.src, m.m.pos, cl)) then
return res
m.m.pos = np
res = 1
end
end
endProcedure scanWinSpaceNl
/*--- return current position in input ------------------------------*/
scanWinPos: procedure expose m.
parse arg m
if scanAtEnd(m) then
return 'E'
else
ps = m.m.pos - 1
return (m.m.lineX + (ps % m.m.cutLen)) (ps // m.m.cutLen + 1)
endProcedure scanWinPos
/*--- return a description of the current scan position --------------*/
scanWinInfo: procedure expose m.
parse arg m
p = scanWinPos(m)
if p == 'E' then do
res = 'atEnd after'
p = m.m.lineX - 1 + length(m.m.src) % m.m.cutLen
end
else do
res = 'pos' word(p, 2) 'in'
p = word(p, 1)
end
return '\n'res 'line' p':' strip(substr(m.m.src,
, 1 + (p - m.m.lineX) * m.m.cutLen, m.m.cutLen), 't')
endProcedure scanWinInfo
/* copy scanWin end *************************************************/
/* copy scanSql begin *************************************************/
/*--- initialize with reader inRdr ----------------------------------*/
scanSql: procedure expose m.
parse arg inRdr
return scanSqlReset(scanWin(inRdr), inRdr)
scanSqlReset: procedure expose m.
parse arg m, r, scanWin
if scanWin \== 0 then
call scanWinOpts m, 5, 2, 1, 72
m.m.rdr = r
return scanOpts(m, , '0123456789_' , '--')
endProcedure scanSqlReset
/*--- scan a sql token put class in m.sqlclass:
'i': ordinary identifier e.g. Name
'd': delimited identifier e.g. "Delimited"
'q': qualified identifier e.g. abc."efg"
'u': integer units e.g. 8G
'n': number e.g. -234 or .2e3
's': string e.g. 'abc''ef'
'' : at end
: any other character e.g. ;
----------------------------------------------------------------*/
scanSqlClass: procedure expose m.
parse arg m, retSpace
m.m.val = ''
if scanSpaceNl(m) & retSpace = 1 then do
m.m.sqlClass = 'b'
return 1
end
c2 = scanLook(m ,2)
if scanString(m, "' x' X'") then do
m.m.sqlClass = 's'
if \abbrev(m.m.tok, "'") then
m.m.val = x2c(m.m.val)
end
else if scanSqlQuId(m) then do
if m.m.val.0 > 1 then
m.m.sqlClass = 'q'
else if abbrev(m.m.tok, '"') then
m.m.sqlClass = 'd'
else
m.m.sqlClass = 'i'
end
else if scanSqlNum(m, 0) then
m.m.sqlClass = 'n'
else if scanChar(m, 1) then
m.m.sqlClass = m.m.tok
else if scanAtEnd(m) then do
m.m.sqlClass = ''
return 0
end
else
call scanErr m, 'cannot scan sql'
return 1
endProcedure scanSqlClass
scanSqlSkipBrackets: procedure expose m.
parse arg m, br
if br \== '' then
nop
else if scanLit(m, '(') then
br = 1
else
return 0
do while scanSqlClass(m) & m.m.sqlClass \== ';'
if m.m.sqlClass = '(' then br = br + 1
else if m.m.sqlClass \== ')' then iterate
else if br > 1 then br = br - 1
else return 1
end
call scanErr m, '; or eof, but' br 'closing ) expected'
endProcedure skipBrackets
/*--- scan an ordinary sql identifier e.g. abc, ef_12 ----------------*/
scanSqlId: procedure expose m.
parse arg m
if \ scanName(m) then
return 0
m.m.val = translate(m.m.tok)
return 1
endProcedure scanSqlId
/*--- scan a delimited or ordinay sql identifier ---------------------*/
scanSqlDeId: procedure expose m.
parse arg m
if scanSqlId(m) then
return 1
if \ scanString(m, '"') then
return 0
m.m.val = strip(m.m.val, 't')
return 1
endProcedure scanSqlDeId
/*--- scan a qualified sql identifier --------------------------------*/
scanSqlQuId: procedure expose m.
parse arg m
res = ''
rto = ''
do qx=1
if \ scanSqlDeId(m) then do
if qx <> 1 then
call scanErr m, 'id expected after .'
return 0
end
m.m.val.qx = m.m.val
res = res'.'m.m.val
rto = rto'.'m.m.tok
if \ scanLit(scanSkip(m), '.') then
leave
call scanSpaceNl m
end
m.m.val.0 = qx
m.m.val = substr(res, 2)
m.m.tok = substr(rto, 2)
return 1
endProcedure scanSqlQuId
/*--- scan a sql number ----------------------------------------------*/
scanSqlNum: procedure expose m.
parse arg m, checkEnd, noSp
si = ''
if noSp == 1 then
call err 'deimplement noSp, use scanNum instead'
if scanLit(m, '+', '-') then do
si = m.m.tok
call scanSpaceNl m
ch = scanLook(m, 2)
if left(ch, 1) == '.' then
ch = substr(ch, 2)
if pos(left(ch, 1), '0123456789') < 1 then do
call scanBack m, si
m.m.val = ''
return 0
end
end
res = scanNum(m, checkEnd)
m.m.val = si || m.m.val
return res
endProcedure scanSqlNum
/*--- scan a sql number with a unit which may follow without space ---*/
scanSqlNumUnit: procedure expose m.
parse arg m, both, units
if \ scanSqlNum(m, 0) then
return 0
nu = m.m.val
sp = scanSpaceNl(m)
if scanSqlId(m) then do
if units == '' | wordpos(m.m.val, units) > 0 then
nu = nu m.m.val
else if both | \ sp then
call scanErr m, 'scanSqlNumUnit after' nu 'bad unit' m.m.val
else
call scanBack m, m.m.tok
end
else if both then
call scanErr m, 'scanSqlNumUnit no unit after' nu
else if \sp & pos(scanLook(m, 1), m.m.scanNameR) > 0 then
call scanErr m, 'scanSqlNumUnit bad number end after' nu
m.m.val = nu
return 1
endProcedure scanSqlNumUnit
/*--- scan a sql number with a unit which may follow without space ---*/
scanSqlStmt: procedure expose m.
parse arg m, delim
if delim == '' then
delim = ';'
res = ''
vChrs = strip('''"/'delim || left(m.m.scanComment, 1))
do forever
if scanSpaceNl(m) then
if right(res, 1) \== ' ' then
res = res' '
if scanVerify(m, vChrs, 'm') then
res = res || m.m.tok
else if scanString(m) then
res = res || m.m.tok
else if scanLit(m, delim) then do
m.m.val = res
return 1
end
else if scanChar(m, 1) then do
res = res || m.m.tok
end
else do
m.m.val = res
return res \= ''
end
end
endProcedure scanSqlStmt
/* copy scanSql end *************************************************/
/* copy sql begin ***************************************************
sql interface
***********************************************************************/
sqlIni: procedure expose m.
parse arg opt
if m.sql.ini == 1 & opt \== 1 then
return
m.sqlNull = '---'
m.sqlInd = 'sqlInd'
m.sqlRetOK.0 = 0
m.sqlMsgCa = 0
m.sqlMsgDsntiar = 1
m.sqlMsgCodeT = 0
call sqlPushRetOk
m.sql.ini = 1
m.sql.connected = ''
return
endProcedure sqlIni
/*--- prepare statement 's'cx from sql src into descriptor desc ------*/
sqlPrepare: procedure expose m.
parse arg cx, src, descOut, descInp
s = ''
if descOut == 1 then
s = 'into :M.SQL.'cx'.D'
res = sqlExec('prepare s'cx s 'from :src')
if res < 0 then
return res
if descInp == 1 | (descInp == '' & pos('?', src) > 0) then
res = sqlExec('describe input s'cx 'into :M.SQL.'cx'.I')
else
m.sql.cx.i.sqlD = 0
return res
endProcedure
/*--- prepare and declare 'c'cx from sql src -------------------------*/
sqlPreDeclare: procedure expose m.
parse arg cx, src, descOut, descInp
res = sqlPrepare(cx, src, descOut, descInp)
if res >= 0 then
return sqlExec('declare c'cx 'cursor for s'cx)
return res
endProcedure sqlPreDeclare
/*--- prepare, declare and open 'c'cx from sql src -------------------*/
sqlPreOpen: procedure expose m.
parse arg cx, src, descOut, descInp
res = sqlPreDeclare(cx, src, descOut, descInp)
if res >= 0 then
return sqlOpen(cx)
return res
endProcedure sqlPreOpen
/*--- open cursor 'c'cx using arguments arg(2), arg(3)... ------------*/
sqlOpen: procedure expose m.
parse arg cx
do ix=1 to arg()-1
call sqlDataSet 'SQL.'cx'.I', ix, arg(ix+1)
end
return sqlExec('open c'cx 'using descriptor :M.SQL.'cx'.I')
endProcedure sqlOpen
/*--- close cursor 'c'cx ---------------------------------------------*/
sqlClose: procedure expose m.
parse arg cx, src
return sqlExec('close c'cx)
endProcedure sqlClose
/*--- fetch cursor 'c'cx into variables ggVars -----------------------*/
sqlFetchInto:
parse arg ggCx, ggVars
if ggVars == '' then
ggVars = 'descriptor :M.SQL.'ggCX'.D'
/* accept sqlCodes > 0 except 100 */
ggRes = sqlExec('fetch c'ggCx 'into' ggVars, 100 m.sqlRetOk)
if ggRes == 0 then
return 1
if ggRes == 100 then
return 0
return ggRes
endProcedure sqlFetchInto
/*--- return sql variable list for stem st and fields the word in vars
if withInd == 1 then with sqlIndicator variables
sqlVars('S', 'A B') --> ':S.A, :S.B'
sqlVars('S', 'A B', 1) --> ':S.A :S.A.SQLIND, :S.B :S.B.SQLIND'
----------------------------------------------------------------------*/
sqlVars: procedure expose m.
parse arg st, vars, withInd
res = ''
if st ^== '' then
st = st'.'
do ix=1 to words(vars)
res = res', :'st || word(vars, ix)
if withInd == 1 then
res = res ':'st || word(vars, ix)'.sqlInd'
end
return substr(res, 3)
endProcedure sqlVars
sqlVarsNull: procedure expose m.
parse arg st, vars
hasNulls = 0
do ix = 1 to words(vars)
fld = word(vars, ix)
if m.st.fld.sqlInd < 0 then do
m.st.fld = m.sqlNull
hasNulls = 1
end
end
return hasNulls
endProcedure sqlVarsNull
/*--- open cursor 'c'cx fetch all into variables vars and close
st = passed stem, sx = row number
return number of rows fetched ----------------------------------*/
sqlOpAllCl:
parse arg ggCx, st, ggVars
do ggAx=4 to arg()
call sqlDataSet 'SQL.'ggCx'.I', ggAx-3, arg(ggAx)
end
ggRes = sqlOpen(ggCx)
if ggRes < 0 then
return ggRes
do sx = 1 until ggRes \== 1
ggRes = sqlFetchInto(ggCx, ggVars)
end
m.st.0 = sx - 1
call sqlClose ggCx
if ggRes == 0 then
return m.st.0
return ggRes
endProcedure sqlOpAllCl
sqlDataSet: procedure expose m.
parse arg da, ix, val
m.da.ix.sqlData = val
m.da.ix.sqlInd = - (arg(ix+2) == m.sqlNull)
/* data types schienen einmal nicht zu funktionieren .......
if wordPos(m.da.ix.sqlType, '384 385 388 389 392 393') > 0 then
m.da.ix.sqlType = 448 + (m.da.ix.sqlType // 2) */
return
endProcedure sqlDataSet
/*--- prepare, declare open cursor 'c'cx, fetch all and close
return number of rows fetched ----------------------------------*/
sqlPreAllCl:
parse arg ggCx, ggSrc, st, ggVars
ggRes = sqlPreDeclare(ggCx, ggSrc)
if ggRes >= 0 then
return sqlOpAllCl(ggCx, st, ggVars)
return ggRes
endProcedure sqlPreAllCl
/*--- execute statement 's'cx using arguments arg(2), arg(3)... ------*/
sqlExecute:
parse arg ggCx ggRetOk /* no , for ggRetOk, arg(2) is used already| */
do ggAx=2 to arg()
call sqlDataSet 'SQL.'ggCx'.I', ggAx-1, arg(ggAx)
end
return sqlExec('execute s'ggCx 'using descriptor :M.SQL.'ggCx'.I',
, ggRetOk)
endProcedure
/*--- execute immediate the sql src ----------------------------------*/
sqlExImm:
parse arg ggSrc, ggRetOk
return sqlExec('execute immediate :ggSrc', ggRetOk)
endProcedure sqlExImm
sqlCommit: procedure expose m.
parse arg src
return sqlExec('commit')
endProcedure sqlCommit
/*--- execute sql thru the dsnRexx interface -------------------------*/
sqlExec: /* no procedure, to keep variables sql... */
parse arg ggSqlStmt, ggRetOk, ggNo
if ggNo <> '1' then
ggSqlStmt = 'execSql' ggSqlStmt
address dsnRexx ggSqlStmt
/* say 'sqlCode' sqlCode 'rc' rc 'for' ggSqlStmt ggNo */
if rc = 0 then
return 0
if ggRetOk = '' then
ggRetOk = m.sqlRetOk
if wordPos(rc, '1 -1') < 0 then
call err 'dsnRexx rc' rc sqlmsg()
else if pos('*', ggRetOk) > 0 | wordPos(sqlCode, ggRetOk) > 0 ,
then do
if sqlCode < 0 & pos('say', ggRetOk) > 0 then
say 'sqlError' sqlmsg()
return sqlCode
end
else if rc < 0 then
call err sqlmsg()
else if sqlCode <> 0 | (pos('w',ggRetOk)<1 & sqlWarn.0^==' ') then
call errSay sqlMsg(), ,'w'
return sqlCode
endSubroutine sqlExec
/*--- connect to the db2 subsystem sys -----------------------------*/
sqlConnect: procedure expose m.
parse upper arg sys, retOk
call sqlIni
address tso "SUBCOM DSNREXX"
if rc <> 0 then do
sRc = RXSUBCOM('ADD','DSNREXX','DSNREXX') /* ADD HOST CMD ENV */
if sRc <> 0 then
call err 'rc' sRc 'from RXSUBCOM(ADD, DSNREXX, DSNREXX)'
end
if sys = '-' then
return 0
res = sqlExec("connect" sys, retOk ,1)
if res >= 0 then
m.sql.connected = sys
return res
endProcedure sqlConnect
/*--- diconnect from db2 ---------------------------------------------*/
sqlDisconnect: procedure expose m.
parse arg retOk
m.sql.connected = ''
return sqlExec("disconnect ", retOk, 1)
endProcedure sqlDisconnect
/*--- connect and/or disconnect to DB2 -------------------------------*/
sqlConDis: procedure expose m.
parse upper arg sys, retOk
if sys \== '' then
nop
else if sysvar(sysnode) == 'RZ1' then
sys = 'DBAF'
else
call err 'no default subsys for' sysvar(sysnode)
call sqlIni
if sys == m.sql.connected then
return 0
if m.sql.connected \== '' then
call sqlDisconnect
if sys = '-' then
return 0
return sqlConnect(sys, retOk)
endProcedure sqlConDis
/*--- push and pop currently accepted sqlCodes -----------------------*/
sqlPushRetOk: procedure expose m.
parse arg rr
nx = m.sqlRetOk.0 + 1
m.sqlRetOk.0 = nx
m.sqlRetOk.nx = rr
m.sqlRetOk = rr
return
endProcedure sqlPushRetOk
sqlPopRetOk: procedure expose m.
nx = m.sqlRetOk.0 - 1
if nx < 1 then
call err 'sqlPopRetOk with .0' m.sqlRetOk.0
m.sqlRetOk = m.sqlRetOk.nx
m.sqlRetOk.0 = nx
return
endProcedure sqlPopRetOk
/*--- issue an sql error message -------------------------------------*/
sqlMsg: /* no procedure, to keep variables sql... */
ggRes = ''
if \ dataType(sqlCode, 'n') then do
ggRes = 'sqlCode' sqlCode 'not numeric\n'sqlMsgCa()
end
else do
signal on syntax name sqlMsgOnSyntax
if m.sqlMsgCodeT == 1 then
ggRes = 'sqlCode' sqlCodeT(sqlCode, sqlErrMc, sqlwarn.0':' ,
|| sqlwarn.1||sqlwarn.2||sqlwarn.3||sqlwarn.4||sqlwarn.5',',
|| sqlwarn.6||sqlwarn.7||sqlwarn.8||sqlwarn.9||sqlwarn.10)
if 0 then
sqlMsgOnSyntax: do
ggRes = sqlMsgCa(),
'\n<<rexx sqlCodeT not found or syntax>>'
end
signal off syntax
if m.sqlMsgDsnTiar == 1 then do
ggRes = ggRes || sqlDsntiar()
ggWa = sqlMsgWarn(sqlWarn)
if ggWa \= '' then
ggRes = ggRes'\nwarnings' ggWa
end
if m.sqlMsgCa == 1 then
ggRes = ggRes'\n'sqlMsgCa()
end
ggSqlSp = ' ,:+-*/&%?|()¢!'
ggXX = pos(':', ggSqlStmt)+1
do ggSqlVx=1 to 12 while ggXX > 1
ggYY = verify(ggSqlStmt, ggSqlSp, 'm', ggXX)
if ggYY < 1 then
ggYY = length(ggSqlStmt) + 1
ggSqlVa.ggSqlVx = substr(ggSqlStmt, ggXX, ggYY - ggXX)
do ggQQ = ggXX-2 by -1 to 1 ,
while substr(ggSqlStmt, ggQQ, 1) == ' '
end
do ggRR = ggQQ by -1 to 1 ,
while pos(substr(ggSqlStmt, ggRR, 1), ggSqlSp) < 1
end
if ggRR < ggQQ & ggRR > 0 then
ggSqlVb.ggSqlVx = substr(ggSqlStmt, ggRR+1, ggQQ-ggRR)
else
ggSqlVb.ggSqlVx = ''
ggXX = pos(':', ggSqlStmt, ggYY+1) + 1
end
ggSqlVa.0 = ggSqlVx-1
if datatype(sqlErrd.5, 'n') & sqlErrd.5 > 0 then do
ggW2 = translate(word(ggSqlStmt, 2))
ggW3 = translate(word(ggSqlStmt, 3))
if ggW2 == 'PREPARE' then
ggRes = ggRes || sqlMsgSrF('FROM')
else if ggW2 ggW3 == 'EXECUTE IMMEDIATE' then
ggRes = ggRes || sqlMsgSrF(1)
else
ggRes = ggRes || sqlMsgSrF()
end
ggRes = ggRes'\nstmt = ' ggSqlStmt
ggPref = '\nwith'
do ggXX=1 to ggSqlVa.0
ggRes = ggRes || ggPref ggSqlVb.ggXX ':'ggSqlVa.ggXX ,
'=' value(ggSqlVa.ggXX)
ggPref = '\n '
end
if abbrev(ggRes, '\n') then
return substr(ggRes, 3)
return ggRes
endSubroutine sqlMsg
sqlMsgSrF:
parse arg ggF
if ggF \== '' & \ datatype(ggF, 'n') then do
do ggSqlVx=1 to ggSqlVa.0
if translate(ggSqlVb.ggSqlVx) = ggF then
return sqlMsgSrc(value(ggSqlVa.ggSqlVx), sqlErrd.5)
end
end
if datatype(ggF, 'n') & ggF <= ggSqlVa.0 then
return sqlMsgSrc(value(ggSqlVa.ggF), sqlErrd.5)
return sqlMsgSrc(ggSqlStmt , sqlErrd.5)
endSubroutine sqlMsgSrF
/*--- use dsnTiar to translate sql Info to error text ----------------*/
sqlDsnTiar:
sqlWarn = sqlWarn.0 || sqlWarn.1 || sqlWarn.2 || sqlWarn.3,
|| sqlWarn.4 || sqlWarn.5 || sqlWarn.6 || sqlWarn.7,
|| sqlWarn.8 || sqlWarn.9 || sqlWarn.10
if sqlCode = -438 then
return '\nSQLCODE = -438:',
'APPLICATION RAISED ERROR WITH sqlState' sqlState,
'and DIAGNOSTIC TEXT:' sqlErrMc
if digits() < 10 then
numeric digits 10
sqlCa = d2c(sqlCode, 4) ,
|| d2c(max(70, length(sqlErrMc)), 2)left(sqlErrMc, 70) ,
|| left(sqlErrP, 8) ,
|| d2c(sqlErrD.1, 4)d2c(sqlErrD.2, 4)d2c(sqlErrD.3, 4) ,
|| d2c(sqlErrD.4, 4)d2c(sqlErrD.5, 4)d2c(sqlErrD.6, 4) ,
|| sqlWarn || sqlState
if length(sqlCa) <> 124 then
call err 'sqlDa length' length(sqlCa) 'not 124' ,
'\nsqlCa=' sqlMsgCa()
return sqlDsnTiarCall(sqlCa)
/*--- call dsnTiar o translate sql Info to error text ----------------*/
sqlDsnTiarCall: procedure expose m.
parse arg ca
liLe = 78
msLe = liLe * 10
if length(ca) <> 124 then
call err 'sqlDa length' length(ca) 'not 124:' ca', hex='c2x(ca)
ca = 'SQLCA ' || d2c(136, 4) || ca
msg = d2c(msLe,2) || left('', msLe)
len = d2c(liLe, 4)
ADDRESS LINKPGM "DSNTIAR ca msg LEN"
if rc <> 0 then
call err 'linkPgm dsnTiar rc' rc 'sqlCa' ca
res = ''
do c=3 by liLe to msLe
if c = 3 then do
l1 = strip(substr(msg, c+10, 68))
cx = pos(', ERROR: ', l1)
if cx > 0 then
l1 = left(l1, cx-1)':' strip(substr(l1, cx+9))
res = res'\n'l1
end
else if substr(msg, c, 10) = '' then
res = res'\n 'strip(substr(msg, c+10, 68))
else
leave
end
return res
endProcedure sqlDsnTiarCall
sqlMsgCa:
ggWarn = ''
do ggX=0 to 10
if sqlWarn.ggX \== ' ' then
ggWarn = ggWarn ggx'='sqlWarn.ggx
end
if ggWarn = '' then
ggWarn = 'none'
return 'sqlCode' sqlCode 'sqlState='sqlState,
'\n errMC='translate(sqlErrMc, ',', 'ff'x),
'\n warnings='ggWarn 'erP='sqlErrP,
'\n errD.1='sqlErrD.1 '2='sqlErrD.2 '3='sqlErrD.3,
'\n errD.4='sqlErrD.4 '5='sqlErrD.5 '6='sqlErrD.6
endProcedure sqlMsgCa
/*--- make the text for sqlWarnings
input warn.0..warn.10 as a 11 character string ------------*/
sqlMsgWarn: procedure expose m.
parse arg w0 2 wAll
if w0 = '' & wAll = '' then
return ''
if length(wAll) \= 10 | ((w0 = '') <> (wAll = '')) then
return 'bad warn' w0':'wAll
r = ''
text =' 1=W var truncated, 1=S scrollable, 1=N nonScrollable,' ,
'2=W nulls in aggregate,' ,
'3=W more cols than vars,' ,
'3=Z more result sets than locators,' ,
'4=W no where, 4=D sensitive dynamic, 4=I insensitive,' ,
'4=S sensitive static,' ,
'5=W not valid sql, 5=1 readOnly, 5=2 readDelete,' ,
'5=3 readDeleteUpdate,' ,
'6=W day changed to month range,' ,
'7=W dec digits truncated,' ,
'8=W char substituted,' ,
'9=W arith excep in count, 9=Z multipe result sets,' ,
'10=W char conversion err in ca,'
do wx = 1 to 10
w = substr(wAll, wx, 1)
if w = ' ' then
iterate
t = wx'='w
cx = pos(' 'wx'='w' ', text)
ex = pos(',' , text, cx + 1)
if cx < 1 then
r = r wx'='w '?,'
else
r = r substr(text, cx+1, ex-cx)
end
return strip(r, 't', ',')
endProcedure sqlMsgWarn
sqlMsgSrc: procedure expose m.
parse arg src, pos, opt
if 0 then do /* old version, before and after txt */
tLe = 150
t1 = space(left(src, pos), 1)
if length(t1) > tLe then
t1 = '...'right(t1, tLe-3)
t2 = space(substr(src, pos+1), 1)
if length(t2) > tLe then
t2 = left(t2, tLe-3)'...'
res = '\nsource' t1 '<<<error>>>' t2
end
liLe = 68
liCn = 3
afLe = 25
if translate(word(src, 1)) == 'EXECSQL' then
src = substr(src, wordIndex(src, 2))
t1 = space(left(src, pos), 1)
t2 = left(' ', substr(src, pos, 1) == ' ' ,
| substr(src, pos+1, 1) == ' ') ,
|| space(substr(src, pos+1), 1)
afLe = min(afLe, length(t2))
if length(t1) + afLe > liLe * liCn then
t1 = '...'right(t1, liLe * liCn - afLe -3)
else if length(t1)+length(t2) > liLe then
t1 = left(' ', (liCn * liLe - length(t1) -afLe) // liLe)||t1
pL = length(t1) // liLe
if length(t2) <= liLe-pL then
tx = t1 || t2
else
tx = t1 || left(t2, liLe-pL-3)'...'
res = '\nsrc' strip(substr(tx, 1, liLe), 't')
do cx=1+liLe by liLe to length(tx)
res = res || '\n +' strip(substr(tx, cx, liLe), 't')
end
loc = 'pos' pos 'of' length(src)
if length(loc)+6 < pL then
return res'\n >' right('>>>'loc'>>>', pL)
else
return res'\n >' left('', pL-1)'<<<'loc'<<<'
endProcdedur sqlMsgSrc
/*--- send a command to db2 through the TSO dsn processor ------------*/
sqlDsn: procedure expose m.
parse arg st, sys, cmd, rcOk
x = outtrap('M.'st'.')
push 'END'
push cmd
address tso 'DSN SYSTEM('sys')'
rr = rc
x = outtrap(off)
if rr = 0 | rcOk = '*' | wordPos(rr, rcOk) > 0 then
return rr
fl = max(1, m.st.0 - 10)
em = 'rc' rr 'for DSN SYSTEM('sys') cmd' cmd,
'\nOuputlines' fl '-' m.st.0':'
do lx=fl to m.st.0
em = em '\n' strip(m.st.lx, 't')
end
call err em
endProcedure sqlDsn
/* copy sql end **************************************************/
/* copy j begin *******************************************************
the j framework
jReset
jOpen
jClose
jRead
jWrite
***********************************************************************/
jRead: procedure expose m.
parse arg m, var
call objMetClaM m, 'jRead'
if m.m.jReading then
interpret ggCode
else
return err('jRead('m',' var') but not opened r')
endProcedure jRead
jReadO: procedure expose m.
parse arg m
if arg() > 1 then call err '??? old interface'
call objMetClaM m, 'jReadO'
if m.m.jReading then
interpret ggCode
else
return err('jReadO('m',' var') but not opened r')
endProcedure jReadO
jWrite: procedure expose m.
parse arg m, line
call objMetClaM m, 'jWrite'
if \ m.m.jWriting then
return err('jWrite('m',' line') but not opened w')
interpret ggCode
return
endProcedure jWrite
jWriteO: procedure expose m.
parse arg m, var
call objMetClaM m, 'jWriteO'
if \ m.m.jWriting then
return err('jWriteO('m',' var') but not opened w')
interpret ggCode
return
endProcedure jWriteO
jWriteAll: procedure expose m.
parse arg m, rdr
rdr = o2file(rdr)
call objMetClaM m, 'jWriteAll'
if \ m.m.jWriting then
return err('jWriteAll('m',' rdr') but not opened w')
interpret ggCode
return
endProcedure jWriteAll
jWriteNow: procedure expose m.
parse arg m, rdr
rdr = o2file(rdr)
interpret objMet(m, 'jWriteNow')
return
endProcedure jWriteNow
jCat: procedure expose m.
parse arg opt m
if m = '' then do
m = opt
opt = m.j.cWri
end
call jOpen m, opt
do ax=2 to arg()
call jWriteAll m, arg(ax)
end
call jClose m
return m
endProcedure jCat
jWriteNowImpl: procedure expose m.
parse arg m, rdr
call jOpen rdr, m.j.cRead
do while jRead(rdr, line)
call jWrite m, m.line
end
call jClose rdr
return
endProcedure jWriteNow
jWriteNowImplO: procedure expose m.
parse arg m, rdr
call jOpen rdr, m.j.cRead
do while assNN('li', jReadO(rdr))
call jWriteO m, li
end
call jClose rdr
return
endProcedure jWriteNow
/*--- reset JRW: fail if open, initialise ---------------------------*/
jReset: procedure expose m.
parse arg m, arg, arg2, arg3
if m.m.jReading == 1 | m.m.jWriting == 1 then
return err('still open jReset('m',' arg2')') / 3
m.m.jReading = 0
m.m.jWriting = 0
m.m.jUsers = 0
interpret objMet(m, 'jReset')
return m
endProcedure jReset
jOpen: procedure expose m.
parse arg m, opt
call objMetClaM m, 'jOpen'
oUsers = m.m.jUsers
if opt = m.j.cRead then do
if m.m.jReading then
nop
else if m.m.jWriting then
return err('already opened for writing jOpen('m',' opt')')
else do
interpret ggCode
m.m.jReading = 1
end
end
else if \ abbrev('>>', opt, 1) then do
return err('bad option' opt 'in jOpen('m',' opt')')
end
else do
if m.m.jWriting then
nop
else if m.m.jReading then
return err('already opened for reading jOpen('m',' opt')')
else do
interpret ggCode
m.m.jWriting = 1
end
end
m.m.jUsers = oUsers + 1
return m
endProcedure jOpen
jClose: procedure expose m.
parse arg m
call objMetClaM m, 'jClose'
oUsers = m.m.jUsers
if oUsers = 1 then do
interpret ggCode
m.m.jReading = 0
m.m.jWriting = 0
end
else if oUsers < 1 then
call err 'jClose' m 'but already closed'
m.m.jUsers = oUsers - 1
return m
endProcedure jClose
/*--- cat the lines of the file together, with mid between lines,
fail if not all lines are strings -------------------*/
jCatLines: procedure expose m.
parse arg m, opt
call jOpen m, m.j.cRead
if \ jRead(m, line) then do
call jClose m
return ''
end
res = jCat1(m.line)
if \ abbrev(opt, '-', 1) then
do while jRead(m, line)
res = res || opt || m.line
end
else if opt == '-s' then
do while jRead(m, line)
res = res strip(m.line)
end
else if opt == '-72' then
do while jRead(m, line)
res = res || left(m.line, 72)
end
call jClose m
return res
endProcedure jCatLines
jCat1: procedure expose m.
parse arg v, opt
if \ abbrev(opt, '-', 1) then
return v
if opt == '-s' then
return strip(v)
if opt == '-72' then
return left(v, 72)
call err 'bad opt' opt 'in jCat1('v',' opt')'
endProcedure jCat1
jIni: procedure expose m.
if m.j.ini == 1 then
return
m.j.ini = 1
m.j.cRead = '<'
m.j.cWri = '>'
m.j.cApp = '>>'
call oIni
am = "call err 'call of abstract method"
call classNew 'n JRW u ORun, f JREADING v, f JWRITING v', 'm',
, "new call jReset m, arg, arg2, arg3",
, "jRead" am "jRead('m',' var')'" ,
, "jReadO if \ jRead(m, 'J.GGVAR') then return '';",
"return s2o(m.j.ggVar)" ,
, "jWrite" am "jWrite('m',' line')'" ,
, "jWriteO call jWrite(m, o2string(var))" ,
, "jWriteAll call jWriteNowImpl m, rdr",
, "jWriteNow call jWriteNowImpl m, rdr",
, "jReset",
, "jOpen" am" jOpen('m',' opt')'" ,
, "jClose" ,
, "oRun call pipeWriteAll m",
, "o2String return jCatLines(m, ' ')",
, "o2File return m"
call classNew 'n JRWO u JRW', 'm',
, "jRead res = jReadO(m); if res == '' then return 0;" ,
"m.var = o2string(res); return 1" ,
, "jReadO" am "jReadO('m')'" ,
, "jWrite call jWriteO(m, s2o(var))" ,
, "jWriteO" am "jWriteO('m',' line')'",
, "jWriteAll call jWriteNowImplO m, rdr",
, "jWriteNow call jWriteNowImplO m, rdr",
am = "call err 'call errObject"
call classNew 'n JRWErr u JRW', 'm',
, "jWriteAll" er "jWriteAll 'm', rdr'",
, "jWriteNow" er "jWriteNow 'm', 'rdr'",
, "jClose" er "jClose 'm'"
call classNew 'n JRWOut u JRWO', 'm',
, "jReset m.m.stem = arg;",
"if arg \== '' & \ dataType(m.arg.0, 'n') then",
"m.arg.0 = 0" ,
, "jWrite if m.m.stem == '' then say line;" ,
"else call mAdd m.m.stem, line" ,
, "jWriteO call classOut , var, 'outO: '",
, "jOpen if \ abbrev(opt, m.j.cWri) then",
"call err 'can only write JRWOut.jOpen('m',' opt')';" ,
"else m.m.jWriting = 1"
call classNew 'n JRWEof u JRW', 'm',
, "jRead drop m.var; return 0",
, "jOpen if pos('>', opt) > 0 then",
"call err 'can only read JRWEof.jOpen('m',' opt')';" ,
"else m.m.jReading = 1"
m.j.in = jOpen(oNew('JRWEof'), m.j.cRead)
m.j.out = jOpen(oNew('JRWOut'), m.j.cWri)
call classNew "n JBuf u JRWO, f BUF s r", "m",
, "jOpen call jBufOpen m, opt",
, "jReset call jBufReset m, arg",
, "jRead return jBufRead(m, var)",
, "jReadO return jBufReadO(m)",
, "jWrite call jBufWrite m, line",
, "jWriteO call jBufWriteO m, var"
call classNew "n JBufTxt u JBuf, f MAXL v ", "m",
, "jReset call jBufReset m, arg; m.m.maxl = 80",
, "jWriteO call jBufWrite m, o2Text(var, m.m.maxl)"
return
endProcedure jIni
in: procedure expose m.
parse arg arg
return jRead(m.j.in, arg)
endProcedur in
inO: procedure expose m.
if arg() > 0 then call err '??? old interface'
return jReadO(m.j.in)
endProcedur in
out: procedure expose m.
parse arg line
call jWrite m.j.out, line
return 0
endProcedure out
outO: procedure expose m.
parse arg arg
call jWriteO m.j.out, arg
return
endProcedure outO
/*--- jBuf: buffer read or write (supports datataypes) ---------------*/
jBuf: procedure expose m.
m = oNew('JBuf') /* calls jBufReset */
do ax=1 to arg()
m.m.buf.ax = arg(ax)
end
m.m.buf.0 = ax-1
m.m.allV = 1
return m
endProcedure jBuf
/*--- jBuf: buffer read or write (supports datataypes) ---------------*/
jBufTxt: procedure expose m.
m = oNew('JBufTxt') /* calls jBufReset */
do ax=1 to arg()
m.m.buf.ax = arg(ax)
end
m.m.buf.0 = ax-1
m.m.allV = 1
return m
endProcedure jBufTxt
jBufReset: procedure expose m.
parse arg m
m.m.stem = m'.BUF'
do ax=1 to arg() - 1
m.m.buf.ax = arg(ax+1)
end
m.m.buf.0 = ax-1
m.m.allV = 1
return m
endProcedure jBufReset
jBufOpen: procedure expose m.
parse arg m, opt
if opt == m.j.cRead then do
m.m.readIx = 0
m.m.jReading = 1
return m
end
if opt == m.j.cWri then do
m.m.buf.0 = 0
m.m.allV = 1
end
else if opt \== m.j.cApp then
call err 'jBufOpen('m',' opt') with bad opt'
m.m.jWriting = 1
return m
endProcedure jBufOpen
jBufWrite: procedure expose m.
parse arg m, line
if m.m.allV then
call mAdd m'.BUF', line
else
call mAdd m'.BUF', s2o(line)
return
endProcedure jBufWrite
jBufWriteStem: procedure expose m.
parse arg m, st
ax = m.m.buf.0
if m.m.allV then do
do sx=1 to m.st.0
ax = ax + 1
m.m.buf.ax = m.st.sx
end
end
else do
do sx=1 to m.st.0
ax = ax + 1
m.m.buf.ax = o2String(m.st.sx)
end
end
m.m.buf.0 = ax
return m
endProcedure jBufWrite
jBufWriteO: procedure expose m.
parse arg m, ref
if m.m.allV then do
cl = objClass(ref)
if cl = m.class.classV then do
call mAdd m'.BUF', m.ref
return
end
if cl == m.class.classW then do
call mAdd m'.BUF', substr(ref, 2)
return
end
m.m.allV = 0
do ax=1 to m.m.buf.0
m.m.buf.ax = s2o(m.m.buf.ax)
end
end
call mAdd m'.BUF', ref
return
endProcedure jBufWriteO
jBufReadO: procedure expose m.
parse arg m
nx = m.m.readIx + 1
if nx > m.m.buf.0 then
return ''
m.m.readIx = nx
if m.m.allV then
return s2o(m.m.buf.nx)
else
return m.m.buf.nx
endProcedure jBufReadO
jBufRead: procedure expose m.
parse arg m, var
nx = m.m.readIx + 1
if nx > m.m.buf.0 then
return 0
m.m.readIx = nx
if m.m.allV then
m.var = m.m.buf.nx
else
m.var = o2String(m'.BUF.'nx)
return 1
endProcedure jBufRead
jBufTxtWriteO: procedure expose m.
parse arg m, ref
if m.m.allV \== 1 then
call err '1 \== allV' m.m.allV 'in jBufTxtWriteO('m',' ref')'
cl = objClass(ref, '?')
if cl = m.class.classV then
call mAdd m'.BUF', m.ref
else if cl == m.class.classW then
call mAdd m'.BUF', substr(ref, 2)
else if ref == '' then
call mAdd m'.BUF', '@ null object'
else if cl == '?' then
call mAdd m'.BUF', '@'ref 'class=???'
else do
l = '@'ref 'class='className(cl)
ff = cl'.FLDS'
do fx=1 to m.ff.0 while length(l) < m.m.maxl + 3
if m.ff.fx == '' then
l = l', .='m.ref
else do
f1 = substr(m.ff.fx, 2)
l = l',' f1'='m.ref.f1
end
end
if length(l) > m.m.maxl then
l = left(l, m.m.maxl-3)'...'
call mAdd m'.BUF', l
end
return
endProcedure jBufTxtWriteO
/* copy j end *********************************************************/
/* copy o begin ******************************************************
an object has a class which describes fields and methods
an object has fields (e.g. m.o.fld1)
an object may call it's methods (dynamic binding)
***********************************************************************/
oIni: procedure expose m.
if m.o.ini = 1 then
return
m.o.ini = 1
call classIni
call oAdd1Method m.class.classV, 'o2String return m.m'
m.class.escW = '!'
call oAdd1Method m.class.classW, 'o2String return substr(m, 2)'
or = classNew('n ORun u',
, 'm oRun call err "call of abstract method oRun"',
, 'm o2File return oRun2File(m)',
, 'm o2String return jCatLines(oRun2File(m), " ")')
/* oRunner does not work yet ||||| */
rc = classNew('n* ORun u ORun, m oRun call oClassAdded arg(2)')
call oAddMethod rc'.OMET', rc
call classAddedRegister oMutate(mNew(), rc)
return
endProcedure oIni
/*--- when notified about a new class cl, build the redundancies ----*/
oClassAdded: procedure expose m.
parse arg cl
m.class.o2c.cl = m.class.class
call oAddMethod cl'.OMET', cl
new = "m.class.o2c.m =" cl
if m.cl.flds.0 > 0 | m.cl.stms.0 > 0 then
new = new"; call oClear m, '"cl"'"
new = new";" classMet(cl, 'new', '')
if cl == m.class.class then
call mAlias 'CLASS', cl
else /* object adresses */
call mNewArea cl, 'O.'substr(cl,7), new
if m.cl \== 'u' | m.cl.name == '' then
return
call mAlias cl, m.cl.name
new = 'new'
m.cl.oMet.new = ''
co = '' /* build code for copy */
do fx=1 to m.cl.flds.0
nm = m.cl.flds.fx
if translate(nm) == nm & \ abbrev(nm, 'GG') ,
& pos('.M.', nm'.') < 1 & pos('.T.', nm'.') < 1 then
co = co'm.t'nm '= m.m'nm';'
else
co = co 'f='quote(substr(nm, 2))';m.t.f = m.m.f;'
end
do fx=1 to m.cl.stms.0
nm = m.cl.stms.fx
sc = m.cl.stms.fx.class
if nm == ''then
co = co "m.t.0=m.m.0;" ,
"do sx=1 to m.m.0;" ,
"call oClaCopy '"sc"',m'.'sx, t'.'sx; end;"
else
co = co "st='"substr(nm, 2)"';m.t.st.0=m.m.st.0;",
"do sx=1 to m.m.st.0;",
"call oClaCopy '"sc"',m'.'st'.'sx, t'.'st'.'sx; end;"
end
p = cl'.OMET.oCopy'
if symbol('m.p') \== VAR then
m.p = co
return
endProcedure oClassAdded
/*--- add the methods of class cl to the methodtable mt -------------*/
oAddMethod: procedure expose m.
parse arg mt, cl
if pos(m.cl, 'frsv') > 0 then
return
if m.cl = 'm' then do
nm = m.cl.name
m.mt.nm = m.cl.met
return
end
/* if m.cl.class \== '' then
call oAddMethod mt, m.cl.class
*/ do x=1 to m.cl.0
call oAddMethod mt, m.cl.x
end
return
endProcedure oAddMethod
/* add 1 method to a completed class and its subclasses -------------*/
oAdd1Method: procedure expose m.
parse arg clNm, met code
cl = classAdd1Method(clNm, met code)
m.cl.omet.met = code
call oAdd1MethodSubs cl, met code
return cl
endProcedure oAdd1Method
/* add 1 method code to OMET of all subclasses of cl -------------*/
oAdd1MethodSubs: procedure expose m.
parse arg cl, met code
do sx=1 to m.cl.sub.0
sc = m.cl.sub.sx
if pos(m.sc, 'nvw') > 0 then do
do mx=1 to m.sc.0
ms = m.sc.mx
if m.ms == 'm' & m.ms.name == met then
call err 'method' med 'already in' sc
end
m.sc.omet.met = code
end
call oAdd1MethodSubs sc, met code
end
return cl
endProcedure oAdd1MethodSubs
/*--- create an an object of the class className
mutate it to class but DO NOT call it's new method ----------*/
oBasicNew: procedure expose m.
parse arg cl
return oMutate(mBasicNew(cl), cl)
/*--- create an an object of the class className
and call it's new method ------------------------------------*/
oNew: procedure expose m.
signal labelMNew /* work is done there | ???? remove */
/*--- return the class of object obj --------------------------------*/
objClass: procedure expose m.
parse arg obj
if symbol('m.class.o2c.obj') == 'VAR' then
return m.class.o2c.obj
if abbrev(obj, m.class.escW) then
return m.class.classW
if abbrev(obj, 'CLASS.CAST.') then
return substr(obj, 12, pos(':', obj, 12)-12)
if arg() >= 2 then
return arg(2)
return err('objClass no class found for object' obj)
endProcedure objClass
oKindOf: procedure expose m.
parse arg obj, sup
cl = objClass(obj, '')
if cl == '' then
return 0
return classInheritsOf(cl, class4name(sup))
endProcedure oKindOf
classInheritsOf: procedure expose m.
parse arg cl, sup /* wkTst optimierung in classAdded */
if cl == sup then
return 1
do while m.cl \== 'n' & m.cl \== 'u'
if m.cl.class == '' then
return 0
cl = m.cl.class
end
do cx=1 to m.cl.0
d = m.cl.cx
if m.d == 'u' then
if classInheritsOf(d, sup) then
return 1
end
return 0
endProcedure classInheritsOf
classSetMet: procedure expose m.
parse arg na, me, code
if symbol('m.class.n2c.na') \== 'VAR' then
call err 'no class' na 'in classMet('na',' me')'
cl = m.class.n2c.na
if symbol('m.cl.oMet.me') \== 'VAR' then
call err 'no method in classMet('na',' me')'
m.cl.oMet.me = code
return cl
endProcedure classSetMet
/*--- return the code of method me of the class with name na --------*/
classMet: procedure expose m.
parse arg na, me
if symbol('m.class.n2c.na') \== 'VAR' then
call err 'no class' na 'in classMet('na',' me')'
cl = m.class.n2c.na
if symbol('m.cl.oMet.me') == 'VAR' then
return m.cl.oMet.me
if arg() >= 3 then
return arg(3)
call err 'no method in classMet('na',' me')'
endProcedure classMethod
/*--- set m, ggClass, ggCode to the address, class and code
of method me of object m ------------------------------------*/
objMetClaM: procedure expose m. m ggClass ggCode
parse arg m, me
if symbol('m.class.o2c.m') == 'VAR' then
ggClass = m.class.o2c.m
else if abbrev(m, 'CLASS.CAST.') then
parse var m 'CLASS.CAST.' ggClass ':' m
else
return err('no class found for object' m)
if symbol('m.ggClass.oMet.me') == 'VAR' then
ggCode = m.ggClass.oMet.me
else
call err 'no method' me 'in class' className(ggClass),
'of object' m
return
endProcedure objMetClaM
/*--- return the code of method me of object obj --------------------*/
objMet: procedure expose m.
parse arg obj, me
/* handle the easy and frequent case directly */
if symbol('m.class.o2c.obj') == 'VAR' then
c = m.class.o2c.obj
else if abbrev(obj, m.class.escW) then
c = m.class.classW
else do
call objMetClaM obj, me
return 'M="'m'";'ggCode
end
if symbol('m.c.oMet.me') == 'VAR' then
return m.c.oMet.me
return err('no method' me 'in class' className(c) 'of object' obj)
endProcedure objMet
/*--- return the stem of fieldnames of object m ---------------------*/
oFlds: procedure expose m.
parse arg m
return objClass(m)'.FLDS'
endProcedure oFlds
/*--- return the contents of field f navigation along path ----*/
oGet: procedure expose m.
parse arg obj, path, clazz
nullNew = 0
ret = oAccPath(obj, path, clazz)
if ret == 1 then
ret = oAccStr(m, cl)
if ret == 1 then
return str
return err(ret 'in oGet('obj',' path')')
endProcedure oGet
oAccStr: procedure expose m. str
parse arg m, cl
if cl == m.class.classV then
str = m.m
else if m.cl.valueCl == '' then
return 'no value @' m 'class' className(cl)
else if m.m == '' then
return 'null @' m 'class' className(cl)
else if abbrev(m, m.class.escW) then
str = substr(m ,2)
else
str = o2String(m.m)
return 1
endProcedure oAccStr
oGetO: procedure expose m.
parse arg obj, path, opt, clazz
nullNew = pos('n', opt) > 0
ret = oAccPath(obj, path, clazz)
if ret == 1 then
ret = oAccO(m, cl, opt)
if ret == 1 then
return ref
else
return err(ret 'in oGetO('obj',' path')')
endProcedure oGetO
oAccO: procedure expose m. ref
parse arg m, cl, opt
if cl == m.class.classV then do
ref = s2o(m.m)
end
else if m.cl \== 'r' then do
ref = m
end
else if m.m == '' then do
if opt == '-b' then do
m.m = jBuf()
end
else if opt == '-n' then do
rsn = oRefSetNew(m, cl)
if rsn \==1 then
return rsn
end
ref = m.m
end
else if objClass(m.m, 0) \== 0 then do
ref = m.m
end
else do
return 'no class for' m.m '@' m 'class' cl
end
return 1
endProcedure oAccO
oPut: procedure expose m.
parse arg obj, path, str
nullNew = 1
res = oAccPath(obj, path)
if res == 1 then
res = ocPut(m, cl, str)
if res == 1 then
return str
return err(res 'in oPut('obj',' path',' str')')
endProceudre oPut
ocPut: procedure expose m.
parse arg m, cl, str
if m.cl.valueCl == m.class.classV then
m.m = str
else if m.cl.valueCl \== '' then
m.m = s2o(str)
else
return 'no value @' m 'class' className(cl)
return 1
endProcedure ocPut
oPutO: procedure expose m.
parse arg obj, path, ref
nullNew = 1
res = oAccPath(obj, path)
if res == 1 then
res = ocPutO(m, cl, ref)
if res == 1 then
return ref
return err(ret 'in oPut('obj',' path',' ref')')
endProcedure oPutO
ocPutO: procedure expose m.
parse arg m, cl, ref
if m.cl.valueCl == m.class.classV then
m.m = o2string(ref)
else if m.cl.valueCl \== '' then
m.m = ref
else if m.cl.stemCl \== '' then
return 'implement put to stem'
else
return 'no value @' m 'class' className(cl)
return 1
endProcedure ocPutO
oClear: procedure expose m.
parse arg obj, cl
if cl == '' then
cl = objClass(obj)
do fx=1 to m.cl.flds.0
f1 = m.cl.flds.fx
o1 = obj || f1
if f1 == '' then
c1 = cl
else do
c1 = substr(f1, 2)
c1 = m.cl.f2c.c1
end
if c1 == m.class.classW then
m.o1 = m.class.escW
else
m.o1 = ''
end
do sx=1 to m.cl.stms.0
f1 = obj || m.cl.stms.sx
m.f1.0 = 0
end
return obj
endProcedure oClear
oAccPath: procedure expose m. m cl nullNew
parse arg m, pa, cl
if cl == '' & m \== '' then do
cl = objClass(m)
end
if pa == '' then
return 1
if abbrev(pa, m.class.cRef) ,
| (\ m.cl.hasFlds & abbrev(pa, m.class.cNav)) then do
if pa == m.class.cRef & m.cl.valueCl == m.class.classV then do
cl = m.class.classV
return 1
end
if (m.cl.valueCl == '' | m.cl.valueCl == m.class.classV) ,
& m.cl \== 'r' then
return 'no reference @' m 'class' cl
if m.m = '' then do
if \ nullNew then
return 'null @' m 'class' className(cl)
rsn = oRefSetNew(m, cl)
if rsn \== 1 then
return rsn
end
return oAccPath(m.m, substr(pa, 2))
end
if pos(left(pa, 1), m.class.cPath) > 0 then
return oAccPath(m, substr(pa, 2), cl)
px = verify(pa, m.class.cPath, 'm')
if px < 1 then
px = length(pa)+1
fn = left(pa, px-1)
pa = substr(pa, px)
if symbol('m.cl.f2c.fn') == 'VAR' then
return oAccPath(m'.'fn, pa, m.cl.f2c.fn)
if m.cl.stemCl=='' | fn=='' | verify(fn, '0123456789','n')>0 then
return 'no field' fn '@' m 'class' className(cl)
if fn == 0 then
return oAccPath(m'.0', pa, m.class.classV)
if abbrev(fn, 0) | verify(m.m.0, '0123456789', 'n') > 0,
| fn > m.m.0 then
return 'bad stem index' fn'>'m.m.0 '@' m 'class' className(cl)
return oAccPath(m'.'fn, pa, m.cl.stemCl)
endProcedure oAccPath
oRefSetNew: procedure expose m.
parse arg m, cl
cr = m.cl.valueCl
if m.cr.class = '' then
return 'no class for null @' m 'class' className(cl)
if m.cr.class = m.class.classW then
m.m = o2s()
else if m.cr \== 'r' then
return 'class' className(cl) 'not ref'
else
m.m = mNew(m.cr.class)
return 1
endProcedure oRefSetNew
/*--- mutate object m to the class named name -----------------------*/
oMutate: procedure expose m.
parse arg m, name
m.class.o2c.m = class4Name(name)
return m
endProcedure oMutate
/*--- return object obj cast'd to class named cl --------------------*/
oCast: procedure expose m.
parse arg obj, cl
if abbrev(obj, 'CLASS.CAST.') then
obj = substr(obj, 1 + pos(':', obj, 12))
return 'CLASS.CAST.'class4Name(cl)':'obj
endProcedure oCast
/*--- copy object m of class c to t ---------------------------------*/
oClaCopy: procedure expose m.
parse arg ggCla, m, t
if t == '' then do
if ggCla == m.class.classW then
return m
t = mBasicNew(ggCla)
end
else if ggCla == m.class.classW then do
m.t = o2String(m)
m.class.o2c.t = m.class.classV
return t
end
ggCode = ggCla'.OMET.oCopy'
interpret m.ggCode
m.class.o2c.t = ggCla
return t
endProcedure oClaCopy
/*--- copy object m to t --------------------------------------------*/
oCopy: procedure expose m.
parse arg m, t
return oClaCopy(objClass(m), m, t)
endProcedure oCopy
/*--- copy object to a newly created object -------------------------*/
oCopyNew: procedure expose m.
parse arg m
if symbol('m.class.o2c.m') == 'VAR' then
return oCopy(m, mBasicNew(m.class.o2c.m))
return oCopy(m, mBasicNew(m.class.classV))
endProcedure oCopyNew
/*--- return a new instance of a subclass of Run
with code code in method oRun -------------------------------*/
oRunner: procedure expose m.
if arg() >= 1 then
r = oNew(classNew('n* ORun u ORun, m oRun' arg(1)))
else
r = oNew(classNew('n| ORun u ORun'))
return r
endProcedure oRunner
/*--- set code for runner -------------------------------------------*/
oRunnerCode: procedure expose m.
parse arg r, code
call classSetMet objClass(r), 'oRun', code
return r
endProcedure oRunnerCode
/*--- run method oRun of object m -----------------------------------*/
oRun: procedure expose m.
parse arg m, arg, arg2, arg3
interpret objMet(m, 'oRun')
return
endProcedure oRun
/*--- run method oRun and return output in new JBuf ------------------*/
oRun2File: procedure expose m.
parse arg rn
b = jBuf()
call pipeBeLa '>' b
call oRun rn
call pipeEnd
return b
endProcedure oRun2File
/*--- cast the object to a file -------------------------------------*/
o2File: procedure expose m.
parse arg m
interpret objMet(m, 'o2File')
call err 'o2file did not return'
endProcedure o2File
/*--- cast the object to a String -----------------------------------*/
o2String: procedure expose m.
parse arg m, arg, arg2, arg3
interpret objMet(m, 'o2String')
return err('o2String did not return')
endProcedure o2String
/*--- return a short string representation of an object -------------*/
o2Text: procedure expose m.
parse arg m, maxL
if m == '' then
return '@ null object'
if maxL == '' then
maxL = 80
cl = objClass(m, '?')
if cl = m.class.classV then
l = m.m
else if cl == m.class.classW then
l = substr(m, 2)
else if cl == '?' then
l = '@'m 'class=???'
else do
l = '@'m 'class='className(cl)
ff = cl'.FLDS'
do fx=1 to m.ff.0 while length(l) < maxL + 3
if m.ff.fx == '' then
l = l', .='m.m
else do
f1 = substr(m.ff.fx, 2)
l = l',' f1'='m.m.f1
end
end
end
if length(l) <= maxL then
return l
return left(l, maxL-3)'...'
endProcedure o2Text
/*--- cast a String to an object -----------------------------------*/
s2o: procedure expose m.
parse arg str
return m.class.escW || str
return r
endProcedure s2o
oIfStr: procedure expose m.
parse arg m
if length(m) > 200 then
return m
cl = objClass(m, '')
if cl = '' then
return m
else if cl = m.class.classV then
return = m.m
else if cl == m.class.classW then
return = substr(m, 2)
else if arg() >= 2 then
return arg(2)
else
call err m 'of class' className(cl) 'not kind of string'
endProcedure oIfStr
/* copy o end *******************************************************/
/* copy class begin **************************************************
a class has fields and methods,
the class module handles only the metadata,
object handling (instanciation, methodcalls etc.) is in O
classes are represented by a metadata tree,
its nodes of class class have diffenrent types:
class subTypes (implemented as choices)
'u' = union: NAME -> name of class if <> '',
stem -> references component classes
'f' = field: NAME -> fieldName (x.name),
CLASSS -> reference to class of fieldValue
's' = stem: class -> ref to class at each stem element
'c' = choice: NAME -> selection value,
CLASS -> ref to class of choice
'm' = method: NAME -> methodName,
MET -> rexxCode
'r' = reference CLASS -> ref to type at reference
special classes
'v' = Value String Value
'w' = ValueAsA StringValue packed into an adress (prefix escW)
'o' = AnyClass any class with dynamic classLookup on object
formal definition, see classIni
class expression (ce) allow the following syntax
ce = className | classAdr | 'n'('?','*','|')? name union | union
| 'f' name ce | 's' ce | 'c' name ce | 'm' name code | r ce?
union = 'u' (ce (',' ce)*)?
the modifiers of 'n' means
none: create new class, fail if name already defined
'?': create new class or return old of that name
'*': use an exisiting class of that definition
or create new class with a unique name
'|': create a new class with a unique name
'm' extends to then end of the ce (line)
'u' allows several components, in classNew also multiple args
Achtung, aber NICHT rekursiv|
***********************************************************************/
classIni: procedure expose m.
if m.class.ini == 1 then
return
m.class.ini = 1
call mapIni
call mNewArea 'CLASS', 'CLASS'
call mapReset 'CLASS.N2C' /* name to class */
/* to notify other modules (e.g. O) on every new named class */
m.class.addedSeq.0 = 0
m.class.addedListeners.0 = 0
m.class.classV = classBasicNew('u', 'v')
m.class.classW = classBasicNew('u', 'w')
m.class.classO = classBasicNew('u', 'o')
cr = mIterBegin('CLASS')
do while assNN('cr', mIter(cr))
call classAddedNotify cr
end
m.class.class = classNew('n class u v',
, 'c u u f NAME v, s r class',
, 'c f u f NAME v, f CLASS r class',
, 'c s f CLASS r class' ,
, 'c c u f NAME v, f CLASS r class',
, 'c m u f NAME v, f MET v' ,
, 'c r f CLASS r class' )
m.class.cNav = '.'
m.class.cRef = '|'
m.class.cDot = '%'
m.class.cPath = m.class.cNav || m.class.cRef || m.class.cDot
m.class.classR = classNew('r')
return
endProcedure classIni
/*--- return the name of a class if it exists otherwise the class ---*/
className: procedure expose m.
parse arg cl
if m.cl = 'u' & m.cl.name \= '' then
return m.cl.name
else
return cl
endProcedure class4Name
/*--- return class of given name or class ---------------------------*/
class4Name: procedure expose m.
parse arg nm
if symbol('m.class.n2c.nm') == 'VAR' then
return m.class.n2c.nm
if arg() > 1 then
return arg(2)
call err 'no class' nm
endProcedure class4Name
classBasicNew: procedure expose m.
parse arg ty, nm, cl, nmTy
n = mNew('CLASS')
m.n = ty
m.n.name = nm
m.n.nameComp = nm
if ty == 'u' & nm \== '' then do
if pos(nmTy, '*|') > 0 then do
m.n.name = nm || substr(n, 1+lastPos('.', n))
if nmTy == '*' then
m.n.nameComp = nm'*'
else
m.n.nameComp = m.n.name
end
call mapAdd class.n2c, m.n.name, n
end
call mapAdd class.n2c, n, n
m.n.class = ''
m.n.met = ''
m.n.0 = 0
m.n.sub.0 = 0
m.n.super.0 = 0
if length(ty) \== 1 | pos(ty, 'ufscrm') < 1 then
call err 'bad type' ty': classBasicNew('ty',' nm',' cl')'
else if nm == '' & pos(ty, 'fm') > 0 then
call err 'empty name: classBasicNew('ty',' nm',' cl')'
else if nm \== '' & ty \== 'c' ,
& ( verify(nm, '0123456789') < 1 ,
| verify(nm, ' .*|@', 'm') > 0 ) then
call err 'bad name' nm': classBasicNew('ty',' nm',' cl')'
else if nm \= '' & pos(ty, 'rs') > 0 then
call err 'name for type' ty': classBasicNew('ty',' nm',' cl')'
else if pos(ty, 'fcrs') > 0 then do
if cl \== '' then
m.n.class = mapGet(class.n2c, cl)
else if ty == 'r' then
m.n.class = m.class.classO
/* else say 'cl leer' ty nm nmTy ???????*/
end
else if ty == 'm' then
m.n.met = cl
else if cl \== '' then
call err 'class for type' ty': classBasicNew('ty',' nm',' cl')'
return n
endProcedure classBasicNew
classNew: procedure expose m.
parse arg clEx 1 ty rest
if abbrev(ty, 'n') then do
if wordPos(ty, 'n n? n* n|') < 1 then
call err 'bad type' ty': classNew('clEx')'
nmTy = right(ty, 1)
parse var rest nm ty rest
if ty \== 'u' then
call err 'class name' nm 'without u: classNew('clEx')'
if nmTy == 'n' then do
if mapHasKey(class.n2c, nm) then
call err 'class' nm 'already defined: classNew('clEx')'
end
else if nmTy == '?' then do
if mapHasKey(class.n2c, nm) then
return mapGet(class.n2c, nm)
end
else if nmTy == '*' then do
if arg() \== 1 then
call err 'arg()='arg() 'for n* : classNew('clEx')'
if mapHasKey(class.n2c, clEx) then
return mapGet(class.n2c, clEx)
end
n = classBasicNew('u', nm, , nmTy)
end
else do
nmTy = ''
if arg() \== 1 then
call err 'arg()='arg() 'without name: classNew('clEx')'
if mapHasKey(class.n2c, clEx) then
return mapGet(class.n2c, clEx)
if length(ty) <> 1 | pos(ty, 'ufscmr') < 1 then
call err 'bad type' ty': classNew('clEx')'
nm = ''
if pos(ty, 'usr') < 1 then
parse var rest nm rest
if ty = 'u' then do
n = classBasicNew(ty)
end
else if ty = 'm' then do
n = classBasicNew(ty, nm, rest)
rest = ''
end
else do
parse var rest t1 rest
if wordPos(t1, 'u f s c m r') > 0 then do
n = classBasicNew(ty, nm)
m.n.class = classNew(t1 rest)
rest = ''
end
else do
n = classBasicNew(ty, nm, t1)
end
end
end
if ty \== 'u' then do
if rest \== '' then
call err 'rest' rest 'but end of classExp expected:' clEx
end
else do
lx = 0
do while lx < length(rest)
cx = pos(',', rest, lx+1)
if cx <= lx | word(substr(rest, lx+1), 1) == 'm' then
cx = length(rest)+1
a = mAdd(n, classNew(strip(substr(rest, lx+1, cx-lx-1))))
lx=cx
end
pref = ''
do ax=2 to arg()
if length(arg(ax)) == 1 & arg(ax) \== ' ' then
pref = arg(ax)' '
else
call mAdd n, classNew(pref || arg(ax))
end
end
cr = mIterBegin('CLASS')
do while assNN('cr', mIter(cr)) & \ classEqual(n, cr)
end
isNew = cr == n
if \ isNew then do
if mapRemove(class.n2c, n) \== n then
call err 'mapRemove('n') mismatch'
if m.n == 'u' & m.n.name \== '' then
if mapRemove(class.n2c, m.n.name) \== n then
call err 'mapRemove('m.n.name') mismatch'
call mFree n
n = cr
end
if nmTy == '' | nmTy == '*' then
call mapAdd class.n2c, clEx, n
if isNew then
call classAddedNotify n
return n
endProcedure classNew
classAdd1Method: procedure expose m.
parse arg clNm, met code
cl = class4Name(clNm)
if pos(m.cl, 'uvw') < 1 then
call err 'class not nvw but' m.cl,
'in classAdd1Method('clNm',' met code')'
do sx = 1 to m.cl.0
su = m.cl.sx
if m.cl.sx = 'm' & m.cl.name == met then
call err 'met' met 'already in' clNm
end
call mAdd cl, classNew('m' met code)
return cl
endProcedure classAdd1Method
/*--- register a listener for newly defined classes
and call it for all already defined classes -----------------*/
classAddedRegister: procedure expose m.
parse arg li
call mAdd 'CLASS.ADDEDLISTENERS', li
do cx = 1 to m.class.addedSeq.0
call oRun li, m.class.addedSeq.cx
end
return
endProcedure classAddedRegister
/*--- to notify all listeners about a newly defined classes --------*/
classAddedNotify: procedure expose m.
parse arg cl
call mAdd 'CLASS.ADDEDSEQ', cl
if m.cl == 'u' then
call classSuperSub cl
m.cl.flds.0 = 0
m.cl.stms.0 = 0
m.cl.stemCl = ''
m.cl.valueCl = ''
call classAddFields cl, cl
m.cl.hasFlds = m.cl.flds.0 > 1 ,
| (m.cl.flds.0 == 1 & m.cl.flds.1 \== '') | m.cl.stms.0 > 0
do lx = 1 to m.class.addedListeners.0
call oRun m.class.addedListeners.lx, cl
end
return
endProcedure classAddedNotify
/*--- add supper and sub links for class cl -------------------------*/
classSuperSub: procedure expose m.
parse arg cl
do ux=1 to m.cl.0
u1 = m.cl.ux
if m.u1 == 'u' then do
if mPos(cl'.SUPER', u1) > 0 then
call err u1 'is already in' cl'.SUPER.'sx ,
|| ': classSuperSub('cl')'
call mAdd cl'.SUPER', u1
if mPos(cl'.SUB', cl) > 0 then
call err cl 'is already in' u1'.SUB.'sx ,
|| ': classSuperSub('cl')'
call mAdd u1'.SUB', cl
end
end
return
endProcedure classSuperSub
/*--- add the the fields of class cl to stem f ----------------------*/
classAddFields: procedure expose m.
parse arg f, cl, nm
n1 = substr(nm, 1+abbrev(nm, '.') )
if symbol('m.f.f2c.n1') \== 'VAR' then
m.f.f2c.n1 = cl
/* else if cl == m.f.f2c.n1 then
return 0 */
if cl == m.class.classV | cl == m.class.classW | m.cl=='r' then do
if nm == '' then do
if m.f.valueCl \== '' then
return err('value mistmatch')
m.f.valueCl = cl
end
if nm == '' then do
call mMove f'.FLDS', 1, 2
m.f.flds.1 = ''
end
else do
call mAdd f'.FLDS', nm
end
return 0
end
if m.cl = 's' then do
if m.cl.class == '' then
call err 'stem null class'
a1 = mAdd(f'.STMS', nm)
m.a1.class = m.cl.class
if nm == '' then
m.f.stemCl = m.cl.class
return 0
end
if m.cl = 'f' then
return classAddFields(f, m.cl.class, nm'.'m.cl.name)
if m.cl.class \== '' then
return classAddFields(f, m.cl.class, nm)
do tx=1 to m.cl.0
call classAddFields f, m.cl.tx, nm
end
return 0
endProcedure classAddFields
/*--- return true iff the two classes are equal -------------------*/
classEqual: procedure expose m.
parse arg l, r
if m.l \== m.r | m.l.nameComp \== m.r.nameComp ,
| m.l.class \== m.r.class | m.l.0 \== m.r.0 then
return 0
if m.l.met \== m.r.met then
return 0
do sx=1 to m.l.0
if m.l.sx \== m.r.sx then
return 0
end
return 1
endProcedure classEqual
/*--- print object ---------------------------------------------------*/
objOut: procedure expose m.
parse arg m, pr, p1
c = objClass(m, '')
if c == '' then
call out p1 'no class for' m
else if c == m.class.classV then
call out p1 || m.m
else if c == m.class.classW then
call out p1 || o2String(m)
else
call classOutDone c, m, pr, p1
return
endProcedure objOut
/*--- recursively output (with out:) the object a with class t -------*/
classOut: procedure expose m.
parse arg t, a, pr, p1
return classOutDone(if(t=='',m.class.classO, t), a, pr, p1)
endProcedure classOut
/*--- ouput object a with class t and stopper done ------------------*/
classOutDone: procedure expose m. done.
parse arg t, a, pr, p1
if p1 == '' then
p1 = pr
if right(p1, 1) \== ' ' then
p1 = p1' '
if done.ini \== 1 then do
done.ini = 1
t = class4Name(t, t)
p1 = p1'@'a' '
end
if done.t.a == 1 then
return out(p1'done :'className(t) '@'a)
done.t.a = 1
if t = m.class.classO then do
if a == '' then
return out(p1'obj null')
t = objClass(a, '')
if t = '' then
return out(p1'obj has no class @'m.a)
else
return classOutDone(t, a, pr, p1'isA')
end
if t == m.class.classV then
return out(p1'=' m.a)
if t == m.class.classW == 'w' then
return out(p1'}' substr(a, 2))
if m.t == 'f' then
return classOutDone(m.t.class, a'.'m.t.name, pr, p1'.'m.t.name)
if m.t == 'r' then do
if m.a == '' then
return out(p1'refTo :'className(m.t.class) '@null@')
else
return classOutDone(m.t.class, m.a, pr,
, p1'refTo @'m.a)
end
if m.t = 'u' then do
t1 = m.t.1
vv = m.t.0 > 0 & m.t.1 == m.class.classV
call out p1 || if(m.t.name == '', 'union', ':'m.t.name) ,
|| copies(' =' m.a, vv)
do ux=1+vv to m.t.0
call classOutDone m.t.ux, a, pr' '
end
return 0
end
if m.t = 's' then do
call out p1'stem' m.a.0
do ux=1 to m.a.0
call classOutDone m.t.class, a'.'ux, pr' ', pr' .'ux
end
return 0
end
if m.t = 'c' then do
if m.t.name = m.a then
call classOutDone m.t.class, a, pr, p1'choice' m.a
return 0
end
if m.t = 'm' then
return 0
return err('bad class type' m.t)
endProcedure classOutDone
/* copy class end ***************************************************/
/* copy map begin ******************************************************
a map stores values at keys
it may also maintain a list of keys
the basic ideas are similar to the java Interface java.util.Map
contrary to stems we also handle keys longer then 250 bytes
***********************************************************************/
/*--- initialize the module ------------------------------------------*/
mapIni: procedure expose m.
if m.map.ini = 1 then
return
m.map.ini = 1
call mIni
m.map.0 = 0
m.map.inlineSearch = 1
call mapReset map.inlineName, map.inline
return
endProcedure mapIni
mapInline: procedure expose m.
parse arg pName, opt
if mapHasKey(map.inlineName, pName) then do
im = mapGet(map.inlineName, pName)
if pos('l', opt) < 1 & symbol('m.im.0') \== 'VAR' then do
m.im.0 = m.im.lEnd - m.im.lBegin - 1
do ix=1 to m.im.0
m.im.ix = strip(sourceline(ix+m.im.lBegin), 't')
end
end
return im
end
name = '/'
do lx = m.map.inlineSearch to sourceline()
if \ abbrev(sourceline(lx), '$') then
iterate
li = sourceline(lx)
s1 = pos('/', li)+ 1
if s1 < 3 | s1 > 4 then
iterate
s2 = pos('/', li, s1)
if s2 <= s1 then
iterate
if s1 == 3 then do
if name \== substr(li, s1, s2-s1) then
iterate
im = 'MAP.INLINE.' || (m.map.inline.0+1)
call mapAdd map.inlineName, name, im
m.im.lBegin = lBeg
m.im.lEnd = lx
m.im.mark = mrk
if name == pName then do
m.map.inlineSearch = lx+1
return mapInline(pName)
end
name = '/'
end
else if \ mapHasKey(map.inlineName,
, substr(li, s1, s2-s1)) then do
lBeg = lx
mrk = substr(li, 2, s1-3)
name = substr(li, s1, s2-s1)
end
else do
name = '/'
end
end
if pos('r', opt) > 0 then
return ''
return err('no inline data /'pName'/ found')
endProcedure mapInline
/*--- create a new map ----------------------------------------------*/
mapNew: procedure expose m.
parse arg opt
m.map.0 = m.map.0 + 1
return mapReset('MAP.'m.map.0 , opt)
endProcedure mapNew
/*--- make an empty map, if opt <> '' maintain stem of keys
('K' in map.keys, '=' in a else in opt) --------------*/
mapReset: procedure expose m.
parse arg a, opt
if symbol('m.map.keys.a') == 'VAR' then
call mapClear a
if opt = '=' then
st = a
else if translate(opt) = 'K' then
st = 'MAP.KEYS.'a
else
st = opt
m.map.keys.a = st
if st \== '' then
m.st.0 = 0
return a
endProcedure
/*--- add a new key value pair to the map ----------------------------*/
mapAdd: procedure expose m.
parse arg a, ky, val
vv = mapValAdr(a, ky, 'a')
m.vv = val
return val
endProcedure mapAdd
/*--- change the value at a key or add key value ---------------------*/
mapPut: procedure expose m.
parse arg a, ky, val
vv = mapValAdr(a, ky, 'p')
m.vv = val
return val
endProcedure mapPut
/*--- return 1 if key ky exists in map a, 0 otherwise ----------------*/
mapHasKey: procedure expose m.
parse arg a, ky
return mapValAdr(a, ky) \== ''
endProcedure mapHasKey
/*--- return the value of key ky in map a if it exists,
else if called with a third argument return third argument
else issue an error ----------------------------------------*/
mapGet: procedure expose m.
parse arg a, ky
vv = mapValAdr(a, ky)
if vv \== '' then
return m.vv
else if arg() > 2 then
return arg(3)
else
return err('missing key in mapGet('a',' ky')')
endProcedure mapGet
/*--- return a stem of all keys --------------------------------------*/
mapKeys: procedure expose m.
parse arg a
if m.map.keys.a == '' then
call err 'mapKeys('a') with no keys'
return m.map.keys.a
endProcedure mapKeys
/*--- remove a key from the map, do nothing if it is missing ---------*/
mapRemove: procedure expose m.
parse arg a, ky
vv = mapValAdr(a, ky)
if vv == '' then
return ''
if m.map.keys.a \== '' then do
trace ?R /* not tested yet ???wkTest */
k = m.map.keys.a
mx = m.k.0
do i=1 to mx
if m.k.i == ky then do
m.k.i = m.k.mx
m.k.0 = mx - 1
return
end
end
end
val = m.vv
drop m.a.ky
return val
endProcedure mapRemove
/*--- remove all entries ---------------------------------------------*/
mapClear: procedure expose m.
parse arg a
st = mapKeys(a)
liLe = 243 - length(a)
do kx=1 to m.st.0
ky = m.st.kx
drop m.st.kx
if length(ky) <= liLe then do
drop m.a.ky
end
else do
adr = mapValAdr(a, ky)
if adr \== '' then do
ha = left(adr, lastPos('.', adr) - 3)
do i = 1 to m.ha.k.0
drop m.ha.k.i m.ha.v.i
end
drop m.ha.k.0
end
end
end
m.st.0 = 0
return a
endProcedure mapClear
/*--- return the value pointer for a key, '' if non existing
with fun = 'a' add a key, with 'p' put a key ------------*/
mapValAdr: procedure expose m.
parse arg a, ky, fun
if length(ky) + length(a) <= 243 then do
res = a'.'ky
if symbol('m.res') == 'VAR' then do
if fun == 'a' then
call err 'duplicate key' ky 'in map' a
return res
end
else if fun == '' then
return ''
end
else do
len = 243 - length(a)
q = len % 4
ha = a'.'left(ky, len - 2 * q) || substr(ky,
, (length(ky)-len) % 2 + 2 * q, q) || right(ky, q)
if symbol('M.ha.k.0') == 'VAR' then do
do i=1 to m.ha.k.0
if m.ha.k.i == ky then do
if fun == 'a' then
call err 'duplicate key' ky ,
'map' a 'hash' ha'.K.'i
return ha'.V.'i
end
end
end
else do
i = 1
end
if fun == '' then
return ''
if i > 9 then
call err 'overflow long key' y 'in map' a 'hash' ha'.K.'i
m.ha.k.0 = i
m.ha.k.i = ky
res = ha'.V.'i
end
if m.map.keys.a \== '' then
call mAdd m.map.Keys.a, ky
m.res = ''
return res
endProcedure mapValAdr
/* copy map end *******************************************************/
/* copy m begin ********************************************************
we use variables as follows
m. stem m: all global data and object data that must survive
a procedure call (m for memory in Memoria of B5000)
m.<mbr>.** to avoid conflicts: every rexx Module (copy) should
only allocate addresses m.<mbr>.** with <mbr> the name of
the rexx module
we pass parameters around (e.g. a=address, m=memory, st=stem)
and the called function may use m.a or m.a.subField etc.
gg*: local variable in subroutines without procedure
everything else: temporary data within procedure
every subroutine is declared as procedure expose m.
(also if no m. variable is used, because e.g. of error handling)
the few subroutines that cannot use procedure, should use only
variables starting with gg
***********************************************************************/
/*---make an area -----*/
mNewArea: procedure expose m.
parse arg nm, adr, newCd, freeCd
m.m.area.0 = m.m.area.0 + 1
a = 'M.AREA.'m.m.area.0
if adr == '=' then
adr = nm
else if adr == '' then
adr = 'M.'m.m.area.0
if symbol('m.m.n2a.adr') == 'VAR' then
call err 'adr' adr 'for area' nm 'already used'
m.m.n2a.adr = a
call mAlias adr, nm
m.m.p2a.adr = a
m.a.0 = 0
m.a.free.0 = 0
m.a.address = adr
m.a.newCode = newCd
m.a.freeCode = freeCd
return nm
endProcedure mNewArea
mAlias: procedure expose m.
parse arg oldNa, newNa
if symbol('m.m.n2a.oldNa') \== 'VAR' then
call err 'area' oldNa 'does not exist'
if oldNa == newNa then
return
if symbol('m.m.n2a.newNa') == 'VAR' then
call err 'newName' newNa 'for old' oldNa 'already used'
m.m.n2a.newNa = m.m.n2a.oldNa
return
endProcedure mAlias
mBasicNew: procedure expose m. ggArea
parse arg name
if symbol('m.m.n2a.name') \== 'VAR' then
call err 'area' name 'does not exists'
ggArea = m.m.n2a.name
if m.ggArea.free.0 > 0 then do
fx = m.ggArea.free.0
m.ggArea.free.0 = fx-1
m = m.ggArea.free.fx
end
else do
m.ggArea.0 = m.ggArea.0 + 1
m = m.ggArea.address'.'m.ggArea.0
end
return m
endProcedure mBasicNew
mNew: procedure expose m.
labelMNew:
parse arg name, arg, arg2, arg3
m = mBasicNew(name)
interpret m.ggArea.newCode
return m
endProcedure mNew
mReset: procedure expose m.
parse arg a, name
ggArea = m.m.n2a.name
m = a
interpret m.ggArea.newCode
return m
endProcedure mReset
mFree: procedure expose m.
parse arg m
p = 'M.P2A.'left(m, lastPos('.', m)-1)
area = m.p
if m.area.freeCode \== '' then
interpret m.area.freeCode
fx = m.area.free.0 + 1
m.area.free.0 = fx
m.area.free.fx = m
return
endProcedure mFree
/*--- iterate over all allocate elements of an area ------------------*/
mIterBegin: procedure expose m.
parse arg nm
a = m.m.n2a.nm
return m.a.address'.0'
endProcedure mIterBegin
mIter: procedure expose m.
parse arg cur
if cur == '' then
return ''
lx = lastPos('.', cur)
p = 'M.P2A.'left(cur, lx-1)
a = m.p
ix = substr(cur, lx+1)
do ix=ix+1 to m.a.0
n = m.a.address'.'ix
do fx=1 to m.a.free.0 while m.a.free \== n
end
if fx > m.a.free.0 then
return n
end
return ''
endProcedure mIter
/*--- cut stem a to length len ---------------------------------------*/
mCut: procedure expose m.
parse arg a, len
m.a.0 = len
return a
endProcedure mCut
/*--- add one or several arguments to stem m.a -----------------------*/
mAdd: procedure expose m.
parse arg a
ix = m.a.0
do ax = 2 to arg()
ix = ix + 1
m.a.ix = arg(ax)
end
m.a.0 = ix
return a'.'ix
endProcedure mAdd
/*--- pop last element from stem m.a ---------------------------------*/
mPop: procedure expose m.
parse arg a
ix = m.a.0
if ix < 1 then
call err 'pop from empty stem' a
m.a.0 = ix-1
return m.a.ix
endProcedure mPop
/*--- add to m.dst.* a (sub)sequence of m.src.* ----------------------*/
mAddSt: procedure expose m.
parse arg dst, src
dx = m.dst.0
do sx = 1 to m.src.0
dx = dx + 1
m.dst.dx = m.src.sx
end
m.dst.0 = dx
return
endProcedure mAddSt
/*--- find position of first occurrence of ele in stem m,
return 0 if nonemove a part of a stem -----------------------*/
mPos: procedure expose m.
parse arg m, ele, sx
if sx == '' then
sx = 1
do x=sx to m.m.0
if m.m.x = ele then
return x
end
return 0
endProcedure mPos
/*--- move a part of a stem ------------------------------------------*/
mMove: procedure expose m.
parse arg m, sx, dx
if dx < sx then do
y = dx
do x=sx to m.m.0
m.m.y = m.m.x
y = y + 1
end
end
else if dx > sx then do
y = m.m.0 + dx - sx
do x=m.m.0 by -1 to sx
m.m.y = m.m.x
y = y - 1
end
end
m.m.0 = m.m.0 + dx - sx
return
endProcedure mMove
/*--- insert a stem into another ------------------------------------*/
mInsert: procedure expose m.
parse arg m, tx, st
call mMove m, tx, tx+m.st.0
do sx=1 to m.st.0
dx = tx-1+sx
m.m.dx = m.st.sx
end
return
endProcedure mInsert
/*--- strip all elements of a stem -----------------------------------*/
mStrip: procedure expose m.
parse arg st, opt
if opt == '' then
opt = 'b'
do x=1 to m.st.0
m.st.x = strip(m.st.x, opt)
end
return st
endProcedure mStrip
/*--- cat all elements of a stem together ----------------------------*/
mCat: procedure expose m.
parse arg st, mid
if m.st.0 < 1 then
return ''
res = m.st.1
do x=2 to m.st.0
res = res || mid || m.st.x
end
return res
endProcedure mCat
mIni: procedure expose m.
if m.m.ini = 1 then
return
m.m.ini = 1
m.mAlfLC = 'abcdefghijklmnopqrstuvwxyz'
m.mAlfUC = translate(m.mAlfLC)
m.mAlfa = m.mAlfLC || m.mAlfUC
m.mAlfNum = m.mAlfa || '0123456789'
m.mAlfDot = m.mAlfNum || '.'
m.m.area.0 = 0
call mNewArea
return
endProcedure mIni
/* copy m end *********************************************************/
/* copy adrIsp begin *************************************************/
/**********************************************************************
lmd: catalog read
call sequence: lmdBegin, lmdNext*, lmdEnd
mit lmd service (mit save in file und read,
weil list zu langsam und listcat abstürzt)
1. arg (grp) als group dataset für lmd save
und dd name für file read
***********************************************************************/
lmdBegin: procedure expose m.
parse arg grp, lev
call adrIsp 'lmdinit listid(lmdId) level('lev')'
res = adrIsp('lmdlist listid(&lmdId) option(save) group('grp')', 4)
call adrIsp 'lmdfree listid(&lmdId)'
if res = 0 then do
call trc timing() 'lmdlist save' grp lev
call adrTso 'alloc dd('grp') shr dsn('grp'.datasets)'
end
else do
call trc 'no datasets found' timing() 'lmdlist save' grp lev
call adrTso 'alloc dd('grp') dummy'
end
call readDDBegin grp
return /* end lmdBegin */
lmdNext:
parse arg ggGrp, ggSt, withVolume
if \ readDD(ggGrp, ggSt) then
return 0
if withVolume \== 1 then
do ggIx=1 to value(ggSt'0')
x = value(ggSt || ggIx, word(value(ggSt || ggIx), 1))
end
return 1
endSubroutin lmdNext
lmdEnd: procedure expose m.
parse arg grp
call readDDEnd grp
call adrTso 'free dd('grp')'
return /* end lmdEnd */
lmd: procedure expose m.
parse arg lev, withVol
call lmdBegin gg1, lev
do while lmdNext(gg1, q., withVol)
do x=1 to q.0
call out q.x
end
end
call lmdEnd gg1
return
endProcedure lmd
/**********************************************************************
member list of a pds:
call sequence x=lmmBegin(dsn) lmmNext(x) * lmmEnd(x)
***********************************************************************/
lmm: procedure expose m.
parse arg dsn
id = lmmBegin(dsn)
do ix=1 by 1
m = lmmNext(id)
if m = '' then
leave
call out m
end
call lmmEnd id
return
endProcedure lmm
lmmBegin: procedure expose m.
parse arg dsn
mbr = dsnGetMbr(dsn)
pds = dsnSetMbr(dsn, )
call adrIsp "LMINIT DATAID(lmmId) DATASET('"pds"') ENQ(SHRW)"
call adrIsp "LMOPEN DATAID("lmmId") OPTION(INPUT) "
res = lmmId
if mbr <> '' then
res = res 'pattern('mbr')'
return res
endProcedure lmmBegin
lmmEnd: procedure expose m.
parse arg lmmId opt
call adrIsp "LMMLIST DATAID("lmmId") option(free)", 8
call adrIsp "LMCLOSE DATAID("lmmId")"
call adrIsp "LMFREE DATAID("lmmId")"
return
endProcedure lmmEnd
lmmNext: procedure expose m.
parse arg lmmId opt
if adrIsp("LMMLIST DATAID("lmmid")" ,
"OPTION(LIST) MEMBER(Mbr)" opt, 4 8) = 0 then
return strip(mbr)
else
return ''
endProcedure lmmNext
lmmRm: procedure expose m.
parse arg dsn, mbrs
mbrs = dsnGetMbr(dsn) mbrs
pds = dsnSetMbr(dsn, )
call adrIsp "LMINIT DATAID(lmmId) DATASET("pds") ENQ(SHRW)"
call adrIsp "LMOPEN DATAID("lmmId") OPTION(OUTPUT) "
err = ''
do wx=1 to words(mbrs)
m1 = word(mbrs, wx)
rr = adrIsp("lmmDel dataid("lmmId") member("m1")", 0 8 12)
if rc = 0 then
say 'removed' m1 'from' pds
else if rc = 8 then
say 'not found' m1 'in' pds
else do
err = 'error deleting' m1 'in' pds 'rc' rr strip(zerrlm)
say err
leave
end
end
call adrIsp "LMCLOSE DATAID("lmmId")"
call adrIsp "LMFREE DATAID("lmmId")"
if err <> '' then
call err err
return
endProcedure lmmRm
/*--- address ispf with error checking -------------------------------*/
adrIsp:
parse arg ggIspCmd, ggRet
address ispexec ggIspCmd
if rc = 0 then return 0
else if ggRet == '*' then return rc
else if wordPOS(rc, ggRet) > 0 then return rc
else
call err 'adr ispExec rc' rc 'in' ggIspCmd':' strip(zerrlm)
endSubroutine adrIsp
/*--- address editor with error checking -----------------------------*/
adrEdit:
parse arg ggEditCmd, ggRet
address isrEdit ggEditCmd
if rc = 0 then return 0
else if ggRet == '*' then return rc
else if wordPOS(rc, ggRet) > 0 then return rc
else
call err 'adr isrEdit rc' rc 'for' ggEditCmd
endSubroutine adrEdit
/* copy adrIsp end *************************************************/
/* copy fileTso begin *************************************************/
fileTsoReset: procedure expose m.
parse arg m, sp
m.m.readIx = 'c'
if symbol('m.m.defDD') \== 'VAR' then do
m.fileTso.buf = m.fileTso.buf + 1
m.m.defDD = 'CAT'm.fileTso.buf
m.m.buf = 'FILETSO.BUF'm.fileTso.buf
m.m.spec = sp
end
if sp \== '' then do
m.m.spec = dsnSpec(sp)
rr = translate(subword(m.m.spec, 4))
m.m.stripT = \ (pos(':V', rr) > 0 | pos('RECFM(V', rr) > 0)
end
return m
endProcedure fileTsoReset
fileTsoOpen: procedure expose m.
parse arg m, opt
buf = m.m.buf
if opt == m.j.cRead then do
aa = dsnAlloc(m.m.spec, 'SHR', m.m.defDD)
if m.dsnAlloc.dsn <> '' then
if sysDsn("'"m.dsnAlloc.dsn"'") <> 'OK' then
call err 'cannot read' m.dsnAlloc.dsn':',
sysDsn("'"m.dsnAlloc.dsn"'")
call readDDBegin word(aa, 1)
m.m.jReading = 1
m.buf.0 = -1
m.m.readIx = 0
end
else do
if opt == m.j.cApp then
aa = dsnAlloc(m.m.spec, 'MOD', m.m.defDD)
else if opt == m.j.cWri then
aa = dsnAlloc(m.m.spec, 'OLD', m.m.defDD)
else
call err 'fileTsoOpen('m',' opt') with bad opt'
call writeDDbegin word(aa, 1)
m.m.jWriting = 1
m.buf.0 = 0
m.m.readIx = 'w'
end
m.m.dd = word(aa, 1)
m.m.free = subword(aa, 2)
m.m.dsn = m.dsnAlloc.dsn
return m
endProcedure fileTsoOpen
fileTsoClose: procedure expose m.
parse arg m
buf = m.m.buf
if m.m.readIx \== 'c' then do
if m.m.readIx == 'w' then do
if m.buf.0 > 0 then
call writeDD m.m.dd, 'M.'BUF'.'
call writeDDend m.m.dd
end
else do
call readDDend m.m.dd
end
interpret m.m.free
end
m.buf.0 = 'closed'
m.m.readIx = 'c'
m.m.free = ''
m.m.dd = ''
return m
endProcedure fileTsoClose
fileTsoRead: procedure expose m.
parse arg m, var
ix = m.m.readIx + 1
buf = m.m.buf
if ix > m.buf.0 then do
res = readDD(m.m.dd, 'M.'buf'.')
if \ res then
return 0
ix = 1
end
m.m.readIx = ix
m.var = m.buf.ix
call oMutate var, m.class.classV
return 1
endProcedure fileTsoRead
fileTsoWrite: procedure expose m.
parse arg m, var
buf = m.m.buf
ix = m.buf.0 + 1
m.buf.0 = ix
if m.m.stripT then
m.buf.ix = strip(var, 't')
else
m.buf.ix = var
if ix > 99 then do
call writeDD m.m.dd, 'M.'buf'.'
m.buf.0 = 0
end
return
endProcedure fileTsoWrite
fileTsoWriteO: procedure expose m.
parse arg m, var
if objClass(var, m.class.classV) == m.class.classV then do
call fileTsoWrite m, m.var
return
end
call err 'fileTsoWriteO('m',' var') cannot write objects of class',
objClass(var)
endProcedure fileTsoWriteO
fSub: procedure expose m.
return file('.sysout(T) writer(intRdr)')
endProcedure fSub
fEdit: procedure expose m.
parse arg spec, vw
if spec == '' then
spec = 'new ::f'
else if abbrev(spec, '::') then
spec = 'new' spec
else if abbrev(spec, ':') then
spec = 'new' ':'spec
f = mNew('FileEdit', spec)
m.f.editType = if(abbrev(translate(vw), 'V'), 'view', 'edit')
return f
endProcedure fEdit
fileTsoEditClose: procedure expose m.
parse arg m
dsn = m.m.dsn
if dsn \== '' then do
call fileTsoClose m
call adrIsp m.m.editType "dataset('"dsn"')", 4
return
end
fr = m.m.free
dd = m.m.dd
m.m.free = ''
call fileTsoClose m
call adrIsp "LMINIT DATAID(lmmId) ddName("dd") ENQ(SHRW)"
eRc = adrIsp(m.m.editType "dataid("lmmId")", '*')
lRc = adrIsp("LMFree DATAID("lmmId")", '*')
interpret fr
if (eRc \== 0 & eRc \== 4) | lRc \== 0 then
call err m.m.editType 'rc' eRc', lmFree rc' lRc
return
endProcedure fileTsoEditClose
fileTsoIni: procedure expose m.
if m.fileTso.ini == 1 then
return
m.fileTso.ini = 1
m.file.sep = '.'
m.fileTso.buf = 0
call jIni
um = "call err 'for tso undefined method'"
call classNew "n File u JRW", "m",
, "jOpen call fileTsoOpen m, opt",
, "jReset call fileTsoReset m, arg",
, "jClose call fileTsoClose m",
, "jRead return fileTsoRead(m, var)",
, "jWrite call fileTsoWrite m, line",
, "jWriteO call fileTsoWriteO m, var",
, "filePath return word(m.m.spec, 1)" ,
, "fileIsFile" um "'fileIsFile'" ,
, "fileIsDir return 1" ,
, "fileChild return file(word(m.m.spec, 1)'.'name opt)",
, "fileRm" um "'fileRm'" ,
, "fileMkDir" ,
, "fileRmDir" um "'fileRmDir'"
/* , "filePath return m.m.stream%%qualify",
, "fileIsFile return sysIsFile(m.m.stream%%qualify)" ,
, "fileIsDir return sysIsFileDirectory(m.m.stream%%qualify)" ,
, "fileChild return file(m.m.stream%%qualify'/'name)",
, "fileRm return adrSh(m.m.spec)",
, "fileMkDir return adrSh('mkdir' m.m.stream%%qualify)" ,
, "fileRmDir return fileLinuxRmDir(m, opt)" */
call classNew "n FileList u JRW", "m",
, "jReset if arg2 == 'r' then m.m.dsnMask=arg'.**';",
"else m.m.dsnMask=arg'.*';",
, "jOpen call csiOpen m, m.m.dsnMask",
, "jClose" ,
, "jRead return csiNext(m, var)"
call classNew "n FileEdit u File", "m",
, "jClose call fileTsoEditClose m"
return
endProcedure fileTsoIni
/* copy fileTso end *************************************************/
/* copy adrTso begin *************************************************/
/*--- send ggTsoCmd to tso, fail if rc <> 0 or not listed in ggRet ---*/
adrTso:
parse arg ggTsoCmd, ggRet
address tso ggTsoCmd
if rc == 0 then return 0
else if ggRet == '*' then return rc
else if wordPos(rc, ggRet) > 0 then return rc
else
call err 'adrTso rc' rc 'for' ggTsoCmd
return /* end adrTso */
/*--- format dsn from tso format to jcl format -----------------------*/
dsn2jcl: procedure expose m.
parse upper arg dsn ., addPrefix
if left(dsn,1) = "'" then
return strip(dsn, 'b', "'")
sp = sysvar('SYSPREF')
if sp == '' then
sp = userid()
cx = pos('~', dsn)
if cx < 1 & addPrefix == 1 then
return sp'.'dsn
do while cx \== 0
le = left(dsn, cx-1)
ri = substr(dsn, cx+1)
if right(le, 1) == '.' | left(ri, 1) == '.' then
dsn = le || sp || ri
else
dsn = le || left('.', le \== '') || sp ,
|| left('.', ri \== '') || ri
cx = pos('~', spec, cx)
end
return dsn
endProcedure dsn2Jcl
/*--- format dsn from jcl format to tso format -----------------------*/
jcl2dsn: procedure expose m.
parse arg dsn .
return "'"dsn"'"
endProcedure jcl2dsn
dsnSetMbr: procedure expose m.
parse arg dsn, mbr
bx = pos('(', dsn)
if bx > 0 then
dsn = strip(left(dsn, bx-1))
if mbr <> '' then
dsn = dsn'('strip(mbr)')'
return dsn
endProcedure dsnSetMbr
dsnGetMbr: procedure expose m.
parse arg dsn
lx = pos('(', dsn)
rx = pos(')', dsn, lx+1)
if lx < 1 then
return ''
else if lx < rx then
return substr(dsn, lx+1, rx-lx-1)
else
return strip(substr(dsn,lx+1))
endProcedure dsnGetMbr
/**********************************************************************
io: read or write a dataset with the following callsequences:
read: readDDBegin, readDD*, readDDEnd
write: writeBegin, writeDD*, writeEnd
readDD returns true if data read, false at eof
***********************************************************************/
/*--- prepare reading from a DD --------------------------------------*/
readDDBegin: procedure expose m.
parse upper arg ggDD
call errAddCleanup 'call readDDEnd' ggDD', "*"'
return /* end readDDBegin */
/*--- read from DD ggDD into ggSt, return false at eof ---------------*/
readDD:
parse arg ggDD, ggSt, ggCnt
if ggCnt = '' then
ggCnt = 100
call adrTso 'execio' ggCnt 'diskr' ggDD '(stem' ggSt')', 2
return (value(ggSt'0') > 0)
return /* end readDD */
/*--- finish reading DD ggDD ----------------------------------------*/
readDDEnd: procedure expose m.
parse upper arg ggDD, ggRet
call errRmCleanup 'call readDDEnd' ggDD', "*"'
return adrTso('execio 0 diskr' ggDD '(finis)', ggRet)
endProcedure readDDEnd
/*--- prepare writing to DD ggDD -------------------------------------*/
writeDDBegin: procedure expose m.
parse upper arg ggDD
/* ensure file is erased, if no records are written */
call adrTso 'execio' 0 'diskw' ggDD '(open)'
call errAddCleanup 'call writeDDEnd' ggDD', "*"'
return /* end writeDDBegin */
/*--- write to gg ggDD from stem ggSt, ggCnt records -----------------*/
writeDD:
parse arg ggDD, ggSt, ggCnt
if ggCnt == '' then
ggCnt = value(ggst'0')
call adrTso 'execio' ggCnt 'diskw' ggDD '(stem' ggSt')'
return
endSubroutine writeDD
/*--- end writing to dd ggDD (close) --------------------------------*/
writeDDEnd: procedure expose m.
parse upper arg ggDD, ggRet
call errRmCleanup 'call writeDDEnd' ggDD', "*"'
return adrTso('execio 0 diskw' ggDD '(finis)', ggRet)
endProcedure writeDDEnd
/*--- readNx: read next line, using buffer ---------------------------*/
/*--- begin: allocate dsnSpec and ini ------------------------ -------*/
readNxBegin: procedure expose m.
parse arg m, m.m.dsn, m.m.dd, m.m.Cnt
if m.m.dd = '' then
m.m.dd = 'DDNX'
if m.m.cnt = '' then
m.m.cnt = 1000
m.m.cx = m.m.cnt + 999
m.m.buf0x = 0
m.m.0 = 0
call dsnAlloc 'dd('m.m.dd')' m.m.dsn
call readDDBegin m.m.dd
return m
endProcedure readDDNxBegin
/*--- return the stem of the next line, or '' at end -----------------*/
readNx: procedure expose m.
parse arg m
ix = m.m.cx + 1
m.m.cx = ix
if m.m.cx <= m.m.0 then
return m'.'ix
m.m.buf0x = m.m.buf0x + m.m.0
if \ readDD(m.m.dd, 'M.'m'.', m.m.cnt)then
return ''
m.m.cx = 1
return m'.1'
endProcedure readDDNx
/*--- return the position (line number) of reader
plus le characters of the current line (default 50) ------*/
readnxPos: procedure expose m.
parse arg m, le
li = m'.'m.m.cx
li = strip(m.li, 't')
if arg() < 2 then
le = 50
if le < 1 then
li = ''
else if length(li) <= le then
li = ':' li
else
li = ':' left(li, le-3)'...'
return 'line' (m.m.buf0x + m.m.cx)li
endProcedure readnxPos
/*--- close and deallocate ------------------------------------------*/
readNxEnd: procedure expose m.
parse arg m
call readDDEnd m.m.dd
call tsoFree m.m.dd
return
endProcedure readDDNxEnd
/*--- standardise a dsn spec
word1 dsName or -
word2 dd or -
word3 disp or -
word4 to first : attributes in tso format
after first : attributes for new allocation
----------------------------------------------------------------------*/
dsnSpec: procedure expose m.
parse upper arg spec
rr = '' /* put leading - in separate words */
do sx=1 while words(rr) < 3 & wx \= ''
wx = word(spec, sx)
do while abbrev(wx, '-') & words(rr) < 3
wx = substr(wx, 2)
rr = rr '-'
end
rr = rr wx
end
spec = rr subWord(spec, sx)
na = ''
dd = ''
di = ''
if left(spec, 1) = '&' then /* external spec is handled ok */
spec = strip(substr(spec, 2))
do wx=1 by 1
w = word(spec, wx)
if w = '' | abbrev(w, '.') | abbrev(w, ':') then
leave
else if wordPos(w, 'OLD SHR MOD NEW')>0 | abbrev(w, 'SYSO') then
di = w
else if w = 'CATALOG' then
di = di w
else if abbrev(w, 'DD(') then
dd = substr(w, 4, length(w)-4)
else if abbrev(w, 'DSN(') then
na = strip(substr(w, 5, length(w)-5))
else if na == '' then
na = dsn2jcl(w)
else if dd == '' then
dd = w
else if di == '' then
di = w
else
leave
end
if na == '' then
na = '-'
else if abbrev(na, "'") then
na = substr(na, 2, length(na)-2)
if dd == '' then dd = '-'
if di == '' then di = '-'
re = subword(spec, wx)
if abbrev(re, '.') then
re = substr(re, 2)
return na dd di re
endProcedure dsnSpec
/*--- alloc a dsn with dsnAlloc
if the dsn is inuse wait and retry
until either the allocation is successfull
or the timeout occurs --------------------------------------*/
dsnAllocWait: procedure expose m.
parse upper arg spec, pDi, pDD, timeOut
x = max(1, arg() - 1)
do rt=0
m.adrTsoAl.1 = ''
m.adrTsoAl.2 = ''
m.adrTsoAl.3 = ''
call outtrap m.adrTsoAl.
res = dsnAlloc(spec, pDi, pDD, '*')
call outtrap off
if \ abbrev(res, ' ') then
return res
msg = m.adrTsoAl.1'\n'm.adrTsoAl.2'\n'm.adrTsoAl.3
if rt > timeOut & timeOut \== '' then
return err('timeout allocating' spec time() '\n'msg)
if pos('DATA SET IS ALLOCATED TO ANOTHER', msg) < 1 then
return err('allocating' spec'\n'msg)
say time() 'sleep and retry alloc' spec
call sleep 1, 0
end
endProcedure dsnAllocWait
/*--- alloc a dsn or a dd
spec '-'<ddName>
datasetName? disposition? '.'? attributes? (':' newAtts)?
disp default disposition
dd default dd name
retRc erlaubte ReturnCodes (leer = 0)
returns if ok then ddName <rexx for free> otherwise rc -----*/
dsnAlloc: procedure expose m.
parse upper arg spec, pDi, pDD, retRc
parse value dsnSpec(spec) with na dd di rest
if na = '-' then
m.dsnAlloc.dsn = ''
else
m.dsnAlloc.dsn = na
if na == '-' & dd \== '-' & di == '-' & rest = '' then
return dd
if dd == '-' & pDD \== '' then
dd = pDD
if dd == '-' then do
if symbol('m.adrTso.ddNum') = 'VAR' then
dd = m.adrTso.ddNum + 1
else
dd = 1
m.adrTso.ddNum = dd
dd = 'DD' || dd
end
if di = '-' & pDi \== '' then
di = pDi
if di = '-' then
di = 'SHR'
else if pos('(', na) < 1 then
nop
else if di = 'MOD' then
call err 'disp mod for' na
else
di = 'SHR'
if pos('/', na) > 0 then
return csmAlloc(na dd di rest, retRc)
else
return tsoAlloc(na dd di rest, retRc)
endProcedure dsnAlloc
tsoAlloc: procedure expose m.
parse arg na dd disp rest ':' nn, retRc
c = 'alloc dd('dd')' disp
if na \== '-' then
c = c "DSN('"na"')"
else if disp = 'NEW' and nn \== '' then
c = c dsnCreateAtts(,nn)
call outtrap m.adrTsoAl.
alRc = adrTso(c rest, '*')
call outtrap off
if alRc = 0 then do
call errAddCleanup 'call tsoFree' dd', "*"'
return dd 'call tsoFree' dd';'
end
if nn \= '' & wordPos(disp, 'OLD SHR') > 0 ,
& sysDsn("'"m.dsnAlloc.dsn"'") == 'DATASET NOT FOUND' then do
say 'tsoAlloc creating' c rest ':'nn
call adrTso 'alloc dd('dd') new catalog' dsnCreateAtts(na, nn)
call adrTso 'free dd('dd')'
return tsoAlloc(na dd disp rest, retRc)
end
do ax=1 to m.adrTsoAl.0
say m.adrTsoal.ax
end
if retRc = '*' | wordPos(alRc, retRc) > 0 then
return ' ' alRc
call err 'tsoAlloc rc' alRc 'for' c rest
endProcedure tsoAlloc
tsoAtts: procedure expose m.
parse arg dsn
rc = listDsi("'"dsn"' SMSINFO")
if rc = 0 then
mv = ''
else if rc = 4 & sysReason = 19 then do
mv = 'UNITCNT(30)'
say 'multi volume' mv
end
else if rc ^= 0 then
call err 'listDsi rc' rc 'reason' sysReason,
sysMsgLvl1 sysMsgLvl2
al = 'CAT'
al = ''
if right(sysDsSms, 7) == 'LIBRARY' ,
| abbrev(sysDsSms, 'PDS') then
al = al 'DSNTYPE(LIBRARY)'
if sysUnits = 'TRACK' then
sysUnits = 'TRACKS'
al = al "DSORG("sysDSorg") MGMTCLAS("sysMgmtClass")",
"DATACLAS("sysDataClass")" ,
"RECFM("translate('1 2 3', ' 'sysREcFM, ' 123')")",
"LRECL("SYSLRECL")",
"blksize("sysBLkSIZE")",
"SPACE("sysPrimary"," sysSeconds")" sysUnits mv
return al
endProcedure tsoAtts
tsoFree: procedure expose m.
parse arg dd, ggRet
call adrTso 'free dd('dd')', ggRet
call errRmCleanup 'call tsoFree' dd', "*"'
return
endProcedure tsoFree
dsnCreateAtts: procedure expose m.
parse arg dsn, atts, forCsm
forCsm = forCsm == 1
aU = ' 'translate(atts)
if abbrev(atts, ':') then do
parse var atts a1 atts
bl = 32760
rl = substr(a1, 3)
if abbrev(a1, ':F') then do
if rl = '' then
rl = 80
recfm='f b'
bl = bl - (bl // rl)
end
else do
if rl = '' then
rl = bl-4
recfm = substr(a1, 2, 1) 'b'
end
if forCsm then
atts = atts "recfm("space(recfm, 0)") lrecl("rl")",
"blkSize("bl")"
else
atts = atts "recfm("recfm") lrecl("rl") block("bl")"
end
if pos('(', dsn) > 0 & pos(' DSNTYPE(', aU) < 1 ,
& pos(' DSORG(', aU) < 1 then
atts = atts 'dsntype(library) dsorg(po)'
if pos(' MGMTCLAS(', aU) < 1 then
atts = atts 'mgmtclas(COM#A091)'
if pos(' SPACE(', aU) < 1 then
if forCsm then
atts = atts 'space(10, 1000) cylinder'
else
atts = atts 'space(10, 1000) cyl'
if dsn == '' then
return atts
return "dataset('"dsnSetMbr(dsn)"')" atts
endProcedure dsnCreateAtts
/*--- read the dataset specified in ggDsnSpec to stem ggSt -----------*/
readDSN:
parse arg ggDsnSpec, ggSt
ggAlloc = dsnAlloc(ggDsnSpec, 'SHR', 'readDsN')
call adrTso 'execio * diskr' word(ggAlloc, 1) '(stem' ggSt' finis)'
interpret subword(ggAlloc, 2)
return
endSubroutine readDsn
/*--- write the dataset specified in ggDsnSpec from stem ggSt
write ggCnt records if not empty otherwise ggst0
if ggSay 1 then say ... records written to ... -------------*/
writeDSN:
parse arg ggDsnSpec, ggSt, ggCnt, ggSay
if ggCnt == '' then
ggCnt = value(ggst'0')
ggAlloc = dsnAlloc(ggDsnSpec, 'OLD', 'readDsN')
call adrTso 'execio' ggCnt 'diskw' word(ggAlloc, 1) ,
'(stem' ggSt 'open finis)'
interpret subword(ggAlloc, 2)
if ggSay == 1 | m.debug == 1 then
say ggCnt 'records written to' ggDsnSpec
return
endSubroutine writeDsn
copyDSN: procedure expose m.
parse arg frSpec, toSpec, ggSay
frDD = dsnAlloc(frSpec, 'SHR', 'FRDD')
toDD = dsnAlloc(toSpec, 'OLD', 'TODD')
call readDDBegin word(frDD, 1)
call writeDDBegin word(toDD, 1)
cnt = 0
do while readDD(word(frDD, 1), r.)
call writeDD word(toDD, 1), r.
cnt = cnt + r.0
end
call readDDEnd word(frDD, 1)
call writeDDEnd word(toDD, 1)
interpret ';' subword(frDD, 2) '; ; ;' subword(toDD, 2)
if ggSay == 1 | m.debug == 1 then
say cnt 'records copied from' frSpec 'to' to toSpec
return
endSubroutine writeDsn
/* copy adrTso end ****************************************************/
/* copy err begin ******************************************************
messages, errorhandling,help
***********************************************************************/
errIni: procedure expose m.
if m.err.ini == 1 then
return
call outIni
m.err.ini = 1
m.err.handler = ''
m.err.cleanup = ';'
m.err.opt = ''
return
endProcedure errIni
/* configure err -----------------------------------------------------*/
errReset: procedure expose m.
call errIni
parse arg m.err.opt, m.err.handler
if pos('I', translate(m.err.opt)) > 0 then
if errOS() \== 'LINUX' then
if sysVar('sysISPF') = 'ACTIVE' then
call adrIsp 'control errors return'
return
endSubroutine errReset
/*--- error routine: abend with message ------------------------------*/
err:
parse arg ggTxt, ggOpt
call errIni
drop err handler cleanup opt call return
if ggOpt == '' & m.err.handler \== '' then do
if 1 then do /* no detection of recursive err call loop
--> will anyway fail by stack overflow */
interpret m.err.handler
end
else do
/* avoid recursive err call loop */
drop call return
if symbol('m.err.call') \== 'VAR' then
m.err.call = 1
else
m.err.call = m.err.call + 1
if m.err.call > 10 then do
say 'errHandler loop:' m.err.handler
end
else do
m.err.return = 1
call errInterpret m.err.handler
m.err.call = m.err.call - 1
if m.err.return then
return result
end
end
end
call outPush
call errSay ggTxt, 'e'
call errCleanup
if ggOpt == '' then
ggOpt = m.err.opt
ggOpt = translate(ggOpt)
if pos('T', ggOpt) > 0 then do
trace ?r
say 'trace ?r in err'
end
if pos('H', ggOpt) > 0 then do
call errSay 'divide by zero to show stackHistory', 'e'
x = 1 / 0
end
call errSay 'exit(12)', 'e'
exit errSetRc(12)
endSubroutine err
/*--- error routine: user message cleanup exit -----------------------*/
errEx:
parse arg ggTxt
call errIni
call outPush
call errSay ggTxt
call errCleanup
exit 8
endProcedure errEx
errAddCleanup: procedure expose m.
parse arg code
if m.err.ini \== 1 then
call errIni
/* concatenate backwards, then it is executed also backwards */
m.err.cleanup = ';'code || m.err.cleanup
return
endProcedure errAddCleanup
errRmCleanup: procedure expose m.
parse arg code
if m.err.ini \== 1 then
call errIni
cx = pos(';'code';', m.err.cleanup)
if cx > 0 then
m.err.cleanup = left(m.err.cleanup, cx) ,
|| substr(m.err.cleanup, cx + length(code)+2)
return
endProcedure errRmCleanup
errCleanup: procedure expose m.
call errIni
cl = m.err.cleanup
if cl = ';' then
return
m.err.cleanup = ';'
call out 'err cleanup begin' cl
call errInterpret cl
call out 'err cleanup end' cl
return
endProcedure errCleanup
errInterpret: procedure expose m.
parse arg code
interpret code
m.err.return = 0
return
endProcedure errInterpret
/*--- assert that the passed rexx expression evaluates to true -------*/
assert:
interpret 'assertRes =' arg(1)
if \ assertRes then
call err 'assert failed' arg(1)':' arg(2)
return
endProcedure assert
/*--- output an errorMessage msg with pref pref
split message in lines at '/n' ---------------------------*/
errSay: procedure expose m.
parse arg msg, pref
parse source . . ggS3 . /* current rexx */
if pref == 'e' then
msg = 'fatal error in' ggS3':' msg
else if pref == 'w' then
msg = 'warning in' ggS3':' msg
else if pref \== '' then
msg = pref':' msg
return outNl(msg)
endProcedure errSay
/*--- abend with Message after displaying help -----------------------*/
errHelp: procedure expose m.
parse arg msg, op
call errSay msg, 'e'
call help
call err msg, op
endProcedure errHelp
/*--- return the Operating System we are running on: TSO or LINUX ---*/
errOS: procedure expose m.
parse source os .
return os
endProcedure errOS
/*--- set rc for ispf: -------------------------------------------------
if a cmd is run by ispStart, its RC is ignored,
but ISPF passes the value of the shared varible 3IspfRc
back as return code
----------------------------------------------------------------------*/
errSetRc: procedure expose m.
parse arg zIspfRc
if errOS() \== 'LINUX' then
if sysVar('sysISPF') = 'ACTIVE' then
address ispExec vput 'zIspfRc' shared
return zIspfRc
endProcedure errSetRc
/*--- output a trace message if m.tr is set -----------------------*/
trc: procedure expose m.
parse arg msg
if m.trace == 1 then
call out 'trc:' msg
return
endProcedure trc
debug: procedure expose m.
parse arg msg
if m.debug == 1 then
call out 'debug' msg
return
endProcedure debug
/*--- display the first comment block of the source as help ----------*/
help: procedure expose m.
parse source . . s3 .
call out right(' help for rexx' s3, 79, '*')
do ax=1 to arg()
say ' ' arg(ax)
end
do lx=1 by 1
if pos('/*', sourceLine(lx)) > 0 then
leave
else if lx > 10 then do
call out 'initial commentblock not found for help'
return
end
end
do lx=lx+1 by 1
li = strip(sourceLine(lx), 't', ' ')
if pos('*/', li) > 0 then
leave
call out li
end
call out right(' end help for rexx' s3, 79, '*')
return 4
endProcedure help
/*--- output all lines (separated by '\n') of all args --------------*/
outNl: procedure expose m.
do ax=1 to max(1, arg())
msg = arg(ax)
sx = 0
bx = -1
do lx=1 until bx >= length(msg)
ex = pos('\n', msg, bx+2)
if ex < 1 then
ex = length(msg)+1
call out substr(msg, bx+2, ex-bx-2)
bx = ex
end
end
return 0
endProcedure outNl
/* copy err end *****************************************************/
/* copy ut begin *****************************************************/
/*--- if function warning all3 arguments get evaluated|
e.g if(x=0, 'infinity', 1/0) will fail| -----------*/
if: procedure expose m.
parse arg co, ifTrue, ifFalse
if co then
return ifTrue
else
return ifFalse
endProcedure if
/*--- embedded ASSignement:
assign the second argument to the variable with name in first arg
and return the value assigned ----------------------------------*/
ass:
call value arg(1), arg(2)
return arg(2)
/*--- embedded ASSignement only if NotNull:
assign the second argument to the variable with name in first arg
if the second arg is not null, return new value ---------------*/
assIf:
if arg(2) == '' then
return value(arg(1))
call value arg(1), arg(2)
return arg(2)
/*--- return first nonNull argument ---------------------------------*/
nn:
if arg(1) \== '' then
return arg(1)
if arg(2) \== '' then
return arg(2)
call err 'nn() both args empty'
/*--- embedded ASSignement return NotNull:
assign the second argument to the variable with name in first arg
and return 1 if value not null, 0 if null ----------------------*/
assNN:
call value arg(1), arg(2)
return arg(2) \== ''
/*--- return current time and cpu usage ------------------------------*/
timing: procedure expose m.
return return time() 'ela='time('E') 'cpu='sysvar('syscpu'),
'su='sysvar('syssrv')
timingTest: procedure expose m.
say 'begin' timing() sysvar('sysnode')
do 30000000
end
say 'end ' timing()
return
/*--- sleep several seconds ------------------------------------------*/
sleep: procedure expose m.
parse arg secs, sayIt
if sayit <> 0 then
say 'sleeping' secs 'secs' time()
CALL SYSCALLS 'ON'
ADDRESS SYSCALL "sleep" secs
CALL SYSCALLS 'OFF'
if sayit <> 0 then
say 'slept' secs 'secs' time()
return
endProcedure sleep
/*--- quote string txt using quoteChar qu ("""" ==> ") ---------------*/
quote: procedure expose m.
parse arg txt, qu
if qu = '' then
qu = '"'
res = qu
ix = 1
do forever
qx = pos(qu, txt, ix)
if qx = 0 then
return res || substr(txt, ix) || qu
res = res || substr(txt, ix, qx-ix) || qu || qu
ix = qx + length(qu)
end
endProcedure quote
/*--- return the count of occurrences of needle in heyStack ----------*/
posCount: procedure expose m.
parse arg needle, hayStack, start, fin
if start = '' then
start = 1
if fin = '' then
fin = length(hayStack) + 1 - length(needle)
do cnt = 0 by 1
start = pos(needle, haystack, start)
if start < 1 | start > fin then
return cnt
start = start + length(needle)
end
endProcedure posCount
repAll: procedure expose m.
parse arg src, w, new
res = ''
cx = 1
do forever
nx = pos(w, src, cx)
if nx < 1 then
return res || substr(src, cx)
res = res || substr(src, cx, nx-cx) || new
cx = nx + length(w)
end
endProcedure repAll
repAllWords: procedure expose m.
parse arg src, w, new
res = ''
wx = 0
cx = 1
do forever
wx = wordPos(w, src, wx+1)
if wx < 1 then
return res || substr(src, cx)
nx = wordindex(src, wx)
res = res || substr(src, cx, nx-cx) || new
cx = nx + length(w)
end
endProcedure repAllWords
/* copy ut end ********************************************************/
/* copy out begin ******************************************************
out interface with simplistic implementation
***********************************************************************/
outIni: procedure expose m.
parse arg msg
if m.out.ini == 1 then
return
m.out.ini = 1
m.out.dst = ''
return
endProcedure outIni
/*--- output a message to the current destination -------------------*/
out: procedure expose m.
parse arg msg
if m.out.ini \== 1 then
call outIni
if m.out.dst == '' then do
say msg
end
else do
st = m.out.dst
sx = m.st.0 + 1
m.st.0 = sx
m.st.sx = msg
end
return 0
endProcedure out
/*--- push an out destination ---------------------------------------*/
outPush: procedure expose m.
parse arg m.out.dst
return
endProcedure outPush
/* copy out end *****************************************************/
COMMIT;
CREATE unique index vdps2.iixdu on VDPS2.DTUNDERFIXCOMQ
alter index vdps2.iixduZwei on VDPS2.DTUNDERFIXCOMQ
create lob tablespace a123 in db123
create synonym syefgh for own123.taefgh
CREATE TABLE VDPS2.DTUNDERFIXCOMP
alter table oa1a038.twk003a
alter table gdb9998.twk003a
commit sdf sdf; CREATE TABLE "VDPS3 "
. -- sdf sdf
-- sdf
"vdps table drei " ; create alias efg.hik
-s silent: remove members wi
kommentar vorher
-- generating rebinds in DBAF at 14:21:19 20/10/06 for F540769
-- for 1 tablespace, 5 table, 0 view, 2 index, 1 alias, 1 synonym
-- tablespace DB123.A123
-- table VDPS2.DTUNDERFIXCOMQ
-- table VDPS2.DTUNDERFIXCOMP
-- table "VDPS3 "."vdps table drei "
-- table OA1A038.TWK003A
-- table GDB9998.TWK003A
-- index VDPS2.IIXDU
-- index VDPS2.IIXDUZWEI
-- alias EFG.HIK
-- synonym OWN123.SYEFGH
REBIND PACKAGE(DB.DBWK2.(DB2J000003));
-- vivo=BSNY con=17EF4F701D8D1B72 tst=2006-09-29-14.38.38.590494
REBIND PACKAGE(DB.DBWK2.(DB2J000ABC));
-- vivo=BSNY con=17EF50AF1ACF23CB tst=2006-09-29-15.58.43.647758
REBIND PACKAGE(DB.DBWK2.(DB2J000XYZ));
-- vivo=BSNY con=17EF50B10BBC328C tst=2006-09-29-15.58.56.607691
REBIND TRIGGER PACKAGE(DGDB9998.WK003TRIG);
-- vivo=BSYY con=17ECF6B005DF3C90 tst=2006-09-14-16.52.20.179834
---- compare 4 =, 0 new, 0 old, 0 others, total 4
--= REBIND PACKAGE(DB.DBWK2.(DB2J000003));
--= REBIND PACKAGE(DB.DBWK2.(DB2J000ABC));
--= REBIND PACKAGE(DB.DBWK2.(DB2J000XYZ));
--= REBIND TRIGGER PACKAGE(DGDB9998.WK003TRIG);
}¢--- A540769.WK.REXX.O13(DBARENA) cre=2009-11-10 mod=2009-11-10-14.36.39 A540769 ---
call sqlConnect DBOF
$=pds=DSN.DBA.ZUEGEL.NOV.RUN
call lmm $pds
$| $@for mbr $@¢
if \ datatype(substr($mbr, 2), 'n') then do
say 'ignoring' $mbr
iterate
end
call sqlPreAllCl 1, 'select changeid, name, status' ,
'from s100447.adbChg',
'where changeid =' substr($mbr, 2),
, cc, ':ch, :na, :sta'
if m.cc.0 = 0 then do
say $mbr 'not wsl found -> delete'
call adrTso "delete '"$pds"("$mbr")'"
end
else if m.cc.0 \= 1 then do
call err m.cc.0 'tupels for change' $mbr
end
else if sta == 'COMPLETE' then do
say $mbr 'delete wsl' ch na sta
call adrTso "delete '"$pds"("$mbr")'"
end
else do
neNa = strip(left(na, 8))
say $mbr ' renameTo' neNa 'for' ch 'named' na 'status' sta
call adrTso "rename '"$pds"("$mbr")' ("neNa")"
job = 'Y'left(neNa, 7)
call readDsn $pds'('neNa')', j.
jx = pos(' JOB ', j.1)
if jx < 1 | jx > 16 then
call err 'no jobCard in' neNa':' j.1
j.1 = '//'job strip(substr(j.1, jx))
call writeDsn $pds'('neNa')', j., , 1
end
$!
}¢--- A540769.WK.REXX.O13(DBX) cre=2009-08-12 mod=2013-11-04-16.31.17 A540769 ---
/* rexx ****************************************************************
synopsis: DBX opt* fun args v2.5
04.11.13
edit macro fuer CS Nutzung von CA RCM
(die a* Funktionen gehen auch mit tso dbx ...)
? diese Hilfe
aa,aw,ac pr naechste AuftragsId suchen fuer praefix pr
aa: anzueigen, aw, ac entsprechendes Member editieren
n, nt neuen Auftrag erstellen (nt = test)
q dbSy? query und expandiert Scope Zeilen vom Db2Catalog
* fuegt alle bestehenden Objekte ein
* UNDO um Expansion rueckgaengig zu machen
* mit q, qq, etc. Zeile selekieren, sonst Alle
* funktioniert nicht nur in Auftrag
* dbSy hier wird gesucht sonst in source
c op1? create ddl from source
i | ia | ie subs nct changes in Db2Systeme importier(+ana+exe)
subs = sub(,sub)*: Liste von Stufen/rzDbSys
sub: DBTF, RR2/DBOF (im PTA), RZ8(betr. dbSy)
UT, ST, SIT, Q, R, P, X, Y, Z, Abkuerzungen
==> sucht im PromotionPath
nct: Nachtrag: leer=noch nicht importiert sonst angegeb
8: Nachtrag 8, *: neuster, =: wie letztes Mal
va vc vd ve vj vq vr vs vt ea ec ed ee ej er es et dbSy? nt?
view/edit ana,cdl,ddl,exe,jcl,quality,rec,src/trgddl
ren dbSy rename DSNs der Execution der Analyse in DBSystem
zStat Zuegelschub Statistik siehe wiki help
opt* Optionale Optionen
-f force: ignoriere QualitaetsVerletzungen
oder dbx c im QualitaetsMember
-aAuft oder Auft: AuftragsMember oder DSN
Typen fuer scope und dbx q (analog adminTool, grossOderKlein ist egal):
type DB TS TB VW AL IX UDT UDF TG SP SQ SY
1stelliges Kuerzel D S T V A X E F J O Q Y
Optionen im Auftrag: vPT VP*, keeptgt 0, qCheck 0, dbaCheck 0, ddlOnly 1
ca, bmc, ibm
Variabeln im Auftrag (expandiert werden $varName imd ${varName})
varName ist case sensitive|)
srcNm NamensKonvention compare source (z.B. DBAF)
trgNm NamensKonvention compare target (z.B. DBAF)
impNm NamensKonvention import Ziel (z.B. DBOF)
subsys Db2 Subsystem (source, target, import, je nachdem)
wiki help http://chw20025641/host/db2wiki/pmwiki.php?n=Main.CaDDLChg
************************************************************************
4.§§.2013 Walter zStat macht nur Warnung wenn ana <> auftrag
*/ /* end of help
25.10.2013 Walter move rz8 --> rzx
2.10.2013 Walter rename Analysis in ZielRz nicht RZ4 wegen Release
27. 9.2013 Walter move to rz4
26. 9.2013 Walter promotePaths UT,ST,SIT,x,y,z, nachtrag *
23. 9.2013 Walter vp0/1/2/3/4/16/17 + vp0=default
16. 9.2013 Walter Nachtraege in zSTat geflickt
2. 9.2013 Walter ueberall class=log (auch PTA|)
30. 8.2013 Walter vP17 fuer CA Tool Version 17
19. 8.2013 Walter zstat in rz4
9. 8.2013 Walter schenv pro rz in JobCard generiert
19. 7.2013 Walter qualityCheck fuer VW, kein Check wenn keine Objs
8. 7.2013 Walter zStat auch im RR2
28. 6.2013 Walter fix qualityCheck fuer Db
26. 6.2013 Walter dbx c in QualitaetsMember fuer Weiterarbeit ohne -f
25. 6.2013 Walter v2.4: zSta, Namen angepasst auf ca ...
11. 6.2013 W. Keller qualityCheck mit Verglich in RZ2 und vq
14. 5.2013 W. Keller VPT für tool Alias PT
07. 5.2013 W. Keller crLib with primary 1000 cyls (avoid alloc err)
03. 4.2013 W. Keller IA erstellt jetzt exeJcl in dsn.dbx<dbSys>.exe
07. 3.2013 W. Keller in neuem Auftrag: CA und VDPS Warnung
06. 2.2013 W. Keller ca scope fuer Triggers
31. 1.2013 W. Keller integration anaPost und start, variable auf7
24. 1.2013 W. Keller initial edit macro AC fuer CA Analysen
18. 1.2013 W. Keller caDdl->ddl, caGlbChg->glbChg ohne dbxRen.*
9. 1.2013 W. Keller ddlOnly fuer CA eingebaut
8.01.2013 W. Keller rename fuer CA eingebaut: dbx ni030121 ren dbaf
13.12.2012 W. Keller Fehler bei 1 stellig import (verwechslung nachtr)
7.12.2012 W. Keller .stry -> .ana, vy -> va etc.
5.12.2012 W. Keller ca implementation I
9.11.2012 W. Keller ey und vy für view/edit strategy
23. 8.2012 W. Keller v1015 für extract
13. 7.2012 W. Keller typo in query scope
18. 5.2012 W. Keller im neuen Auftrag source DX0G target DC0G/DCVG @rz8
PromotionPaths angepasst und vereinfacht
4. 4.2012 W. Keller sqlQuery via csm for dbx q and qualitycheck
4. 4.2012 W. Keller fix, import submits after last import empty, chroi
14. 2.2012 W. Keller ca prototype
23.12.2011 W. Keller bmc prototype
13.12.2011 W. Keller RZ0, ToolPrefix, csmCopy
3.11.2011 W. Keller Zuegeltermine 2012
6. 9.2011 W. Keller v10 RZ8 DE0G UND DM0G ausgebaut
29.08.2011 W. Keller v10 default mit p8 und p9 alias
24.06.2011 W. Keller v10 und v72
8.06.2011 W. Keller stored procedures editiert und version=%
26.05.2011 W. Keller qCheck 0 eingefügt
30.03.2011 W. Keller import et, it, .... , DD0G -> it, trg dc0g, i pa
24.12.2010 W. Keller plexZ (mit location CHROI00Z...)
10.12.2010 W. Keller db2 release 915, damit instead of trigger kommen
19.11.2010 W. Keller viewEdit macht jetzt view für v* statt immer edit
14.10.2010 W. Keller dp4g und dp2g in rz4.* bzw rz2.*, Zuegelsch 2012
24. 8.2010 W. Keller zusätzliche Typen für scope und dbx q
23. 8.2010 W. Keller dbzf ausgebaut
6. 8.2010 W. Keller vc vj vs vt ec ej es et nt? eingebaut
5. 8.2010 W. Keller stepName recTrg instead of recSrc for target
12. 7.2010 W. Keller sq=sequence für compare (fehlt noch in q)
18. 2.2010 W. Keller class=BS0 für PTA (wegen RR25 und RR26)
11. 2.2010 W. Keller dbaCheck mit ex0
9. 2.2010 W. Keller sendJob timeout 600 auch in extractScopeVersion
1.12.2009 W. Keller CSM.RZ1.P0.EXEC statt CMS.DIV...
12.11.2009 W. Keller Qualitätsfehler ohne -f stoppt wieder
25.10.2009 W. Keller DeltaNew überall, -a Optione, batch und do removed
28.09.2009 W. Keller Optionen keepTgt 0 und dbaCheck 0
10.09.2009 W. Keller mask ausschalten falls kein maskFile
07.09.2009 W. Keller fix error with dbaMulti
25.08.2009 W. Keller err statt fehl in line 1001
12.08.2009 W. Keller batch (ohne for) geflickt, ac pr -r: return new mbr
12.08.2009 W. Keller Zuegelschub wird nach Datum ausgesucht
19.05.2009 P. Kuhn DEFER im Masking ignorieren
05.03.2009 P. Kuhn Qualitaets-Check "ts not logged" eingebaut
18.12.2008 p. kuhn neues Delta Merge Verfahren im import fuer DQ0G
18.12.2008 p. kuhn SW fuer DVBP im RZ2 (frueher im RZ4)
10.12.2008 p. kuhn Timeout vom Sendjob von 30 auf 600 Sek. erhoeht.
28.11.2008 w. keller v9 Fehler bei leerer Selektion
24.09.2008 p. kuhn v9 checks
15.09.2008 p. kuhn beim ersten import wird cdl dbaCheck't und editiert
09.09.2008 w. keller target mit RZ (job holt ddl, version aus RZ), opt =
08.08.2008 w. keller import mit wildcards
24.07.2008 w. keller overwrite ausgebaut +25.7
24.06.2008 w. keller fix spezialFall für DB +18.7
19.05.2008 w. keller qualitaetsKontolle in c,v und st und -f Option
13.05.2008 w. keller rw, rs, sw, st und do ... for ... eingebaut
25.02.2008 w. keller subSys argument für dbx q
22.11.2007 w. keller fun v für ObjectCompare Verfahren inkl db ddl save
dq0g mit eigenen Libraries
12.11.2007 w. keller DSN für neuen Wartungsstand
05.06.2007 w. keller neu
***********************************************************************/
/* Ideen, Wünsche ******************************************************
AuftragsId aus Prototyp bestimmen
LCTL
sämtliche infos aus XLS
jedesmal Zwischenspeichern mit und restore Funktion
analyze generieren, falls möglich
batch Funktionen ganzen Zügelschub importieren usw. ==> mit wsh|
generierte Runs starten in richtiger Reihenfolge
mails an Entwickler schicken
Rückmeldung falls keine changes (leeres cdl)
Type Tabelle
char type Variabeln
fuer extract
db d DB
ts s TS
tb/vw/alias a v t - own name
ix x IX
userDefinedTy e - sch udt
function f - sch udf
trigger j TG qual name
storedProc o SP qual name
sequence q SQ qual name
synonym y SY qual name
**** alte Funktion (braucht es nicht mehr) *****************************
sw rz? WSL aus RZ rz holen und clonen, ohne rz mulitclone
rs rz source ddl und version aus RZ rz holen
st opt? rz target ddl und version extrahieren und ins rz schicken
***********************************************************************/
m.debug = 0
call errReset hi
call jIni
parse upper arg oArgs
oArg1 = word(oArgs, 1)
m.auftrag.dataset = 'DSN.DBX.AUFTRAG'
m.editMacro = 0
m.editProc = 0
if oArgs = '' then do
if adrEdit('macro (oArgs) NOPROCESS', '*') <> 0 then
call errHelp('keine Argumente und kein editMacro rc =' rc)
m.editMacro = 1
call adrEdit 'caps off'
call adrEdit '(x) = member'
m.auftrag.member = x
m.edit.member = x
call adrEdit '(x) = dataset'
m.auftrag.dataset = x
m.edit.dataset = x
end
if oArgs = '' | pos('?', oArgs) > 0 then
exit help()
call dbxIni
m.exitValue = 0
call work oArgs
call sqlDisconnect
exit m.exitValue
/*--- hier wählen wir die wirklich Arbeit aus -----------------------*/
work: procedure expose m.
parse arg wArgs
parse upper var wArgs fun args
args = strip(args)
call mapReset e, 'K'
call mapPut e, 'dol', '$'
call stepGroup 1
m.auftrag.force = 0
m.e.toolAlias = 'P0'
do forever
r = substr(fun, 1 + 2*abbrev(fun, '-'))
if abbrev(fun, '-A') | length(fun) >= 8 then do
if verify(r, '.()', 'm') < 1 then do
m.auftrag.member = r
end
else do
m.auftrag.dataset = dsnSetMbr(r)
m.auftrag.member = dsnGetMbr(r)
end
end
else if abbrev(fun, '-F') then
m.auftrag.force = 1
else if abbrev(fun, '-') then
call err 'bad opt' fun 'in' wArgs
else
leave
parse var args fun args
if fun = '' then
return errHelp('fun missing in args:' wArgs)
end
if m.auftrag.dataset = 'A540769.DBX.AUFTRAG' then do
m.libSkels = 'A540769.wk.skels(dbx'
m.libPre = 'A540769.DBX'
end
else if m.auftrag.dataset = 'DSN.DBQ.AUFTRAG' then do
m.libSkels = 'ORG.U0009.B0106.KIDI63.SKELS(dbx'
m.libPre = 'DSN.DBQ'
end
else do
m.libPre = 'DSN.DBX'
m.libSkels = 'ORG.U0009.B0106.KIDI63.SKELS(dbx'
end
if 0 then do /* ??? testSkels */
if userid() = 'A540769' then
m.libSkels = 'A540769.wk.skels(dbx'
say '??? test skels' m.libSkels '|||'
end
m.libSpezial = m.libPre'.spezial'
call configureRZ sysvar('SYSNODE')
m.sysRz = m.myRz
if m.myRZ = RZ1 then
m.sysSub = DBAF
else if m.myRZ = RZ4 then
m.sysSub = DP4G
else
m.sysSub = 'noSysSubFor'm.myRz
call mapPut e, 'rexxLib', 'ORG.U0009.B0106.KIDI63.EXEC'
call mapPut e, 'libSkels', translate(m.libSkels)
call mapPut e, 'ovrDD', 'DISP=SHR,DSN='m.libPre'.MASK(OVERRIDE)'
call mapPut e, 'libPre', m.libPre
if fun = 'Q' then /* macht process selber | */
return queryScope(args)
if m.editMacro & ^ m.editProc then do
call adrEdit 'process'
m.editProc = 1
end
if wordPos(fun, 'AA AC AW') > 0 then
return nextAuftrag(word(args, 1), substr(fun, 2), word(args, 2))
else if fun = 'C' & m.editMacro,
& right(m.edit.dataset, 8) = '.QUALITY' then
return qualityOk(fun, args)
else if fun = 'CLONEWSL' then
return cloneWsl(word(args, 1), word(args, 2), 1==word(args, 3))
else if fun = 'CPDUM' then
return cpDum(args)
else if fun = 'CRLIB' then
return crLib(args)
else if fun = 'REN' then
return renExeDsns(m.auftrag.member, args)
else if fun = 'ZSTAT' then
return zStat(args)
call memberOpt
if m.sysRz <> 'RZ4' then
call err 'dbx laeuft nur noch im RZ4'
if wordPos(fun, 'N NT') > 0 then
call neuerAuftrag (fun = 'NT'), args, m.auftrag.member
else if fun = 'C' | fun = 'V' | fun = 'ST' then
call compare fun, args
else if wordPos(fun, 'I IA IE') > 0 then
call import fun, args
else if fun = 'N' then
call neuerNachtrag args
else if fun = 'RS' then
call receiveSource args
else if fun = 'RW' then
call receiveWSL args
else if fun = 'SW' then
call sendWSL args
else if wordPos(fun, 'VA VC VD VE VJ VQ VR VS VT VW' ,
'EA EC ED EE EJ ER ES ET EW') > 0 then
call viewEdit fun, args
else
call errHelp 'bad fun' fun 'in args' args, , ' '
if m.auftrag.orig = m.auftrag.0 | m.auftrag.0 = '' then do
end
else do
if abbrev(m.auftrag.orig, 'rmQu') then do
/* alte | Zeilen loeschen */
oldOr = word(m.auftrag.orig, 2)
ox = 0
do ix = 1 to m.auftrag.0
if abbrev(word(m.auftrag.ix, 1), '|') & ix <= oldOr then
iterate
ox = ox + 1
m.auftrag.ox = m.auftrag.ix
end
m.auftrag.0 = ox
m.auftrag.orig = 'rep'
end
if m.editMacro & m.auftrag.dataset = m.edit.dataset ,
& m.auftrag.member = m.edit.member then do
if m.auftrag.orig = 'rep' then do
call adrEdit 'delete .zf .zl'
m.auftrag.orig = 0
end
do lx = m.auftrag.orig+1 to m.auftrag.0
li = left(m.auftrag.lx, 72)
call adrEdit "line_after .zl = (li)"
end
call adrEdit 'save', 4
end
else do
call writeDsn dsnSetMbr(m.auftrag.dataset,
,m.auftrag.member), m.auftrag.,,1
end
end
return
endProcedure work
/*--- ini the CS config ----------------------------------------------*/
dbxIni: procedure expose m.
m.timeout = 600
m.uId = strip(userid())
if m.uId = 'A234579' then
m.uNa = 'Marc'
else if m.uId = 'A390880' then
m.uNa = 'Martin'
else if m.uId = 'A540769' then
m.uNa = 'Walter'
else if m.uId = 'A754048' then
m.uNa = 'Alessandro'
else if m.uId = 'A790472' then
m.uNa = 'Agnes'
else if m.uId = 'A828386' then
m.uNa = 'Reni'
else
m.uNa = m.uId
m.e.toolVers = ''
m.scopeTypes = 'DB TS TB VW AL IX UDT UDF TG SP SQ SY'
m.scopeType1 = 'D S T V A X E F J O Q Y'
m.nachtragChars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
/* PromotionPaths neu */
m.iSchenv = 'DB2 DB2 DB2 DB2 DB2 DB2 DB2 DB2 '
m.promN = 'X Y Z Q R P'
m.promN_A = 'UT ST SI SIT ET IT PQ PA PR'
m.promN_T = 'X Y Z Z X Y,Z Q R P'
m.promD.1 = 'RZX/DE0G RZY/DE0G RZ1/DBTF,RZZ/DE0G' ,
'RQ2/DBOF,RR2/DBOF RR2/DBOF RZ2/DBOF'
m.promD.2 = 'RZX/DCVG RZY/DEVG RZ1/DVTB,RZZ/DEVG' ,
'RQ2/DVBP,RR2/DVBP RR2/DVBP RZ2/DVBP'
m.promD.0 = 2
m.iRZ = 'RZ1 RZ2 RQ2 RR2 RZ4 RZX RZY RZZ'
m.iSchenv = 'DB2 DB2 DB2 DB2 DB2 DB2 DB2 DB2 '
m.lastSaidToolV = 'P0'
return
endProcedure dbxIni
/*--- expand the import target list entered by the user
to a list or rz/dbSy, sorted by rz, local first ----------*/
promExpan2: procedure expose m.
parse arg i
o = promExpan2(i)
say '???' i '>>promExpand>>' o
return o
promExpand: procedure expose m.
parse upper arg inp
inp = strip(translate(inp, ' /', ',.'))
if inp = '' then
call err 'promExpand empty'
if words(inp) > 1 then do /* several words, expand each */
loc = ''
rem = ''
do ix=1 to words(inp)
ee = promExpand(word(inp, ix))
do ex=1 to words(ee)
e1 = word(ee, ex)
if abbrev(e1, m.sysRz'/') then
loc = wordInsAsc(loc, e1)
else
rem = wordInsAsc(rem, e1)
end
end
return strip(loc rem)
end
if length(inp) = 8 & pos('/', inp) = 4 then /* already expanded */
return inp
sx = wordPos(inp, m.promN_A)
if sx > 0 then
return promExpand(word(m.promN_T, sx))
ppx = m.promPath
sx = wordPos(inp, m.promN)
if sx > 0 then
return promExpand(word(m.promD.ppx, sx))
if length(inp) <= 1 then
call err 'ungueltiges rz/dbSystem:' inp
cx = pos(inp, m.promD.ppx)
if cx > 0 then do
a = translate(m.promD.ppx, ' ', ',')
return word(substr(a, lastPos(' ', a, cx)+1), 1)
end
if length(inp) == 4 then
return m.sysRz'/'inp
call err 'no rz/dbsys for' inp
endProcedure promExpand
wordInsAsc: procedure expose m.
parse arg lst, wrds
do wx=1
w = word(wrds, wx)
if w == '' then
return space(lst, 1)
do rx=1 to words(lst) while w > word(lst, rx)
end
r1 = word(lst, rx)
if r1 == '' then
lst = lst w
else if w < r1 then
lst = subWord(lst, 1, rx-1) w subWord(lst, rx)
end
endProcedure wordInsAsc
charInsAsc: procedure expose m.
parse arg lst, chrs
do wx=1 to length(chrs)
c = substr(chrs, wx, 1)
do rx=1 to length(lst) while c > substr(lst, rx, 1)
end
r1 = substr(lst, rx, 1)
if rx > length(lst) then
lst = lst || c
else if c < r1 then
lst = left(lst, rx-1) || c || substr(lst, rx)
end
return lst
endProcedure wordInsAsc
/*--- batch funktionen -----------------------------------------------*/
batchOld: procedure expose m.
parse upper arg args
m.auftrag.dataset = 'DSN.DBX.AUFTRAG'
wx = 1
do forever
w1 = word(args, wx)
if w1 = '' then
return 0
if w1 = 'ADATASET' then do
m.auftrag.dataset = word(args, wx+1)
wx = wx+2
end
else if w1 = 'DO' then do
fx = wordPos('FOR', args, wx)
if fx < 1 then
call err 'DO ohne FOR in' args
cmd = subWord(args, wx+1, fx-wx-1)
do wx=fx+1
ww = word(args, wx)
if ww = '' then
leave
m.auftrag.member = ww
say 'batch do' cmd 'for' ww '...'
call work cmd
end
end
else do
if wordPos(translate(w1), 'A AC AW') > 0 then do
drop m.auftrag.member
cmd = subword(args, wx)
end
else do
m.auftrag.member = w1
cmd = subword(args, wx+1)
end
say 'batch do' cmd 'for mbr' m.auftrag.member
call work cmd
return 0
end
end
return 0
endProcedure batchOld
/*--- create the necessary dbx libraries locally ---------------------*/
crLib: procedure expose m.
parse arg subs
rz = sysvar(sysnode)
call crLibCr 'DSN.DBX.AUFTRAG'
call crLibRe 'DSN.DBX.DDL', 'DSN.DBX.CADDL'
call crLibRe 'DSN.DBX.GLBCHG', 'DSN.DBX.CAGLBCHG'
call crLibCr 'DSN.DBX.JCL'
if rz = 'RZ1' then
call crLibCr 'DSN.DBX.RENAMDDL'
do sx=1 to words(subs)
s1 = word(subs, sx)
if length(s1) \= 4 then
call err 'bad subsys' s1
call crLibCr 'DSN.DBX's1'.ANA'
call crLibCr 'DSN.DBX's1'.DDL'
call crLibCr 'DSN.DBX's1'.EXE'
call crLibCr 'DSN.DBX's1'.REC'
end
return 0
endProcedure crLib
crLibCr: procedure expose m.
parse arg lib
call writeDsn lib'(DUMMY) dd(l1)' ,
'::f mgmtClas(COM#A076) space(1000, 1000) cyl' , x., 0
return 0
endProcedure crLibCr
crLibRe: procedure expose m.
parse arg lib, old
if sysDsn("'"old"'") <> "OK" then
return crLibCr(lib)
call adrTso "rename '"old"' '"lib"'"
return 0
endProcedure crLibRe
/*--- create the necessary dbx libries in the specified rz -----------*/
cpDum: procedure expose m.
parse arg rz subs
call cpDum1 rz, 'DSN.DBX.AUFTRAG(DUMMY)'
/* call cpDum1 rz, 'DSN.DBX.AUTO(DUMMY)'
call cpDum1 rz, 'DSN.DBX.CDL(DUMMY)'
call cpDum1 rz, 'DSN.DBX.DBAUTO(DUMMY)'
call cpDum1 rz, 'DSN.DBX.DBSRCCAT(DUMMY)'
call cpDum1 rz, 'DSN.DBX.DBSRCDDL(DUMMY)'
call cpDum1 rz, 'DSN.DBX.DBTRGCAT(DUMMY)'
call cpDum1 rz, 'DSN.DBX.DBTRGDDL(DUMMY)'
*/
call cpDum1 rz, 'DSN.DBX.JCL(DUMMY)'
/* call cpDum1 rz, 'DSN.DBX.MASK(DUMMY)'
call cpDum1 rz, 'DSN.DBX.OVRCAT(DUMMY)'
call cpDum1 rz, 'DSN.DBX.SENDCF(DUMMY)'
call cpDum1 rz, 'DSN.DBX.SPEZIAL(DUMMY)'
call cpDum1 rz, 'DSN.DBX.SRCCAT(DUMMY)'
call cpDum1 rz, 'DSN.DBX.SRCDDL(DUMMY)'
call cpDum1 rz, 'DSN.DBX.TRGCAT(DUMMY)'
call cpDum1 rz, 'DSN.DBX.TRGDDL(DUMMY)'
*/call cpDum1 rz, 'DSN.DBX.DDL(DUMMY)'
if rz = 'RZ1' then
call cpDum1 rz, 'DSN.DBX.RENAMDDL(DUMMY)'
call cpDum1 rz, 'DSN.DBX.GLBCHG(DUMMY)'
do sx=1 to words(subs)
s1 = word(subs, sx)
if length(s1) \= 4 then
call err 'bad subsys' s1
call cpDum1 rz, 'DSN.DBX's1'.ANA(DUMMY)',
, 'DSN.DBXDBAF.ANA(DUMMY)'
call cpDum1 rz, 'DSN.DBX's1'.REC(DUMMY)',
, 'DSN.DBXDBAF.REC(DUMMY)'
call cpDum1 rz, 'DSN.DBX's1'.DDL(DUMMY)',
, 'DSN.DBXDBAF.DDL(DUMMY)'
end
return 0
endProcedure cpDum
cpDum1: procedure expose m.
parse arg sys, dsn, fr
if fr == '' then
fr = dsn
say '???cpDum' sys dsn fr
if sysDsn("'"fr"'") <> 'OK' then
call writeDsn fr, x, 0, 1
call csmCopy fr, sys'/'dsn
return
endProcedure cpDum1
renExeDsns: procedure expose m.
parse arg ana, dbsy
if length(ana) <> 8 then
call errHelp 'bad analysis' ana 'for ren'
if length(dbsy) <> 4 then
call err 'bad dbSystem' dbSy 'for ren'
if ana = m.edit.member then do
call memberOpt
call analyseAuftrag
ana = overlay(m.e.nachtrag, ana, 8)
end
msk = 'DSN.?'dbsy'.'ana'.**'
call csiOpen csi, 'DSN.C'dbsy'.'ana'.**'
do dx=1 while csiNext(csi, 'CSI.'dx)
/* say dx m.csi.dx */
end
call csiOpen csi, 'DSN.R'dbsy'.'ana'.**'
do dx=dx while csiNext(csi, 'CSI.'dx)
/* say dx m.csi.dx */
end
dx = dx - 1
last = 'ff'x
cA = 0
do cx=1 to dx
lx = lastPos('.', m.csi.cx)
ly = substr(m.csi.cx, lx+1, 1)
if ly == 'A' then
cA = cA + 1
else if ly << last then
last = ly
/*say 'y' ly 'l' last 'dsn' m.csi.cx */
end
if cA == 0 then
call err 'keine aktuellen DSNs in' msk'.A*'
if last == 'ff'x then do
nxt = 'Z'
end
else do
abc = m.ut.alfUC
ax = pos(last, abc)
if ax < 2 then
call err 'last' last 'keine rename moeglich'
nxt = substr(abc, ax-1, 1)
end
say 'renaming' ca 'DSNs from' msk'.A* to' msk'.'nxt'*'
do cx=1 to dx
lx = lastPos('.', m.csi.cx)
ly = substr(m.csi.cx, lx+1, 1)
if ly == 'A' then
call adrTso 'rename' ,
"'"m.csi.cx"'" "'"overlay(nxt, m.csi.cx, lx+1)"'"
end
return 0
endProcedure renExeDsns
/*--- die Konfiguration pro db2 dbSy -------------------------------*/
configureRZSub: procedure expose m.
parse arg rz, dbSy
call configureRZ rz
call configuredbSy rz, dbSy
return
endProcedure configureRZSub
configureDbSy: procedure expose m.
parse arg rz, dbSy
call mapPut e, 'subsys', dbSy
if rz = 'RZX' then
call mapPut e, 'location', 'CHROI00X'dbSy
else if rz = 'RZY' then
call mapPut e, 'location', 'CHROI00Y'dbSy
else if rz = 'RZZ' then
call mapPut e, 'location', 'CHROI00Z'dbSy
else
call mapPut e, 'location', 'CHSKA000'dbSy
return
endProcedure configureDBSy
/*--- die Konfiguration pro RZ ---------------------------------------*/
configureRZ: procedure expose m.
parse arg rz, rel px, toolV
if rz = 'RZ0T' then
rz = 'RZ0'
if rz = '' then
rz = m.myRz
else
m.myRz = rz
m.jobCard = 'jobCa'
call mapPut e, 'jobCla', 'LOG'
rx = pos(rz'/', m.promD.1)
if rx < 1 then
m.pr1Sub = '?noSubsys?'
else
m.pr1Sub = substr(m.promD.1, rx+4, 4)
xrz = wordPos(rz, m.iRz)
if xRz < 1 then
call err 'rz' rz 'not in iRz' m.iRz
call mapPut e, 'schenv', word(m.iSchenv, xRz)
call mapPut e, 'rz', rz
zz = overlay('Z', rz, 2)
call mapPut e, 'zz', zz
if rel == '' then
rel = 1015
if px == '' then
px = if(rz\=='RZ0', 'P0', 'PA')
call mapPut e, 'db2rel', rel
call mapPut e, 'db2relAl', px
call mapPut e, 'dsnload', if(rz=='RZ0', 'DSN', 'DB2@') ,
|| '.'zz'.'px'.DSNLOAD'
if toolV \== '' then
m.e.toolVers = toolV
call mapPut e, 'tool', strip(m.e.tool m.e.toolVers)
call mapPut e, 'toolPreP', 'DSN.TOOLS.'zz'.P0'
call mapPut e, 'toolPreC', 'DSN.TOOLS.'zz'.C0'
/* toolV = copies(m.e.toolVers, rz == 'RZ1') */
toolV = m.e.toolVers
toolRZAl = zz'.'if(toolV == '', 'P0', toolV)
if m.lastSaidToolV \== substr(toolRzAl, 5) then do
m.lastSaidToolV = substr(toolRzAl, 5)
say 'tool version unter Alias' toolRzAl,
if(substr(toolRzAl, 5) =='P0', '==> v16')
end
call mapPut e, 'capref', 'DSN.CADB2.'toolRzAl
call mapPut e, 'caload', 'DSN.CADB2.'toolRzAl'.CDBALOAD'
call mapPut e, 'cacr', DBX
if rz = 'RZ1' then do
if m.libPre = 'DSN.DBQ' then do
m.pr1Sub = 'DQ0G'
m.jobCard = 'jobCQ'
call mapPut e, 'toolPreP', 'DSN.ADB72.P0'
call mapPut e, 'toolPreC', 'DSN.ADB72.C0'
end
end
return
endProcedure configureRZ
/*--- Member Namen prüfen und Auftrag lesen---------------------------*/
memberOpt: procedure expose m.
if m.auftrag.dataset <> m.libPre'.AUFTRAG' then
call err 'e}dbx sollte' m.libPre'.AUFTRAG editieren, nicht' ,
m.auftrag.dataset
m8 = substr(m.auftrag.member, 8, 1)
if pos(m8, 'CW') < 1 then
call err 'e}Member muss 8 stellig sein und mit C oder W enden',
'nicht' m.auftrag.member
m.optOvr = 0 /* (m8 == 'W') & (m.libPre ^== 'DSN.DBQ') */
m.optAuto = 1
call readAuftrag '', m.auftrag.dataset, m.auftrag.member
return
endProcedure memberOpt
/*--- Auftrag einlesen -----------------------------------------------*/
readAuftrag: procedure expose m.
parse arg sys, pds, mbr
editingAuftrag = 0
if sys = '' & m.editMacro then do
call adrEdit '(em) = member'
call adrEdit '(ed) = dataset'
editingAuftrag = ed = pds & em = mbr
end
if editingAuftrag then do
if adrEdit('(zl) = lineNum .zl', 4) = 4 then
zl = 0
m.auftrag.0 = zl
do lx=1 to zl
call adrEdit "(li) = line" lx
m.auftrag.lx = li
end
end
else do
dsn = dsnSetMbr(m.auftrag.dataset, m.auftrag.member)
if sys = '' then
if sysDsn("'"dsn"'") <> 'OK' then
call err 'auftrag' dsn 'existiert nicht:' sysDsn("'"dsn"'")
call readDsn sys'/'dsn, m.auftrag.
end
m.auftrag.orig = m.auftrag.0
return
endProcedure readAuftrag
/*--- naechste AuftragsNummer suchen ---------------------------------*/
nextAuftrag: procedure expose m.
parse arg pre, make, rz opt
if abbrev(rz, '-') then do
opt = rz
rz = ''
end
opt = translate(opt)
if rz = '' | rz = '*' then
rz = m.myRz
if m.myRz <> 'RZ4' then
if m.myRz = 'RZ1' then
call err 'dbx wurde ins RZ4 gezuegelt'
else
call err 'Auftrag für RZ' rz 'muss aus RZ4 erstellt werden'
auft = m.libPre'.AUFTRAG'
call mAdd mCut(na, 0), auft
max = pre
do nx=1 to m.na.0
lmm = lmmBegin(dsnSetMbr(m.na.nx, pre'*'))
mb = lmmNext(lmm)
fi = mb
la = ''
do cnt=2 by 1 while mb <> ''
la = mb
mb = lmmNext(lmm)
end
call lmmEnd lmm
say left(fi, 8) '-' left(la, 8)right(cnt-2, 5) ,
'member in' dsnSetMbr(m.na.nx, pre'*')
if la >> max then
max = la
end
nn = left(max, 7, '0')
do cx=7 by-1 to length(pre)+1,
while pos(substr(nn, cx, 1), '0123456789') > 0
end
if cx >= 7 then
nn = ''
else do
pp = 1 + substr(nn, cx+1)
if length(pp) > 7-cx then
nn = ''
else
nn = left(nn, cx) || right(pp, 7-cx, 0)
end
if length(nn) <> 7 then do
say 'max Auftrag' max 'kein naechster bestimmbar'
end
else if pos(make, 'CW') < 1 then do
say 'max Auftrag' max 'naechster' nn'?'
end
else do
nn = nn || make
say 'max Auftrag' max 'naechster' nn
m.auftrag.0 = 0
call neuerAuftrag 0, rz, nn
dsnNN = dsnSetMbr(auft, nn)
call writeDsn dsnNN, m.auftrag.
if opt = '-R' then
nop
else
call adrIsp "edit dataset('"dsnNN"')", 4
end
m.auftrag.0 = '' /* do not write back the new auftrag | */
if opt = '-R' then
m.exitValue = nn
return 0
endProcedure nextAuftrag
/*--- einen neuen Auftrag initialisieren -----------------------------*/
neuerAuftrag: procedure expose m.
parse arg isTst, rz, auftName
if rz = '' then
rz = m.myRz
else
call configureRz rz
if isTst then do
ow = m.uid
maPr = 'T' || left(translate(m.uNa), 3, 'X')
comMask = m.libPre'.MASK('maPr'PROT)'
impMask = m.libPre'.MASK('maPr'$subsys)'
end
else do
ow = 'S100447'
cChgs = 'PROT'if(abbrev(auftName, 'XB'), 'DVBP', 'DBOF')
iChgs = 'DBOF$impNm'
end
if m.auftrag.0 <> 0 then
call err 'fun n erstellt neuen Auftrag nur in leeres Member'
/* wahrscheinlichen Zügelschub bestimmen*/
zglS = '20130208 20130510 20130809 20131108' ,
'20140214 20140509 20140808 20141114 2015????'
zi = date('s')
zi = overlay(right(substr(zi, 5, 2)+1, 2, 0), zi, 5)
do wx=1 while zi >> word(zglS, wx)
end
zglSchub = if(isTst, 'test', word(zglS, wx) '??:00')
call mAdd auftrag ,
, addDateUs('auftrag ' auftName ow) ,
, ' Zuegelschub' zglSchub ,
, ' Besteller pid name tel' ,
, ' cChgs ' cChgs ,
, ' iChgs ' iChgs
if abbrev(auftName, 'VV') | abbrev(auftName, 'VDPS') then
call mAdd auftrag ,
, ' * ---------- Achtung VDPS -------------------------|' ,
, ' * nach jeder Aenderung alle anderen aktuellen |' ,
, ' * VDPS Auftraege Comparen (= DDL akutalisieren) |'
call mAdd auftrag ,
, 'source RZX/DX0G' ,
, ' ts' left(auftName, 4)'A1P.A%'
return
endProcedure neuerAuftrag
neuerNachtrag: procedure expose m.
parse upper arg opt
call analyseAuftrag
call addNachtrag
return
endProcedure neuerNachtrag
nextNachtrag: procedure expose m.
parse arg nt
nx = pos(nt, m.nachtragChars) + 1
if nx > length(m.nachtragChars) then
call err 'kein Nachtrag char mehr nach' nt
return substr(m.nachtragChars, nx, 1)
m.e.nachtrag = nt
return nt
endProcedure nextNachtrag
/*--- compare: Funktionen c, v und st --------------------------------*/
compare: procedure expose m.
parse upper arg fun, sendToRz
opts = ''
do forever
if abbrev(sendToRz, '=') then do
sendToRz = strip(substr(sendToRz, 2))
opts = opts'='
end
else if abbrev(sendToRz, '-') then do
opts = opts || substr(word(sendToRz, 1), 2)
sendToRz = subword(sendToRz, 2)
end
else
leave
end
cmpLast = pos('=', opts) > 0
if fun = 'C' then
function = 'compare'
else if fun = 'ST' then do
if sendToRz = '' | sendToRz = '*' then
call errHelp 'ST without sendToRz'
call mapPut e, 'toRz', sendToRz
function = 'sendTarget' sendToRz
end
else if fun = 'V' then
function = 'version'
else
call err 'bad fun' fun
call analyseAuftrag
nacLast = m.e.nachtrag
if nacLast = '?' & cmpLast then
call err 'c = oder v = ohne vorangaengiges c oder v'
if nacLast = '?' | m.nacImp then
m.e.nachtrag = nextNachtrag(nacLast)
call mapPut e, 'mbrNac', m.e.auf7 || m.e.nachtrag
if m.e.qCheck == 0 then nop
else if m.sysRz \== 'RZ1' & m.sysRz \== 'RZ4' then
say 'no quality check from' m.sysRz
else do
qx = m.scopeSrc.rz'/'m.scopeSrc.dbSy
px = m.promPath
qy = word(m.promD.px, words(m.promD.px))
if qualityCheck(qx, qy) then do
vAns = 'dbx'm.err.screen'QuAn'
call value vAns, 0
call adrIsp 'vput' vAns 'shared'
ddlxP = substr(m.auftrag.member, 8, 1)
qDsn = m.libPre'.QUALITY('mapGet(e, 'mbrNac')')'
call adrIsp "view dataset('"qDsn"'),
macro(ddlX) parm(ddlxP)",4
call adrIsp 'vget' vAns 'shared'
if pos('F', opts) < 1 & \ m.auftrag.force ,
& value(vAns) \== 1 then
return
else
say 'Compare trotz Qualitaetsfehlern'
end
end
m.o.0 = 0
call mapPut e, 'jobName', 'Y'm.e.auf7
call mapPut e, 'fun', function opts
call namingConv m.scopeTrg.rz, m.scopeTrg.dbSy, 'trgNm'
call namingConv m.scopeSrc.rz, m.scopeSrc.dbSy, 'srcNm'
call mapExpAll e, o, skelStem(m.jobCard)
call mapPut e, 'mask', shrDummy(mapExp(e, m.e.comMask), 1)
call mapPut e, 'ignore', shrDummy(mapExp(e, m.e.comIgno))
call bmcVarsProf 0
if 0 then /* db ddl extrahieren ja / nein ???? */
call extractSrcTrg o, 'DB', cmpLast m.e.auf7 || nacLast
if m.e.tool == ibm then
call extractSrcTrg o, '', cmpLast m.e.auf7 || nacLast
else if m.e.tool == bmc then
call bmcSrcTrg cmpLast m.e.auftrag
else if m.e.tool == ca then do
call configureDbSy m.scopeSrc.rz, m.scopeSrc.dbSy
end
if fun = 'C' then do
if m.optOvr then do
call mapPut e, 'ovr', 'OVR'
call mapExpAll e, o, skelStem('OVR')
call mapPut e, 'src', 'OVR'
end
call mapPut e, 'keepTgtV', copies('KEEPTGT,', m.e.keepTgt)
if m.e.tool == ca then
call caDDL o, scopeSrc, translate(mapExp(e, m.e.cChgs))
else
call mapExpAll e, o, skelStem('COMP')
end
if fun = 'ST' then
call mapExpAll e, o, skelStem('ST')
call writeSub o
call mAdd auftrag, addDateUs(function ,
left('===', 3*cmpLast)m.e.nachtrag,
m.scopeSrc.rz'/'m.scopeSrc.dbSy ,
mapExp(e, "'${libPre}." ,
|| if(m.e.tool=="IBM","srcCat","DDL") ,
|| "($mbrNac)'"))
return
endProcedure compare
/*--- in the qualityMember say dbx c
to continue processing without option -f ------------------*/
qualityOk: procedure expose m.
parse arg fun
vAns = 'dbx'm.err.screen'QuAn'
call value vAns, 1
call adrIsp 'vPut' vAns 'shared'
return 0
endProcedure qualityOk
/*--- find the naming convention for a rz and dbSystem --------------*/
namingConv: procedure expose m.
parse arg rz, dbSy, var
if rz = '.' then do
if pos('.', dbSy) > 0 then
call err 'namingConv old target' dbSy
if pos('/', dbSy) > 0 then
parse var dbSy rz '/' dbSy
else
rz = m.sysRz
end
if strip(rz) = 'RZ1' then
t = strip(dbSy)
else
t = 'DBOF'
if var ^== '' then
call mapPut e, var, t
return t
endProcedure namingConv
skelStem: procedure expose m.
parse upper arg nm
st = 'SKEL.'nm
if symbol('m.st.0') \== 'VAR' then
call readDsn m.libSkels || nm || ')', 'M.'st'.'
return st
endProcedur skelStem
/*--- write jcl and submit it ----------------------------------------*/
writeSub: procedure expose m.
parse arg o, rz, noWri
userSubmits = 0 /* edit jcl and user submits it */
if noWri <> 1 then do
jcl = m.libPre'.JCL('m.e.auftrag')'
call mStrip o, 't'
do ox=1 to m.o.0
if length(m.o.ox) > 70 then
call debug 'o.'ox 'len' length(m.o.ox)':' m.o.ox
end
call writeDsn jcl, m.o., ,1
if userSubmits then /* edit dataset and user may submit it */
call adrIsp "edit dataset('"jcl"')", 4
end
if (noWri <> 1) & (rz = '' | rz = m.sysRz) then do
if ^ userSubmits then
call adrTso "sub '"jcl"'"
end
else do /* submit jcl in another rz */
sysl = csmSysDsn(rz'/')
if sysl = '*/' then
sysl = ''
call writeDsn sysl 'SYSOUT(T) dd(ir) .WRITER(INTRDR)', m.o.
end
return
endProcedure writeSub
/*--- view or edit a member -----------------------------------------*/
viewEdit: procedure expose m.
parse upper arg fun 2 wh, dbSy nac
if length(dbSy) = 1 then
parse var dbSy nac dbSy
if dbSy \== '' & length(dbSy) <> 4 then
call err 'bad dbSystem' dbSy 'in' fun || wh dbSy nac
call analyseAuftrag
if wh = 'D' then
d = dbSy || '.DDL'
else if wh = 'A' then
d = if(dbSy=='', substr(m.imp.last, 5), dbSy)'.ANA'
else if wh = 'R' then
d = if(dbSy=='', substr(m.imp.last, 5), dbSy)'.REC'
else if wh = 'C' then
d = '.CDL'
else if wh = 'E' then do
if dbSy == '' then
call err 'i}'fun ||'E ohne db2Subsystem'
d = dbSy'.EXE'
end
else if wh = 'J' then
d = '.JCL'
else if wh = 'Q' then
d = '.QUALITY'
else if wh = 'S' then
d = '.SRCDDL'
else if wh = 'T' then
d = '.TRGDDL'
else if wh = 'W' then
d = '.BMCWSL'
d = m.libPre || d
if wh = 'J' then
d = d'('m.e.auftrag')'
else if nac = '' then
d = d'('left(m.e.auftrag,7)m.e.nachtrag')'
else
d = d'('left(m.e.auftrag,7)right(strip(nac), 1)')'
if wh = 'Q' then do
ddlxParm = substr(m.auftrag.member, 8, 1)
mac = 'MACRO(DDLX) PARM(DDLXPARM)'
end
else if wh = 'A' then
mac = 'MACRO(AC)'
else
mac = ''
if fun == 'E' then
call adrIsp "edit dataset('"d"')" mac, 4
else
call adrIsp "view dataset('"d"')" mac, 4
return
endProcedure viewEdit
/*--- return jcl either dd dummy or dd disp=shr,dsn=... --------------*/
shrDummy: procedure expose m.
parse arg dsn, keepEmpty
if dsn \= '' then
return 'DISP=SHR,DSN='translate(dsn)
else if keepEmpty == 1 then
return ''
else
return 'DUMMY'
endProcedure shrDummy
/*--- funktion i -----------------------------------------------------*/
import: procedure expose m.
parse upper arg fun, rzDbSyList opt .
call analyseAuftrag
if m.e.nachtrag = '?' then
call err 'vor i=import braucht es compare'
if opt <> '' then
nop
else if m.cmpLast then
call err 'i=import mit c = oder v = muss Nachtraege',
'explizit angeben, z.B. dbx i' rzDbSyList m.e.nachtrag
if ^ m.nacImp & m.e.tool = 'IBM' then do
cdl = cdlDsnCheck(m.e.nachtrag)
if m.e.dbaCheck \== 0 & m.e.tool == 'IBM' then do
if m.editMacro then
dbaParm = 'EX0'
else
dbaParm = 'END'
call adrIsp "edit dataset('"cdl"') macro(dbacheck)",
"parm(dbaParm)", 4
end
end
call mapPut e, 'expOpt', if(m.e.keepTgt, 'A', 'X')
if list = '' then
call err 'no targets in list "'rzDBSysList'"'
impCnt = 0
if fun = 'IA' then
fu2 = 'Ana'
else if fun = 'IE' then
fu2 = 'AnaExe'
else
fu2 = ''
if m.e.tool == 'IBM' & fu2 \== '' then
call err 'fun' fun 'not implemented for ibm'
call configureRz m.sysRz
call mapPut e, 'fun', strip('import'fun fu2 left(rzDbSyList, 30))
call mapPut e, 'jobName', 'Y'm.e.auf7
m.jOut.0 = 0
m.jOut.two.0 = 0
m.jOut.send.0 = 0
call setIf jOut
call setIf jOut'.TWO'
call mapExpAll e, jOut, skelStem(m.jobCard) /* Jobcards */
call configureRZ m.sysRz
rzLast = ''
call stepGroup 1
j0 = m.jOut.0
list = promExpand(rzDbSyList)
do lx = 1 to words(list)
rzDBSys = word(list, lx)
parse value word(list,lx) with r '/' dbSy
if opt == '*' then do
nachAll = m.compares
end
else if opt == '=' then do
if symbol('m.imp.rzDBSys.nachtrag') == 'VAR' then
nachAll = m.imp.rzDBSys.nachtrag
else
nachAll = ''
end
else if opt \== '' then do
nachAll = opt
end
else do
if symbol('m.imp.rzDBSys.nachtrag') \== 'VAR' then
nachAll = m.compares
else
nachAll = substr(m.compares,
, 1+pos(m.imp.rzDBSys.nachTop, m.compares))
end
if nachAll == '' then
iterate
if fun = 'IE' & wordPos(r, 'RZ2 RZ4') > 0 then
call err 'ie fuer Prod nicht erlaubt:' r'/'dbSy
if m.e.tool = 'CA' then
nachAll = right(nachAll, 1)
trgNm = ''
do nx=1 to m.nachtrag.0
if pos(m.nachtrag.nx, nachAll) < 1 then
iterate
act = namingConv('.', m.nachtrag.nx.trg)
if trgNm = '' then
trgNm = act
else if trgNm <> act then
call err 'targetNaming' trgNm 'wechselt zu' act ,
'fuer nachtrag' m.nachtrag.nx 'auf' m.nachtrag.nx.trg
end
if trgNm = '' then
call err 'compare not found for nachtrag' nachAll
m.imp.seq = m.imp.seq + 1
if length(m.imp.seq) > 3 then
call err 'import Sequenz Ueberlauf' m.imp.seq
m.imp.seq = right(m.imp.seq, 3, 0)
if length(nachAll) = 1 then
nachVB = nachAll
else
nachVB = left(nachAll, 1)'-'right(nachAll, 1)
chaPre = m.e.auftrag'.'nachVB'.'m.imp.seq
zs = translate(strip(right(m.e.zuegelSchub, 6)))
if m.e.tool = 'IBM' then
call mapPut e, 'change',chaPre'.'zs
else
call mapPut e, 'change',m.e.auftrag':'nachAll'/' ,
|| m.imp.seq'_'zs
call mapPut e, 'change', chaPre'.'zs
call mapPut e, 'changeRem', 'zs' m.e.zuegelSchub ,
'auf' m.e.auftrag nachAll 'import DBX'
call mapPut e, 'deltaVers', chaPre'.DLT'
call namingConv '.', rzDBSys, 'impNm'
call namingConv m.scopeSrc.rz, m.scopeSrc.dbSy, 'srcNm'
call mapPut e, 'trgNm', trgNm
call mapPut e, 'fun', 'import'fu2 rz
call mapPut e, 'fu2', fu2
call mapPut e, 'mbrNac', m.e.auf7 || right(nachAll, 1)
if r <> m.myRz then do
call importToRZ jOut
call configureRZ r
end
call configureDbSy r, dbSy
if m.e.tool == 'CA' then
call caImport jOut, fun, nachAll,
, translate(mapExp(e, m.e.iChgs)),
, translate(mapExp(e, m.e.iMap)),
, translate(mapExp(e, m.e.iRule))
else
call ibmImport jOut, fun, r, dbSy, nachAll,
, translate(mapExp(e, m.e.impMask)),
, translate(mapExp(e, m.e.impIgno))
call mAdd auftrag, addDateUs("import" rzDBSys nachAll,
mapGet(e, 'change') fu2)
call stepGroup
end
call importToRz jOut
if m.jOut.0 <= j0 then
say 'nothing to import'
else do
call addJobError jOut
call writeSub jOut
end
return
endProcedure import
importToRZ: procedure expose m.
parse arg o
toRz = m.myRz
call mapPut e, 'toRz', toRz
if m.o.send.0 \== 0 & m.sysRz \== toRz then do
sAft = ''
do sx=1 to m.o.send.0
c1 = m.o.send.sx
if m.cdlSent.toRz.c1 \== 1 then do
m.cdlSent.toRz.c1 = 1
if sAft == '' then do
call mapPut e, 'cdl', dsnSetMbr(c1)
call addIf o
call mapExpAll e, o, skelStem('sCdl')
jx = m.o.0
sAft = m.o.jx
jx = jx - 1
sCx = pos('(', m.o.jx)
m.o.jx = left(m.o.jx, sCx) || dsnGetMbr(c1) '-'
m.o.0 = jx
end
else do
call mAdd o, right(',', sCx) || dsnGetMbr(c1) '-'
end
end
end
if sAft \== '' then do
call mAdd o, right(')', sCx) '-', sAft
call addIf o, 'end'
call setIf o, 'CP'toRz
end
end
if m.o.two.0 == 0 then do
end
else if m.sysRz == toRz then do
call addIf o
call mAddSt o, o'.TWO'
call addIf o, 'end'
m.o.ifLine = m.o.two.ifLine
end
else do
call addIf o
call mapExpAll e, o, skelStem('subRz')
la = m.o.0
la = m.o.la
m.o.0 = m.o.0 - 1
call mapExpAll e, o, skelStem(m.jobcard) /*Jobcards*/
call addJobError o'.TWO'
call mAddSt o, o'.TWO'
call mAdd o, la
call addIf o, 'end'
call setIf o, 'SUB'toRz
end
m.o.two.0 = 0
call setIf jOut'.TWO'
m.o.send.0 = 0
return
endProcedure importToRZ
ibmImport: procedure expose m.
parse arg o, fun, rz, dbSys, nachAll, msk, ign
call mapPut e, 'ignore', shrDummy(ign)
call mapPut e, 'mask', shrDummy(msk, 1)
if rz <> m.sysRz then do
do nx=1 to length(nachAll) /* send changes to rz */
c1 = cdlDsnCheck(substr(nachAll, nx, 1))
call mAdd o'.SEND', c1
end
end
call mapPut e, 'cType', "''''T''''"
call mapPut e, 'inDdn', 'DCHG'
cdlPds = m.libPre'.CDL'
call mapPut e, 'cdlPds', cdlPds
call ibmImportExpand o'.TWO', nachAll
return
endProcedure ibmImport
ibmImportExpand: procedure expose m.
parse arg o, nachAll, deltaNew
call addIf o
ic = skelStem('Imp')
sto = mapExpAllAt(e, o, ic, 1, 1)
do while sto ^= ''
parse var sto lx cx
w = word(substr(m.ic.lx, cx), 1)
if w == '$@maskDD' then do
if mapGet(e, 'mask') \= '' then
call mAdd o, '//MSKDDN1 DD' mapGet(e, 'mask')
end
else if w == '$@maskII' then do
if mapGet(e, 'mask') \= '' then
call mAdd o, " MSKDDN='MSKDDN1',",
, " MSKOWN='DUMMY',",
, " MSKNAME='DUMMY',"
end
else if w == '$@bmcCdl' then do
le = left('//IMPORTIN', 13)
do ix=1 to length(nachAll)
call mAdd o, le || 'DD DISP=SHR,DSN=',
|| cdlDsnCheck(substr(nachAll, ix, 1))
le = left('//', 13)
end
end
else if w ^== '$@cdl' then do
call err 'unbekannte Anweisung' w 'in Zeile' cx m.ic.cx
end
else do
inDdn = mapGet(e, 'inDdn')
do ix=1 to length(nachAll)
call mAdd o, left('//'inDdn || right(ix,3,0), 13) ,
|| 'DD DISP=SHR,DSN=',
|| cdlDsnCheck(substr(nachAll, ix, 1))
end
end
sto = mapExpAllAt(e, o, ic, lx, cx + length(w))
end
call addIf o, 'end'
call setIf o, 'SUB???'
return
endProcedure ibmImportExpand
caImport: procedure expose m.
parse arg o, fun, nachAll, iChgs, iMap, iRule
if length(nachAll) \== 1 then
call err 'caImport nachAll' nachAll 'not exactly one'
nact = mapGet(e, 'mbrNac')
ddlSrc = m.libPre'.DDL('nact')'
if iRule == '' | iRule = 'EMPTY' | iRule = 'IGNORE' then
iRule = 'ALL'
if iChgs = 'EMPTY' then
iChgs = ''
if substr(iChgs, 5, 4) == left(iChgs, 4) then
iChgs = ''
call mapPut e, 'iMap', iMap
call mapPut e, 'iRule', iRule
ddlImp = m.libPre || mapGet(e, 'subsys')'.DDL('nact')'
if iChgs == '' then
ddlXX = ddlImp
else
ddlXX = m.libPre || mapGet(e, 'subsys')'.XDL('nact')'
if m.sysRz \== m.myRz | ddlSrc \== ddlXX then
call copyMbr o, nact, ddlSrc, m.myRz , ddlXX
if iChgs \== '' then
call caImpRename o'.TWO', iChgs, nact, ddlXX, ddlImp
call mapPut e, 'ddlin', ddlImp
call mapPut e, 'stry', nact
call addIf o'.TWO'
call stepGroup
call mapExpAll e, o'.TWO', skelStem('CImp')
call addIf o'.TWO', 'end'
call setIf o'.TWO', 'AUTO'
if wordPos(fun, 'IA IE') > 0 then do /* analyse step */
call stepGroup
if m.e.tool = ibm then
call err 'fun' fun 'not implemented for' m.e.tool
if m.e.aUtil = '' then do
call mapPut e, 'aUtilNm', ''
call mapPut e, 'aUtilCre', ''
end
else do
call mapPut e, 'aUtilNm', 'UPNAME ' m.e.aUtil' Y'
call mapPut e, 'aUtilCre', 'UPCRT ' mapGet(e, 'cacr')
end
call addIf o'.TWO'
call mapExpAll e, o'.TWO', skelStem('CAna')
call addIf o'.TWO', 'end'
call setIf o'.TWO', 'ANA', 0 4, 'POST'
call addIf o'.TWO'
end
if fun == 'IA' then do /* copy execute jcl */
call stepGroup
call mapExpAll e, o'.TWO', skelStem(left(m.e.tool, 1)'ECP')
old = stepGroup(11)
call mapPut e, 'fun', 'execute'
call mapExpAll e, o'.TWO', skelStem(m.jobcard)
call mAdd o'.TWO', '//* Zuegelschub' m.e.zuegelschub k,
, '//* analyse ' date(s) time() m.uNa ,
, '//* nachtrag ' m.e.nachtrag m.e.auf7 || m.e.nachtrag,
, '//* rename old unloads: TSO DBX' m.e.auf7||m.e.nachtrag,
"REN" mapGet(e, 'subsys')
call mapExpAll e, o'.TWO', skelStem(left(m.e.tool, 1)'Exe')
call mAdd o'.TWO', '}!'
call addIf o'.TWO', 'end'
call stepGroup old
call setIf o'.TWO', 'EXCP', 0 4
end
if fun == 'IE' then do /* add execute steps */
call mapExpAll e, o'.TWO', skelStem(left(m.e.tool, 1)'Exe')
call addIf o'.TWO', 'end'
call setIf o'.TWO', 'EXE', 0 4
end
return
endProcedure caImport
caImpRename: procedure expose m.
parse arg o, msk, nact, ddlIn, ddlOut
call addIf o
call mapPut e, 'rStry', m.e.auf7'#'
call mapPut e, 'ddlin', ddlIn
call mapPut e, 'ddlout', ddlOut
if m.o.ifLine == ''then
call mapPut e, 'endIf', '//* no endIf'
else
call mapPut e, 'endIf', '// ENDIF'
call mapExpAll e, o, skelStem('CREN')
call caGlbChg o, msk
call mAdd o,'// ENDIF' /* for if in skel dbxCRen */
call setIf o, 'RANA', 0 4
return
endProcedure caImpRename
stepGroup: procedure expose m.
parse arg f
old = m.e.stepNo
if f \== '' then
no = f
else
no = old + 1
m.e.stepNo = right(no, 3, 0)
m.e.stepGr = 'S'm.e.stepNo
call mapPut e, 'stp', m.e.stepGr
return old
endProcedure stepGroup
setIf: procedure expose m.
parse arg o, stp, codes
if stp == '' | m.e.tool = 'IBM' then
li = ''
else do
li = ''
do ax=2 by 2 to arg()
stp = arg(ax)
codes = arg(ax+1)
if length(stp) < 5 then
stp = m.e.stepGr || stp
li = li 'AND' stp'.RUN AND'
if codes == '' then
li = li stp'.RC=0'
else if words(codes) = 1 then
li = li stp'.RC='strip(codes)
else do
li = li '('stp'.RC='word(codes, 1)
do cx=2 to words(codes)
li = li 'OR' stp'.RC='word(codes,cx)
end
li = li')'
end
end
li = substr(li, 6)
end
m.o.ifLine = li
return
endProcedure setIf
addIf: procedure expose m.
parse arg o, opt, cond
if m.o.ifLine == '' & opt \== 1 then
return
else if opt == 'end' then
call mAdd o, '// ENDIF'
else do
pr = '// IF'
if cond == '' then
cond = m.o.ifLine
cond = space(cond, 1)
do while length(cond) > 53
ex = lastPos(' ', left(cond, 53))
call mAdd o, pr left(cond, ex-1)
cond = substr(cond, ex+1)
pr = left('//', length(pr))
end
call mAdd o, pr cond 'THEN'
end
return
endProcedure addIf
addJobError: procedure expose m.
parse arg o
if m.e.tool == ibm then
return
cond = m.o.ifLine
if cond = '' then
cond = 'RC=0'
call addIf o, 1, 'ABEND OR NOT (' cond ')'
call mAdd o, '//*** jobError: set CC to >= 12 ********************',
, '//JOBERROR EXEC PGM=IDCAMS ',
, '//SYSPRINT DD SYSOUT=*',
, '//SYSIN DD *',
, ' SET MAXCC = 12',
, '// ENDIF'
return
endProcedure addJobError
/*--- DSN für CDL des Nachtrags zurückgeben und auf Existenz prüfen---*/
cdlDsnCheck: procedure expose m.
parse arg nt
cdl = m.libPre'.'if(m.e.tool=='IBM', 'CDL', 'DDL') ,
|| '('m.e.auf7 || nt')'
if m.cdlDsnCheck.cdl == 1 then
return cdl
rr = sysDsn("'"cdl"'")
if rr <> 'OK' then
call err 'cdl fuer' nt'. Nachtrag fehlt:' cdl rr
m.cdlDsnCheck.cdl = 1
return cdl
endProcedure cdlDsnCheck
/*--- Date und user rechtsbuendig einfuegen --------------------------*/
addDateUs: procedure expose m.
parse arg le
return le right(date(s) time() m.uNa, 71-length(le))
endProcedure addDateUs "'"
/*--- den aktuellen Auftrag analysieren ------------------------------*/
analyseAuftrag: procedure expose m.
m.scopeSrc.0 = 0
m.scopeSrc.dbSy = m.pr1Sub
m.scopeSrc.rz = m.myRz
m.catSrc.0 = ''
m.scopeTrg.0 = 0
m.scopeTrg.dbSy = m.pr1Sub
m.scopeTrg.rz = m.myRz
m.catTrg.0 = ''
m.imp.seq = -1
m.nacImp = 0
m.e.cChgs = ''
m.e.comMask = ''
m.e.iChgs = ''
m.e.impMask = ''
m.e.iMap = 'ALLLALLL'
m.e.iRule = ''
m.e.impIgno = ''
m.e.tool = 'CA'
m.e.aModel = 'ALL'
m.e.aUtil = ''
m.e.keepTgt = 1
m.e.ddlOnly = 0
allImpSubs = ''
if m.auftrag.0 = 0 then
call err 'Auftrag ist leer'
vaWo = 'AUFTRAG'
varWo = 'ZUEGELSCHUB BESTELLER CCHGS COMMASK COMIGNO' ,
'ICHGS IMPMASK IMAP IRULE IMPIGNO' ,
'AMODEL AUTIL VP0 VP1 VP2 VP3 VP4 VPT VP16 VP17' ,
'KEEPTGT DBACHECK QCHECK CA BMC IBM DDLONLY'
ignWo = 'SW SENDWSL RECEIVEWSL RECEIVESOURCE'
ignCh = '*|'
lev1Wo = 'SCOPE SOURCE TARGET COMPARE VERSION IMPORT SENDTARGET' ,
varWo 'PROTOTYPERZ'
do lx=1 to m.auftrag.0
li = m.auftrag.lx
parse upper var li w1 w2 w3 .
if w1 = '' | pos(left(w1, 1), ignCh) > 0 ,
| wordPos(w1, ignWo) > 0 then
iterate
if wordPos(w1, vaWo) < 1 then
call err 'operation' w1 ', erwartet' vaWo 'in Zeile' lx li
w2 = translate(word(li, 2))
if w1 = 'AUFTRAG' then do
if w2 ^= m.auftrag.member then
call err 'auftrag' w2 '<> member' m.auftrag.member
m.e.auftrag = w2
m.e.auf7 = left(w2, 7)
m.e.nachtrag = '?'
m.nachtrag.0 = 0
if dataType(left(w3, 1), 'U') & length(w3) <= 8 then
ow = w3
else
ow = 'S100447'
call mapPut e, 'chgOwn', ow
vaWo = lev1Wo
end
else if abbrev(w1, 'VP') then do
call configureRZ , , substr(w1, 2)
end
else if wordPos(w1, 'CA BMC IBM') > 0 then do
m.e.tool = w1
end
else if wordPos(w1, varWo) > 0 then do
m.e.w1 = word(li, 2)
end
else if w1 = 'PROTOTYPERZ' then do /* alte syntax sep08 ??? */
m.scopeSrc.rz = word(li, 2)
end
else if wordPos(w1, 'SCOPE SOURCE TARGET') > 0 then do
suSy = ''
if w1 = 'SOURCE' then do
scp = 'SCOPESRC'
suSy = w2
end
else if w1 = 'TARGET' then do
scp = 'SCOPETRG'
if abbrev('EXPLICIT', w2, 2) then do
m.optAuto = 0
suSy = w3
end
else do
suSy = w2
if abbrev('EXPLICIT', w3, 2) then
m.optAuto = 0
end
end
else do /* alte syntax */
if abbrev('SOURCE', w2) then
scp = 'SCOPESRC'
else if abbrev('TARGET', w2) then
scp = 'SCOPETRG'
else
call err 'scope' w2 'nicht abk. von SOURCE TARGET',
'in Zeile' lx li
end
if (abbrev(suSy, 'DQ0') | abbrev(suSy, 'RZ1.DQ0')) ,
<> (m.libPre == 'DSN.DBQ') then
call err 'DBSys' suSy 'mit Auftrag in' m.libPre
m.scp.0 = 0
if pos('.', suSy) > 0 then
parse var suSy suRz '.' suSy
else if pos('/', suSy) > 0 then
parse var suSy suRz '/' suSy
else
suRZ = ''
if suSy <> '' then
m.scp.dbSy = suSy
if suRz <> '' then
m.scp.rz = suRz
vaWo = m.scopeTypes m.scopeType1 lev1Wo
call debug 'scope' scp m.scp.rz'.'m.scp.dbSy
end
else if wordPos(w1, m.scopeTypes m.scopeType1) > 0 then do
parse value analyseScope(li) with ty nm qu
if ty = '?' then
call err nm qu 'in scope line' lx':' strip(li)
aa = mAdd(scp, 'scope')
m.aa.type = ty
m.aa.qual = qu
m.aa.name = nm
end
else if wordPos(w1, 'COMPARE VERSION SENDTARGET') > 0 then do
if w1 = 'SENDTARGET' then
w2 = w3
cmpLast = abbrev(w2, '=')
w2 = strip(w2, 'l', '=')
if length(w2) <> 1 | pos(w2, m.nachtragChars) < 1 then
call err 'nachtrag' w2 'in Zeile' lx li
if pos(w2, m.nachtragChars) ,
< pos(m.e.nachtrag, m.nachtragChars) then
call err 'nachtrag' w2 '< vorherigem' m.e.nachtrag ,
'in Zeile' lx li
if m.e.nachtrag <> w2 then do
m.e.nachtrag = w2
nx = m.nachtrag.0 + 1
m.nachtrag.0 = nx
m.nachtrag.nx = w2
end
m.nachtrag.nx.fun = ''
m.nachtrag.nx.last = cmpLast
if pos(left(w1, 1), 'CV') > 0 then
m.nachtrag.nx.fun = left(w1, 1)
if abbrev(w3, "'") | verify(w3, '/.', 'm') < 1 then
t1 = m.myRz'/'m.pr1Sub
else
t1 = translate(w3, '/', '.')
m.nachtrag.nx.trg = t1
call debug 'nachtr' nx m.nachtrag.nx 'trg' m.nachtrag.nx.trg
m.nacImp = (w1 <> 'COMPARE')
end
else if w1 = 'IMPORT' then do
parse upper var li . dbSy nachAll chg .
dbSy = translate(dbSy, '/', '.')
if pos('/', dbSy) < 1 then
dbSy = 'RZ1/'dbSy
parse var chg chgAuf '.' chgNac '.' chgSeq '.' chgImp
aa = m.e.auftrag
if chgAuf = aa then do
if left(chgNac, 1) <> left(nachAll, 1) then
call err 'Nachtrag von mismatch in Zeile' lx li
if right(chgNac, 1) <> right(nachAll, 1) then
call err 'Nachtrag bis mismatch in Zeile' lx li
end
else if abbrev(chgAuf, aa) ,
& substr(chgAuf, length(aa)+4, 1) == '_' then do
chgSeq = substr(chgAuf, length(aa)+1, 3)
end
else
call err 'Auftrag mismatch in Zeile' lx li
if chgSeq <= m.imp.seq then
call err 'seq' chgSeq 'nicht > letzte' m.imp.seq,
'in Zeile' lx li
m.nacImp = 1
m.imp.last = dbSy
m.imp.dbSy.nachtrag = nachAll
if wordPos(dbSy, allImpSubs) < 1 then do
allImpSubs = allImpSubs dbSy
m.imp.dbSy.nachTop = left(nachAll, 1)
end
do nx=length(nachAll) by -1 to 1
if pos(substr(nachAll, nx, 1), m.nachtragChars) ,
> pos(m.imp.dbSy.nachTop , m.nachtragChars) then
m.imp.dbSy.nachTop = substr(nachAll, nx, 1)
end
m.imp.dbSy.change = chg
m.imp.seq = chgSeq
end
else do
call err 'ungültiger Operator' w1 'in Zeile' lx':' strip(li)
end
end
m.e.keepTgt = m.e.keepTgt == 1
m.promPath = abbrev(m.e.auftrag, 'XB') + 1
if m.e.ddlOnly == '' | m.e.ddlOnly == 1 then
m.e.ddlOnly = ''
else
m.e.ddlOnly = 'UNLOAD'
if m.e.cChgs == '' then
m.e.cChgs = dsnGetMbr(m.e.comMask)
else if m.e.comMask == '' then
m.e.comMask = m.libPre'.MASK('m.e.cChgs')'
if m.e.iChgs == '' then
m.e.iChgs = dsnGetMbr(m.e.impMask)
else if m.e.impMask == '' then
m.e.impMask = m.libPre'.MASK('m.e.iChgs')'
if m.e.iRule == '' then
m.e.iRule = dsnGetMbr(m.e.impIgno)
else if m.e.impIgno == '' then
m.e.impIgno = m.libPre'.MASK('m.e.iRule')'
call mapPut e, 'aModel', translate(m.e.aModel)
m.targets = ''
m.compares = ''
m.versions = ''
drop cmpLast
m.cmpLast = 0
call mapPut e, 'tool', strip(m.e.tool m.e.toolVers)
do nx=1 to m.nachtrag.0
m.cmpLast = m.cmpLast | m.nachtrag.nx.last
if wordPos(m.nachtrag.nx.trg, m.targets) < 1 then
m.targets = m.targets m.nachtrag.nx.trg
if m.nachtrag.nx.fun = 'C' then
m.compares = m.compares || m.nachtrag.nx
if m.nachtrag.nx.fun = 'V' then
m.versions = m.versions || m.nachtrag.nx
call debug 'nachtrag' nx m.nachtrag.nx 'trg' m.nachtrag.nx.trg,
'all' m.targets 'fun' ,
m.nachtrag.nx.fun 'com' m.compares 'ver' m.versions,
'cmpLast' m.cmpLast
end
if 0 & abbrev(m.scopeSrc.dbSy, 'DQ0') then
call configureRz , '915 P0'
if 0 then do
say 'auftrag ' m.e.auftrag m.e.nachtrag mapGet(e, 'chgOwn')
say ' comMask ' m.e.comMask
say ' comIgno ' m.e.comIgno
say ' impMask ' m.e.impMask
say ' impIgno ' m.e.impIgno
scp = 'SCOPESRC'
drop dbSy
say ' scope ' m.scp.0 m.scp.dbSy ,
' target ' m.scopeTrg.0 m.scopeTrg.dbSy
do sx=1 to m.scp.0
say ' ' m.scp.sx.type m.scp.sx.qual'.'m.scp.sx.name
end
end
call bmcVars
return
endProcedure analyseAuftrag
/*--- eine Scope Zeile analysieren -----------------------------------*/
analyseScope: procedure expose m.
parse arg li
parse upper var li ty w1 rest
if wordPos(ty, m.scopeType1) > 0 then
ty = word(m.scopeTypes, wordPos(ty, m.scopeType1))
if wordPos(ty, m.scopeTypes) < 1 then
return '?'
cx = pos('.', w1)
if cx < 1 then do
qu = w1
end
else do
qu =strip(left(w1, cx-1))
rest = substr(w1, cx) rest
end
if qu = '' then
return '? leerer Qualifier'
if ty = 'DB' then
return ty qu
if left(rest, 1) = '.' then
rest = substr(rest, 2)
nm = word(rest, 1)
if nm = '' then
return '? leerer Name'
return ty nm qu
endProcedure analyseScope
/*--- jcl generieren um Src und Trg Version und DDL zu extrahieren ---*/
extractSrcTrg: procedure expose m.
parse arg o, xx, oldSrc mbrLast
call configureDbSy m.scopeSrc.rz, m.scopeSrc.dbSy
call mapPut e, 'auto', xx'AUTO'
call mapPut e, 'src', xx'SRC'
call mapPut e, 'trg', xx'TRG'
mbrNac = mapGet(e, 'mbrNac')
call mapPut e, 'what', xx'SRC'
if ^ oldSrc then do
call extractScopeVersion o, xx, 'SRC'
end
else if mbrNac <> mbrLast then do
pr = m.libPre'.'xx'SRC'
call copyDsn pr'DDL('mbrLast')', pr'DDL('mbrNac')', 1
call copyDsn pr'CAT('mbrLast')', pr'CAT('mbrNac')', 1
end
call configureDbSy m.scopeTrg.rz, m.scopeTrg.dbSy
call mapPut e, 'what', xx'TRG'
if m.optAuto then do
call mapExpAll e, o, skelStem('AutMa')
if m.sysRz = m.scopeTrg.rz then do
call mapExpAll e, o, skelStem('AutEx')
end
else do
mbrN = mapGet(e, 'mbrNac')
mark = mbrN'@'time()
autD = mapExp(e, '${libPre}.$auto($mbrNac)')
cf = mapExp(e, '${libPre}.SENDCF($mbrNac)')
sndIn = sendJob1(o, m.scopeTrg.rz, 'RECTRG',
, 'send' autD ,
, 'job -ddJob' m.timeout'//??' cf mark ,
, 'receive' mapExp(e, '${libPre}.${what}DDL($mbrNac)') ,
, 'receive' mapExp(e, '${libPre}.${what}CAT($mbrNac)') )
call mapExpAll e, o, skelStem('AutEx')
call sendJob2 o, sndIn, cf mark
end
end
else do
call extractScopeVersion o, xx, 'TRG'
end
return
endProcedure extractSrcTrg
/*--- Version + DDL zu extrahieren -----------------------------------*/
extractScopeVersion: procedure expose m.
parse arg o, ty, what
scp = 'SCOPE'what
/* say m.scp.rz 'scp' scp */
if m.sysRz = m.scp.rz then do
call extractVersionStep o, ty, what
end
else do
mbrN = mapGet(e, 'mbrNac')
mark = mbrN'@'time()
cf = mapExp(e, '${libPre}.SENDCF($mbrNac)')
sndIn = sendJob1(o, m.scp.rz, 'REC'what,
, 'job -ddJob' m.timeout'//??' cf mark ,
, 'receive' mapExp(e, '${libPre}.${what}DDL($mbrNac)') ,
, 'receive' mapExp(e, '${libPre}.${what}CAT($mbrNac)') )
call extractVersionStep o, ty, what
call sendJob2 o, sndIn, cf mark
end
return
endProcedure extractScopeVersion
/*--- einen Step um Version + DDL zu extrahieren ---------------------*/
extractVersionStep: procedure expose m.
parse arg o, ty, what
scp = 'SCOPE'what
call mapPut e, 'what', ty || what
i = skelStem('ExVe')
sto = mapExpAllAt(e, o, i, 1, 1)
do while sto ^== ''
parse var sto lx cx
w = word(substr(m.i.lx, cx), 1)
if w == '$@scope' then do
if ty == '' then do
do sx=1 to m.scp.0
sn = scp'.'sx
if wordPos(m.sn.type, 'UDT UDF') > 0 then do
t = "SCH = '"m.sn.qual"', " ,
m.sn.type "= '"m.sn.name"';"
end
else do
t = "TYPE = '"m.sn.type"',"
if m.sn.type <> 'DB' then
t = t "QUAL = '"m.sn.qual"',"
t = t "NAME = '"m.sn.name"'"
if m.sn.type = 'SP' then
t = t", VERSION='%'"
t = t';'
end
if length(t) < 30 then do
call mAdd o, ' ' t
end
else do
cx = lastPos(',', t)
call mAdd o, ' ' left(t, cx),
, ' ' substr(t, cx+1)
end
end
end
else if ty == 'DB' then do
c = getDb2Catalog(what)
do x=1 to m.c.0
d1 = m.c.x.db
if db.d1 == 1 then
iterate
db.d1 = 1
call mAdd o, " TYPE = 'DB,' NAME = '"d1"';"
end
end
else
call err 'extractVersionStep bad ty' ty
end
else do
call err 'implement stop' sto 'word' w 'in line' lx m.i.lx
end
sto = mapExpAllAt(e, o, i, lx, cx + length(w))
end
return
endProcedure extractVersionStep
/*--- create jcl to copy one member to rz toRz and library toLib -----*/
copyMbr: procedure expose m.
parse arg o, mbr, frLib, toRz, toLib
call mapPut e, 'mbr', mbr
call mapPut e, 'frLib', dsnSetMbr(frLib)
call mapPut e, 'toRz', toRz
call mapPut e, 'toLib', dsnSetMbr(toLib)
call addIf o
call mapExpAll e, o, skelStem(if(toRz = m.sysRz, 'cMbr', 'sMbr'))
call addIf o, 'end'
call setIf o, 'COPY', 0
return
endProcedure copyMbr
/*--- add jcl to stem o to send a job to rz toRz with stepname step
and add the remaining arguments as sendJob statements
afterwards the caller must add the jcl and call sendJob2 ----*/
sendJob1: procedure expose m.
parse arg o, toRz, step
oldRz = m.myRz
call configureRz toRz
call mapPut e, 'step', step
call mapExpAll e, o, skelStem('SendJ')
do ax=4 to arg()
aa = arg(ax)
call debug 'sendJob1 le' length(aa) aa'|'
sx = 0
do forever
sy = sx
sx = pos(';', aa, sy+1)
if sx = 0 then
leave
call mAdd o, substr(aa,sy+1, sx-sy-1)
end
call mAdd o, substr(aa, sy+1) left('-', (ax < arg()))
end
call mAdd o, '//DDJOB DD *'
stReX = m.o.0+1
call mapPut e, 'jobName', 'Y'm.e.auf7
call mapPut e, 'fun', 'extract data from' toRz
call mapExpAll e, o, skelStem(m.jobCard)
return oldRz stReX
endProcedure sendJob1
/*--- add the mark step to the job, translate leading // to ??
and switch back to original rz -----------------------------*/
sendJob2: procedure expose m.
parse arg o, oldRz stReX, cfMark
if cfMark ^= '' then do
call mAdd o, '// IF NOT ABEND' ,
'AND RC >= 0 AND RC <= 4 THEN'
call mapPut e, 'step', 'MARKOK'
call mapExpAll e, o, skelStem('SendJ')
call mAdd o, 'mark' cfMark 'okRc0'
call mAdd o, '// ELSE'
call mapPut e, 'step', 'MARKERR'
call mapExpAll e, o, skelStem('SendJ')
call mAdd o, 'mark' cfMark 'badRcOrAbend'
call mAdd o, '// ENDIF'
end
do ox = stReX to m.o.0
if abbrev(m.o.ox, '//') then
m.o.ox = overlay('??', m.o.ox)
end
call configureRz oldRz
return
endProcedure sendJob2
/*--- return Stem fuer die CatalogInfo für Src oder Trg
falls noetig aus Db2Catalog einlesen -----------------------*/
getDb2Catalog: procedure expose m.
parse arg wh
st = 'CAT'wh
if datatype(m.st.0, n) then
return st
else if m.st.0 ^== '' then
call err 'getDb2Catalog('wh') bad value m.'st'.0' m.st.0
scp = 'SCOPE'wh
if m.sysRz = m.scp.rz then
call sqlConnect m.scp.dbSy
else
call sqlConnect m.scp.rz'/'m.scp.dbSy
call queryDb2Catalog st, wh
m.v9.0 = 0
call queryDb2V9 st, 'V9'
return st
endProcedure getDb2Catalog
/*--- Information aus Db2Catalog fuer einen Scope einlesen -----------*/
queryDb2Catalog: procedure expose m.
parse arg st, what
scp = 'SCOPE'what
/* m.scopeTypes = 'DB TS TB VW IX AL' */
ts = ''
tb = ''
ix = ''
unQueried = 0
do sx=1 to m.scp.0
sn = scp'.'sx
t = " TYPE = '"m.sn.type"',"
if m.sn.type <> 'DB' then
t = t "QUAL = '"m.sn.qual"',"
t = t "NAME = '"m.sn.name"';"
call debug 'queryDb2Catalog' sx t
if m.sn.type = 'DB' then
ts = ts 'or s.dbName' sqlClause(m.sn.name)
else if m.sn.Type = 'TS' then
ts = ts 'or (s.dbName' sqlClause(m.sn.qual) ,
'and s.name' sqlClause(m.sn.name)')'
else if m.sn.Type = 'TB' then
tb = tb 'or (t.creator' sqlClause(m.sn.qual) ,
'and t.name' sqlClause(m.sn.name)')'
else if m.sn.Type = 'IX' then
ix = ix 'or (x.creator' sqlClause(m.sn.qual) ,
'and x.name' sqlClause(m.sn.name)')'
else
unQueried = unQueried + 1
end
sel = 'select s.dbName db, s.name ts , s.type, ',
's.partitions, s.segSize, s.log, ',
't.creator cr, t.name tb,' ,
't.status tbSta, t.tableStatus tbTbSta',
'from sysibm.sysTableSpace S, sysibm.sysTables T'
wh = "where s.dbName = t.dbName and s.name = t.tsName",
"and t.type = 'T'"
sql = ''
if ts <> '' then
sql = sql 'union' sel wh 'and ('substr(ts, 5)')'
call debug 'ts sql' sql
if tb <> '' then
sql = sql 'union' sel wh 'and ('substr(tb, 5)')'
call debug 'tb sql' sql
if ix <> '' then
sql = sql 'union' sel ', SYSIBM.SYSINDEXES X',
wh 'and t.creator=x.tbCreator and t.name=x.tbName',
'and ('substr(ix, 5)')'
call debug 'ix sql' sql
if sql = '' then do
m.st.0 = 0
if unQueried < 1 then
say 'nothing specified in source scope'
return 0
end
drop db ts cr tb type
call sql2St substr(sql, 8), st
if m.debug == 1 then do
say m.st.0
do sx = 1 to m.st.0
say strip(m.st.sx.db)'.'strip(m.st.sx.ts) m.st.sx.type ,
m.st.sx.partitions m.st.sx.segSize
end
end
return m.st.0
endProcedure queryDb2Catalog
/*--- haben wir schon DB2 V9 Objekte ? -------------------------------*/
queryDb2V9: procedure expose m.
trace ?r
parse arg sc, vv
m.vv.0 = 0
wh =''
do x = 1 to m.sc.0
wh = wh "or (cr='"m.sc.x.cr"' and tb='"m.sc.x.tb"')"
end
if wh == '' then
return 0
return sql2st("select tp,nm,v9",
"from s100447.db2v9",
"where V9 <> '' and (" substr(wh, 5) ")",
"order by cr,tb,cl", vv)
endProcedure queryDb2V9
/*--- Qualitaets Pruefung fuer CatalogInfo Stem c --------------------*/
removeQualityCheck: procedure expose m.
parse arg c
if m.libPre <> 'DSN.DBQ' then
call maskIni
o = 'AUFTRAG'
m.o.orig = 'rmQu' m.o.orig
m.spezialFall.done = ''
aufOld = m.o.0
do x=1 to m.c.0
vDb = strip(m.c.x.db)
n = '|| db' vDb
if d.n ^== 1 then do
d.n = 1
call spezialfall vDb, substr(n, 4)
end
n = '|| ts' vDb'.'strip(m.c.x.ts)
if d.n ^== 1 then do
d.n = 1
call spezialfall vDb, substr(n, 4)
if m.c.x.log <> 'Y' then
call mAdd o, n 'not logged'
if m.c.x.partitions > 0 then
nop
else if m.c.x.segSize = 0 then
call mAdd o, n 'simple TS'
end
n = '|| tb' strip(m.c.x.cr)'.'strip(m.c.x.tb)
if d.n ^== 1 then do
d.n = 1
call spezialfall vDb, substr(n, 4)
if m.c.x.tbTbSta = 'L' then
call mAdd o, n 'auxilary index oder table fehlt'
else if m.c.x.tbTbSta = 'P' then
call mAdd o, n 'primary index fehlt'
else if m.c.x.tbTbSta = 'R' then
call mAdd o, n 'index auf Row ID fehlt'
else if m.c.x.tbTbSta = 'U' then
call mAdd o, n 'index auf unique key fehlt'
else if m.c.x.tbTbSta = 'V' then
call mAdd o, n 'Regenerierung interne ViewDarstellung'
else if m.c.x.tbTbSta ^= '' then
call mAdd o, n 'TableStatus' m.c.x.tbTbSta 'unbekannt'
end
end
do vx=1 to m.v9.0
call mAdd o, '|| V9' m.v9.vx.tp left(m.v9.vx.nm, 30) ,
left(m.v9.vx.v9, 30)
end
return aufOld < m.o.0
endProcedure removeQualityCheck
/*--- Qualitaets Pruefung mittels ddlCheck ---------------------------*/
qualityCheck: procedure expose m.
parse arg x, y
m.spezialFall.done = ''
lst = ''
scp = 'SCOPESRC'
o = 'AUFTRAG'
do sx=1 to m.scp.0
sn = scp'.'sx
if m.sn.type = 'DB' then
f1 = 'db:'m.sn.name
else if m.sn.Type = 'TS' then
f1 = 'ts:'m.sn.qual'.'m.sn.name
else if m.sn.Type = 'TB' then
f1 = 't:'m.sn.qual'.'m.sn.name
else if m.sn.Type = 'VW' then
f1 = 'v:'m.sn.qual'.'m.sn.name
else if m.sn.Type = 'IX' then
f1 = 'i:'m.sn.qual'.'m.sn.name
else
iterate
f1 = space(f1, 0)
if wordPos(f1, lst) > 0 then
iterate
lst = lst f1
end
m.o.orig = 'rmQu' m.o.orig
if lst = '' then do
say 'qualitycheck no objects to check'
call mAdd o, '|| qualitycheck no objects to check'
return 0
end
qDsn = m.libPre'.QUALITY('mapGet(e, 'mbrNac')')'
cRes = ddlCheck('CHECK' qDsn x y lst)
call splitNl cr, cRes, cr
cr1 = substr(m.cr.1, 4)','
if pos('\n', cRes) > 0 then
cr1 = left(cRes, pos('\n', cRes)-1)','
else
cr1 = cRes','
res = pos('q,', cr1) > 0 | pos('*sb,', cr1) > 0 ,
| pos('*p', cr1) > 0 | pos('*n,', cr1) > 0
if \ res then do /* add new | lines to auftrag */
call mAdd o, '|| qualitycheck ok:' substr(m.cr.1, 4)
end
else do
call mAdd o, '|| qualitycheck:' substr(m.cr.1, 4)
call mAddSt o, cr, 2
end
return res
endProcedure qualityCheck
/*--- für jedes Objekt aus Source Scope Eintrage in der
Spezialfall Library suchen und falls vorhanden anzeigen --------*/
removeSspezialFall: procedure expose m. --> ddlCheck
parse upper arg db, typ qua '.' nam
if m.libPre = 'DSN.DBQ' then
return
pDb = mask2prod('DBNAME', db)
if (typ = 'DB' | typ = 'TS') & db <> qua then
call err 'db mismatch spezialFall('db',' typ qua'.'nam')'
if typ = 'DB' then
srch = typ pDb'.'
else if typ = 'TS' then
srch = typ pDb'.'mask2prod('TSNAME', nam)
else if typ = 'TB' then
srch = typ mask2prod('TBOWNER', qua)'.'mask2prod('TBNAME', nam)
else
call err 'bad typ' typ
st = spezialFall'.'pDb
if symbol('m.st.0') <> 'VAR' then do
dsn = m.libSpezial"("pDb")"
sy = sysDsn("'"dsn"'")
if sy <> 'OK' then do
m.st.0 = 0
if sy <> 'MEMBER NOT FOUND' then
call err 'spezialFall library' dsn':' sy
end
else do
call readDsn dsn, 'M.SPEZIALFALL.'pDB'.'
end
end
if m.st.0 < 1 then
return
offs = 999
found = 0
do sx = 1 to m.st.0
fx = verify(m.st.sx, ' ')
if fx = 0 | fx > 72 then
iterate
if substr(m.st.sx, fx, 1) = '*' then
iterate
if fx <= offs then do
offs = fx
m.st.sx = left(m.st.sx, 72)
n = ''
if pos('.', m.st.sx) > 0 then
parse upper var m.st.sx t q '.' n .
else
parse upper var m.st.sx t q .
if wordPos(t, 'DB TS TB') < 1 then
call err 'spezialFall' pDb 'line' sx 'ungueltig:' m.st.sx
found = match(srch, t strip(q)'.'strip(n)) ,
& ^ (wordPos(pDb'.'sx, m.spezialFall.done) > 0)
if found then
m.spezialFall.done = m.spezialFall.done pDb'.'sx
end
if found then
call mAdd auftrag, '|-' left(m.st.sx, 78)
end
return
endProcedure removeSpezialFall
/*--- mask handling initialise ---------------------------------------*/
removemaskIni: procedure expose m.
call maskHierarchy
call maskRead mask.prot, m.libPre'.MASK(PROTDBAF)'
call maskRead mask.dbof, m.libPre'.MASK(DBAFDBOF)'
return
endProcedure maskIni
/*--- mask a whole scope --------------------------------------------*/
removemaskScope: procedure expose m.
parse arg mskDsn, fr, to
call maskRead masc, mskDsn
do fx=1 to m.fr.0
ty = m.fr.fx.type
m.to.fx.type = ty
if wordPos(ty, 'DB SG') > 0 then
m.to.fx.qual = ''
else if wordPos(ty, 'TS') > 0 then
m.to.fx.qual = maskTrans(masc, 'DBNAME', m.fr.fx.qual)
else
m.to.fx.qual = maskTrans(masc, 'SCHEMA', m.fr.fx.qual)
if wordPos(ty, 'DB') > 0 then
m.to.fx.name = maskTrans(masc, 'DBNAME', m.fr.fx.name)
else if wordPos(ty, 'TB VW AL') > 0 then
m.to.fx.name = maskTrans(masc, 'TBNAME', m.fr.fx.name)
else if wordPos(ty, 'SP') > 0 then
m.to.fx.name = maskTrans(masc, 'STPNAME', m.fr.fx.name)
else
m.to.fx.name = maskTrans(masc, ty'NAME', m.fr.fx.name)
end
m.to.0 = m.fr.0
return
endProcedure maskScope
/*--- mask test functions --------------------------------------------*/
removetestMask: procedure expose m.
call maskIni
call maskTT OWNER, GDB9998
call maskTT DBNAME, DGDB9998
call maskTT DBNAME, DGDB0287
call maskTT OWNER, GDB0301
call maskTT TSNAME, AGRFX12A2
call maskTT OWNER, SYS123EF
return 0
endProcedure testMask
removeMaskTT: procedure expose m.
parse arg ty, na
say 'maskTrans(prot,' ty',' na') =' maskTrans(mask.prot, ty, na) ,
' -> DBOF' maskTrans(mask.dbof, ty, maskTrans(mask.prot,ty,na))
return
/*--- translate a prototype object to DBOF naming -------------------*/
removemask2Prod: procedure expose m.
parse arg ty, na
return translate(strip(,
maskTrans(mask.dbof, ty, maskTrans(mask.prot,ty,na))))
/*--- translate an object of type ty and name na
by the masking file in st --------------------------------*/
removemaskTrans: procedure expose m.
parse arg st, ty, na
if symbol('m.mask.hier.ty') <> 'VAR' then
call err 'bad type' ty
types = m.mask.hier.ty
do sx=1 to m.st.0
if wordPos(m.st.sx.typ, types) < 1 then
iterate
if match(na, m.st.sx.in, vv) then
return matchTrans(m.st.sx.out, vv)
end
return na
endProcedure maskTrans
/*--- read and analyse the masking file dsn into stem st ------------*/
removemaskRead: procedure expose m.
parse arg st, dsn
maskIgno = 'COMPRESS SEGSIZE DEFER DEFINE PRIQTY SECQTY'
call readDsn dsn, i.
j = 0
do i=1 to i.0
parse var i.i t ':' s ',' d
t = strip(t)
if symbol('m.mask.hier.t') == 'VAR' then
nop
else if wordPos(t, maskIgno) > 0 then
iterate
else
call err 'bad typ' t 'in maskline' i':' i.i
j = j+1
m.st.j.typ = t
m.st.j.in = strip(s)
m.st.j.out = word(d, 1)
end
m.st.0 = j
return
drop typ in out
do wx=1 to m.st.0
say wx m.st.wx.typ':' m.st.wx.in'==>'m.st.wx.out'|'
end
endProcedure maskRead
/*--- initialise the type hierarchy of masking
as input use the msgLines of the mask editor --------------*/
removemaskHierarchy: procedure expose m.
/* copy der hierarch aus masking template */
call mAdd mCut('T', 0) ,
, 'COLNAME ' ,
, 'NAME ' ,
, ' DBNAME,TSNAME,TBNAME,IXNAME,UDFNAME, ' ,
, ' UDTNAME,COLLNAME,PKGNAME,PGMNAME,PLNNAME ' ,
, ' DBRMNAME,STPNAME,SFNAME,TGNAME,GRPNAME, ' ,
, ' VCATNAME,GBPNAME ' ,
, ' BPNAME ' ,
, ' TSBPNAME,IXBPNAME ' ,
, ' SGNAME ' ,
, ' TSSGNAME,IXSGNAME ' ,
, 'AUTHID ' ,
, ' SQLID,SCHEMA ' ,
, ' OWNER ' ,
, ' DBOWNER,TSOWNER,TBOWNER,IXOWNER ' ,
, ' GRANTID ' ,
, ' GRANTOR,GRANTEE '
qx = 0
lOff = -1
m.mask.hier = ''
do x=1 to m.t.0
of = verify(m.t.x, ' ', 'n')
li = translate(m.t.x, ' ', ',')
do while qx > 0 & word(q.qx, 1) >= of
qx = qx -1
end
px = qx - 1
if (qx = 0 | of > word(q.qx, 1)) & words(li) = 1 then do
px = qx
qx = qx + 1
if qx = 1 then
q.qx = of word(li, 1)
else
q.qx = of word(li, 1) subword(q.px, 2)
end
do wx=1 to words(li)
w1 = word(li, wx)
m.mask.hier = m.mask.hier w1
if wordPos(w1, subWord(q.qx, 2)) < 1 then
m.mask.hier.w1 = w1 subWord(q.qx, 2)
else
m.mask.hier.w1 = subWord(q.qx, 2)
end
end
return
endProcedure maskHierarchy
/*--- Funktion q: scope Zeilen pruefen -------------------------------*/
queryScope: procedure expose m.
parse arg dbSy
subs2 = ''
rf = 1
isConn = 0
if adrEdit('(rl) = lineNum .zl', 4) = 4 then
rl = 0
if ^ m.editMacro then
call err 'q nicht als Macro'
if ^ m.editProc then do
if adrEdit('PROCESS RANGE Q', 0 4) = 0 then do
call adrEdit '(rf) = lineNum .zfrange'
call adrEdit '(rl) = lineNum .zlrange'
end
m.editProc = 1
end
do rx = rf by 1 while rx <= rl
call adrEdit '(li) = line' rx
parse value analyseScope(li) with ty nm qu
if ty = '?' then do
if nm <> '' then
say nm qu 'in line' rx':' strip(li)
if \ isConn & dbSy == '' then do
parse upper var li w1 w2 .
if wordpos(w1, 'SOURCE TARGET') > 0 then do
if length(w2) = 4 | ( length(w2) = 8 ,
& pos(substr(w2,4,1), './') > 0) then
subs2 = translate(w2, '/', '.')
end
end
iterate
end
if \ isConn then do
isConn = 1
if dbSy = '' then
dbSy = if(subs2 == '', m.pr1Sub, subs2)
dbSy = translate(dbSy, '/', '.')
if abbrev(dbSy, m.sysRz'/') then
dbSy = substr(dbSy, 5)
call sqlConnect dbSy
dbSy = translate(dbSy, m.ut.alfLC, m.ut.alfUC)
end
call expandScope mCut(qq, 0), ty, qu, nm
do qx=1 to m.qq.0
neu = m.qq.qx
if length(neu dbSy) < 70 then
neu = left(neu, 68 - length(dbSy)) '*'dbSy
else if length(neu dbSy) < 80 then
neu = neu '*'dbSy
liCm = if(qx=1, "line" rx, "line_after" (rx+qx-2))
if adrEdit(liCm "= (neu)", 4) = 4 then
say 'truncation line' rx':' neu
end
rx = rx + m.qq.0 - 1
rl = rl + m.qq.0 - 1
end
call sqlDisConnect
return 0
endProcedure queryScope
/*--- einen Scope Ausdruck expandieren -------------------------------*/
expandScope: procedure expose m.
parse arg o, ty, qu, nm
sql = ''
dec2s = "strip(case when abs(?) > 9223372036854775807",
"then char(real(?)) else char(bigint(?)) end)"
if ty = 'DB' then
sql = "select 'db', name, '' from sysibm.sysDatabase",
"where name" sqlClause(nm)
else if ty = 'TS' then
sql = "select 'ts', strip(dbName) || '.' || strip(tsName)," ,
"case when count(*) = 1 then 'tb '" ,
"else strip(char(count(*))) || ' tables||| '",
"end || min(strip(creator) ||'.'|| strip(name))",
"from sysibm.systables" ,
"where type = 'T' and dbName" sqlClause(qu),
"and tsName" sqlClause(nm),
"group by dbName, tsName"
else if ty = 'TB' | ty = 'VW' | ty = 'AL' then
sql = "select case when type = 'T' then 'tb'",
"when type = 'V' then 'vw'",
"when type = 'A' then 'al'",
"else '?' || type end,",
"strip(creator) || '.' || strip(name),",
"case when type = 'A' then 'for '",
"|| strip(location) || '.'" ,
"|| strip(tbCreator)||'.'||strip(tbName)",
"else 'ts ' || strip(dbName) ||'.'",
"|| strip(tsName)",
"end",
"from sysibm.systables" ,
"where type =" quote(left(ty, 1), "'"),
"and creator" sqlClause(qu),
"and name" sqlClause(nm)
else if ty = 'IX' then
sql = "select 'ix', strip(creator) || '.' || strip(name),",
"'tb ' || strip(tbCreator)||'.'||strip(tbName)",
'from sysibm.sysIndexes' ,
'where creator' sqlClause(qu),
'and name' sqlClause(nm)
else if ty = 'UDT' then
sql = "select 'udt', strip(schema) || '.' || strip(name),",
"'source ' || strip(sourceSchema)",
"|| '.' || strip(sourceType)",
"from sysibm.sysDataTypes",
'where schema' sqlClause(qu),
'and name' sqlClause(nm)
else if ty = 'UDF' | ty = 'SP' then
sql = "select case when routineType = 'F' then 'udf'",
"when routineType = 'P' then 'sp'",
"else '?' || routineType end, ",
"strip(schema) || '.' || strip(name),",
"'otp=' || origin || function_type" ,
"|| strip(char(parm_count))",
"|| ' spec=' || strip(specificName)",
"|| ' a=' || active || ' vers=' || version",
"from sysibm.sysRoutines",
'where routineType =' quote(right(ty, 1), "'"),
'and schema' sqlClause(qu) ,
'and name' sqlClause(nm)
else if ty = 'TG' then
sql = "select 'tg', strip(schema) || '.' || strip(name),",
"'teg ' || trigTime || trigEvent||granularity",
"|| ' tb ' || strip(tbOwner) || '.'",
"|| strip(tbName)",
"from sysibm.sysTriggers",
'where schema' sqlClause(qu),
'and name' sqlClause(nm)
else if ty = 'SQ' then
sql = "select 'sq', strip(schema) || '.' || strip(name),",
"'start ' ||" repAll(dec2s, "?", "start"),
"|| ': ' ||" repAll(dec2s, "?", "minValue"),
"|| '-' ||" repAll(dec2s, "?", "maxValue"),
"|| ' inc ' ||" repAll(dec2s, "?", "increment"),
"from sysibm.sysSequences",
"where seqType='S' and schema" sqlClause(qu),
"and name" sqlClause(nm)
else if ty = 'SY' then
sql = "select 'sy', strip(creator) || '.' || strip(name),",
"'for ' || strip(tbCreator) || '.'" ,
"||strip(tbName)",
"from sysibm.sysSynonyms",
"where creator" sqlClause(qu),
"and name" sqlClause(nm)
else do
call mAdd o, ty left(qu'.'nm, 30) '* query nicht implementiert'
return
end
call sqlQuery 1, sql 'order by 2', ,
, classNew('n* SQL u f FT v, f FN v, f FI v')
do cx=0 by 1 while sqlFetch(1, d)
call mAdd o, lefA(m.d.ft, 3) lefA(m.d.fn, 30) m.d.fi
end
call sqlClose 1
if cx = 0 then
call mAdd o, lefA(ty, 3) lefA(strip(qu)left('.', qu \== '') ,
|| strip(nm), 30) '* nicht gefunden'
return
endProcedure expandScope
/*--- return sql condition (= String oder like String) ---------------*/
sqlClause: procedure expose m.
parse arg val
val = translate(val, '%_', '*?')
if verify(val, '%_', 'm') > 0 then
return 'like' quote(val, "'")
else
return '=' quote(val, "'")
endProcedure sqlClause
lefA: procedure expose m.
parse arg s, len
if length(s) < len then
return left(s, len)
else
return s
endProcedure lefA
/*--- copy srcDdl und srcCat aus anderem rz --------------------------*/
receiveSource: procedure expose m.
parse arg rz
if rz = '' | rz = '*' | rz = m.myRz then
call err 'rs receiveSource mit ungueltigem rz' rz
call readAuftrag rz, m.auftrag.dataset, m.e.auftrag
call analyseAuftrag
if m.e.nachtrag = '?' then
call err 'keine Version in Auftrag' m.e.auftrag 'im' rz
nacMbr = m.e.auf7 || m.e.nachtrag
call csmCopy rz'/'m.libPre'.srcDdl('nacMbr')', m.libPre'.'rz'DDL'
call csmCopy rz'/'m.libPre'.srcCat('nacMbr')', m.libPre'.'rz'Cat'
call readAuftrag , m.auftrag.dataset, m.auftrag
call mAdd auftrag, addDateUs('receiveSource' rz,
m.libPre'.'rz'Cat('nacMbr')')
return
endProcedure receiveSource
/*--- copy wsl aus anderem rz ----------------------------------------*/
receiveWSL: procedure expose m.
parse arg rz
if rz = m.myRz then
rz = ''
call analyseAuftrag
sWsl = 'dsn.dba.clon.wsl('m.e.auf7'Q)'
sIff = 'dsn.dba.'m.e.auf7'Q.IFF'
if rz <> '' then do
call csmCopy rz'/'sWsl, sWsl
if adrCsm("dslist SYSTEM("rz") DSNMASK('"sIff"') SHORT", 4) = 0,
& stemSize = 1 then
call csmCopy rz'/'sIff, sIff
else
say 'iff existiert nicht im' rz
end
call cloneWsl '', m.e.auftrag, 1
call mAdd auftrag, addDateUs('receiveWSL' rz)
return
endProcedure receiveWSL
/*--- send wsl to the argument rz ------------------------------------*/
sendWSL: procedure expose m.
parse arg rz
if rz = m.myRz then
rz = ''
call analyseAuftrag
if m.versions = '' | m.compares <> '' then
call warn 'sendWSL ohne versions oder mit compares'
sWsl = 'dsn.dba.clon.wsl('m.e.auf7'Q)'
sIff = 'dsn.dba.'m.e.auf7'Q.IFF'
if sysDsn("'"sWsl"'") <> 'OK' then
call err 'source wsl fehlt:' sWsl sysDsn("'"sWsl"'")
if rz <> '' then do
call csmCopy sWsl, rz'/'sWsl
if sysDsn("'"sIff"'") <> 'OK' then
say 'iff existiert nicht' sIff sysDsn("'"sIff"'")
else
call csmCopy sIff, rz'/'sIff
end
call cloneWsl rz, m.e.auftrag, 1
call mAdd auftrag, addDateUs('sendWSL' rz)
return
endProcedure sendWSL
/*--- clone a wsl mbr in the rz sys,
if doRemove=1 remove old members first ---------------------*/
cloneWsl: procedure expose m.
parse arg sys, mbr, doRemove
/* copy multi clone jcl from target rz */
jcl = csmSysDsn(sys'/DSN.DBA.MULTI.CLONE'right(mbr, 1)'.JCL', 0)
CALL READdsn jcl, m.jj.
/* modify the jcl */
do jx=1 to m.jj.0
if word(m.jj.jx, 2) == '=' then do
if word(m.jj.jx, 1) = 'SRCWSLST' then
m.jj.jx = 'SRCWSLST =' left(mbr, 7)'Q'
else if word(m.jj.jx, 1) = 'CLNWSLST' then
m.jj.jx = 'CLNWSLST =' mbr
end
else if space(subword(m.jj.jx, 1, 2) ,1) ,
== '//DELMBRIF IF' then do
m.jj.jx = '//DELMBRIF IF RC =' (7 *(^doRemove)) 'THEN'
end
else if word(m.jj.jx, 1) == 'DELETE' then do
nm = word(m.jj.jx, 2)
cx = pos('(', nm)
if right(nm, 1) = ')' & cx > 0 then
m.jj.jx = ' DELETE' left(nm, cx)mbr')'
else
call err 'bad delete' jx m.jj.jx
end
end
call writeSub jj, sys, 1
return 0
endProcedure cloneWsl
warn:
say '*** warning:' arg(1)
return
endSubroutine warn
repAll: procedure expose m.
parse arg src, w, new
res = ''
cx = 1
do forever
nx = pos(w, src, cx)
if nx < 1 then
return res || substr(src, cx)
res = res || substr(src, cx, nx-cx) || new
cx = nx + length(w)
end
endProcedure repAll
/**** ca *************************************************************/
/*--- extract ddl from source system ---------------------------------*/
caDDl: procedure expose m.
parse arg o, scp, GlbChg
if m.sysRz = m.scp.rz then do
call caDD1 o, scp, GlbChg
end
else do
mbrN = mapGet(e, 'mbrNac')
mark = mbrN'@'time()
cf = mapExp(e, '${libPre}.SENDCF($mbrNac)')
sndIn = sendJob1(o, m.scp.rz, 'RECSRC',
, 'job -ddJob' m.timeout'//??' cf mark ,
, 'receive' mapExp(e, '${libPre}.ddl($mbrNac)'))
call caDD1 o, scp, GlbChg
call sendJob2 o, sndIn, cf mark
end
return
endProcedure caDDL
/*--- quickMigrate to create ddl -------------------------------------*/
caDD1: procedure expose m.
parse arg o, scp, GlbChg
call mapPut e, 'user', userid()
call mapExpAll e, o, skelStem('CCOM')
do sx=1 to m.scp.0
sn = scp'.'sx
if m.sn.type == 'DB' then
call caEx o, 'DATABASE' '=' m.sn.name, 'db'
else if m.sn.type == 'IX' then
call caEx o, 'INDEX' m.sn.qual m.sn.name, 'i'
else if m.sn.type == 'TB' then
call caEx o, 'TABLE' m.sn.qual m.sn.name, 't'
else if m.sn.type == 'TS' then
call caEx o, 'TABLESPACE' m.sn.qual m.sn.name, 'ts'
else if m.sn.type == 'TG' then
call caEx o, 'TRIGGER' m.sn.qual m.sn.name, 'tg'
else if m.sn.type == 'VW' then
call caEx o, 'VIEW' m.sn.qual m.sn.name, 'v'
else if m.sn.type == 'SP' then do
parse var m.sn.name nm '.' vers
call caEx o, 'PROCEDUR' m.sn.qual nm vers, 'r'
end
else
call err 'implement type' m.sn.type 'for ca'
end
call mapExpAll e, o, skelStem('CCO2')
call caGlbChg o, glbChg
return
endProcedure caDD1
caGlbChg: procedure expose m.
parse arg o, gCh
if gCh == '' then
return
upper gCh
if symbol('m.glbChg.gCh.0') \== 'VAR' then do
glblDsn = m.libPre".GlbChg("gCh")"
if sysDsn("'"glblDsn"'") \== 'OK' then
call err 'mask' gCh':' glblDsn sysDsn("'"glblDsn"'")
call readDsn glblDsn, 'M.GLBCHG.'gCh'.'
end
call mAddSt o, 'GLBCHG.'gCh
return
endProcedure caGlblChg
/*--- add explode options depending on object type -------------------*/
caEx: procedure expose m.
parse arg o, oLine, ty
call mAdd o, '' oLine
call caE1 o, ty, 'e TABLESPACE db'
call caE1 o, ty, 'i TABLESPACE t'
call caE1 o, ty, 'e TABLE db ts'
call caE1 o, ty, 'e INDEX db ts t'
call caE1 o, ty, 'e VIEW db ts t v'
call caE1 o, ty, 'e SYNONYM db ts t v'
call caE1 o, ty, 'e TRIGGER db ts t v'
call caE1 o, ty, 'e MQTB_T db ts t v'
call caE1 o, ty, 'e MQTB_I db ts t v'
call caE1 o, ty, 'e MQTB_V db ts t v'
call caE1 o, ty, 'e MQTB_S db ts t v'
call caE1 o, ty, 'e MQVW_VW db ts t v'
call caE1 o, ty, 'e MQVW_I db ts t v'
call caE1 o, ty, 'e MQVW_V db ts t v'
call caE1 o, ty, 'e MQVW_S db ts t v'
call caE1 o, ty, 'i MQVW_VW i'
return
endProcedure caEx
caE1: procedure expose m.
parse arg o, ty, v1 v2 types
if v1 == 'e' then
e = 'EXPLODE'
else if v1 == 'i' then
e = 'IMPLODE'
else
call err 'bad explode' v1 'in caE1('o',' ty',' v1 v2 types')'
if wordPos(ty, types) > 0 then
call mAdd o, ' 'left(e, 11) v2
return
endProcedure caE1
/**** bmc ************************************************************/
/*--- src und trg profile erstellen ----------------------------------*/
bmcVars: procedure expose m.
m.e.profSrc = m.e.auftrag'_SRC'
m.e.profTrg = m.e.auftrag'_TRG'
m.e.profOwn = 'DBXAUFTR'
return
endProcedure bmcVars
bmcVarsProf: procedure expose m.
parse arg isImport
m.e.profChg = bmcMask2Prof(m.e.comMask)
if isImport then
m.e.profImp = bmcMask2Prof(m.e.impMask)
return
endProcedure bmcVarsProf
bmcMask2Prof: procedure expose m.
parse arg mask
m2 = translate(mapExp(e, mask))
return word(translate(m2, ' ', '.()'), 2)'.'dsnGetMbr(m2)
endProdecure bmcMask2Prof
/*--- src und trg profile erstellen ----------------------------------*/
bmcSrcTrg: procedure expose m.
parse arg oldSrc prof
if symbol('m.mask.hier') \== 'VAR' then
call maskHierarchy
if m.scopeSrc.rz \== m.sysRz | m.scopeTrg.rz \== m.sysRz then
call err 'bmc compare on other rz not implemented'
if m.scopeSrc.dbSy \== m.scopeTrg.dbSy then
call err 'bmc compare on different dbSystems not implemented'
call configureDbSy m.scopeSrc.rz, m.scopeSrc.dbSy
call bmcProfile m.e.profOwn, m.e.profSrc, 'SCOPESRC'
if m.optAuto then
call maskScope m.e.comMask, 'SCOPESRC', 'SCOPETRG'
call bmcProfile m.e.profOwn, m.e.profTrg, 'SCOPETRG'
return
endProcedure bmcSrcTrg
bmcProfile: procedure expose m.
parse arg ow, prof, scp
call sqlConnect m.scp.dbSy
call sqlExec "insert into bmcacma1.CM_BLPROFILE" ,
"(BLPOWNER, blpName, type, template)" ,
"values('"ow"', '"prof"', 'C', '"prof"####')", -803
call sqlExec "delete from bmcacma1.CM_SCOPE" ,
"where scOwner = '"ow"' and scName = '"prof"'", 100
do sx=1 to m.scp.0
sn = scp'.'sx
if m.sn.type = 'DB' then do
q1 = m.sn.name
q2 = ''
end
else do
q1 = m.sn.qual
q2 = m.sn.name
end
call sqlExec "insert into bmcacma1.CM_SCOPE" ,
"(SCOWNER, SCName, Type, ACTION,OBJECT,NAME_PART1,NAME_PART2",
",MIGDT, MIGTS, MIGTB, MIGCK, MIGFK, MIGIX, MIGVW, MIGAU",
",MIGSY, MIGAL, MIGRO, MIGTR, MIGUC, MIGAX",
")values('"ow"', '"prof"', 'B', 'I'" ,
", '"m.sn.type"', '"q1"', '"q2"'" ,
",'N' , 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'N'",
",'Y' , 'Y', '', 'Y', 'Y', 'Y')"
end
call sqlCommit
return
endProcedure bmcProfile
/*--- zStat Zuegelschub Statistik ------------------------------------*/
zstat a? yymm? - in rz1, create AyyMM mit AuftragsListe
----------------------------------------------------------------------*/
zStat: procedure expose m.
parse upper arg aArg
parse upper arg fun zgl fr to
rz = sysvar('sysNode')
if fun = '' then
if rz = 'RZ4' then
fun = 'A'
else if rz = 'RZ2' | rz = 'RR2' | rz = 'RZ4' then
fun = 'S'
if zgl = '' then
zgl = substr(date('s'), 3, 4)
if fr = '' | fr = '-' then
fr = zgl'01'
if to = '' | to = '-' then
to = zgl'21'
m.lib = m.libPre'.ZGL'
aDsn = m.lib'(ZSTA'zgl')'
sDsn = m.lib'(ZSTS'zgl')'
if fun = 'A' then do
if rz <> 'RZ4' then
call err 'zstat a... only in rz4'
if sysDsn("'"aDsn"'") == 'OK' then
call err "e}"aDsn "existiert schon"
call checkAuftrag m.libPre'.auftrag', '20'fr '20'to, aDsn
end
else if fun == 'S' then do
if rz <> 'RZ2' & rz <> 'RR2' & rz <> 'RZ4' then
call err 'zstat s... only in rz2 or rz4'
if sysDsn("'"aDsn"'") \== 'OK' then
call err aDsn "existiert nicht"
call stats zgl, aDsn, sDsn
end
else
call err 'i}bad fun' fun 'in arguments zStat' aArg
return 0
endProcedure zStat
stats: procedure expose m.
parse arg zgl, aufLst, out
m.mm.verbs = ' CREATE ALTER DROP '
m.mm.verb2 = m.mm.verbs 'REBIND'
m.mm.objs = 'DATABASE TABLESPACE TABLE INDEX VIEW TRIGGER SYNONYM ALIAS'
m.mm.obj2 = m.mm.objs 'UNIQUE'
m.mm.auft = ''
m.mm.count.auft = 0
m.mm.count.list = 0
m.mm.count.nact = 0
m.mm.count.rebind = 0
m.mm.count.load = 0
call readDsn aufLst, m.l.
do lx=1 to m.l.0
au = word(m.l.lx, 1)
a7 = left(translate(au), 7)
if abbrev(a7, '*') | a7 = '' then
iterate
m.auft.a7 = au word(m.l.lx, 2)
m.mm.auft = m.mm.auft a7
m.mm.count.list = m.mm.count.list + 1
end
dbSys = ''
rz = sysvar(sysNode)
if rz = 'RZ4' then do
dbSys = 'DBOL DP4G'
end
else do px=1 to m.promD.0
p1 = translate(m.promD.px, ' ', ',')
pc = pos(rz'/', p1)
do while pc > 0
ps = word(substr(p1, pc+4), 1)
if wordPos(ps, dbSys) < 1 then
dbSys = strip(dbSys ps)
pc = pos(rz'/', p1, pc+4)
end
end
say 'statistics for' dbSys
do ox=1 to words(m.mm.obj2)
o1 = word(m.mm.obj2, ox)
do vx=1 to words(m.mm.verbs)
v1 = word(m.mm.verbs, vx)
m.mm.count.o1.v1 = 0
end
end
do dx=1 to words(dbSys)
d1 = word(dbSys, dx)
ana = m.libpre || d1'.ANA'
if sysDsn("'"ana"'") <> 'OK' then do
say '---' d1 'sysDsn('ana')' sysDsn("'"ana"'")
iterate
end
say '---' d1
lmm = lmmBegin(ana)
laM7 = ''
laAct = 0
do forever
m1 = lmmNext(lmm)
m7 = left(m1, 7)
if laM7 \== m7 then do
if laAct then do
say '---'laM7 || laTop m.auft.laM7,
copies('<><><>', laTop \== word(m.auft.laM7, 2))
call countNachtrag mm, laM7 || laTop, laSeq
call countSqls mm, ana'('laM7 || laTop')'
end
if m1 == '' then
leave
laM7 = m7
laAct = symbol('m.auft.m7') == 'VAR'
if laAct then do
laNac = m.auft.m7
if words(laNac) < 2 then
laSeq = 999
else
laSeq = pos(word(laNac, 2), m.nachtragChars)
laTop = ''
end
end
if laAct then do
nac = substr(m1, 8, 1)
seq = pos(nac, m.nachtragChars)
if seq < 1 then
call err 'bad Nachtrag' m1
if seq > pos(laTop, m.nachtragChars) then
laTop = nac
end
end
end
total = '--total--'
m.o.0 = 0
call mAdd o, 'Zuegelschub' zgl 'Statistik fuer' dbSys 'in' rz,
, left('Auftraege in Liste', 19) right(m.mm.count.list, 9),
, left('Auftraege analys''t', 19) right(m.mm.count.auft, 9),
, left('Nachtraege', 19) right(m.mm.count.nact - m.mm.count.auft, 9),
, left('Load', 19) right(m.mm.count.load, 9),
, left('Rebind Package', 19) right(m.mm.count.rebind, 9),
, , left('',19) m.mm.verbs
do vx=1 to words(m.mm.verbs)
v1 = word(m.mm.verbs, vx)
m.mm.count.total.v1 = 0
m.mm.count.index.v1 = m.mm.count.index.v1 + m.mm.count.unique.v1
end
obj3 = m.mm.objs total
do ox=1 to words(obj3)
o1 = word(obj3, ox)
t = left(o1, 19)
do vx=1 to words(m.mm.verbs)
v1 = word(m.mm.verbs, vx)
t = t right(m.mm.count.o1.v1, 9)
m.mm.count.total.v1 = m.mm.count.total.v1 + m.mm.count.o1.v1
end
call mAdd o, t
end
say words(m.mm.auft) 'auftraege in list but not in ana' m.mm.auft
call mAdd o, words(m.mm.auft) 'auftraege in list but not in ana',
if(length(m.mm.auft) < 35, m.mm.auft, left(m.mm.auft, 32)'...')
call writeDsn out, m.o., , 1
call adrIsp "view dataset('"out"')", 4
return
endProcedure stats
checkAuftrag: procedure expose m.
parse arg lib, von bis, aufLst
say 'zStat fuer Zuegelschub von' von 'bis' bis
say ' erstellt Auftragsliste auf' aufLst
ox = 0
if bis == '' then
bis = von
lmm = lmmBegin(lib)
ls = 0
z0 = 0
do mx=1
m1 = lmmNext(lmm)
if m1 == '' then
leave
call readDsn lib'('m1')', 'M.I.'
ls = ls + m.i.0
if mx // 100 = 0 then
say m1 'noZgl='z0 'thisZgl='ox 'mbrs='mx 'lines='ls
if translate(word(m.i.2, 1)) \== 'ZUEGELSCHUB' then do
z0 = z0 + 1
iterate
end
z1 = word(m.i.2, 2)
if z1 << von | z1 >> bis then
iterate
do ax=m.i.0 by -1 to 2 while translate(word(m.i.ax, 1)) ,
\== 'COMPARE'
end
ac = if(ax>2, word(m.i.ax, 2))
ox = ox + 1
m.o.ox = m1 ac
end
say m1 'noZgl='z0 'thisZgl='ox 'mbrs='||(mx-1) 'lines='ls
call writeDsn aufLst, m.o., ox, 1
return 0
endProcedure checkAuftrag
countNachtrag: procedure expose m.
parse arg m, mbr, seq
if mbr == '' then
return
mSq = pos(substr(mbr, 8, 1), m.nachtragChars)
m.m.count.auft = m.m.count.auft + 1
m.m.count.nact = m.m.count.nact + mSq
a7 = left(mbr, 7)
wx = wordPos(a7, m.m.auft)
if wx > 0 then
m.m.auft = subword(m.m.auft, 1, wx-1) subword(m.m.auft, wx+1)
else
say a7 mbr 'not in list'
return
endProcedcure countNachtrag
countSqls: procedure expose m.
parse arg m, dsn
call readNxBegin nx, dsn
do lx=1
lp = readNx(nx)
if lp == '' then
leave
li = translate(strip(m.lp))
if li == '' | abbrev(li, '--') then
iterate
if abbrev(li, '.') then do
if abbrev(li, '.CALL SNAPSHOT') then do
sx = lx
do until lp == '' | abbrev(m.lp, '.ENDDATA')
lx = lx + 1
lp = readNx(nx)
end
if lx - sx > 1200 | lp == '' then
say '???snapshot' sx'-'lx 'tooLong/end missing'
end
else if abbrev(li, '.CALL UTIL LOAD ') then do
m.m.count.load = m.m.count.load + 1
end
iterate
end
if wordPos(word(li, 1), m.m.verb2) < 1 then
iterate
v = word(li, 1)
if v = 'REBIND' then do
m.m.count.rebind = m.m.count.rebind ,
+ (pos('PACKAGE', li) > 0)
iterate
end
ox = wordPos(word(li, 2), m.m.obj2)
if ox < 1 & (v == 'DROP' | v == 'ALTER') then
iterate
do wx=3 to min(5, words(li)) while ox < 1
ox = wordPos(word(li, wx), m.m.obj2)
end
if ox < 1 then
call err 'no object' m.m.obj2 'in' lx':'li
o = word(m.m.obj2, ox)
if 0 then
say v o lx':' strip(li, 't')
if \ datatype(m.m.count.o.v, 'n') ,
| wordPos(v, m.m.verbs) < 0 then
say '???' v o '???' li
m.m.count.o.v = m.m.count.o.v + 1
end
call readNxEnd nx
return
endProcedure countSqls
/* copy csi begin ***************************************************
csi interface: see dfs managing catalogs appendix c
returncode/reason see message IDC3009I
**********************************************************************/
/*--- specify dsn mask and fields to start a csi catalog search --------
arguments:
m objectPointer
dsnMask specifies the dsns with wildcards:
% 1 character
* 0 - n character in one level
** 0 - n levels
fields a (space separated) list of field names -------------*/
csiOpen: procedure expose m.
parse arg m, dsnMask, fields
m.m.fld.0 = words(fields)
ffix = d2c(m.m.fld.0, 2)
do x=1 to m.m.fld.0
m.m.fld.x = translate(word(fields, x))
ffix = ffix || left(m.m.fld.x, 8)
end
if dsnMask \== '' & pos('*', dsnMask) < 1 then
dsnMask = dsnMask'.**'
m.m.filt = left(dsnMask, 149) ,
|| left('Y', 3) , /* resume offset 149 */
|| ffix /* csiNumEn offset 152 */
WORKLEN = 1024 * 64
m.m.work = D2C(WORKLEN,4) || COPIES('00'X,WORKLEN-4)
m.m.pos = workLen + 1
return
endProcedure csiOpen
/*--- put the next dsn into m.o and m.o.* (for other fields)
return 1 if next dsn exists 0 otherwise ------------------------*/
csiNext: procedure expose m.
parse arg m, o
usedL = C2D(SUBSTR(m.m.work,9,4)) /* GET AMOUNT OF WORK AREA USED */
px = m.m.pos
do forever
if px > usedL then do
if substr(m.m.filt, 150, 1) \== 'Y' then do
m.m.pos = px
m.o = ''
return 0
end
reason = left('', 4)
ADDRESS LINKPGM 'IGGCSI00 reason m.'m'.filt m.'m'.work'
if rc == 0 & substr(reason, 3, 2) == '0000'x then
nop
else if rc == 4 & substr(reason, 3, 2) == '0464'x then
say 'data set entry with error'
else
call err 'call csi returns' rc,
'rc' c2d(substr(reason, 4,1)),
'reason' c2d(substr(reason, 3,1)),
'module' substr(reason, 1,2)
usedL = C2D(SUBSTR(m.m.work,9,4)) /* GET WORK AREA USED */
numFD = C2D(SUBSTR(m.m.work,13,2)) /* no flds + 1 */
if numFd <> m.m.fld.0 + 1 then
call err 'csiNumFd' numFd 'not' m.m.fld.0 '+' 1
px = 15
iterate
end
eType = substr(m.m.work, px+1, 1)
m.o = strip(substr(m.m.work, px+2, 44), 't')
flag = substr(m.m.work, px, 1)
/* say 'eType' eType m.o 'flag' c2x(flag) */
if eType == '0' then do
if flag \== '00'x & flag \== '40'x then
call err 'flag' c2x(flag) 'for catalog' m.o
px = px + 50 /* length of catalog entry */
iterate
end
else do
if \ abbrev(x2b(c2x(flag)), '101') then
call err 'call csi entry flag' x2b(c2x(flag)),
'rc' c2d(substr(m.m.work, px+49,1)),
'reason' c2d(substr(m.m.work, px+48,1)),
'module' substr(m.m.work, px+46, 2),
'for entry' m.o,
'see qw IDC3009I'
py = px + 46
tl = c2d(substr(m.m.work, py, 2))
pl = py + 4
pf = py + m.m.fld.0 * 2 + 4
do fx = 1 to m.m.fld.0
fi = m.m.fld.fx
fl = c2d(substr(m.m.work, pl, 2))
m.o.fi = substr(m.m.work, pf, fl)
if fi = 'MGMTCLAS' then
m.o.fi = substr(m.o.fi, 3, c2d(left(m.o.fi ,2)))
else if wordPos(fi, 'COMUDSIZ NOBYTTRK') > 0 then
m.o.fi = c2d(m.o.fi)
pf = pf + fl
pl = pl + 2
end
if py + tl <> pf then
call err 'length mismatch for entry' m.o
m.m.pos = pf
return 1
end
end
endProcedure csiNext
/*--- if dsn is arcived return 'arcive'
if dsn is tape return 'tape'
otherwise return managment class ------------------------------*/
csiArcTape: procedure expose m.
parse arg vo, cl, dt, dsn
if vo = '' then
say err '||| no volume for dsn' dsn
else if vo = 'ARCIVE' then
res = 'arcive'
else if cl <> '' then
res = cl
else if abbrev(vo, 'SHR') then
res = 'SHR'
else
res = 'tape'
if res = 'arcive' then
return res
/*if abbrev(res, 'ar') \= abbrev(dt, '00'x) , */
if abbrev(res, 'ta') \= abbrev(c2x(left(dt, 1)), '7') ,
| (left(res, 1) >= 'A') \= abbrev(dt, '30'x) then
say '||| mismatch cl' cl 'vo' vo 'dt' c2x(dt) 'dsn' dsn
return res
endProcedure csiArcTape
/* copy csi end ******************************************************/
/* copy match begin ***************************************************/
/************************************* begin copy match ******/
/*--- wildCard matching with the following wildchars:
* 0-n chars
? 1 char
fill matched expressions instem st if st is non empty
return 1 if mask matches wert ----------------------------------*/
match: procedure expose m.
parse arg wert, mask, st
if st == '' then
return matchRO(wert, mask)
m.st.0 = -9
return matchSt(wert, mask, st, 0)
endProcedure match
/*--- return the fixed prefix of maskt -------------------------------*/
matchPref: procedure
arg mask, suff
ix = verify(mask, '*?', 'm')
if ix = 0 then
return mask
else
return left(mask, ix-1)suff
endProcedure matchPref
/*--- return true if mask matches wert -------------------------------*/
matchRO: procedure
arg wert, mask
ix = verify(mask, '*?', 'm')
if ix < 1 then return (mask == wert)
if length(wert) < ix-1 then return 0
if left(mask, ix-1) \== left(wert, ix-1) then return 0
if substr(mask, ix, 1) == '?' then do
if length(wert) < ix then return 0
return matchRO(substr(wert, ix+1), substr(mask, ix+1))
end
mask = substr(mask, ix+1) /* * 0 - n Chars */
do ex = 1+length(wert) to ix by -1
if matchRO(substr(wert, ex), mask) then return 1
end
return 0
endProcedure matchRO
/*--- wildCard matching: fill matched expressions instem st
return 1 if mask matches wert ----------------------------------*/
matchSt: procedure expose m.
parse arg wert, mask, st, sx
ix = verify(mask, '*?', 'm')
if ix < 1 then do
if mask \== wert then
return 0
m.st.0 = sx
return 1
end
if \ abbrev(wert, left(mask, ix-1)) then
return 0
reMa = substr(mask, ix+1)
sx = sx + 1
if substr(mask, ix, 1) == '?' then do /* ? 1 Character */
if length(wert) < ix then
return 0
m.st.sx = substr(wert, ix, 1)
return matchSt(substr(wert, ix+1), reMa, st, sx)
end
do lx = 1+length(wert) to ix by -1 /* greedy: from all to empty */
if matchSt(substr(wert, lx), reMa, st, sx) then do
m.st.sx = substr(wert, ix, lx-ix)
return 1
end
end
return 0
endProcedure matchSt
matchTrans: procedure expose m.
parse arg mask, st
r = ''
ox = 1
sx = 0
ix = verify(mask, '*?', 'm')
do sx=1 to m.st.0 while ix > 0
if sx > m.st.0 then
call err 'matchTrans('mask',' st') has only' ,
m.st.0 'variables'
r = r || substr(mask, ox, ix-ox)m.st.sx
ox = ix+1
ix = verify(mask, '*?', 'm', ox)
end
if ix > 0 then
call err 'matchTrans('mask',' st') has only' ,
m.st.0 'variables'
return r || substr(mask, ox)
endProcedure matchTrans
/* copy match end *****************************************************/
/* copy csm begin ******************************************************
interface to csm,
it is integrate with adrTso, eg. dsnAlloc , 'RZ3/..' uses csm
***********************************************************************/
adrCsm:
return adrTso('csmExec' arg(1), arg(2))
endProcedure adrCsm
csmCopy: procedure expose m.
parse arg csnFr, csnTo, retOk
if dsnGetMbr(csnTo) \= '' & dsnGetMbr(csnTo) \= '' then do
if dsnGetMbr(csnFr) <> dsnGetMbr(csnTo) then
call err 'member rename' csnFr 'to' csnTo
csnTo = dsnSetMbr(csnTo)
end
parse value csmSysDsn(csnFr) with sysFr '/' dsnFr
parse value csmSysDsn(csnTo) with sysTo '/' dsnTo
if sysTo = '*' then do
old = sysDsn("'"dsnTo"'")
end
else if sysFr = '*' then do
pdsTo = dsnSetMbr(dsnTo)
al = "SYSTEM("sysTo") DDNAME(COPYTo)",
"DATASET('"pdsTo"') DISP(SHR)"
alRes = dsnAlloc(systo'/'pdsTo, ,'COPYTO', '*')
if datatype(alRes, 'n') then do
/* wir müssen es selbst allozieren csmxUtil
vergisst management class ||||| */
say 'could not allocate' al
say 'trying to create'
rc = listDsi("'"dsnSetMbr(dsnFr)"' SMSINFO")
if rc = 0 then
mv = ''
else if rc = 4 & sysReason = 19 then do
mv = 'UCOUNT(30)' /* 7.8.13 corrected attribute */
say 'creating' dsn 'with multi volume' mv
end
else if rc \= 0 then
call err 'listDsi rc' rc 'reason' sysReason,
sysMsgLvl1 sysMsgLvl2
al = left(al, length(al)-4)'CAT)'
if right(sysDsSms, 7) == 'LIBRARY' ,
| abbrev(sysDsSms, 'PDS') then
al = al 'DSNTYPE(LIBRARY)'
if sysUnits = 'TRACK' then
sysUnits = 'TRACKS'
al = al "DSORG("sysDSorg") MGMTCLAS("sysMgmtClass")",
"RECFM("sysREcFM") LRECL("SYSLRECL")",
"blksize("sysBLkSIZE")",
"SPACE("sysPrimary"," sysSeconds")" sysUnits mv
call adrCsm "allocate" al
end
call tsoFree word(alRes, 2)
end
c = "'COPY" sysFr"/''"dsnFr"'' TO" ,
sysTo"/''"dsnSetMbr(dsnTo)"'' REPLACE'"
csmRc = adrTso("exec 'CSM."sysvar("sysnode")".P0.EXEC(CSRXUTIL)'",
c , retOk)
if sysTo = '*' & old <> 'OK' then do
/* csm normally does not set mgmtclass - avoid delete | */
call adrTso "ALTER '"dsnTo"' mgmtclas(COM#A091)"
end
return csmRc
endProcedure csmCopy
csmAlloc: procedure expose m.
parse arg dsn dd disp rest ':' nn, retRc
sys = ''
a2 = ''
parse value csmSysDsn(dsn) with sys '/' dsn
if disp = '' then
disp = 'shr'
al = "SYSTEM("sys") DDNAME("dd")"
if dsn <> '' then do
a2 = "DATASET('"dsnSetMbr(dsn)"')"
mbr = dsnGetMbr(dsn)
if mbr <> '' then
a2 = a2 'MEMBER('mbr')'
end
if abbrev(disp, 'SYSOUT(') then
a2 = a2 disp
else
a2 = a2 "DISP("disp")"
if disp = 'NEW' & nn \== '' then
a2 = a2 dsnCreateAtts( , nn, 1)
if retRc <> '' | nn = '' then
return adrCsm('allocate' al a2 rest, retRc)
do retry=0 by 1
alRc = adrCsm('allocate' al a2 rest, '*')
if alRc = 0 then
return 0
if retry > 0 | nn = '' | wordPos(disp, 'OLD SHR') < 1 then
return err('cmsAlloc rc' alRc 'for' al rest)
say 'csmAlloc rc' alRc 'for' al a2 rest '...trying to create'
nn = al 'disp(cat)' dsnCreateAtts(dsn, nn, 1)
call adrCsm 'allocate' nn
call adrTso 'free dd('dd')'
end
endProcedure csmAlloc
csmSysDsn: procedure expose m.
parse upper arg dsn, withStar
if pos('/', dsn) < 1 then
sys = '*'
else
parse var dsn sys '/' dsn
if sys <> '' & sys <> '*' & sys <> sysvar(sysnode) then
return sys'/'dsn
else if withStar == 0 then
return dsn
else
return '*/'dsn
endProcedure csmSysDsn
/*--- execute a rexx (under tso) in another rz
here we use rexx TPSYSIKJ which was written for
jcl procedure RM@IKJ01
arguments
rz which rz to run rexx
proc the (remote) procedure library to use
opt options
cmd the tso command to execute
----------------------------------------------------------------------*/
/*--- execute a rexx (under tso) in another rz
directly (without TPSYSIKJ) --------------------------------*/
csmExRx: procedure expose m.
parse arg rz, proc, opt, cmd
do cx=1 to (length(cmd)-1) % 68
cmd.cx = substr(cmd, 68*cx-67,68)'-'
end
cmd.cx = substr(cmd, 68*cx-67)
cmd.0 = cx
timeout = 11
if 0 then do
call adrTso 'free ed(rmtSys)' ,'*'
call tsoFree tsoDD(rmtsPrt, 'a')
call adrTso 'free dd(rmtsIn)','*'
call adrTso 'free dd(sysproc)' ,'*'
end
call dsnAlloc rz"/"proc "dd(rmSyPro) rmtDDn(sysProc)"
call dsnAlloc rz"/tmp.tsin new dd(rmTsIn) rmtDdn(sysTsIn) ::f "
call tsoOpen rmTsIn, 'w'
call writeDD rmTsIn, cmd.
call tsoClose rmtsin
call dsnAlloc rz"/tmp.prt new dd(rmtsprt) rmtDdn(sysTsPrt)",
"::f133"
call dsnAlloc rz"/tmp.rmt new dd(rmtSys) timeout("timeout")"
call adrtso "csmappc start pgm(csmexec)" ,
"parm('select tsocmd(''csmappc allocate plu(*.rmtSys)" ,
"tpname(sysikj) dealloc '')')",
"timeout("timeOut")", '*'
if rc <> 0 | appc_rc <> 0 then do
ee = 'csm tso exec rc='rc 'appc_rc='appc_rc
say ee
say ' rexx rz='rz 'proc='proc 'opt=opt'
say ' cmd='cmd
call csmappcRcSay ggTsoCmd
call readDD 'rmTsPrt', p.
call tsoClose rmtsPrt
say p.0 'tso output lines'
do px=1 to p.0
say ' ' strip(p.px, 't')
end
call err ee
end
call tsoFree rmSyPro rmtsPrt rmtSys rmtsIn
return
/*--- sys the re and result variables from csmAppcRc -----------------*/
csmappcRcSay: procedure expose appc_rc appc_reason appc_msg. ,
appc_state_c appc_state_f
parse arg cmd
say 'rc='appc_rc 'reason='appc_reason ,
'state_c='appc_state_c appc_state_f
say ' for' cmd
do ix=1 to appc_msg.0
say ' ' appc_msg.ix
end
return appc_rc
endProcedure csmappcRcSay
/* copy csm end *******************************************************/
/* copy sqlO begin ***************************************************
sql interface mit o und j Anbindung
***********************************************************************/
sqlOini: procedure expose m.
if m.sqlO.ini == 1 then
return
call sqlIni
m.sqlO.ini = 1
call jIni
m.sqlO.cursors = left('', 200)
call classNew 'n SqlResultRdr u JRWO', 'm',
, "jReset m.m.cursor = arg; m.m.type = arg2;",
, "jOpen call sqlResultRdrOpen m, opt",
, "jClose call sqlClose m.m.cursor",
, "jReadO return sqlSelReadO(m)"
call classNew 'n SqlSel u JRWO', 'm',
, "jReset m.m.src = arg; m.m.type = arg2;",
, "jOpen call sqlSelOpen m, opt",
, "jClose call sqlSelClose m",
, "jReadO return sqlSelReadO(m)"
call classNew 'n SqlDRS u SqlSel', 'm',
, "jReset m.m.loc = arg; m.m.type = arg2;",
, "jOpen call sqlDRSOpen m, opt",
, "jClose call sqlSelClose m",
, "jReadO return sqlSelReadO(m)"
call classNew 'n SqlRxConnection u', 'm',
, "sqlQuery return sqlRxQuery(cx, src, retOk, resTy)",
, "sqlFetch return sqlRxFetch(cx, dst, retOk)",
, "sqlClose return sqlRxClose(cx, retOk)",
, "sqlUpdate return sqlRxUpdate(cx, src, retOk)",
, "sqlCall call err 'implement sqlRxCall"
call classNew 'n SqlRxStatement u', 'm',
, "sqlQuery return sqlRxQuery(m.cx.cursor, src, retOk,resTy)",
, "sqlFetch return sqlRxFetch(m.cx.cursor, dst, retOk)",
, "sqlClose return sqlRxClose(m.cx.cursor, retOk)",
, "sqlUpdate return sqlRxUpdate(m.cx.cursor, src, retOk)",
, "sqlCall call err 'implement sqlRxCall"
call classNew 'n SqlCsmConnection u', 'm',
, "sqlQuery return sqlCsmQuery(cx, src, retOk, resTy)",
, "sqlFetch return sqlCsmFetch(cx, dst)",
, "sqlClose return 0",
, "sqlUpdate call err 'implement sqlCsmUpdate'" ,
, "sqlCall call err 'implement sqlCsmCall'"
call classNew 'n SqlCsmStatement u', 'm',
, "sqlQuery return sqlCsmQuery(m.cx.cursor, src, retOk,resTy)",
, "sqlFetch return sqlCsmFetch(m.cx.cursor, dst)",
, "sqlClose return 0",
, "sqlUpdate call err 'implement sqlCsmUpdate'" ,
, "sqlCall call err 'implement sqlCsmCall'"
return 0
endProcedure sqlOini
/*--- connect and/or disconnect to DB2 -------------------------------*/
sqlConnect: procedure expose m.
parse upper arg sys, retOk
call sqlOIni
if pos('/', sys) > 0 then do
parse value space(sys, 0) with hst '/' sys
cTy = 'Csm'
end
else do
hst = ''
cTy = 'Rx'
end
if m.sql.conType==cTy & m.sqlHost==hst & m.sqlconDbSYs == sys then
return 0
if m.sql.conType \== '' then
call sqlDisconnect
res = 0
if cTy = 'Rx' then
res = sqlRxConnect(sys, retOk)
else
m.sql.conDbSys = sys
if res < 0 then
return res
m.sql.conType = cTy
m.sql.conhost = hst
m.sql.connection = oNew('Sql'cTy'Connection')
return res
endProcedure sqlConnect
sqlDisconnect: procedure expose m.
parse arg retOk
if m.sql.conType == 'Rx' then
call sqlRxDisconnect
m.sql.conType = ''
m.sql.conDbSys = ''
return 0
endProcedure sqlDisonnect
/*--- execute a query from sql, with one resultset -------------------*/
sqlQuery: procedure expose m.
parse arg cx, src, retOk, resTy
if datatype(cx, 'n') then
interpret objMet(m.sql.connection, 'sqlQuery')
else
interpret objMet(cx, 'sqlQuery')
/*--- fetch next row to m.dst.* at end return false ------------------*/
sqlFetch: procedure expose m.
parse arg cx, dst, retOk
if datatype(cx, 'n') then
interpret objMet(m.sql.connection, 'sqlFetch')
else
interpret objMet(cx, 'sqlFetch')
/*--- close cursor 'c'cx ---------------------------------------------*/
sqlClose: procedure expose m.
parse arg cx, retOk
if datatype(cx, 'n') then
interpret objMet(m.sql.connection, 'sqlClose')
else
interpret objMet(cx, 'sqlClose')
return 0
/*-- execute an sql with no resultset, but possibly outParms ---------*/
sqlUpdate: procedure expose m.
parse arg cx, src, retOk
if cx == '' | datatype(cx, 'n') then
interpret objMet(m.sql.connection, 'sqlUpdate')
else
interpret objMet(cx, 'sqlUpdate')
endProcedue sqlUpdate
/*-- execute an sql call with outParms and multiple resultSets -------*/
sqlCall: procedure expose m.
parse arg cx, src, retOk
if cx == '' | datatype(cx, 'n') then
interpret objMet(m.sql.connection, 'sqlCall')
else
interpret objMet(cx, 'sqlCall')
endProcedure sqlCall
sqlSel: procedure expose m.
parse arg src, type
s = oNew('SqlSel', inp2str(src, '-sql'), type)
call pipeWriteAll s
return m.s.rowCount
endProcedure sqlSel
/*--- return a free cursor -------------------------------------------*/
sqlGetCursor: procedure expose m.
parse arg rng
if rng == '' then
return sqlGetCursorRng(rng, 10, 48)
else if rng == 'h' then
return sqlGetCursorRng(rng, 60, 99)
else if rng == 'a' then
return sqlGetCursorRng(rng, 110, 199)
else
call err 'bad cursor range' rng
endProcedure sqlGetCursor
sqlGetCursorRng: procedure expose m.
parse arg rng, fr, to
cx = pos(' ', m.sqlO.cursors, fr)
if cx < fr & cx > to then
call err "no more '"rng"' cursors between" fr "and" to,
":"m.sqlO.cursors
m.sqlO.cursors = overlay('u', m.sqlO.cursors, cx)
return cx
endProcedure sqlGetCursorRNG
/*--- mark a cursor as closed ----------------------------------------*/
sqlFreeCursor: procedure expose m.
parse arg cx
if substr(m.sqlO.cursors, cx, 1) \== 'u' then
call err 'sqlFreeCursor('cx') not in use :'m.sqlO.cursors
m.sqlO.cursors = overlay(' ', m.sqlO.cursors, cx)
return
endProcedure sqlFreeCursor
sqlStmtsOpt: procedure expose m.
parse arg src, opts
upper opts
sub = ''
o = ''
retOk = ''
do wx=1 to words(opts)
w = word(opts, wx)
if abbrev(w, '-SQL') then
o = o'-sql'substr(w, 5)
else if w == '-O' | w == 'O' then
o = o'-o'
else if w = '*' | datatype(w, 'n') then
retOk = retOk w
else if length(w) == 4 then
sub = w
else
call err 'bad opt' w 'in opts' opts 'not -sql? -o or subsys'
end
call sqlOIni
if (sub == '' & m.sql.conDbSys== '') ,
| (sub \== '' & m.sql.conDbSys \== sub) then
call sqlConnect sub
return sqlStmts(src, strip(retOk), strip(o))
endProcedure sqlStmtsOpt
/*** execute sql's in a stream (separated by ;)
opt: 'o' ==> write objects, otherwise fmtFTab
'sql72' ==> spufi formatting (window 72) else linebreaks */
sqlStmts: procedure expose m.
parse arg sqlSrc, retOk, opt
dlm = ';'
isStr = oStrOrObj(sqlSrc, m.j.in)
fLen = ''
if pos('sql', opt) > 0 then
fLen = word(substr(opt, pos('sql', opt)+3), 1)
if isStr then do
m.sqlStmts.rdr = ''
call scanSrc sqlStmts, ggStr
end
else do
fi = jOpen(o2File(ggObj), '<')
call jCatSqlReset sqlStmts, , fi, fLen
end
do forever
s1 = jCatSqlNext(sqlStmts, dlm)
if s1 = '' then
leave
if translate(left(s1, 10)) == 'TERMINATOR' then do
dlm = strip(substr(s1, 11))
if length(dlm) \== 1 then
call scanErr sqlStmts, 'bad terminator' dlm
iterate
end
call outSt(splitNl(sqlTmp, sqlStmt(s1, retOk, opt)))
end
if \ isStr then
call jClose fi
return 0
endProcedure sqlStmts
sqlStmt: procedure expose m.
parse arg src, retOk, opt
cx = sqlGetCursor()
r1 = sqlExecute(cx, src, retOK)
res = m.sql.sqlHaHi || sqlMsgLine(r1, m.sql.cx.updateCount, src)
if m.sql.cx.resultSet \== '' then do
rdr = sqlResultRdr(cx)
if pos('o', opt) > 0 then
call pipeWriteAll rdr
else
call fmtFTab sqlStmtFmt, rdr
res = sqlMsgLine(m.rdr.rowCount 'rows fetched', , src)
end
call sqlFreeCursor cx
return res
endProcedure sqlStmt
/*--- execute the given sql plus a commit
until no more rows are updated -----------------------------*/
sqlUpdComLoop: procedure expose m.
parse arg src, retOk, opt
src = inp2Str(src)
crs = sqlGetCursor()
upds = 0
if retOk == '' then
retOk = 100
do coms=0
cd = sqlExecute(crs, src, retOk)
if m.sql.crs.updateCount < 1 then
return sqlMsgLine( , upds, src, coms 'commits')
upds = upds + m.sql.crs.updateCount
call sqlCommit
if coms // 20 = 19 then
say sqlMsgLine(time(), upds, src, (coms+1) 'commits')
end
endProcedure sqlUpdComLoop
removeSqlStmt: procedure expose m.
parse arg src, ggRet, opt
bx = verify(src, '( ')
if bx < 1 then
return ''
fun = translate(word(substr(src, bx), 1))
w2 = translate(word(substr(src, bx), 2))
res = ''
if fun == 'SELECT' | fun = 'WITH' then do
s = oNew('SqlSel', inp2str(src, '%S%+Q\s'))
if pos('o', opt) > 0 then
call pipeWriteAll s
else
call fmtFTab sqlStmtFmt, s
res = m.s.rowCount 'rows fetched'
end
else if fun = 'SET' & abbrev(w2, ':') then do
ex = pos('=', w2)
if ex > 2 then
var = strip(substr(w2, 2, ex-2))
else
var = strip(substr(w2, 2))
if var = '' then
var = 'varUnbekannt'
call sqlExec src, ggRet
res = 'sqlCode' sqlCode var'='value(var)
end
else if fun = 'SET' | (fun = 'DECLARE' & w2 = 'GLOBAL') then do
call sqlExImm src, ggRet
res = 'sqlCode' sqlCode
end
else if fun = 'CALL' then do
res = sqlStmtCall(src, ggRet, opt)
end
else do
call sqlExec src, ggRet
res = 'sqlCode' sqlCode
if wordPos(fun, 'DELETE INSERT UPDATE') > 0 THEN
res = res',' sqlErrd.3 'rows' ut2Lc(fun)'d'
end
aa = strip(src)
ll = 75 - length(res)
if length(aa) > ll then
aa = space(aa, 1)
if length(aa) > ll then
aa = left(aa, ll-3)'...'
return res':' aa
endProcedure removeSqlStmt
sqlStmtCall: procedure expose m.
parse arg src, retOk, opt
s = scanSrc(scanSqlReset(sqlstmtcall, ,0), src)
if \ scanSqlId(scanSkip(s)) | m.s.val \== 'CALL' then
call scanErr s, 'not a call'
if \ scanSqlQuId(scanSkip(s)) then
call scanErr s, 'qualified id missing after call'
loc = ''
if m.s.val.0 = 1 then
wh = 'name =' quote(m.s.val.1, "'")
else if m.s.val.0 = 2 then
wh = "schema = '"strip(m.s.val.1)"'" ,
"and name = '"strip(m.s.val.2)"'"
else if m.s.val.0 = 3 then do
loc = m.s.val.1
wh = "schema = '"strip(m.s.val.2)"'" ,
"and name = '"strip(m.s.val.3)"'"
end
else
call scanErr s, 'storedProcedureName' m.s.val ,
'has' m.s.val.0 'parts, should have 1, 2 or 3'
pn = m.s.val
da = sqlStmtCallDa(sqlStmtCall, loc, wh)
if \ scanLit(scanSkip(s), '(') then
call scanErr s, '( expected after call' pn
varChars = f
do ax=1
m.da.ax.varName = ''
isEmpty = 0
if scanLit(scanSkip(s), ':') then do
if \ scanVerify(scanSkip(s), m.ut.alfDot) then
call scanErr s, 'variable expected after : in call' pn
m.da.ax.varName = m.s.tok
if m.da.ax.io == 'i' | m.da.ax.io == 'b' then
m.da.ax.sqlData = envGet(m.da.ax.varName)
end
else if scanString(s) then
m.da.ax.sqlData = m.s.val
else if scanVerify(s, ',):;', 'm') then
m.da.ax.sqlData = strip(m.s.tok)
else
isEmpty = 1
if scanLit(scanSkip(s), ')') then
leave
if \ scanLit(s, ',') then
call scanErr s, if(isEmpty, 'value, var, ') ,
|| "',' or ')' expected"
end
if ax \= m.da.sqlD then
if \ (ax=1 & m.da.sqlD = 0 & isEmpty) then
call scanErr s, 'call with' ax 'parms but' ,
pn 'needs' m.da.sqld
caCo = sqlExec('call' pn 'using descriptor :M.'da, 466)
call out '--- called' pn', sqlCode' caCo
do ax=1 to m.da.sqlD
call Out ' parm' ax m.da.ax.io m.da.ax.parmName,
|| if(m.da.ax.varName \== '',' $'m.da.ax.varName),
'=' m.da.ax.sqlData
if m.da.ax.varName \== '' then
call envPut m.da.ax.varName, m.da.ax.sqlData
end
if caCo = 466 then do
drop sqlDP
call sqlExec 'describe procedure :pn into :m.sqlDp'
if m.sqldp.sqlD < 1 then
call err 'bad sqldp sqlD='m.sqldp.sqlD 'for sqlCode' caCo
do dx=1 to m.sqldp.sqlD
call out ' dynamic result set' dx m.sqldp.dx.sqlName ,
'locator='m.sqldp.dx.sqlLocator
end
do dx=1 to m.sqldp.sqlD
drs = 'dynamic result set' dx'='m.sqldp.dx.sqlName 'of' pn
call out '--- begin of' drs
rdr = sqlDRS(m.sqldp.dx.sqlLocator)
if pos('o', opt) > 0 then
call pipeWriteAll rdr
else
call fmtFTab sqlStmtFmt, rdr
call out '---' m.rdr.rowCount 'rows fetched from' drs
end
end
return 'sqlCode' caCo
endProcedure sqlStmtCall
sqlStmtCallDa: procedure expose m.
parse arg da, loc, wh
cr = if(loc=='',,loc'.')'sysIbm'
sql = "select 'SCHEMA=''' || strip(schema) || ''''",
"|| ' and name=''' || strip(name ) || ''''",
"|| ' and specificName=''' || strip(specificName) || ''''",
"|| ' and routineType =''' || strip(routineType ) || ''''",
"|| ' and VERSION =''' || strip(VERSION ) || ''''",
"from" cr".SysRoutines ",
"where" wh "and active = 'Y'"
if sqlpreAllCl(49, sql, rou, ':m.rou') <> 1 then
call err m.rou.0 'routines found for' wh
rdr = jOpen(sqlRdr('select * from' cr'.sysParms where' m.rou,
'order by ordinal'), '<')
do ix=1 while assNN('A', jReadO(rdr))
if m.a.ordinal <> ix then
call err 'ix' ix 'mismatch ordinal' m.a.ordinal
ty = m.a.dataTypeId
m.da.ix.sqlType = ty
m.da.ix.sqlLen = m.a.length
m.da.ix.sqlLen.sqlPrecision = m.a.length
m.da.ix.sqlLen.sqlScale = m.a.scale
if wordPos(ty, 384 385) > 0 then /* date */
m.da.ix.sqlLen = 10
else if wordPos(ty, 388 389) > 0 then /* time */
m.da.ix.sqlLen = 8
else if wordPos(ty, 392 393) > 0 then /* timestamp */
m.da.ix.sqlLen = 26
m.da.ix.sqlData = ''
m.da.ix.parmName= m.a.parmName
m.da.ix.io = translate(m.a.rowType, 'iob', 'POB')
m.da.ix.sqlInd = 1
end
m.da.sqlD = ix - 1
return da
endProcedure sqlStmtCallDa
sqlResultRdr: procedure expose m.
parse arg cx, type
return oNew('SqlResultRdr', cx, type)
endProcedure sqlRdr
sqlRdr: procedure expose m.
parse arg src, type
return oNew('SqlSel', inp2str(src, '%S%qn %S'), type)
endProcedure sqlRdr
sqlResultRdrOpen: procedure expose m.
parse arg m, opt
if opt\== m.j.cRead then
call err 'opt not' m.j.cRead 'sqlResultRdrOpen('m',' opt')'
m.m.jReading = 1
m.m.rowCount = 0
return m
endProcedure sqlResultRdrOpen
/*--- prepare and open cursor
generate type and fetchList ------------------------------------*/
sqlSelOpen: procedure expose m.
parse arg m, opt
m.m.cursor = sqlGetCursor()
call sqlQuery m.m.cursor, m.m.src, ,m.m.type /* ????? */
return sqlResultRdrOpen(m, opt)
endProcedure sqlOpen
/*--- dynamic result sets --------------------------------------------*/
sqlDRS: procedure expose m.
parse arg loc, type
return oNew('SqlDRS', loc, type)
endProcedure sqlDRS
sqlDRSOpen: procedure expose m.
parse arg m, opt
if opt\== m.j.cRead then
call err 'opt not' m.j.cRead 'sqlDRSOpen('m',' opt')'
crs = sqlGetCursor('a')
crN = 'C'crs
m.m.cursor = crs
call sqlReset crs
call sqlexec 'allocate C'crs 'cursor for result set :m.m.loc'
call sqlExec 'describe cursor c'crs 'into :m.sql.'crs'.D'
m.m.jReading = 1
m.m.rowCount = 0
return m
endProcedure sqlDRSOpen
/*--- create the type, fetch vars etc. from the sqlDA ---------------*/
sqlFetchClass: procedure expose m.
parse arg cx
if m.sql.cx.type = '' then do
ff = mCat('SQL.'cx'.COL', '%qn v, f %s')
m.sql.cx.type = classNew('n* SQL u f' ff 'v')
end
return m.sql.cx.type
endProcedure sqlFetchClass
/*--- fetch cursor for this sqlSel -----------------------------------*/
sqlSelReadO: procedure expose m.
parse arg m
cx = m.m.cursor
v = oNew(sqlFetchClass(cx))
if \ sqlFetch(cx, v) then
return ''
m.m.rowCount = m.m.rowCount + 1
return v
endProcedure sqlSelReadO
/*--- close sql Cursor -----------------------------------------------*/
sqlSelClose: procedure expose m.
parse arg m, v
call sqlClose m.m.cursor
call sqlFreeCursor m.m.cursor
m.m.cursor = ''
return m
endProcedure sqlSelClose
/* copy sqlO end **************************************************/
/* copy sqlCsm begin **************************************************/
/*--- send an sql to csm an handle sqlCode ---------------------------*/
sqlCsmExe:
parse arg cx, ggSqlStmt, ggRetOk
sql_HOST = m.sql.conHost
SQL_DB2SSID = m.sql.conDbSys
sql_query = ggSqlStmt
address tso "CSMAPPC START PGM(CSMASQL)"
if \ (rc = 0 | rc = 4) then
call err 'csmappc rc' rc
if sqlCode = 0 then
return 0
else if pos('*', ggRetOk) > 0 | wordPos(sqlCode, ggRetOk) > 0 ,
then do
if sqlCode < 0 & pos('say', ggRetOk) > 0 then
call errSay ' }'sqlmsg(sqlCA2Rx(sqlCa))
return sqlCode
end
else if sqlCode < 0 then
call err sqlmsg(sqlCA2rx(sqlCa))
else if pos('w', ggRetOk) < 1 then
if sqlCode = 100 then
call errSay ' }sqlCode +100 row not found\nstmt =' ggSqlStmt
else
call errSay 'w}'sqlMsg(sqlCA2rx(sqlCa))
return sqlCode
endProcedure sqlCsmExe
/*--- execute a query from sql, with one resultset -------------------*/
sqlCsmQuery: procedure expose m.
parse arg cx, sqlSrc, retOk, resTy, src
res = sqlCsmExe(cx, sqlSrc, 100 retOk)
if res < 0 then
return res
if src == '' then
src = 'SQL.'cx'.DATA'
m.sql.cx.data = src
f = ''
if resTy \== '' then do
f = oClaMet(class4Name(resTy), 'oFlds')
if m.f.0 < sqlD then
call err 'not enough fields in type'
end
do kx=1 to sqlD
rxNa = SQLDA_REXXNAME.kx
cn = sqlVarName(f, kx, sqlDa_name.kx)
m.sql.cx.col.kx = cn
do rx=1 to sqlRow#
if substr(sqlIndicator.rx, kx ,1) == 'ff'x then
m.src.rx.cn = m.sqlNull
else
m.src.rx.cn = value(rxNa'.'rx)
end
end
m.src.0 = sqlRow#
m.sql.cx.col.0 = sqlD
m.sql.cx.daIx = 0
return 0
endProcedure sqlCsmQuery
sqlCsmFetch: procedure expose m.
parse arg cx, dst
src = m.sql.cx.data
rx = m.sql.cx.daIx + 1
if rx > m.sql.cx.data.0 then
return 0
m.sql.cx.daIx = rx
do kx = 1 to m.sql.cx.col.0
c = m.sql.cx.col.kx
m.dst.c = m.src.rx.c
end
return 1
endProcedure sqlCsmFetch
/* copy sqlCsm end **************************************************/
/* copy sqlRx begin ***************************************************
Achtung: inc generiert sql aus sqlRx, Aenderungen nur in sqlRx|
sql interface
***********************************************************************/
/*--- initialize sqlRx -----------------------------------------------*/
sqlIni: procedure expose m.
if m.sql.ini == 1 then
return
m.sqlNull = '---'
m.sqlInd = 'sqlInd'
m.sql.defCurs= 49
m.sqlCAMsg = 0
m.sqlSuMsg = 2
m.sql.ini = 1
m.sql.conType = ''
m.sql.conDbSys = ''
m.sql.conhost = ''
isInProd = wordPos(sysvar(sysNode), 'RZ2 RZ4') > 0
m.sqlRetOK = 'dne' copies('rod', \ isInProd)
return 0
endProcedure sqlIni
/*--- connect to the db2 subsystem sys -----------------------------*/
sqlRxConnect: procedure expose m.
parse upper arg sys, ggRetOk
call sqlIni
address tso "SUBCOM DSNREXX"
if rc <> 0 then do
sRc = RXSUBCOM('ADD','DSNREXX','DSNREXX') /* ADD HOST CMD ENV */
if sRc <> 0 then
call err 'rc' sRc 'from RXSUBCOM(ADD, DSNREXX, DSNREXX)'
end
if sys = '-' then
return 0
if sys \== '' then
nop
else if sysvar(sysnode) == 'RZ1' then
sys = 'DBAF'
/* else if sysvar(sysnode) == 'RZ4' then
sys = 'DP4G'
*/ else
call err 'no default subsys for' sysvar(sysnode)
m.sql.conDbSys = sys
ggSqlStmt = 'connect' sys
address dsnRexx ggSqlStmt
if rc = 0 then
return 0
interpret sqlErrorHandler(rc, ggRetOk, ggSqlStmt)
endProcedure sqlRxConnect
/*--- diconnect from db2 ---------------------------------------------*/
sqlRxDisconnect: procedure expose m.
parse arg retOk
ggSqlStmt = 'disconnect'
m.sql.conDbSys = ''
address dsnRexx ggSqlStmt
if rc = 0 then
return 0
interpret sqlErrorHandler(rc, ggRetOk, ggSqlStmt)
endProcedure sqlDisconnect
/*--- execute a query from sql, with one resultset -------------------*/
sqlRxQuery: procedure expose m.
parse arg cx, src, retOk, resTy
res = sqlPrepare(cx, src, retOk, 1)
if res < 0 then
return res
if resTy \== '' then
m.sql.cx.type = class4Name(resTy)
res = sqlExec('declare c'cx 'cursor for s'cx, retOk)
if res < 0 then
return res
res = sqlExec('open c'cx, retOk)
if res < 0 then
return res
call sqlRxFetchVars cx
m.sql.cx.updateCount = sqlErrd.3
m.sql.cx.resultSet = cx
return res
endProcedure sqlRxQuery
/*--- fetch next row to m.dst.* at end return false ------------------*/
sqlRxFetch: procedure expose m.
parse arg cx, dst, retOk
fetCode = sqlExec('fetch c'cx 'into' sqlRxFetchVars(cx), 100 retOk)
if fetCode == 100 then
return 0
if fetCode < 0 then
return fetCode
call sqlSetNull cx, dst
return 1
endProcedure sqlRxFetch
/*--- return csv header line -----------------------------------------*/
sqlHeaderCSV: procedure expose m.
parse arg cx
x = sqlRxFetchVars(cx)
return mCatFT('SQL.'cx'.COL', 1, m.sql.cx.d.sqlD, '%qn,%s')
endProcedure sqlHeaderCSV
/*--- fetch next row return it as csv line, return '' at end ---------*/
sqlFetchCSV: procedure expose m.
parse arg cx, retOk
dst = 'sql.csvFetch'
fetCode = sqlExec('fetch c'cx 'into' sqlRxFetchVars(cx), 100 retOk)
if fetCode == 100 then
return ''
if fetCode < 0 then
return fetCode
res = ''
do kx=1 to m.sql.cx.d.sqlD
cn = m.sql.cx.col.kx
val = m.dst.cn
if m.sql.cx.d.kx.sqlType // 2 = 1 & m.dst.col.sqlInd < 0 then
res = res','m.sqlNull
else if pos(',', val) > 0 | pos('"', val) > 0 then
res = res','quote(val, '"')
else
res = res','val
end
return substr(res, 2)
endProcedure sqlRxFetch
/*--- close cursor 'c'cx ---------------------------------------------*/
sqlRxClose: procedure expose m.
parse arg cx, retOk
return sqlExec('close c'cx, retOk)
endProcedure sqlRxClose
/*-- execute an sql with no resultset, but possibly outParms ---------*/
sqlRxUpdate: procedure expose m.
parse arg cx, src, retOk
m.sql.cx.updateCount = ''
m.sql.cx.resultSet = ''
bx = verify(src, '( ')
if bx > 0 then
fun = translate(word(substr(src, bx), 1))
if fun = 'SET' then do
w2 = translate(word(substr(src, bx), 2))
if \ abbrev(w2, ':') then
return sqlExImm(src, retOk)
trace ?r
ex = pos('=', w2)
if ex = 0 then
ex = length(w2)+1
var = strip(substr(w2, 2, ex-2))
if var = '' then
call err 'bad hostVar in' src
m.sql.outVar = var
src2 = 'set :M.sql.out.'var substr(w, ex) subword(src, 3)
return sqlExec(src2, retOk)
end
if fun == 'DECLARE' then do
if 'GLOBAL' == translate(word(substr(src, bx), 2)) then
return sqlExImm(src, retOk)
end
res = sqlExec(src, retOk)
if wordPos(fun, 'DELETE INSERT UPDATE') > 0 then
m.sql.cx.updateCount = sqlErrd.3
return res
endProcedure sqlRxUpdate
/*-- execute a query, update or call ---------------------------------*/
sqlExecute: procedure expose m.
parse arg cx, src, retOk
src = inp2Str(src, '-sql')
f = translate(word(substr(src, max(verify(src, '( '), 1)), 1))
m.sql.cx.fun = f
if f == 'SELECT' | f == 'WITH' then
return sqlQuery(cx, src, retOk)
else if f == 'CALL' then
call err 'implement sql call for:' src
else
return sqlUpdate(cx, src, retOk)
endProcedure sqlExecute
/*-- execute a query, copy result to stem ----------------------------*/
sql2St: procedure expose m.
parse arg src, dst, retOk, type
cx = m.sql.defCurs
res = sqlQuery(cx, src, retOk, type)
if res >= 0 then do
do sx=1 while sqlFetch(cx, dst'.'sx)
end
res = sx-1
end
m.dst.0 = res
call sqlRxClose cx
return res
endProcedure sql2St
/*-- execute a query and return value of the first column
if > 1 row fail, if 0 rows return arg(3) or fail ----------*/
sql2One: procedure expose m.
parse arg src, dst
cx = m.sql.defCurs
call sqlQuery cx, src
if \ sqlFetch(cx, dst) then
if arg() > 2 then
return arg(3)
else
call err 'no row returned for:' src
if sqlFetch(cx, dst.2) then
call err '2 or more rows for' src
c1 = m.sql.cx.col.1
res = m.dst.c1
call sqlRxClose cx
return res
endProcedure sql2One
/*--- reset sql cursor 'c'cx fields ----------------------------------*/
sqlReset: procedure expose m.
parse arg cx
m.sql.cx.updateCount = ''
m.sql.cx.resultSet = ''
m.sql.cx.needDesc = 1
m.sql.cx.d.sqlD = 'noSqlDA'
m.sql.cx.i.sqlD = 'noDescInp'
m.sql.cx.fetchVars = ''
m.sql.cx.type = ''
m.sql.cx.col.0 = ''
m.sql.cx.into = ''
return
endProcedue sqlReset
/*--- prepare statement 's'cx from sql src into descriptor desc ------*/
sqlPrepare: procedure expose m.
parse arg cx, src, retOk, descOut
src = inp2str(src, '%qn%s ')
s = ''
if descOut == 1 then
s = 'into :M.SQL.'cx'.D'
call sqlReset cx
return sqlExec('prepare s'cx s 'from :src', retOk)
endProcedure sqlPrepare
/*--- open cursor 'c'cx using arguments arg(2), arg(3)... ------------*/
sqlOpen: procedure expose m.
parse arg cx us
if us == '' then do
if arg() <= 1 then
return sqlExec('open c'cx)
call sqlDescribeInput cx
do ix=1 to arg()-1
call sqlDASet cx , 'I', ix, arg(ix+1)
end
end
return sqlExec('open c'cx 'using descriptor :M.SQL.'cx'.I')
endProcedure sqlOpen
/*--- execute a prepared statement with arg(2), arg(3)... ------------*/
sqlExePreSt: procedure expose m.
parse arg cx retOk
if arg() <= 1 then
return sqlExec('execute s'cx, retOk)
call sqlDescribeInput cx
do ix=1 to arg()-1
call sqlDASet cx , 'I', ix, arg(ix+1)
end
return sqlExec('execute s'cx 'using descriptor :M.SQL.'cx'.I',
, retOk)
endProcedure sqlExePreSt
/*--- describe output (if not already done)
and return size of sqlDa ------------------------------------*/
sqlDescribeOutput: procedure expose m.
parse arg cx, force
if force == 1 | \ datatype(m.sql.cx.d.sqlD, 'n') then
call sqlExec 'describe s'cx 'into :M.SQL.'cx'.D', 0
return m.sql.cx.d.sqlD
endProcedure sqlDescribeOutput
/*--- describe input (if not already done)
and return size of input sqlDA ------------------------------*/
sqlDescribeInput: procedure expose m.
parse arg cx, force
if force == 1 | \ datatype(m.sql.cx.i.sqlD, 'n') then
call sqlExec 'describe input s'cx 'into :M.SQL.'cx'.I'
return m.sql.cx.i.sqlD
endProcedure sqlDescribeInput
/*--- describe table and return sqlDA --------------------------------*/
sqlDescribeTable: procedure expose m.
parse upper arg tb, force
if force == 1 | \ datatype(m.sql.table.tb.sqlD, 'n') then
call sqlExec 'describe table :tb into :M.SQL.TABLE.'tb
return 'SQL.TABLE.'tb
endProcedure sqlDescribeTable
/*--- return select column list for table tb
omit Blobs (blobMax < 0) or substr(blob, 1, blobMax) ----------*/
sqlColList: procedure expose m.
parse arg tb al, blobMax
sd = sqlDescribeTable(tb)
bs = ''
lst = ''
if al \== '' & right(al, 1) \== '.' then
al = al'.'
do sx=1 to m.sd.sqld
if wordPos(m.sd.sx.sqlType, '404 405 408 409 412 413') < 1 then
lst = lst',' al || m.sd.sx.sqlName
else do
bs = bs m.sd.sx.sqlName
if blobMax >= 0 then
lst = lst', length('al || m.sd.sx.sqlName')' ,
m.sd.sx.sqlName'Len' ,
|| ', substr('al || m.sd.sx.sqlName ,
|| ', 1,' blobMax')' m.sd.sx.sqlName
end
end
m.sd.colList = substr(lst, 3)
m.sd.blobs = strip(bs)
return substr(lst, 3)
endProcedure sqlColList
/*--- put sqlNull in all vars where indicator says so ---------------*/
sqlSetNull: procedure expose m.
parse arg cx, dst
do nx=1 to m.sql.cx.sqlNull.0
col = m.sql.cx.sqlNull.nx
if m.dst.col.sqlInd < 0 then
m.dst.col = m.sqlNull
end
return
endProcedure sqlSetNull
/*--- use describe output to generate column names,
fetchVariables and sqlNull names ---------------------*/
sqlRxFetchVars: procedure expose m.
parse arg cx
if m.sql.cx.fetchVars \== '' then
return m.sql.cx.fetchVars
call sqlDescribeOutput cx
f = m.sql.cx.type
if f \== '' then do
f = oClaMet(f, 'oFlds')
if m.f.0 < m.sql.cx.d.sqlD then
call err 'not enough column names'
end
m.sql.cx.col.0 = m.sql.cx.d.sqlD
nx = 0
vars = ''
do kx=1 to m.sql.cx.d.sqlD
cn = sqlVarName(f, kx, m.sql.cx.d.kx.sqlName)
m.sql.cx.col.kx = cn
m.sql.cx.col2kx.cn = kx
vars = vars', :m.dst.'cn
if m.sql.cx.d.kx.sqlType // 2 = 1 then do
vars = vars' :m.dst.'cn'.sqlInd'
nx = nx + 1
m.sql.cx.sqlNull.nx = cn
end
end
m.sql.cx.sqlNull.0 = nx
m.sql.cx.fetchVars = substr(vars, 3)
return m.sql.cx.fetchVars
endProcedure sqlRxFetchVars
sqlCol2kx: procedure expose m.
parse arg cx, nm
call sqlRxFetchVars cx
if symbol('M.SQL.CX.COL2KX.NM') \== 'VAR' then
return ''
kx = m.sql.cx.col2kx.nm
if m.sql.cx.col.kx == nm then
return kx
drop m.sql.cx.col.kx
return ''
endProcedure sqlCol2kx
sqlVarName: procedure expose m. sqlVarName.
parse arg f, kx, sNa
if f == '' then do
cx = verifId(sNa)
if cx > 0 then /* avoid bad characters for classNew| */
sNa = left(sNa, cx-1)
upper sNa
if sNa == '' | symbol('sqlVarName.sNa') == 'VAR' then
sNa = 'COL'kx
sqlVarName.sNa = 1
return sNa
end
else do
if m.f.kx == '' then
call err 'implement empty varName'
return substr(m.f.kx, 2)
end
endProcedure sqlVarName
/*--- set one value in a DA, handle nulls ----------------------------*/
sqlDASet: procedure expose m.
parse arg cx, da, ix, val
m.sql.cx.da.ix.sqlData = val
m.sql.cx.da.ix.sqlInd = - (val == m.sqlNull)
/* data types schienen einmal nicht zu funktionieren .......
if wordPos(m.da.ix.sqlType, '384 385 388 389 392 393') > 0 then
m.da.ix.sqlType = 448 + (m.da.ix.sqlType // 2) */
return
endProcedure sqlDASet
sqlExImm:
parse arg ggSrc, ggRetOk
return sqlExec('execute immediate :ggSrc', ggRetOk)
endProcedure sqlExImm
sqlCommit: procedure expose m.
parse arg src
return sqlExec('commit')
endProcedure sqlCommit
/*--- execute sql thru the dsnRexx interface -------------------------*/
sqlExec: /* no procedure, to keep variables sql... */
parse arg ggSqlStmt, ggRetOk
m.sql.sqlHaHi = ''
address dsnRexx 'execSql' ggSqlStmt
/* say 'sqlCode' sqlCode 'rc' rc 'for' ggSqlStmt ggNo */
if rc = 0 then
return 0
interpret sqlErrorHandler(rc, ggRetOk, ggSqlStmt)
endProcedure sqlExec
sqlErrorHandler: procedure expose m. ,
sqlCode sqlErrMc sqlErrP sqlErrD. sqlWarn. sqlState
parse arg drC, retOk, verb rest
if drC == 0 then
return 'return 0'
if wordPos(drC, '1 -1') < 0 then
return "call err 'dsnRexx rc" drC"' sqlmsg()"
if pos('-', retOK) < 1 then
retOK = retOk m.sqlRetOk
if pos('*', retOK) > 0 | wordPos(sqlCode, retOK) > 0 then do
if sqlCode < 0 & pos('say', retOK) > 0 then
return "call outSt errMsg(' }'sqlMsg()); return" sqlCode
else
return "return" sqlCode
end
upper verb
if verb == 'DROP' then do
if sqlCode == -204 & wordPos('dne', retok) > 0 then
return 'return' sqlCode
if sqlCode = -672 & verb=='DROP' ,
& wordPos('rod', retok) > 1 then do
hahi = m.sql.sqlHaHi ,
|| sqlMsgLine(sqlCode, 'tb='sqlErrMc ,verb rest)'\n'
call sqlExec 'alter table' SqlErrMc ,
'drop restrict on drop'
hahi = hahi || m.sql.sqlHaHi ,
|| sqlMsgLine(sqlCode, , ggSqlStmt)'\n'
call sqlExec verb rest
m.sql.sqlHaHi = hahi
return 'return' sqlCode
end
end
if drC < 0 then
return "call err sqlmsg(); return" sqlCode
if (sqlCode <> 0 | sqlWarn.0 ^==' ') & pos('w',retOK) < 1 then
return "call outSt errMsg(' }'sqlMsg()); return" sqlCode
return 'return' sqlCode
endProcedure sqlErrorHandler
sqlMsgLine: procedure expose m. sqlErrD.
parse arg res, cnt, src, plus
verb = translate(word(src, 1))
if datatype(res, 'n') then
res = 'sqlCode' res
if cnt \== '' then do
res = res',' cnt
vx = wordPos(translate(word(src,1)), 'DELETE INSERT UPDATE')
if datatype(cnt, 'n') then
if vx > 0 then
res = res 'rows' word('deleted inserted updated', vx)
else if cnt <> 0 then
res = res 'rows updated'
end
if plus \== '' then
res = res',' plus
if abbrev(res, ', ') then
res = substr(res, 3)
if src \== '' then do
ll = 75 - length(res)
aa = strip(src)
if length(aa) > ll then
aa = space(aa, 1)
if length(aa) > ll then
aa = left(aa, ll-3)'...'
res = res':' aa
end
return res
endProcedure sqlMsgLine
/*--- send a command to db2 through the TSO dsn processor ------------*/
sqlDsn: procedure expose m.
parse arg st, sys, cmd, rcOk
x = outtrap('M.'st'.')
push 'END'
push cmd
address tso 'DSN SYSTEM('sys')'
rr = rc
x = outtrap(off)
if rr = 0 | rcOk = '*' | wordPos(rr, rcOk) > 0 then
return rr
fl = max(1, m.st.0 - 10)
em = 'rc' rr 'for DSN SYSTEM('sys') cmd' cmd,
'\nOuputlines' fl '-' m.st.0':'
do lx=fl to m.st.0
em = em '\n' strip(m.st.lx, 't')
end
call err em
endProcedure sqlDsn
/*--- issue an sql error message -------------------------------------*/
sqlMsg: /* no procedure, to keep variables sql... */
if \ dataType(sqlCode, 'n') then do
ggRes = 'sqlCode' sqlCode 'not numeric\n'sqlCaMsg()
end
else do
ggRes = sqlDsntiar(sqlRx2CA())
ggWa = sqlMsgWarn()
if ggWa \= '' then
ggRes = ggRes'\nwarnings' ggWa
if m.sqlCAMsg == 1 then
ggRes = ggRes'\n'sqlCaMsg()'\n'sqlCaMsg(sqlCa2Rx(sqlCa))
end
ggSt = 'SQL.HOST'
ggVa = 'SQL.HOST.VAR'
ggBe = 'SQL.HOST.BEF'
call sqlHostVars ggSqlStmt, 12, ggSt
if datatype(sqlErrd.5, 'n') & sqlErrd.5 > 0 then do
ggW1 = translate(word(ggSqlStmt, 1))
ggW2 = translate(word(ggSqlStmt, 2))
if ggW1 == 'PREPARE' then
ggVV = sqlHostVarFind(ggSt, 'FROM')
else if ggW1 ggW2 == 'EXECUTE IMMEDIATE' then
ggVV = sqlHostVarFind(ggSt, 1)
else
ggVV = ''
if ggVV == '' then
ggRes = ggRes || sqlMsgSrcPos(ggSqlStmt, sqlErrd.5)
else
ggRes = ggRes || sqlMsgSrcPos(value(ggVV), sqlErrd.5)
end
ggRes = ggRes'\nstmt =' sqlShorten(ggSqlStmt, 2000, sqlErrd.5)
ggPref = '\nwith'
do ggXX=1 to m.ggSt.0
ggRes = ggRes || ggPref m.ggBe.ggXX ':'m.ggVa.ggXX ,
'=' value(m.ggVa.ggXX)
ggPref = '\n '
end
if m.sqlSuMsg == 1 | (m.sqlSuMsg == 2 & m.sql.conHost \== '') then
ggRes = ggRes'\nsubsys =' m.sql.conDbSys ,
|| ', host =' m.sql.conHost', interfaceType' m.sql.conType
return ggRes
endSubroutine sqlMsg
sqlShorten: procedure expose m.
parse arg txt, maxL, pos
if length(txt) <= maxL then
return txt
if \ datatype(pos, 'n') | pos < 1 then
pos = 1
ex = pos + min(60, maxL%7)
if ex <= maxL - 4 then
return left(txt, maxL-4) '...'
if ex >= length(txt) then
return left(txt, 67) '...\n'substr(txt, length(txt)-maxL+72)
else
return left(txt, 67) '...\n'substr(txt, ex-maxL+76, maxL-75) ,
'...'
endProcedure sqlShorten
/*--- use dsnTiar to translate sql Info to error text ----------------*/
sqlDsnTiar: procedure expose m.
parse arg ca
if -438 = sqlCa2Rx(ca) then
return '\nSQLCODE = -438:',
'APPLICATION RAISED ERROR WITH sqlState' sqlState ,
'and DIAGNOSTIC TEXT:' sqlErrMc
liLe = 78
msLe = liLe * 10
msg = d2c(msLe,2) || left('', msLe)
len = d2c(liLe, 4)
ADDRESS LINKPGM "DSNTIAR ca msg len"
if rc = 0 then nop
else if rc = 4 then say 'warn linkPgm dsnTiar rc' rc 'sqlCa' ca
else call err 'linkPgm dsnTiar rc' rc 'sqlCa' ca
res = strip(substr(msg, 13, liLe-10))
cx = pos(', ERROR: ', res)
if cx > 0 then
res = left(res, cx-1)':' strip(substr(res, cx+9))
do c=3+liLe by liLe to msLe while substr(msg, c, 10) = ''
res = res'\n 'strip(substr(msg, c+10, liLe-10))
end
return res
endProcedure sqlDsnTiar
/*--- format all rexx sqlCa fields into a message --------------------*/
sqlCaMsg:
return 'sqlCode' sqlCode 'sqlState='sqlState ,
'\n errMC='translate(sqlErrMc, ',', 'ff'x) ,
'\n warnings='sqlWarnCat('+') 'erP='sqlErrP ,
'\n errD.1='sqlErrD.1 '2='sqlErrD.2 '3='sqlErrD.3 ,
'\n errD.4='sqlErrD.4 '5='sqlErrD.5 '6='sqlErrD.6
endProcedure sqlCaMsg
/*--- format the sqlCA into the dsnTiar SQLCA ------------------------*/
sqlRx2Ca: procedure expose m. ,
sqlCode sqlErrMc sqlErrP sqlErrD. sqlWarn. sqlState
if \ (datatype(sqlcode, 'n') & datatype(sqlErrD.1, 'n') ,
& datatype(sqlErrD.3, 'n')) then
return err('sqlCode etc. not numeric\nsqlCa =' sqlCaMsg())
if digits() < 10 then
numeric digits 10
sqlCa = 'SQLCA ' || d2c(136, 4) || d2c(sqlCode, 4) ,
|| d2c(min(70, length(sqlErrMc)), 2)left(sqlErrMc, 70) ,
|| left(sqlErrP, 8) ,
|| d2c(sqlErrD.1, 4)d2c(sqlErrD.2, 4)d2c(sqlErrD.3, 4) ,
|| d2c(sqlErrD.4, 4)d2c(sqlErrD.5, 4)d2c(sqlErrD.6, 4) ,
|| sqlWarnCat() || sqlState
if length(sqlCa) <> 136 then
call err 'sqlCa length' length(sqlCa) 'not 136' ,
'\n'sqlCaMsg() '==>' ca', hex='c2x(ca)
return sqlCa
endProcedure sqlRx2Ca
/*--- extract the fields from the SqlCA and put it to rexx vars ------*/
sqlCA2Rx: procedure expose m. ,
sqlCode sqlErrMc sqlErrP sqlErrD. sqlWarn. sqlState
parse arg ca
numeric digits 10
if length(ca) < 136 | c2d(substr(ca, 9, 4), 4) <> 136 then
call err 'bad sqlCa len' length(ca) 'not 136:' ca', hex='c2x(ca)
sqlCode = c2d(substr(ca, 13 ,4), 4)
sqlErrMC = substr(ca, 19, c2d(substr(ca, 17, 2), 2))
sqlErrP = substr(ca, 89, 8)
do ix=1 to 6
sqlErrD.ix = c2d(substr(ca, 93 + 4 * ix, 4), 4)
end
do ix=0 to 10
sqlWarn.ix = substr(ca, 121 + ix, 1)
end
sqlState = substr(ca, 132, 5)
return sqlCode
endProcedure sqlCA2Rx
/*--- concat the sql warnings with Separator sep --------------------*/
sqlWarnCat: procedure expose m. sqlWarn.
parse arg sep
return sqlWarn.0 || sep,
|| sqlWarn.1||sqlWarn.2||sqlWarn.3||sqlWarn.4||sqlWarn.5||sep ,
|| sqlWarn.6||sqlWarn.7||sqlWarn.8||sqlWarn.9||sqlWarn.10||sep
endProcedure sqlWarnCat
/*--- make the text for sqlWarnings ----------------------------------*/
sqlMsgWarn: procedure expose m. sqlWarn.
r = ''
text =' 1=W var truncated, 1=S scrollable, 1=N nonScrollable,' ,
'2=W nulls in aggregate,' ,
'3=W more cols than vars,' ,
'3=Z more result sets than locators,' ,
'4=W no where, 4=D sensitive dynamic, 4=I insensitive,' ,
'4=S sensitive static,' ,
'5=W not valid sql, 5=1 readOnly, 5=2 readDelete,' ,
'5=3 readDeleteUpdate,' ,
'6=W day changed to month range,' ,
'7=W dec digits truncated,' ,
'8=W char substituted,' ,
'9=W arith excep in count, 9=Z multipe result sets,' ,
'10=W char conversion err in ca,'
do wx = 1 to 10
w = sqlWarn.wx
if w = ' ' then
iterate
t = wx'='w
cx = pos(' 'wx'='w' ', text)
ex = pos(',' , text, cx + 1)
if cx > 0 & ex > cx then
r = r substr(text, cx+1, ex-cx)
else
r = r wx'='w '?,'
end
r = strip(r, 't', ',')
if r = '' & sqlwarn.0 <> '' then
call err 'sqlWarn.0='sqlWarn.0 'but all warns empty'
return r
endProcedure sqlMsgWarn
/*--- show in the source src the point pos (where error occured)
a few lines from src around pos and arrow to pos ----------*/
sqlMsgSrcPos: procedure expose m.
parse arg src, pos
liLe = 68
liCn = 3
afLe = 25
t1 = space(left(src, pos), 1)
t2 = left(' ', substr(src, pos, 1) == ' ' ,
| substr(src, pos+1, 1) == ' ') ,
|| space(substr(src, pos+1), 1)
afLe = min(afLe, length(t2))
if length(t1) + afLe > liLe * liCn then
t1 = '...'right(t1, liLe * liCn - afLe -3)
else if length(t1)+length(t2) > liLe then
t1 = left(' ', (liCn * liLe - length(t1) -afLe) // liLe)||t1
pL = length(t1) // liLe
if length(t2) <= liLe-pL then
tx = t1 || t2
else
tx = t1 || left(t2, liLe-pL-3)'...'
res = '\nsrc' strip(substr(tx, 1, liLe), 't')
do cx=1+liLe by liLe to length(tx)
res = res || '\n +' strip(substr(tx, cx, liLe), 't')
end
loc = 'pos' pos 'of' length(src)
if length(loc)+6 < pL then
return res'\n >' right('>>>'loc'>>>', pL)
else
return res'\n >' left('', pL-1)'<<<'loc'<<<'
endProcdedure sqlMsgSrcPos
/*--- get the hostVars in the sql in src and the word before ---------*/
sqlHostVars: procedure expose m.
parse arg src, cnt, st
cx = 1
sx = 0
do cnt
cx = pos(':', src, cx) + 1
if cx < 2 then
leave
if pos(substr(src, cx, 1), m.ut.alfRexN1) > 0 then
iterate
ex = verify(src, m.ut.alfRex, 'n', cx)
sx = sx + 1
if ex < 1 then
m.st.var.sx = substr(src, cx)
else
m.st.var.sx = substr(src, cx, ex - cx)
if m.st.var.sx == '' | length(m.st.var.sx) > 100 then
iterate
/* search word before */
do bE = cx-2 by -1 to 1 ,
while substr(src, bE, 1) == ' '
end
do bB = bE by -1 to max(1, bE-20),
while pos(substr(src, bB, 1), m.ut.alfa) > 0
end
if bB < bE & bB >= 0 then
m.st.bef.sx = substr(src, bB+1, bE-bB)
else
m.st.bef.sx = ''
end
m.st.0 = sx
return sx
endProcedure sqlHostVars
/*--- find the name of hostvar, by index or by before ----------------*/
sqlHostVarFind: procedure expose m.
parse arg st, fnd
if datatype(fnd, 'n') & fnd <= m.st.0 then
return m.st.var.fnd
do ix=1 to m.st.0
if translate(m.st.bef.ix) = fnd then
return m.st.var.ix
end
return ''
endSubroutine sqlHostVarFind
/* copy sqlRx end **************************************************/
/* copy j begin *******************************************************
the j framework
jReset
jOpen
jClose
jRead
jWrite
***********************************************************************/
jRead: procedure expose m.
parse arg m, var
met = objMet(m, 'jRead')
if m.m.jReading then
interpret met
else
return err('jRead('m',' var') but not opened r')
endProcedure jRead
jReadO: procedure expose m.
parse arg m
if arg() > 1 then call err '??? old interface'
met = objMet(m, 'jReadO')
if m.m.jReading then
interpret met
else
return err('jReadO('m',' var') but not opened r')
endProcedure jReadO
jWrite: procedure expose m.
parse arg m, line
met = objMet(m, 'jWrite')
if \ m.m.jWriting then
return err('jWrite('m',' line') but not opened w')
interpret met
return
endProcedure jWrite
jWriteO: procedure expose m.
parse arg m, var
met = objMet(m, 'jWriteO')
if \ m.m.jWriting then
return err('jWriteO('m',' var') but not opened w')
interpret met
return
endProcedure jWriteO
jWriteAll: procedure expose m.
parse arg m, rdr
rdr = o2file(rdr)
met = objMet(m, 'jWriteAll')
if \ m.m.jWriting then
return err('jWriteAll('m',' rdr') but not opened w')
interpret met
return
endProcedure jWriteAll
jWriteNow: procedure expose m.
parse arg m, rdr
rdr = o2file(rdr)
interpret objMet(m, 'jWriteNow')
return
endProcedure jWriteNow
jCat: procedure expose m.
parse arg opt m
if m = '' then do
m = opt
opt = m.j.cWri
end
call jOpen m, opt
do ax=2 to arg()
call jWriteAll m, arg(ax)
end
call jClose m
return m
endProcedure jCat
jWriteNowImpl: procedure expose m.
parse arg m, rdr
call jOpen rdr, m.j.cRead
do while jRead(rdr, line)
call jWrite m, m.line
end
call jClose rdr
return
endProcedure jWriteNow
jWriteNowImplO: procedure expose m.
parse arg m, rdr
call jOpen rdr, m.j.cRead
do while assNN('li', jReadO(rdr))
call jWriteO m, li
end
call jClose rdr
return
endProcedure jWriteNow
/*--- reset JRW: fail if open, initialise ---------------------------*/
jReset: procedure expose m.
parse arg m, arg, arg2, arg3
if m.m.jReading == 1 | m.m.jWriting == 1 then
return err('still open jReset('m',' arg2')')
m.m.jReading = 0
m.m.jWriting = 0
m.m.jUsers = 0
interpret objMet(m, 'jReset')
return m
endProcedure jReset
jOpen: procedure expose m.
parse arg m, opt
met = objMet(m, 'jOpen')
oUsers = m.m.jUsers
if opt = m.j.cRead then do
if m.m.jReading then
nop
else if m.m.jWriting then
return err('already opened for writing jOpen('m',' opt')')
else do
interpret met
m.m.jReading = 1
end
end
else if \ abbrev('>>', opt, 1) then do
return err('bad option' opt 'in jOpen('m',' opt')')
end
else do
if m.m.jWriting then
nop
else if m.m.jReading then
return err('already opened for reading jOpen('m',' opt')')
else do
interpret met
m.m.jWriting = 1
end
end
m.m.jUsers = oUsers + 1
return m
endProcedure jOpen
jClose: procedure expose m.
parse arg m
met = objMet(m, 'jClose')
oUsers = m.m.jUsers
if oUsers = 1 then do
interpret met
m.m.jReading = 0
m.m.jWriting = 0
end
else if oUsers < 1 then
call err 'jClose' m 'but already closed'
m.m.jUsers = oUsers - 1
return m
endProcedure jClose
/*--- cat the lines of the file together, with mid between lines,
fail if not all lines are strings -------------------*/
jCatLines: procedure expose m.
parse arg m, fmt
if abbrev(fmt, '-sql') then
return jCatSql(m, substr(fmt, 5))
else
fmt = '%s%qn %s%qe%q^'fmt
call jOpen m, m.j.cRead
if \ jRead(m, line) then do
call jClose m
return ''
end
res = f(fmt, m.line)
do while jRead(m, line)
res = res || f(fmt'%Qn', m.line)
end
call jClose m
return res || f(fmt'%Qe')
endProcedure jCatLines
/*--- cat the line of a file, using comments
fixline (with token wrapping) or separate lines -------*/
jCatSql: procedure expose m.
parse arg m, fLen
call jCatSqlReset m'.JCATSQL', , jOpen(m, '<'), fLen
res = jCatSqlNext(m'.JCATSQL')
call jClose m
return res
endProcedure jCatSql
jCatSqlReset: procedure expose m.
parse arg m, aSrc, m.m.rdr, m.m.fLen
call jCatSqlNL m, aSrc
return m
endProcedure jCatSqlReset
jCatSqlNL: procedure expose m.
parse arg m
if m.m.rdr \== '' then
if jRead(m.m.rdr, m'.SRC') then do
if m.m.fLen \== '' then
m.m.src = left(m.m.src, m.m.fLen)
else if m.m.src == '' then
m.m.src = ' '
else if substr(m.m.src, length(m.m.src), 1) \== ' ' then
m.m.src = m.m.src' '
m.m.pos = 1
return 1
end
m.m.pos = length(m.m.src)+1
return 0
endProcedure jCatSqlNl
jCatSqlNext: procedure expose m.
parse arg m, stop
sta = 'tt'
res = ''
do forever
do while scanSBEnd(m)
if \ jCatSqlNl(m) then
return strip(res)
end
bx = m.m.pos
sta = scanSql2Stop(m, sta, stop)
s1 = left(sta, 1)
if pos(s1, stop) > 0 then do
if res <> '' then
return strip(res)
end
else if s1 == '-' | s1 == '/' then
res = res' '
else if pos('/', sta) = 0 then
res = res || substr(m.m.src, bx, m.m.pos - bx)
end
/*-------- ?????????????????????
jCatSqlNext?: procedure expose m.
parse arg m, stop
res = ''
bx = m.m.pos
do forever
call scanUntil m, '"''-/'stop
if scanSBEnd(m) then do
res = res || substr(m.m.src, bx)
bx = 0
end
else if substr(m.m.src, m.m.pos, 2) = '--' then do
res = res || substr(m.m.src, bx, m.m.pos-bx)' '
bx = 0
end
else if substr(m.m.src, m.m.pos, 2) = '/*' then do
res = res || substr(m.m.src, bx, m.m.pos-bx)' '
do forever
px = pos('*/', m.m.src, m.m.pos)
if px > 0 then
leave
if \ jCatSqlNL(m) then
return res
end
bx = px+2
m.m.pos = bx
end
else if scanLit(m, "'", '"') then do
c1 = m.m.tok
do while \ scanStrEnd(m, c1)
res = res || substr(m.m.src, bx)
if m.m.fLen \== '' then
if jCatSqlNl(m) then do
bx = m.m.pos
iterate
end
call err 'unclosed' c1 'string:' m.m.src
end
end
else if pos(substr(m.m.src, m.m.pos, 1), stop) > 0 then do
res = strip(res||substr(m.m.src, bx, m.m.pos-bx), 't')
call scanChar m, 1
if res <> '' then
return strip(res)
bx = m.m.pos
end
else if \ scanLit(m, '-', '/') then do
call err 'bad char at' substr(m.m.src, m.m.pos) 'in' m.m.src
end
if bx = 0 then
if jCatSqlNl(m) then
bx = m.m.pos
else
return strip(res)
end
endProcedure jCatSqlNext
??????????????*/
jIni: procedure expose m.
if m.j.ini == 1 then
return
m.j.ini = 1
m.j.cRead = '<'
m.j.cWri = '>'
m.j.cApp = '>>'
call classIni
am = "call err 'call of abstract method"
c1 = classNew('n JRW u ORun, f JREADING v, f JWRITING v', 'm',
, "new return jReset("m.class.basicNew", arg, arg2, arg3)",
, "jRead" am "jRead('m',' var')'" ,
, "jReadO if \ jRead(m, 'J.GGVAR') then return '';",
"return s2o(m.j.ggVar)" ,
, "jWrite" am "jWrite('m',' line')'" ,
, "jWriteO call jWrite(m, o2string(var))" ,
, "jWriteAll call jWriteNowImpl m, rdr",
, "jWriteNow call jWriteNowImpl m, rdr",
, "jReset",
, "jOpen" am" jOpen('m',' opt')'" ,
, "jClose" ,
, "oRun call pipeWriteAll m",
, "o2String return jCatLines(m, fmt)",
, "o2File return m")
m.class.forceDown.c1 = c1'#new'
c2 = classNew('n JRWDeleg u JRW', 'm',
, "new return jReset("m.class.basicNew", arg)",
, "jRead return jRead(m.m.deleg, var)" ,
, "jReadO return jReadO(m.m.deleg)" ,
, "jWrite call jWrite(m.m.deleg, line)" ,
, "jWriteO call jWrite(m.m.deleg, var)" ,
, "jWriteAll call jWriteAll m.m.deleg, rdr",
, "jWriteNow call jWriteNow m.m.deleg, rdr",
, "jReset if arg \== '' then m.m.deleg = arg;",
"else call jReset m.m.deleg;",
, "jOpen call jOpen m.m.deleg,' opt; return m" ,
, "jClose call jClose m.m.deleg; return m" )
m.class.forceDown.c2 = c2'#new'
call classNew 'n JRWO u JRW', 'm',
, "jRead res = jReadO(m); if res == '' then return 0;" ,
"m.var = o2string(res); return 1" ,
, "jReadO" am "jReadO('m')'" ,
, "jWrite call jWriteO(m, s2o(var))" ,
, "jWriteO" am "jWriteO('m',' line')'",
, "jWriteAll call jWriteNowImplO m, rdr",
, "jWriteNow call jWriteNowImplO m, rdr",
am = "call err 'call errObject"
call classNew 'n JRWErr u JRW', 'm',
, "jWriteAll" er "jWriteAll 'm', rdr'",
, "jWriteNow" er "jWriteNow 'm', 'rdr'",
, "jClose" er "jClose 'm'"
call classNew 'n JSay u JRW', 'm',
, "jWrite say line" ,
, "jWriteO call classOut , var, 'outO: '",
, "jOpen if \ abbrev(opt, m.j.cWri) then",
"call err 'can only write JSay.jOpen('m',' opt')';" ,
"else m.m.jWriting = 1"
call classNew 'n JStem u JSay', 'm',
, "jReset m.m.stem = arg;",
"if \ dataType(m.arg.0, 'n') then m.arg.0 = 0" ,
, "jWrite call mAdd m.m.stem, line"
call classNew 'n JRWEof u JRW', 'm',
, "jRead drop m.var; return 0",
, "jOpen if pos('>', opt) > 0 then",
"call err 'can only read JRWEof.jOpen('m',' opt')';" ,
"else m.m.jReading = 1"
m.j.in = jOpen(oNew('JRWEof'), m.j.cRead)
m.j.errRead = "return err('jRead('m',' var') but not opened r')"
m.j.errReadO = "return err('jReadO('m',' var') but not opened r')"
m.j.errWrite = "return err('jWrite('m',' line') but not opened w')"
m.j.errWriteO= "return err('jWriteO('m',' var') but not opened w')"
call classNew "n JBuf u JRWO, f BUF s r", "m",
, "jOpen call jBufOpen m, opt",
, "jClose call oMutatName m, 'JBuf'",
, "jReset call jBufReset m, arg",
, "jRead" m.j.errRead ,
, "jReadO" m.j.errReadO ,
, "jWrite" m.j.errWrite ,
, "jWriteO" m.j.errWriteO
call classNew "n JBufOR u JBuf", "m",
, "jRead return jBufORead(m, var)",
, "jReadO return jBufOReadO(m)"
call classNew "n JBufSR u JBuf", "m",
, "jRead return jBufSRead(m, var)",
, "jReadO return jBufSReadO(m)"
call classNew "n JBufOW u JBuf", "m",
, "jWrite call jBufOWrite m, line",
, "jWriteO call jBufOWriteO m, var"
call classNew "n JBufSW u JBuf", "m",
, "jWrite call jBufSWrite m, line",
, "jWriteO call jBufSWriteO m, var"
call classNew "n JBufTxt u JBuf, f MAXL v ", "m",
, "jReset call jBufReset m, arg; m.m.maxl = 80",
, "jWriteO call jBufWrite m, o2Text(var, m.m.maxl)"
return
endProcedure jIni
/*--- return a JRW from rdr or in ------------------------------------*/
j2Rdr: procedure expose m.
parse arg rdr
if oStrOrObj(rdr, m.j.in) then
return jBuf(ggStr)
else
return o2file(ggObj)
endProcedure j2Rdr
/* jstr is part of out interface --> inp2str */
inp2str: procedure expose m.
parse arg rdr, fmt
if oStrOrObj(rdr, m.j.in) then
return ggStr
else
return o2String(ggObj, fmt)
endProcedure inp2str
j2Buf: procedure expose m.
parse arg rdr
if oStrOrObj(rdr, m.j.in) then
return jBuf(ggStr)
if oClaInheritsOf(ggCla, 'JBuf') & m.ggObj.jUsers < 1 then
return ggObj
b = jOpen(jBuf(), m.j.cWri)
call jWriteNow b, o2File(ggObj)
return jClose(b)
endProcedure j2Buf
in: procedure expose m.
parse arg arg
return jRead(m.j.in, arg)
endProcedure in
inO: procedure expose m.
if arg() > 0 then call err '??? old interface'
return jReadO(m.j.in)
endProcedure in
out: procedure expose m.
parse arg line
call jWrite m.j.out, line
return 0
endProcedure out
outO: procedure expose m.
parse arg arg
call jWriteO m.j.out, arg
return
endProcedure outO
JRWDeleg: procedure expose m.
parse arg arg
return oNew('JRWDeleg', arg)
endProcedure JRWDeleg
/*--- jBuf: buffer read or write (supports datataypes) ---------------*/
jBuf: procedure expose m.
m = oNew('JBuf') /* calls jBufReset */
do ax=1 to arg()
m.m.buf.ax = arg(ax)
end
m.m.buf.0 = ax-1
m.m.allS = 1
return m
endProcedure jBuf
/*--- jBuf: buffer read or write (supports datataypes) ---------------*/
jBufTxt: procedure expose m.
m = oNew('JBufTxt') /* calls jBufReset */
do ax=1 to arg()
m.m.buf.ax = arg(ax)
end
m.m.buf.0 = ax-1
m.m.allS = 1
return m
endProcedure jBufTxt
jBufReset: procedure expose m.
parse arg m
m.m.stem = m'.BUF'
do ax=1 to arg() - 1
m.m.buf.ax = arg(ax+1)
end
m.m.buf.0 = ax-1
m.m.allS = 1
return m
endProcedure jBufReset
jBufOpen: procedure expose m.
parse arg m, opt
if opt == m.j.cRead then do
m.m.readIx = 0
if m.m.allS then
call oMutatName m, 'JBufSR'
else
call oMutatName m, 'JBufOR'
return m
end
if opt == m.j.cWri then do
m.m.buf.0 = 0
m.m.allS = 1
end
else if opt \== m.j.cApp then
call err 'jBufOpen('m',' opt') with bad opt'
if m.m.allS then
call oMutatName m, 'JBufSW'
else
call oMutatName m, 'JBufOW'
return m
endProcedure jBufOpen
jBufOWrite: procedure expose m.
parse arg m, line
call mAdd m'.BUF', s2o(line)
return
endProcedure jBufOWrite
jBufSWrite: procedure expose m.
parse arg m, line
call mAdd m'.BUF', line
return
endProcedure jBufWrite
jBufWriteStem: procedure expose m.
parse arg m, st
ax = m.m.buf.0
if m.m.allS then do
do sx=1 to m.st.0
ax = ax + 1
m.m.buf.ax = m.st.sx
end
end
else do
do sx=1 to m.st.0
ax = ax + 1
m.m.buf.ax = o2String(m.st.sx)
end
end
m.m.buf.0 = ax
return m
endProcedure jBufWrite
jBufOWriteO: procedure expose m.
parse arg m, ref
call mAdd m'.BUF', ref
return
endProcedure jBufOWriteO
jBufSWriteO: procedure expose m.
parse arg m, ref
cl = objClass(ref)
if cl = m.class.classV then do
call mAdd m'.BUF', m.ref
return
end
if cl == m.class.classW then do
call mAdd m'.BUF', substr(ref, 2)
return
end
do ax=1 to m.m.buf.0
m.m.buf.ax = s2o(m.m.buf.ax)
end
m.m.allS = 0
call oMutatName m, 'JBufOW'
call mAdd m'.BUF', ref
return
endProcedure jBufWriteO
jBufOReadO: procedure expose m.
parse arg m
nx = m.m.readIx + 1
if nx > m.m.buf.0 then
return ''
m.m.readIx = nx
return m.m.buf.nx
endProcedure jBufOReadO
jBufSReadO: procedure expose m.
parse arg m
nx = m.m.readIx + 1
if nx > m.m.buf.0 then
return ''
m.m.readIx = nx
return s2o(m.m.buf.nx)
endProcedure jBufSReadO
jBufORead: procedure expose m.
parse arg m, var
nx = m.m.readIx + 1
if nx > m.m.buf.0 then
return 0
m.m.readIx = nx
m.var = o2String(m'.BUF.'nx)
return 1
endProcedure jBufORead
jBufSRead: procedure expose m.
parse arg m, var
nx = m.m.readIx + 1
if nx > m.m.buf.0 then
return 0
m.m.readIx = nx
m.var = m.m.buf.nx
return 1
endProcedure jBufRead
jBufTxtWriteO: procedure expose m.
parse arg m, ref
if m.m.allS \== 1 then
call err '1 \== allS' m.m.allS 'in jBufTxtWriteO('m',' ref')'
cl = objClass(ref, '?')
if cl = m.class.classV then
call mAdd m'.BUF', m.ref
else if cl == m.class.classW then
call mAdd m'.BUF', substr(ref, 2)
else if ref == '' then
call mAdd m'.BUF', '@ null object'
else if cl == '?' then
call mAdd m'.BUF', '@'ref 'class=???'
else do
l = '@'ref 'class='className(cl)
ff = oFlds(ref)
do fx=1 to m.ff.0 while length(l) < m.m.maxl + 3
if m.ff.fx == '' then
l = l', .='m.ref
else do
f1 = substr(m.ff.fx, 2)
l = l',' f1'='m.ref.f1
end
end
if length(l) > m.m.maxl then
l = left(l, m.m.maxl-3)'...'
call mAdd m'.BUF', l
end
return
endProcedure jBufTxtWriteO
/* copy j end *********************************************************/
/* copy o begin ******************************************************
an object is register for a class in o2c
a class has a list of parents in cParent
a class has a methodTable cMet with lazy initialization
if the parent is class OLazyMet, a methof found there is
a method generator
otherwise an existing method is simply copied
***********************************************************************/
oIni: procedure expose m.
if m.o.ini == 1 then
return
m.o.ini = 1
call mIni
m.o.escW = '!'
m.o.lazyGen = 'OLazyMetGen' /* lazy method generator */
call oAddCla m.o.lazyGen
return
endProcedure oIni
/*--- return whether cl is a currently defined class ----------------*/
oIsCla: procedure expose m.
parse arg cl
return symbol('m.o.cParent.cl') == 'VAR'
endProcedure oIsCla
/*--- add class cl with the given parents ---------------------------*/
oAddCla: procedure expose m.
parse arg cl, parents
if verifId(cl, '.') > 0 | pos('.', cl) <> lastPos('.', cl) then
call err 'bad class name' cl 'in oAddCla('cl',' parents')'
if oIsCla(cl) then
call err 'duplicate class' cl 'in oAddCla('cl',' parents')'
do px=1 to words(parents)
if \ oIsCla(word(parents, px)) then
call err word(parents, px) 'is no class' ,
'in oAddCla('cl',' parents')'
end
m.o.cParent.cl = parents
return
endProcedure oAddCla
/*--- add to class cl method met ------------------------------------*/
oAddMet: procedure expose m.
parse arg cl, met, cont
if \ oIsCla(cl) then
call err 'undefined class' cl 'in oAddMet('cl',' met',' cont')'
if symbol('m.o.cMet.cl.met') == 'VAR' then
call err 'duplicate method' met 'in oAddMet('cl',' met',' cont')'
m.o.cMet.cl.met = cont
return
endProcedure oAddMet
/*--- create an an object of the class className
and call it's new method ------------------------------------*/
oNew: procedure expose m.
parse arg cl, arg, arg2, arg3
if symbol('m.o.cParent.cl') \== 'VAR' then
cl = class4name(cl)
interpret oClaMet(cl, 'new')
endProcedure oNew
/*--- return the class of object obj --------------------------------*/
objClass: procedure expose m.
parse arg m
if symbol('m.o.o2c.m') == 'VAR' then
return m.o.o2c.m
else if abbrev(m, m.o.escW) then
return m.class.classW
else if arg() >= 2 then
return arg(2)
else
return err('no class found for object' m)
endProcedure objClass
oKindOf: procedure expose m.
parse arg obj, sup
cl = objClass(obj, '')
if cl == '' then
return 0
return oClaInheritsOf(cl, sup)
endProcedure oKindOf
oClaInheritsOf: procedure expose m.
parse arg cl, sup /* wkTst optimierung in classAdded */
if symbol('m.o.cParent.cl') \== 'VAR' then
cl = class4name(cl)
if symbol('m.o.cParent.sup') \== 'VAR' then
sup = class4name(sup)
if cl == sup then
return 1
do sx=1 to words(m.o.cParent.cl)
if oClaInheritsOf(word(m.o.cParent.cl, sx), sup) then
return 1
end
return 0
endProcedure oClaInheritsOf
/*--- return the code of method me of object m
set m to the address and ggClass to the class ---------------*/
objMet: procedure expose m. m ggClass
parse arg m, me
if symbol('m.o.o2c.m') == 'VAR' then
ggClass = m.o.o2c.m
else if abbrev(m, m.o.escW) then
ggClass = "w"
else if arg() >= 3 then
return arg(3)
else
return err('no class found for object' m)
if symbol('m.o.cMet.ggClass.me') == 'VAR' then
return m.o.cMet.ggClass.me
code = oClaMet(ggClass, me, '---')
if code \== '---' then
return code
else if arg() >= 3 then
return arg(3)
return err('no method' me 'in class' className(ggClass) ,
'of object' m)
endProcedure objMet
oClaMet: procedure expose m.
parse arg cl, me
if symbol('m.o.cMet.cl.me') == 'VAR' then
return m.o.cMet.cl.me
if \ oIsCla(cl) then do
c2 = class4Name(cl, '')
if c2 \== '' & oIsCla(c2) then do
cl = c2
if symbol('m.o.cMet.cl.me') == 'VAR' then
return m.o.cMet.cl.me
end
else do
if arg() >= 3 then
return arg(3)
else
return err('no class' cl 'in oClaMet('cl',' me')')
end
end
code = oLazyMetGen(m.o.lazyGen, cl, me)
do px = 1 to words(m.o.cParent.cl) while code == '---'
code = oClaMet(word(m.o.cParent.cl, px), me, '---')
end
if code == '---' then do
if arg() >= 3 then
return arg(3)
else
return err('no met' me 'in class' cl)
end
m.o.cMet.cl.me = code
return code
endProcedure oClaMet
oLazyMetGen: procedure expose m.
parse arg lg, cl, me
if symbol('m.o.cMet.lg.me') \== 'VAR' then
return '---'
interpret m.o.cMet.lg.me
endProcedure oLazyMetGen
/*--- return the stem of fieldnames of object m ---------------------*/
oFlds: procedure expose m.
parse arg m
return objMet(m, 'oFlds')
endProcedure oFlds
/*--- return the contents of field f navigation along path ----*/
oGet: procedure expose m.
parse arg obj, path, clazz
nullNew = 0
ret = oAccPath(obj, path, clazz)
if ret == 1 then
ret = oAccStr(m, cl)
if ret == 1 then
return str
return err(ret 'in oGet('obj',' path')')
endProcedure oGet
oAccStr: procedure expose m. str
parse arg m, cl
if cl == m.class.classV then
str = m.m
else if m.cl.valueCl == '' then
return 'no value @' m 'class' className(cl)
else if m.m == '' then
return 'null @' m 'class' className(cl)
else if abbrev(m, m.o.escW) then
str = substr(m ,2)
else
str = o2String(m.m)
return 1
endProcedure oAccStr
oGetO: procedure expose m.
parse arg obj, path, opt, clazz
nullNew = pos('n', opt) > 0
ret = oAccPath(obj, path, clazz)
if ret == 1 then
ret = oAccO(m, cl, opt)
if ret == 1 then
return ref
else
return err(ret 'in oGetO('obj',' path')')
endProcedure oGetO
oAccO: procedure expose m. ref
parse arg m, cl, opt
if cl == m.class.classV then do
ref = s2o(m.m)
end
else if m.cl \== 'r' then do
ref = m
end
else if m.m == '' then do
if opt == '-b' then do
m.m = jBuf()
end
else if opt == '-n' then do
rsn = oRefSetNew(m, cl)
if rsn \==1 then
return rsn
end
ref = m.m
end
else if objClass(m.m, 0) \== 0 then do
ref = m.m
end
else do
return 'no class for' m.m '@' m 'class' cl
end
return 1
endProcedure oAccO
oPut: procedure expose m.
parse arg obj, path, str
nullNew = 1
res = oAccPath(obj, path)
if res == 1 then
res = ocPut(m, cl, str)
if res == 1 then
return str
return err(res 'in oPut('obj',' path',' str')')
endProcedure oPut
ocPut: procedure expose m.
parse arg m, cl, str
if m.cl.valueCl == m.class.classV then
m.m = str
else if m.cl.valueCl \== '' then
m.m = s2o(str)
else
return 'no value @' m 'class' className(cl)
return 1
endProcedure ocPut
oPutO: procedure expose m.
parse arg obj, path, ref
nullNew = 1
res = oAccPath(obj, path)
if res == 1 then
res = ocPutO(m, cl, ref)
if res == 1 then
return ref
return err(ret 'in oPut('obj',' path',' ref')')
endProcedure oPutO
ocPutO: procedure expose m.
parse arg m, cl, ref
if m.cl.valueCl == m.class.classV then
m.m = o2string(ref)
else if m.cl.valueCl \== '' then
m.m = ref
else if m.cl.stemCl \== '' then
return 'implement put to stem'
else
return 'no value @' m 'class' className(cl)
return 1
endProcedure ocPutO
oClear: procedure expose m.
parse arg m
interpret objMet(m, 'oClear')
return m
endProcedure oClear
oClaClear: procedure expose m.
parse arg cla, m
interpret "drop cla;" oClaMet(cla, 'oClear')
return m
endProcedure oClaClear
oAccPath: procedure expose m. m cl nullNew
parse arg m, pa, cl
if cl == '' & m \== '' then do
cl = objClass(m)
end
if pa == '' then
return 1
call oClaMet cl, 'oFlds'
if abbrev(pa, m.class.cRef) ,
| (\ m.cl.hasFlds & abbrev(pa, m.class.cNav)) then do
if pa == m.class.cRef & m.cl.valueCl == m.class.classV then do
cl = m.class.classV
return 1
end
if (m.cl.valueCl == '' | m.cl.valueCl == m.class.classV) ,
& m.cl \== 'r' then
return 'no reference @' m 'class' cl
if m.m = '' then do
if \ nullNew then
return 'null @' m 'class' className(cl)
rsn = oRefSetNew(m, cl)
if rsn \== 1 then
return rsn
end
return oAccPath(m.m, substr(pa, 2))
end
if pos(left(pa, 1), m.class.cPath) > 0 then
return oAccPath(m, substr(pa, 2), cl)
px = verify(pa, m.class.cPath, 'm')
if px < 1 then
px = length(pa)+1
fn = left(pa, px-1)
pa = substr(pa, px)
if symbol('m.cl.f2c.fn') == 'VAR' then
return oAccPath(m'.'fn, pa, m.cl.f2c.fn)
if m.cl.stemCl=='' | fn=='' | verify(fn, '0123456789','n')>0 then
return 'no field' fn '@' m 'class' className(cl)
if fn == 0 then
return oAccPath(m'.0', pa, m.class.classV)
if abbrev(fn, 0) | verify(m.m.0, '0123456789', 'n') > 0,
| fn > m.m.0 then
return 'bad stem index' fn'>'m.m.0 '@' m 'class' className(cl)
return oAccPath(m'.'fn, pa, m.cl.stemCl)
endProcedure oAccPath
oRefSetNew: procedure expose m.
parse arg m, cl
cr = m.cl.valueCl
if m.cr.class = '' then
return 'no class for null @' m 'class' className(cl)
if m.cr.class = m.class.classW then
m.m = o2s()
else if m.cr \== 'r' then
return 'class' className(cl) 'not ref'
else
m.m = oNew(m.cr.class)
return 1
endProcedure oRefSetNew
/*--- mutate object m to the class cl -------------------------------*/
oMutate: procedure expose m.
parse arg m, cl
m.o.o2c.m = cl
return m
endProcedure oMutate
/*--- mutate object m to the class named name -----------------------*/
oMutatName: procedure expose m.
parse arg m, nm
m.o.o2c.m = class4Name(nm)
return m
endProcedure oMutatName
/*--- copy object m of class cl to t --------------------------------*/
oClaCopy: procedure expose m.
parse arg cl, m, t
interpret "drop cl;" oClaMet(cl, 'oCopy')
endProcedure oClaCopy
/*--- copy object m to t / create a new object if t=='' -------------*/
oCopy: procedure expose m.
parse arg m, t
interpret objMet(m, 'oCopy')
endProcedure oCopy
/*--- return a new instance of a subclass of Run
with code code in method oRun -------------------------------*/
oRunner: procedure expose m.
if arg() >= 1 then
r = oNew(classNew('n* ORun u ORun, m oRun' arg(1)))
else
r = oNew(classNew('n| ORun u ORun'))
return r
endProcedure oRunner
/*--- set code for runner -------------------------------------------*/
oRunnerCode: procedure expose m.
parse arg r, code
call classSetMet objClass(r), 'oRun', code
return r
endProcedure oRunnerCode
/*--- run method oRun of object m -----------------------------------*/
oRun: procedure expose m.
parse arg m, arg, arg2, arg3
interpret objMet(m, 'oRun')
return
endProcedure oRun
/*--- run method oRun and return output in new JBuf ------------------*/
oRun2File: procedure expose m.
parse arg rn
b = jBuf()
call pipe '+F' , b
call oRun rn
call pipe '-'
return b
endProcedure oRun2File
/*--- cast the object to a file -------------------------------------*/
o2File: procedure expose m.
parse arg m
interpret objMet(m, 'o2File')
call err 'o2file did not return'
endProcedure o2File
/*--- cast the object to a String -----------------------------------*/
o2String: procedure expose m.
parse arg m, fmt
if opt == '' then
opt = '-b '
interpret objMet(m, 'o2String')
return err('o2String did not return')
endProcedure o2String
/*--- return true if object is kind of String------------------------*/
oStrOrObj: procedure expose m. ggStr ggObj ggCla
parse arg ggObj, def
if ggObj == '' then
ggObj = def
ggCla = objClass(ggObj, '')
if ggCla == '' then do
ggStr = ggObj
ggObj = ''
return 1
end
else if wordPos(ggCla, m.class.classV m.class.classW) > 0 then do
ggStr = o2String(ggObj)
ggObj = ''
return 1
end
else do
ggStr = ''
return 0
end
endProcedure oStrOrObj
/*--- return true if object is kind of String ----- ???? -------------*/
oStrOrFile: procedure expose m. ggStr ggObj ggCla
parse arg m, def
if oStrOrObj(m, def) then
return 1
ggObj = o2File(ggObj)
return 0
endProcedure oStrOrFile
/*--- return a short string representation of an object -------------*/
o2Text: procedure expose m.
parse arg m, maxL
if m == '' then
return '@ null object'
if maxL == '' then
maxL = 80
cl = objClass(m, '?')
if cl = m.class.classV then
l = m.m
else if cl == m.class.classW then
l = substr(m, 2)
else if cl == '?' then
l = '@'m 'class=???'
else do
l = '@'m 'class='className(cl)
ff = oFlds(m)
do fx=1 to m.ff.0 while length(l) < maxL + 3
if m.ff.fx == '' then
l = l', .='m.m
else do
f1 = substr(m.ff.fx, 2)
l = l',' f1'='m.m.f1
end
end
end
if length(l) <= maxL then
return l
return left(l, maxL-3)'...'
endProcedure o2Text
/*--- cast a String to an object -----------------------------------*/
s2o: procedure expose m.
parse arg str
return m.o.escW || str
return r
endProcedure s2o
oIfStr: procedure expose m.
parse arg m
if length(m) > 200 then
return m
cl = objClass(m, '')
if cl = '' then
return m
else if cl = m.class.classV then
return = m.m
else if cl == m.class.classW then
return = substr(m, 2)
else if arg() >= 2 then
return arg(2)
else
call err m 'of class' className(cl) 'not kind of string'
endProcedure oIfStr
/* copy o end *******************************************************/
/* copy class begin **************************************************
a class has fields and methods,
the class module handles only the metadata,
object handling (instanciation, methodcalls etc.) is in O
classes are represented by a metadata tree,
its nodes of class class have diffenrent types:
class subTypes (implemented as choices)
'u' = union: NAME -> name of class if <> '',
stem -> references component classes
'f' = field: NAME -> fieldName (x.name),
CLASSS -> reference to class of fieldValue
's' = stem: class -> ref to class at each stem element
'c' = choice: NAME -> selection value,
CLASS -> ref to class of choice
'm' = method: NAME -> methodName,
MET -> rexxCode
'r' = reference CLASS -> ref to type at reference
special classes
'v' = Value String Value
'w' = ValueAsA StringValue packed into an address (prefix escW)
'o' = AnyClass any class with dynamic classLookup on object
formal definition, see classIni
class expression (ce) allow the following syntax
ce = className | classAdr | 'n'('?','*','|')? name union | union
| 'f' name ce | 's' ce | 'c' name ce | 'm' name code | r ce?
union = 'u' (ce (',' ce)*)?
the modifiers of 'n' means
none: create new class, fail if name already defined
'?': create new class or return old of that name
'*': use an exisiting class of that definition
or create new class with a unique name
'|': create a new class with a unique name
'm' extends to then end of the ce (line)
'u' allows several components, in classNew also multiple args
Achtung, aber NICHT rekursiv|
***********************************************************************/
classIni: procedure expose m.
if m.class.ini == 1 then
return
m.class.ini = 1
m.class.in2 = 0
call oIni
call mapIni
call mNewArea 'CLASS', 'CLASS'
call mapReset 'CLASS.N2C' /* name to class */
m.class.classV = classBasicNew('u', 'v')
m.class.classW = classBasicNew('u', 'w')
m.class.classO = classBasicNew('u', 'o')
m.class.class = classNew('n class u v',
, 'c u u f NAME v, s r class',
, 'c f u f NAME v, f CLASS r class',
, 'c s f CLASS r class' ,
, 'c c u f NAME v, f CLASS r class',
, 'c m u f NAME v, f MET v' ,
, 'c r f CLASS r class' )
m.class.cNav = '.'
m.class.cRef = '|'
m.class.cDot = '%'
m.class.cPath = m.class.cNav || m.class.cRef || m.class.cDot
m.class.classR = classNew('r')
m.class.basicNew = "oMutate(mNew(cl), cl)"
call oAddMet m.o.lazyGen, 'new', "return classGenNew(cl, me)"
call oAddMet m.o.lazyGen,'oClear',"return classGenClear(cl, me)"
call oAddMet m.o.lazyGen,'oFlds',"return classGenFlds(cl, me)"
call oAddMet m.o.lazyGen, 'oCopy', "return classGenCopy(cl, me)"
cr = mIterBegin('CLASS')
do while assNN('cr', mIter(cr))
call classFinish cr
call oClaMet cr, 'oFlds' /* generate flds */
end
m.class.in2 = 1
call oAddMet m.class.classV, 'oCopy', "return oCopyV(m, t)"
call classAddMet m.class.classV, 'o2String return m.m'
call classAddMet m.class.classW, 'o2String return substr(m, 2)'
call classNew 'n ORun u',
, 'm oRun call err "call of abstract method oRun"',
, 'm o2File return oRun2File(m)',
, 'm o2String return jCatLines(oRun2File(m), fmt)'
return
endProcedure classIni
/*--- return the name of a class if it exists otherwise the class ---*/
className: procedure expose m.
parse arg cl
if m.cl = 'u' & m.cl.name \= '' then
return m.cl.name
else
return cl
endProcedure className
/*--- return class of given name or class ---------------------------*/
class4Name: procedure expose m.
parse arg nm
if symbol('m.class.n2c.nm') == 'VAR' then
return m.class.n2c.nm
if arg() > 1 then
return arg(2)
call err 'no class' nm
endProcedure class4Name
classBasicNew: procedure expose m.
parse arg ty, nm, cl, nmTy
n = mNew('CLASS')
m.n = ty
m.n.name = nm
m.n.nameComp = nm
if ty == 'u' & nm \== '' then do
if pos(nmTy, '*|') > 0 then do
m.n.name = nm || substr(n, 1+lastPos('.', n))
if nmTy == '*' then
m.n.nameComp = nm'*'
else
m.n.nameComp = m.n.name
end
call mapAdd class.n2c, m.n.name, n
end
call mapAdd class.n2c, n, n
m.n.class = ''
m.n.met = ''
m.n.0 = 0
if length(ty) \== 1 | pos(ty, 'ufscrm') < 1 then
call err 'bad type' ty': classBasicNew('ty',' nm',' cl')'
else if nm == '' & pos(ty, 'fm') > 0 then
call err 'empty name: classBasicNew('ty',' nm',' cl')'
else if nm \== '' & ty \== 'c' & verifId(nm) > 0 then
call err 'bad name' nm': classBasicNew('ty',' nm',' cl')'
else if nm \= '' & pos(ty, 'rs') > 0 then
call err 'name for type' ty': classBasicNew('ty',' nm',' cl')'
else if pos(ty, 'fcrs') > 0 then do
if cl \== '' then
m.n.class = mapGet(class.n2c, cl)
else if ty == 'r' then
m.n.class = m.class.classO
/* else say 'cl leer' ty nm nmTy ???????*/
end
else if ty == 'm' then
m.n.met = cl
else if cl \== '' then
call err 'class for type' ty': classBasicNew('ty',' nm',' cl')'
return n
endProcedure classBasicNew
classNew: procedure expose m.
parse arg clEx 1 ty rest
if abbrev(ty, 'n') then do
if wordPos(ty, 'n n? n* n|') < 1 then
call err 'bad type' ty': classNew('clEx')'
nmTy = right(ty, 1)
parse var rest nm ty rest
if ty \== 'u' then
call err 'class name' nm 'without u: classNew('clEx')'
if nmTy == 'n' then do
if mapHasKey(class.n2c, nm) then
call err 'class' nm 'already defined: classNew('clEx')'
end
else if nmTy == '?' then do
if mapHasKey(class.n2c, nm) then
return mapGet(class.n2c, nm)
end
else if nmTy == '*' then do
if arg() \== 1 then
call err 'arg()='arg() 'for n* : classNew('clEx')'
if mapHasKey(class.n2c, clEx) then
return mapGet(class.n2c, clEx)
end
n = classBasicNew('u', nm, , nmTy)
end
else do
nmTy = ''
if arg() \== 1 then
call err 'arg()='arg() 'without name: classNew('clEx')'
if mapHasKey(class.n2c, clEx) then
return mapGet(class.n2c, clEx)
if length(ty) <> 1 | pos(ty, 'ufscmr') < 1 then
call err 'bad type' ty': classNew('clEx')'
nm = ''
if pos(ty, 'usr') < 1 then
parse var rest nm rest
if ty = 'u' then do
n = classBasicNew(ty)
end
else if ty = 'm' then do
n = classBasicNew(ty, nm, rest)
rest = ''
end
else do
parse var rest t1 rest
if wordPos(t1, 'u f s c m r') > 0 then do
n = classBasicNew(ty, nm)
m.n.class = classNew(t1 rest)
rest = ''
end
else do
n = classBasicNew(ty, nm, t1)
end
end
end
if ty \== 'u' then do
if rest \== '' then
call err 'rest' rest 'but end of classExp expected:' clEx
end
else do
lx = 0
do while lx < length(rest)
cx = pos(',', rest, lx+1)
if cx <= lx | word(substr(rest, lx+1), 1) == 'm' then
cx = length(rest)+1
a = mAdd(n, classNew(strip(substr(rest, lx+1, cx-lx-1))))
lx=cx
end
pref = ''
do ax=2 to arg()
if length(arg(ax)) == 1 & arg(ax) \== ' ' then
pref = arg(ax)' '
else
call mAdd n, classNew(pref || arg(ax))
end
end
cr = mIterBegin('CLASS')
do while assNN('cr', mIter(cr)) & \ classEqual(n, cr)
end
isNew = cr == n
if \ isNew then do
if mapRemove(class.n2c, n) \== n then
call err 'mapRemove('n') mismatch'
if m.n == 'u' & m.n.name \== '' then
if mapRemove(class.n2c, m.n.name) \== n then
call err 'mapRemove('m.n.name') mismatch'
call mFree n
n = cr
end
if isNew & m.class.in2 then
call classFinish n
if nmTy == '' | nmTy == '*' then
call mapAdd class.n2c, clEx, n
return n
endProcedure classNew
/*--- to the finish for new class cl -------------------------------*/
classFinish: procedure expose m.
parse arg cl, force
call oMutate cl, m.class.class
/* find super and sub classes */
m.cl.sub = ''
sups = ''
do ux=1 to m.cl.0
u1 = m.cl.ux
if m.u1 \== 'u' then
iterate
if wordPos(u1, sups) > 0 then
call err u1 'already in sups' sups': classSuperSub('cl')'
sups = sups u1
if wordPos(m.cl.SUB, cl) > 0 | symbol('m.u1.sub') \== 'VAR' then
call err cl 'is already in' u1'.sub' u1.SUB ,
|| ': classSuperSub('cl')'
m.u1.sub = strip(m.u1.sub cl)
end
m.cl.super = sups
/* add class to o */
call oAddCla cl, sups
if pos(m.cl, 'mfrsv') < 1 then do
allMets = ''
forceMets = ''
do cx=1 to m.cl.0
ch = m.cl.cx
if m.ch == 'm' then do
call oAddMet cl, m.ch.name, m.ch.met
allMets = allMets m.ch.name
end
else if symbol('m.class.forceDown.ch') == 'VAR' then
forceMets = forceMets m.class.forceDown.ch
end
myForce = ''
do fx=1 to words(forceMets)
parse value word(forceMets, fx) with fCla '#' fMet
if wordPos(fMet, allMets) < 1 then do
call oAddMet cl, fMet, m.o.cMet.fCla.fMet
myForce = myForce cl'#'fMet
allMets = allMets fMet
end
end
if myForce \== '' then
m.class.forceDown.cl = strip(myForce)
end
if cl == m.class.class then
call mAlias 'CLASS', cl
else /* object addresses */
call mNewArea cl, 'O.'substr(cl,7)
if m.cl \== 'u' | m.cl.name == '' then
return
call mAlias cl, m.cl.name
return
endProcedure classFinish
classAddMet: procedure expose m.
parse arg clNm, met code
cl = class4Name(clNm)
if pos(m.cl, 'uvw') < 1 then
call err 'class not nvw but' m.cl,
'in classAdd1Method('clNm',' met code')'
call mAdd cl, classNew('m' met code)
call oAddMet cl, met, code
return cl
endProcedure classAddMet
/*--- return true iff the two classes are equal -------------------*/
classEqual: procedure expose m.
parse arg l, r
if m.l \== m.r | m.l.nameComp \== m.r.nameComp ,
| m.l.class \== m.r.class | m.l.0 \== m.r.0 then
return 0
if m.l.met \== m.r.met then
return 0
do sx=1 to m.l.0
if m.l.sx \== m.r.sx then
return 0
end
return 1
endProcedure classEqual
classGenNew: procedure expose m.
parse arg cl, met
return "m=" m.class.basicNew";" oClaMet(cl, 'oClear') ";" ,
"return m"
endProcedure classGenNew
classGenFlds: procedure expose m.
parse arg cl, met
m.cl.flds.0 = 0
m.cl.stms.0 = 0
m.cl.stemCl = ''
m.cl.valueCl = ''
call classGenFldsAdd cl, cl
m.cl.hasFlds = m.cl.flds.0 > 1 ,
| (m.cl.flds.0 == 1 & m.cl.flds.1 \== '') | m.cl.stms.0 > 0
return cl'.FLDS'
endProcedure classGenFlds
/*--- add the the fields of class cl to stem f ----------------------*/
classGenFldsAdd: procedure expose m.
parse arg f, cl, nm
n1 = substr(nm, 1+abbrev(nm, '.') )
if symbol('m.f.f2c.n1') \== 'VAR' then
m.f.f2c.n1 = cl
if cl == m.class.classV | cl == m.class.classW | m.cl=='r' then do
if nm == '' then do
if m.f.valueCl \== '' then
return err('value mistmatch')
m.f.valueCl = cl
end
if nm == '' then do
call mMove f'.FLDS', 1, 2
m.f.flds.1 = ''
end
else do
call mAdd f'.FLDS', nm
end
return 0
end
if m.cl = 's' then do
if m.cl.class == '' then
call err 'stem null class'
a1 = mAdd(f'.STMS', nm)
m.a1.class = m.cl.class
if nm == '' then
m.f.stemCl = m.cl.class
return 0
end
if m.cl = 'f' then
return classGenFldsAdd(f, m.cl.class, nm'.'m.cl.name)
if m.cl.class \== '' then
return classGenFldsAdd(f, m.cl.class, nm)
do tx=1 to m.cl.0
call classGenFldsAdd f, m.cl.tx, nm
end
return 0
endProcedure classGenFldsAdd
classGenClear: procedure expose m.
parse arg cl, met
r = ''
call oClaMet cl, 'oFlds'
do fx=1 to m.cl.flds.0
f1 = m.cl.flds.fx
if f1 == '' then
c1 = cl
else do
c1 = substr(f1, 2)
c1 = m.cl.f2c.c1
end
if c1 == m.class.classW then
r = r classGenStmt(f1, "m.m~ = '"m.o.escW"';")
else
r = r classGenStmt(f1, "m.m~ = '';")
end
do sx=1 to m.cl.stms.0
r = r classGenStmt(m.cl.stms.sx, "m.m~.0 = 0;")
end
return r
endProcedure classGenClear
classGenStmt: procedure expose m.
parse arg f, st, resWo
isNice = translate(f) == f
resWo = translate(resWo) 'GGFF M'
fDod = '.'f'.'
do wx=1 to words(resWo) while isNice
isNice = pos('.'word(resWo, wx)'.', fDot) < 1
end
if isNice then
return repAll(st, '~', f)
else
return "ggFF = '"substr(f, 2)"';" repAll(st, '~', '.ggFF')
endProceduer classGenAss
classGenCopy: procedure expose m.
parse arg cl, me
r = repAll("if t == '' then t =" m.class.basicNew ";" ,
"else call oMutate t, cl;", 'cl', "'"cl"'")
ff = oClaMet(cl, 'oFlds') /* build code for copy */
do fx=1 to m.cl.flds.0
r = r classGenStmt(m.cl.flds.fx, 'm.t~ = m.m~;', 't')
end
do fx=1 to m.cl.stms.0
nm = m.cl.stms.fx
sc = m.cl.stms.fx.class
if nm == '' then
st = ''
else do
r = r "st = '"substr(nm, 2)"';"
st = '.st'
end
r = r "m.t"st".0 = m.m"st".0;" ,
"do sx=1 to m.m"st".0;" ,
"call oClaCopy '"sc"', m"st".sx, t"st".sx; end;"
end
return r 'return t;'
endProcedure classGenCopy
/*--- oCopy for classW ----------------------------------------------*/
oCopyW: procedure expose m.
trace ?r
parse arg m, t
if t == '' then
return m
m.t = o2String(m)
return oMutate(t, m.class.classV)
endProcedure oCopyW
/*--- print object ---------------------------------------------------*/
objOut: procedure expose m.
parse arg m, pr, p1
c = objClass(m, '')
if c == '' then
call out p1 'no class for' m
else if c == m.class.classV then
call out p1 || m.m
else if c == m.class.classW then
call out p1 || o2String(m)
else
call classOutDone c, m, pr, p1
return
endProcedure objOut
/*--- recursively output (with out:) the object a with class t -------*/
classOut: procedure expose m.
parse arg t, a, pr, p1
return classOutDone(if(t=='',m.class.classO, t), a, pr, p1)
endProcedure classOut
/*--- ouput object a with class t and stopper done ------------------*/
classOutDone: procedure expose m. done.
parse arg t, a, pr, p1
if p1 == '' then
p1 = pr
if right(p1, 1) \== ' ' then
p1 = p1' '
if done.ini \== 1 then do
done.ini = 1
t = class4Name(t, t)
p1 = p1'@'a' '
end
if done.t.a == 1 then
return out(p1'done :'className(t) '@'a)
done.t.a = 1
if t = m.class.classO then do
if a == '' then
return out(p1'obj null')
t = objClass(a, '')
if t = '' then
return out(p1'obj has no class @'m.a)
else
return classOutDone(t, a, pr, p1'isA')
end
if t == m.class.classV then
return out(p1'=' m.a)
if t == m.class.classW == 'w' then
return out(p1'}' substr(a, 2))
if m.t == 'f' then
return classOutDone(m.t.class, a'.'m.t.name, pr, p1'.'m.t.name)
if m.t == 'r' then do
if m.a == '' then
return out(p1'refTo :'className(m.t.class) '@null@')
else
return classOutDone(m.t.class, m.a, pr,
, p1'refTo @'m.a)
end
if m.t = 'u' then do
t1 = m.t.1
vv = m.t.0 > 0 & m.t.1 == m.class.classV
call out p1 || if(m.t.name == '', 'union', ':'m.t.name) ,
|| copies(' =' m.a, vv)
do ux=1+vv to m.t.0
call classOutDone m.t.ux, a, pr' '
end
return 0
end
if m.t = 's' then do
call out p1'stem' m.a.0
do ux=1 to m.a.0
call classOutDone m.t.class, a'.'ux, pr' ', pr' .'ux
end
return 0
end
if m.t = 'c' then do
if m.t.name = m.a then
call classOutDone m.t.class, a, pr, p1'choice' m.a
return 0
end
if m.t = 'm' then
return 0
return err('bad class type' m.t)
endProcedure classOutDone
/* copy class end ***************************************************/
/* copy map begin ******************************************************
a map stores values at keys
it may also maintain a list of keys
the basic ideas are similar to the java Interface java.util.Map
contrary to stems we also handle keys longer then 250 bytes
***********************************************************************/
/*--- initialize the module ------------------------------------------*/
mapIni: procedure expose m.
if m.map.ini = 1 then
return
m.map.ini = 1
call mIni
m.map.0 = 0
m.map.inlineSearch = 1
call mapReset map.inlineName, map.inline
return
endProcedure mapIni
mapInline: procedure expose m.
parse arg pName, opt
if mapHasKey(map.inlineName, pName) then do
im = mapGet(map.inlineName, pName)
if pos('l', opt) < 1 & symbol('m.im.0') \== 'VAR' then do
m.im.0 = m.im.lEnd - m.im.lBegin - 1
do ix=1 to m.im.0
m.im.ix = strip(sourceline(ix+m.im.lBegin), 't')
end
end
return im
end
name = '/'
do lx = m.map.inlineSearch to sourceline()
if \ abbrev(sourceline(lx), '$') then
iterate
li = sourceline(lx)
s1 = pos('/', li)+ 1
if s1 < 3 | s1 > 4 then
iterate
s2 = pos('/', li, s1)
if s2 <= s1 then
iterate
if s1 == 3 then do
if name \== substr(li, s1, s2-s1) then
iterate
im = 'MAP.INLINE.' || (m.map.inline.0+1)
call mapAdd map.inlineName, name, im
m.im.lBegin = lBeg
m.im.lEnd = lx
m.im.mark = mrk
if name == pName then do
m.map.inlineSearch = lx+1
return mapInline(pName)
end
name = '/'
end
else if \ mapHasKey(map.inlineName,
, substr(li, s1, s2-s1)) then do
lBeg = lx
mrk = substr(li, 2, s1-3)
name = substr(li, s1, s2-s1)
end
else do
name = '/'
end
end
if pos('r', opt) > 0 then
return ''
return err('no inline data /'pName'/ found')
endProcedure mapInline
/*--- create a new map ----------------------------------------------*/
mapNew: procedure expose m.
parse arg opt
m.map.0 = m.map.0 + 1
return mapReset('MAP.'m.map.0 , opt)
endProcedure mapNew
/*--- make an empty map, if opt <> '' maintain stem of keys
('K' in map.keys, '=' in a else in opt) --------------*/
mapReset: procedure expose m.
parse arg a, opt
if symbol('m.map.keys.a') == 'VAR' then
call mapClear a
if opt = '=' then
st = a
else if translate(opt) = 'K' then
st = 'MAP.KEYS.'a
else
st = opt
m.map.keys.a = st
if st \== '' then
m.st.0 = 0
return a
endProcedure
/*--- add a new key value pair to the map ----------------------------*/
mapAdd: procedure expose m.
parse arg a, ky, val
vv = mapValAdr(a, ky, 'a')
m.vv = val
return val
endProcedure mapAdd
/*--- change the value at a key or add key value ---------------------*/
mapPut: procedure expose m.
parse arg a, ky, val
vv = mapValAdr(a, ky, 'p')
m.vv = val
return val
endProcedure mapPut
/*--- return 1 if key ky exists in map a, 0 otherwise ----------------*/
mapHasKey: procedure expose m.
parse arg a, ky
return mapValAdr(a, ky) \== ''
endProcedure mapHasKey
/*--- return the value of key ky in map a if it exists,
else if called with a third argument return third argument
else issue an error ----------------------------------------*/
mapGet: procedure expose m.
parse arg a, ky
vv = mapValAdr(a, ky)
if vv \== '' then
return m.vv
else if arg() > 2 then
return arg(3)
else
return err('missing key in mapGet('a',' ky')')
endProcedure mapGet
/*--- return a stem of all keys --------------------------------------*/
mapKeys: procedure expose m.
parse arg a
if m.map.keys.a == '' then
call err 'mapKeys('a') with no keys'
return m.map.keys.a
endProcedure mapKeys
/*--- remove a key from the map, do nothing if it is missing ---------*/
mapRemove: procedure expose m.
parse arg a, ky
vv = mapValAdr(a, ky)
if vv == '' then
return ''
if m.map.keys.a \== '' then do
trace ?R /* not tested yet ???wkTest */
k = m.map.keys.a
mx = m.k.0
do i=1 to mx
if m.k.i == ky then do
m.k.i = m.k.mx
m.k.0 = mx - 1
return
end
end
end
val = m.vv
drop m.a.ky
return val
endProcedure mapRemove
/*--- remove all entries ---------------------------------------------*/
mapClear: procedure expose m.
parse arg a
st = mapKeys(a)
liLe = 243 - length(a)
do kx=1 to m.st.0
ky = m.st.kx
drop m.st.kx
if length(ky) <= liLe then do
drop m.a.ky
end
else do
adr = mapValAdr(a, ky)
if adr \== '' then do
ha = left(adr, lastPos('.', adr) - 3)
do i = 1 to m.ha.k.0
drop m.ha.k.i m.ha.v.i
end
drop m.ha.k.0
end
end
end
m.st.0 = 0
return a
endProcedure mapClear
/*--- return the value pointer for a key, '' if non existing
with fun = 'a' add a key, with 'p' put a key ------------*/
mapValAdr: procedure expose m.
parse arg a, ky, fun
if length(ky) + length(a) <= 243 then do
res = a'.'ky
if symbol('m.res') == 'VAR' then do
if fun == 'a' then
call err 'duplicate key' ky 'in map' a
return res
end
else if fun == '' then
return ''
end
else do
len = 243 - length(a)
q = len % 4
ha = a'.'left(ky, len - 2 * q) || substr(ky,
, (length(ky)-len) % 2 + 2 * q, q) || right(ky, q)
if symbol('M.ha.k.0') == 'VAR' then do
do i=1 to m.ha.k.0
if m.ha.k.i == ky then do
if fun == 'a' then
call err 'duplicate key' ky ,
'map' a 'hash' ha'.K.'i
return ha'.V.'i
end
end
end
else do
i = 1
end
if fun == '' then
return ''
if i > 9 then
call err 'overflow long key' y 'in map' a 'hash' ha'.K.'i
m.ha.k.0 = i
m.ha.k.i = ky
res = ha'.V.'i
end
if m.map.keys.a \== '' then
call mAdd m.map.Keys.a, ky
m.res = ''
return res
endProcedure mapValAdr
/* copy map end *******************************************************/
/* copy mapExp begin **************************************************/
mapVia: procedure expose m.
parse arg a, ky
sx = pos('|', ky)
if sx < 1 then
return mapGet(a, ky)
via = mapGet(a, left(ky, sx-1))
do while sx <= length(ky)
fx = sx+1
sx = pos('|', ky, fx)
if sx < 1 then
sx = length(ky) + 1
if sx = fx then do
if symbol('m.via') \== 'VAR' then
call err 'missing m.'via 'at' sx 'in mapVia('a',' ky')'
via = m.via
end
else do
f = substr(ky, fx, sx - fx)
if symbol('m.via.f') \== 'VAR' then
call err 'missing m.'via'.'f ,
'at' sx 'in mapVia('a',' ky')'
via = m.via.f
end
end
return via
endProcedure mapVia
mapExpAt: procedure expose m.
parse arg a, src, sx
m.map.ExpAt = 0
cx = pos('$', src, sx)
if cx < 1 then
return substr(src, sx)
res = substr(src, sx, cx-sx)
do forever
if substr(src, cx+1, 1) = '{' then do
ex = pos('}', src, cx+2)
if ex < 1 then
call err 'missing } after' substr(src, cx) 'in' src
res = res || mapVia(a, strip(substr(src, cx+2, ex-cx-2)))
ex = ex + 1
end
else do
ex = verify(src, m.ut.alfDot, 'n', cx+1)
if ex < 1 then
return res || mapVia(a, substr(src, cx+1))
if ex = cx+1 then do
m.map.ExpAt = cx
return res
end
res = res || mapVia(a, substr(src, cx+1, ex-cx-1))
end
cx = pos('$', src, ex)
if cx < 1 then
return res || substr(src, ex)
res = res || substr(src, ex, cx-ex)
end
endProcedure mapExpAt
mapExp: procedure expose m.
parse arg a, src
res = mapExpAt(a, src, 1)
if m.map.ExpAt \== 0 then
call err 'mapExp stopped at' substr(src, map.ExpAt) 'in' src
return res
endProcedure mapExp
mapExpAllAt: procedure expose m.
parse arg a, dst, src, sx, cx
do while sx <= m.src.0
li = mapExpAt(a, m.src.sx, cx)
dx = m.map.ExpAt
if (cx=1 & dx = 0) | li \= '' then
call mAdd dst, li
if dx = 0 then do
cx = 1
sx = sx+1
end
else do
return sx dx
end
end
return ''
endProcedure mapExpAllAt
mapExpAll: procedure expose m.
parse arg a, dst, src
sto = mapExpAllAt(a, dst, src, 1, 1)
if sto == '' then
return
lx = word(sto, 1)
call err 'mapExpAll stopped at' sto':' m.src.lx
endProcedure mapExpAll
/* copy mapExp end ****************************************************/
/* copy m begin ********************************************************
we use variables as follows
m. stem m: all global data and object data that must survive
a procedure call (m for memory in Memoria of B5000)
m.<mbr>.** to avoid conflicts: every rexx Module (copy) should
only allocate addresses m.<mbr>.** with <mbr> the name of
the rexx module
we pass parameters around (e.g. a=address, m=memory, st=stem)
and the called function may use m.a or m.a.subField etc.
gg*: local variable in subroutines without procedure
everything else: temporary data within procedure
every subroutine is declared as procedure expose m.
(also if no m. variable is used, because e.g. of error handling)
the few subroutines that cannot use procedure, should use only
variables starting with gg
***********************************************************************/
/*---make an area -----*/
mNewArea: procedure expose m.
parse arg nm, adr
m.m.area.0 = m.m.area.0 + 1
a = 'M.AREA.'m.m.area.0
if adr == '=' then
adr = nm
else if adr == '' then
adr = 'M.'m.m.area.0
if symbol('m.m.n2a.adr') == 'VAR' then
call err 'adr' adr 'for area' nm 'already used'
m.m.n2a.adr = a
call mAlias adr, nm
m.m.p2a.adr = a
m.a.0 = 0
m.a.free.0 = 0
m.a.address = adr
return nm
endProcedure mNewArea
mAlias: procedure expose m.
parse arg oldNa, newNa
if symbol('m.m.n2a.oldNa') \== 'VAR' then
call err 'area' oldNa 'does not exist'
if oldNa == newNa then
return
if symbol('m.m.n2a.newNa') == 'VAR' then
call err 'newName' newNa 'for old' oldNa 'already used'
m.m.n2a.newNa = m.m.n2a.oldNa
return
endProcedure mAlias
mNew: procedure expose m. ggArea
parse arg name
if symbol('m.m.n2a.name') \== 'VAR' then
call err 'area' name 'does not exists'
ggArea = m.m.n2a.name
if m.ggArea.free.0 > 0 then do
fx = m.ggArea.free.0
m.ggArea.free.0 = fx-1
m = m.ggArea.free.fx
end
else do
m.ggArea.0 = m.ggArea.0 + 1
m = m.ggArea.address'.'m.ggArea.0
end
return m
endProcedure mNew
mFree: procedure expose m.
parse arg m
p = 'M.P2A.'left(m, lastPos('.', m)-1)
area = m.p
fx = m.area.free.0 + 1
m.area.free.0 = fx
m.area.free.fx = m
return
endProcedure mFree
/*--- iterate over all allocate elements of an area ------------------*/
mIterBegin: procedure expose m.
parse arg nm
a = m.m.n2a.nm
return m.a.address'.0'
endProcedure mIterBegin
mIter: procedure expose m.
parse arg cur
if cur == '' then
return ''
lx = lastPos('.', cur)
p = 'M.P2A.'left(cur, lx-1)
a = m.p
ix = substr(cur, lx+1)
do ix=ix+1 to m.a.0
n = m.a.address'.'ix
do fx=1 to m.a.free.0 while m.a.free \== n
end
if fx > m.a.free.0 then
return n
end
return ''
endProcedure mIter
/*--- get m.a --------------------------------------------------------*/
mGet: procedure expose m.
parse arg a
return m.a
endProcedure mGet
/*--- put value v into m.a -------------------------------------------*/
mPut: procedure expose m.
parse arg a, v
m.a = v
return
endProcedure mPut
/*--- cut stem a to length len ---------------------------------------*/
mCut: procedure expose m.
parse arg a, len
m.a.0 = len
return a
endProcedure mCut
/*--- add one or several arguments to stem m.a -----------------------*/
mAdd: procedure expose m.
parse arg a
ix = m.a.0
do ax = 2 to arg()
ix = ix + 1
m.a.ix = arg(ax)
end
m.a.0 = ix
return a'.'ix
endProcedure mAdd
/*--- pop last element from stem m.a ---------------------------------*/
mPop: procedure expose m.
parse arg a
ix = m.a.0
if ix < 1 then
call err 'pop from empty stem' a
m.a.0 = ix-1
return m.a.ix
endProcedure mPop
/*--- add to m.dst.* a (sub)sequence of m.src.* ----------------------*/
mAddSt: procedure expose m.
parse arg dst, src, fx , tx
dx = m.dst.0
if fx == '' then
fx = 1
if tx == '' then
tx = m.src.0
do sx = fx to tx
dx = dx + 1
m.dst.dx = m.src.sx
end
m.dst.0 = dx
return
endProcedure mAddSt
/*--- find position of first occurrence of ele in stem m,
return 0 if nonemove a part of a stem -----------------------*/
mPos: procedure expose m.
parse arg m, ele, sx
if sx == '' then
sx = 1
do x=sx to m.m.0
if m.m.x = ele then
return x
end
return 0
endProcedure mPos
/*--- move a part of a stem ------------------------------------------*/
mMove: procedure expose m.
parse arg m, sx, dx
if dx < sx then do
y = dx
do x=sx to m.m.0
m.m.y = m.m.x
y = y + 1
end
end
else if dx > sx then do
y = m.m.0 + dx - sx
do x=m.m.0 by -1 to sx
m.m.y = m.m.x
y = y - 1
end
end
m.m.0 = m.m.0 + dx - sx
return
endProcedure mMove
/*--- insert a stem into another ------------------------------------*/
mInsert: procedure expose m.
parse arg m, tx, st
call mMove m, tx, tx+m.st.0
do sx=1 to m.st.0
dx = tx-1+sx
m.m.dx = m.st.sx
end
return
endProcedure mInsert
/*--- strip all elements of a stem -----------------------------------*/
mStrip: procedure expose m.
parse arg st, opt
if opt == '' then
opt = 'b'
do x=1 to m.st.0
m.st.x = strip(m.st.x, opt)
end
return st
endProcedure mStrip
/* cat the lines of a stem, possibly repeated --------------------------
args: stem, fmt see fGen: -------------------------------------*/
mCat: procedure expose m.
parse arg st, fmt
return mCatFT(st, 1, m.st.0, fmt)
mCatFT: procedure expose m.
parse arg st, fx, tx, fmt
if tx < fx then
return ''
fmt = '%s%qn%s%qe%q^'fmt
res = f(fmt, m.st.fx)
do sx=fx+1 to tx
res = res || f(fmt'%Qn', m.st.sx)
end
return res || f(fmt'%Qe')
endProcedure mCatFT
mIni: procedure expose m.
if m.m.ini == 1 then
return
m.m.ini = 1
call utIni
m.mBase64 = m.ut.alfUC || m.ut.alfLc || m.ut.digits'+-'
m.m.area.0 = 0
call mNewArea
return
endProcedure mIni
/* copy m end *********************************************************/
/* copy adrIsp begin *************************************************/
/**********************************************************************
lmd: catalog read
call sequence: lmdBegin, lmdNext*, lmdEnd
mit lmd service (mit save in file und read,
weil list zu langsam und listcat abstürzt)
1. arg (grp) als group dataset für lmd save
und dd name für file read
***********************************************************************/
lmdBegin: procedure expose m.
parse arg grp, lev
call adrIsp 'lmdinit listid(lmdId) level('lev')'
res = adrIsp('lmdlist listid(&lmdId) option(save) group('grp')', 4)
call adrIsp 'lmdfree listid(&lmdId)'
if res = 0 then do
call trc timing() 'lmdlist save' grp lev
call adrTso 'alloc dd('grp') shr dsn('grp'.datasets)'
end
else do
call trc 'no datasets found' timing() 'lmdlist save' grp lev
call adrTso 'alloc dd('grp') dummy'
end
call tsoOpen grp, 'R'
return /* end lmdBegin */
lmdNext:
parse arg ggGrp, ggSt, withVolume
if \ readDD(ggGrp, ggSt) then
return 0
if withVolume \== 1 then
do ggIx=1 to value(ggSt'0')
x = value(ggSt || ggIx, word(value(ggSt || ggIx), 1))
end
return 1
endSubroutin lmdNext
lmdEnd: procedure expose m.
parse arg grp
call tsoClose grp
call adrTso 'free dd('grp')'
return /* end lmdEnd */
lmd: procedure expose m.
parse arg lev, withVol
call lmdBegin gg1, lev
do while lmdNext(gg1, q., withVol)
do x=1 to q.0
call out q.x
end
end
call lmdEnd gg1
return
endProcedure lmd
/**********************************************************************
member list of a pds:
call sequence x=lmmBegin(dsn) lmmNext(x) * lmmEnd(x)
***********************************************************************/
lmm: procedure expose m.
parse arg dsn
id = lmmBegin(dsn)
do ix=1 by 1
m = lmmNext(id)
if m = '' then
leave
call out m
end
call lmmEnd id
return
endProcedure lmm
lmmBegin: procedure expose m.
parse arg dsn
mbr = dsnGetMbr(dsn)
pds = dsnSetMbr(dsn, )
call adrIsp "LMINIT DATAID(lmmId) DATASET('"pds"') ENQ(SHRW)"
call adrIsp "LMOPEN DATAID("lmmId") OPTION(INPUT) "
res = lmmId
if mbr <> '' then
res = res 'pattern('mbr')'
return res
endProcedure lmmBegin
lmmEnd: procedure expose m.
parse arg lmmId opt
call adrIsp "LMMLIST DATAID("lmmId") option(free)", 8
call adrIsp "LMCLOSE DATAID("lmmId")"
call adrIsp "LMFREE DATAID("lmmId")"
return
endProcedure lmmEnd
lmmNext: procedure expose m.
parse arg lmmId opt
if adrIsp("LMMLIST DATAID("lmmid")" ,
"OPTION(LIST) MEMBER(Mbr)" opt, 4 8) = 0 then
return strip(mbr)
else
return ''
endProcedure lmmNext
lmmRm: procedure expose m.
parse arg dsn, mbrs
mbrs = dsnGetMbr(dsn) mbrs
pds = dsnSetMbr(dsn, )
call adrIsp "LMINIT DATAID(lmmId) DATASET("pds") ENQ(SHRW)"
call adrIsp "LMOPEN DATAID("lmmId") OPTION(OUTPUT) "
err = ''
do wx=1 to words(mbrs)
m1 = word(mbrs, wx)
rr = adrIsp("lmmDel dataid("lmmId") member("m1")", 0 8 12)
if rc = 0 then
say 'removed' m1 'from' pds
else if rc = 8 then
say 'not found' m1 'in' pds
else do
err = 'error deleting' m1 'in' pds 'rc' rr strip(zerrlm)
say err
leave
end
end
call adrIsp "LMCLOSE DATAID("lmmId")"
call adrIsp "LMFREE DATAID("lmmId")"
if err <> '' then
call err err
return
endProcedure lmmRm
/*--- address ispf with error checking -------------------------------*/
adrIsp:
parse arg ggIspCmd, ggRet
address ispexec ggIspCmd
if rc = 0 then return 0
else if ggRet == '*' then return rc
else if wordPOS(rc, ggRet) > 0 then return rc
else
call err 'adr ispExec rc' rc 'in' ggIspCmd':' strip(zerrlm)
endSubroutine adrIsp
/*--- address editor with error checking -----------------------------*/
adrEdit:
parse arg ggEditCmd, ggRet
address isrEdit ggEditCmd
if rc = 0 then return 0
else if ggRet == '*' then return rc
else if wordPOS(rc, ggRet) > 0 then return rc
else
call err 'adr isrEdit rc' rc 'for' ggEditCmd
endSubroutine adrEdit
/* copy adrIsp end *************************************************/
/* copy adrTso begin *************************************************/
/*--- send ggTsoCmd to tso, fail if rc <> 0 or not listed in ggRet ---*/
adrTso:
parse arg ggTsoCmd, ggRet
address tso ggTsoCmd
if rc == 0 then return 0
else if ggRet == '*' then return rc
else if wordPos(rc, ggRet) > 0 then return rc
else
call err 'adrTso rc' rc 'for' ggTsoCmd
return /* end adrTso */
/*--- format dsn from tso format to jcl format -----------------------*/
dsn2jcl: procedure expose m.
parse upper arg dsn ., addPrefix
if left(dsn,1) = "'" then
return strip(dsn, 'b', "'")
sp = sysvar('SYSPREF')
if sp == '' then
sp = userid()
cx = pos('~', dsn)
if cx < 1 & addPrefix == 1 then
return sp'.'dsn
do while cx \== 0
le = left(dsn, cx-1)
ri = substr(dsn, cx+1)
if right(le, 1) == '.' | left(ri, 1) == '.' then
dsn = le || sp || ri
else
dsn = le || left('.', le \== '') || sp ,
|| left('.', ri \== '') || ri
cx = pos('~', spec, cx)
end
return dsn
endProcedure dsn2Jcl
/*--- format dsn from jcl format to tso format -----------------------*/
jcl2dsn: procedure expose m.
parse arg dsn .
return "'"dsn"'"
endProcedure jcl2dsn
dsnSetMbr: procedure expose m.
parse arg dsn, mbr
bx = pos('(', dsn)
if bx > 0 then
dsn = strip(left(dsn, bx-1))
if mbr <> '' then
dsn = dsn'('strip(mbr)')'
return dsn
endProcedure dsnSetMbr
dsnGetMbr: procedure expose m.
parse arg dsn
lx = pos('(', dsn)
rx = pos(')', dsn, lx+1)
if lx < 1 then
return ''
else if lx < rx then
return substr(dsn, lx+1, rx-lx-1)
else
return strip(substr(dsn,lx+1))
endProcedure dsnGetMbr
/**********************************************************************
io: read or write a dataset with the following callsequences:
read: tsoOpen...'R', readDD*, tsoClose
write: tsoOpen...'W', writeDD*, tsoClose
readDD returns true if data read, false at eof
do not forget that open is mandatory to write empty file|
***********************************************************************/
/*--- open dd for read (rw='R') or write (rw='W') --------------------*/
tsoOpen: procedure expose m.
parse upper arg dd, rw
return adrTso('execio' 0 'disk'RW tsoDD(dd, 'o') '(open)')
return /* end tsoOpen */
/*--- close dd -----------------------------------------------------*/
tsoClose: procedure expose m.
parse upper arg dd
return adrTso('execio 0 diskW' dd '(finis)')
endProcedure tsoClose
/*--- read from DD ggDD into ggSt, return false at eof ---------------*/
readDD:
parse arg ggDD, ggSt, ggCnt
if ggCnt = '' then
ggCnt = 100
call adrTso 'execio' ggCnt 'diskR' ggDD '(stem' ggSt')', 2
return (value(ggSt'0') > 0)
return /* end readDD */
/*--- write to gg ggDD from stem ggSt, ggCnt records -----------------*/
writeDD:
parse arg ggDD, ggSt, ggCnt
if ggCnt == '' then
ggCnt = value(ggst'0')
call adrTso 'execio' ggCnt 'diskW' ggDD '(stem' ggSt')'
return
endSubroutine writeDD
/*--- readNx: read next line, using buffer ---------------------------*/
/*--- begin: allocate dsnSpec and ini ------------------------ -------*/
readNxBegin: procedure expose m.
parse arg m, m.m.dsn, m.m.dd, m.m.Cnt
if m.m.dd = '' then
m.m.dd = 'DDNX*'
if m.m.cnt = '' then
m.m.cnt = 1000
m.m.cx = m.m.cnt + 999
m.m.buf0x = 0
m.m.0 = 0
parse value dsnAlloc('dd('m.m.dd')' m.m.dsn) with m.m.dd m.m.free
call tsoOpen m.m.dd, 'R'
return m
endProcedure readDDNxBegin
/*--- return the stem of the next line, or '' at end -----------------*/
readNx: procedure expose m.
parse arg m
m.m.cx = m.m.cx + 1
if m.m.cx <= m.m.0 then
return m'.'m.m.cx
m.m.buf0x = m.m.buf0x + m.m.0
if \ readDD(m.m.dd, 'M.'m'.', m.m.cnt)then
return ''
m.m.cx = 1
return m'.1'
endProcedure readDDNx
/*--- return the stem of the curr line, '' at end --------------------*/
readNxCur: procedure expose m.
parse arg m
if m.m.cx <= m.m.0 then
return m'.'m.m.cx
else
return ''
endProcedure readNxCur
/*--- return the position (line number) of reader
plus le characters of the current line (default 50) ------*/
readnxPos: procedure expose m.
parse arg m, le
li = m'.'m.m.cx
li = strip(m.li, 't')
if arg() < 2 then
le = 50
if le < 1 then
li = ''
else if length(li) <= le then
li = ':' li
else
li = ':' left(li, le-3)'...'
return 'line' (m.m.buf0x + m.m.cx)li
endProcedure readnxPos
/*--- close and deallocate ------------------------------------------*/
readNxEnd: procedure expose m.
parse arg m
call tsoClose m.m.dd
call tsoFree m.m.free
return
endProcedure readDDNxEnd
/*--- standardise a dsn spec
word1 dsName or -
word2 dd or -
word3 disp or -
word4 to first : attributes in tso format
after first : attributes for new allocation
----------------------------------------------------------------------*/
dsnSpec: procedure expose m.
parse upper arg spec
rr = '' /* put leading - in separate words */
do sx=1 while words(rr) < 3 & wx \= ''
wx = word(spec, sx)
do while abbrev(wx, '-') & words(rr) < 3
wx = substr(wx, 2)
rr = rr '-'
end
rr = rr wx
end
spec = rr subWord(spec, sx)
na = ''
dd = ''
di = ''
if left(spec, 1) = '&' then /* external spec is handled ok */
spec = strip(substr(spec, 2))
do wx=1 by 1
w = word(spec, wx)
if w = '' | abbrev(w, '.') | abbrev(w, ':') then
leave
else if wordPos(w, 'OLD SHR MOD NEW')>0 | abbrev(w, 'SYSO') then
di = w
else if w = 'CATALOG' then
di = di w
else if abbrev(w, 'DD(') then
dd = substr(w, 4, length(w)-4)
else if abbrev(w, 'DSN(') then
na = strip(substr(w, 5, length(w)-5))
else if na == '' then
na = dsn2jcl(w)
else if dd == '' then
dd = w
else if di == '' then
di = w
else
leave
end
if na == '' then
na = '-'
else if abbrev(na, "'") then
na = substr(na, 2, length(na)-2)
if dd == '' then dd = '-'
if di == '' then di = '-'
re = subword(spec, wx)
if abbrev(re, '.') then
re = substr(re, 2)
return na dd di re
endProcedure dsnSpec
/*--- alloc a dsn with dsnAlloc
if the dsn is inuse wait and retry
until either the allocation is successfull
or the timeout occurs --------------------------------------*/
dsnAllocWait: procedure expose m.
parse upper arg spec, pDi, pDD, timeOut
x = max(1, arg() - 1)
do rt=0
m.adrTsoAl.1 = ''
m.adrTsoAl.2 = ''
m.adrTsoAl.3 = ''
call outtrap m.adrTsoAl.
res = dsnAlloc(spec, pDi, pDD, '*')
call outtrap off
if \ datatype(res, 'n') then
return res
msg = m.adrTsoAl.1'\n'm.adrTsoAl.2'\n'm.adrTsoAl.3
if rt > timeOut & timeOut \== '' then
return err('timeout allocating' spec time() '\n'msg)
if pos('DATA SET IS ALLOCATED TO ANOTHER', msg) < 1 then
return err('allocating' spec'\n'msg)
say time() 'sleep and retry alloc' spec
call sleep 1, 0
end
endProcedure dsnAllocWait
/*--- alloc a dsn or a dd
spec '-'<ddName>
datasetName? disposition? '.'? attributes? (':' newAtts)?
disp default disposition
dd default dd name
retRc erlaubte ReturnCodes (leer = 0)
returns if ok then ddName <rexx for free> otherwise rc -----*/
dsnAlloc: procedure expose m.
parse upper arg spec, pDi, pDD, retRc
parse value dsnSpec(spec) with na dd di rest
if na = '-' then
m.dsnAlloc.dsn = ''
else
m.dsnAlloc.dsn = na
if dd == '-' & pDD \== '' then
dd = pDD
if dd == '-' then
dd = 'DD*'
dd = tsoDD(dd, 'a')
if na == '-' & di == '-' & rest = '' then
return dd
if di = '-' then
if pDi == '' then
di = 'SHR'
else
di = pDi
if pos('(', na) < 1 then
nop
else if di = 'MOD' then
call err 'disp mod for' na
else
di = 'SHR'
if pos('/', na) > 0 then
rx = csmAlloc(na dd di rest, retRc)
else
rx = tsoAlloc(na dd di rest, retRc)
if rx = 0 then
return dd dd
else
return rx
endProcedure dsnAlloc
/*--- find a free dd with prefix dd ----------------------------------*/
tsoDD: procedure expose m.
parse arg dd, f
if symbol('m.tso.ddAlloc') \== 'VAR' then do
call errIni
m.tso.ddAlloc = ''
m.tso.ddOpen = ''
end
if m.err.ispf then
address ispExec 'vget wshTsoDD shared'
else
wshTsoDD = m.tso.ddAlloc
if f == '-' then do
ax = wordPos(dd, m.tso.ddAlloc)
if ax > 0 then
m.tso.ddAlloc = delWord(m.tso.ddAlloc, ax, 1)
ox = wordPos(dd, m.tso.ddOpen)
if ox > 0 then
m.tso.ddOpen = delWord(m.tso.ddOpen , ox, 1)
if ax < 1 & ox < 1 then
call err 'tsoDD dd' dd 'not used' m.tso.ddAlloc m.tso.ddOpen
sx = wordPos(dd, wshTsoDD)
if sx > 0 then
wshTsoDD = delWord(wshTsoDD , sx, 1)
end
else if f == 'o' then do
if wordPos(dd, m.tso.ddOpen m.tso.ddAlloc) < 1 then
m.tso.ddOpen = strip(m.tso.ddOpen dd)
end
else if f <> 'a' then do
call err 'tsoDD bad fun' f
end
else do
if right(dd, 1) = '*' then do
dd = left(dd, length(dd)-1) || m.err.screen
cx = lastPos(' 'dd, ' 'm.tso.ddAlloc)
if cx > 0 then do
old = word(substr(m.tso.ddAlloc, cx), 1)
if old = dd then
dd = dd'1'
else if datatype(substr(old, length(dd)+1), 'n') then
dd = dd || (substr(old, length(dd)+1) + 1)
else
call err 'tsoDD old' old 'suffix not numeric dd' dd
end
end
if wordPos(dd, m.tso.ddAlloc) < 1 then
m.tso.ddAlloc = strip(m.tso.ddAlloc dd)
if wordPos(dd, wshTsoDD) < 1 then
wshTsoDD = strip(wshTsoDD dd)
end
if m.err.ispf then
address ispExec 'vPut wshTsoDD shared'
return dd
endProcedure tsoDD
tsoAlloc: procedure expose m.
parse arg na dd disp rest ':' nn, retRc
c = 'alloc dd('dd')' disp
if na \== '-' then
c = c "DSN('"na"')"
else if disp = 'NEW' and nn \== '' then
c = c dsnCreateAtts(,nn)
call outtrap m.adrTsoAl.
alRc = adrTso(c rest, '*')
call outtrap off
if alRc = 0 then
return 0
if nn \= '' & wordPos(disp, 'OLD SHR') > 0 ,
& sysDsn("'"m.dsnAlloc.dsn"'") == 'DATASET NOT FOUND' then do
say 'tsoAlloc creating' c rest ':'nn
call adrTso 'alloc dd('dd') new catalog' dsnCreateAtts(na, nn)
call adrTso 'free dd('dd')'
return tsoAlloc(na dd disp rest, retRc)
end
say 'rc='alRc 'for' c rest
call saySt adrTsoal
if retRc = '*' | wordPos(alRc, retRc) > 0 then
return alRc
call err 'tsoAlloc rc' alRc 'for' c rest
endProcedure tsoAlloc
tsoAtts: procedure expose m.
parse arg dsn
rc = listDsi("'"dsn"' SMSINFO")
if rc = 0 then
mv = ''
else if rc = 4 & sysReason = 19 then do
mv = 'UNITCNT(30)'
say 'multi volume' mv
end
else if rc ^= 0 then
call err 'listDsi rc' rc 'reason' sysReason,
sysMsgLvl1 sysMsgLvl2
al = 'CAT'
al = ''
if right(sysDsSms, 7) == 'LIBRARY' ,
| abbrev(sysDsSms, 'PDS') then
al = al 'DSNTYPE(LIBRARY)'
if sysUnits = 'TRACK' then
sysUnits = 'TRACKS'
return al "DSORG("sysDSorg") MGMTCLAS("sysMgmtClass")",
"DATACLAS("sysDataClass")" ,
"RECFM("translate('1 2 3', ' 'sysREcFM, ' 123')")",
"LRECL("SYSLRECL")",
"SPACE("sysPrimary"," sysSeconds")" sysUnits mv
/* "blksize("sysBLkSIZE")" removed 3.4.13: let sms do the magic */
endProcedure tsoAtts
tsoFree: procedure expose m.
parse arg ddList, ggRet
do dx=1 to words(ddList)
dd = word(ddList, dx)
call adrTso 'free dd('dd')', ggRet
call tsoDD dd, '-'
end
return
endProcedure tsoFree
tsoFreeAll: procedure expose m.
all = m.tso.ddAlloc m.tso.ddOpen
do ax = 1 to words(all)
call adrTso 'execio 0 diskW' word(all, ax) '(finis)', '*'
end
m.tso.ddOpen = ''
call tsoFree m.tso.ddAlloc, '*'
return
endProcedure tsoFreeAll
dsnCreateAtts: procedure expose m.
parse arg dsn, atts, forCsm
forCsm = forCsm == 1
aU = ' 'translate(atts)
res = ''
if dsn \== '' then
res = "dataset('"dsnSetMbr(dsn)"')"
if abbrev(atts, '~') then
return res tsoAtts(substr(atts, 2))
if abbrev(atts, ':') then do
parse var atts a1 atts
rl = substr(a1, 3)
if abbrev(a1, ':F') then do
if rl = '' then
rl = 80
recfm='f b'
end
else do
if rl = '' then
rl = 32756
recfm = substr(a1, 2, 1) 'b'
end
res = res "recfm("space(recfm, 1-forCsm)") lrecl("rl")"
end
if pos('(', dsn) > 0 & pos(' DSNTYPE(', aU) < 1 ,
& pos(' DSORG(', aU) < 1 then
res = res 'dsntype(library) dsorg(po)'
if pos(' MGMTCLAS(', aU) < 1 then
res = res 'mgmtclas(COM#A091)'
if pos(' SPACE(', aU) < 1 then
res = res 'space(10, 1000) cyl' || copies('inder', forCsm)
return res atts
endProcedure dsnCreateAtts
/*--- check if a dataset is archive ------------------------------------
returns 'ok' if dataset on disk
'not' if dataset is not catalogued
'arc' if dataset archived
listDsi errorMsg otherwise ------------------*/
dsnArc: procedure expose m.
parse upper arg dsn
lc = listDsi("'"strip(dsn)"' noRecall")
if lc = 0 then
return 'ok'
else if lc=4 & sysReason = 19 then /* multiple volumes */
return 'ok'
else if lc=16 & sysReason = 5 then
return 'notCat'
else if lc=16 & sysReason = 9 then
return 'arc'
else
return 'listDsi cc='lc', sysReason='sysReason ,
'm2='sysMsgLvl2', m1='sysMsgLvl1
endProcedure dsnArc
/*--- read the dataset specified in ggDsnSpec to stem ggSt -----------*/
readDSN:
parse arg ggDsnSpec, ggSt
ggAlloc = dsnAlloc(ggDsnSpec, 'SHR', 'readDsN')
call adrTso 'execio * diskr' word(ggAlloc, 1) '(stem' ggSt' finis)'
call tsoFree word(ggAlloc, 2)
return
endSubroutine readDsn
/*--- write the dataset specified in ggDsnSpec from stem ggSt
write ggCnt records if not empty otherwise ggst0
if ggSay 1 then say ... records written to ... -------------*/
writeDSN:
parse arg ggDsnSpec, ggSt, ggCnt, ggSay
if ggCnt == '' then
ggCnt = value(ggst'0')
ggAlloc = dsnAlloc(ggDsnSpec, 'OLD', 'readDsN')
call adrTso 'execio' ggCnt 'diskw' word(ggAlloc, 1) ,
'(stem' ggSt 'open finis)'
call tsoFree word(ggAlloc, 2)
if ggSay == 1 | m.debug == 1 then
say ggCnt 'records written to' ggDsnSpec
return
endSubroutine writeDsn
copyDSN: procedure expose m.
parse arg frSpec, toSpec, ggSay
parse value dsnAlloc(frSpec, 'SHR', 'FRDD') with frDD frFr
parse value dsnAlloc(toSpec, 'OLD', 'TODD') with toDD toFr
call tsoOpen frDD, 'R'
call tsoOpen toDD, 'W'
cnt = 0
do while readDD(frDD, r.)
call writeDD toDD, r.
cnt = cnt + r.0
end
call tsoClose frDD
call tsoClose toDD
call tsoFree frFr toFr
if ggSay == 1 | m.debug == 1 then
say cnt 'records copied from' frSpec 'to' to toSpec
return
endSubroutine writeDsn
/* copy adrTso end ****************************************************/
/* copy err begin *** errorhandling, messages, help ****************/
errIni: procedure expose m.
if m.err.ini == 1 then
return
call utIni
m.err.ini = 1
m.err.handler = ''
m.err.cleanup = ';'
m.err.opt = ''
parse source m.err.os .
m.err.ispf = 0
m.err.screen = 0
if m.err.os \== 'LINUX' then
if sysVar('sysISPF') = 'ACTIVE' then do
m.err.ispf = 1
address ispExec 'vget zScreen shared'
m.err.screen = zScreen
end
return
endProcedure errIni
/* configure err -----------------------------------------------------*/
errReset: procedure expose m.
call errIni
parse arg m.err.opt, m.err.handler
if pos('I', translate(m.err.opt)) > 0 & m.err.ispf then
address ispExec 'control errors return'
return
endSubroutine errReset
/*--- error routine: abend with message ------------------------------*/
err:
parse arg ggTxt, ggOpt
call errIni
drop err handler cleanup opt call return
if ggOpt == '' & m.err.handler \== '' then
interpret m.err.handler
call errSay 'f}'ggTxt
call errCleanup
if ggOpt == '' then
ggOpt = m.err.opt
upper ggOpt
if pos('T', ggOpt) > 0 then do
trace ?r
say 'trace ?r in err'
end
if pos('H', ggOpt) > 0 & m.err.eCat == 'f' then do
call errSay ' }errorhandler exiting with divide by zero' ,
'to show stackHistory'
x = 1 / 0
end
call errSay ' }errorhandler exiting with exit(12)'
exit errSetRc(12)
endSubroutine err
/*--- set rc for ispf: -------------------------------------------------
if a cmd is run by ispStart, its RC is ignored,
but ISPF passes the value of the shared variable zIspfRc
back as return code
----------------------------------------------------------------------*/
errSetRc: procedure expose m.
parse arg zIspfRc
if m.err.ispf then
address ispExec vput 'zIspfRc' shared
return zIspfRc
endProcedure errSetRc
/*--- error routine: user message cleanup exit -----------------------*/
errAddCleanup: procedure expose m.
parse arg code
call errIni
/* concatenate backwards, then it is executed also backwards */
m.err.cleanup = ';'code || m.err.cleanup
return
endProcedure errAddCleanup
errRmCleanup: procedure expose m.
parse arg code
call errIni
cx = pos(';'code';', m.err.cleanup)
if cx > 0 then
m.err.cleanup = left(m.err.cleanup, cx) ,
|| substr(m.err.cleanup, cx + length(code)+2)
return
endProcedure errRmCleanup
errCleanup: procedure expose m.
call errIni
errCleanup = m.err.cleanup
if errCleanup <> ';' then do
m.err.cleanup = ';'
say 'err cleanup begin' errCleanup
interpret errCleanup
say 'err cleanup end' errCleanup
end
if symbol('m.tso.ddAlloc') == 'VAR' then
call tsoFreeAll
return
endProcedure errCleanup
/*--- say an errorMessage msg with pref and linesplits --------------*/
errSay: procedure expose m.
parse arg msg
return saySt(errMsg(msg))
/*--- prefix an errormessage with pref,
split it into lines at \n to stem m.err -------------------*/
errMsg: procedure expose m.
parse arg msg
m.err.eCat = 'f'
do while substr(msg, 2, 1) == '}'
parse var msg m.err.eCat '}' msg
end
res = msg
if m.err.eCat <> '' then do
pTxt = ',error,fatal error,input error,s-}scanErr,warning,'
/* pTxt = ',error,fatal error,input error,syntax error,warning,' */
px = pos(','m.err.eCat, pTxt)
if px < 1 then do
m.err.eCat = 'f'
px = pos(','m.err.eCat, pTxt)
end
res = substr(pTxt, px+1, pos(',', pTxt, px+2)-px-1)
if substr(res, 3, 1) == '}' then
parse var res 2 opt 3 br 4 res
if opt == '-' then
res = res msg
else do
parse source . . s3 . /* current rexx */
res = res 'in' s3':' msg
end
end
return splitNl(err, res) /* split lines at \n */
endProcedure errMsg
splitNL: procedure expose m.
parse arg st, msg
bx = 1
do lx=1 to 20
ex = pos('\n', msg, bx)
if ex < bx then
leave
m.st.lx = substr(msg, bx, ex-bx)
bx = ex+2
end
m.st.lx = substr(msg, bx)
m.st.0 = lx
return st
endProcedure splitNL
/*--- say (part of) the lines of a stem ----------------------------*/
saySt: procedure expose m.
parse arg st, fx, tx
do lx=word(fx 1, 1) to word(tx m.st.0, 1)
say m.st.lx
end
return st
endProcedure saySt
/*--- out (part of) the lines of a stem ----------------------------*/
outSt: procedure expose m.
parse arg st, fx, tx
do lx=word(fx 1, 1) to word(tx m.st.0, 1)
call out m.st.lx
end
return st
endProcedure outSt
/*--- say a trace message if m.trace is set --------------------------*/
debug: procedure expose m.
parse arg msg
if m.debug == 1 then
say 'debug:' msg
return
endProcedure debug
/*--- output a trace if m.trace is set -------------------------------*/
trc: procedure expose m.
parse arg msg
if m.trace == 1 then
call out 'trc:' msg
return
endProcedure trc
/*--- assert that the passed rexx expression evaluates to true -------*/
assert:
interpret 'assertRes =' arg(1)
if assertRes \==1 then
call err 'assert failed' arg(1) '==>' assertRes':' arg(2)
return
endProcedure assert
/*--- abend with Message after displaying help -----------------------*/
errHelp: procedure expose m.
parse arg msg
call errSay 'i}'msg
call help 0
call err 'i}'msg
endProcedure errHelp
/*--- display the first comment block of the source as help ----------*/
help: procedure expose m.
parse arg doClear
if doClear \== 0 then
address tso 'clear'
parse source . . s3 .
say right(' help for rexx' s3, 72, '*')
do lx=1 while pos('/*', sourceLine(lx)) < 1
if lx > 10 then
return err('initial commentblock not found for help')
end
doInc = 1
ho = m.err.helpOpt
do lx=lx+1 to sourceline() while pos('*/', sourceline(lx)) = 0
li = strip(sourceLine(lx), 't')
cx = lastPos('{', li)
if cx > 0 then do
if length(ho) = 1 then
doInc = cx = length(li) | pos(ho, li, cx+1) > 0
li = left(li, cx-1)
end
if doInc then
say li
end
say right(' end help for rexx' s3, 72, '*')
return 4
endProcedure help
/* copy err end *****************************************************/
/* copy ut begin *****************************************************/
utIni: procedure expose m.
if m.ut.ini == 1 then
return
m.ut.ini = 1
m.ut.digits = '0123456789'
m.ut.alfLC = 'abcdefghijklmnopqrstuvwxyz'
m.ut.alfUC = translate(m.ut.alfLc)
m.ut.Alfa = m.ut.alfLc || m.ut.alfUC
m.ut.alfNum = m.ut.alfa || m.ut.digits
m.ut.alfDot = m.ut.alfNum || '.'
m.ut.alfId = m.ut.alfNum'_' /* avoid rexx allowed @ # $ ¬ . | ? */
m.ut.alfIdN1 = m.ut.digits /* not as first character */
m.ut.alfRex = m.ut.Alfa'.0123456789@#$?' /* charset puff mit ¬*/
m.ut.alfRexN1= '.0123456789'
m.ut.alfPrint = m.ut.alfNum'+-*/=()¢!{}<> .:,;?|''"%&#@$£\_'
return
endProcedure utIni
/*--- if function warning all3 arguments get evaluated|
e.g if(x=0, 'infinity', 1/0) will fail| -----------*/
if: procedure expose m.
parse arg co, ifTrue, ifFalse
if co then
return ifTrue
else
return ifFalse
endProcedure if
/*--- embedded ASSignement:
assign the second argument to the variable with name in first arg
and return the value assigned ----------------------------------*/
ass:
call value arg(1), arg(2)
return arg(2)
/*--- embedded ASSignement return NotNull:
assign the second argument to the variable with name in first arg
and return 1 if value not null, 0 if null ----------------------*/
assNN:
call value arg(1), arg(2)
return arg(2) \== ''
/*--- return current time and cpu usage ------------------------------*/
utTime: procedure expose m.
return time() 'ela='time('E') 'cpu='sysvar('syscpu'),
'su='sysvar('syssrv')
tstUtTime: procedure expose m.
say 'begin' utTime() sysvar('sysnode')
do 3000000
end
say 'end ' utTime()
return
/*--- sleep several seconds ------------------------------------------*/
sleep: procedure expose m.
parse arg secs, sayIt
if sayit <> 0 then
say 'sleeping' secs 'secs' time()
CALL SYSCALLS 'ON'
ADDRESS SYSCALL "sleep" secs
CALL SYSCALLS 'OFF'
if sayit <> 0 then
say 'slept' secs 'secs' time()
return
endProcedure sleep
/*--- left without truncation ----------------------------------------*/
lefPad: procedure expose m
parse arg s, len
if length(s) >= len then
return s
return left(s, len)
endProcedure lefPad
/*--- right without truncation ---------------------------------------*/
rigPad: procedure expose m
parse arg s, len
if length(s) >= len then
return s
return right(s, len)
endProcedure rigPad
/*--- quote string txt using quoteChar qu ("" ==> ") -----------------*/
quote: procedure expose m.
parse arg txt, qu
if qu = '' then
qu = '"'
res = qu
ix = 1
do forever
qx = pos(qu, txt, ix)
if qx = 0 then
return res || substr(txt, ix) || qu
res = res || substr(txt, ix, qx-ix) || qu || qu
ix = qx + length(qu)
end
endProcedure quote
/*--- translate to lowercase -----------------------------------------*/
ut2lc: procedure expose m.
parse arg s
return translate(s, m.ut.alfLc, m.ut.alfUc)
/*--- verify an id ---------------------------------------------------*/
verifId: procedure expose m.
parse arg src, extra
if pos(left(src, 1), m.ut.alfIdN1) > 0 then
return 1
else
return verify(src, m.ut.alfId || extra, 'n')
/*--- return the count of occurrences of needle in heyStack ----------*/
posCount: procedure expose m.
parse arg needle, hayStack, start, fin
if start = '' then
start = 1
if fin = '' then
fin = length(hayStack) + 1 - length(needle)
do cnt = 0 by 1
start = pos(needle, haystack, start)
if start < 1 | start > fin then
return cnt
start = start + length(needle)
end
endProcedure posCount
repAll: procedure expose m.
parse arg src
do ax = 2 by 2 to arg()
src = repAl2(src, src, arg(ax), arg(ax+1))
end
return src
endProcedure repAll
repAl2: procedure expose m.
parse arg src, sPos, old, new
res = ''
cx = 1
do forever
nx = pos(old, sPos, cx)
if nx < 1 then
return res || substr(src, cx)
res = res || substr(src, cx, nx-cx) || new
cx = nx + length(old)
end
endProcedure repAl2
repAllWords: procedure expose m.
parse arg src, w, new
res = ''
wx = 0
cx = 1
do forever
wx = wordPos(w, src, wx+1)
if wx < 1 then
return res || substr(src, cx)
nx = wordindex(src, wx)
res = res || substr(src, cx, nx-cx) || new
cx = nx + length(w)
end
endProcedure repAllWords
tstUtc2d: procedure expose m.
numeric digits 33
say c2d('ffffff'x)
say utc2d('ffffff'x)
say utc2d('01000000'x) 256*256*256
say utc2d('01000001'x)
say utc2d('020000FF'x) 256*256*256*2+255
say utc2d('03020000EF'x) 256*256*256*770+239
return
endProcedure tstUtc2d
utc2d: procedure expose m.
parse arg ch
cx = length(ch) // 3
if cx = 0 then
cx = 3
res = c2d(left(ch, cx))
do cx=cx+1 by 3 to length(ch)
res = res * 16777216 + c2d(substr(ch, cx, 3))
end
return res
/* copy ut end ********************************************************/
}¢--- A540769.WK.REXX.O13(DBXCMP) cre=2010-07-30 mod=2010-08-05-18.16.26 A540769 ---
$=di=DSN.DBX.SRCCAT(ZZCMP020)
$=do=DSN.DBX.SRCCAT(ZZCMP02Z)
ic = 0
oc = 0
call dsnAlloc 'dd(ddi)' $di
call dsnAlloc 'dd(ddo)' $do
do while readDD(ddi, i.)
ox = 0
do ix=1 to i.0
ic = ic + 1
if substr(i.ix, 3, 20) \= 'F332163' then do
oc = oc + 1
ox = ox + 1
if ox \= ix then
i.ox = i.ix
end
end
i.0 = ox
call writeDD ddo, i.
end
call readDDEnd ddI
call writeDDEnd ddO
call adrTso 'free dd(ddi ddo)'
$$- 'in' ic 'out' oc
$#out 20100805 16:39:01
in 89255 out 89184
$#out 20100730 18:01:06
in 89255 out 89184
$#out 20100730 17:52:02
in 89255 out 89184
$#out 20100730 17:49:49
$#out
$#out 20100730 17:49:32
}¢--- A540769.WK.REXX.O13(DBXREN) cre=2013-01-08 mod=2013-01-08-12.42.57 A540769 ---
parse arg dbsy ana
if dbSy == '' then
parse value 'DBAF WK40300F' with dbsy ana
say 'dbsy' dbsy 'ana' ana
msk = 'DSN.?'dbsy'.'ana'.**'
call csiOpen csi, 'DSN.C'dbsy'.'ana'.**'
do dx=1 while csiNext(csi, 'CSI.'dx)
say dx m.csi.dx
end
call csiOpen csi, 'DSN.R'dbsy'.'ana'.**'
do dx=dx while csiNext(csi, 'CSI.'dx)
say dx m.csi.dx
end
dx = dx - 1
last = 'ff'x
cA = 0
do cx=1 to dx
lx = lastPos('.', m.csi.cx)
ly = substr(m.csi.cx, lx+1, 1)
if ly == 'A' then
cA = cA + 1
else if ly << last then
last = ly
say 'y' ly 'l' last 'dsn' m.csi.cx
end
if cA == 0 then
call err 'keine aktuellen DSNs in' msk'.A*'
if last == 'ff'x then do
nxt = 'Z'
end
else do
abc = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
ax = pos(last, abc)
if ax < 2 then
call err 'last' last 'keine rename moeglich'
nxt = substr(abc, ax-1, 1)
end
say 'renaming' ca 'DSNs from' msk'.A* to' msk'.'nxt'*'
do cx=1 to dx
lx = lastPos('.', m.csi.cx)
ly = substr(m.csi.cx, lx+1, 1)
if ly == 'A' then
call adrTso 'rename' ,
"'"m.csi.cx"'" "'"overlay(nxt, m.csi.cx, lx+1)"'"
end
exit
/* copy csi begin ***************************************************
csi interface: see dfs managing catalogs appendix c
returncode/reason see message IDC3009I
**********************************************************************/
/*--- specify dsn mask and fields to start a csi catalog search --------
arguments:
m objectPointer
dsnMask specifies the dsns with wildcards:
% 1 character
* 0 - n character in one level
** 0 - n levels
fields a (space separated) list of field names -------------*/
csiOpen: procedure expose m.
parse arg m, dsnMask, fields
m.m.fld.0 = words(fields)
ffix = d2c(m.m.fld.0, 2)
do x=1 to m.m.fld.0
m.m.fld.x = translate(word(fields, x))
ffix = ffix || left(m.m.fld.x, 8)
end
if dsnMask \== '' & pos('*', dsnMask) < 1 then
dsnMask = dsnMask'.**'
m.m.filt = left(dsnMask, 149) ,
|| left('Y', 3) , /* resume offset 149 */
|| ffix /* csiNumEn offset 152 */
WORKLEN = 1024 * 64
m.m.work = D2C(WORKLEN,4) || COPIES('00'X,WORKLEN-4)
m.m.pos = workLen + 1
return
endProcedure csiOpen
/*--- put the next dsn into m.o and m.o.* (for other fields)
return 1 if next dsn exists 0 otherwise ------------------------*/
csiNext: procedure expose m.
parse arg m, o
usedL = C2D(SUBSTR(m.m.work,9,4)) /* GET AMOUNT OF WORK AREA USED */
px = m.m.pos
do forever
if px > usedL then do
if substr(m.m.filt, 150, 1) \== 'Y' then do
m.m.pos = px
m.o = ''
return 0
end
reason = left('', 4)
ADDRESS LINKPGM 'IGGCSI00 reason m.'m'.filt m.'m'.work'
if rc == 0 & substr(reason, 3, 2) == '0000'x then
nop
else if rc == 4 & substr(reason, 3, 2) == '0464'x then
say 'data set entry with error'
else
call err 'call csi returns' rc,
'rc' c2d(substr(reason, 4,1)),
'reason' c2d(substr(reason, 3,1)),
'module' substr(reason, 1,2)
usedL = C2D(SUBSTR(m.m.work,9,4)) /* GET WORK AREA USED */
numFD = C2D(SUBSTR(m.m.work,13,2)) /* no flds + 1 */
if numFd <> m.m.fld.0 + 1 then
call err 'csiNumFd' numFd 'not' m.m.fld.0 '+' 1
px = 15
iterate
end
eType = substr(m.m.work, px+1, 1)
m.o = strip(substr(m.m.work, px+2, 44), 't')
flag = substr(m.m.work, px, 1)
/* say 'eType' eType m.o 'flag' c2x(flag) */
if eType == '0' then do
if flag \== '00'x & flag \== '40'x then
call err 'flag' c2x(flag) 'for catalog' m.o
px = px + 50 /* length of catalog entry */
iterate
end
else do
if \ abbrev(x2b(c2x(flag)), '101') then
call err 'call csi entry flag' x2b(c2x(flag)),
'rc' c2d(substr(m.m.work, px+49,1)),
'reason' c2d(substr(m.m.work, px+48,1)),
'module' substr(m.m.work, px+46, 2),
'for entry' m.o,
'see qw IDC3009I'
py = px + 46
tl = c2d(substr(m.m.work, py, 2))
pl = py + 4
pf = py + m.m.fld.0 * 2 + 4
do fx = 1 to m.m.fld.0
fi = m.m.fld.fx
fl = c2d(substr(m.m.work, pl, 2))
m.o.fi = substr(m.m.work, pf, fl)
if fi = 'MGMTCLAS' then
m.o.fi = substr(m.o.fi, 3, c2d(left(m.o.fi ,2)))
else if wordPos(fi, 'COMUDSIZ NOBYTTRK') > 0 then
m.o.fi = c2d(m.o.fi)
pf = pf + fl
pl = pl + 2
end
if py + tl <> pf then
call err 'length mismatch for entry' m.o
m.m.pos = pf
return 1
end
end
endProcedure csiNext
/*--- if dsn is arcived return 'arcive'
if dsn is tape return 'tape'
otherwise return managment class ------------------------------*/
csiArcTape: procedure expose m.
parse arg vo, cl, dt, dsn
if vo = '' then
say err '||| no volume for dsn' dsn
else if vo = 'ARCIVE' then
res = 'arcive'
else if cl <> '' then
res = cl
else if abbrev(vo, 'SHR') then
res = 'SHR'
else
res = 'tape'
if res = 'arcive' then
return res
/*if abbrev(res, 'ar') \= abbrev(dt, '00'x) , */
if abbrev(res, 'ta') \= abbrev(c2x(left(dt, 1)), '7') ,
| (left(res, 1) >= 'A') \= abbrev(dt, '30'x) then
say '||| mismatch cl' cl 'vo' vo 'dt' c2x(dt) 'dsn' dsn
return res
endProcedure csiArcTape
/* copy csi end ******************************************************/
/* copy adrTso begin *************************************************/
/*--- send ggTsoCmd to tso, fail if rc <> 0 or not listed in ggRet ---*/
adrTso:
parse arg ggTsoCmd, ggRet
address tso ggTsoCmd
if rc == 0 then return 0
else if ggRet == '*' then return rc
else if wordPos(rc, ggRet) > 0 then return rc
else
call err 'adrTso rc' rc 'for' ggTsoCmd
return /* end adrTso */
/*--- format dsn from tso format to jcl format -----------------------*/
dsn2jcl: procedure expose m.
parse upper arg dsn ., addPrefix
if left(dsn,1) = "'" then
return strip(dsn, 'b', "'")
sp = sysvar('SYSPREF')
if sp == '' then
sp = userid()
cx = pos('~', dsn)
if cx < 1 & addPrefix == 1 then
return sp'.'dsn
do while cx \== 0
le = left(dsn, cx-1)
ri = substr(dsn, cx+1)
if right(le, 1) == '.' | left(ri, 1) == '.' then
dsn = le || sp || ri
else
dsn = le || left('.', le \== '') || sp ,
|| left('.', ri \== '') || ri
cx = pos('~', spec, cx)
end
return dsn
endProcedure dsn2Jcl
/*--- format dsn from jcl format to tso format -----------------------*/
jcl2dsn: procedure expose m.
parse arg dsn .
return "'"dsn"'"
endProcedure jcl2dsn
dsnSetMbr: procedure expose m.
parse arg dsn, mbr
bx = pos('(', dsn)
if bx > 0 then
dsn = strip(left(dsn, bx-1))
if mbr <> '' then
dsn = dsn'('strip(mbr)')'
return dsn
endProcedure dsnSetMbr
dsnGetMbr: procedure expose m.
parse arg dsn
lx = pos('(', dsn)
rx = pos(')', dsn, lx+1)
if lx < 1 then
return ''
else if lx < rx then
return substr(dsn, lx+1, rx-lx-1)
else
return strip(substr(dsn,lx+1))
endProcedure dsnGetMbr
/**********************************************************************
io: read or write a dataset with the following callsequences:
read: readDDBegin, readDD*, readDDEnd
write: writeBegin, writeDD*, writeEnd
readDD returns true if data read, false at eof
***********************************************************************/
/*--- prepare reading from a DD --------------------------------------*/
readDDBegin: procedure expose m.
parse upper arg ggDD
call errAddCleanup 'call readDDEnd' ggDD', "*"'
return /* end readDDBegin */
/*--- read from DD ggDD into ggSt, return false at eof ---------------*/
readDD:
parse arg ggDD, ggSt, ggCnt
if ggCnt = '' then
ggCnt = 100
call adrTso 'execio' ggCnt 'diskr' ggDD '(stem' ggSt')', 2
return (value(ggSt'0') > 0)
return /* end readDD */
/*--- finish reading DD ggDD ----------------------------------------*/
readDDEnd: procedure expose m.
parse upper arg ggDD, ggRet
call errRmCleanup 'call readDDEnd' ggDD', "*"'
return adrTso('execio 0 diskr' ggDD '(finis)', ggRet)
endProcedure readDDEnd
/*--- prepare writing to DD ggDD -------------------------------------*/
writeDDBegin: procedure expose m.
parse upper arg ggDD
/* ensure file is erased, if no records are written */
call adrTso 'execio' 0 'diskw' ggDD '(open)'
call errAddCleanup 'call writeDDEnd' ggDD', "*"'
return /* end writeDDBegin */
/*--- write to gg ggDD from stem ggSt, ggCnt records -----------------*/
writeDD:
parse arg ggDD, ggSt, ggCnt
if ggCnt == '' then
ggCnt = value(ggst'0')
call adrTso 'execio' ggCnt 'diskw' ggDD '(stem' ggSt')'
return
endSubroutine writeDD
/*--- end writing to dd ggDD (close) --------------------------------*/
writeDDEnd: procedure expose m.
parse upper arg ggDD, ggRet
call errRmCleanup 'call writeDDEnd' ggDD', "*"'
return adrTso('execio 0 diskw' ggDD '(finis)', ggRet)
endProcedure writeDDEnd
/*--- readNx: read next line, using buffer ---------------------------*/
/*--- begin: allocate dsnSpec and ini ------------------------ -------*/
readNxBegin: procedure expose m.
parse arg m, m.m.dsn, m.m.dd, m.m.Cnt
if m.m.dd = '' then
m.m.dd = 'DDNX'
if m.m.cnt = '' then
m.m.cnt = 1000
m.m.cx = m.m.cnt + 999
m.m.buf0x = 0
m.m.0 = 0
m.m.free = subword(dsnAlloc('dd('m.m.dd')' m.m.dsn), 2)
call readDDBegin m.m.dd
return m
endProcedure readDDNxBegin
/*--- return the stem of the next line, or '' at end -----------------*/
readNx: procedure expose m.
parse arg m
m.m.cx = m.m.cx + 1
if m.m.cx <= m.m.0 then
return m'.'m.m.cx
m.m.buf0x = m.m.buf0x + m.m.0
if \ readDD(m.m.dd, 'M.'m'.', m.m.cnt)then
return ''
m.m.cx = 1
return m'.1'
endProcedure readDDNx
/*--- return the stem of the curr line, '' at end --------------------*/
readNxCur: procedure expose m.
parse arg m
if m.m.cx <= m.m.0 then
return m'.'m.m.cx
else
return ''
endProcedure readNxCur
/*--- return the position (line number) of reader
plus le characters of the current line (default 50) ------*/
readnxPos: procedure expose m.
parse arg m, le
li = m'.'m.m.cx
li = strip(m.li, 't')
if arg() < 2 then
le = 50
if le < 1 then
li = ''
else if length(li) <= le then
li = ':' li
else
li = ':' left(li, le-3)'...'
return 'line' (m.m.buf0x + m.m.cx)li
endProcedure readnxPos
/*--- close and deallocate ------------------------------------------*/
readNxEnd: procedure expose m.
parse arg m
call readDDEnd m.m.dd
interpret m.m.free
return
endProcedure readDDNxEnd
/*--- standardise a dsn spec
word1 dsName or -
word2 dd or -
word3 disp or -
word4 to first : attributes in tso format
after first : attributes for new allocation
----------------------------------------------------------------------*/
dsnSpec: procedure expose m.
parse upper arg spec
rr = '' /* put leading - in separate words */
do sx=1 while words(rr) < 3 & wx \= ''
wx = word(spec, sx)
do while abbrev(wx, '-') & words(rr) < 3
wx = substr(wx, 2)
rr = rr '-'
end
rr = rr wx
end
spec = rr subWord(spec, sx)
na = ''
dd = ''
di = ''
if left(spec, 1) = '&' then /* external spec is handled ok */
spec = strip(substr(spec, 2))
do wx=1 by 1
w = word(spec, wx)
if w = '' | abbrev(w, '.') | abbrev(w, ':') then
leave
else if wordPos(w, 'OLD SHR MOD NEW')>0 | abbrev(w, 'SYSO') then
di = w
else if w = 'CATALOG' then
di = di w
else if abbrev(w, 'DD(') then
dd = substr(w, 4, length(w)-4)
else if abbrev(w, 'DSN(') then
na = strip(substr(w, 5, length(w)-5))
else if na == '' then
na = dsn2jcl(w)
else if dd == '' then
dd = w
else if di == '' then
di = w
else
leave
end
if na == '' then
na = '-'
else if abbrev(na, "'") then
na = substr(na, 2, length(na)-2)
if dd == '' then dd = '-'
if di == '' then di = '-'
re = subword(spec, wx)
if abbrev(re, '.') then
re = substr(re, 2)
return na dd di re
endProcedure dsnSpec
/*--- alloc a dsn with dsnAlloc
if the dsn is inuse wait and retry
until either the allocation is successfull
or the timeout occurs --------------------------------------*/
dsnAllocWait: procedure expose m.
parse upper arg spec, pDi, pDD, timeOut
x = max(1, arg() - 1)
do rt=0
m.adrTsoAl.1 = ''
m.adrTsoAl.2 = ''
m.adrTsoAl.3 = ''
call outtrap m.adrTsoAl.
res = dsnAlloc(spec, pDi, pDD, '*')
call outtrap off
if \ abbrev(res, ' ') then
return res
msg = m.adrTsoAl.1'\n'm.adrTsoAl.2'\n'm.adrTsoAl.3
if rt > timeOut & timeOut \== '' then
return err('timeout allocating' spec time() '\n'msg)
if pos('DATA SET IS ALLOCATED TO ANOTHER', msg) < 1 then
return err('allocating' spec'\n'msg)
say time() 'sleep and retry alloc' spec
call sleep 1, 0
end
endProcedure dsnAllocWait
/*--- alloc a dsn or a dd
spec '-'<ddName>
datasetName? disposition? '.'? attributes? (':' newAtts)?
disp default disposition
dd default dd name
retRc erlaubte ReturnCodes (leer = 0)
returns if ok then ddName <rexx for free> otherwise rc -----*/
dsnAlloc: procedure expose m.
parse upper arg spec, pDi, pDD, retRc
parse value dsnSpec(spec) with na dd di rest
if na = '-' then
m.dsnAlloc.dsn = ''
else
m.dsnAlloc.dsn = na
if na == '-' & dd \== '-' & di == '-' & rest = '' then
return dd
if dd == '-' & pDD \== '' then
dd = pDD
if dd == '-' then do
if symbol('m.adrTso.ddNum') = 'VAR' then
dd = m.adrTso.ddNum + 1
else
dd = 1
m.adrTso.ddNum = dd
dd = 'DD' || dd
end
if di = '-' & pDi \== '' then
di = pDi
if di = '-' then
di = 'SHR'
else if pos('(', na) < 1 then
nop
else if di = 'MOD' then
call err 'disp mod for' na
else
di = 'SHR'
if pos('/', na) > 0 then
return csmAlloc(na dd di rest, retRc)
else
return tsoAlloc(na dd di rest, retRc)
endProcedure dsnAlloc
tsoAlloc: procedure expose m.
parse arg na dd disp rest ':' nn, retRc
c = 'alloc dd('dd')' disp
if na \== '-' then
c = c "DSN('"na"')"
else if disp = 'NEW' and nn \== '' then
c = c dsnCreateAtts(,nn)
call outtrap m.adrTsoAl.
alRc = adrTso(c rest, '*')
call outtrap off
if alRc = 0 then do
call errAddCleanup 'call tsoFree' dd', "*"'
return dd 'call tsoFree' dd';'
end
if nn \= '' & wordPos(disp, 'OLD SHR') > 0 ,
& sysDsn("'"m.dsnAlloc.dsn"'") == 'DATASET NOT FOUND' then do
say 'tsoAlloc creating' c rest ':'nn
call adrTso 'alloc dd('dd') new catalog' dsnCreateAtts(na, nn)
call adrTso 'free dd('dd')'
return tsoAlloc(na dd disp rest, retRc)
end
do ax=1 to m.adrTsoAl.0
say m.adrTsoal.ax
end
if retRc = '*' | wordPos(alRc, retRc) > 0 then
return ' ' alRc
call err 'tsoAlloc rc' alRc 'for' c rest
endProcedure tsoAlloc
tsoAtts: procedure expose m.
parse arg dsn
rc = listDsi("'"dsn"' SMSINFO")
if rc = 0 then
mv = ''
else if rc = 4 & sysReason = 19 then do
mv = 'UNITCNT(30)'
say 'multi volume' mv
end
else if rc ^= 0 then
call err 'listDsi rc' rc 'reason' sysReason,
sysMsgLvl1 sysMsgLvl2
al = 'CAT'
al = ''
if right(sysDsSms, 7) == 'LIBRARY' ,
| abbrev(sysDsSms, 'PDS') then
al = al 'DSNTYPE(LIBRARY)'
if sysUnits = 'TRACK' then
sysUnits = 'TRACKS'
al = al "DSORG("sysDSorg") MGMTCLAS("sysMgmtClass")",
"DATACLAS("sysDataClass")" ,
"RECFM("translate('1 2 3', ' 'sysREcFM, ' 123')")",
"LRECL("SYSLRECL")",
"blksize("sysBLkSIZE")",
"SPACE("sysPrimary"," sysSeconds")" sysUnits mv
return al
endProcedure tsoAtts
tsoFree: procedure expose m.
parse arg dd, ggRet
call adrTso 'free dd('dd')', ggRet
call errRmCleanup 'call tsoFree' dd', "*"'
return
endProcedure tsoFree
dsnCreateAtts: procedure expose m.
parse arg dsn, atts, forCsm
forCsm = forCsm == 1
aU = ' 'translate(atts)
if abbrev(atts, ':') then do
parse var atts a1 atts
bl = 32760
rl = substr(a1, 3)
if abbrev(a1, ':F') then do
if rl = '' then
rl = 80
recfm='f b'
bl = bl - (bl // rl)
end
else do
if rl = '' then
rl = bl-4
recfm = substr(a1, 2, 1) 'b'
end
if forCsm then
atts = atts "recfm("space(recfm, 0)") lrecl("rl")",
"blkSize("bl")"
else
atts = atts "recfm("recfm") lrecl("rl") block("bl")"
end
if pos('(', dsn) > 0 & pos(' DSNTYPE(', aU) < 1 ,
& pos(' DSORG(', aU) < 1 then
atts = atts 'dsntype(library) dsorg(po)'
if pos(' MGMTCLAS(', aU) < 1 then
atts = atts 'mgmtclas(COM#A091)'
if pos(' SPACE(', aU) < 1 then
if forCsm then
atts = atts 'space(10, 1000) cylinder'
else
atts = atts 'space(10, 1000) cyl'
if dsn == '' then
return atts
return "dataset('"dsnSetMbr(dsn)"')" atts
endProcedure dsnCreateAtts
/*--- read the dataset specified in ggDsnSpec to stem ggSt -----------*/
readDSN:
parse arg ggDsnSpec, ggSt
ggAlloc = dsnAlloc(ggDsnSpec, 'SHR', 'readDsN')
call adrTso 'execio * diskr' word(ggAlloc, 1) '(stem' ggSt' finis)'
interpret subword(ggAlloc, 2)
return
endSubroutine readDsn
/*--- write the dataset specified in ggDsnSpec from stem ggSt
write ggCnt records if not empty otherwise ggst0
if ggSay 1 then say ... records written to ... -------------*/
writeDSN:
parse arg ggDsnSpec, ggSt, ggCnt, ggSay
if ggCnt == '' then
ggCnt = value(ggst'0')
ggAlloc = dsnAlloc(ggDsnSpec, 'OLD', 'readDsN')
call adrTso 'execio' ggCnt 'diskw' word(ggAlloc, 1) ,
'(stem' ggSt 'open finis)'
interpret subword(ggAlloc, 2)
if ggSay == 1 | m.debug == 1 then
say ggCnt 'records written to' ggDsnSpec
return
endSubroutine writeDsn
copyDSN: procedure expose m.
parse arg frSpec, toSpec, ggSay
frDD = dsnAlloc(frSpec, 'SHR', 'FRDD')
toDD = dsnAlloc(toSpec, 'OLD', 'TODD')
call readDDBegin word(frDD, 1)
call writeDDBegin word(toDD, 1)
cnt = 0
do while readDD(word(frDD, 1), r.)
call writeDD word(toDD, 1), r.
cnt = cnt + r.0
end
call readDDEnd word(frDD, 1)
call writeDDEnd word(toDD, 1)
interpret ';' subword(frDD, 2) '; ; ;' subword(toDD, 2)
if ggSay == 1 | m.debug == 1 then
say cnt 'records copied from' frSpec 'to' to toSpec
return
endSubroutine writeDsn
/* copy adrTso end ****************************************************/
/* copy err begin ******************************************************
messages, errorhandling,help
***********************************************************************/
errIni: procedure expose m.
if m.err.ini == 1 then
return
call outIni
m.err.ini = 1
m.err.handler = ''
m.err.cleanup = ';'
m.err.opt = ''
return
endProcedure errIni
/* configure err -----------------------------------------------------*/
errReset: procedure expose m.
call errIni
parse arg m.err.opt, m.err.handler
if pos('I', translate(m.err.opt)) > 0 then
if errOS() \== 'LINUX' then
if sysVar('sysISPF') = 'ACTIVE' then
call adrIsp 'control errors return'
return
endSubroutine errReset
/*--- error routine: abend with message ------------------------------*/
err:
parse arg ggTxt, ggOpt
call errIni
drop err handler cleanup opt call return
if ggOpt == '' & m.err.handler \== '' then do
if 1 then do /* no detection of recursive err call loop
--> will anyway fail by stack overflow */
interpret m.err.handler
end
else do
/* avoid recursive err call loop */
drop call return
if symbol('m.err.call') \== 'VAR' then
m.err.call = 1
else
m.err.call = m.err.call + 1
if m.err.call > 10 then do
say 'errHandler loop:' m.err.handler
end
else do
m.err.return = 1
call errInterpret m.err.handler
m.err.call = m.err.call - 1
if m.err.return then
return result
end
end
end
call outDst
call errSay ggTxt, 'e'
call errCleanup
if ggOpt == '' then
ggOpt = m.err.opt
ggOpt = translate(ggOpt)
if pos('T', ggOpt) > 0 then do
trace ?r
say 'trace ?r in err'
end
if pos('H', ggOpt) > 0 then do
call errSay 'divide by zero to show stackHistory', 'e'
x = 1 / 0
end
call errSay 'exit(12)', 'e'
exit errSetRc(12)
endSubroutine err
/*--- error routine: user message cleanup exit -----------------------*/
errEx:
parse arg ggTxt
call errIni
call outDst
call errSay ggTxt
call errCleanup
exit 8
endProcedure errEx
errAddCleanup: procedure expose m.
parse arg code
if m.err.ini \== 1 then
call errIni
/* concatenate backwards, then it is executed also backwards */
m.err.cleanup = ';'code || m.err.cleanup
return
endProcedure errAddCleanup
errRmCleanup: procedure expose m.
parse arg code
if m.err.ini \== 1 then
call errIni
cx = pos(';'code';', m.err.cleanup)
if cx > 0 then
m.err.cleanup = left(m.err.cleanup, cx) ,
|| substr(m.err.cleanup, cx + length(code)+2)
return
endProcedure errRmCleanup
errCleanup: procedure expose m.
call errIni
cl = m.err.cleanup
if cl = ';' then
return
m.err.cleanup = ';'
say 'err cleanup begin' cl
call errInterpret cl
say 'err cleanup end' cl
return
endProcedure errCleanup
errInterpret: procedure expose m.
parse arg code
interpret code
m.err.return = 0
return
endProcedure errInterpret
/*--- assert that the passed rexx expression evaluates to true -------*/
assert:
interpret 'assertRes =' arg(1)
if \ assertRes then
call err 'assert failed' arg(1)':' arg(2)
return
endProcedure assert
/*--- output an errorMessage msg with pref pref
split message in lines at '/n' ---------------------------*/
errSay: procedure expose m.
parse arg msg, pref
parse source . . ggS3 . /* current rexx */
if pref == 'e' then
msg = 'fatal error in' ggS3':' msg
else if pref == 'w' then
msg = 'warning in' ggS3':' msg
else if pref \== '' then
msg = pref':' msg
return outNl(msg)
endProcedure errSay
/*--- abend with Message after displaying help -----------------------*/
errHelp: procedure expose m.
parse arg msg, op
call errSay msg, 'e'
call help
call err msg, op
endProcedure errHelp
/*--- return the Operating System we are running on: TSO or LINUX ---*/
errOS: procedure expose m.
parse source os .
return os
endProcedure errOS
/*--- set rc for ispf: -------------------------------------------------
if a cmd is run by ispStart, its RC is ignored,
but ISPF passes the value of the shared varible 3IspfRc
back as return code
----------------------------------------------------------------------*/
errSetRc: procedure expose m.
parse arg zIspfRc
if errOS() \== 'LINUX' then
if sysVar('sysISPF') = 'ACTIVE' then
address ispExec vput 'zIspfRc' shared
return zIspfRc
endProcedure errSetRc
/*--- output a trace message if m.tr is set -----------------------*/
trc: procedure expose m.
parse arg msg
if m.trace == 1 then
call out 'trc:' msg
return
endProcedure trc
debug: procedure expose m.
parse arg msg
if m.debug == 1 then
call out 'debug' msg
return
endProcedure debug
/*--- display the first comment block of the source as help ----------*/
help: procedure expose m.
parse source . . s3 .
call out right(' help for rexx' s3, 79, '*')
do ax=1 to arg()
say ' ' arg(ax)
end
do lx=1 by 1
if pos('/*', sourceLine(lx)) > 0 then
leave
else if lx > 10 then do
call out 'initial commentblock not found for help'
return
end
end
do lx=lx+1 by 1
li = strip(sourceLine(lx), 't', ' ')
if pos('*/', li) > 0 then
leave
call out li
end
call out right(' end help for rexx' s3, 79, '*')
return 4
endProcedure help
/*--- output all lines (separated by '\n') of all args --------------*/
outNl: procedure expose m.
do ax=1 to max(1, arg())
msg = arg(ax)
sx = 0
bx = -1
do lx=1 until bx >= length(msg)
ex = pos('\n', msg, bx+2)
if ex < 1 then
ex = length(msg)+1
call out substr(msg, bx+2, ex-bx-2)
bx = ex
end
end
return 0
endProcedure outNl
/* copy err end *****************************************************/
/* copy out begin ******************************************************
out interface simple with say only
***********************************************************************/
outIni: procedure expose m.
parse arg msg
return
endProcedure outIni
/*--- output a message to the current destination -------------------*/
out: procedure expose m.
parse arg msg
say msg
return 0
endProcedure out
/*--- set a new out destination and return old one ------------------*/
outDst: procedure expose m.
parse arg d
return ''
endProcedure outDst
/* return the contents of a string or std input */
inp2str: procedure expose m.
parse arg rdr, opt
return rdr
endProcedure inp2str
/* copy out end *****************************************************/
/* copy ut begin *****************************************************/
/*--- if function warning all3 arguments get evaluated|
e.g if(x=0, 'infinity', 1/0) will fail| -----------*/
if: procedure expose m.
parse arg co, ifTrue, ifFalse
if co then
return ifTrue
else
return ifFalse
endProcedure if
/*--- embedded ASSignement:
assign the second argument to the variable with name in first arg
and return the value assigned ----------------------------------*/
ass:
call value arg(1), arg(2)
return arg(2)
/*--- embedded ASSignement only if NotNull:
assign the second argument to the variable with name in first arg
if the second arg is not null, return new value ---------------*/
assIf:
if arg(2) == '' then
return value(arg(1))
call value arg(1), arg(2)
return arg(2)
/*--- return first nonNull argument ---------------------------------*/
nn:
if arg(1) \== '' then
return arg(1)
if arg(2) \== '' then
return arg(2)
call err 'nn() both args empty'
/*--- embedded ASSignement return NotNull:
assign the second argument to the variable with name in first arg
and return 1 if value not null, 0 if null ----------------------*/
assNN:
call value arg(1), arg(2)
return arg(2) \== ''
/*--- return current time and cpu usage ------------------------------*/
timing: procedure expose m.
return return time() 'ela='time('E') 'cpu='sysvar('syscpu'),
'su='sysvar('syssrv')
timingTest: procedure expose m.
say 'begin' timing() sysvar('sysnode')
do 30000000
end
say 'end ' timing()
return
/*--- sleep several seconds ------------------------------------------*/
sleep: procedure expose m.
parse arg secs, sayIt
if sayit <> 0 then
say 'sleeping' secs 'secs' time()
CALL SYSCALLS 'ON'
ADDRESS SYSCALL "sleep" secs
CALL SYSCALLS 'OFF'
if sayit <> 0 then
say 'slept' secs 'secs' time()
return
endProcedure sleep
/*--- elongate inp with spaces up to given len -----------------------*/
elong: procedure expose m.
parse arg inp, len
if length(inp) >= len then
return inp
return left(inp, len)
endProcedure elong
/*--- quote string txt using quoteChar qu ("""" ==> ") ---------------*/
quote: procedure expose m.
parse arg txt, qu
if qu = '' then
qu = '"'
res = qu
ix = 1
do forever
qx = pos(qu, txt, ix)
if qx = 0 then
return res || substr(txt, ix) || qu
res = res || substr(txt, ix, qx-ix) || qu || qu
ix = qx + length(qu)
end
endProcedure quote
/*--- return the count of occurrences of needle in heyStack ----------*/
posCount: procedure expose m.
parse arg needle, hayStack, start, fin
if start = '' then
start = 1
if fin = '' then
fin = length(hayStack) + 1 - length(needle)
do cnt = 0 by 1
start = pos(needle, haystack, start)
if start < 1 | start > fin then
return cnt
start = start + length(needle)
end
endProcedure posCount
repAll: procedure expose m.
parse arg src, w, new
res = ''
cx = 1
do forever
nx = pos(w, src, cx)
if nx < 1 then
return res || substr(src, cx)
res = res || substr(src, cx, nx-cx) || new
cx = nx + length(w)
end
endProcedure repAll
repAllWords: procedure expose m.
parse arg src, w, new
res = ''
wx = 0
cx = 1
do forever
wx = wordPos(w, src, wx+1)
if wx < 1 then
return res || substr(src, cx)
nx = wordindex(src, wx)
res = res || substr(src, cx, nx-cx) || new
cx = nx + length(w)
end
endProcedure repAllWords
/* copy ut end ********************************************************/
}¢--- A540769.WK.REXX.O13(DBXSRCH) cre=2012-08-23 mod=2012-08-24-11.04.46 A540769 ---
$<#¢
AC04002W
AX01001W
BV01002W
CD01004C
CD02014W
CD03020W
CD03021C
CZMIX02W
DGMIX01C
DG01049W
DG01050C
DG02008W
DG02009W
DI01001W
DI05009W
DP08012C
DW10004C
ER01033W
ER01034C
EU04002W
EU99001W
FI04052C
FI04053W
GM01008C
KB01004C
KC01009W
MARTIN0W
MARTIN1C
MARTIN2C
MF03003W
MI01019C
NITRIG1C
NI02174C
NI02175C
NI03003W
NI04003C
NI10034C
NI10035W
NI10036C
OS03005C
OZ01009C
PC01032C
RA01001W
RENI001D
RV01009W
SU10001W
SV10016C
TG01012C
TT01002W
TT01003C
TV01001W
UU02011C
VV21005W
VV24001C
WA01038C
WB20003C
WF01024C
WI02033C
WI02034W
WI02035C
WK09901C
WK99101C
WK99501C
WU10010W
WU36001W
WU40018C
WU40019C
WU91001W
WY40001C
XB03051W
XB03052C
XR01023W
XR01024C
YN01003W
$!
$@for w $@¢
w = strip(left($w, 7))
call lmm 'dsn.dbx.cdl('w'*)'
$!
$| $@¢
qq=''
$@for w $@¢
qq = qq','strip($w)
if length(qq) > 50 then $@¢
$$- 'SELECT' substr(qq, 2)
qq=''
$!
$!
$$- 'SELECT' substr(qq, 2)
$!
$#out 20120824 11:04:22
SELECT AC040020,AX010010,BV010020,CD010040,CD010041,CD020140
SELECT CD020141,CD020142,CD030200,CD030210,CZMIX020,DGMIX010
SELECT DG010490,DG010500,DG020080,DG020090,DI010010,DI050090
SELECT DP080120,DP080121,DP080122,DW100040,ER010330,ER010340
SELECT ER010341,EU040020,EU040021,EU990010,FI040520,FI040530
SELECT GM010080,KB010040,KC010090,KC010091,MARTIN00,MARTIN01
SELECT MARTIN10,MARTIN20,MF030030,MF030031,MF030032,MI010190
SELECT MI010191,MI010192,MI010193,NITRIG10,NI021740,NI021741
SELECT NI021750,NI021751,NI030030,NI030031,NI040030,NI040031
SELECT NI100340,NI100341,NI100342,NI100343,NI100344,NI100345
SELECT NI100346,NI100347,NI100348,NI100350,NI100351,NI100352
SELECT NI100353,NI100354,NI100360,OS030050,OZ010090,PC010320
SELECT RA01001A,RA01001B,RA01001C,RA010010,RA010011,RA010012
SELECT RA010013,RA010014,RA010015,RA010016,RA010017,RA010018
SELECT RA010019,RENI0010,RENI0011,RV010090,SU100010,SV100160
SELECT SV100161,TG010120,TG010121,TT010020,TT010021,TT010030
SELECT TT010031,TV010010,TV010011,UU020110,VV210050,VV240010
SELECT WA010380,WA010381,WB200030,WF010240,WI020330,WI020340
SELECT WI020350,WK099010,WK099011,WK099012,WK991012,WK991013
SELECT WK995010,WU100100,WU100101,WU100102,WU360010,WU360011
SELECT WU400180,WU400181,WU400182,WU400183,WU400190,WU400191
SELECT WU910010,WY400010,XB030510,XB030520,XR010230,XR010240
SELECT YN010030,YN010031,YN010032
$#out 20120823 15:40:05
SELECT AC040020,AX010010,BV010020,CD010040,CD020140,CD020141
SELECT CD020142,CD030200,CD030210,DGMIX010,DG010490,DG010500
SELECT DG020080,DG020090,DI010010,DI050090,DP080120,DP080121
SELECT DP080122,DW100040,ER010330,ER010340,ER010341,EU040020
SELECT EU040021,EU990010,FI040520,FI040530,GM010080,KC010090
SELECT KC010091,MARTIN00,MARTIN01,MARTIN10,MARTIN20,MF030030
SELECT MF030031,MF030032,NITRIG10,NI021740,NI021741,NI021750
SELECT NI030030,NI030031,NI040030,NI040031,NI100340,NI100341
SELECT NI100342,NI100343,NI100344,NI100345,NI100346,NI100347
SELECT NI100348,NI100350,NI100351,NI100352,NI100353,NI100354
SELECT NI100360,OS030050,OZ010090,PC010320,RENI0010,RENI0011
SELECT SU100010,SV100160,SV100161,TG010120,TG010121,TT010020
SELECT TT010021,TT010030,TT010031,TV010010,TV010011,UU020110
SELECT VV210050,VV240010,WA010380,WA010381,WB200030,WF010240
SELECT WI020330,WI020340,WI020350,WK099010,WK099011,WK099012
SELECT WK991012,WK991013,WK995010,WU100100,WU100101,WU100102
SELECT WU360010,WU360011,WU400180,WU400181,WU400182,WU400190
SELECT WU400191,WU910010,WY400010,XB030510,XB030520,XR010230
SELECT XR010240,YN010030,YN010031,YN010032
$#out 20120823 15:39:36
*** compile error ***
scanErr ending $! expected after ¢
last token scanPosition
atEnd after line 85: $$- 'SELECT' substr(qq, 2)
$#out 20120823 15:35:33
}¢--- A540769.WK.REXX.O13(DBXWSH) cre=2009-10-05 mod=2009-10-05-16.01.14 A540769 ---
$=auft=DSN.DBX.AUFTRAG
$=auCo=DSN.DBA.ZUEGEL.AUFTRAG.DIRPRO
$=auCo=A540769.TMP.AUFTCOPY
$;
$<=/wsls/
WK90001C 01
$*( WK90002C 0
WK90003C 0
WK90001C 01
WK90002C 0
WK90001C 01
WK90002C 0
WK90003C 0
WK90001C 01
WK90002C 0
$*) WK90003C 0
$/wsls/
$@for ii $@/doOne/
parse value $ii with mbr opt
c = '-a'mbr 'i rr2.DBoF' strip(opt)
result = 'fail'
res = adrTso('%DBX' c, '*')
say 'res' res 'for dbx' c
trace ?r
call readDsn $auft'('mbr')', 'I.'
call writeDsn $auCo'('mbr') ::f', 'I.', , 1
$/doOne/
$***out 20091005 15:49:00
$***out 20091005 15:43:34
$***out 20091005 15:41:51
$***out 20091005 15:40:43
$***out 20091005 15:40:26
$***out 20091005 15:40:03
$***out 20091005 15:38:07
$***out 20091005 15:23:10
$***out 20091005 15:22:56
$***out 20091005 15:22:39
$***out 20091005 14:43:13
$***out 20091005 14:42:09
$***out 20091005 14:41:34
$***out 20091005 14:40:07
$***out 20091005 14:38:05
$***out 20091005 14:37:31
$***out 20091005 14:36:09
$***out 20091005 14:33:33
$***out 20091005 14:30:05
-aWK90001C i DBZF
-aWK90002C i DBZF 23
-aWK90003C i DBZF
$***out
}¢--- A540769.WK.REXX.O13(DBX0823) cre=2012-11-26 mod=2012-11-26-16.21.23 A540769 ---
/* rexx ****************************************************************
synopsis: DBX fun args v1.4
edit macro fuer CS Nutzung von DB2 AdminTool 10.1
(die a* Funktionen gehen auch mit tso dbx ...)
? diese Hilfe
a,aw,ac pr naechste AuftragsId suchen fuer praefix pr
a: anzueigen, aw, ac entsprechendes Member editieren
n, nt neuen Auftrag erstellen (nt = test)
q subSys? query und expandiert Scope Zeilen vom Db2Catalog
* fuegt alle bestehenden Objekte ein
* ergaenzt scope Zeile mit infos, z.B tb -> ts
* UNDO um Expansion rueckgaengig zu machen
* mit q, qq, etc. Zeile selekieren,
sonst werden alle expandiert
* funktioniert nicht nur in Auftrag
falls SubSys angegeben wird da gesucht sonst DBAF/DBOF
c opt? compare source gegen target
i subs nct changes in Db2Subsystem subSys importieren
subs = sub(,sub)*: Liste von Subsystemen/Umgebungen
sub: DBAF (lokal), RR2/DBOF (im PTA), RZ8(betr. Subsys)
ET, IT, PA (pta), PR (prod), pq(pta+rq2)
==> Rz/Subsys des PromotionPaths
nct: Nachtraege:
leer: noch nicht in dieses SubSys importierte
= : vom letzten import plus neue
89A : Nachtraege 8, 9 und A
v opt? version files erstellen für altes Verfahren
vc vj vs vt ec ej es et nt? : view or edit cdl,jcl,srcDdl,trgDdl
sw rz? WSL ins RZ rz schicken und clonen, ohne rz multiclone
do cmd for auftraege: batchfunktion cmd fuer jeden auftrag
opt? Optionale Optionen =, -f, -=f etc. (fuer c, v, st)
= statt aktuelle source aus Db2 extrahieren
letzte extrahierte Version als Source brauchen
-f force: ignoriere QualitaetsVerletzungen
cloneWsl dbaMulti Funktionalitaet ist hier implementiert
Typen fuer scope und dbx q (analog adminTool, grossOderKlein ist egal):
type DB TS TB VW AL IX UDT UDF TG SP SQ SY
1stelliges Kuerzel D S T V A X E F J O Q Y
Optionen im Auftrag: v10, v72, keeptgt 0, qCheck 0, dbaCheck 0
Variabeln im Auftrag (expandiert werden $varName imd ${varName})
varName ist case sensitive|)
srcNm NamensKonvention compare source (z.B. DBAF)
trgNm NamensKonvention compare target (z.B. DBAF)
impNm NamensKonvention import Ziel (z.B. DBOF)
subsys Db2 Subsystem (source, target, import, je nachdem)
Optionen: ca, bmc, ibm
Funktionen: ia (imp+ana), ie (ia+exe), ee,ve (exejcl), ew,vw (wsl)
************************************************************************
23. 8.2012 W. Keller v1015 für extract
*/ /* end of help
13. 7.2012 W. Keller typo in query scope
18. 5.2012 W. Keller im neuen Auftrag source DX0G target DC0G/DCVG @rz8
PromotionPaths angepasst und vereinfacht
4. 4.2012 W. Keller sqlQuery via csm for dbx q and qualitycheck
4. 4.2012 W. Keller fix, import submits after last import empty, chroi
14. 2.2012 W. Keller ca prototype
23.12.2011 W. Keller bmc prototype
13.12.2011 W. Keller RZ0, ToolPrefix, csmCopy
3.11.2011 W. Keller Zuegeltermine 2012
6. 9.2011 W. Keller v10 RZ8 DE0G UND DM0G ausgebaut
29.08.2011 W. Keller v10 default mit p8 und p9 alias
24.06.2011 W. Keller v10 und v72
8.06.2011 W. Keller stored procedures editiert und version=%
26.05.2011 W. Keller qCheck 0 eingefügt
30.03.2011 W. Keller import et, it, .... , DD0G -> it, trg dc0g, i pa
24.12.2010 W. Keller plexZ (mit location CHROI00Z...)
10.12.2010 W. Keller db2 release 915, damit instead of trigger kommen
19.11.2010 W. Keller viewEdit macht jetzt view für v* statt immer edit
14.10.2010 W. Keller dp4g und dp2g in rz4.* bzw rz2.*, Zuegelsch 2012
24. 8.2010 W. Keller zusätzliche Typen für scope und dbx q
23. 8.2010 W. Keller dbzf ausgebaut
6. 8.2010 W. Keller vc vj vs vt ec ej es et nt? eingebaut
5. 8.2010 W. Keller stepName recTrg instead of recSrc for target
12. 7.2010 W. Keller sq=sequence für compare (fehlt noch in q)
18. 2.2010 W. Keller class=BS0 für PTA (wegen RR25 und RR26)
11. 2.2010 W. Keller dbaCheck mit ex0
9. 2.2010 W. Keller sendJob timeout 600 auch in extractScopeVersion
1.12.2009 W. Keller CSM.RZ1.P0.EXEC statt CMS.DIV...
12.11.2009 W. Keller Qualitätsfehler ohne -f stoppt wieder
25.10.2009 W. Keller DeltaNew überall, -a Optione, batch und do removed
28.09.2009 W. Keller Optionen keepTgt 0 und dbaCheck 0
10.09.2009 W. Keller mask ausschalten falls kein maskFile
07.09.2009 W. Keller fix error with dbaMulti
25.08.2009 W. Keller err statt fehl in line 1001
12.08.2009 W. Keller batch (ohne for) geflickt, ac pr -r: return new mbr
12.08.2009 W. Keller Zuegelschub wird nach Datum ausgesucht
19.05.2009 P. Kuhn DEFER im Masking ignorieren
05.03.2009 P. Kuhn Qualitaets-Check "ts not logged" eingebaut
18.12.2008 p. kuhn neues Delta Merge Verfahren im import fuer DQ0G
18.12.2008 p. kuhn SW fuer DVBP im RZ2 (frueher im RZ4)
10.12.2008 p. kuhn Timeout vom Sendjob von 30 auf 600 Sek. erhoeht.
28.11.2008 w. keller v9 Fehler bei leerer Selektion
24.09.2008 p. kuhn v9 checks
15.09.2008 p. kuhn beim ersten import wird cdl dbaCheck't und editiert
09.09.2008 w. keller target mit RZ (job holt ddl, version aus RZ), opt =
08.08.2008 w. keller import mit wildcards
24.07.2008 w. keller overwrite ausgebaut +25.7
24.06.2008 w. keller fix spezialFall für DB +18.7
19.05.2008 w. keller qualitaetsKontolle in c,v und st und -f Option
13.05.2008 w. keller rw, rs, sw, st und do ... for ... eingebaut
25.02.2008 w. keller subSys argument für dbx q
22.11.2007 w. keller fun v für ObjectCompare Verfahren inkl db ddl save
dq0g mit eigenen Libraries
12.11.2007 w. keller DSN für neuen Wartungsstand
05.06.2007 w. keller neu
***********************************************************************/
/* Ideen, Wünsche ******************************************************
AuftragsId aus Prototyp bestimmen
LCTL
sämtliche infos aus XLS
jedesmal Zwischenspeichern mit und restore Funktion
analyze generieren, falls möglich
batch Funktionen ganzen Zügelschub importieren usw. ==> mit wsh|
generierte Runs starten in richtiger Reihenfolge
mails an Entwickler schicken
Rückmeldung falls keine changes (leeres cdl)
Type Tabelle
char type Variabeln
fuer extract
db d DB
ts s TS
tb/vw/alias a v t - own name
ix x IX
userDefinedTy e - sch udt
function f - sch udf
trigger j TG qual name
storedProc o SP qual name
sequence q SQ qual name
synonym y SY qual name
**** alte Funktion (braucht es nicht mehr) *****************************
sw rz? WSL aus RZ rz holen und clonen, ohne rz mulitclone
rs rz source ddl und version aus RZ rz holen
st opt? rz target ddl und version extrahieren und ins rz schicken
***********************************************************************/
m.debug = 0
call errReset h
if sysvar(sysispf) = 'ACTIVE' then
call adrIsp 'Control errors return'
call jIni
parse upper arg oArgs
oArg1 = word(oArgs, 1)
m.auftrag.dataset = 'DSN.DBX.AUFTRAG'
m.editMacro = 0
m.editProc = 0
if oArgs = '' then do
if adrEdit('macro (oArgs) NOPROCESS', '*') <> 0 then
call errHelp('keine Argumente und kein editMacro rc =' rc)
m.editMacro = 1
call adrEdit 'caps off'
call adrEdit '(x) = member'
m.auftrag.member = x
m.edit.member = x
call adrEdit '(x) = dataset'
m.auftrag.dataset = x
m.edit.dataset = x
end
if oArgs = '' | pos('?', oArgs) > 0 then
exit help()
call dbxIni
m.exitValue = 0
call work oArgs
call sqlDisconnect
exit m.exitValue
/*--- hier wählen wir die wirklich Arbeit aus -----------------------*/
work: procedure expose m.
parse arg wArgs
parse upper var wArgs fun args
args = strip(args)
call mapReset e, 'K'
call mapPut e, 'dol', '$'
m.auftrag.force = 0
do while abbrev(fun, '-')
r = substr(fun, 3)
if abbrev(fun, '-A') then do
if verify(r, '.()', 'm') < 1 then do
m.auftrag.member = r
end
else do
m.auftrag.dataset = dsnSetMbr(r)
m.auftrag.member = dsnGetMbr(r)
end
end
else if abbrev(fun, '-F') then do
m.auftrag.force = 1
end
else do
call err 'bad opt' fun 'in' wArgs
end
parse var args fun args
if fun = '' then
return errHelp('fun missing in args:' wArgs)
end
if m.auftrag.dataset = 'A540769.DBX.AUFTRAG' then do
m.libSkels = 'A540769.wk.skels(dbx'
m.libPre = 'A540769.DBX'
end
else if m.auftrag.dataset = 'DSN.DBQ.AUFTRAG' then do
m.libSkels = 'ORG.U0009.B0106.KIDI63.SKELS(dbx'
m.libPre = 'DSN.DBQ'
end
else do
m.libPre = 'DSN.DBX'
m.libSkels = 'ORG.U0009.B0106.KIDI63.SKELS(dbx'
end
if 0 then do /* ??? testSkels */
if userid() = 'A540769' then
m.libSkels = 'A540769.wk.skels(dbx'
say '??? test skels' m.libSkels '|||'
end
m.libSpezial = m.libPre'.spezial'
call configureRZ sysvar('SYSNODE')
m.sysRz = m.myRz
call mapPut e, 'rexxLib', 'ORG.U0009.B0106.KIDI63.EXEC'
call mapPut e, 'ovrDD', 'DISP=SHR,DSN='m.libPre'.MASK(OVERRIDE)'
call mapPut e, 'libPre', m.libPre
if fun = 'Q' then /* macht process selber | */
return queryScope(args)
if m.editMacro & ^ m.editProc then do
call adrEdit 'process'
m.editProc = 1
end
if wordPos(fun, 'A AC AW') > 0 then
return nextAuftrag(word(args, 1), substr(fun, 2), word(args, 2))
else if fun = 'COPYDUMMY' then
return copyDummy(args)
else if fun = 'CLONEWSL' then
return cloneWsl(word(args, 1), word(args, 2), 1==word(args, 3))
call memberOpt
if wordPos(fun, 'N NT') > 0 then
call neuerAuftrag (fun = 'NT'), args, m.auftrag.member
else if fun = 'C' | fun = 'V' | fun = 'ST' then
call compare fun, args
else if wordPos(fun, 'I IA IE') > 0 then
call import fun, args
else if fun = 'N' then
call neuerNachtrag args
else if fun = 'RS' then
call receiveSource args
else if fun = 'RW' then
call receiveWSL args
else if fun = 'SW' then
call sendWSL args
else if wordPos(fun, 'VC VE VJ VS VT VW EC EE EJ ES ET EW') > 0 then
call viewEdit fun, args
else
call errHelp 'bad fun' fun 'in args' args, , ' '
if m.auftrag.orig = m.auftrag.0 | m.auftrag.0 = '' then do
end
else do
if abbrev(m.auftrag.orig, 'rmQu') then do
/* alte | Zeilen loeschen */
oldOr = word(m.auftrag.orig, 2)
ox = 0
do ix = 1 to m.auftrag.0
if abbrev(word(m.auftrag.ix, 1), '|') & ix <= oldOr then
iterate
ox = ox + 1
m.auftrag.ox = m.auftrag.ix
end
m.auftrag.0 = ox
m.auftrag.orig = 'rep'
end
if m.editMacro & m.auftrag.dataset = m.edit.dataset ,
& m.auftrag.member = m.edit.member then do
if m.auftrag.orig = 'rep' then do
call adrEdit 'delete .zf .zl'
m.auftrag.orig = 0
end
do lx = m.auftrag.orig+1 to m.auftrag.0
li = left(m.auftrag.lx, 72)
call adrEdit "line_after .zl = (li)"
end
call adrEdit 'save', 4
end
else do
call writeDsn dsnSetMbr(m.auftrag.dataset,
,m.auftrag.member), m.auftrag.,,1
end
end
return
endProcedure work
/*--- ini the CS config ----------------------------------------------*/
dbxIni: procedure expose m.
m.timeout = 600
m.uId = strip(userid())
if m.uId = 'A234579' then
m.uNa = 'Marc'
else if m.uId = 'A390880' then
m.uNa = 'Martin'
else if m.uId = 'A540769' then
m.uNa = 'Walter'
else if m.uId = 'A666308' then
m.uNa = 'Frank'
else if m.uId = 'A754048' then
m.uNa = 'Alessandro'
else if m.uId = 'A790472' then
m.uNa = 'Agnes'
else if m.uId = 'A828386' then
m.uNa = 'Reni'
else if m.uId = 'A914227' then
m.uNa = 'Gerrit'
else
m.uNa = m.uId
m.scopeTypes = 'DB TS TB VW AL IX UDT UDF TG SP SQ SY'
m.scopeType1 = 'D S T V A X E F J O Q Y'
m.nachtragChars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
/* PromotionPaths */
m.iProm.1 = 'ET IT PQ PA PR'
m.iProm.2 = 'RZ1/DBAF,RZ8/DC0G RZ1/DBTF,RZ8/DD0G,RZZ/DE0G' ,
'RQ2/DBOF,RR2/DBOF RR2/DBOF RZ2/DBOF'
m.iProm.3 = 'RZ1/DBBA,RZ8/DCVG RZ1/DVTB,RZ8/DDVG,RZZ/DEVG' ,
'RQ2/DVBP,RR2/DVBP RR2/DVBP RZ2/DVBP'
m.iProm.0 = 3
return
endProcedure dbxIni
/*--- expand the import target list entered by the user
to a list or rz/subsys, with mySub first and the rest sorted*/
iListExpand: procedure expose m.
parse upper arg srcList
tl = iPromExpand(translate(space(srcList, 0), '/ ', '.,'))
local = ''
remote = ''
do tx=1 to words(tl)
t1 = word(tl, tx)
if abbrev(t1, m.myRz'/') then
local = wordInsAsc(local, t1)
else
remote = wordInsAsc(remote, t1)
end
return local remote
endProcedure iListExpand
/*--- expand a target using iProm infos to a list of rz/subsys -------*/
iPromExpand: procedure expose m.
parse arg inp
if words(inp) <> 1 then do /* several words, expand each */
out = ''
do wx=1 to words(inp)
out = out iPromExpand(word(inp, wx))
end
return out
end
if pos('/', inp) > 0 then /* already expanded */
return inp
if inp == '?*?' then do /* find current promotionPath */
tg = m.scopeTrg.rz'/'m.scopeTrg.subSys
do tx=2 to m.iProm.0
if pos(tg, m.iProm.tx) > 0 then
return m.iprom.tx
end
call err 'target' tg 'not in any PromotionPath'
end
px = wordPos(inp, m.iProm.1) /* one promotion environment */
if px > 0 then
return translate(word(iPromExpand('?*?'), px), ' ', ',')
if length(inp) = 4 then /* prepend rz to subsys */
return m.myRz'/'inp
/* all subsys that match something */
alOr = iPromExpand('?*?')
all = translate(alOr, ' ', ',')
out = ''
do ax = 1 to words(all)
if pos(inp, word(all, ax)) > 0 then
if wordPos(word(all, ax), out) < 1 then
out = out word(all, ax)
end
if out \== '' then
return out
call err 'inp' inp ' not found in promotionPath' alOr
endProcedure iPromExpand
wordInsAsc: procedure expose m.
parse arg lst, wrds
do wx=1
w = word(wrds, wx)
if w == '' then
return space(lst, 1)
do rx=1 to words(lst) while w > word(lst, rx)
end
r1 = word(lst, rx)
if r1 == '' then
lst = lst w
else if w < r1 then
lst = subWord(lst, 1, rx-1) w subWord(lst, rx)
end
endProcedure wordInsAsc
charInsAsc: procedure expose m.
parse arg lst, chrs
do wx=1 to length(chrs)
c = substr(chrs, wx, 1)
do rx=1 to length(lst) while c > substr(lst, rx, 1)
end
r1 = substr(lst, rx, 1)
if rx > length(lst) then
lst = lst || c
else if c < r1 then
lst = left(lst, rx-1) || c || substr(lst, rx)
end
return lst
endProcedure wordInsAsc
/*--- batch funktionen -----------------------------------------------*/
batchOld: procedure expose m.
parse upper arg args
m.auftrag.dataset = 'DSN.DBX.AUFTRAG'
wx = 1
do forever
w1 = word(args, wx)
if w1 = '' then
return 0
if w1 = 'ADATASET' then do
m.auftrag.dataset = word(args, wx+1)
wx = wx+2
end
else if w1 = 'DO' then do
fx = wordPos('FOR', args, wx)
if fx < 1 then
call err 'DO ohne FOR in' args
cmd = subWord(args, wx+1, fx-wx-1)
do wx=fx+1
ww = word(args, wx)
if ww = '' then
leave
m.auftrag.member = ww
say 'batch do' cmd 'for' ww '...'
call work cmd
end
end
else do
if wordPos(translate(w1), 'A AC AW') > 0 then do
drop m.auftrag.member
cmd = subword(args, wx)
end
else do
m.auftrag.member = w1
cmd = subword(args, wx+1)
end
say 'batch do' cmd 'for mbr' m.auftrag.member
call work cmd
return 0
end
end
return 0
endProcedure batchOld
/*--- create the necessary dbx libries in the specified rz -----------*/
copyDummy: procedure expose m.
parse arg rz
call copyDummy1 rz, 'DSN.DBX.AUFTRAG(DUMMY)'
call copyDummy1 rz, 'DSN.DBX.AUTO(DUMMY)'
call copyDummy1 rz, 'DSN.DBX.CDL(DUMMY)'
/* call copyDummy1 rz, 'DSN.DBX.DBAUTO(DUMMY)'
call copyDummy1 rz, 'DSN.DBX.DBSRCCAT(DUMMY)'
call copyDummy1 rz, 'DSN.DBX.DBSRCDDL(DUMMY)'
call copyDummy1 rz, 'DSN.DBX.DBTRGCAT(DUMMY)'
call copyDummy1 rz, 'DSN.DBX.DBTRGDDL(DUMMY)'
*/
call copyDummy1 rz, 'DSN.DBX.JCL(DUMMY)'
call copyDummy1 rz, 'DSN.DBX.MASK'
/* call copyDummy1 rz, 'DSN.DBX.OVRCAT(DUMMY)' */
call copyDummy1 rz, 'DSN.DBX.SENDCF(DUMMY)'
call copyDummy1 rz, 'DSN.DBX.SPEZIAL(DUMMY)'
call copyDummy1 rz, 'DSN.DBX.SRCCAT(DUMMY)'
call copyDummy1 rz, 'DSN.DBX.SRCDDL(DUMMY)'
call copyDummy1 rz, 'DSN.DBX.TRGCAT(DUMMY)'
call copyDummy1 rz, 'DSN.DBX.TRGDDL(DUMMY)'
return 0
endProcedure copyDummy
copyDummy1: procedure expose m.
parse arg sys, dsn
if sysDsn("'"dsn"'") <> 'OK' then
call writeDsn dsn, x, 0, 1
call csmCopy dsn, sys'/'dsn
return
/*--- die Konfiguration pro db2 Subsys -------------------------------*/
configureSubsys: procedure expose m.
parse arg rz, subsys
call mapPut e, 'subsys', subsys
if rz = 'RZ8' then
call mapPut e, 'location', 'CHROI000'subsys
else if rz = 'RZZ' then
call mapPut e, 'location', 'CHROI00Z'subsys
else
call mapPut e, 'location', 'CHSKA000'subsys
return
endProcedure configureSubsys
/*--- die Konfiguration pro RZ ---------------------------------------*/
configureRZ: procedure expose m.
parse arg rz, rel px, toolV
if rz = 'RZ0T' then
rz = 'RZ0'
if rz = '' then
rz = m.myRz
else
m.myRz = rz
m.jobCard = 'jobCa'
call mapPut e, 'jobCla', 'LOG'
rx = pos(rz'/', m.iProm.2)
if rx < 1 then
m.mySub = '?noSubsys?'
else
m.mySub = substr(m.iProm.2, rx+4, 4)
call mapPut e, 'rz', rz
zz = overlay('Z', rz, 2)
call mapPut e, 'zz', zz
if rel == '' then
rel = 1015
if px == '' then
px = if(rz\=='RZ0', 'P0', 'PA')
call mapPut e, 'db2rel', rel
call mapPut e, 'db2relAl', px
call mapPut e, 'dsnload', if(rz=='RZ0', 'DSN', 'DB2@') ,
|| '.'zz'.'px'.DSNLOAD'
if toolV \== '' then do
say 'v72 nicht mehr untertstuetzt, v10 wird benutzt'
toolV = mapGet(e, 'toolVers', 10)
toolV = ''
end
call mapPut e, 'toolVers', toolV
/* if toolV == 10 then do */
call mapPut e, 'toolPreP', 'DSN.TOOLS.'zz'.P0'
call mapPut e, 'toolPreC', 'DSN.TOOLS.'zz'.C0'
/* end
else if toolV == 72 then do
call mapPut e, 'toolPreP', 'DSN.TOOLS.'zz'.P8'
call mapPut e, 'toolPreC', 'DSN.TOOLS.'zz'.C8'
end
else
call err 'bad toolVersion' toolV
*/ if rz = 'RZ1' then do
if m.libPre = 'DSN.DBQ' then do
m.mySub = 'DQ0G'
m.jobCard = 'jobCQ'
call mapPut e, 'toolPreP', 'DSN.ADB72.P0'
call mapPut e, 'toolPreC', 'DSN.ADB72.C0'
end
end
else if rz = 'RR2' then do
call mapPut e, 'jobCla', 'BS0'
end
return
endProcedure configureRZ
/*--- Member Namen prüfen und Auftrag lesen---------------------------*/
memberOpt: procedure expose m.
if m.auftrag.dataset <> m.libPre'.AUFTRAG' then
call err 'dbx sollte' m.libPre'.AUFTRAG editieren, nicht' ,
m.auftrag.dataset
m8 = substr(m.auftrag.member, 8, 1)
if pos(m8, 'CW') < 1 then
call err 'Member muss 8 stellig sein und mit C oder W enden',
'nicht' m.auftrag.member
m.optOvr = 0 /* (m8 == 'W') & (m.libPre ^== 'DSN.DBQ') */
m.optAuto = 1
call readAuftrag '', m.auftrag.dataset, m.auftrag.member
return
endProcedure memberOpt
/*--- Auftrag einlesen -----------------------------------------------*/
readAuftrag: procedure expose m.
parse arg sys, pds, mbr
editingAuftrag = 0
if sys = '' & m.editMacro then do
call adrEdit '(em) = member'
call adrEdit '(ed) = dataset'
editingAuftrag = ed = pds & em = mbr
end
if editingAuftrag then do
if adrEdit('(zl) = lineNum .zl', 4) = 4 then
zl = 0
m.auftrag.0 = zl
do lx=1 to zl
call adrEdit "(li) = line" lx
m.auftrag.lx = li
end
end
else do
dsn = dsnSetMbr(m.auftrag.dataset, m.auftrag.member)
if sys = '' then
if sysDsn("'"dsn"'") <> 'OK' then
call err 'auftrag' dsn 'existiert nicht:' sysDsn("'"dsn"'")
call readDsn sys'/'dsn, m.auftrag.
end
m.auftrag.orig = m.auftrag.0
return
endProcedure readAuftrag
/*--- naechste AuftragsNummer suchen ---------------------------------*/
nextAuftrag: procedure expose m.
parse arg pre, make, rz opt
if abbrev(rz, '-') then do
opt = rz
rz = ''
end
opt = translate(opt)
if rz = '' | rz = '*' then
rz = m.myRz
if m.myRz <> 'RZ1' then
call err 'Auftrag für RZ' rz 'muss aus RZ1 erstellt werden'
auft = m.libPre'.AUFTRAG'
call mAdd mCut(na, 0), auft, 'DSN.DBA.CLON.WSL'
max = pre
do nx=1 to m.na.0
lmm = lmmBegin(dsnSetMbr(m.na.nx, pre'*'))
mb = lmmNext(lmm)
fi = mb
la = ''
do cnt=2 by 1 while mb <> ''
la = mb
mb = lmmNext(lmm)
end
call lmmEnd lmm
say left(fi, 8) '-' left(la, 8)right(cnt-2, 5) ,
'member in' dsnSetMbr(m.na.nx, pre'*')
if la >> max then
max = la
end
nn = left(max, 7, '0')
do cx=7 by-1 to length(pre)+1,
while pos(substr(nn, cx, 1), '0123456789') > 0
end
if cx >= 7 then
nn = ''
else do
pp = 1 + substr(nn, cx+1)
if length(pp) > 7-cx then
nn = ''
else
nn = left(nn, cx) || right(pp, 7-cx, 0)
end
if length(nn) <> 7 then do
say 'max Auftrag' max 'kein naechster bestimmbar'
end
else if make = '' then do
say 'max Auftrag' max 'naechster' nn'?'
end
else do
nn = nn || make
say 'max Auftrag' max 'naechster' nn
m.auftrag.0 = 0
call neuerAuftrag 0, rz, nn
dsnNN = dsnSetMbr(auft, nn)
call writeDsn dsnNN, m.auftrag.
if opt = '-R' then
nop
else if rz = 'RZ1' then
call adrIsp "edit dataset('"dsnNN"')", 4
else
call writeDsn rz'/'dsnNN, m.auftrag.
end
m.auftrag.0 = '' /* do not write back the new auftrag | */
if opt = '-R' then
m.exitValue = nn
return 0
endProcedure nextAuftrag
/*--- einen neuen Auftrag initialisieren -----------------------------*/
neuerAuftrag: procedure expose m.
parse arg isTst, rz, auftName
if rz = '' then
rz = m.myRz
else
call configureRz rz
if isTst then do
ow = m.uid
maPr = 'T' || left(translate(m.uNa), 3, 'X')
comMask = m.libPre'.MASK('maPr'PROT)'
impMask = m.libPre'.MASK('maPr'$subsys)'
end
else do
ow = 'S100447'
comMask = m.libPre'.MASK(PROT$trgNm)'
impMask = m.libPre'.MASK($trgNm$impNm)'
end
comIgno = m.libPre'.MASK(IGNORE)'
impIgno = ''
if m.auftrag.0 <> 0 then
call err 'fun n erstellt neuen Auftrag nur in leeres Member'
/* wahrscheinlichen Zügelschub bestimmen*/
zglS = '20120210 20120511 20120810 20121109 2013???? 2014????'
zi = date('s')
zi = overlay(right(substr(zi, 5, 2)+1, 2, 0), zi, 5)
do wx=1 while zi >> word(zglS, wx)
end
zglSchub = if(isTst, 'test', word(zglS, wx) '??:00')
call mAdd auftrag ,
, addDateUs('auftrag ' auftName ow) ,
, ' Zuegelschub' zglSchub ,
, ' Besteller pid name tel' ,
, ' comMask ' comMask ,
, ' comIgno ' comIgno ,
, ' impMask ' impMask ,
, ' impIgno ' impIgno ,
, 'source RZ8.DX0G' ,
, ' ts' left(auftName, 4)'A1P.A%' ,
, 'target RZ8.'if(left(auftName, 2) == 'XB', 'DCVG', 'DC0G')
return
endProcedure neuerAuftrag
neuerNachtrag: procedure expose m.
parse upper arg opt
call analyseAuftrag
call addNachtrag
return
endProcedure neuerNachtrag
nextNachtrag: procedure expose m.
parse arg nt
nx = pos(nt, m.nachtragChars) + 1
if nx > length(m.nachtragChars) then
call err 'kein Nachtrag char mehr nach' nt
return substr(m.nachtragChars, nx, 1)
m.e.nachtrag = nt
return nt
endProcedure nextNachtrag
/*--- compare: Funktionen c, v und st --------------------------------*/
compare: procedure expose m.
parse upper arg fun, sendToRz
opts = ''
do forever
if abbrev(sendToRz, '=') then do
sendToRz = strip(substr(sendToRz, 2))
opts = opts'='
end
else if abbrev(sendToRz, '-') then do
opts = opts || substr(word(sendToRz, 1), 2)
sendToRz = subword(sendToRz, 2)
end
else
leave
end
cmpLast = pos('=', opts) > 0
if fun = 'C' then
function = 'compare'
else if fun = 'ST' then do
if sendToRz = '' | sendToRz = '*' then
call errHelp 'ST without sendToRz'
call mapPut e, 'toRz', sendToRz
function = 'sendTarget' sendToRz
end
else if fun = 'V' then
function = 'version'
else
call err 'bad fun' fun
call analyseAuftrag
if (m.scopeSrc.rz = m.sysRz ,
| (wordPos(m.scopeSrc.rz, 'RZ8 RZZ') > 0 & m.sysRZ = 'RZ1') ,
) & m.e.qCheck \== 0 then do
if qualityCheck(getDb2Catalog('SRC')) then
if pos('F', opts) < 1 & \ m.auftrag.force then
return
else
say 'wegen Option -f Verarbeitung',
'trotz Qualitaetsfehlern'
end
nacLast = m.e.nachtrag
if nacLast = '?' & cmpLast then
call err 'c = oder v = ohne vorangaengiges c oder v'
if nacLast = '?' | m.nacImp then
m.e.nachtrag = nextNachtrag(nacLast)
call mapPut e, 'mbrNac', left(m.e.auftrag, 7)m.e.nachtrag
m.o.0 = 0
call readDsn m.libSkels || m.jobCard')', m.i.
call mapPut e, 'jobName', 'Y'left(m.e.auftrag, 7)
call mapPut e, 'fun', function opts
call namingConv m.scopeTrg.rz, m.scopeTrg.subsys, 'trgNm'
call namingConv m.scopeSrc.rz, m.scopeSrc.subsys, 'srcNm'
call mapExpAll e, o, i
call mapPut e, 'mask', shrDummy(mapExp(e, m.e.comMask), 1)
call mapPut e, 'ignore', shrDummy(mapExp(e, m.e.comIgno))
call bmcVarsProf 0
if 0 then /* db ddl extrahieren ja / nein ???? */
call extractSrcTrg o, 'DB', cmpLast left(m.e.auftrag, 7)nacLast
if m.e.tool == ibm then
call extractSrcTrg o, '', cmpLast left(m.e.auftrag, 7)nacLast
else if m.e.tool == bmc then
call bmcSrcTrg cmpLast m.e.auftrag
else if m.e.tool == ca then do
call configureSubsys m.scopeSrc.rz, m.scopeSrc.subsys
end
if fun = 'C' then do
if m.optOvr then do
call mapPut e, 'ovr', 'OVR'
call readDsn m.libSkels'Ovr)', m.ovr.
call mapExpAll e, o, ovr
call mapPut e, 'src', 'OVR'
end
if m.e.keepTgt == 0 then
call mapPut e, 'keepTgt', ''
else
call mapPut e, 'keepTgt', 'KEEPTGT,'
call readDsn m.libSkels ,
|| if(m.e.tool=='IBM', 'comp', left(m.e.tool, 1)'Com'),
|| ')', m.cmp.
call mapExpAll e, o, cmp
if m.e.tool == ca then
call caDDL o, scopeSrc, dsnGetMbr(mapGet(e, 'mask'))
end
if fun = 'ST' then do
call readDsn m.libSkels'ST)', m.st.
call mapExpAll e, o, st
end
call writeSub o
call mAdd auftrag, addDateUs(function ,
left('===', 3*cmpLast)m.e.nachtrag,
m.scopeTrg.rz'.'m.scopeTrg.subSys ,
mapExp(e, "'${libPre}." ,
|| if(m.e.tool=="IBM","srcCat",m.e.tool"Cdl") ,
|| "($mbrNac)'"))
return
endProcedure compare
/*--- find the naming convention for a rz and subsystem --------------*/
namingConv: procedure expose m.
parse arg rz, subsys, var
if rz = '.' then do
if pos('.', subSys) > 0 then
call err 'namingConv old target' subsys
if pos('/', subSys) > 0 then
parse var subsys rz '/' subsys
else
rz = m.sysRz
end
if strip(rz) = 'RZ1' then
t = strip(subsys)
else
t = 'DBOF'
if var ^== '' then
call mapPut e, var, t
return t
endProcedure namingConv
/*--- write jcl and submit it ----------------------------------------*/
writeSub: procedure expose m.
parse arg o, rz, noWri
userSubmits = 0 /* edit jcl and user submits it */
if noWri <> 1 then do
jcl = m.libPre'.JCL('m.e.auftrag')'
call mStrip o, 't'
do ox=1 to m.o.0
if length(m.o.ox) > 70 then
call debug 'o.'ox 'len' length(m.o.ox)':' m.o.ox
end
call writeDsn jcl, m.o., ,1
if userSubmits then /* edit dataset and user may submit it */
call adrIsp "edit dataset('"jcl"')", 4
end
if (noWri <> 1) & (rz = '' | rz = m.sysRz) then do
if ^ userSubmits then
call adrTso "sub '"jcl"'"
end
else do /* submit jcl in another rz */
sysl = csmSysDsn(rz'/')
if sysl = '*/' then
sysl = ''
iral = dsnAlloc(sysl 'SYSOUT(T) dd(ir) .WRITER(INTRDR)')
call writeDDBegin ir
call writeDD ir, m.o.
call writeDDend 'IR'
interpret subword(irAl, 2)
end
return
endProcedure writeSub
/*--- view or edit a member -----------------------------------------*/
viewEdit: procedure expose m.
parse upper arg fun 2 wh, nac
call analyseAuftrag
if wh = 'C' then
d = copies(m.e.tool, m.e.tool \== 'IBM')'CDL'
else if wh = 'E' then
d = 'EXEJCL'
else if wh = 'J' then
d = 'JCL'
else if wh = 'S' then
d = 'SRCDDL'
else if wh = 'T' then
d = 'TRGDDL'
else if wh = 'W' then
d = 'BMCWSL'
if nac == '' then
nac = m.e.nachtrag
if wh == 'J' then
d = m.libPre'.'d'('m.e.auftrag')'
else
d = m.libPre'.'d'('left(m.e.auftrag,7)nac')'
if fun == 'E' then
call adrIsp "edit dataset('"d"')", 4
else
call adrIsp "view dataset('"d"')", 4
return
endProcedure viewEdit
/*--- return jcl either dd dummy or dd disp=shr,dsn=... --------------*/
shrDummy: procedure expose m.
parse arg dsn, keepEmpty
if dsn \= '' then
return 'DISP=SHR,DSN='translate(dsn)
else if keepEmpty == 1 then
return ''
else
return 'DUMMY'
endProcedure shrDummy
/*--- funktion i -----------------------------------------------------*/
import: procedure expose m.
parse upper arg fun, rzSubSysList opt .
call analyseAuftrag
if m.e.nachtrag = '?' then
call err 'vor i=import braucht es compare'
if opt <> '' then
nop
else if words(m.targets) > 1 then
call err 'i=import mit mehreren targets muss Nachtraege',
'explizit angeben, z.B. dbx i' rzSubSysList m.e.nachtrag
else if m.cmpLast then
call err 'i=import mit c = oder v = muss Nachtraege',
'explizit angeben, z.B. dbx i' rzSubSysList m.e.nachtrag
if ^ m.nacImp then do
cdl = cdlDsnCheck(m.e.nachtrag)
if m.e.dbaCheck == 0 then nop
else if m.e.tool \== 'IBM' then
say 'dbaCheck for' m.e.tool 'not implemented'
else do
if m.editMacro then
dbaParm = 'EX0'
else
dbaParm = 'END'
call adrIsp "edit dataset('"cdl"') macro(dbacheck)",
"parm(dbaParm)", 4
end
end
call readDsn m.libSkels || m.jobCard')', m.jc.
call readDsn m.libSkels || left(m.e.tool, m.e.tool\=='IBM')'Imp)',
, m.ic.
list = iListExpand(rzSubSysList, 0)
if list = '' then
call err 'no targets in list "'rzSubSysList'"'
impCnt = 0
call configureRz m.sysRz
if fun = 'IA' then
fu2 = 'Ana'
else if fun = 'IE' then
fu2 = 'AnaExe'
else
fu2 = ''
call mapPut e, 'fun', strip('import'fu2 left(rzSubSysList, 30))
call mapPut e, 'jobName', 'Y'left(m.e.auftrag, 7)
fu2 = fun fu2
m.jOut.0 = 0
call mapExpAll e, jOut, jc /* Jobcard expandieren */
j0 = m.jOut.0
rz = '?'
do lx = 1
r1 = word(list, lx)
parse var r1 r '/' subsys
if r <> rz | subsys = '' then do
if impCnt <> 0 then do
if rz <> m.sysRz then do
if symbol('m.sCdl.0') \== 'VAR' then do
call readDsn m.libSkels'sCdl)', m.sCdl.
call readDsn m.libSkels'subRz)', m.subRz.
end
if m.impMbrs == '' then
call err 'int no impMbrs'
call mapPut e, 'mbrNac',
, left(m.e.auftrag, 7)left(m.impMbrs, 1)
call mapPut e, 'toRz', m.myRz
call mapExpAll e, jOut, sCdl
jy = m.jOut.0
jx = jy-1
m.jOut.0 = jx
jla = m.jOut.jy
cx = pos(')-', m.jOut.jx)
if cx < 1 | substr(m.jout.jx, cx+2) \= '' then
call err 'bad sCdl line' jx':'m.jOut.jx
m.jOut.jx = left(m.jOut.jx,cx-1) '-'
do mx=2 to length(m.impMbrs)
call mAdd jOut, left('', cx-10)',' ,
|| left(m.e.auftrag,7) ,
|| substr(m.impMbrs, mx,1) '-'
end
call mAdd jOut, left('', cx-10)') -'
call mAdd jOut, jLa
call mapExpAll e, jOut, subRz
jy = m.jOut.0
jla = m.jOut.jy
m.jOut.0 = jy-1
call mAddSt jOut, jAft
call mAdd jOut, jLa
end
end
if subsys = '' then do
if m.jout.0 > j0 then
call writeSub jOut
return
end
rz = r
if rz = m.sysRz then do
job = jOut
m.jAft.0 = 'noUse'
end
else do
job = jAft
m.jAft.0 = 0
end
m.impMbrs = ''
call configureRz rz
impCnt = 0
call mapPut e, 'fun', 'import'fu2 rz
call mapPut e, 'fu2', fun
call configureSubsys rz
end
if length(subsys) <> 4 then
call err 'ungueltiges db2SubSys' subsys 'im import' rz
call configureSubsys rz, subsys
if rz = m.sysRz then
impCnt = impCnt + importAdd(job, subsys, opt, ic, fu2)
else if m.sysRz == 'RZ1' then
impCnt = impCnt + importAdd(job, rz'/'subsys, opt, ic, fu2)
else
call err 'cannot import into' rz 'from' m.sysRz
end
endProcedure import
/*--- add a single import to jcl in o --------------------------------*/
importAdd: procedure expose m.
parse upper arg o, rzSubSys, opt, ic, fun fu2
/* Uebergang altes auf neue Delta Merge Verfahren ++++++++ begin */
deltaNew = 1 /* abbrev(rzSubSys,'RZ1.'),
| (pos('.',rzSubSys) < 1 & m.sysRz = 'RZ1') */
if deltaNew then do /* neues delta merge verfahren */
inDdn = 'DCHG'
call mapPut e, 'cType', "''''T''''"
end
else do /* altes delta merge verfahren */
inDdn = 'SRCDDN2'
call mapPut e, 'cType', "''''C''''"
end
call mapPut e, 'inDdn', inDdn
/* Uebergang altes auf neue Delta Merge Verfahren ++++++++ end */
if opt ^= '' & opt ^= '=' then do
nachAll = opt
end
else if symbol('m.imp.rzSubSys.nachtrag') ^== 'VAR' then do
nachAll = m.compares
end
else do
if opt = '=' then
la = left(m.imp.rzSubSys.nachtrag, 1)
else
la = right(m.imp.rzSubSys.nachtrag, 1)
cx = pos(la, m.compares)
if cx < 1 then
call err 'nachtrag' la 'von' rzSubSys m.rzSubSys.change ,
'nicht in Compare Liste' m.compares
nachAll = substr(m.compares, cx + (opt ^= '='))
end
if nachAll = ' ' then do
say 'alle Nachtraege schon importiert fuer' rzSubSys
return 0
end
call mapPut e, 'mbrChg', left(m.e.auftrag, 7)right(nachAll, 1)
if length(nachAll) = 1 then
nachVB = nachAll
else
nachVB = left(nachAll, 1)'-'right(nachAll, 1)
trgNm = ''
do nx=1 to m.nachtrag.0
if pos(m.nachtrag.nx, nachAll) < 1 then
iterate
act = namingConv('.', m.nachtrag.nx.trg)
if trgNm = '' then
trgNm = act
else if trgNm <> act then
call err 'targetNaming' trgNm 'wechselt zu' act ,
'fuer nachtrag' m.nachtrag.nx 'auf' m.nachtrag.nx.trg
end
m.imp.seq = m.imp.seq + 1
if length(m.imp.seq) > 3 then
call err 'import Sequenz Ueberlauf' m.imp.seq
m.imp.seq = right(m.imp.seq, 3, 0)
chaPre = m.e.auftrag'.'nachVB'.'m.imp.seq
zs = translate(strip(right(m.e.zuegelSchub, 6)))
if m.e.tool = 'IBM' then
call mapPut e, 'change',chaPre'.'zs/*'.V'mapGet(e,'toolVers')*/
else
call mapPut e, 'change',m.e.auftrag || m.imp.seq'_'zs
call mapPut e, 'changeRem', 'zs' m.e.zuegelSchub ,
'auf' m.e.auftrag nachAll 'import DBX'
call mapPut e, 'deltaVers', chaPre'.DLT'
call namingConv '.', rzSubSys, 'impNm'
call namingConv m.scopeSrc.rz, m.scopeSrc.subsys, 'srcNm'
call mapPut e, 'trgNm', trgNm
call mapPut e, 'mask', shrDummy(mapExp(e, m.e.impMask), 1)
call mapPut e, 'ignore', shrDummy(mapExp(e, m.e.impIgno))
cdlPds = m.libPre'.CDL'
call mapPut e, 'cdlPds', cdlPds
call bmcVarsProf 1
if m.impMbrs = '' & m.myRz \== m.sysRz then
call mapExpAll e, o, jc /* Jobcard expandieren */
m.impMbrs = charInsAsc(m.impMbrs, nachAll)
if m.e.tool = 'CA' then do
call mapPut e, 'mbrNac', left(m.e.auftrag, 7)right(nachAll, 1)
call mapPut e, 'impMaskMbr', dsnGetMbr(mapExp(e, m.e.impMask))
call mapPut e, 'comIgnoMbr', dsnGetMbr(mapExp(e, m.e.comIgno))
call mapPut e, 'bpid', m.libPre'.CASTRAT-'mapGet(e, 'mbrNac') ,
|| '-'m.imp.seq
end
sto = mapExpAllAt(e, o, ic, 1, 1)
do while sto ^= ''
parse var sto lx cx
w = word(substr(m.ic.lx, cx), 1)
if w == '$@maskDD' then do
if mapGet(e, 'mask') \= '' then
call mAdd o, '//MSKDDN1 DD' mapGet(e, 'mask')
end
else if w == '$@maskII' then do
if mapGet(e, 'mask') \= '' then
call mAdd o, " MSKDDN='MSKDDN1',",
, " MSKOWN='DUMMY',",
, " MSKNAME='DUMMY',"
end
else if w == '$@bmcCdl' then do
le = left('//IMPORTIN', 13)
do ix=1 to length(nachAll)
call mAdd o, le || 'DD DISP=SHR,DSN=',
|| cdlDsnCheck(substr(nachAll, ix, 1))
le = left('//', 13)
end
end
else if w ^== '$@cdl' then do
call err 'unbekannte Anweisung' w 'in Zeile' cx m.ic.cx
end
else if deltaNew then do
do ix=1 to length(nachAll)
call mAdd o, left('//'inDdn || right(ix,3,0), 13) ,
|| 'DD DISP=SHR,DSN=',
|| cdlDsnCheck(substr(nachAll, ix, 1))
end
end
else do
le = left('//'inDdn, 13)
do ix=1 to length(nachAll)
call mAdd o, le || 'DD DISP=SHR,DSN=',
|| cdlDsnCheck(substr(nachAll, ix, 1))
le = left('//', 13)
end
end
sto = mapExpAllAt(e, o, ic, lx, cx + length(w))
end
if wordPos(fun, 'IA IE') > 0 then do /* analyse step */
if m.e.tool = ibm then
call err 'fun' fun 'not implemented for' m.e.tool
call readDsn m.libSkels || left(m.e.tool, 1)'Ana)', m.ia.
call mapExpAll e, o, ia
end
if wordPos(fun, 'IE') > 0 then do /* analyse step */
call readDsn m.libSkels || left(m.e.tool, 1)'Exe)', m.ie.
call mapExpAll e, o, ie
ej = mapExp(e, "'${libPre}.EXEJCL($mbrChg)'")
j.1 = 'exeJcl for' m.e.auftrag 'noch nicht generiert'
call writeDsn ej, j., 1, 1
end
call mAdd auftrag,
, addDateUs("import" rzSubsys nachAll mapGet(e, 'change') fu2)
return 1
endProcedure importAdd
/*--- DSN für CDL des Nachtrags zurückgeben und auf Existenz prüfen---*/
cdlDsnCheck: procedure expose m.
parse arg nt
cdl = m.libPre'.'copies(m.e.tool, m.e.tool\=='IBM') ,
|| 'CDL('left(m.e.auftrag, 7) || nt')'
rr = sysDsn("'"cdl"'")
if rr <> 'OK' then
call err 'cdl fuer' nt'. Nachtrag fehlt:' cdl rr
return cdl
endProcedure cdlDsnCheck
/*--- Date und user rechtsbuendig einfuegen --------------------------*/
addDateUs: procedure expose m.
parse arg le
return le right(date(s) time() m.uNa, 71-length(le))
endProcedure addDateUs "'"
/*--- den aktuellen Auftrag analysieren ------------------------------*/
analyseAuftrag: procedure expose m.
m.scopeSrc.0 = 0
m.scopeSrc.subSys = m.mySub
m.scopeSrc.rz = m.myRz
m.catSrc.0 = ''
m.scopeTrg.0 = 0
m.scopeTrg.subSys = m.mySub
m.scopeTrg.rz = m.myRz
m.catTrg.0 = ''
m.imp.seq = -1
m.nacImp = 0
m.e.impMask = ''
m.e.comMask = ''
m.e.tool = 'IBM'
if m.auftrag.0 = 0 then
call err 'Auftrag ist leer'
vaWo = 'AUFTRAG'
varWo = 'ZUEGELSCHUB BESTELLER COMMASK COMIGNO IMPMASK IMPIGNO' ,
'KEEPTGT DBACHECK QCHECK V72 V10 CA BMC IBM'
ignWo = 'SW SENDWSL RECEIVEWSL RECEIVESOURCE'
ignCh = '*|'
lev1Wo = 'SCOPE SOURCE TARGET COMPARE VERSION IMPORT SENDTARGET' ,
varWo 'PROTOTYPERZ'
do lx=1 to m.auftrag.0
li = m.auftrag.lx
parse upper var li w1 w2 w3 .
if w1 = '' | pos(left(w1, 1), ignCh) > 0 ,
| wordPos(w1, ignWo) > 0 then
iterate
if wordPos(w1, vaWo) < 1 then
call err 'operation' w1 ', erwartet' vaWo 'in Zeile' lx li
w2 = translate(word(li, 2))
if w1 = 'AUFTRAG' then do
if w2 ^= m.auftrag.member then
call err 'auftrag' w2 '<> member' m.auftrag.member
m.e.auftrag = w2
m.e.nachtrag = '?'
m.nachtrag.0 = 0
if dataType(left(w3, 1), 'U') & length(w3) <= 8 then
ow = w3
else
ow = 'S100447'
call mapPut e, 'chgOwn', ow
vaWo = lev1Wo
end
else if wordPos(w1, 'V72 V10') > 0 then do
call configureRZ , , substr(w1, 2)
end
else if wordPos(w1, 'CA BMC IBM') > 0 then do
m.e.tool = w1
end
else if wordPos(w1, varWo) > 0 then do
m.e.w1 = word(li, 2)
end
else if w1 = 'PROTOTYPERZ' then do /* alte syntax sep08 ??? */
m.scopeSrc.rz = word(li, 2)
end
else if wordPos(w1, 'SCOPE SOURCE TARGET') > 0 then do
suSy = ''
if w1 = 'SOURCE' then do
scp = 'SCOPESRC'
suSy = w2
end
else if w1 = 'TARGET' then do
scp = 'SCOPETRG'
if abbrev('EXPLICIT', w2, 2) then do
m.optAuto = 0
suSy = w3
end
else do
suSy = w2
if abbrev('EXPLICIT', w3, 2) then
m.optAuto = 0
end
end
else do /* alte syntax */
if abbrev('SOURCE', w2) then
scp = 'SCOPESRC'
else if abbrev('TARGET', w2) then
scp = 'SCOPETRG'
else
call err 'scope' w2 'nicht abk. von SOURCE TARGET',
'in Zeile' lx li
end
if (abbrev(suSy, 'DQ0') | abbrev(suSy, 'RZ1.DQ0')) ,
<> (m.libPre == 'DSN.DBQ') then
call err 'subSys' suSy 'mit Auftrag in' m.libPre
m.scp.0 = 0
if pos('.', suSy) > 0 then
parse var suSy suRz '.' suSy
else if pos('/', suSy) > 0 then
parse var suSy suRz '/' suSy
else
suRZ = ''
if suSy <> '' then
m.scp.subsys = suSy
if suRz <> '' then
m.scp.rz = suRz
vaWo = m.scopeTypes m.scopeType1 lev1Wo
call debug 'scope' scp m.scp.rz'.'m.scp.subsys
end
else if wordPos(w1, m.scopeTypes m.scopeType1) > 0 then do
parse value analyseScope(li) with ty nm qu
if ty = '?' then
call err nm qu 'in scope line' lx':' strip(li)
aa = mAdd(scp, 'scope')
m.aa.type = ty
m.aa.qual = qu
m.aa.name = nm
end
else if wordPos(w1, 'COMPARE VERSION SENDTARGET') > 0 then do
if w1 = 'SENDTARGET' then
w2 = w3
cmpLast = abbrev(w2, '=')
w2 = strip(w2, 'l', '=')
if length(w2) <> 1 | pos(w2, m.nachtragChars) < 1 then
call err 'nachtrag' w2 'in Zeile' lx li
if pos(w2, m.nachtragChars) ,
< pos(m.e.nachtrag, m.nachtragChars) then
call err 'nachtrag' w2 '< vorherigem' m.e.nachtrag ,
'in Zeile' lx li
if m.e.nachtrag <> w2 then do
m.e.nachtrag = w2
nx = m.nachtrag.0 + 1
m.nachtrag.0 = nx
m.nachtrag.nx = w2
end
m.nachtrag.nx.fun = ''
m.nachtrag.nx.last = cmpLast
if pos(left(w1, 1), 'CV') > 0 then
m.nachtrag.nx.fun = left(w1, 1)
if abbrev(w3, "'") | verify(w3, '/.', 'm') < 1 then
t1 = m.myRz'/'m.mySub
else
t1 = translate(w3, '/', '.')
m.nachtrag.nx.trg = t1
call debug 'nachtr' nx m.nachtrag.nx 'trg' m.nachtrag.nx.trg
m.nacImp = (w1 <> 'COMPARE')
end
else if w1 = 'IMPORT' then do
parse upper var li . subsys nachAll chg .
subsys = translate(subsys, '/', '.')
if chgAuf <> m.e.auftrag then
if right(nachAll, 1) <> m.e.nachtrag then
call err 'aktueller Nachtrag' m.e.nachtrag ,
'aber import' nachAll 'in Zeile' lx li
parse var chg chgAuf '.' chgNac '.' chgSeq '.' chgImp
aa = m.e.auftrag
if chgAuf = aa then do
if left(chgNac, 1) <> left(nachAll, 1) then
call err 'Nachtrag von mismatch in Zeile' lx li
if right(chgNac, 1) <> right(nachAll, 1) then
call err 'Nachtrag bis mismatch in Zeile' lx li
end
else if abbrev(chgAuf, aa) ,
& substr(chgAuf, length(aa)+4, 1) == '_' then do
chgSeq = substr(chgAuf, length(aa)+1, 3)
end
else
call err 'Auftrag mismatch in Zeile' lx li
if chgSeq <= m.imp.seq then
call err 'seq' chgSeq 'nicht > letzte' m.imp.seq,
'in Zeile' lx li
m.nacImp = 1
m.imp.subSys.nachtrag = nachAll
m.imp.subSys.change = chg
m.imp.seq = chgSeq
end
else do
call err 'ungültiger Operator' w1 'in Zeile' lx':' strip(li)
end
end
/* nachtrae durchgehen und kumulieren */
m.targets = ''
m.compares = ''
m.versions = ''
drop cmpLast
m.cmpLast = 0
do nx=1 to m.nachtrag.0
m.cmpLast = m.cmpLast | m.nachtrag.nx.last
if wordPos(m.nachtrag.nx.trg, m.targets) < 1 then
m.targets = m.targets m.nachtrag.nx.trg
if m.nachtrag.nx.fun = 'C' then
m.compares = m.compares || m.nachtrag.nx
if m.nachtrag.nx.fun = 'V' then
m.versions = m.versions || m.nachtrag.nx
call debug 'nachtrag' nx m.nachtrag.nx 'trg' m.nachtrag.nx.trg,
'all' m.targets 'fun' ,
m.nachtrag.nx.fun 'com' m.compares 'ver' m.versions,
'cmpLast' m.cmpLast
end
if 0 & abbrev(m.scopeSrc.subSys, 'DQ0') then
call configureRz , '915 P0'
if 0 then do
say 'auftrag ' m.e.auftrag m.e.nachtrag mapGet(e, 'chgOwn')
say ' comMask ' m.e.comMask
say ' comIgno ' m.e.comIgno
say ' impMask ' m.e.impMask
say ' impIgno ' m.e.impIgno
scp = 'SCOPESRC'
drop subsys
say ' scope ' m.scp.0 m.scp.subsys ,
' target ' m.scopeTrg.0 m.scopeTrg.subsys
do sx=1 to m.scp.0
say ' ' m.scp.sx.type m.scp.sx.qual'.'m.scp.sx.name
end
end
call bmcVars
return
endProcedure analyseAuftrag
/*--- eine Scope Zeile analysieren -----------------------------------*/
analyseScope: procedure expose m.
parse arg li
parse upper var li ty w1 rest
if wordPos(ty, m.scopeType1) > 0 then
ty = word(m.scopeTypes, wordPos(ty, m.scopeType1))
if wordPos(ty, m.scopeTypes) < 1 then
return '?'
cx = pos('.', w1)
if cx < 1 then do
qu = w1
end
else do
qu =strip(left(w1, cx-1))
rest = substr(w1, cx) rest
end
if qu = '' then
return '? leerer Qualifier'
if ty = 'DB' then
return ty qu
if left(rest, 1) = '.' then
rest = substr(rest, 2)
nm = word(rest, 1)
if nm = '' then
return '? leerer Name'
return ty nm qu
endProcedure analyseScope
/*--- jcl generieren um Src und Trg Version und DDL zu extrahieren ---*/
extractSrcTrg: procedure expose m.
parse arg o, xx, oldSrc mbrLast
call readDsn m.libSkels'ExVe)', m.exVe.
call configureSubsys m.scopeSrc.rz, m.scopeSrc.subsys
call mapPut e, 'auto', xx'AUTO'
call mapPut e, 'src', xx'SRC'
call mapPut e, 'trg', xx'TRG'
mbrNac = mapGet(e, 'mbrNac')
call mapPut e, 'what', xx'SRC'
if ^ oldSrc then do
call extractScopeVersion o, exVe, xx, 'SRC'
end
else if mbrNac <> mbrLast then do
pr = m.libPre'.'xx'SRC'
call copyDsn pr'DDL('mbrLast')', pr'DDL('mbrNac')', 1
call copyDsn pr'CAT('mbrLast')', pr'CAT('mbrNac')', 1
end
call configureSubsys m.scopeTrg.rz, m.scopeTrg.subsys
call mapPut e, 'what', xx'TRG'
if m.optAuto then do
call readDsn m.libSkels'AutMa)', m.autoMap.
call readDsn m.libSkels'AutEx)', m.autoExt.
call mapExpAll e, o, autoMap
if m.sysRz = m.scopeTrg.rz then do
call mapExpAll e, o, autoExt
end
else do
mbrN = mapGet(e, 'mbrNac')
mark = mbrN'@'time()
autD = mapExp(e, '${libPre}.$auto($mbrNac)')
cf = mapExp(e, '${libPre}.SENDCF($mbrNac)')
sndIn = sendJob1(o, m.scopeTrg.rz, 'RECTRG',
, 'send' autD ,
, 'job -ddJob' m.timeout'//??' cf mark ,
, 'receive' mapExp(e, '${libPre}.${what}DDL($mbrNac)') ,
, 'receive' mapExp(e, '${libPre}.${what}CAT($mbrNac)') )
call mapExpAll e, o, autoExt
call sendJob2 o, sndIn, cf mark
end
end
else do
call extractScopeVersion o, exVe, xx, 'TRG'
end
return
endProcedure extractSrcTrg
/*--- Version + DDL zu extrahieren -----------------------------------*/
extractScopeVersion: procedure expose m.
parse arg o, i, ty, what
scp = 'SCOPE'what
/* say m.scp.rz 'scp' scp */
if m.sysRz = m.scp.rz then do
call extractVersionStep o, i, ty, what
end
else do
mbrN = mapGet(e, 'mbrNac')
mark = mbrN'@'time()
cf = mapExp(e, '${libPre}.SENDCF($mbrNac)')
sndIn = sendJob1(o, m.scp.rz, 'REC'what,
, 'job -ddJob' m.timeout'//??' cf mark ,
, 'receive' mapExp(e, '${libPre}.${what}DDL($mbrNac)') ,
, 'receive' mapExp(e, '${libPre}.${what}CAT($mbrNac)') )
call extractVersionStep o, i, ty, what
call sendJob2 o, sndIn, cf mark
end
return
endProcedure extractScopeVersion
/*--- einen Step um Version + DDL zu extrahieren ---------------------*/
extractVersionStep: procedure expose m.
parse arg o, i, ty, what
scp = 'SCOPE'what
call mapPut e, 'what', ty || what
sto = mapExpAllAt(e, o, i, 1, 1)
do while sto ^== ''
parse var sto lx cx
w = word(substr(m.i.lx, cx), 1)
if w == '$@scope' then do
if ty == '' then do
do sx=1 to m.scp.0
sn = scp'.'sx
if wordPos(m.sn.type, 'UDT UDF') > 0 then do
t = "SCH = '"m.sn.qual"', " ,
m.sn.type "= '"m.sn.name"';"
end
else do
t = "TYPE = '"m.sn.type"',"
if m.sn.type <> 'DB' then
t = t "QUAL = '"m.sn.qual"',"
t = t "NAME = '"m.sn.name"'"
if m.sn.type = 'SP' then
t = t", VERSION='%'"
t = t';'
end
if length(t) < 30 then do
call mAdd o, ' ' t
end
else do
cx = lastPos(',', t)
call mAdd o, ' ' left(t, cx),
, ' ' substr(t, cx+1)
end
end
end
else if ty == 'DB' then do
c = getDb2Catalog(what)
do x=1 to m.c.0
d1 = m.c.x.db
if db.d1 == 1 then
iterate
db.d1 = 1
call mAdd o, " TYPE = 'DB,' NAME = '"d1"';"
end
end
else
call err 'extractVersionStep bad ty' ty
end
else do
call err 'implement stop' sto 'word' w 'in line' lx m.i.lx
end
sto = mapExpAllAt(e, o, i, lx, cx + length(w))
end
return
endProcedure extractVersionStep
/*--- add jcl to stem o to send a job to rz toRz with stepname step
and add the remaining arguments as sendJob statements
afterwards the caller must add the jcl and call sendJob2 ----*/
sendJob1: procedure expose m.
parse arg o, toRz, step
oldRz = m.myRz
call configureRz toRz
call readDsn m.libSkels'SendJ)', m.sendJob.
call mapPut e, 'step', step
call mapExpAll e, o, sendJob
do ax=4 to arg()
call debug 'sendJob1 le' length(arg(ax)) arg(ax)'|'
call mAdd o, arg(ax) left('-', (ax < arg()))
end
call mAdd o, '//DDJOB DD *'
stReX = m.o.0+1
call readDsn m.libSkels || m.jobCard')', m.i.
call mapPut e, 'jobName', 'Y'left(m.e.auftrag, 7)
call mapPut e, 'fun', 'extract data from' toRz
call mapExpAll e, o, i
return oldRz stReX
endProcedure sendJob1
/*--- add the mark step to the job, translate leading // to ??
and switch back to original rz -----------------------------*/
sendJob2: procedure expose m.
parse arg o, oldRz stReX, cfMark
if cfMark ^= '' then do
call mAdd o, '// IF NOT ABEND' ,
'AND RC >= 0 AND RC <= 4 THEN'
call mapPut e, 'step', 'MARKOK'
call mapExpAll e, o, sendJob
call mAdd o, 'mark' cfMark 'okRc0'
call mAdd o, '// ELSE'
call mapPut e, 'step', 'MARKERR'
call mapExpAll e, o, sendJob
call mAdd o, 'mark' cfMark 'badRcOrAbend'
call mAdd o, '// ENDIF'
end
do ox = stReX to m.o.0
if abbrev(m.o.ox, '//') then
m.o.ox = overlay('??', m.o.ox)
end
call configureRz oldRz
return
endProcedure sendJob2
/*--- return Stem fuer die CatalogInfo für Src oder Trg
falls noetig aus Db2Catalog einlesen -----------------------*/
getDb2Catalog: procedure expose m.
parse arg wh
st = 'CAT'wh
if datatype(m.st.0, n) then
return st
else if m.st.0 ^== '' then
call err 'getDb2Catalog('wh') bad value m.'st'.0' m.st.0
scp = 'SCOPE'wh
if m.sysRz = m.scp.rz then
call sqlOConnect m.scp.subSys
else
call sqlOConnect m.scp.rz'/'m.scp.subSys
call queryDb2Catalog st, wh
m.v9.0 = 0
call queryDb2V9 st, 'V9'
return st
endProcedure getDb2Catalog
/*--- Information aus Db2Catalog fuer einen Scope einlesen -----------*/
queryDb2Catalog: procedure expose m.
parse arg st, what
scp = 'SCOPE'what
/* m.scopeTypes = 'DB TS TB VW IX AL' */
ts = ''
tb = ''
ix = ''
unQueried = 0
do sx=1 to m.scp.0
sn = scp'.'sx
t = " TYPE = '"m.sn.type"',"
if m.sn.type <> 'DB' then
t = t "QUAL = '"m.sn.qual"',"
t = t "NAME = '"m.sn.name"';"
call debug 'queryDb2Catalog' sx t
if m.sn.type = 'DB' then
ts = ts 'or s.dbName' sqlClause(m.sn.name)
else if m.sn.Type = 'TS' then
ts = ts 'or (s.dbName' sqlClause(m.sn.qual) ,
'and s.name' sqlClause(m.sn.name)')'
else if m.sn.Type = 'TB' then
tb = tb 'or (t.creator' sqlClause(m.sn.qual) ,
'and t.name' sqlClause(m.sn.name)')'
else if m.sn.Type = 'IX' then
ix = ix 'or (x.creator' sqlClause(m.sn.qual) ,
'and x.name' sqlClause(m.sn.name)')'
else
unQueried = unQueried + 1
end
sel = 'select s.dbName db, s.name ts , s.type, ',
's.partitions, s.segSize, s.log, ',
't.creator cr, t.name tb,' ,
't.status tbSta, t.tableStatus tbTbSta',
'from sysibm.sysTableSpace S, sysibm.sysTables T'
wh = "where s.dbName = t.dbName and s.name = t.tsName",
"and t.type = 'T'"
sql = ''
if ts <> '' then
sql = sql 'union' sel wh 'and ('substr(ts, 5)')'
call debug 'ts sql' sql
if tb <> '' then
sql = sql 'union' sel wh 'and ('substr(tb, 5)')'
call debug 'tb sql' sql
if ix <> '' then
sql = sql 'union' sel ', SYSIBM.SYSINDEXES X',
wh 'and t.creator=x.tbCreator and t.name=x.tbName',
'and ('substr(ix, 5)')'
call debug 'ix sql' sql
if sql = '' then do
m.st.0 = 0
if unQueried < 1 then
say 'nothing specified in source scope'
return 0
end
drop db ts cr tb type
call sql2St substr(sql, 8), st
if m.debug == 1 then do
say m.st.0
do sx = 1 to m.st.0
say strip(m.st.sx.db)'.'strip(m.st.sx.ts) m.st.sx.type ,
m.st.sx.partitions m.st.sx.segSize
end
end
return m.st.0
endProcedure queryDb2Catalog
/*--- haben wir schon DB2 V9 Objekte ? -------------------------------*/
queryDb2V9: procedure expose m.
parse arg sc, vv
m.vv.0 = 0
wh =''
do x = 1 to m.sc.0
wh = wh "or (cr='"m.sc.x.cr"' and tb='"m.sc.x.tb"')"
end
if wh == '' then
return 0
return sql2st("select tp,nm,v9",
"from s100447.db2v9",
"where V9 <> '' and (" substr(wh, 5) ")",
"order by cr,tb,cl", vv)
endProcedure queryDb2V9
/*--- Qualitaets Pruefung fuer CatalogInfo Stem c --------------------*/
qualityCheck: procedure expose m.
parse arg c
if m.libPre <> 'DSN.DBQ' then
call maskIni
o = 'AUFTRAG'
m.o.orig = 'rmQu' m.o.orig
m.spezialFall.done = ''
aufOld = m.o.0
do x=1 to m.c.0
vDb = strip(m.c.x.db)
n = '|| db' vDb
if d.n ^== 1 then do
d.n = 1
call spezialfall vDb, substr(n, 4)
end
n = '|| ts' vDb'.'strip(m.c.x.ts)
if d.n ^== 1 then do
d.n = 1
call spezialfall vDb, substr(n, 4)
if m.c.x.log <> 'Y' then
call mAdd o, n 'not logged'
if m.c.x.partitions > 0 then
nop
else if m.c.x.segSize = 0 then
call mAdd o, n 'simple TS'
end
n = '|| tb' strip(m.c.x.cr)'.'strip(m.c.x.tb)
if d.n ^== 1 then do
d.n = 1
call spezialfall vDb, substr(n, 4)
if m.c.x.tbTbSta = 'L' then
call mAdd o, n 'auxilary index oder table fehlt'
else if m.c.x.tbTbSta = 'P' then
call mAdd o, n 'primary index fehlt'
else if m.c.x.tbTbSta = 'R' then
call mAdd o, n 'index auf Row ID fehlt'
else if m.c.x.tbTbSta = 'U' then
call mAdd o, n 'index auf unique key fehlt'
else if m.c.x.tbTbSta = 'V' then
call mAdd o, n 'Regenerierung interne ViewDarstellung'
else if m.c.x.tbTbSta ^= '' then
call mAdd o, n 'TableStatus' m.c.x.tbTbSta 'unbekannt'
end
end
do vx=1 to m.v9.0
call mAdd o, '|| V9' m.v9.vx.tp left(m.v9.vx.nm, 30) ,
left(m.v9.vx.v9, 30)
end
return aufOld < m.o.0
endProcedure qualityCheck
/*--- für jedes Objekt aus Source Scope Eintrage in der
Spezialfall Library suchen und falls vorhanden anzeigen --------*/
spezialFall: procedure expose m.
parse upper arg db, typ qua '.' nam
if m.libPre = 'DSN.DBQ' then
return
pDb = mask2prod('DBNAME', db)
if (typ = 'DB' | typ = 'TS') & db <> qua then
call err 'db mismatch spezialFall('db',' typ qua'.'nam')'
if typ = 'DB' then
srch = typ pDb'.'
else if typ = 'TS' then
srch = typ pDb'.'mask2prod('TSNAME', nam)
else if typ = 'TB' then
srch = typ mask2prod('TBOWNER', qua)'.'mask2prod('TBNAME', nam)
else
call err 'bad typ' typ
st = spezialFall'.'pDb
if symbol('m.st.0') <> 'VAR' then do
dsn = m.libSpezial"("pDb")"
sy = sysDsn("'"dsn"'")
if sy <> 'OK' then do
m.st.0 = 0
if sy <> 'MEMBER NOT FOUND' then
call err 'spezialFall library' dsn':' sy
end
else do
call readDsn dsn, 'M.SPEZIALFALL.'pDB'.'
end
end
if m.st.0 < 1 then
return
offs = 999
found = 0
do sx = 1 to m.st.0
fx = verify(m.st.sx, ' ')
if fx = 0 | fx > 72 then
iterate
if substr(m.st.sx, fx, 1) = '*' then
iterate
if fx <= offs then do
offs = fx
m.st.sx = left(m.st.sx, 72)
n = ''
if pos('.', m.st.sx) > 0 then
parse upper var m.st.sx t q '.' n .
else
parse upper var m.st.sx t q .
if wordPos(t, 'DB TS TB') < 1 then
call err 'spezialFall' pDb 'line' sx 'ungueltig:' m.st.sx
found = match(srch, t strip(q)'.'strip(n)) ,
& ^ (wordPos(pDb'.'sx, m.spezialFall.done) > 0)
if found then
m.spezialFall.done = m.spezialFall.done pDb'.'sx
end
if found then
call mAdd auftrag, '|-'left(m.st.sx, 78)
end
return
endProcedure spezialFall
/*--- mask handling initialise ---------------------------------------*/
maskIni: procedure expose m.
call maskHierarchy
call maskRead mask.prot, m.libPre'.MASK(PROTDBAF)'
call maskRead mask.dbof, m.libPre'.MASK(DBAFDBOF)'
return
endProcedure maskIni
/*--- mask a whole scope --------------------------------------------*/
maskScope: procedure expose m.
parse arg mskDsn, fr, to
call maskRead masc, mskDsn
do fx=1 to m.fr.0
ty = m.fr.fx.type
m.to.fx.type = ty
if wordPos(ty, 'DB SG') > 0 then
m.to.fx.qual = ''
else if wordPos(ty, 'TS') > 0 then
m.to.fx.qual = maskTrans(masc, 'DBNAME', m.fr.fx.qual)
else
m.to.fx.qual = maskTrans(masc, 'SCHEMA', m.fr.fx.qual)
if wordPos(ty, 'DB') > 0 then
m.to.fx.name = maskTrans(masc, 'DBNAME', m.fr.fx.name)
else if wordPos(ty, 'TB VW AL') > 0 then
m.to.fx.name = maskTrans(masc, 'TBNAME', m.fr.fx.name)
else if wordPos(ty, 'SP') > 0 then
m.to.fx.name = maskTrans(masc, 'STPNAME', m.fr.fx.name)
else
m.to.fx.name = maskTrans(masc, ty'NAME', m.fr.fx.name)
end
m.to.0 = m.fr.0
return
endProcedure maskScope
/*--- mask test functions --------------------------------------------*/
testMask: procedure expose m.
call maskIni
call maskTT OWNER, GDB9998
call maskTT DBNAME, DGDB9998
call maskTT DBNAME, DGDB0287
call maskTT OWNER, GDB0301
call maskTT TSNAME, AGRFX12A2
call maskTT OWNER, SYS123EF
return 0
endProcedure testMask
maskTT: procedure expose m.
parse arg ty, na
say 'maskTrans(prot,' ty',' na') =' maskTrans(mask.prot, ty, na) ,
' -> DBOF' maskTrans(mask.dbof, ty, maskTrans(mask.prot,ty,na))
return
/*--- translate a prototype object to DBOF naming -------------------*/
mask2Prod: procedure expose m.
parse arg ty, na
return translate(strip(,
maskTrans(mask.dbof, ty, maskTrans(mask.prot,ty,na))))
/*--- translate an object of type ty and name na
by the masking file in st --------------------------------*/
maskTrans: procedure expose m.
parse arg st, ty, na
if symbol('m.mask.hier.ty') <> 'VAR' then
call err 'bad type' ty
types = m.mask.hier.ty
do sx=1 to m.st.0
if wordPos(m.st.sx.typ, types) < 1 then
iterate
if match(na, m.st.sx.in, vv) then
return matchTrans(m.st.sx.out, vv)
end
return na
endProcedure maskTrans
/*--- read and analyse the masking file dsn into stem st ------------*/
maskRead: procedure expose m.
parse arg st, dsn
maskIgno = 'COMPRESS SEGSIZE DEFER DEFINE PRIQTY SECQTY'
call readDsn dsn, i.
j = 0
do i=1 to i.0
parse var i.i t ':' s ',' d
t = strip(t)
if symbol('m.mask.hier.t') == 'VAR' then
nop
else if wordPos(t, maskIgno) > 0 then
iterate
else
call err 'bad typ' t 'in maskline' i':' i.i
j = j+1
m.st.j.typ = t
m.st.j.in = strip(s)
m.st.j.out = word(d, 1)
end
m.st.0 = j
return
drop typ in out
do wx=1 to m.st.0
say wx m.st.wx.typ':' m.st.wx.in'==>'m.st.wx.out'|'
end
endProcedure maskRead
/*--- initialise the type hierarchy of masking
as input use the msgLines of the mask editor --------------*/
maskHierarchy: procedure expose m.
/* copy der hierarch aus masking template */
call mAdd mCut('T', 0) ,
, 'COLNAME ' ,
, 'NAME ' ,
, ' DBNAME,TSNAME,TBNAME,IXNAME,UDFNAME, ' ,
, ' UDTNAME,COLLNAME,PKGNAME,PGMNAME,PLNNAME ' ,
, ' DBRMNAME,STPNAME,SFNAME,TGNAME,GRPNAME, ' ,
, ' VCATNAME,GBPNAME ' ,
, ' BPNAME ' ,
, ' TSBPNAME,IXBPNAME ' ,
, ' SGNAME ' ,
, ' TSSGNAME,IXSGNAME ' ,
, 'AUTHID ' ,
, ' SQLID,SCHEMA ' ,
, ' OWNER ' ,
, ' DBOWNER,TSOWNER,TBOWNER,IXOWNER ' ,
, ' GRANTID ' ,
, ' GRANTOR,GRANTEE '
qx = 0
lOff = -1
m.mask.hier = ''
do x=1 to m.t.0
of = verify(m.t.x, ' ', 'n')
li = translate(m.t.x, ' ', ',')
do while qx > 0 & word(q.qx, 1) >= of
qx = qx -1
end
px = qx - 1
if (qx = 0 | of > word(q.qx, 1)) & words(li) = 1 then do
px = qx
qx = qx + 1
if qx = 1 then
q.qx = of word(li, 1)
else
q.qx = of word(li, 1) subword(q.px, 2)
end
do wx=1 to words(li)
w1 = word(li, wx)
m.mask.hier = m.mask.hier w1
if wordPos(w1, subWord(q.qx, 2)) < 1 then
m.mask.hier.w1 = w1 subWord(q.qx, 2)
else
m.mask.hier.w1 = subWord(q.qx, 2)
end
end
return
endProcedure maskHierarchy
/*--- Funktion q: scope Zeilen pruefen -------------------------------*/
queryScope: procedure expose m.
parse arg subSys
subs2 = ''
rf = 1
isConn = 0
if adrEdit('(rl) = lineNum .zl', 4) = 4 then
rl = 0
if ^ m.editMacro then
call err 'q nicht als Macro'
if ^ m.editProc then do
if adrEdit('PROCESS RANGE Q', 0 4) = 0 then do
call adrEdit '(rf) = lineNum .zfrange'
call adrEdit '(rl) = lineNum .zlrange'
end
m.editProc = 1
end
do rx = rf by 1 while rx <= rl
call adrEdit '(li) = line' rx
parse value analyseScope(li) with ty nm qu
if ty = '?' then do
if nm <> '' then
say nm qu 'in line' rx':' strip(li)
if \ isConn & subsys == '' then do
parse upper var li w1 w2 .
if wordpos(w1, 'SOURCE TARGET') > 0 then do
if length(w2) = 4 | ( length(w2) = 8 ,
& pos(substr(w2,4,1), './') > 0) then
subs2 = translate(w2, '/', '.')
end
end
iterate
end
if \ isConn then do
isConn = 1
if subSys = '' then
subSys = if(subs2 == '', m.mySub, subs2)
subsys = translate(subsys, '/', '.')
call sqlConnect subSys
subsys = translate(subsys, m.mAlfLC, m.mAlfUC)
end
call expandScope mCut(qq, 0), ty, qu, nm
do qx=1 to m.qq.0
neu = m.qq.qx
if length(neu subSys) < 70 then
neu = left(neu, 68 - length(subSys)) '*'subSys
else if length(neu subSys) < 80 then
neu = neu '*'subSys
liCm = if(qx=1, "line" rx, "line_after" (rx+qx-2))
if adrEdit(liCm "= (neu)", 4) = 4 then
say 'truncation line' rx':' neu
end
rx = rx + m.qq.0 - 1
rl = rl + m.qq.0 - 1
end
call sqlDisConnect
return 0
endProcedure queryScope
/*--- einen Scope Ausdruck expandieren -------------------------------*/
expandScope: procedure expose m.
parse arg o, ty, qu, nm
sql = ''
dec2s = "strip(case when abs(?) > 9223372036854775807",
"then char(real(?)) else char(bigint(?)) end)"
if ty = 'DB' then
sql = "select 'db', name, '' from sysibm.sysDatabase",
"where name" sqlClause(nm)
else if ty = 'TS' then
sql = "select 'ts', strip(dbName) || '.' || strip(tsName)," ,
"case when count(*) = 1 then 'tb '" ,
"else strip(char(count(*))) || ' tables||| '",
"end || min(strip(creator) ||'.'|| strip(name))",
"from sysibm.systables" ,
"where type = 'T' and dbName" sqlClause(qu),
"and tsName" sqlClause(nm),
"group by dbName, tsName"
else if ty = 'TB' | ty = 'VW' | ty = 'AL' then
sql = "select case when type = 'T' then 'tb'",
"when type = 'V' then 'vw'",
"when type = 'A' then 'al'",
"else '?' || type end,",
"strip(creator) || '.' || strip(name),",
"case when type = 'A' then 'for '",
"|| strip(location) || '.'" ,
"|| strip(tbCreator)||'.'||strip(tbName)",
"else 'ts ' || strip(dbName) ||'.'",
"|| strip(tsName)",
"end",
"from sysibm.systables" ,
"where type =" quote(left(ty, 1), "'"),
"and creator" sqlClause(qu),
"and name" sqlClause(nm)
else if ty = 'IX' then
sql = "select 'ix', strip(creator) || '.' || strip(name),",
"'tb ' || strip(tbCreator)||'.'||strip(tbName)",
'from sysibm.sysIndexes' ,
'where creator' sqlClause(qu),
'and name' sqlClause(nm)
else if ty = 'UDT' then
sql = "select 'udt', strip(schema) || '.' || strip(name),",
"'source ' || strip(sourceSchema)",
"|| '.' || strip(sourceType)",
"from sysibm.sysDataTypes",
'where schema' sqlClause(qu),
'and name' sqlClause(nm)
else if ty = 'UDF' | ty = 'SP' then
sql = "select case when routineType = 'F' then 'udf'",
"when routineType = 'P' then 'sp'",
"else '?' || routineType end, ",
"strip(schema) || '.' || strip(name),",
"'otp=' || origin || function_type" ,
"|| strip(char(parm_count))",
"|| ' spec=' || strip(specificName)",
"|| ' a=' || active || ' vers=' || version",
"from sysibm.sysRoutines",
'where routineType =' quote(right(ty, 1), "'"),
'and schema' sqlClause(qu) ,
'and name' sqlClause(nm)
else if ty = 'TG' then
sql = "select 'tg', strip(schema) || '.' || strip(name),",
"'teg ' || trigTime || trigEvent||granularity",
"|| ' tb ' || strip(tbOwner) || '.'",
"|| strip(tbName)",
"from sysibm.sysTriggers",
'where seqNo=1 and schema' sqlClause(qu),
'and name' sqlClause(nm)
else if ty = 'SQ' then
sql = "select 'sq', strip(schema) || '.' || strip(name),",
"'start ' ||" repAll(dec2s, "?", "start"),
"|| ': ' ||" repAll(dec2s, "?", "minValue"),
"|| '-' ||" repAll(dec2s, "?", "maxValue"),
"|| ' inc ' ||" repAll(dec2s, "?", "increment"),
"from sysibm.sysSequences",
"where seqType='S' and schema" sqlClause(qu),
"and name" sqlClause(nm)
else if ty = 'SY' then
sql = "select 'sy', strip(creator) || '.' || strip(name),",
"'for ' || strip(tbCreator) || '.'" ,
"||strip(tbName)",
"from sysibm.sysSynonyms",
"where creator" sqlClause(qu),
"and name" sqlClause(nm)
else do
call mAdd o, ty left(qu'.'nm, 30) '* query nicht implementiert'
return
end
call sqlQuery 1, sql 'order by 2', ,
, classNew('n* SQL u f FT v, f FN v, f FI v')
do cx=0 by 1 while sqlFetch(1, d)
call mAdd o, lefA(m.d.ft, 3) lefA(m.d.fn, 30) m.d.fi
end
call sqlClose 1
if cx = 0 then
call mAdd o, lefA(ty, 3) lefA(strip(qu)left('.', qu \== '') ,
|| strip(nm), 30) '* nicht gefunden'
return
endProcedure expandScope
/*--- return sql condition (= String oder like String) ---------------*/
sqlClause: procedure expose m.
parse arg val
val = translate(val, '%_', '*?')
if verify(val, '%_', 'm') > 0 then
return 'like' quote(val, "'")
else
return '=' quote(val, "'")
endProcedure sqlClause
lefA: procedure expose m.
parse arg s, len
if length(s) < len then
return left(s, len)
else
return s
endProcedure lefA
/*--- copy srcDdl und srcCat aus anderem rz --------------------------*/
receiveSource: procedure expose m.
parse arg rz
if rz = '' | rz = '*' | rz = m.myRz then
call err 'rs receiveSource mit ungueltigem rz' rz
call readAuftrag rz, m.auftrag.dataset, m.e.auftrag
call analyseAuftrag
if m.e.nachtrag = '?' then
call err 'keine Version in Auftrag' m.e.auftrag 'im' rz
nacMbr = left(m.e.auftrag, 7) || m.e.nachtrag
call csmCopy rz'/'m.libPre'.srcDdl('nacMbr')', m.libPre'.'rz'DDL'
call csmCopy rz'/'m.libPre'.srcCat('nacMbr')', m.libPre'.'rz'Cat'
call readAuftrag , m.auftrag.dataset, m.auftrag
call mAdd auftrag, addDateUs('receiveSource' rz,
m.libPre'.'rz'Cat('nacMbr')')
return
endProcedure receiveSource
/*--- copy wsl aus anderem rz ----------------------------------------*/
receiveWSL: procedure expose m.
parse arg rz
if rz = m.myRz then
rz = ''
call analyseAuftrag
sWsl = 'dsn.dba.clon.wsl('left(m.e.auftrag, 7)'Q)'
sIff = 'dsn.dba.'left(m.e.auftrag, 7)'Q.IFF'
if rz <> '' then do
call csmCopy rz'/'sWsl, sWsl
if adrCsm("dslist SYSTEM("rz") DSNMASK('"sIff"') SHORT", 4) = 0,
& stemSize = 1 then
call csmCopy rz'/'sIff, sIff
else
say 'iff existiert nicht im' rz
end
call cloneWsl '', m.e.auftrag, 1
call mAdd auftrag, addDateUs('receiveWSL' rz)
return
endProcedure receiveWSL
/*--- send wsl to the argument rz ------------------------------------*/
sendWSL: procedure expose m.
parse arg rz
if rz = m.myRz then
rz = ''
call analyseAuftrag
if m.versions = '' | m.compares <> '' then
call warn 'sendWSL ohne versions oder mit compares'
sWsl = 'dsn.dba.clon.wsl('left(m.e.auftrag, 7)'Q)'
sIff = 'dsn.dba.'left(m.e.auftrag, 7)'Q.IFF'
if sysDsn("'"sWsl"'") <> 'OK' then
call err 'source wsl fehlt:' sWsl sysDsn("'"sWsl"'")
if rz <> '' then do
call csmCopy sWsl, rz'/'sWsl
if sysDsn("'"sIff"'") <> 'OK' then
say 'iff existiert nicht' sIff sysDsn("'"sIff"'")
else
call csmCopy sIff, rz'/'sIff
end
call cloneWsl rz, m.e.auftrag, 1
call mAdd auftrag, addDateUs('sendWSL' rz)
return
endProcedure sendWSL
/*--- clone a wsl mbr in the rz sys,
if doRemove=1 remove old members first ---------------------*/
cloneWsl: procedure expose m.
parse arg sys, mbr, doRemove
/* copy multi clone jcl from target rz */
jcl = csmSysDsn(sys'/DSN.DBA.MULTI.CLONE'right(mbr, 1)'.JCL', 0)
CALL READdsn jcl, m.jj.
/* modify the jcl */
do jx=1 to m.jj.0
if word(m.jj.jx, 2) == '=' then do
if word(m.jj.jx, 1) = 'SRCWSLST' then
m.jj.jx = 'SRCWSLST =' left(mbr, 7)'Q'
else if word(m.jj.jx, 1) = 'CLNWSLST' then
m.jj.jx = 'CLNWSLST =' mbr
end
else if space(subword(m.jj.jx, 1, 2) ,1) ,
== '//DELMBRIF IF' then do
m.jj.jx = '//DELMBRIF IF RC =' (7 *(^doRemove)) 'THEN'
end
else if word(m.jj.jx, 1) == 'DELETE' then do
nm = word(m.jj.jx, 2)
cx = pos('(', nm)
if right(nm, 1) = ')' & cx > 0 then
m.jj.jx = ' DELETE' left(nm, cx)mbr')'
else
call err 'bad delete' jx m.jj.jx
end
end
call writeSub jj, sys, 1
return 0
endProcedure cloneWsl
warn:
say '*** warning:' arg(1)
return
endSubroutine warn
repAll: procedure expose m.
parse arg src, w, new
res = ''
cx = 1
do forever
nx = pos(w, src, cx)
if nx < 1 then
return res || substr(src, cx)
res = res || substr(src, cx, nx-cx) || new
cx = nx + length(w)
end
endProcedure repAll
/**** ca *************************************************************/
caDDl: procedure expose m.
parse arg o, scp, glblCh
do sx=1 to m.scp.0
sn = scp'.'sx
if m.sn.type == 'TS' then do
call mAdd o, ' TABLESPACE' m.sn.qual m.sn.name
call caExplode o, TABLE INDEX VIEW SYNONYM TRIGGER ,
MQTB_T MQTB_I MQTB_V MQTB_S ,
MQVW_VW MQVW_I MQVW_V MQVW_S
end
else if m.sn.type == 'VW' then do
call mAdd o, ' VIEW ' m.sn.qual m.sn.name
end
else
call err 'implement type' m.sn.type 'for ca'
end
call readDsn m.libSkels'CCO2)', m.cco2.
call mapExpAll e, o, cco2
call mAdd o, ' GLBLNAME ' glblCh ,
, ' GLBLCRTR DBX'
glblDsn = m.libPre".caGlblCh("glblCh")"
if sysDsn("'"glblDsn"'") \== 'OK' then
call err 'mask' glblCh':' glblDsn sysDsn("'"glblDsn"'")
call readDsn glblDsn, 'M.GLBL.'
call mAddSt o, glbl
return
endProcedure caDDL
caExplode: procedure expose m.
parse arg o, expl
do wx=1
e1 = word(expl, wx)
if e1 == '' then
return
call mAdd o, ' EXPLODE' e1
end
endProcedure caExplode
/**** bmc ************************************************************/
/*--- src und trg profile erstellen ----------------------------------*/
bmcVars: procedure expose m.
m.e.profSrc = m.e.auftrag'_SRC'
m.e.profTrg = m.e.auftrag'_TRG'
m.e.profOwn = 'DBXAUFTR'
return
endProcedure bmcVars
bmcVarsProf: procedure expose m.
parse arg isImport
m.e.profChg = bmcMask2Prof(m.e.comMask)
if isImport then
m.e.profImp = bmcMask2Prof(m.e.impMask)
return
endProcedure bmcVarsProf
bmcMask2Prof: procedure expose m.
parse arg mask
m2 = translate(mapExp(e, mask))
return word(translate(m2, ' ', '.()'), 2)'.'dsnGetMbr(m2)
endProdecure bmcMask2Prof
/*--- src und trg profile erstellen ----------------------------------*/
bmcSrcTrg: procedure expose m.
parse arg oldSrc prof
if symbol('m.mask.hier') \== 'VAR' then
call maskHierarchy
if m.scopeSrc.rz \== m.sysRz | m.scopeTrg.rz \== m.sysRz then
call err 'bmc compare on other rz not implemented'
if m.scopeSrc.subsys \== m.scopeTrg.subsys then
call err 'bmc compare on different subsystems not implemented'
call configureSubsys m.scopeSrc.rz, m.scopeSrc.subsys
call bmcProfile m.e.profOwn, m.e.profSrc, 'SCOPESRC'
if m.optAuto then
call maskScope m.e.comMask, 'SCOPESRC', 'SCOPETRG'
call bmcProfile m.e.profOwn, m.e.profTrg, 'SCOPETRG'
return
endProcedure bmcSrcTrg
bmcProfile: procedure expose m.
parse arg ow, prof, scp
call sqlOConnect m.scp.subSys
call sqlExec "insert into bmcacma1.CM_BLPROFILE" ,
"(BLPOWNER, blpName, type, template)" ,
"values('"ow"', '"prof"', 'C', '"prof"####')", -803
call sqlExec "delete from bmcacma1.CM_SCOPE" ,
"where scOwner = '"ow"' and scName = '"prof"'", 100
do sx=1 to m.scp.0
sn = scp'.'sx
if m.sn.type = 'DB' then do
q1 = m.sn.name
q2 = ''
end
else do
q1 = m.sn.qual
q2 = m.sn.name
end
call sqlExec "insert into bmcacma1.CM_SCOPE" ,
"(SCOWNER, SCName, Type, ACTION,OBJECT,NAME_PART1,NAME_PART2",
",MIGDT, MIGTS, MIGTB, MIGCK, MIGFK, MIGIX, MIGVW, MIGAU",
",MIGSY, MIGAL, MIGRO, MIGTR, MIGUC, MIGAX",
")values('"ow"', '"prof"', 'B', 'I'" ,
", '"m.sn.type"', '"q1"', '"q2"'" ,
",'N' , 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'N'",
",'Y' , 'Y', '', 'Y', 'Y', 'Y')"
end
call sqlCommit
return
endProcedure bmcProfile
/* copy match begin ***************************************************/
/************************************* begin copy match ******/
/*--- wildCard matching with the following wildchars:
* 0-n chars
? 1 char
fill matched expressions instem st if st is non empty
return 1 if mask matches wert ----------------------------------*/
match: procedure expose m.
parse arg wert, mask, st
if st == '' then
return matchRO(wert, mask)
m.st.0 = -9
return matchSt(wert, mask, st, 0)
endProcedure match
/*--- return the fixed prefix of maskt -------------------------------*/
matchPref: procedure
arg mask, suff
ix = verify(mask, '*?', 'm')
if ix = 0 then
return mask
else
return left(mask, ix-1)suff
endProcedure matchPref
/*--- return true if mask matches wert -------------------------------*/
matchRO: procedure
arg wert, mask
ix = verify(mask, '*?', 'm')
if ix < 1 then return (mask == wert)
if length(wert) < ix-1 then return 0
if left(mask, ix-1) \== left(wert, ix-1) then return 0
if substr(mask, ix, 1) == '?' then do
if length(wert) < ix then return 0
return matchRO(substr(wert, ix+1), substr(mask, ix+1))
end
mask = substr(mask, ix+1) /* * 0 - n Chars */
do ex = 1+length(wert) to ix by -1
if matchRO(substr(wert, ex), mask) then return 1
end
return 0
endProcedure matchRO
/*--- wildCard matching: fill matched expressions instem st
return 1 if mask matches wert ----------------------------------*/
matchSt: procedure expose m.
parse arg wert, mask, st, sx
ix = verify(mask, '*?', 'm')
if ix < 1 then do
if mask \== wert then
return 0
m.st.0 = sx
return 1
end
if \ abbrev(wert, left(mask, ix-1)) then
return 0
reMa = substr(mask, ix+1)
sx = sx + 1
if substr(mask, ix, 1) == '?' then do /* ? 1 Character */
if length(wert) < ix then
return 0
m.st.sx = substr(wert, ix, 1)
return matchSt(substr(wert, ix+1), reMa, st, sx)
end
do lx = 1+length(wert) to ix by -1 /* greedy: from all to empty */
if matchSt(substr(wert, lx), reMa, st, sx) then do
m.st.sx = substr(wert, ix, lx-ix)
return 1
end
end
return 0
endProcedure matchSt
matchTrans: procedure expose m.
parse arg mask, st
r = ''
ox = 1
sx = 0
ix = verify(mask, '*?', 'm')
do sx=1 to m.st.0 while ix > 0
if sx > m.st.0 then
call err 'matchTrans('mask',' st') has only' ,
m.st.0 'variables'
r = r || substr(mask, ox, ix-ox)m.st.sx
ox = ix+1
ix = verify(mask, '*?', 'm', ox)
end
if ix > 0 then
call err 'matchTrans('mask',' st') has only' ,
m.st.0 'variables'
return r || substr(mask, ox)
endProcedure matchTrans
/* copy match end *****************************************************/
/* copy csm begin ******************************************************
interface to csm,
it is integrate with adrTso, eg. dsnAlloc , 'RZ3/..' uses csm
***********************************************************************/
adrCsm:
return adrTso('csmExec' arg(1), arg(2))
endProcedure adrCsm
csmCopy: procedure expose m.
parse arg csnFr, csnTo, ggRet
if dsnGetMbr(csnTo) \= '' ,
& dsnGetMbr(csnFr) <> dsnGetMbr(csnTo) then
call err 'member rename' csnFr 'to' csnTo
parse value csmSysDsn(csnFr) with sysFr '/' dsnFr
parse value csmSysDsn(csnTo) with sysTo '/' dsnTo
if sysFr = '*' & sysTo <> '*' then do
pdsTo = dsnSetMbr(dsnTo)
al = "SYSTEM("sysTo") DDNAME(COPYTo)",
"DATASET('"pdsTo"') DISP(SHR)"
alRes = dsnAlloc(systo'/'pdsTo, ,'COPYTO', '*')
if datatype(alRes, 'n') then do
/* wir müssen es selbst allozieren csmxUtil
vergisst management class ||||| */
say 'could not allocate' al
say 'trying to create'
rc = listDsi("'"dsnSetMbr(dsnFr)"' SMSINFO")
if rc = 0 then
mv = ''
else if rc = 4 & sysReason = 19 then do
mv = 'UNITCNT(30)'
say 'multi volume' mv
end
else if rc \= 0 then
call err 'listDsi rc' rc 'reason' sysReason,
sysMsgLvl1 sysMsgLvl2
al = left(al, length(al)-4)'CAT)'
if right(sysDsSms, 7) == 'LIBRARY' ,
| abbrev(sysDsSms, 'PDS') then
al = al 'DSNTYPE(LIBRARY)'
if sysUnits = 'TRACK' then
sysUnits = 'TRACKS'
al = al "DSORG("sysDSorg") MGMTCLAS("sysMgmtClass")",
"RECFM("sysREcFM") LRECL("SYSLRECL")",
"blksize("sysBLkSIZE")",
"SPACE("sysPrimary"," sysSeconds")" sysUnits mv
call adrCsm "allocate" al
end
call adrTso 'free dd(copyTo)'
end
c = "'COPY" sysFr"/''"dsnFr"'' TO" ,
sysTo"/''"dsnSetMbr(dsnTo)"'' REPLACE'"
return adrTso("exec 'CSM.RZ1.P0.EXEC(CSRXUTIL)'" c , ggRet)
return
endProcedure csmCopy
csmAlloc: procedure expose m.
parse arg dsn dd disp rest ':' nn, retRc
sys = ''
a2 = ''
parse value csmSysDsn(dsn) with sys '/' dsn
if disp = '' then
disp = 'shr'
al = "SYSTEM("sys") DDNAME("dd")"
if dsn <> '' then do
a2 = "DATASET('"dsnSetMbr(dsn)"')"
mbr = dsnGetMbr(dsn)
if mbr <> '' then
a2 = a2 'MEMBER('mbr')'
end
if abbrev(disp, 'SYSOUT(') then
a2 = a2 disp
else
a2 = a2 "DISP("disp")"
if retRc <> '' | nn = '' then do
alRc = adrCsm('allocate' al a2 rest, retRc)
if alRc <> 0 then
return alRc
return dd 'call adrTso "free dd('dd')";'
end
do retry=0 by 1
alRc = adrCsm('allocate' al a2 rest, '*')
if alRc = 0 then
return dd 'call adrTso "free dd('dd')";'
if retry > 0 | nn = '' | wordPos(disp, 'OLD SHR') < 1 then
return err('cmsAlloc rc' alRc 'for' al rest)
say 'csmAlloc rc' alRc 'for' al a2 rest '...trying to create'
nn = al 'disp(cat)' dsnCreateAtts(dsn, nn, 1)
call adrCsm 'allocate' nn
call adrTso 'free dd('dd')'
end
endProcedure csmAlloc
csmSysDsn: procedure expose m.
parse upper arg dsn, withStar
if pos('/', dsn) < 1 then
sys = '*'
else
parse var dsn sys '/' dsn
if sys <> '' & sys <> '*' & sys <> sysvar(sysnode) then
return sys'/'dsn
else if withStar == 0 then
return dsn
else
return '*/'dsn
endProcedure csmSysDsn
/* copy csm end********************************************************/
/* copy sqlO begin ***************************************************
sql interface mit o und j Anbindung
***********************************************************************/
sqlOini: procedure expose m.
if m.sqlO.ini == 1 then
return
call sqlIni
m.sqlO.ini = 1
m.sqlO.cursors = left('', 200)
call jIni
call classNew 'n SqlResultRdr u JRWO', 'm',
, "jReset m.m.cursor = arg; m.m.type = arg2;",
, "jOpen call sqlResultRdrOpen m, opt",
, "jClose call sqlClose m.m.cursor",
, "jReadO return sqlSelReadO(m)"
call classNew 'n SqlSel u JRWO', 'm',
, "jReset m.m.src = arg; m.m.type = arg2;",
, "jOpen call sqlSelOpen m, opt",
, "jClose call sqlSelClose m",
, "jReadO return sqlSelReadO(m)"
call classNew 'n SqlDRS u SqlSel', 'm',
, "jReset m.m.loc = arg; m.m.type = arg2;",
, "jOpen call sqlDRSOpen m, opt",
, "jClose call sqlSelClose m",
, "jReadO return sqlSelReadO(m)"
call classNew 'n SqlRxConnection u', 'm',
, "sqlQuery return sqlRxQuery(cx, src, retOk)",
, "sqlFetch return sqlRxFetch(cx, dst, retOk)",
, "sqlClose return sqlRxClose(cx, retOk)",
, "sqlUpdate return sqlRxUpdate(cx, src, retOk)",
, "sqlCall call err 'implement sqlRxCall"
call classNew 'n SqlRxStatement u', 'm',
, "sqlQuery return sqlRxQuery(m.cx.cursor, src, retOk)",
, "sqlFetch return sqlRxFetch(m.cx.cursor, dst, retOk)",
, "sqlClose return sqlRxClose(m.cx.cursor, retOk)",
, "sqlUpdate return sqlRxUpdate(m.cx.cursor, src, retOk)",
, "sqlCall call err 'implement sqlRxCall"
call classNew 'n SqlCsmConnection u', 'm',
, "sqlQuery return sqlCsmQuery(cx, src, retOk)",
, "sqlFetch return sqlCsmFetch(cx, dst)",
, "sqlClose return 0",
, "sqlUpdate call err 'implement sqlCsmUpdate'" ,
, "sqlCall call err 'implement sqlCsmCall'"
call classNew 'n SqlCsmStatement u', 'm',
, "sqlQuery return sqlCsmQuery(m.cx.cursor, src, retOk)",
, "sqlFetch return sqlCsmFetch(m.cx.cursor, dst)",
, "sqlClose return 0",
, "sqlUpdate call err 'implement sqlCsmUpdate'" ,
, "sqlCall call err 'implement sqlCsmCall'"
return 0
endProcedure sqlOini
/*--- execute a query from sql, with one resultset -------------------*/
sqlQuery: procedure expose m.
parse arg cx, src, retOk, m.sql.cx.type
if m.sql.cx.type \== '' then
m.sql.cx.type = class4Name(m.sql.cx.type)
if datatype(cx, 'n') then
interpret objMet(m.sql.connection, 'sqlQuery')
else
interpret objMet(cx, 'sqlQuery')
/*--- fetch next row to m.dst.* at end return false ------------------*/
sqlFetch: procedure expose m.
parse arg cx, dst, retOk
if datatype(cx, 'n') then
interpret objMet(m.sql.connection, 'sqlFetch')
else
interpret objMet(cx, 'sqlFetch')
/*--- close cursor 'c'cx ---------------------------------------------*/
sqlClose: procedure expose m.
parse arg cx, retOk
if datatype(cx, 'n') then
interpret objMet(m.sql.connection, 'sqlClose')
else
interpret objMet(cx, 'sqlClose')
return 0
/*-- execute an sql with no resultset, but possibly outParms ---------*/
sqlUpdate: procedure expose m.
parse arg cx, src, retOk
if cx == '' | datatype(cx, 'n') then
interpret objMet(m.sql.connection, 'sqlUpdate')
else
interpret objMet(cx, 'sqlUpdate')
return sqlCsmUpdate(cx, src, retOk)
/*-- execute an sql call with outParms and multiple resultSets -------*/
sqlCall: procedure expose m.
parse arg cx, src, retOk
if cx == '' | datatype(cx, 'n') then
interpret objMet(m.sql.connection, 'sqlCall')
else
interpret objMet(cx, 'sqlCall')
return sqlCsmUpdate(cx, src, retOk)
/*--- connect to the db2 subsystem sys -----------------------------*/
sqlOConnect: procedure expose m.
parse arg sys, retCon
call sqlOIni
return sqlConnect(sys, retCon)
endProcedure sqlOConnect
sqlSel: procedure expose m.
parse arg src, type
s = oNew('SqlSel', inp2str(src, '-sql'), type)
call pipeWriteAll s
return m.s.rowCount
endProcedure sqlSel
sqlStmtsOpt: procedure expose m.
parse arg src, opts
upper opts
sub = ''
o = ''
ggRet = ''
do wx=1 to words(opts)
w = word(opts, wx)
if abbrev(w, '-SQL') then
o = o'-sql'substr(w, 5)
else if w == '-O' | w == 'O' then
o = o'-o'
else if w = '*' | datatype(w, 'n') then
ggRet = ggRet w
else if length(w) == 4 then
sub = w
else
call err 'bad opt' w 'in opts' opts 'not -sql? -o or subsys'
end
call sqlOIni
if sub == '' then
call sqlOConnect
else if sub \== m.sql.connected then
call sqlConnect sub
return sqlStmts(src, strip(ggRet), strip(o))
endProcedure sqlStmtsOpt
/*** execute sql's in a stream (separated by ;)
opt: 'o' ==> write objects, otherwise fmtFTab
's' ==> spufi formatting (window 72) otherwise linebreak */
sqlStmts: procedure expose m.
parse arg src, ggRet, opt
dlm = ';'
isStr = oStrOrObj(src, m.j.in)
fLen = ''
if pos('sql', opt) > 0 then
fLen = word(substr(opt, pos('sql', opt)+3), 1)
if isStr then do
m.sqlStmts.rdr = ''
call sbSrc sqlStmts, ggStr
end
else do
fi = jOpen(o2File(ggObj), '<')
call jCatSqlReset sqlStmts, , fi, fLen
end
do forever
s1 = jCatSqlNext(sqlStmts, dlm)
if s1 = '' then
leave
w1 = translate(word(s1, 1))
if w1 == 'TERMINATOR' then do
dlm = strip(substr(m.s.val, 12))
if length(dlm) \== 1 then
call scanErr s, 'bad terminator' dlm 'in' strip(m.s.val)
iterate
end
call out sqlStmt(s1, ggRet, opt)
end
if \ isStr then
call jClose fi
return 0
endProcedure sqlStmts
sqlStmt: procedure expose m.
parse arg src, retOk, opt
cx = sqlGetCursor()
r1 = sqlExecute(cx, src, retOK)
res = 'sqlCode' r1
if wordPos(m.sql.cx.fun, 'DELETE INSERT UPDATE') > 0 then
res = res',' m.sql.cx.updateCount 'rows' ,
translate(fun, m.mAlfLC, m.mAlfUC)'d'
else if m.sql.cx.updateCount\=='' & m.sql.cx.updateCount\=0 then
res = res',' m.sql.cx.updateCount 'rows updated'
aa = strip(src)
if m.sql.cx.resultSet \== '' then do
rdr = sqlResultRdr(cx)
if pos('o', opt) > 0 then
call pipeWriteAll rdr
else
call fmtFTab sqlStmtFmt, rdr
res = m.rdr.rowCount 'rows fetched'
end
ll = 75 - length(res)
if length(aa) > ll then
aa = space(aa, 1)
if length(aa) > ll then
aa = left(aa, ll-3)'...'
call sqlFreeCursor cx
return res':' aa
endProceduire sqlStmt
removeSqlStmt: procedure expose m.
parse arg src, ggRet, opt
bx = verify(src, '( ')
if bx < 1 then
return ''
fun = translate(word(substr(src, bx), 1))
w2 = translate(word(substr(src, bx), 2))
res = ''
if fun == 'SELECT' | fun = 'WITH' then do
s = oNew('SqlSel', inp2str(src, '%S%+Q\s'))
if pos('o', opt) > 0 then
call pipeWriteAll s
else
call fmtFTab sqlStmtFmt, s
res = m.s.rowCount 'rows fetched'
end
else if fun = 'SET' & abbrev(w2, ':') then do
ex = pos('=', w2)
if ex > 2 then
var = strip(substr(w2, 2, ex-2))
else
var = strip(substr(w2, 2))
if var = '' then
var = 'varUnbekannt'
call sqlExec src, ggRet
res = 'sqlCode' sqlCode var'='value(var)
end
else if fun = 'SET' | (fun = 'DECLARE' & w2 = 'GLOBAL') then do
call sqlExImm src, ggRet
res = 'sqlCode' sqlCode
end
else if fun = 'CALL' then do
res = sqlStmtCall(src, ggRet, opt)
end
else do
if pos('-', ggRet) < 1 & fun = 'DROP' then
ggRet = -204 ggRet
call sqlExec src, ggRet
res = 'sqlCode' sqlCode
if wordPos(fun, 'DELETE INSERT UPDATE') > 0 THEN
res = res',' sqlErrd.3 'rows' ,
translate(fun, m.mAlfLC, m.mAlfUC)'d'
end
aa = strip(src)
ll = 75 - length(res)
if length(aa) > ll then
aa = space(aa, 1)
if length(aa) > ll then
aa = left(aa, ll-3)'...'
return res':' aa
endProcedure removeSqlStmt
sqlStmtCall: procedure expose m.
parse arg src, ggRet, opt
s = scanSrc(scanSqlReset(sqlstmtcall, ,0), src)
if \ scanSqlId(scanSkip(s)) | m.s.val \== 'CALL' then
call scanErr s, 'not a call'
if \ scanSqlQuId(scanSkip(s)) then
call scanErr s, 'qualified id missing after call'
loc = ''
if m.s.val.0 = 1 then
wh = 'name =' quote(m.s.val.1, "'")
else if m.s.val.0 = 2 then
wh = "schema = '"strip(m.s.val.1)"'" ,
"and name = '"strip(m.s.val.2)"'"
else if m.s.val.0 = 3 then do
loc = m.s.val.1
wh = "schema = '"strip(m.s.val.2)"'" ,
"and name = '"strip(m.s.val.3)"'"
end
else
call scanErr s, 'storedProcedureName' m.s.val ,
'has' m.s.val.0 'parts, should have 1, 2 or 3'
pn = m.s.val
da = sqlStmtCallDa(sqlStmtCall, loc, wh)
if \ scanLit(scanSkip(s), '(') then
call scanErr s, '( expected after call' pn
varChars = f
do ax=1
m.da.ax.varName = ''
isEmpty = 0
if scanLit(scanSkip(s), ':') then do
if \ scanVerify(scanSkip(s), m.mAlfDot) then
call scanErr s, 'variable expected after : in call' pn
m.da.ax.varName = m.s.tok
if m.da.ax.io == 'i' | m.da.ax.io == 'b' then
m.da.ax.sqlData = envGet(m.da.ax.varName)
end
else if scanString(s) then
m.da.ax.sqlData = m.s.val
else if scanVerify(s, ',):;', 'm') then
m.da.ax.sqlData = strip(m.s.tok)
else
isEmpty = 1
if scanLit(scanSkip(s), ')') then
leave
if \ scanLit(s, ',') then
call scanErr s, if(isEmpty, 'value, var, ') ,
|| "',' or ')' expected"
end
if ax \= m.da.sqlD then
if \ (ax=1 & m.da.sqlD = 0 & isEmpty) then
call scanErr s, 'call with' ax 'parms but' ,
pn 'needs' m.da.sqld
caCo = sqlExec('call' pn 'using descriptor :M.'da, 466)
call out '--- called' pn', sqlCode' caCo
do ax=1 to m.da.sqlD
call Out ' parm' ax m.da.ax.io m.da.ax.parmName,
|| if(m.da.ax.varName \== '',' $'m.da.ax.varName),
'=' m.da.ax.sqlData
if m.da.ax.varName \== '' then
call envPut m.da.ax.varName, m.da.ax.sqlData
end
if caCo = 466 then do
drop sqlDP
call sqlExec 'describe procedure :pn into :m.sqlDp'
if m.sqldp.sqlD < 1 then
call err 'bad sqldp sqlD='m.sqldp.sqlD 'for sqlCode' caCo
do dx=1 to m.sqldp.sqlD
call out ' dynamic result set' dx m.sqldp.dx.sqlName ,
'locator='m.sqldp.dx.sqlLocator
end
do dx=1 to m.sqldp.sqlD
drs = 'dynamic result set' dx'='m.sqldp.dx.sqlName 'of' pn
call out '--- begin of' drs
rdr = sqlDRS(m.sqldp.dx.sqlLocator)
if pos('o', opt) > 0 then
call pipeWriteAll rdr
else
call fmtFTab sqlStmtFmt, rdr
call out '---' m.rdr.rowCount 'rows fetched from' drs
end
end
return 'sqlCode' caCo
endProcedure sqlStmtCall
sqlStmtCallDa: procedure expose m.
parse arg da, loc, wh
cr = if(loc=='',,loc'.')'sysIbm'
sql = "select 'SCHEMA=''' || strip(schema) || ''''",
"|| ' and name=''' || strip(name ) || ''''",
"|| ' and specificName=''' || strip(specificName) || ''''",
"|| ' and routineType =''' || strip(routineType ) || ''''",
"|| ' and VERSION =''' || strip(VERSION ) || ''''",
"from" cr".SysRoutines ",
"where" wh "and active = 'Y'"
if sqlpreAllCl(49, sql, rou, ':m.rou') <> 1 then
call err m.rou.0 'routines found for' wh
rdr = jOpen(sqlRdr('select * from' cr'.sysParms where' m.rou,
'order by ordinal'), '<')
do ix=1 while assNN('A', jReadO(rdr))
if m.a.ordinal <> ix then
call err 'ix' ix 'mismatch ordinal' m.a.ordinal
ty = m.a.dataTypeId
m.da.ix.sqlType = ty
m.da.ix.sqlLen = m.a.length
m.da.ix.sqlLen.sqlPrecision = m.a.length
m.da.ix.sqlLen.sqlScale = m.a.scale
if wordPos(ty, 384 385) > 0 then /* date */
m.da.ix.sqlLen = 10
else if wordPos(ty, 388 389) > 0 then /* time */
m.da.ix.sqlLen = 8
else if wordPos(ty, 392 393) > 0 then /* timestamp */
m.da.ix.sqlLen = 26
m.da.ix.sqlData = ''
m.da.ix.parmName= m.a.parmName
m.da.ix.io = translate(m.a.rowType, 'iob', 'POB')
m.da.ix.sqlInd = 1
end
m.da.sqlD = ix - 1
return da
endProcedure sqlStmtCallDa
sqlResultRdr: procedure expose m.
parse arg cx, type
return oNew('SqlResultRdr', cx, type)
endProcedure sqlRdr
sqlRdr: procedure expose m.
parse arg src, type
return oNew('SqlSel', inp2str(src, '%S%+Q\s'), type)
endProcedure sqlRdr
sqlResultRdrOpen: procedure expose m.
parse arg m, opt
if opt\== m.j.cRead then
call err 'opt not' m.j.cRead 'sqlResultRdrOpen('m',' opt')'
m.m.jReading = 1
m.m.rowCount = 0
return m
endProcedure sqlResultRdrOpen
/*--- prepare and open cursor
generate type and fetchList ------------------------------------*/
sqlSelOpen: procedure expose m.
parse arg m, opt
m.m.cursor = sqlGetCursor()
call sqlQuery m.m.cursor, m.m.src, ,m.m.type /* ????? */
return sqlResultRdrOpen(m, opt)
endProcedure sqlOpen
/*--- dynamic result sets --------------------------------------------*/
sqlDRS: procedure expose m.
parse arg loc, type
return oNew('SqlDRS', loc, type)
endProcedure sqlDRS
sqlDRSOpen: procedure expose m.
parse arg m, opt
if opt\== m.j.cRead then
call err 'opt not' m.j.cRead 'sqlDRSOpen('m',' opt')'
crs = sqlGetCursor('a')
crN = 'C'crs
m.m.cursor = crs
call sqlexec 'allocate C'crs 'cursor for result set :m.m.loc'
call sqlExec('describe cursor :crN into :M.SQL.'crs'.D')
m.m.jReading = 1
m.m.rowCount = 0
return m
endProcedure sqlDRSOpen
/*--- return a free cursor -------------------------------------------*/
sqlGetCursor: procedure expose m.
parse arg rng
if rng == '' then
return sqlGetCursorRng(rng, 10, 49)
else if rng == 'h' then
return sqlGetCursorRng(rng, 60, 99)
else if rng == 'a' then
return sqlGetCursorRng(rng, 110, 199)
else
call err 'bad cursor range' rng
endProcedure sqlGetCursor
sqlGetCursorRng: procedure expose m.
parse arg rng, fr, to
cx = pos(' ', m.sqlO.cursors, fr)
if cx < fr & cx > to then
call err "no more '"rng"' cursors between" fr "and" to,
":"m.sqlO.cursors
m.sqlO.cursors = overlay('u', m.sqlO.cursors, cx)
return cx
endProcedure sqlGetCursorRNG
/*--- mark a cursor as closed ----------------------------------------*/
sqlFreeCursor: procedure expose m.
parse arg cx
if substr(m.sqlo.cursors, cx, 1) \== 'u' then
call err 'sqlFreeCursor('cx') not in use :'m.sqlo.cursors
m.sqlO.cursors = overlay(' ', m.sqlO.cursors, cx)
return
endProcedure sqlFreeCursor
/*--- create the type, fetch vars etc. from the sqlDA ---------------*/
sqlFetchClass: procedure expose m.
parse arg cx
if m.sql.cx.type = '' then do
ff = mCat('SQL.'cx'.COL', '%+Q v, f ')
m.sql.cx.type = classNew('n* SQL u f' ff 'v')
end
return m.sql.cx.type
endProcedure sqlFetchClass
/*--- fetch cursor for this sqlSel -----------------------------------*/
sqlSelReadO: procedure expose m.
parse arg m
cx = m.m.cursor
v = mNew(sqlFetchClass(cx))
if \ sqlFetch(cx, v) then
return ''
m.m.rowCount = m.m.rowCount + 1
return v
endProcedure sqlSelReadO
/*--- close sql Cursor -----------------------------------------------*/
sqlSelClose: procedure expose m.
parse arg m, v
call sqlClose m.m.cursor
call sqlFreeCursor m.m.cursor
m.m.cursor = ''
return m
endProcedure sqlSelClose
/*--- generate the format ff for a sql cx as specified in sp
use the information from the sqlDa -------------------------*/
deleteSqlGenFmt: procedure expose m.
parse arg ff, cx, sp
if abbrev(sp, '=') then
return substr(sp, 2)
if sp = '' then
sp = '*st'
m.ff.0 = m.sql.cx.d.sqlD
m.ff.flds = oFlds(sqlType(cx))
if abbrev(sp, '*') then do
do ix=1 to m.ff.0
m.ff.ix = substr(sp, 2)
end
return ff
end
if abbrev(fmts, '=') then
m.Sql.cx.FMT = substr(fmts, 2)
defs = 'ir7 fr9 sl12 Tl26' sp
do wx = 1 to words(defs)
parse value word(defs, wx) with ty 2 fo
select
when ty = 'd' then t.384 = fo
when ty = 'f' then t.480 = fo'/f'
when ty = 'i' then t.496 = fo'/i'
when ty = 'n' then t.484 = fo'/n'
when ty = 's' then t.448 = fo
when ty = 't' then t.388 = fo
when ty = 'T' then t.392 = fo
otherwise call err 'bad type' ty 'for format' fo
end
end
if symbol('t.496') == 'VAR' then
t.500 = t.496
if symbol('t.448') == 'VAR' then do
t.452 = t.448
t.456 = t.448
t.464 = t.448
end
do wx = 1 to m.ff.0
ty = m.sql.cx.d.wx.sqlType
le = m.sql.cx.d.wx.sqlLen
withNulls = ty // 2
ty = ty - withNulls
if symbol('t.ty') <> 'VAR' then
call err 'sqlType' ty 'not supported'
parse var t.ty fo 2 fl '/' op
if op = 'i' then
if le = 2 then le = 6
else le = 12
else if op <> '' then
call err 'length for sqlType' ty 'op' op 'not implemented'
if fl = '=' then
fl = le
else if abbrev(fl, '<') then
fl = min(le, substr(fl, 2))
m.ff.wx = fo || fl
end
return ff
endProcedure sqlGenFmt
/* copy sqlO end **************************************************/
/* copy sqlCsm begin **************************************************/
/*--- send an sql to csm an handle sqlCode ---------------------------*/
sqlCsmExe:
parse arg cx, ggSqlStmt, ggRetOk
sql_HOST = m.sql.conHost
SQL_DB2SSID = m.sql.conSSID
sql_query = ggSqlStmt
address tso "CSMAPPC START PGM(CSMASQL)"
if \ (rc = 0 | rc = 4) then
call err 'csmappc rc' rc
if sqlCode = 0 then
return 0
else if pos('*', ggRetOk) > 0 | wordPos(sqlCode, ggRetOk) > 0 ,
then do
if sqlCode < 0 & pos('say', ggRetOk) > 0 then
call errSay sqlmsg(sqlCA2Rx(sqlCa))
return sqlCode
end
else if sqlCode < 0 then
call err sqlmsg(sqlCA2rx(sqlCa))
else if pos('w', ggRetOk) < 1 then
if sqlCode = 100 then
call errSay 'sqlCode +100 row not found\nstmt =' ggSqlStmt
else
call errSay sqlMsg(sqlCA2rx(sqlCa)), ,'w'
return sqlCode
endProcedure sqlCsmExe
/*--- execute a query from sql, with one resultset -------------------*/
sqlCsmQuery: procedure expose m.
parse arg cx, sqlSrc, retOk, src
res = sqlCsmExe(cx, sqlSrc, 100 retOk)
if res < 0 then
return res
f = m.sql.cx.type
if src == '' then
src = 'SQL.'cx'.DATA'
m.sql.cx.data = src
if f \== '' then do
f = f'.FLDS'
if m.f.0 < sqlD then
call err 'not enough fields in type'
end
do kx=1 to sqlD
rxNa = SQLDA_REXXNAME.kx
cn = sqlVarName(f, kx, sqlDa_name.kx)
m.sql.cx.col.kx = cn
do rx=1 to sqlRow#
if substr(sqlIndicator.rx, kx ,1) == 'ff'x then
m.src.rx.cn = m.sqlNull
else
m.src.rx.cn = value(rxNa'.'rx)
end
end
m.src.0 = sqlRow#
m.sql.cx.col.0 = sqlD
m.sql.cx.daIx = 0
return 0
endProcedure sqlCsmQuery
sqlCsmFetch: procedure expose m.
parse arg cx, dst
src = m.sql.cx.data
rx = m.sql.cx.daIx + 1
if rx > m.sql.cx.data.0 then
return 0
m.sql.cx.daIx = rx
do kx = 1 to m.sql.cx.col.0
c = m.sql.cx.col.kx
m.dst.c = m.src.rx.c
end
return 1
endProcedure sqlCsmFetch
/* copy sqlCsm end **************************************************/
/* copy sql begin ***************************************************
sql interface
***********************************************************************/
/*--- initialize sqlRx (belongs to sqlQ, but currently only one|) ----*/
sqlIni: procedure expose m.
if m.sql.ini == 1 then
return
m.sqlNull = '---'
m.sqlInd = 'sqlInd'
m.sqlRetOK.0 = 0
m.sqlCAMsg = 0
m.sqlSuMsg = 2
call sqlPushRetOk
m.sql.ini = 1
m.sql.conType = ''
return 0
endProcedure sqlIni
/*--- connect and/or disconnect to DB2 -------------------------------*/
sqlConnect: procedure expose m.
parse upper arg sys, retOk
if sys \== '' then
nop
else if sysvar(sysnode) == 'RZ1' then
sys = 'DBAF'
else
call err 'no default subsys for' sysvar(sysnode)
call sqlOIni
hst = ''
if pos('/', sys) > 0 then do
parse value space(sys, 0) with hst '/' sys
cTy = 'Csm'
end
else do
cTy = 'Rx'
end
if m.sql.conType == cTy & m.sqlHost==hst & m.sqlConSSID == sys then
return 0
if m.sql.conType \== '' then
call sqlDisconnect
res = 0
if cTy = 'Rx' then
res = sqlRxConnect(sys, retOk)
if res < 0 then
return res
m.sql.conType = cTy
m.sql.conhost = hst
m.sql.conSSID = sys
m.sql.connection = oNew('Sql'cTy'Connection')
return res
endProcedure sqlConnect
sqlDisconnect: procedure expose m.
parse arg retOk
if m.sql.conType == 'Rx' then
call sqlRxDisconnect
m.sql.conType = ''
m.sql.conhost = ''
m.sql.conSSID = ''
return 0
endProcedure sqlDisonnect
/*--- execute a query from sql, with one resultset -------------------*/
sqlRxQuery: procedure expose m.
parse arg cx, src, retOk
m.sql.cx.updateCount = ''
m.sql.cx.resultSet = ''
m.sql.cx.needDesc = 1
res = sqlPrepare(cx, src, retOk, 1)
if res < 0 then
return res
res = sqlExec('declare c'cx 'cursor for s'cx, retOk)
if res < 0 then
return res
res = sqlExec('open c'cx, retOk)
if res < 0 then
return res
call sqlRxFetchVars cx
m.sql.cx.updateCount = sqlErrd.3
m.sql.cx.resultSet = cx
return res
endProcedure sqlRxQuery
/*--- fetch next row to m.dst.* at end return false ------------------*/
sqlRxFetch: procedure expose m.
parse arg cx, dst, retOk
if retOk == '' then
retOk = 100 m.sqlRetOk
fetCode = sqlExec('fetch c'cx 'into' sqlRxFetchVars(cx), retOk)
if fetCode == 100 then
return 0
if fetCode < 0 then
return fetCode
call sqlSetNull cx, dst
return 1
endProcedure sqlRxFetch
/*--- close cursor 'c'cx ---------------------------------------------*/
sqlRxClose: procedure expose m.
parse arg cx, retOk
return sqlExec('close c'cx, retOk)
endProcedure sqlRxClose
/*-- execute an sql with no resultset, but possibly outParms ---------*/
sqlRxUpdate: procedure expose m.
parse arg cx, src, retOk
m.sql.cx.updateCount = ''
m.sql.cx.resultSet = ''
bx = verify(src, '( ')
if bx > 0 then
fun = translate(word(substr(src, bx), 1))
if fun = 'SET' then do
w2 = translate(word(substr(src, bx), 2))
if \ abbrev(w2, ':') then
return sqlExImm(src, ggRet)
trace ?r
ex = pos('=', w2)
if ex = 0 then
ex = length(w2)+1
var = strip(substr(w2, 2, ex-2))
if var = '' then
call err 'bad hostVar in' src
m.sql.outVar = var
src2 = 'set :M.sql.out.'var substr(w, ex) subword(src, 3)
return sqlExec(src2, ggRet)
end
if fun == 'DECLARE' then do
if 'GLOBAL' == translate(word(substr(src, bx), 2)) then
return sqlExImm(src, ggRet)
end
res = sqlExec(src, ggRet)
if wordPos(fun, 'DELETE INSERT UPDATE') > 0 then
m.sql.cx.updateCount = sqlErrd.3
return res
endProcedure sqlRxUpdate
/*-- execute a query, update or call ---------------------------------*/
sqlExecute: procedure expose m.
parse arg cx, src, retOk
src = inp2Str(src, '-sql')
f = translate(word(substr(src, max(verify(src, '( '), 1)), 1))
m.sql.cx.fun = f
if f == 'SELECT' | fun == 'WITH' then
return sqlQuery(cx, src, retOk)
else if f == 'CALL' then
call err 'implement sql call for:' src
else
return sqlUpdate(cx, src, retOk)
endProcedure sqlExecute
/*-- execute a query, copy result to stem ----------------------------*/
sql2St: procedure expose m.
parse arg src, dst, retOk, type
cx = sqlGetCursor()
res = sqlQuery(cx, src, retOk, type)
if res >= 0 then do
do sx=1 while sqlFetch(cx, dst'.'sx)
end
res = sx-1
end
m.dst.0 = res
call sqlClose cx
call sqlFreeCursor cx
return res
endProcedure sql2St
/*-- execute a query and return value of the first column
if > 1 row fail, if 0 rows return arg(3) or fail ----------*/
sql2One: procedure expose m.
parse arg src, dst
cx = sqlGetCursor()
call sqlQuery cx, src
if \ sqlFetch(cx, dst) then
if arg() > 2 then
return arg(3)
else
call err 'no row returned for:' src
if sqlFetch(cx, dst.2) then
call err '2 or more rows for' src
c1 = m.sql.cx.col.1
res = m.dst.c1
call sqlClose cx
call sqlFreeCursor cx
return res
endProcedure sql2One
/*--- prepare statement 's'cx from sql src into descriptor desc ------*/
sqlPrepare: procedure expose m.
parse arg cx, src, ggRetOk, descOut
s = ''
src = inp2str(src, '%+Q\s')
m.sql.cx.d.sqlD = 'noSqlDA'
m.sql.cx.i.sqlD = 'noDescInp'
m.sql.cx.fetchVars = ''
m.sql.cx.col.0 = ''
m.sql.cx.into = ''
if descOut == 1 then
s = 'into :M.SQL.'cx'.D'
return sqlExec('prepare s'cx s 'from :src', ggRetOk)
endProcedure sqlPrepare
/*--- open cursor 'c'cx using arguments arg(2), arg(3)... ------------*/
sqlOpen: procedure expose m.
parse arg cx
if arg() <= 1 then
return sqlExec('open c'cx)
call sqlDescribeInput cx
do ix=1 to arg()-1
call sqlDASet cx , 'I', ix, arg(ix+1)
end
return sqlExec('open c'cx 'using descriptor :M.SQL.'cx'.I')
endProcedure sqlOpen
/*--- describe output (if not already done)
and return size of sqlDa ------------------------------------*/
sqlDescribeOutput: procedure expose m.
parse arg cx, force
if force == 1 | \ datatype(m.sql.cx.d.sqlD, 'n') then
call sqlExec 'describe s'cx 'into :M.SQL.'cx'.D', 0
return m.sql.cx.d.sqlD
endProcedure sqlDescribeOutput
/*--- describe input (if not already done)
and return size of input sqlDA ------------------------------*/
sqlDescribeInput: procedure expose m.
parse arg cx, force
if force == 1 | \ datatype(m.sql.cx.i.sqlD, 'n') then
call sqlExec 'describe input s'cx 'into :M.SQL.'cx'.I'
return m.sql.cx.i.sqlD
endProcedure sqlDescribeInput
/*--- put sqlNull in all vars where indicator says so ---------------*/
sqlSetNull: procedure expose m.
parse arg cx, dst
do nx=1 to m.sql.cx.sqlNull.0
col = m.sql.cx.sqlNull.nx
if m.dst.col.sqlInd < 0 then
m.dst.col = m.sqlNull
end
return
endProcedure sqlSetNull
/*--- use describe output to generate column names,
fetchVariables and sqlNull names ---------------------*/
sqlRxFetchVars: procedure expose m.
parse arg cx
if m.sql.cx.fetchVars \== '' then
return m.sql.cx.fetchVars
call sqlDescribeOutput cx
f = m.sql.cx.type
if f \== '' then do
f = f'.FLDS'
if m.f.0 < m.sql.cx.d.sqlD then
call err 'not enough column names'
end
m.sql.cx.col.0 = m.sql.cx.d.sqlD
nx = 0
vars = ''
do kx=1 to m.sql.cx.d.sqlD
cn = sqlVarName(f, kx, m.sql.cx.d.kx.sqlName)
m.sql.cx.col.kx = cn
vars = vars', :m.dst.'cn
if m.sql.cx.d.kx.sqlType // 2 = 1 then do
vars = vars' :m.dst.'cn'.sqlInd'
nx = nx + 1
m.sql.cx.sqlNull.nx = cn
end
end
m.sql.cx.sqlNull.0 = nx
m.sql.cx.fetchVars = substr(vars, 3)
return m.sql.cx.fetchVars
endProcedure sqlRxFetchVars
sqlVarName: procedure expose m. sqlVarName.
parse arg f, kx, sNa
if f == '' then do
cn = translate(word(sNa, 1))
if cn == '' | symbol('sqlVarName.cn') == 'VAR' then
cn = 'COL'kx
sqlVarName.cn = 1
return cn
end
else do
if m.f.kx == '' then
call err 'implement empty varName'
return substr(m.f.kx, 2)
end
endProcedure sqlVarName
/*--- set one value in a DA, handle nulls ----------------------------*/
sqlDASet: procedure expose m.
parse arg cx, da, ix, val
m.sql.cx.da.ix.sqlData = val
m.sql.cx.da.ix.sqlInd = - (val == m.sqlNull)
/* data types schienen einmal nicht zu funktionieren .......
if wordPos(m.da.ix.sqlType, '384 385 388 389 392 393') > 0 then
m.da.ix.sqlType = 448 + (m.da.ix.sqlType // 2) */
return
endProcedure sqlDASet
sqlExImm:
parse arg ggSrc, ggRetOk
return sqlExec('execute immediate :ggSrc', ggRetOk)
endProcedure sqlExImm
sqlCommit: procedure expose m.
parse arg src
return sqlExec('commit')
endProcedure sqlCommit
/*--- execute sql thru the dsnRexx interface -------------------------*/
sqlExec: /* no procedure, to keep variables sql... */
parse arg ggSqlStmt, ggRetOk
address dsnRexx 'execSql' ggSqlStmt
/* say 'sqlCode' sqlCode 'rc' rc 'for' ggSqlStmt ggNo */
sqlHandleRCSqlCode:
if rc = 0 then
return 0
if ggRetOk = '' then
ggRetOk = m.sqlRetOk
if wordPos(rc, '1 -1') < 0 then
call err 'dsnRexx rc' rc sqlmsg()
else if pos('*', ggRetOk) > 0 | wordPos(sqlCode, ggRetOk) > 0 ,
then do
if sqlCode < 0 & pos('say', ggRetOk) > 0 then
say 'sqlError' sqlmsg()
return sqlCode
end
else if rc < 0 then
call err sqlmsg()
/*???lse if sqlCode <> 0 | (pos('w',ggRetOk)<1 & sqlWarn.0^==' ') then*/
else if (sqlCode <> 0 | sqlWarn.0^==' ') & pos('w',ggRetOk)<1 then
call errSay sqlMsg(), ,'w'
return sqlCode
endSubroutine sqlExec
/*--- connect to the db2 subsystem sys -----------------------------*/
sqlRxConnect: procedure expose m.
parse upper arg sys, ggRetOk
call sqlIni
address tso "SUBCOM DSNREXX"
if rc <> 0 then do
sRc = RXSUBCOM('ADD','DSNREXX','DSNREXX') /* ADD HOST CMD ENV */
if sRc <> 0 then
call err 'rc' sRc 'from RXSUBCOM(ADD, DSNREXX, DSNREXX)'
end
if sys = '-' then
return 0
ggSqlStmt = 'connect' sys
address dsnRexx ggSqlStmt
return sqlHandleRcSqlCode()
endProcedure sqlRxConnect
/*--- diconnect from db2 ---------------------------------------------*/
sqlRxDisconnect: procedure expose m.
parse arg retOk
ggSqlStmt = 'disconnect'
address dsnRexx ggSqlStmt
return sqlHandleRcSqlCode()
endProcedure sqlDisconnect
/*--- send a command to db2 through the TSO dsn processor ------------*/
sqlDsn: procedure expose m.
parse arg st, sys, cmd, rcOk
x = outtrap('M.'st'.')
push 'END'
push cmd
address tso 'DSN SYSTEM('sys')'
rr = rc
x = outtrap(off)
if rr = 0 | rcOk = '*' | wordPos(rr, rcOk) > 0 then
return rr
fl = max(1, m.st.0 - 10)
em = 'rc' rr 'for DSN SYSTEM('sys') cmd' cmd,
'\nOuputlines' fl '-' m.st.0':'
do lx=fl to m.st.0
em = em '\n' strip(m.st.lx, 't')
end
call err em
endProcedure sqlDsn
/*--- push and pop currently accepted sqlCodes -----------------------*/
sqlPushRetOk: procedure expose m.
parse arg rr
nx = m.sqlRetOk.0 + 1
m.sqlRetOk.0 = nx
m.sqlRetOk.nx = rr
m.sqlRetOk = rr
return
endProcedure sqlPushRetOk
sqlPopRetOk: procedure expose m.
nx = m.sqlRetOk.0 - 1
if nx < 1 then
call err 'sqlPopRetOk with .0' m.sqlRetOk.0
m.sqlRetOk = m.sqlRetOk.nx
m.sqlRetOk.0 = nx
return
endProcedure sqlPopRetOk
/*--- issue an sql error message -------------------------------------*/
sqlMsg: /* no procedure, to keep variables sql... */
if \ dataType(sqlCode, 'n') then do
ggRes = 'sqlCode' sqlCode 'not numeric\n'sqlCaMsg()
end
else do
ggRes = sqlDsntiar(sqlRx2CA())
ggWa = sqlMsgWarn()
if ggWa \= '' then
ggRes = ggRes'\nwarnings' ggWa
if m.sqlCAMsg == 1 then
ggRes = ggRes'\n'sqlCaMsg()'\n'sqlCaMsg(sqlCa2Rx(sqlCa))
end
ggSt = 'SQL.HOST'
ggVa = 'SQL.HOST.VAR'
ggBe = 'SQL.HOST.BEF'
call sqlHostVars ggSqlStmt, 12, ggSt
if datatype(sqlErrd.5, 'n') & sqlErrd.5 > 0 then do
ggW1 = translate(word(ggSqlStmt, 1))
ggW2 = translate(word(ggSqlStmt, 2))
if ggW1 == 'PREPARE' then
ggVV = sqlHostVarFind(ggSt, 'FROM')
else if ggW1 ggW2 == 'EXECUTE IMMEDIATE' then
ggVV = sqlHostVarFind(ggSt, 1)
else
ggVV = ''
if ggVV == '' then
ggRes = ggRes || sqlMsgSrcPos(ggSqlStmt, sqlErrd.5)
else
ggRes = ggRes || sqlMsgSrcPos(value(ggVV), sqlErrd.5)
end
ggRes = ggRes'\nstmt =' ggSqlStmt
ggPref = '\nwith'
do ggXX=1 to m.ggSt.0
ggRes = ggRes || ggPref m.ggBe.ggXX ':'m.ggVa.ggXX ,
'=' value(m.ggVa.ggXX)
ggPref = '\n '
end
if m.sqlSuMsg == 1 | (m.sqlSuMsg == 2 & m.sql.conHost \== '') then
ggRes = ggRes'\nsubsys =' ,
if(m.sql.conHost=='',,m.sql.conHost'/'),
|| m.sql.conSSID', interfaceType' m.sql.conType
return ggRes
endSubroutine sqlMsg
/*--- use dsnTiar to translate sql Info to error text ----------------*/
sqlDsnTiar: procedure expose m.
parse arg ca
if -438 = sqlCa2Rx(ca) then
return '\nSQLCODE = -438:',
'APPLICATION RAISED ERROR WITH sqlState' sqlState ,
'and DIAGNOSTIC TEXT:' sqlErrMc
liLe = 78
msLe = liLe * 10
msg = d2c(msLe,2) || left('', msLe)
len = d2c(liLe, 4)
ADDRESS LINKPGM "DSNTIAR ca msg len"
if rc <> 0 then
call err 'linkPgm dsnTiar rc' rc 'sqlCa' ca
res = strip(substr(msg, 13, liLe-10))
cx = pos(', ERROR: ', res)
if cx > 0 then
res = left(res, cx-1)':' strip(substr(res, cx+9))
do c=3+liLe by liLe to msLe while substr(msg, c, 10) = ''
res = res'\n 'strip(substr(msg, c+10, liLe-10))
end
return res
endProcedure sqlDsnTiar
/*--- format all rexx sqlCa fields into a message --------------------*/
sqlCaMsg:
return 'sqlCode' sqlCode 'sqlState='sqlState ,
'\n errMC='translate(sqlErrMc, ',', 'ff'x) ,
'\n warnings='sqlWarnCat('+') 'erP='sqlErrP ,
'\n errD.1='sqlErrD.1 '2='sqlErrD.2 '3='sqlErrD.3 ,
'\n errD.4='sqlErrD.4 '5='sqlErrD.5 '6='sqlErrD.6
endProcedure sqlCaMsg
/*--- format the sqlCA into the dsnTiar SQLCA ------------------------*/
sqlRx2Ca:
if \ (datatype(sqlcode, 'n') & datatype(sqlErrD.1, 'n') ,
& datatype(sqlErrD.3, 'n')) then
return err('sqlCode etc. not numeric\nsqlCa =' sqlCaMsg())
if digits() < 10 then
numeric digits 10
sqlCa = 'SQLCA ' || d2c(136, 4) || d2c(sqlCode, 4) ,
|| d2c(min(70, length(sqlErrMc)), 2)left(sqlErrMc, 70) ,
|| left(sqlErrP, 8) ,
|| d2c(sqlErrD.1, 4)d2c(sqlErrD.2, 4)d2c(sqlErrD.3, 4) ,
|| d2c(sqlErrD.4, 4)d2c(sqlErrD.5, 4)d2c(sqlErrD.6, 4) ,
|| sqlWarnCat() || sqlState
if length(sqlCa) <> 136 then
call err 'sqlCa length' length(sqlCa) 'not 136' ,
'\n'sqlCaMsg() '==>' ca', hex='c2x(ca)
return sqlCa
endProcedure sqlRx2Ca
/*--- extract the fields from the SqlCA and put it to rexx vars ------*/
sqlCA2Rx: procedure expose m. ,
sqlCode sqlErrMc sqlErrP sqlErrD. sqlWarn. sqlState
parse arg ca
numeric digits 10
if length(ca) < 136 | c2d(substr(ca, 9, 4), 4) <> 136 then
call err 'bad sqlCa len' length(ca) 'not 136:' ca', hex='c2x(ca)
sqlCode = c2d(substr(ca, 13 ,4), 4)
sqlErrMC = substr(ca, 19, c2d(substr(ca, 17, 2), 2))
sqlErrP = substr(ca, 89, 8)
do ix=1 to 6
sqlErrD.ix = c2d(substr(ca, 93 + 4 * ix, 4), 4)
end
do ix=0 to 10
sqlWarn.ix = substr(ca, 121 + ix, 1)
end
sqlState = substr(ca, 132, 5)
return sqlCode
endProcedure sqlCA2Rx
/*--- concat the sql warnings with Separator sep --------------------*/
sqlWarnCat: procedure expose m. sqlWarn.
parse arg sep
return sqlWarn.0 || sep,
|| sqlWarn.1||sqlWarn.2||sqlWarn.3||sqlWarn.4||sqlWarn.5||sep ,
|| sqlWarn.6||sqlWarn.7||sqlWarn.8||sqlWarn.9||sqlWarn.10||sep
endProcedure sqlWarnCat
/*--- make the text for sqlWarnings ----------------------------------*/
sqlMsgWarn: procedure expose m. sqlWarn.
r = ''
text =' 1=W var truncated, 1=S scrollable, 1=N nonScrollable,' ,
'2=W nulls in aggregate,' ,
'3=W more cols than vars,' ,
'3=Z more result sets than locators,' ,
'4=W no where, 4=D sensitive dynamic, 4=I insensitive,' ,
'4=S sensitive static,' ,
'5=W not valid sql, 5=1 readOnly, 5=2 readDelete,' ,
'5=3 readDeleteUpdate,' ,
'6=W day changed to month range,' ,
'7=W dec digits truncated,' ,
'8=W char substituted,' ,
'9=W arith excep in count, 9=Z multipe result sets,' ,
'10=W char conversion err in ca,'
do wx = 1 to 10
w = sqlWarn.wx
if w = ' ' then
iterate
t = wx'='w
cx = pos(' 'wx'='w' ', text)
ex = pos(',' , text, cx + 1)
if cx > 0 & ex > cx then
r = r substr(text, cx+1, ex-cx)
else
r = r wx'='w '?,'
end
r = strip(r, 't', ',')
if r = '' & sqlwarn.0 <> '' then
call err 'sqlWarn.0='sqlWarn.0 'but all warns empty'
return r
endProcedure sqlMsgWarn
/*--- show in the source src the point pos (where error occured)
a few lines from src around pos and arrow to pos ----------*/
sqlMsgSrcPos: procedure expose m.
parse arg src, pos
liLe = 68
liCn = 3
afLe = 25
t1 = space(left(src, pos), 1)
t2 = left(' ', substr(src, pos, 1) == ' ' ,
| substr(src, pos+1, 1) == ' ') ,
|| space(substr(src, pos+1), 1)
afLe = min(afLe, length(t2))
if length(t1) + afLe > liLe * liCn then
t1 = '...'right(t1, liLe * liCn - afLe -3)
else if length(t1)+length(t2) > liLe then
t1 = left(' ', (liCn * liLe - length(t1) -afLe) // liLe)||t1
pL = length(t1) // liLe
if length(t2) <= liLe-pL then
tx = t1 || t2
else
tx = t1 || left(t2, liLe-pL-3)'...'
res = '\nsrc' strip(substr(tx, 1, liLe), 't')
do cx=1+liLe by liLe to length(tx)
res = res || '\n +' strip(substr(tx, cx, liLe), 't')
end
loc = 'pos' pos 'of' length(src)
if length(loc)+6 < pL then
return res'\n >' right('>>>'loc'>>>', pL)
else
return res'\n >' left('', pL-1)'<<<'loc'<<<'
endProcdedure sqlMsgSrcPos
/*--- get the hostVars in the sql in src and the word before ---------*/
sqlHostVars: procedure expose m.
parse arg src, cnt, st
cx = 1
sx = 0
do cnt
cx = pos(':', src, cx) + 1
if cx < 2 then
leave
if pos(substr(src, cx, 1), m.mAlfRex1) < 1 then
iterate
ex = verify(src, m.mAlfRexR, 'n', cx)
if ex - cx > 100 then
iterate
sx = sx + 1
if ex < 1 then
m.st.var.sx = substr(src, cx)
else
m.st.var.sx = substr(src, cx, ex - cx)
/* search word before */
do bE = cx-2 by -1 to 1 ,
while substr(src, bE, 1) == ' '
end
do bB = bE by -1 to max(1, bE-20),
while pos(substr(src, bB, 1), m.mAlfa) > 0
end
if bB < bE & bB >= 0 then
m.st.bef.sx = substr(src, bB+1, bE-bB)
else
m.st.bef.sx = ''
end
m.st.0 = sx
return sx
endProcedure sqlHostVars
/*--- find the name of hostvar, by index or by before ----------------*/
sqlHostVarFind: procedure expose m.
parse arg st, fnd
if datatype(fnd, 'n') & fnd <= m.st.0 then
return m.st.var.fnd
do ix=1 to m.st.0
if translate(m.st.bef.ix) = fnd then
return m.st.var.ix
end
return ''
endSubroutine sqlHostVarFind
/* copy sql end **************************************************/
/* copy j begin *******************************************************
the j framework
jReset
jOpen
jClose
jRead
jWrite
***********************************************************************/
jRead: procedure expose m.
parse arg m, var
call objMetClaM m, 'jRead'
if m.m.jReading then
interpret ggCode
else
return err('jRead('m',' var') but not opened r')
endProcedure jRead
jReadO: procedure expose m.
parse arg m
if arg() > 1 then call err '??? old interface'
call objMetClaM m, 'jReadO'
if m.m.jReading then
interpret ggCode
else
return err('jReadO('m',' var') but not opened r')
endProcedure jReadO
jWrite: procedure expose m.
parse arg m, line
call objMetClaM m, 'jWrite'
if \ m.m.jWriting then
return err('jWrite('m',' line') but not opened w')
interpret ggCode
return
endProcedure jWrite
jWriteO: procedure expose m.
parse arg m, var
call objMetClaM m, 'jWriteO'
if \ m.m.jWriting then
return err('jWriteO('m',' var') but not opened w')
interpret ggCode
return
endProcedure jWriteO
jWriteAll: procedure expose m.
parse arg m, rdr
rdr = o2file(rdr)
call objMetClaM m, 'jWriteAll'
if \ m.m.jWriting then
return err('jWriteAll('m',' rdr') but not opened w')
interpret ggCode
return
endProcedure jWriteAll
jWriteNow: procedure expose m.
parse arg m, rdr
rdr = o2file(rdr)
interpret objMet(m, 'jWriteNow')
return
endProcedure jWriteNow
jCat: procedure expose m.
parse arg opt m
if m = '' then do
m = opt
opt = m.j.cWri
end
call jOpen m, opt
do ax=2 to arg()
call jWriteAll m, arg(ax)
end
call jClose m
return m
endProcedure jCat
jWriteNowImpl: procedure expose m.
parse arg m, rdr
call jOpen rdr, m.j.cRead
do while jRead(rdr, line)
call jWrite m, m.line
end
call jClose rdr
return
endProcedure jWriteNow
jWriteNowImplO: procedure expose m.
parse arg m, rdr
call jOpen rdr, m.j.cRead
do while assNN('li', jReadO(rdr))
call jWriteO m, li
end
call jClose rdr
return
endProcedure jWriteNow
/*--- reset JRW: fail if open, initialise ---------------------------*/
jReset: procedure expose m.
parse arg m, arg, arg2, arg3
if m.m.jReading == 1 | m.m.jWriting == 1 then
return err('still open jReset('m',' arg2')') / 3
m.m.jReading = 0
m.m.jWriting = 0
m.m.jUsers = 0
interpret objMet(m, 'jReset')
return m
endProcedure jReset
jOpen: procedure expose m.
parse arg m, opt
call objMetClaM m, 'jOpen'
oUsers = m.m.jUsers
if opt = m.j.cRead then do
if m.m.jReading then
nop
else if m.m.jWriting then
return err('already opened for writing jOpen('m',' opt')')
else do
interpret ggCode
m.m.jReading = 1
end
end
else if \ abbrev('>>', opt, 1) then do
return err('bad option' opt 'in jOpen('m',' opt')')
end
else do
if m.m.jWriting then
nop
else if m.m.jReading then
return err('already opened for reading jOpen('m',' opt')')
else do
interpret ggCode
m.m.jWriting = 1
end
end
m.m.jUsers = oUsers + 1
return m
endProcedure jOpen
jClose: procedure expose m.
parse arg m
call objMetClaM m, 'jClose'
oUsers = m.m.jUsers
if oUsers = 1 then do
interpret ggCode
m.m.jReading = 0
m.m.jWriting = 0
end
else if oUsers < 1 then
call err 'jClose' m 'but already closed'
m.m.jUsers = oUsers - 1
return m
endProcedure jClose
/*--- cat the lines of the file together, with mid between lines,
fail if not all lines are strings -------------------*/
jCatLines: procedure expose m.
parse arg m, fmt
if abbrev(fmt, '-sql') then
return jCatSql(m, substr(fmt, 5))
if fmt == '' then
fmt = '%+Q\s'
call jOpen m, m.j.cRead
if \ jRead(m, line) then do
call jClose m
return ''
end
res = f(fmt, m.line)
do while jRead(m, line)
res = res || f(fmt'%-Qnxt', m.line)
end
call jClose m
fEnd = 'F.FORMAT.'fmt'%-Qend'
return res || m.fEnd
endProcedure jCatLines
/*--- cat the line of a file, using comments
fixline (with token wrapping) or separate lines -------*/
jCatSql: procedure expose m.
parse arg m, fLen
call jCatSqlReset m'.JCATSQL', , jOpen(m, '<'), fLen
res = jCatSqlNext(m'.JCATSQL')
call jClose m
return res
endProcedure jCatSql
jCatSqlReset: procedure expose m.
parse arg m, aSrc, m.m.rdr, m.m.fLen
call jCatSqlNL m, aSrc
return m
endProcedure jCatSqlReset
jCatSqlNL: procedure expose m.
parse arg m
if m.m.rdr \== '' then
if jRead(m.m.rdr, m'.SRC') then do
if m.m.fLen \== '' then
m.m.src = left(m.m.src, m.m.fLen)
else if substr(m.m.src, length(m.m.src), 1) \== ' ' then
m.m.src = m.m.src' '
m.m.pos = 1
return 1
end
m.m.pos = length(m.m.src)+1
return 0
endProcedure jCatSqlNl
jCatSqlNext: procedure expose m.
parse arg m, stop
res = ''
st = ''
bx = m.m.pos
do forever
call sbUntil m, '"''-/'stop
if sbEnd(m) then do
res = res || substr(m.m.src, bx)
bx = 0
end
else if substr(m.m.src, m.m.pos, 2) = '--' then do
res = res || substr(m.m.src, bx, m.m.pos-bx)' '
bx = 0
end
else if substr(m.m.src, m.m.pos, 2) = '/*' then do
res = res || substr(m.m.src, bx, m.m.pos-bx)' '
do forever
px = pos('*/', m.m.src, m.m.pos)
if px > 0 then
leave
if \ jCatSqlNL(m) then
return res
end
bx = px+2
m.m.pos = bx
end
else if sbLit(m, ''' "') then do
c1 = sbPrev(m)
do while \ sbStrEnd(m, c1)
res = res || substr(m.m.src, bx)
if m.m.fLen \== '' then
if jCatSqlNl(m) then do
bx = m.m.pos
iterate
end
call err 'unclosed' c1 'string:' m.m.src
end
end
else if pos(substr(m.m.src, m.m.pos, 1), stop) > 0 then do
res = strip(res||substr(m.m.src, bx, m.m.pos-bx), 't')
call sbChar m, 1
if res <> '' then
return res
bx = m.m.pos
end
if bx = 0 then
if jCatSqlNl(m) then
bx = m.m.pos
else
return res
end
endProcedure jCatSqlNext
jIni: procedure expose m.
if m.j.ini == 1 then
return
m.j.ini = 1
m.j.cRead = '<'
m.j.cWri = '>'
m.j.cApp = '>>'
call oIni
am = "call err 'call of abstract method"
call classNew 'n JRW u ORun, f JREADING v, f JWRITING v', 'm',
, "new call jReset m, arg, arg2, arg3",
, "jRead" am "jRead('m',' var')'" ,
, "jReadO if \ jRead(m, 'J.GGVAR') then return '';",
"return s2o(m.j.ggVar)" ,
, "jWrite" am "jWrite('m',' line')'" ,
, "jWriteO call jWrite(m, o2string(var))" ,
, "jWriteAll call jWriteNowImpl m, rdr",
, "jWriteNow call jWriteNowImpl m, rdr",
, "jReset",
, "jOpen" am" jOpen('m',' opt')'" ,
, "jClose" ,
, "oRun call pipeWriteAll m",
, "o2String return jCatLines(m, fmt)",
, "o2File return m"
call classNew 'n JRWO u JRW', 'm',
, "jRead res = jReadO(m); if res == '' then return 0;" ,
"m.var = o2string(res); return 1" ,
, "jReadO" am "jReadO('m')'" ,
, "jWrite call jWriteO(m, s2o(var))" ,
, "jWriteO" am "jWriteO('m',' line')'",
, "jWriteAll call jWriteNowImplO m, rdr",
, "jWriteNow call jWriteNowImplO m, rdr",
am = "call err 'call errObject"
call classNew 'n JRWErr u JRW', 'm',
, "jWriteAll" er "jWriteAll 'm', rdr'",
, "jWriteNow" er "jWriteNow 'm', 'rdr'",
, "jClose" er "jClose 'm'"
call classNew 'n JSay u JRW', 'm',
, "jWrite say line" ,
, "jWriteO call classOut , var, 'outO: '",
, "jOpen if \ abbrev(opt, m.j.cWri) then",
"call err 'can only write JSay.jOpen('m',' opt')';" ,
"else m.m.jWriting = 1"
call classNew 'n JStem u JSay', 'm',
, "jReset m.m.stem = arg;",
"if \ dataType(m.arg.0, 'n') then m.arg.0 = 0" ,
, "jWrite call mAdd m.m.stem, line"
call classNew 'n JRWEof u JRW', 'm',
, "jRead drop m.var; return 0",
, "jOpen if pos('>', opt) > 0 then",
"call err 'can only read JRWEof.jOpen('m',' opt')';" ,
"else m.m.jReading = 1"
m.j.in = jOpen(oNew('JRWEof'), m.j.cRead)
call outDst
call classNew "n JBuf u JRWO, f BUF s r", "m",
, "jOpen call jBufOpen m, opt",
, "jReset call jBufReset m, arg",
, "jRead return jBufRead(m, var)",
, "jReadO return jBufReadO(m)",
, "jWrite call jBufWrite m, line",
, "jWriteO call jBufWriteO m, var"
call classNew "n JBufTxt u JBuf, f MAXL v ", "m",
, "jReset call jBufReset m, arg; m.m.maxl = 80",
, "jWriteO call jBufWrite m, o2Text(var, m.m.maxl)"
return
endProcedure jIni
/*--- out interface of j --------------------------------------------*/
outIni: procedure expose m.
call jIni
return
endProcedure outIni
outDst: procedure expose m.
parse arg wrt
oldOut = m.j.out
if wrt == '' then
wrt = jOpen(oNew('JSay'), '>')
m.j.out = wrt
return oldOut
endProcedure outDst
/*--- return a JRW from rdr or in ------------------------------------*/
j2Rdr: procedure expose m.
parse arg rdr
if oStrOrObj(rdr, m.j.in) then
return jBuf(ggStr)
else
return o2file(ggObj)
endProcedure j2Rdr
/* jstr is part of out interface --> inp2str */
inp2str: procedure expose m.
parse arg rdr, fmt
if oStrOrObj(rdr, m.j.in) then
return ggStr
else
return o2String(ggObj, fmt)
endProcedure inp2str
j2Buf: procedure expose m.
parse arg rdr
if oStrOrObj(rdr, m.j.in) then
return jBuf(ggStr)
if classInheritsOf(ggCla, class4Name('JBuf')) ,
& m.ggObj.jUsers < 1 then
return ggObj
b = jOpen(jBuf(), m.j.cWri)
call jWriteNow b, o2File(ggObj)
return jClose(b)
endProcedure j2Buf
in: procedure expose m.
parse arg arg
return jRead(m.j.in, arg)
endProcedure in
inO: procedure expose m.
if arg() > 0 then call err '??? old interface'
return jReadO(m.j.in)
endProcedure in
out: procedure expose m.
parse arg line
call jWrite m.j.out, line
return 0
endProcedure out
outO: procedure expose m.
parse arg arg
call jWriteO m.j.out, arg
return
endProcedure outO
/*--- jBuf: buffer read or write (supports datataypes) ---------------*/
jBuf: procedure expose m.
m = oNew('JBuf') /* calls jBufReset */
do ax=1 to arg()
m.m.buf.ax = arg(ax)
end
m.m.buf.0 = ax-1
m.m.allV = 1
return m
endProcedure jBuf
/*--- jBuf: buffer read or write (supports datataypes) ---------------*/
jBufTxt: procedure expose m.
m = oNew('JBufTxt') /* calls jBufReset */
do ax=1 to arg()
m.m.buf.ax = arg(ax)
end
m.m.buf.0 = ax-1
m.m.allV = 1
return m
endProcedure jBufTxt
jBufReset: procedure expose m.
parse arg m
m.m.stem = m'.BUF'
do ax=1 to arg() - 1
m.m.buf.ax = arg(ax+1)
end
m.m.buf.0 = ax-1
m.m.allV = 1
return m
endProcedure jBufReset
jBufOpen: procedure expose m.
parse arg m, opt
if opt == m.j.cRead then do
m.m.readIx = 0
m.m.jReading = 1
return m
end
if opt == m.j.cWri then do
m.m.buf.0 = 0
m.m.allV = 1
end
else if opt \== m.j.cApp then
call err 'jBufOpen('m',' opt') with bad opt'
m.m.jWriting = 1
return m
endProcedure jBufOpen
jBufWrite: procedure expose m.
parse arg m, line
if m.m.allV then
call mAdd m'.BUF', line
else
call mAdd m'.BUF', s2o(line)
return
endProcedure jBufWrite
jBufWriteStem: procedure expose m.
parse arg m, st
ax = m.m.buf.0
if m.m.allV then do
do sx=1 to m.st.0
ax = ax + 1
m.m.buf.ax = m.st.sx
end
end
else do
do sx=1 to m.st.0
ax = ax + 1
m.m.buf.ax = o2String(m.st.sx)
end
end
m.m.buf.0 = ax
return m
endProcedure jBufWrite
jBufWriteO: procedure expose m.
parse arg m, ref
if m.m.allV then do
cl = objClass(ref)
if cl = m.class.classV then do
call mAdd m'.BUF', m.ref
return
end
if cl == m.class.classW then do
call mAdd m'.BUF', substr(ref, 2)
return
end
m.m.allV = 0
do ax=1 to m.m.buf.0
m.m.buf.ax = s2o(m.m.buf.ax)
end
end
call mAdd m'.BUF', ref
return
endProcedure jBufWriteO
jBufReadO: procedure expose m.
parse arg m
nx = m.m.readIx + 1
if nx > m.m.buf.0 then
return ''
m.m.readIx = nx
if m.m.allV then
return s2o(m.m.buf.nx)
else
return m.m.buf.nx
endProcedure jBufReadO
jBufRead: procedure expose m.
parse arg m, var
nx = m.m.readIx + 1
if nx > m.m.buf.0 then
return 0
m.m.readIx = nx
if m.m.allV then
m.var = m.m.buf.nx
else
m.var = o2String(m'.BUF.'nx)
return 1
endProcedure jBufRead
jBufTxtWriteO: procedure expose m.
parse arg m, ref
if m.m.allV \== 1 then
call err '1 \== allV' m.m.allV 'in jBufTxtWriteO('m',' ref')'
cl = objClass(ref, '?')
if cl = m.class.classV then
call mAdd m'.BUF', m.ref
else if cl == m.class.classW then
call mAdd m'.BUF', substr(ref, 2)
else if ref == '' then
call mAdd m'.BUF', '@ null object'
else if cl == '?' then
call mAdd m'.BUF', '@'ref 'class=???'
else do
l = '@'ref 'class='className(cl)
ff = cl'.FLDS'
do fx=1 to m.ff.0 while length(l) < m.m.maxl + 3
if m.ff.fx == '' then
l = l', .='m.ref
else do
f1 = substr(m.ff.fx, 2)
l = l',' f1'='m.ref.f1
end
end
if length(l) > m.m.maxl then
l = left(l, m.m.maxl-3)'...'
call mAdd m'.BUF', l
end
return
endProcedure jBufTxtWriteO
/* copy j end *********************************************************/
/* copy o begin ******************************************************
an object has a class which describes fields and methods
an object has fields (e.g. m.o.fld1)
an object may call it's methods (dynamic binding)
***********************************************************************/
oIni: procedure expose m.
if m.o.ini = 1 then
return
m.o.ini = 1
call classIni
call oAdd1Method m.class.classV, 'o2String return m.m'
m.class.escW = '!'
call oAdd1Method m.class.classW, 'o2String return substr(m, 2)'
or = classNew('n ORun u',
, 'm oRun call err "call of abstract method oRun"',
, 'm o2File return oRun2File(m)',
, 'm o2String return jCatLines(oRun2File(m), fmt)')
/* oRunner does not work yet ||||| */
rc = classNew('n* ORun u ORun, m oRun call oClassAdded arg(2)')
call oAddMethod rc'.OMET', rc
call classAddedRegister oMutate(mNew(), rc)
return
endProcedure oIni
/*--- when notified about a new class cl, build the redundancies ----*/
oClassAdded: procedure expose m.
parse arg cl
m.class.o2c.cl = m.class.class
call oAddMethod cl'.OMET', cl
new = "m.class.o2c.m =" cl
if m.cl.flds.0 > 0 | m.cl.stms.0 > 0 then
new = new"; call oClear m, '"cl"'"
new = new";" classMet(cl, 'new', '')
if cl == m.class.class then
call mAlias 'CLASS', cl
else /* object adresses */
call mNewArea cl, 'O.'substr(cl,7), new
if m.cl \== 'u' | m.cl.name == '' then
return
call mAlias cl, m.cl.name
new = 'new'
m.cl.oMet.new = ''
co = '' /* build code for copy */
do fx=1 to m.cl.flds.0
nm = m.cl.flds.fx
if translate(nm) == nm & \ abbrev(nm, 'GG') ,
& pos('.M.', nm'.') < 1 & pos('.T.', nm'.') < 1 then
co = co'm.t'nm '= m.m'nm';'
else
co = co 'f='quote(substr(nm, 2))';m.t.f = m.m.f;'
end
do fx=1 to m.cl.stms.0
nm = m.cl.stms.fx
sc = m.cl.stms.fx.class
if nm == ''then
co = co "m.t.0=m.m.0;" ,
"do sx=1 to m.m.0;" ,
"call oClaCopy '"sc"',m'.'sx, t'.'sx; end;"
else
co = co "st='"substr(nm, 2)"';m.t.st.0=m.m.st.0;",
"do sx=1 to m.m.st.0;",
"call oClaCopy '"sc"',m'.'st'.'sx, t'.'st'.'sx; end;"
end
p = cl'.OMET.oCopy'
if symbol('m.p') \== VAR then
m.p = co
return
endProcedure oClassAdded
/*--- add the methods of class cl to the methodtable mt -------------*/
oAddMethod: procedure expose m.
parse arg mt, cl
if pos(m.cl, 'frsv') > 0 then
return
if m.cl = 'm' then do
nm = m.cl.name
m.mt.nm = m.cl.met
return
end
/* if m.cl.class \== '' then
call oAddMethod mt, m.cl.class
*/ do x=1 to m.cl.0
call oAddMethod mt, m.cl.x
end
return
endProcedure oAddMethod
/* add 1 method to a completed class and its subclasses -------------*/
oAdd1Method: procedure expose m.
parse arg clNm, met code
cl = classAdd1Method(clNm, met code)
m.cl.omet.met = code
call oAdd1MethodSubs cl, met code
return cl
endProcedure oAdd1Method
/* add 1 method code to OMET of all subclasses of cl -------------*/
oAdd1MethodSubs: procedure expose m.
parse arg cl, met code
do sx=1 to m.cl.sub.0
sc = m.cl.sub.sx
if pos(m.sc, 'nvw') > 0 then do
do mx=1 to m.sc.0
ms = m.sc.mx
if m.ms == 'm' & m.ms.name == met then
call err 'method' med 'already in' sc
end
m.sc.omet.met = code
end
call oAdd1MethodSubs sc, met code
end
return cl
endProcedure oAdd1MethodSubs
/*--- create an an object of the class className
mutate it to class but DO NOT call it's new method ----------*/
oBasicNew: procedure expose m.
parse arg cl
return oMutate(mBasicNew(cl), cl)
/*--- create an an object of the class className
and call it's new method ------------------------------------*/
oNew: procedure expose m.
signal labelMNew /* work is done there | ???? remove */
/*--- return the class of object obj --------------------------------*/
objClass: procedure expose m.
parse arg obj
if symbol('m.class.o2c.obj') == 'VAR' then
return m.class.o2c.obj
if abbrev(obj, m.class.escW) then
return m.class.classW
if abbrev(obj, 'CLASS.CAST.') then
return substr(obj, 12, pos(':', obj, 12)-12)
if arg() >= 2 then
return arg(2)
return err('objClass no class found for object' obj)
endProcedure objClass
oKindOf: procedure expose m.
parse arg obj, sup
cl = objClass(obj, '')
if cl == '' then
return 0
return classInheritsOf(cl, class4name(sup))
endProcedure oKindOf
classInheritsOf: procedure expose m.
parse arg cl, sup /* wkTst optimierung in classAdded */
if cl == sup then
return 1
do while m.cl \== 'n' & m.cl \== 'u'
if m.cl.class == '' then
return 0
cl = m.cl.class
end
do cx=1 to m.cl.0
d = m.cl.cx
if m.d == 'u' then
if classInheritsOf(d, sup) then
return 1
end
return 0
endProcedure classInheritsOf
classSetMet: procedure expose m.
parse arg na, me, code
if symbol('m.class.n2c.na') \== 'VAR' then
call err 'no class' na 'in classMet('na',' me')'
cl = m.class.n2c.na
if symbol('m.cl.oMet.me') \== 'VAR' then
call err 'no method in classMet('na',' me')'
m.cl.oMet.me = code
return cl
endProcedure classSetMet
/*--- return the code of method me of the class with name na --------*/
classMet: procedure expose m.
parse arg na, me
if symbol('m.class.n2c.na') \== 'VAR' then
call err 'no class' na 'in classMet('na',' me')'
cl = m.class.n2c.na
if symbol('m.cl.oMet.me') == 'VAR' then
return m.cl.oMet.me
if arg() >= 3 then
return arg(3)
call err 'no method in classMet('na',' me')'
endProcedure classMethod
/*--- set m, ggClass, ggCode to the address, class and code
of method me of object m ------------------------------------*/
objMetClaM: procedure expose m. m ggClass ggCode
parse arg m, me
if symbol('m.class.o2c.m') == 'VAR' then
ggClass = m.class.o2c.m
else if abbrev(m, 'CLASS.CAST.') then
parse var m 'CLASS.CAST.' ggClass ':' m
else
return err('no class found for object' m)
if symbol('m.ggClass.oMet.me') == 'VAR' then
ggCode = m.ggClass.oMet.me
else
call err 'no method' me 'in class' className(ggClass),
'of object' m
return
endProcedure objMetClaM
/*--- return the code of method me of object obj --------------------*/
objMet: procedure expose m.
parse arg obj, me
/* handle the easy and frequent case directly */
if symbol('m.class.o2c.obj') == 'VAR' then
c = m.class.o2c.obj
else if abbrev(obj, m.class.escW) then
c = m.class.classW
else do
call objMetClaM obj, me
return 'M="'m'";'ggCode
end
if symbol('m.c.oMet.me') == 'VAR' then
return m.c.oMet.me
return err('no method' me 'in class' className(c) 'of object' obj)
endProcedure objMet
/*--- return the stem of fieldnames of object m ---------------------*/
oFlds: procedure expose m.
parse arg m
return objClass(m)'.FLDS'
endProcedure oFlds
/*--- return the contents of field f navigation along path ----*/
oGet: procedure expose m.
parse arg obj, path, clazz
nullNew = 0
ret = oAccPath(obj, path, clazz)
if ret == 1 then
ret = oAccStr(m, cl)
if ret == 1 then
return str
return err(ret 'in oGet('obj',' path')')
endProcedure oGet
oAccStr: procedure expose m. str
parse arg m, cl
if cl == m.class.classV then
str = m.m
else if m.cl.valueCl == '' then
return 'no value @' m 'class' className(cl)
else if m.m == '' then
return 'null @' m 'class' className(cl)
else if abbrev(m, m.class.escW) then
str = substr(m ,2)
else
str = o2String(m.m)
return 1
endProcedure oAccStr
oGetO: procedure expose m.
parse arg obj, path, opt, clazz
nullNew = pos('n', opt) > 0
ret = oAccPath(obj, path, clazz)
if ret == 1 then
ret = oAccO(m, cl, opt)
if ret == 1 then
return ref
else
return err(ret 'in oGetO('obj',' path')')
endProcedure oGetO
oAccO: procedure expose m. ref
parse arg m, cl, opt
if cl == m.class.classV then do
ref = s2o(m.m)
end
else if m.cl \== 'r' then do
ref = m
end
else if m.m == '' then do
if opt == '-b' then do
m.m = jBuf()
end
else if opt == '-n' then do
rsn = oRefSetNew(m, cl)
if rsn \==1 then
return rsn
end
ref = m.m
end
else if objClass(m.m, 0) \== 0 then do
ref = m.m
end
else do
return 'no class for' m.m '@' m 'class' cl
end
return 1
endProcedure oAccO
oPut: procedure expose m.
parse arg obj, path, str
nullNew = 1
res = oAccPath(obj, path)
if res == 1 then
res = ocPut(m, cl, str)
if res == 1 then
return str
return err(res 'in oPut('obj',' path',' str')')
endProceudre oPut
ocPut: procedure expose m.
parse arg m, cl, str
if m.cl.valueCl == m.class.classV then
m.m = str
else if m.cl.valueCl \== '' then
m.m = s2o(str)
else
return 'no value @' m 'class' className(cl)
return 1
endProcedure ocPut
oPutO: procedure expose m.
parse arg obj, path, ref
nullNew = 1
res = oAccPath(obj, path)
if res == 1 then
res = ocPutO(m, cl, ref)
if res == 1 then
return ref
return err(ret 'in oPut('obj',' path',' ref')')
endProcedure oPutO
ocPutO: procedure expose m.
parse arg m, cl, ref
if m.cl.valueCl == m.class.classV then
m.m = o2string(ref)
else if m.cl.valueCl \== '' then
m.m = ref
else if m.cl.stemCl \== '' then
return 'implement put to stem'
else
return 'no value @' m 'class' className(cl)
return 1
endProcedure ocPutO
oClear: procedure expose m.
parse arg obj, cl
if cl == '' then
cl = objClass(obj)
do fx=1 to m.cl.flds.0
f1 = m.cl.flds.fx
o1 = obj || f1
if f1 == '' then
c1 = cl
else do
c1 = substr(f1, 2)
c1 = m.cl.f2c.c1
end
if c1 == m.class.classW then
m.o1 = m.class.escW
else
m.o1 = ''
end
do sx=1 to m.cl.stms.0
f1 = obj || m.cl.stms.sx
m.f1.0 = 0
end
return obj
endProcedure oClear
oAccPath: procedure expose m. m cl nullNew
parse arg m, pa, cl
if cl == '' & m \== '' then do
cl = objClass(m)
end
if pa == '' then
return 1
if abbrev(pa, m.class.cRef) ,
| (\ m.cl.hasFlds & abbrev(pa, m.class.cNav)) then do
if pa == m.class.cRef & m.cl.valueCl == m.class.classV then do
cl = m.class.classV
return 1
end
if (m.cl.valueCl == '' | m.cl.valueCl == m.class.classV) ,
& m.cl \== 'r' then
return 'no reference @' m 'class' cl
if m.m = '' then do
if \ nullNew then
return 'null @' m 'class' className(cl)
rsn = oRefSetNew(m, cl)
if rsn \== 1 then
return rsn
end
return oAccPath(m.m, substr(pa, 2))
end
if pos(left(pa, 1), m.class.cPath) > 0 then
return oAccPath(m, substr(pa, 2), cl)
px = verify(pa, m.class.cPath, 'm')
if px < 1 then
px = length(pa)+1
fn = left(pa, px-1)
pa = substr(pa, px)
if symbol('m.cl.f2c.fn') == 'VAR' then
return oAccPath(m'.'fn, pa, m.cl.f2c.fn)
if m.cl.stemCl=='' | fn=='' | verify(fn, '0123456789','n')>0 then
return 'no field' fn '@' m 'class' className(cl)
if fn == 0 then
return oAccPath(m'.0', pa, m.class.classV)
if abbrev(fn, 0) | verify(m.m.0, '0123456789', 'n') > 0,
| fn > m.m.0 then
return 'bad stem index' fn'>'m.m.0 '@' m 'class' className(cl)
return oAccPath(m'.'fn, pa, m.cl.stemCl)
endProcedure oAccPath
oRefSetNew: procedure expose m.
parse arg m, cl
cr = m.cl.valueCl
if m.cr.class = '' then
return 'no class for null @' m 'class' className(cl)
if m.cr.class = m.class.classW then
m.m = o2s()
else if m.cr \== 'r' then
return 'class' className(cl) 'not ref'
else
m.m = mNew(m.cr.class)
return 1
endProcedure oRefSetNew
/*--- mutate object m to the class named name -----------------------*/
oMutate: procedure expose m.
parse arg m, name
m.class.o2c.m = class4Name(name)
return m
endProcedure oMutate
/*--- return object obj cast'd to class named cl --------------------*/
oCast: procedure expose m.
parse arg obj, cl
if abbrev(obj, 'CLASS.CAST.') then
obj = substr(obj, 1 + pos(':', obj, 12))
return 'CLASS.CAST.'class4Name(cl)':'obj
endProcedure oCast
/*--- copy object m of class c to t ---------------------------------*/
oClaCopy: procedure expose m.
parse arg ggCla, m, t
if t == '' then do
if ggCla == m.class.classW then
return m
t = mBasicNew(ggCla)
end
else if ggCla == m.class.classW then do
m.t = o2String(m)
m.class.o2c.t = m.class.classV
return t
end
ggCode = ggCla'.OMET.oCopy'
interpret m.ggCode
m.class.o2c.t = ggCla
return t
endProcedure oClaCopy
/*--- copy object m to t --------------------------------------------*/
oCopy: procedure expose m.
parse arg m, t
return oClaCopy(objClass(m), m, t)
endProcedure oCopy
/*--- copy object to a newly created object -------------------------*/
oCopyNew: procedure expose m.
parse arg m
if symbol('m.class.o2c.m') == 'VAR' then
return oCopy(m, mBasicNew(m.class.o2c.m))
return oCopy(m, mBasicNew(m.class.classV))
endProcedure oCopyNew
/*--- return a new instance of a subclass of Run
with code code in method oRun -------------------------------*/
oRunner: procedure expose m.
if arg() >= 1 then
r = oNew(classNew('n* ORun u ORun, m oRun' arg(1)))
else
r = oNew(classNew('n| ORun u ORun'))
return r
endProcedure oRunner
/*--- set code for runner -------------------------------------------*/
oRunnerCode: procedure expose m.
parse arg r, code
call classSetMet objClass(r), 'oRun', code
return r
endProcedure oRunnerCode
/*--- run method oRun of object m -----------------------------------*/
oRun: procedure expose m.
parse arg m, arg, arg2, arg3
interpret objMet(m, 'oRun')
return
endProcedure oRun
/*--- run method oRun and return output in new JBuf ------------------*/
oRun2File: procedure expose m.
parse arg rn
b = jBuf()
call pipeBeLa '>' b
call oRun rn
call pipeEnd
return b
endProcedure oRun2File
/*--- cast the object to a file -------------------------------------*/
o2File: procedure expose m.
parse arg m
interpret objMet(m, 'o2File')
call err 'o2file did not return'
endProcedure o2File
/*--- cast the object to a String -----------------------------------*/
o2String: procedure expose m.
parse arg m, fmt
if opt == '' then
opt = '-b '
interpret objMet(m, 'o2String')
return err('o2String did not return')
endProcedure o2String
/*--- return true if object is kind of String------------------------*/
oStrOrObj: procedure expose m. ggStr ggObj ggCla
parse arg ggObj, def
if ggObj == '' then
ggObj = def
ggCla = objClass(ggObj, '')
if ggCla == '' then do
ggStr = ggObj
ggObj = ''
return 1
end
else if wordPos(ggCla, m.class.classV m.class.classW) > 0 then do
ggStr = o2String(ggObj)
ggObj = ''
return 1
end
else do
ggStr = ''
return 0
end
endProcedure oStrOrObj
/*--- return true if object is kind of String ----- ???? -------------*/
oStrOrFile: procedure expose m. ggStr ggObj ggCla
parse arg m, def
if oStrOrObj(m, def) then
return 1
ggObj = o2File(ggObj)
return 0
endProcedure oStrOrFile
/*--- return a short string representation of an object -------------*/
o2Text: procedure expose m.
parse arg m, maxL
if m == '' then
return '@ null object'
if maxL == '' then
maxL = 80
cl = objClass(m, '?')
if cl = m.class.classV then
l = m.m
else if cl == m.class.classW then
l = substr(m, 2)
else if cl == '?' then
l = '@'m 'class=???'
else do
l = '@'m 'class='className(cl)
ff = cl'.FLDS'
do fx=1 to m.ff.0 while length(l) < maxL + 3
if m.ff.fx == '' then
l = l', .='m.m
else do
f1 = substr(m.ff.fx, 2)
l = l',' f1'='m.m.f1
end
end
end
if length(l) <= maxL then
return l
return left(l, maxL-3)'...'
endProcedure o2Text
/*--- cast a String to an object -----------------------------------*/
s2o: procedure expose m.
parse arg str
return m.class.escW || str
return r
endProcedure s2o
oIfStr: procedure expose m.
parse arg m
if length(m) > 200 then
return m
cl = objClass(m, '')
if cl = '' then
return m
else if cl = m.class.classV then
return = m.m
else if cl == m.class.classW then
return = substr(m, 2)
else if arg() >= 2 then
return arg(2)
else
call err m 'of class' className(cl) 'not kind of string'
endProcedure oIfStr
/* copy o end *******************************************************/
/* copy class begin **************************************************
a class has fields and methods,
the class module handles only the metadata,
object handling (instanciation, methodcalls etc.) is in O
classes are represented by a metadata tree,
its nodes of class class have diffenrent types:
class subTypes (implemented as choices)
'u' = union: NAME -> name of class if <> '',
stem -> references component classes
'f' = field: NAME -> fieldName (x.name),
CLASSS -> reference to class of fieldValue
's' = stem: class -> ref to class at each stem element
'c' = choice: NAME -> selection value,
CLASS -> ref to class of choice
'm' = method: NAME -> methodName,
MET -> rexxCode
'r' = reference CLASS -> ref to type at reference
special classes
'v' = Value String Value
'w' = ValueAsA StringValue packed into an adress (prefix escW)
'o' = AnyClass any class with dynamic classLookup on object
formal definition, see classIni
class expression (ce) allow the following syntax
ce = className | classAdr | 'n'('?','*','|')? name union | union
| 'f' name ce | 's' ce | 'c' name ce | 'm' name code | r ce?
union = 'u' (ce (',' ce)*)?
the modifiers of 'n' means
none: create new class, fail if name already defined
'?': create new class or return old of that name
'*': use an exisiting class of that definition
or create new class with a unique name
'|': create a new class with a unique name
'm' extends to then end of the ce (line)
'u' allows several components, in classNew also multiple args
Achtung, aber NICHT rekursiv|
***********************************************************************/
classIni: procedure expose m.
if m.class.ini == 1 then
return
m.class.ini = 1
call mapIni
call mNewArea 'CLASS', 'CLASS'
call mapReset 'CLASS.N2C' /* name to class */
/* to notify other modules (e.g. O) on every new named class */
m.class.addedSeq.0 = 0
m.class.addedListeners.0 = 0
m.class.classV = classBasicNew('u', 'v')
m.class.classW = classBasicNew('u', 'w')
m.class.classO = classBasicNew('u', 'o')
cr = mIterBegin('CLASS')
do while assNN('cr', mIter(cr))
call classAddedNotify cr
end
m.class.class = classNew('n class u v',
, 'c u u f NAME v, s r class',
, 'c f u f NAME v, f CLASS r class',
, 'c s f CLASS r class' ,
, 'c c u f NAME v, f CLASS r class',
, 'c m u f NAME v, f MET v' ,
, 'c r f CLASS r class' )
m.class.cNav = '.'
m.class.cRef = '|'
m.class.cDot = '%'
m.class.cPath = m.class.cNav || m.class.cRef || m.class.cDot
m.class.classR = classNew('r')
return
endProcedure classIni
/*--- return the name of a class if it exists otherwise the class ---*/
className: procedure expose m.
parse arg cl
if m.cl = 'u' & m.cl.name \= '' then
return m.cl.name
else
return cl
endProcedure class4Name
/*--- return class of given name or class ---------------------------*/
class4Name: procedure expose m.
parse arg nm
if symbol('m.class.n2c.nm') == 'VAR' then
return m.class.n2c.nm
if arg() > 1 then
return arg(2)
call err 'no class' nm
endProcedure class4Name
classBasicNew: procedure expose m.
parse arg ty, nm, cl, nmTy
n = mNew('CLASS')
m.n = ty
m.n.name = nm
m.n.nameComp = nm
if ty == 'u' & nm \== '' then do
if pos(nmTy, '*|') > 0 then do
m.n.name = nm || substr(n, 1+lastPos('.', n))
if nmTy == '*' then
m.n.nameComp = nm'*'
else
m.n.nameComp = m.n.name
end
call mapAdd class.n2c, m.n.name, n
end
call mapAdd class.n2c, n, n
m.n.class = ''
m.n.met = ''
m.n.0 = 0
m.n.sub.0 = 0
m.n.super.0 = 0
if length(ty) \== 1 | pos(ty, 'ufscrm') < 1 then
call err 'bad type' ty': classBasicNew('ty',' nm',' cl')'
else if nm == '' & pos(ty, 'fm') > 0 then
call err 'empty name: classBasicNew('ty',' nm',' cl')'
else if nm \== '' & ty \== 'c' ,
& ( verify(nm, '0123456789') < 1 ,
| verify(nm, ' .*|@', 'm') > 0 ) then
call err 'bad name' nm': classBasicNew('ty',' nm',' cl')'
else if nm \= '' & pos(ty, 'rs') > 0 then
call err 'name for type' ty': classBasicNew('ty',' nm',' cl')'
else if pos(ty, 'fcrs') > 0 then do
if cl \== '' then
m.n.class = mapGet(class.n2c, cl)
else if ty == 'r' then
m.n.class = m.class.classO
/* else say 'cl leer' ty nm nmTy ???????*/
end
else if ty == 'm' then
m.n.met = cl
else if cl \== '' then
call err 'class for type' ty': classBasicNew('ty',' nm',' cl')'
return n
endProcedure classBasicNew
classNew: procedure expose m.
parse arg clEx 1 ty rest
if abbrev(ty, 'n') then do
if wordPos(ty, 'n n? n* n|') < 1 then
call err 'bad type' ty': classNew('clEx')'
nmTy = right(ty, 1)
parse var rest nm ty rest
if ty \== 'u' then
call err 'class name' nm 'without u: classNew('clEx')'
if nmTy == 'n' then do
if mapHasKey(class.n2c, nm) then
call err 'class' nm 'already defined: classNew('clEx')'
end
else if nmTy == '?' then do
if mapHasKey(class.n2c, nm) then
return mapGet(class.n2c, nm)
end
else if nmTy == '*' then do
if arg() \== 1 then
call err 'arg()='arg() 'for n* : classNew('clEx')'
if mapHasKey(class.n2c, clEx) then
return mapGet(class.n2c, clEx)
end
n = classBasicNew('u', nm, , nmTy)
end
else do
nmTy = ''
if arg() \== 1 then
call err 'arg()='arg() 'without name: classNew('clEx')'
if mapHasKey(class.n2c, clEx) then
return mapGet(class.n2c, clEx)
if length(ty) <> 1 | pos(ty, 'ufscmr') < 1 then
call err 'bad type' ty': classNew('clEx')'
nm = ''
if pos(ty, 'usr') < 1 then
parse var rest nm rest
if ty = 'u' then do
n = classBasicNew(ty)
end
else if ty = 'm' then do
n = classBasicNew(ty, nm, rest)
rest = ''
end
else do
parse var rest t1 rest
if wordPos(t1, 'u f s c m r') > 0 then do
n = classBasicNew(ty, nm)
m.n.class = classNew(t1 rest)
rest = ''
end
else do
n = classBasicNew(ty, nm, t1)
end
end
end
if ty \== 'u' then do
if rest \== '' then
call err 'rest' rest 'but end of classExp expected:' clEx
end
else do
lx = 0
do while lx < length(rest)
cx = pos(',', rest, lx+1)
if cx <= lx | word(substr(rest, lx+1), 1) == 'm' then
cx = length(rest)+1
a = mAdd(n, classNew(strip(substr(rest, lx+1, cx-lx-1))))
lx=cx
end
pref = ''
do ax=2 to arg()
if length(arg(ax)) == 1 & arg(ax) \== ' ' then
pref = arg(ax)' '
else
call mAdd n, classNew(pref || arg(ax))
end
end
cr = mIterBegin('CLASS')
do while assNN('cr', mIter(cr)) & \ classEqual(n, cr)
end
isNew = cr == n
if \ isNew then do
if mapRemove(class.n2c, n) \== n then
call err 'mapRemove('n') mismatch'
if m.n == 'u' & m.n.name \== '' then
if mapRemove(class.n2c, m.n.name) \== n then
call err 'mapRemove('m.n.name') mismatch'
call mFree n
n = cr
end
if nmTy == '' | nmTy == '*' then
call mapAdd class.n2c, clEx, n
if isNew then
call classAddedNotify n
return n
endProcedure classNew
classAdd1Method: procedure expose m.
parse arg clNm, met code
cl = class4Name(clNm)
if pos(m.cl, 'uvw') < 1 then
call err 'class not nvw but' m.cl,
'in classAdd1Method('clNm',' met code')'
do sx = 1 to m.cl.0
su = m.cl.sx
if m.cl.sx = 'm' & m.cl.name == met then
call err 'met' met 'already in' clNm
end
call mAdd cl, classNew('m' met code)
return cl
endProcedure classAdd1Method
/*--- register a listener for newly defined classes
and call it for all already defined classes -----------------*/
classAddedRegister: procedure expose m.
parse arg li
call mAdd 'CLASS.ADDEDLISTENERS', li
do cx = 1 to m.class.addedSeq.0
call oRun li, m.class.addedSeq.cx
end
return
endProcedure classAddedRegister
/*--- to notify all listeners about a newly defined classes --------*/
classAddedNotify: procedure expose m.
parse arg cl
call mAdd 'CLASS.ADDEDSEQ', cl
if m.cl == 'u' then
call classSuperSub cl
m.cl.flds.0 = 0
m.cl.stms.0 = 0
m.cl.stemCl = ''
m.cl.valueCl = ''
call classAddFields cl, cl
m.cl.hasFlds = m.cl.flds.0 > 1 ,
| (m.cl.flds.0 == 1 & m.cl.flds.1 \== '') | m.cl.stms.0 > 0
do lx = 1 to m.class.addedListeners.0
call oRun m.class.addedListeners.lx, cl
end
return
endProcedure classAddedNotify
/*--- add supper and sub links for class cl -------------------------*/
classSuperSub: procedure expose m.
parse arg cl
do ux=1 to m.cl.0
u1 = m.cl.ux
if m.u1 == 'u' then do
if mPos(cl'.SUPER', u1) > 0 then
call err u1 'is already in' cl'.SUPER.'sx ,
|| ': classSuperSub('cl')'
call mAdd cl'.SUPER', u1
if mPos(cl'.SUB', cl) > 0 then
call err cl 'is already in' u1'.SUB.'sx ,
|| ': classSuperSub('cl')'
call mAdd u1'.SUB', cl
end
end
return
endProcedure classSuperSub
/*--- add the the fields of class cl to stem f ----------------------*/
classAddFields: procedure expose m.
parse arg f, cl, nm
n1 = substr(nm, 1+abbrev(nm, '.') )
if symbol('m.f.f2c.n1') \== 'VAR' then
m.f.f2c.n1 = cl
/* else if cl == m.f.f2c.n1 then
return 0 */
if cl == m.class.classV | cl == m.class.classW | m.cl=='r' then do
if nm == '' then do
if m.f.valueCl \== '' then
return err('value mistmatch')
m.f.valueCl = cl
end
if nm == '' then do
call mMove f'.FLDS', 1, 2
m.f.flds.1 = ''
end
else do
call mAdd f'.FLDS', nm
end
return 0
end
if m.cl = 's' then do
if m.cl.class == '' then
call err 'stem null class'
a1 = mAdd(f'.STMS', nm)
m.a1.class = m.cl.class
if nm == '' then
m.f.stemCl = m.cl.class
return 0
end
if m.cl = 'f' then
return classAddFields(f, m.cl.class, nm'.'m.cl.name)
if m.cl.class \== '' then
return classAddFields(f, m.cl.class, nm)
do tx=1 to m.cl.0
call classAddFields f, m.cl.tx, nm
end
return 0
endProcedure classAddFields
/*--- return true iff the two classes are equal -------------------*/
classEqual: procedure expose m.
parse arg l, r
if m.l \== m.r | m.l.nameComp \== m.r.nameComp ,
| m.l.class \== m.r.class | m.l.0 \== m.r.0 then
return 0
if m.l.met \== m.r.met then
return 0
do sx=1 to m.l.0
if m.l.sx \== m.r.sx then
return 0
end
return 1
endProcedure classEqual
/*--- print object ---------------------------------------------------*/
objOut: procedure expose m.
parse arg m, pr, p1
c = objClass(m, '')
if c == '' then
call out p1 'no class for' m
else if c == m.class.classV then
call out p1 || m.m
else if c == m.class.classW then
call out p1 || o2String(m)
else
call classOutDone c, m, pr, p1
return
endProcedure objOut
/*--- recursively output (with out:) the object a with class t -------*/
classOut: procedure expose m.
parse arg t, a, pr, p1
return classOutDone(if(t=='',m.class.classO, t), a, pr, p1)
endProcedure classOut
/*--- ouput object a with class t and stopper done ------------------*/
classOutDone: procedure expose m. done.
parse arg t, a, pr, p1
if p1 == '' then
p1 = pr
if right(p1, 1) \== ' ' then
p1 = p1' '
if done.ini \== 1 then do
done.ini = 1
t = class4Name(t, t)
p1 = p1'@'a' '
end
if done.t.a == 1 then
return out(p1'done :'className(t) '@'a)
done.t.a = 1
if t = m.class.classO then do
if a == '' then
return out(p1'obj null')
t = objClass(a, '')
if t = '' then
return out(p1'obj has no class @'m.a)
else
return classOutDone(t, a, pr, p1'isA')
end
if t == m.class.classV then
return out(p1'=' m.a)
if t == m.class.classW == 'w' then
return out(p1'}' substr(a, 2))
if m.t == 'f' then
return classOutDone(m.t.class, a'.'m.t.name, pr, p1'.'m.t.name)
if m.t == 'r' then do
if m.a == '' then
return out(p1'refTo :'className(m.t.class) '@null@')
else
return classOutDone(m.t.class, m.a, pr,
, p1'refTo @'m.a)
end
if m.t = 'u' then do
t1 = m.t.1
vv = m.t.0 > 0 & m.t.1 == m.class.classV
call out p1 || if(m.t.name == '', 'union', ':'m.t.name) ,
|| copies(' =' m.a, vv)
do ux=1+vv to m.t.0
call classOutDone m.t.ux, a, pr' '
end
return 0
end
if m.t = 's' then do
call out p1'stem' m.a.0
do ux=1 to m.a.0
call classOutDone m.t.class, a'.'ux, pr' ', pr' .'ux
end
return 0
end
if m.t = 'c' then do
if m.t.name = m.a then
call classOutDone m.t.class, a, pr, p1'choice' m.a
return 0
end
if m.t = 'm' then
return 0
return err('bad class type' m.t)
endProcedure classOutDone
/* copy class end ***************************************************/
/* copy map begin ******************************************************
a map stores values at keys
it may also maintain a list of keys
the basic ideas are similar to the java Interface java.util.Map
contrary to stems we also handle keys longer then 250 bytes
***********************************************************************/
/*--- initialize the module ------------------------------------------*/
mapIni: procedure expose m.
if m.map.ini = 1 then
return
m.map.ini = 1
call mIni
m.map.0 = 0
m.map.inlineSearch = 1
call mapReset map.inlineName, map.inline
return
endProcedure mapIni
mapInline: procedure expose m.
parse arg pName, opt
if mapHasKey(map.inlineName, pName) then do
im = mapGet(map.inlineName, pName)
if pos('l', opt) < 1 & symbol('m.im.0') \== 'VAR' then do
m.im.0 = m.im.lEnd - m.im.lBegin - 1
do ix=1 to m.im.0
m.im.ix = strip(sourceline(ix+m.im.lBegin), 't')
end
end
return im
end
name = '/'
do lx = m.map.inlineSearch to sourceline()
if \ abbrev(sourceline(lx), '$') then
iterate
li = sourceline(lx)
s1 = pos('/', li)+ 1
if s1 < 3 | s1 > 4 then
iterate
s2 = pos('/', li, s1)
if s2 <= s1 then
iterate
if s1 == 3 then do
if name \== substr(li, s1, s2-s1) then
iterate
im = 'MAP.INLINE.' || (m.map.inline.0+1)
call mapAdd map.inlineName, name, im
m.im.lBegin = lBeg
m.im.lEnd = lx
m.im.mark = mrk
if name == pName then do
m.map.inlineSearch = lx+1
return mapInline(pName)
end
name = '/'
end
else if \ mapHasKey(map.inlineName,
, substr(li, s1, s2-s1)) then do
lBeg = lx
mrk = substr(li, 2, s1-3)
name = substr(li, s1, s2-s1)
end
else do
name = '/'
end
end
if pos('r', opt) > 0 then
return ''
return err('no inline data /'pName'/ found')
endProcedure mapInline
/*--- create a new map ----------------------------------------------*/
mapNew: procedure expose m.
parse arg opt
m.map.0 = m.map.0 + 1
return mapReset('MAP.'m.map.0 , opt)
endProcedure mapNew
/*--- make an empty map, if opt <> '' maintain stem of keys
('K' in map.keys, '=' in a else in opt) --------------*/
mapReset: procedure expose m.
parse arg a, opt
if symbol('m.map.keys.a') == 'VAR' then
call mapClear a
if opt = '=' then
st = a
else if translate(opt) = 'K' then
st = 'MAP.KEYS.'a
else
st = opt
m.map.keys.a = st
if st \== '' then
m.st.0 = 0
return a
endProcedure
/*--- add a new key value pair to the map ----------------------------*/
mapAdd: procedure expose m.
parse arg a, ky, val
vv = mapValAdr(a, ky, 'a')
m.vv = val
return val
endProcedure mapAdd
/*--- change the value at a key or add key value ---------------------*/
mapPut: procedure expose m.
parse arg a, ky, val
vv = mapValAdr(a, ky, 'p')
m.vv = val
return val
endProcedure mapPut
/*--- return 1 if key ky exists in map a, 0 otherwise ----------------*/
mapHasKey: procedure expose m.
parse arg a, ky
return mapValAdr(a, ky) \== ''
endProcedure mapHasKey
/*--- return the value of key ky in map a if it exists,
else if called with a third argument return third argument
else issue an error ----------------------------------------*/
mapGet: procedure expose m.
parse arg a, ky
vv = mapValAdr(a, ky)
if vv \== '' then
return m.vv
else if arg() > 2 then
return arg(3)
else
return err('missing key in mapGet('a',' ky')')
endProcedure mapGet
/*--- return a stem of all keys --------------------------------------*/
mapKeys: procedure expose m.
parse arg a
if m.map.keys.a == '' then
call err 'mapKeys('a') with no keys'
return m.map.keys.a
endProcedure mapKeys
/*--- remove a key from the map, do nothing if it is missing ---------*/
mapRemove: procedure expose m.
parse arg a, ky
vv = mapValAdr(a, ky)
if vv == '' then
return ''
if m.map.keys.a \== '' then do
trace ?R /* not tested yet ???wkTest */
k = m.map.keys.a
mx = m.k.0
do i=1 to mx
if m.k.i == ky then do
m.k.i = m.k.mx
m.k.0 = mx - 1
return
end
end
end
val = m.vv
drop m.a.ky
return val
endProcedure mapRemove
/*--- remove all entries ---------------------------------------------*/
mapClear: procedure expose m.
parse arg a
st = mapKeys(a)
liLe = 243 - length(a)
do kx=1 to m.st.0
ky = m.st.kx
drop m.st.kx
if length(ky) <= liLe then do
drop m.a.ky
end
else do
adr = mapValAdr(a, ky)
if adr \== '' then do
ha = left(adr, lastPos('.', adr) - 3)
do i = 1 to m.ha.k.0
drop m.ha.k.i m.ha.v.i
end
drop m.ha.k.0
end
end
end
m.st.0 = 0
return a
endProcedure mapClear
/*--- return the value pointer for a key, '' if non existing
with fun = 'a' add a key, with 'p' put a key ------------*/
mapValAdr: procedure expose m.
parse arg a, ky, fun
if length(ky) + length(a) <= 243 then do
res = a'.'ky
if symbol('m.res') == 'VAR' then do
if fun == 'a' then
call err 'duplicate key' ky 'in map' a
return res
end
else if fun == '' then
return ''
end
else do
len = 243 - length(a)
q = len % 4
ha = a'.'left(ky, len - 2 * q) || substr(ky,
, (length(ky)-len) % 2 + 2 * q, q) || right(ky, q)
if symbol('M.ha.k.0') == 'VAR' then do
do i=1 to m.ha.k.0
if m.ha.k.i == ky then do
if fun == 'a' then
call err 'duplicate key' ky ,
'map' a 'hash' ha'.K.'i
return ha'.V.'i
end
end
end
else do
i = 1
end
if fun == '' then
return ''
if i > 9 then
call err 'overflow long key' y 'in map' a 'hash' ha'.K.'i
m.ha.k.0 = i
m.ha.k.i = ky
res = ha'.V.'i
end
if m.map.keys.a \== '' then
call mAdd m.map.Keys.a, ky
m.res = ''
return res
endProcedure mapValAdr
/* copy map end *******************************************************/
/* copy mapExp begin **************************************************/
mapVia: procedure expose m.
parse arg a, ky
sx = pos('|', ky)
if sx < 1 then
return mapGet(a, ky)
via = mapGet(a, left(ky, sx-1))
do while sx <= length(ky)
fx = sx+1
sx = pos('|', ky, fx)
if sx < 1 then
sx = length(ky) + 1
if sx = fx then do
if symbol('m.via') \== 'VAR' then
call err 'missing m.'via 'at' sx 'in mapVia('a',' ky')'
via = m.via
end
else do
f = substr(ky, fx, sx - fx)
if symbol('m.via.f') \== 'VAR' then
call err 'missing m.'via'.'f ,
'at' sx 'in mapVia('a',' ky')'
via = m.via.f
end
end
return via
endProcedure mapVia
mapExpAt: procedure expose m.
parse arg a, src, sx
m.map.ExpAt = 0
cx = pos('$', src, sx)
if cx < 1 then
return substr(src, sx)
res = substr(src, sx, cx-sx)
do forever
if substr(src, cx+1, 1) = '{' then do
ex = pos('}', src, cx+2)
if ex < 1 then
call err 'missing } after' substr(src, cx) 'in' src
res = res || mapVia(a, strip(substr(src, cx+2, ex-cx-2)))
ex = ex + 1
end
else do
ex = verify(src, m.mAlfDot, 'n', cx+1)
if ex < 1 then
return res || mapVia(a, substr(src, cx+1))
if ex = cx+1 then do
m.map.ExpAt = cx
return res
end
res = res || mapVia(a, substr(src, cx+1, ex-cx-1))
end
cx = pos('$', src, ex)
if cx < 1 then
return res || substr(src, ex)
res = res || substr(src, ex, cx-ex)
end
endProcedure mapExpAt
mapExp: procedure expose m.
parse arg a, src
res = mapExpAt(a, src, 1)
if m.map.ExpAt \== 0 then
call err 'mapExp stopped at' substr(src, map.ExpAt) 'in' src
return res
endProcedure mapExp
mapExpAllAt: procedure expose m.
parse arg a, dst, src, sx, cx
do while sx <= m.src.0
li = mapExpAt(a, m.src.sx, cx)
dx = m.map.ExpAt
if (cx=1 & dx = 0) | li \= '' then
call mAdd dst, li
if dx = 0 then do
cx = 1
sx = sx+1
end
else do
return sx dx
end
end
return ''
endProcedure mapExpAllAt
mapExpAll: procedure expose m.
parse arg a, dst, src
sto = mapExpAllAt(a, dst, src, 1, 1)
if sto == '' then
return
lx = word(sto, 1)
call err 'mapExpAll stopped at' sto':' m.src.lx
endProcedure mapExpAll
/* copy mapExp end ****************************************************/
/* copy m begin ********************************************************
we use variables as follows
m. stem m: all global data and object data that must survive
a procedure call (m for memory in Memoria of B5000)
m.<mbr>.** to avoid conflicts: every rexx Module (copy) should
only allocate addresses m.<mbr>.** with <mbr> the name of
the rexx module
we pass parameters around (e.g. a=address, m=memory, st=stem)
and the called function may use m.a or m.a.subField etc.
gg*: local variable in subroutines without procedure
everything else: temporary data within procedure
every subroutine is declared as procedure expose m.
(also if no m. variable is used, because e.g. of error handling)
the few subroutines that cannot use procedure, should use only
variables starting with gg
***********************************************************************/
/*---make an area -----*/
mNewArea: procedure expose m.
parse arg nm, adr, newCd, freeCd
m.m.area.0 = m.m.area.0 + 1
a = 'M.AREA.'m.m.area.0
if adr == '=' then
adr = nm
else if adr == '' then
adr = 'M.'m.m.area.0
if symbol('m.m.n2a.adr') == 'VAR' then
call err 'adr' adr 'for area' nm 'already used'
m.m.n2a.adr = a
call mAlias adr, nm
m.m.p2a.adr = a
m.a.0 = 0
m.a.free.0 = 0
m.a.address = adr
m.a.newCode = newCd
m.a.freeCode = freeCd
return nm
endProcedure mNewArea
mAlias: procedure expose m.
parse arg oldNa, newNa
if symbol('m.m.n2a.oldNa') \== 'VAR' then
call err 'area' oldNa 'does not exist'
if oldNa == newNa then
return
if symbol('m.m.n2a.newNa') == 'VAR' then
call err 'newName' newNa 'for old' oldNa 'already used'
m.m.n2a.newNa = m.m.n2a.oldNa
return
endProcedure mAlias
mBasicNew: procedure expose m. ggArea
parse arg name
if symbol('m.m.n2a.name') \== 'VAR' then
call err 'area' name 'does not exists'
ggArea = m.m.n2a.name
if m.ggArea.free.0 > 0 then do
fx = m.ggArea.free.0
m.ggArea.free.0 = fx-1
m = m.ggArea.free.fx
end
else do
m.ggArea.0 = m.ggArea.0 + 1
m = m.ggArea.address'.'m.ggArea.0
end
return m
endProcedure mBasicNew
mNew: procedure expose m.
labelMNew:
parse arg name, arg, arg2, arg3
m = mBasicNew(name)
interpret m.ggArea.newCode
return m
endProcedure mNew
mReset: procedure expose m.
parse arg a, name
ggArea = m.m.n2a.name
m = a
interpret m.ggArea.newCode
return m
endProcedure mReset
mFree: procedure expose m.
parse arg m
p = 'M.P2A.'left(m, lastPos('.', m)-1)
area = m.p
if m.area.freeCode \== '' then
interpret m.area.freeCode
fx = m.area.free.0 + 1
m.area.free.0 = fx
m.area.free.fx = m
return
endProcedure mFree
/*--- iterate over all allocate elements of an area ------------------*/
mIterBegin: procedure expose m.
parse arg nm
a = m.m.n2a.nm
return m.a.address'.0'
endProcedure mIterBegin
mIter: procedure expose m.
parse arg cur
if cur == '' then
return ''
lx = lastPos('.', cur)
p = 'M.P2A.'left(cur, lx-1)
a = m.p
ix = substr(cur, lx+1)
do ix=ix+1 to m.a.0
n = m.a.address'.'ix
do fx=1 to m.a.free.0 while m.a.free \== n
end
if fx > m.a.free.0 then
return n
end
return ''
endProcedure mIter
/*--- cut stem a to length len ---------------------------------------*/
mCut: procedure expose m.
parse arg a, len
m.a.0 = len
return a
endProcedure mCut
/*--- add one or several arguments to stem m.a -----------------------*/
mAdd: procedure expose m.
parse arg a
ix = m.a.0
do ax = 2 to arg()
ix = ix + 1
m.a.ix = arg(ax)
end
m.a.0 = ix
return a'.'ix
endProcedure mAdd
/*--- pop last element from stem m.a ---------------------------------*/
mPop: procedure expose m.
parse arg a
ix = m.a.0
if ix < 1 then
call err 'pop from empty stem' a
m.a.0 = ix-1
return m.a.ix
endProcedure mPop
/*--- add to m.dst.* a (sub)sequence of m.src.* ----------------------*/
mAddSt: procedure expose m.
parse arg dst, src
dx = m.dst.0
do sx = 1 to m.src.0
dx = dx + 1
m.dst.dx = m.src.sx
end
m.dst.0 = dx
return
endProcedure mAddSt
/*--- find position of first occurrence of ele in stem m,
return 0 if nonemove a part of a stem -----------------------*/
mPos: procedure expose m.
parse arg m, ele, sx
if sx == '' then
sx = 1
do x=sx to m.m.0
if m.m.x = ele then
return x
end
return 0
endProcedure mPos
/*--- move a part of a stem ------------------------------------------*/
mMove: procedure expose m.
parse arg m, sx, dx
if dx < sx then do
y = dx
do x=sx to m.m.0
m.m.y = m.m.x
y = y + 1
end
end
else if dx > sx then do
y = m.m.0 + dx - sx
do x=m.m.0 by -1 to sx
m.m.y = m.m.x
y = y - 1
end
end
m.m.0 = m.m.0 + dx - sx
return
endProcedure mMove
/*--- insert a stem into another ------------------------------------*/
mInsert: procedure expose m.
parse arg m, tx, st
call mMove m, tx, tx+m.st.0
do sx=1 to m.st.0
dx = tx-1+sx
m.m.dx = m.st.sx
end
return
endProcedure mInsert
/*--- strip all elements of a stem -----------------------------------*/
mStrip: procedure expose m.
parse arg st, opt
if opt == '' then
opt = 'b'
do x=1 to m.st.0
m.st.x = strip(m.st.x, opt)
end
return st
endProcedure mStrip
/* cat the lines of a stem, possibly repeated --------------------------
args: stem, fmt see fGen: -------------------------------------*/
mCat: procedure expose m.
parse arg st, fmt
if m.st.0 < 1 then
return ''
res = f(fmt, m.st.1)
do sx=2 to m.st.0
res = res || fPlus(fmt 'nxt', m.st.sx)
end
return res || fFld(fmt 'end')
endProcedure mCat
mIni: procedure expose m.
if m.m.ini = 1 then
return
m.m.ini = 1
m.mAlfLC = 'abcdefghijklmnopqrstuvwxyz'
m.mAlfUC = translate(m.mAlfLC)
m.mAlfa = m.mAlfLC || m.mAlfUC
m.mAlfNum = m.mAlfa || '0123456789'
m.mAlfDot = m.mAlfNum || '.'
m.mAlfRex1 = m.mAlfa'@#$?' /* charset problem with ¬| */
m.mAlfRexR = m.mAlfRex1'.0123456789'
m.m.area.0 = 0
call mNewArea
return
endProcedure mIni
/* copy m end *********************************************************/
/* copy adrIsp begin *************************************************/
/**********************************************************************
lmd: catalog read
call sequence: lmdBegin, lmdNext*, lmdEnd
mit lmd service (mit save in file und read,
weil list zu langsam und listcat abstürzt)
1. arg (grp) als group dataset für lmd save
und dd name für file read
***********************************************************************/
lmdBegin: procedure expose m.
parse arg grp, lev
call adrIsp 'lmdinit listid(lmdId) level('lev')'
res = adrIsp('lmdlist listid(&lmdId) option(save) group('grp')', 4)
call adrIsp 'lmdfree listid(&lmdId)'
if res = 0 then do
call trc timing() 'lmdlist save' grp lev
call adrTso 'alloc dd('grp') shr dsn('grp'.datasets)'
end
else do
call trc 'no datasets found' timing() 'lmdlist save' grp lev
call adrTso 'alloc dd('grp') dummy'
end
call readDDBegin grp
return /* end lmdBegin */
lmdNext:
parse arg ggGrp, ggSt, withVolume
if \ readDD(ggGrp, ggSt) then
return 0
if withVolume \== 1 then
do ggIx=1 to value(ggSt'0')
x = value(ggSt || ggIx, word(value(ggSt || ggIx), 1))
end
return 1
endSubroutin lmdNext
lmdEnd: procedure expose m.
parse arg grp
call readDDEnd grp
call adrTso 'free dd('grp')'
return /* end lmdEnd */
lmd: procedure expose m.
parse arg lev, withVol
call lmdBegin gg1, lev
do while lmdNext(gg1, q., withVol)
do x=1 to q.0
call out q.x
end
end
call lmdEnd gg1
return
endProcedure lmd
/**********************************************************************
member list of a pds:
call sequence x=lmmBegin(dsn) lmmNext(x) * lmmEnd(x)
***********************************************************************/
lmm: procedure expose m.
parse arg dsn
id = lmmBegin(dsn)
do ix=1 by 1
m = lmmNext(id)
if m = '' then
leave
call out m
end
call lmmEnd id
return
endProcedure lmm
lmmBegin: procedure expose m.
parse arg dsn
mbr = dsnGetMbr(dsn)
pds = dsnSetMbr(dsn, )
call adrIsp "LMINIT DATAID(lmmId) DATASET('"pds"') ENQ(SHRW)"
call adrIsp "LMOPEN DATAID("lmmId") OPTION(INPUT) "
res = lmmId
if mbr <> '' then
res = res 'pattern('mbr')'
return res
endProcedure lmmBegin
lmmEnd: procedure expose m.
parse arg lmmId opt
call adrIsp "LMMLIST DATAID("lmmId") option(free)", 8
call adrIsp "LMCLOSE DATAID("lmmId")"
call adrIsp "LMFREE DATAID("lmmId")"
return
endProcedure lmmEnd
lmmNext: procedure expose m.
parse arg lmmId opt
if adrIsp("LMMLIST DATAID("lmmid")" ,
"OPTION(LIST) MEMBER(Mbr)" opt, 4 8) = 0 then
return strip(mbr)
else
return ''
endProcedure lmmNext
lmmRm: procedure expose m.
parse arg dsn, mbrs
mbrs = dsnGetMbr(dsn) mbrs
pds = dsnSetMbr(dsn, )
call adrIsp "LMINIT DATAID(lmmId) DATASET("pds") ENQ(SHRW)"
call adrIsp "LMOPEN DATAID("lmmId") OPTION(OUTPUT) "
err = ''
do wx=1 to words(mbrs)
m1 = word(mbrs, wx)
rr = adrIsp("lmmDel dataid("lmmId") member("m1")", 0 8 12)
if rc = 0 then
say 'removed' m1 'from' pds
else if rc = 8 then
say 'not found' m1 'in' pds
else do
err = 'error deleting' m1 'in' pds 'rc' rr strip(zerrlm)
say err
leave
end
end
call adrIsp "LMCLOSE DATAID("lmmId")"
call adrIsp "LMFREE DATAID("lmmId")"
if err <> '' then
call err err
return
endProcedure lmmRm
/*--- address ispf with error checking -------------------------------*/
adrIsp:
parse arg ggIspCmd, ggRet
address ispexec ggIspCmd
if rc = 0 then return 0
else if ggRet == '*' then return rc
else if wordPOS(rc, ggRet) > 0 then return rc
else
call err 'adr ispExec rc' rc 'in' ggIspCmd':' strip(zerrlm)
endSubroutine adrIsp
/*--- address editor with error checking -----------------------------*/
adrEdit:
parse arg ggEditCmd, ggRet
address isrEdit ggEditCmd
if rc = 0 then return 0
else if ggRet == '*' then return rc
else if wordPOS(rc, ggRet) > 0 then return rc
else
call err 'adr isrEdit rc' rc 'for' ggEditCmd
endSubroutine adrEdit
/* copy adrIsp end *************************************************/
/* copy adrTso begin *************************************************/
/*--- send ggTsoCmd to tso, fail if rc <> 0 or not listed in ggRet ---*/
adrTso:
parse arg ggTsoCmd, ggRet
address tso ggTsoCmd
if rc == 0 then return 0
else if ggRet == '*' then return rc
else if wordPos(rc, ggRet) > 0 then return rc
else
call err 'adrTso rc' rc 'for' ggTsoCmd
return /* end adrTso */
/*--- format dsn from tso format to jcl format -----------------------*/
dsn2jcl: procedure expose m.
parse upper arg dsn ., addPrefix
if left(dsn,1) = "'" then
return strip(dsn, 'b', "'")
sp = sysvar('SYSPREF')
if sp == '' then
sp = userid()
cx = pos('~', dsn)
if cx < 1 & addPrefix == 1 then
return sp'.'dsn
do while cx \== 0
le = left(dsn, cx-1)
ri = substr(dsn, cx+1)
if right(le, 1) == '.' | left(ri, 1) == '.' then
dsn = le || sp || ri
else
dsn = le || left('.', le \== '') || sp ,
|| left('.', ri \== '') || ri
cx = pos('~', spec, cx)
end
return dsn
endProcedure dsn2Jcl
/*--- format dsn from jcl format to tso format -----------------------*/
jcl2dsn: procedure expose m.
parse arg dsn .
return "'"dsn"'"
endProcedure jcl2dsn
dsnSetMbr: procedure expose m.
parse arg dsn, mbr
bx = pos('(', dsn)
if bx > 0 then
dsn = strip(left(dsn, bx-1))
if mbr <> '' then
dsn = dsn'('strip(mbr)')'
return dsn
endProcedure dsnSetMbr
dsnGetMbr: procedure expose m.
parse arg dsn
lx = pos('(', dsn)
rx = pos(')', dsn, lx+1)
if lx < 1 then
return ''
else if lx < rx then
return substr(dsn, lx+1, rx-lx-1)
else
return strip(substr(dsn,lx+1))
endProcedure dsnGetMbr
/**********************************************************************
io: read or write a dataset with the following callsequences:
read: readDDBegin, readDD*, readDDEnd
write: writeBegin, writeDD*, writeEnd
readDD returns true if data read, false at eof
***********************************************************************/
/*--- prepare reading from a DD --------------------------------------*/
readDDBegin: procedure expose m.
parse upper arg ggDD
call errAddCleanup 'call readDDEnd' ggDD', "*"'
return /* end readDDBegin */
/*--- read from DD ggDD into ggSt, return false at eof ---------------*/
readDD:
parse arg ggDD, ggSt, ggCnt
if ggCnt = '' then
ggCnt = 100
call adrTso 'execio' ggCnt 'diskr' ggDD '(stem' ggSt')', 2
return (value(ggSt'0') > 0)
return /* end readDD */
/*--- finish reading DD ggDD ----------------------------------------*/
readDDEnd: procedure expose m.
parse upper arg ggDD, ggRet
call errRmCleanup 'call readDDEnd' ggDD', "*"'
return adrTso('execio 0 diskr' ggDD '(finis)', ggRet)
endProcedure readDDEnd
/*--- prepare writing to DD ggDD -------------------------------------*/
writeDDBegin: procedure expose m.
parse upper arg ggDD
/* ensure file is erased, if no records are written */
call adrTso 'execio' 0 'diskw' ggDD '(open)'
call errAddCleanup 'call writeDDEnd' ggDD', "*"'
return /* end writeDDBegin */
/*--- write to gg ggDD from stem ggSt, ggCnt records -----------------*/
writeDD:
parse arg ggDD, ggSt, ggCnt
if ggCnt == '' then
ggCnt = value(ggst'0')
call adrTso 'execio' ggCnt 'diskw' ggDD '(stem' ggSt')'
return
endSubroutine writeDD
/*--- end writing to dd ggDD (close) --------------------------------*/
writeDDEnd: procedure expose m.
parse upper arg ggDD, ggRet
call errRmCleanup 'call writeDDEnd' ggDD', "*"'
return adrTso('execio 0 diskw' ggDD '(finis)', ggRet)
endProcedure writeDDEnd
/*--- readNx: read next line, using buffer ---------------------------*/
/*--- begin: allocate dsnSpec and ini ------------------------ -------*/
readNxBegin: procedure expose m.
parse arg m, m.m.dsn, m.m.dd, m.m.Cnt
if m.m.dd = '' then
m.m.dd = 'DDNX'
if m.m.cnt = '' then
m.m.cnt = 1000
m.m.cx = m.m.cnt + 999
m.m.buf0x = 0
m.m.0 = 0
call dsnAlloc 'dd('m.m.dd')' m.m.dsn
call readDDBegin m.m.dd
return m
endProcedure readDDNxBegin
/*--- return the stem of the next line, or '' at end -----------------*/
readNx: procedure expose m.
parse arg m
ix = m.m.cx + 1
m.m.cx = ix
if m.m.cx <= m.m.0 then
return m'.'ix
m.m.buf0x = m.m.buf0x + m.m.0
if \ readDD(m.m.dd, 'M.'m'.', m.m.cnt)then
return ''
m.m.cx = 1
return m'.1'
endProcedure readDDNx
/*--- return the position (line number) of reader
plus le characters of the current line (default 50) ------*/
readnxPos: procedure expose m.
parse arg m, le
li = m'.'m.m.cx
li = strip(m.li, 't')
if arg() < 2 then
le = 50
if le < 1 then
li = ''
else if length(li) <= le then
li = ':' li
else
li = ':' left(li, le-3)'...'
return 'line' (m.m.buf0x + m.m.cx)li
endProcedure readnxPos
/*--- close and deallocate ------------------------------------------*/
readNxEnd: procedure expose m.
parse arg m
call readDDEnd m.m.dd
call tsoFree m.m.dd
return
endProcedure readDDNxEnd
/*--- standardise a dsn spec
word1 dsName or -
word2 dd or -
word3 disp or -
word4 to first : attributes in tso format
after first : attributes for new allocation
----------------------------------------------------------------------*/
dsnSpec: procedure expose m.
parse upper arg spec
rr = '' /* put leading - in separate words */
do sx=1 while words(rr) < 3 & wx \= ''
wx = word(spec, sx)
do while abbrev(wx, '-') & words(rr) < 3
wx = substr(wx, 2)
rr = rr '-'
end
rr = rr wx
end
spec = rr subWord(spec, sx)
na = ''
dd = ''
di = ''
if left(spec, 1) = '&' then /* external spec is handled ok */
spec = strip(substr(spec, 2))
do wx=1 by 1
w = word(spec, wx)
if w = '' | abbrev(w, '.') | abbrev(w, ':') then
leave
else if wordPos(w, 'OLD SHR MOD NEW')>0 | abbrev(w, 'SYSO') then
di = w
else if w = 'CATALOG' then
di = di w
else if abbrev(w, 'DD(') then
dd = substr(w, 4, length(w)-4)
else if abbrev(w, 'DSN(') then
na = strip(substr(w, 5, length(w)-5))
else if na == '' then
na = dsn2jcl(w)
else if dd == '' then
dd = w
else if di == '' then
di = w
else
leave
end
if na == '' then
na = '-'
else if abbrev(na, "'") then
na = substr(na, 2, length(na)-2)
if dd == '' then dd = '-'
if di == '' then di = '-'
re = subword(spec, wx)
if abbrev(re, '.') then
re = substr(re, 2)
return na dd di re
endProcedure dsnSpec
/*--- alloc a dsn with dsnAlloc
if the dsn is inuse wait and retry
until either the allocation is successfull
or the timeout occurs --------------------------------------*/
dsnAllocWait: procedure expose m.
parse upper arg spec, pDi, pDD, timeOut
x = max(1, arg() - 1)
do rt=0
m.adrTsoAl.1 = ''
m.adrTsoAl.2 = ''
m.adrTsoAl.3 = ''
call outtrap m.adrTsoAl.
res = dsnAlloc(spec, pDi, pDD, '*')
call outtrap off
if \ abbrev(res, ' ') then
return res
msg = m.adrTsoAl.1'\n'm.adrTsoAl.2'\n'm.adrTsoAl.3
if rt > timeOut & timeOut \== '' then
return err('timeout allocating' spec time() '\n'msg)
if pos('DATA SET IS ALLOCATED TO ANOTHER', msg) < 1 then
return err('allocating' spec'\n'msg)
say time() 'sleep and retry alloc' spec
call sleep 1, 0
end
endProcedure dsnAllocWait
/*--- alloc a dsn or a dd
spec '-'<ddName>
datasetName? disposition? '.'? attributes? (':' newAtts)?
disp default disposition
dd default dd name
retRc erlaubte ReturnCodes (leer = 0)
returns if ok then ddName <rexx for free> otherwise rc -----*/
dsnAlloc: procedure expose m.
parse upper arg spec, pDi, pDD, retRc
parse value dsnSpec(spec) with na dd di rest
if na = '-' then
m.dsnAlloc.dsn = ''
else
m.dsnAlloc.dsn = na
if na == '-' & dd \== '-' & di == '-' & rest = '' then
return dd
if dd == '-' & pDD \== '' then
dd = pDD
if dd == '-' then do
if symbol('m.adrTso.ddNum') = 'VAR' then
dd = m.adrTso.ddNum + 1
else
dd = 1
m.adrTso.ddNum = dd
dd = 'DD' || dd
end
if di = '-' & pDi \== '' then
di = pDi
if di = '-' then
di = 'SHR'
else if pos('(', na) < 1 then
nop
else if di = 'MOD' then
call err 'disp mod for' na
else
di = 'SHR'
if pos('/', na) > 0 then
return csmAlloc(na dd di rest, retRc)
else
return tsoAlloc(na dd di rest, retRc)
endProcedure dsnAlloc
tsoAlloc: procedure expose m.
parse arg na dd disp rest ':' nn, retRc
c = 'alloc dd('dd')' disp
if na \== '-' then
c = c "DSN('"na"')"
else if disp = 'NEW' and nn \== '' then
c = c dsnCreateAtts(,nn)
call outtrap m.adrTsoAl.
alRc = adrTso(c rest, '*')
call outtrap off
if alRc = 0 then do
call errAddCleanup 'call tsoFree' dd', "*"'
return dd 'call tsoFree' dd';'
end
if nn \= '' & wordPos(disp, 'OLD SHR') > 0 ,
& sysDsn("'"m.dsnAlloc.dsn"'") == 'DATASET NOT FOUND' then do
say 'tsoAlloc creating' c rest ':'nn
call adrTso 'alloc dd('dd') new catalog' dsnCreateAtts(na, nn)
call adrTso 'free dd('dd')'
return tsoAlloc(na dd disp rest, retRc)
end
do ax=1 to m.adrTsoAl.0
say m.adrTsoal.ax
end
if retRc = '*' | wordPos(alRc, retRc) > 0 then
return ' ' alRc
call err 'tsoAlloc rc' alRc 'for' c rest
endProcedure tsoAlloc
tsoAtts: procedure expose m.
parse arg dsn
rc = listDsi("'"dsn"' SMSINFO")
if rc = 0 then
mv = ''
else if rc = 4 & sysReason = 19 then do
mv = 'UNITCNT(30)'
say 'multi volume' mv
end
else if rc ^= 0 then
call err 'listDsi rc' rc 'reason' sysReason,
sysMsgLvl1 sysMsgLvl2
al = 'CAT'
al = ''
if right(sysDsSms, 7) == 'LIBRARY' ,
| abbrev(sysDsSms, 'PDS') then
al = al 'DSNTYPE(LIBRARY)'
if sysUnits = 'TRACK' then
sysUnits = 'TRACKS'
al = al "DSORG("sysDSorg") MGMTCLAS("sysMgmtClass")",
"DATACLAS("sysDataClass")" ,
"RECFM("translate('1 2 3', ' 'sysREcFM, ' 123')")",
"LRECL("SYSLRECL")",
"blksize("sysBLkSIZE")",
"SPACE("sysPrimary"," sysSeconds")" sysUnits mv
return al
endProcedure tsoAtts
tsoFree: procedure expose m.
parse arg dd, ggRet
call adrTso 'free dd('dd')', ggRet
call errRmCleanup 'call tsoFree' dd', "*"'
return
endProcedure tsoFree
dsnCreateAtts: procedure expose m.
parse arg dsn, atts, forCsm
forCsm = forCsm == 1
aU = ' 'translate(atts)
if abbrev(atts, ':') then do
parse var atts a1 atts
bl = 32760
rl = substr(a1, 3)
if abbrev(a1, ':F') then do
if rl = '' then
rl = 80
recfm='f b'
bl = bl - (bl // rl)
end
else do
if rl = '' then
rl = bl-4
recfm = substr(a1, 2, 1) 'b'
end
if forCsm then
atts = atts "recfm("space(recfm, 0)") lrecl("rl")",
"blkSize("bl")"
else
atts = atts "recfm("recfm") lrecl("rl") block("bl")"
end
if pos('(', dsn) > 0 & pos(' DSNTYPE(', aU) < 1 ,
& pos(' DSORG(', aU) < 1 then
atts = atts 'dsntype(library) dsorg(po)'
if pos(' MGMTCLAS(', aU) < 1 then
atts = atts 'mgmtclas(COM#A091)'
if pos(' SPACE(', aU) < 1 then
if forCsm then
atts = atts 'space(10, 1000) cylinder'
else
atts = atts 'space(10, 1000) cyl'
if dsn == '' then
return atts
return "dataset('"dsnSetMbr(dsn)"')" atts
endProcedure dsnCreateAtts
/*--- read the dataset specified in ggDsnSpec to stem ggSt -----------*/
readDSN:
parse arg ggDsnSpec, ggSt
ggAlloc = dsnAlloc(ggDsnSpec, 'SHR', 'readDsN')
call adrTso 'execio * diskr' word(ggAlloc, 1) '(stem' ggSt' finis)'
interpret subword(ggAlloc, 2)
return
endSubroutine readDsn
/*--- write the dataset specified in ggDsnSpec from stem ggSt
write ggCnt records if not empty otherwise ggst0
if ggSay 1 then say ... records written to ... -------------*/
writeDSN:
parse arg ggDsnSpec, ggSt, ggCnt, ggSay
if ggCnt == '' then
ggCnt = value(ggst'0')
ggAlloc = dsnAlloc(ggDsnSpec, 'OLD', 'readDsN')
call adrTso 'execio' ggCnt 'diskw' word(ggAlloc, 1) ,
'(stem' ggSt 'open finis)'
interpret subword(ggAlloc, 2)
if ggSay == 1 | m.debug == 1 then
say ggCnt 'records written to' ggDsnSpec
return
endSubroutine writeDsn
copyDSN: procedure expose m.
parse arg frSpec, toSpec, ggSay
frDD = dsnAlloc(frSpec, 'SHR', 'FRDD')
toDD = dsnAlloc(toSpec, 'OLD', 'TODD')
call readDDBegin word(frDD, 1)
call writeDDBegin word(toDD, 1)
cnt = 0
do while readDD(word(frDD, 1), r.)
call writeDD word(toDD, 1), r.
cnt = cnt + r.0
end
call readDDEnd word(frDD, 1)
call writeDDEnd word(toDD, 1)
interpret ';' subword(frDD, 2) '; ; ;' subword(toDD, 2)
if ggSay == 1 | m.debug == 1 then
say cnt 'records copied from' frSpec 'to' to toSpec
return
endSubroutine writeDsn
/* copy adrTso end ****************************************************/
/* copy err begin ******************************************************
messages, errorhandling,help
***********************************************************************/
errIni: procedure expose m.
if m.err.ini == 1 then
return
call outIni
m.err.ini = 1
m.err.handler = ''
m.err.cleanup = ';'
m.err.opt = ''
return
endProcedure errIni
/* configure err -----------------------------------------------------*/
errReset: procedure expose m.
call errIni
parse arg m.err.opt, m.err.handler
if pos('I', translate(m.err.opt)) > 0 then
if errOS() \== 'LINUX' then
if sysVar('sysISPF') = 'ACTIVE' then
call adrIsp 'control errors return'
return
endSubroutine errReset
/*--- error routine: abend with message ------------------------------*/
err:
parse arg ggTxt, ggOpt
call errIni
drop err handler cleanup opt call return
if ggOpt == '' & m.err.handler \== '' then do
if 1 then do /* no detection of recursive err call loop
--> will anyway fail by stack overflow */
interpret m.err.handler
end
else do
/* avoid recursive err call loop */
drop call return
if symbol('m.err.call') \== 'VAR' then
m.err.call = 1
else
m.err.call = m.err.call + 1
if m.err.call > 10 then do
say 'errHandler loop:' m.err.handler
end
else do
m.err.return = 1
call errInterpret m.err.handler
m.err.call = m.err.call - 1
if m.err.return then
return result
end
end
end
call outDst
call errSay ggTxt, 'e'
call errCleanup
if ggOpt == '' then
ggOpt = m.err.opt
ggOpt = translate(ggOpt)
if pos('T', ggOpt) > 0 then do
trace ?r
say 'trace ?r in err'
end
if pos('H', ggOpt) > 0 then do
call errSay 'divide by zero to show stackHistory', 'e'
x = 1 / 0
end
call errSay 'exit(12)', 'e'
exit errSetRc(12)
endSubroutine err
/*--- error routine: user message cleanup exit -----------------------*/
errEx:
parse arg ggTxt
call errIni
call outDst
call errSay ggTxt
call errCleanup
exit 8
endProcedure errEx
errAddCleanup: procedure expose m.
parse arg code
if m.err.ini \== 1 then
call errIni
/* concatenate backwards, then it is executed also backwards */
m.err.cleanup = ';'code || m.err.cleanup
return
endProcedure errAddCleanup
errRmCleanup: procedure expose m.
parse arg code
if m.err.ini \== 1 then
call errIni
cx = pos(';'code';', m.err.cleanup)
if cx > 0 then
m.err.cleanup = left(m.err.cleanup, cx) ,
|| substr(m.err.cleanup, cx + length(code)+2)
return
endProcedure errRmCleanup
errCleanup: procedure expose m.
call errIni
cl = m.err.cleanup
if cl = ';' then
return
m.err.cleanup = ';'
say 'err cleanup begin' cl
call errInterpret cl
say 'err cleanup end' cl
return
endProcedure errCleanup
errInterpret: procedure expose m.
parse arg code
interpret code
m.err.return = 0
return
endProcedure errInterpret
/*--- assert that the passed rexx expression evaluates to true -------*/
assert:
interpret 'assertRes =' arg(1)
if \ assertRes then
call err 'assert failed' arg(1)':' arg(2)
return
endProcedure assert
/*--- output an errorMessage msg with pref pref
split message in lines at '/n' ---------------------------*/
errSay: procedure expose m.
parse arg msg, pref
parse source . . ggS3 . /* current rexx */
if pref == 'e' then
msg = 'fatal error in' ggS3':' msg
else if pref == 'w' then
msg = 'warning in' ggS3':' msg
else if pref \== '' then
msg = pref':' msg
return outNl(msg)
endProcedure errSay
/*--- abend with Message after displaying help -----------------------*/
errHelp: procedure expose m.
parse arg msg, op
call errSay msg, 'e'
call help
call err msg, op
endProcedure errHelp
/*--- return the Operating System we are running on: TSO or LINUX ---*/
errOS: procedure expose m.
parse source os .
return os
endProcedure errOS
/*--- set rc for ispf: -------------------------------------------------
if a cmd is run by ispStart, its RC is ignored,
but ISPF passes the value of the shared varible 3IspfRc
back as return code
----------------------------------------------------------------------*/
errSetRc: procedure expose m.
parse arg zIspfRc
if errOS() \== 'LINUX' then
if sysVar('sysISPF') = 'ACTIVE' then
address ispExec vput 'zIspfRc' shared
return zIspfRc
endProcedure errSetRc
/*--- output a trace message if m.tr is set -----------------------*/
trc: procedure expose m.
parse arg msg
if m.trace == 1 then
call out 'trc:' msg
return
endProcedure trc
debug: procedure expose m.
parse arg msg
if m.debug == 1 then
call out 'debug' msg
return
endProcedure debug
/*--- display the first comment block of the source as help ----------*/
help: procedure expose m.
parse source . . s3 .
call out right(' help for rexx' s3, 79, '*')
do ax=1 to arg()
say ' ' arg(ax)
end
do lx=1 by 1
if pos('/*', sourceLine(lx)) > 0 then
leave
else if lx > 10 then do
call out 'initial commentblock not found for help'
return
end
end
do lx=lx+1 by 1
li = strip(sourceLine(lx), 't', ' ')
if pos('*/', li) > 0 then
leave
call out li
end
call out right(' end help for rexx' s3, 79, '*')
return 4
endProcedure help
/*--- output all lines (separated by '\n') of all args --------------*/
outNl: procedure expose m.
do ax=1 to max(1, arg())
msg = arg(ax)
sx = 0
bx = -1
do lx=1 until bx >= length(msg)
ex = pos('\n', msg, bx+2)
if ex < 1 then
ex = length(msg)+1
call out substr(msg, bx+2, ex-bx-2)
bx = ex
end
end
return 0
endProcedure outNl
/* copy err end *****************************************************/
/* copy ut begin *****************************************************/
/*--- if function warning all3 arguments get evaluated|
e.g if(x=0, 'infinity', 1/0) will fail| -----------*/
if: procedure expose m.
parse arg co, ifTrue, ifFalse
if co then
return ifTrue
else
return ifFalse
endProcedure if
/*--- embedded ASSignement:
assign the second argument to the variable with name in first arg
and return the value assigned ----------------------------------*/
ass:
call value arg(1), arg(2)
return arg(2)
/*--- embedded ASSignement only if NotNull:
assign the second argument to the variable with name in first arg
if the second arg is not null, return new value ---------------*/
assIf:
if arg(2) == '' then
return value(arg(1))
call value arg(1), arg(2)
return arg(2)
/*--- return first nonNull argument ---------------------------------*/
nn:
if arg(1) \== '' then
return arg(1)
if arg(2) \== '' then
return arg(2)
call err 'nn() both args empty'
/*--- embedded ASSignement return NotNull:
assign the second argument to the variable with name in first arg
and return 1 if value not null, 0 if null ----------------------*/
assNN:
call value arg(1), arg(2)
return arg(2) \== ''
/*--- return current time and cpu usage ------------------------------*/
timing: procedure expose m.
return return time() 'ela='time('E') 'cpu='sysvar('syscpu'),
'su='sysvar('syssrv')
timingTest: procedure expose m.
say 'begin' timing() sysvar('sysnode')
do 30000000
end
say 'end ' timing()
return
/*--- sleep several seconds ------------------------------------------*/
sleep: procedure expose m.
parse arg secs, sayIt
if sayit <> 0 then
say 'sleeping' secs 'secs' time()
CALL SYSCALLS 'ON'
ADDRESS SYSCALL "sleep" secs
CALL SYSCALLS 'OFF'
if sayit <> 0 then
say 'slept' secs 'secs' time()
return
endProcedure sleep
/*--- elongate inp with spaces up to given len -----------------------*/
elong: procedure expose m.
parse arg inp, len
if length(inp) >= len then
return inp
return left(inp, len)
endProcedure elong
/*--- quote string txt using quoteChar qu ("""" ==> ") ---------------*/
quote: procedure expose m.
parse arg txt, qu
if qu = '' then
qu = '"'
res = qu
ix = 1
do forever
qx = pos(qu, txt, ix)
if qx = 0 then
return res || substr(txt, ix) || qu
res = res || substr(txt, ix, qx-ix) || qu || qu
ix = qx + length(qu)
end
endProcedure quote
/*--- return the count of occurrences of needle in heyStack ----------*/
posCount: procedure expose m.
parse arg needle, hayStack, start, fin
if start = '' then
start = 1
if fin = '' then
fin = length(hayStack) + 1 - length(needle)
do cnt = 0 by 1
start = pos(needle, haystack, start)
if start < 1 | start > fin then
return cnt
start = start + length(needle)
end
endProcedure posCount
repAll: procedure expose m.
parse arg src, w, new
res = ''
cx = 1
do forever
nx = pos(w, src, cx)
if nx < 1 then
return res || substr(src, cx)
res = res || substr(src, cx, nx-cx) || new
cx = nx + length(w)
end
endProcedure repAll
repAllWords: procedure expose m.
parse arg src, w, new
res = ''
wx = 0
cx = 1
do forever
wx = wordPos(w, src, wx+1)
if wx < 1 then
return res || substr(src, cx)
nx = wordindex(src, wx)
res = res || substr(src, cx, nx-cx) || new
cx = nx + length(w)
end
endProcedure repAllWords
/* copy ut end ********************************************************/
}¢--- A540769.WK.REXX.O13(DBX1123) cre=2012-11-26 mod=2012-11-26-16.20.26 A540769 ---
/* rexx ****************************************************************
synopsis: DBX fun args v1.4
edit macro fuer CS Nutzung von DB2 AdminTool 10.1
(die a* Funktionen gehen auch mit tso dbx ...)
? diese Hilfe
aa,aw,ac pr naechste AuftragsId suchen fuer praefix pr
aa: anzueigen, aw, ac entsprechendes Member editieren
n, nt neuen Auftrag erstellen (nt = test)
q subSys? query und expandiert Scope Zeilen vom Db2Catalog
* fuegt alle bestehenden Objekte ein
* ergaenzt scope Zeile mit infos, z.B tb -> ts
* UNDO um Expansion rueckgaengig zu machen
* mit q, qq, etc. Zeile selekieren,
sonst werden alle expandiert
* funktioniert nicht nur in Auftrag
falls SubSys angegeben wird da gesucht sonst DBAF/DBOF
c opt? compare source gegen target
i subs nct changes in Db2Subsystem subSys importieren
subs = sub(,sub)*: Liste von Subsystemen/Umgebungen
sub: DBAF (lokal), RR2/DBOF (im PTA), RZ8(betr. Subsys)
ET, IT, PA (pta), PR (prod), pq(pta+rq2)
==> Rz/Subsys des PromotionPaths
nct: Nachtraege:
leer: noch nicht in dieses SubSys importierte
= : vom letzten import plus neue
89A : Nachtraege 8, 9 und A
v opt? version files erstellen für altes Verfahren
vc vj vs vt vy ec ej es et ey subsys? nt?
view or edit cdl, jcl, srcDdl, trgDdl, strategY
sw rz? WSL ins RZ rz schicken und clonen, ohne rz multiclone
opt? Optionale Optionen =, -f, -=f etc. (fuer c, v, st)
= statt aktuelle source aus Db2 extrahieren
letzte extrahierte Version als Source brauchen
-f force: ignoriere QualitaetsVerletzungen
cloneWsl dbaMulti Funktionalitaet ist hier implementiert
Typen fuer scope und dbx q (analog adminTool, grossOderKlein ist egal):
type DB TS TB VW AL IX UDT UDF TG SP SQ SY
1stelliges Kuerzel D S T V A X E F J O Q Y
Optionen im Auftrag: v10, v72, keeptgt 0, qCheck 0, dbaCheck 0
Variabeln im Auftrag (expandiert werden $varName imd ${varName})
varName ist case sensitive|)
srcNm NamensKonvention compare source (z.B. DBAF)
trgNm NamensKonvention compare target (z.B. DBAF)
impNm NamensKonvention import Ziel (z.B. DBOF)
subsys Db2 Subsystem (source, target, import, je nachdem)
Optionen: ca, bmc, ibm
Funktionen: ia (imp+ana), ie (ia+exe), ee,ve (exejcl), ew,vw (wsl)
************************************************************************
9.11.2012 W. Keller ey und vy für view/edit strategy
*/ /* end of help
23. 8.2012 W. Keller v1015 für extract
13. 7.2012 W. Keller typo in query scope
18. 5.2012 W. Keller im neuen Auftrag source DX0G target DC0G/DCVG @rz8
PromotionPaths angepasst und vereinfacht
4. 4.2012 W. Keller sqlQuery via csm for dbx q and qualitycheck
4. 4.2012 W. Keller fix, import submits after last import empty, chroi
14. 2.2012 W. Keller ca prototype
23.12.2011 W. Keller bmc prototype
13.12.2011 W. Keller RZ0, ToolPrefix, csmCopy
3.11.2011 W. Keller Zuegeltermine 2012
6. 9.2011 W. Keller v10 RZ8 DE0G UND DM0G ausgebaut
29.08.2011 W. Keller v10 default mit p8 und p9 alias
24.06.2011 W. Keller v10 und v72
8.06.2011 W. Keller stored procedures editiert und version=%
26.05.2011 W. Keller qCheck 0 eingefügt
30.03.2011 W. Keller import et, it, .... , DD0G -> it, trg dc0g, i pa
24.12.2010 W. Keller plexZ (mit location CHROI00Z...)
10.12.2010 W. Keller db2 release 915, damit instead of trigger kommen
19.11.2010 W. Keller viewEdit macht jetzt view für v* statt immer edit
14.10.2010 W. Keller dp4g und dp2g in rz4.* bzw rz2.*, Zuegelsch 2012
24. 8.2010 W. Keller zusätzliche Typen für scope und dbx q
23. 8.2010 W. Keller dbzf ausgebaut
6. 8.2010 W. Keller vc vj vs vt ec ej es et nt? eingebaut
5. 8.2010 W. Keller stepName recTrg instead of recSrc for target
12. 7.2010 W. Keller sq=sequence für compare (fehlt noch in q)
18. 2.2010 W. Keller class=BS0 für PTA (wegen RR25 und RR26)
11. 2.2010 W. Keller dbaCheck mit ex0
9. 2.2010 W. Keller sendJob timeout 600 auch in extractScopeVersion
1.12.2009 W. Keller CSM.RZ1.P0.EXEC statt CMS.DIV...
12.11.2009 W. Keller Qualitätsfehler ohne -f stoppt wieder
25.10.2009 W. Keller DeltaNew überall, -a Optione, batch und do removed
28.09.2009 W. Keller Optionen keepTgt 0 und dbaCheck 0
10.09.2009 W. Keller mask ausschalten falls kein maskFile
07.09.2009 W. Keller fix error with dbaMulti
25.08.2009 W. Keller err statt fehl in line 1001
12.08.2009 W. Keller batch (ohne for) geflickt, ac pr -r: return new mbr
12.08.2009 W. Keller Zuegelschub wird nach Datum ausgesucht
19.05.2009 P. Kuhn DEFER im Masking ignorieren
05.03.2009 P. Kuhn Qualitaets-Check "ts not logged" eingebaut
18.12.2008 p. kuhn neues Delta Merge Verfahren im import fuer DQ0G
18.12.2008 p. kuhn SW fuer DVBP im RZ2 (frueher im RZ4)
10.12.2008 p. kuhn Timeout vom Sendjob von 30 auf 600 Sek. erhoeht.
28.11.2008 w. keller v9 Fehler bei leerer Selektion
24.09.2008 p. kuhn v9 checks
15.09.2008 p. kuhn beim ersten import wird cdl dbaCheck't und editiert
09.09.2008 w. keller target mit RZ (job holt ddl, version aus RZ), opt =
08.08.2008 w. keller import mit wildcards
24.07.2008 w. keller overwrite ausgebaut +25.7
24.06.2008 w. keller fix spezialFall für DB +18.7
19.05.2008 w. keller qualitaetsKontolle in c,v und st und -f Option
13.05.2008 w. keller rw, rs, sw, st und do ... for ... eingebaut
25.02.2008 w. keller subSys argument für dbx q
22.11.2007 w. keller fun v für ObjectCompare Verfahren inkl db ddl save
dq0g mit eigenen Libraries
12.11.2007 w. keller DSN für neuen Wartungsstand
05.06.2007 w. keller neu
***********************************************************************/
/* Ideen, Wünsche ******************************************************
AuftragsId aus Prototyp bestimmen
LCTL
sämtliche infos aus XLS
jedesmal Zwischenspeichern mit und restore Funktion
analyze generieren, falls möglich
batch Funktionen ganzen Zügelschub importieren usw. ==> mit wsh|
generierte Runs starten in richtiger Reihenfolge
mails an Entwickler schicken
Rückmeldung falls keine changes (leeres cdl)
Type Tabelle
char type Variabeln
fuer extract
db d DB
ts s TS
tb/vw/alias a v t - own name
ix x IX
userDefinedTy e - sch udt
function f - sch udf
trigger j TG qual name
storedProc o SP qual name
sequence q SQ qual name
synonym y SY qual name
**** alte Funktion (braucht es nicht mehr) *****************************
sw rz? WSL aus RZ rz holen und clonen, ohne rz mulitclone
rs rz source ddl und version aus RZ rz holen
st opt? rz target ddl und version extrahieren und ins rz schicken
***********************************************************************/
m.debug = 0
call errReset h
if sysvar(sysispf) = 'ACTIVE' then
call adrIsp 'Control errors return'
call jIni
parse upper arg oArgs
oArg1 = word(oArgs, 1)
m.auftrag.dataset = 'DSN.DBX.AUFTRAG'
m.editMacro = 0
m.editProc = 0
if oArgs = '' then do
if adrEdit('macro (oArgs) NOPROCESS', '*') <> 0 then
call errHelp('keine Argumente und kein editMacro rc =' rc)
m.editMacro = 1
call adrEdit 'caps off'
call adrEdit '(x) = member'
m.auftrag.member = x
m.edit.member = x
call adrEdit '(x) = dataset'
m.auftrag.dataset = x
m.edit.dataset = x
end
if oArgs = '' | pos('?', oArgs) > 0 then
exit help()
call dbxIni
m.exitValue = 0
call work oArgs
call sqlDisconnect
exit m.exitValue
/*--- hier wählen wir die wirklich Arbeit aus -----------------------*/
work: procedure expose m.
parse arg wArgs
parse upper var wArgs fun args
args = strip(args)
call mapReset e, 'K'
call mapPut e, 'dol', '$'
call setIf
call stepGroup 1
m.auftrag.force = 0
do while abbrev(fun, '-')
r = substr(fun, 3)
if abbrev(fun, '-A') then do
if verify(r, '.()', 'm') < 1 then do
m.auftrag.member = r
end
else do
m.auftrag.dataset = dsnSetMbr(r)
m.auftrag.member = dsnGetMbr(r)
end
end
else if abbrev(fun, '-F') then do
m.auftrag.force = 1
end
else do
call err 'bad opt' fun 'in' wArgs
end
parse var args fun args
if fun = '' then
return errHelp('fun missing in args:' wArgs)
end
if m.auftrag.dataset = 'A540769.DBX.AUFTRAG' then do
m.libSkels = 'A540769.wk.skels(dbx'
m.libPre = 'A540769.DBX'
end
else if m.auftrag.dataset = 'DSN.DBQ.AUFTRAG' then do
m.libSkels = 'ORG.U0009.B0106.KIDI63.SKELS(dbx'
m.libPre = 'DSN.DBQ'
end
else do
m.libPre = 'DSN.DBX'
m.libSkels = 'ORG.U0009.B0106.KIDI63.SKELS(dbx'
end
if 1 then do /* ??? testSkels */
if userid() = 'A540769' then
m.libSkels = 'A540769.wk.skels(dbx'
say '??? test skels' m.libSkels '|||'
end
m.libSpezial = m.libPre'.spezial'
call configureRZ sysvar('SYSNODE')
m.sysRz = m.myRz
call mapPut e, 'rexxLib', 'ORG.U0009.B0106.KIDI63.EXEC'
call mapPut e, 'libSkels', translate(m.libSkels)
call mapPut e, 'ovrDD', 'DISP=SHR,DSN='m.libPre'.MASK(OVERRIDE)'
call mapPut e, 'libPre', m.libPre
if fun = 'Q' then /* macht process selber | */
return queryScope(args)
if m.editMacro & ^ m.editProc then do
call adrEdit 'process'
m.editProc = 1
end
if wordPos(fun, 'AA AC AW') > 0 then
return nextAuftrag(word(args, 1), substr(fun, 2), word(args, 2))
else if fun = 'COPYDUMMY' then
return copyDummy(args)
else if fun = 'CLONEWSL' then
return cloneWsl(word(args, 1), word(args, 2), 1==word(args, 3))
call memberOpt
if wordPos(fun, 'N NT') > 0 then
call neuerAuftrag (fun = 'NT'), args, m.auftrag.member
else if fun = 'C' | fun = 'V' | fun = 'ST' then
call compare fun, args
else if wordPos(fun, 'I IA IE') > 0 then
call import fun, args
else if fun = 'N' then
call neuerNachtrag args
else if fun = 'RS' then
call receiveSource args
else if fun = 'RW' then
call receiveWSL args
else if fun = 'SW' then
call sendWSL args
else if wordPos(fun, 'VC VE VJ VS VT VW VY EC EE EJ ES ET EW EY') ,
> 0 then
call viewEdit fun, args
else
call errHelp 'bad fun' fun 'in args' args, , ' '
if m.auftrag.orig = m.auftrag.0 | m.auftrag.0 = '' then do
end
else do
if abbrev(m.auftrag.orig, 'rmQu') then do
/* alte | Zeilen loeschen */
oldOr = word(m.auftrag.orig, 2)
ox = 0
do ix = 1 to m.auftrag.0
if abbrev(word(m.auftrag.ix, 1), '|') & ix <= oldOr then
iterate
ox = ox + 1
m.auftrag.ox = m.auftrag.ix
end
m.auftrag.0 = ox
m.auftrag.orig = 'rep'
end
if m.editMacro & m.auftrag.dataset = m.edit.dataset ,
& m.auftrag.member = m.edit.member then do
if m.auftrag.orig = 'rep' then do
call adrEdit 'delete .zf .zl'
m.auftrag.orig = 0
end
do lx = m.auftrag.orig+1 to m.auftrag.0
li = left(m.auftrag.lx, 72)
call adrEdit "line_after .zl = (li)"
end
call adrEdit 'save', 4
end
else do
call writeDsn dsnSetMbr(m.auftrag.dataset,
,m.auftrag.member), m.auftrag.,,1
end
end
return
endProcedure work
/*--- ini the CS config ----------------------------------------------*/
dbxIni: procedure expose m.
m.timeout = 600
m.uId = strip(userid())
if m.uId = 'A234579' then
m.uNa = 'Marc'
else if m.uId = 'A390880' then
m.uNa = 'Martin'
else if m.uId = 'A540769' then
m.uNa = 'Walter'
else if m.uId = 'A666308' then
m.uNa = 'Frank'
else if m.uId = 'A754048' then
m.uNa = 'Alessandro'
else if m.uId = 'A790472' then
m.uNa = 'Agnes'
else if m.uId = 'A828386' then
m.uNa = 'Reni'
else
m.uNa = m.uId
m.scopeTypes = 'DB TS TB VW AL IX UDT UDF TG SP SQ SY'
m.scopeType1 = 'D S T V A X E F J O Q Y'
m.nachtragChars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
/* PromotionPaths */
m.iProm.1 = 'ET IT PQ PA PR'
m.iProm.2 = 'RZ1/DBAF,RZ8/DC0G RZ1/DBTF,RZ8/DD0G,RZZ/DE0G' ,
'RQ2/DBOF,RR2/DBOF RR2/DBOF RZ2/DBOF'
m.iProm.3 = 'RZ1/DBBA,RZ8/DCVG RZ1/DVTB,RZ8/DDVG,RZZ/DEVG' ,
'RQ2/DVBP,RR2/DVBP RR2/DVBP RZ2/DVBP'
m.iProm.0 = 3
return
endProcedure dbxIni
/*--- expand the import target list entered by the user
to a list or rz/subsys, with mySub first and the rest sorted*/
iListExpand: procedure expose m.
parse upper arg srcList
tl = iPromExpand(translate(space(srcList, 0), '/ ', '.,'))
local = ''
remote = ''
do tx=1 to words(tl)
t1 = word(tl, tx)
if abbrev(t1, m.myRz'/') then
local = wordInsAsc(local, t1)
else
remote = wordInsAsc(remote, t1)
end
return local remote
endProcedure iListExpand
/*--- expand a target using iProm infos to a list of rz/subsys -------*/
iPromExpand: procedure expose m.
parse arg inp
if words(inp) <> 1 then do /* several words, expand each */
out = ''
do wx=1 to words(inp)
out = out iPromExpand(word(inp, wx))
end
return out
end
if pos('/', inp) > 0 then /* already expanded */
return inp
if inp == '?*?' then do /* find current promotionPath */
tg = m.scopeTrg.rz'/'m.scopeTrg.subSys
do tx=2 to m.iProm.0
if pos(tg, m.iProm.tx) > 0 then
return m.iprom.tx
end
call err 'target' tg 'not in any PromotionPath'
end
px = wordPos(inp, m.iProm.1) /* one promotion environment */
if px > 0 then
return translate(word(iPromExpand('?*?'), px), ' ', ',')
if length(inp) = 4 then /* prepend rz to subsys */
return m.myRz'/'inp
/* all subsys that match something */
alOr = iPromExpand('?*?')
all = translate(alOr, ' ', ',')
out = ''
do ax = 1 to words(all)
if pos(inp, word(all, ax)) > 0 then
if wordPos(word(all, ax), out) < 1 then
out = out word(all, ax)
end
if out \== '' then
return out
call err 'inp' inp ' not found in promotionPath' alOr
endProcedure iPromExpand
wordInsAsc: procedure expose m.
parse arg lst, wrds
do wx=1
w = word(wrds, wx)
if w == '' then
return space(lst, 1)
do rx=1 to words(lst) while w > word(lst, rx)
end
r1 = word(lst, rx)
if r1 == '' then
lst = lst w
else if w < r1 then
lst = subWord(lst, 1, rx-1) w subWord(lst, rx)
end
endProcedure wordInsAsc
charInsAsc: procedure expose m.
parse arg lst, chrs
do wx=1 to length(chrs)
c = substr(chrs, wx, 1)
do rx=1 to length(lst) while c > substr(lst, rx, 1)
end
r1 = substr(lst, rx, 1)
if rx > length(lst) then
lst = lst || c
else if c < r1 then
lst = left(lst, rx-1) || c || substr(lst, rx)
end
return lst
endProcedure wordInsAsc
/*--- batch funktionen -----------------------------------------------*/
batchOld: procedure expose m.
parse upper arg args
m.auftrag.dataset = 'DSN.DBX.AUFTRAG'
wx = 1
do forever
w1 = word(args, wx)
if w1 = '' then
return 0
if w1 = 'ADATASET' then do
m.auftrag.dataset = word(args, wx+1)
wx = wx+2
end
else if w1 = 'DO' then do
fx = wordPos('FOR', args, wx)
if fx < 1 then
call err 'DO ohne FOR in' args
cmd = subWord(args, wx+1, fx-wx-1)
do wx=fx+1
ww = word(args, wx)
if ww = '' then
leave
m.auftrag.member = ww
say 'batch do' cmd 'for' ww '...'
call work cmd
end
end
else do
if wordPos(translate(w1), 'A AC AW') > 0 then do
drop m.auftrag.member
cmd = subword(args, wx)
end
else do
m.auftrag.member = w1
cmd = subword(args, wx+1)
end
say 'batch do' cmd 'for mbr' m.auftrag.member
call work cmd
return 0
end
end
return 0
endProcedure batchOld
/*--- create the necessary dbx libries in the specified rz -----------*/
copyDummy: procedure expose m.
parse arg rz
call copyDummy1 rz, 'DSN.DBX.AUFTRAG(DUMMY)'
call copyDummy1 rz, 'DSN.DBX.AUTO(DUMMY)'
call copyDummy1 rz, 'DSN.DBX.CDL(DUMMY)'
/* call copyDummy1 rz, 'DSN.DBX.DBAUTO(DUMMY)'
call copyDummy1 rz, 'DSN.DBX.DBSRCCAT(DUMMY)'
call copyDummy1 rz, 'DSN.DBX.DBSRCDDL(DUMMY)'
call copyDummy1 rz, 'DSN.DBX.DBTRGCAT(DUMMY)'
call copyDummy1 rz, 'DSN.DBX.DBTRGDDL(DUMMY)'
*/
call copyDummy1 rz, 'DSN.DBX.JCL(DUMMY)'
call copyDummy1 rz, 'DSN.DBX.MASK'
/* call copyDummy1 rz, 'DSN.DBX.OVRCAT(DUMMY)' */
call copyDummy1 rz, 'DSN.DBX.SENDCF(DUMMY)'
call copyDummy1 rz, 'DSN.DBX.SPEZIAL(DUMMY)'
call copyDummy1 rz, 'DSN.DBX.SRCCAT(DUMMY)'
call copyDummy1 rz, 'DSN.DBX.SRCDDL(DUMMY)'
call copyDummy1 rz, 'DSN.DBX.TRGCAT(DUMMY)'
call copyDummy1 rz, 'DSN.DBX.TRGDDL(DUMMY)'
return 0
endProcedure copyDummy
copyDummy1: procedure expose m.
parse arg sys, dsn
if sysDsn("'"dsn"'") <> 'OK' then
call writeDsn dsn, x, 0, 1
call csmCopy dsn, sys'/'dsn
return
/*--- die Konfiguration pro db2 Subsys -------------------------------*/
configureSubsys: procedure expose m.
parse arg rz, subsys
call mapPut e, 'subsys', subsys
if rz = 'RZ8' then
call mapPut e, 'location', 'CHROI000'subsys
else if rz = 'RZZ' then
call mapPut e, 'location', 'CHROI00Z'subsys
else
call mapPut e, 'location', 'CHSKA000'subsys
return
endProcedure configureSubsys
/*--- die Konfiguration pro RZ ---------------------------------------*/
configureRZ: procedure expose m.
parse arg rz, rel px, toolV
if rz = 'RZ0T' then
rz = 'RZ0'
if rz = '' then
rz = m.myRz
else
m.myRz = rz
m.jobCard = 'jobCa'
call mapPut e, 'jobCla', 'LOG0'
rx = pos(rz'/', m.iProm.2)
if rx < 1 then
m.mySub = '?noSubsys?'
else
m.mySub = substr(m.iProm.2, rx+4, 4)
call mapPut e, 'rz', rz
zz = overlay('Z', rz, 2)
call mapPut e, 'zz', zz
if rel == '' then
rel = 1015
if px == '' then
px = if(rz\=='RZ0', 'P0', 'PA')
call mapPut e, 'db2rel', rel
call mapPut e, 'db2relAl', px
call mapPut e, 'dsnload', if(rz=='RZ0', 'DSN', 'DB2@') ,
|| '.'zz'.'px'.DSNLOAD'
call mapPut e, 'capref', 'DSN.CADB2.'zz'.P0'
call mapPut e, 'caload', 'DSN.CADB2.'zz'.P0.CDBALOAD'
call mapPut e, 'cacr', DBX
if toolV \== '' then do
say 'v72 nicht mehr untertstuetzt, v10 wird benutzt'
toolV = mapGet(e, 'toolVers', 10)
toolV = ''
end
call mapPut e, 'toolVers', toolV
/* if toolV == 10 then do */
call mapPut e, 'toolPreP', 'DSN.TOOLS.'zz'.P0'
call mapPut e, 'toolPreC', 'DSN.TOOLS.'zz'.C0'
/* end
else if toolV == 72 then do
call mapPut e, 'toolPreP', 'DSN.TOOLS.'zz'.P8'
call mapPut e, 'toolPreC', 'DSN.TOOLS.'zz'.C8'
end
else
call err 'bad toolVersion' toolV
*/ if rz = 'RZ1' then do
if m.libPre = 'DSN.DBQ' then do
m.mySub = 'DQ0G'
m.jobCard = 'jobCQ'
call mapPut e, 'toolPreP', 'DSN.ADB72.P0'
call mapPut e, 'toolPreC', 'DSN.ADB72.C0'
end
end
else if rz = 'RR2' then do
call mapPut e, 'jobCla', 'BS0'
end
return
endProcedure configureRZ
/*--- Member Namen prüfen und Auftrag lesen---------------------------*/
memberOpt: procedure expose m.
if m.auftrag.dataset <> m.libPre'.AUFTRAG' then
call err 'dbx sollte' m.libPre'.AUFTRAG editieren, nicht' ,
m.auftrag.dataset
m8 = substr(m.auftrag.member, 8, 1)
if pos(m8, 'CW') < 1 then
call err 'Member muss 8 stellig sein und mit C oder W enden',
'nicht' m.auftrag.member
m.optOvr = 0 /* (m8 == 'W') & (m.libPre ^== 'DSN.DBQ') */
m.optAuto = 1
call readAuftrag '', m.auftrag.dataset, m.auftrag.member
return
endProcedure memberOpt
/*--- Auftrag einlesen -----------------------------------------------*/
readAuftrag: procedure expose m.
parse arg sys, pds, mbr
editingAuftrag = 0
if sys = '' & m.editMacro then do
call adrEdit '(em) = member'
call adrEdit '(ed) = dataset'
editingAuftrag = ed = pds & em = mbr
end
if editingAuftrag then do
if adrEdit('(zl) = lineNum .zl', 4) = 4 then
zl = 0
m.auftrag.0 = zl
do lx=1 to zl
call adrEdit "(li) = line" lx
m.auftrag.lx = li
end
end
else do
dsn = dsnSetMbr(m.auftrag.dataset, m.auftrag.member)
if sys = '' then
if sysDsn("'"dsn"'") <> 'OK' then
call err 'auftrag' dsn 'existiert nicht:' sysDsn("'"dsn"'")
call readDsn sys'/'dsn, m.auftrag.
end
m.auftrag.orig = m.auftrag.0
return
endProcedure readAuftrag
/*--- naechste AuftragsNummer suchen ---------------------------------*/
nextAuftrag: procedure expose m.
parse arg pre, make, rz opt
if abbrev(rz, '-') then do
opt = rz
rz = ''
end
opt = translate(opt)
if rz = '' | rz = '*' then
rz = m.myRz
if m.myRz <> 'RZ1' then
call err 'Auftrag für RZ' rz 'muss aus RZ1 erstellt werden'
auft = m.libPre'.AUFTRAG'
call mAdd mCut(na, 0), auft, 'DSN.DBA.CLON.WSL'
max = pre
do nx=1 to m.na.0
lmm = lmmBegin(dsnSetMbr(m.na.nx, pre'*'))
mb = lmmNext(lmm)
fi = mb
la = ''
do cnt=2 by 1 while mb <> ''
la = mb
mb = lmmNext(lmm)
end
call lmmEnd lmm
say left(fi, 8) '-' left(la, 8)right(cnt-2, 5) ,
'member in' dsnSetMbr(m.na.nx, pre'*')
if la >> max then
max = la
end
nn = left(max, 7, '0')
do cx=7 by-1 to length(pre)+1,
while pos(substr(nn, cx, 1), '0123456789') > 0
end
if cx >= 7 then
nn = ''
else do
pp = 1 + substr(nn, cx+1)
if length(pp) > 7-cx then
nn = ''
else
nn = left(nn, cx) || right(pp, 7-cx, 0)
end
if length(nn) <> 7 then do
say 'max Auftrag' max 'kein naechster bestimmbar'
end
else if pos(make, 'CW') < 1 then do
say 'max Auftrag' max 'naechster' nn'?'
end
else do
nn = nn || make
say 'max Auftrag' max 'naechster' nn
m.auftrag.0 = 0
call neuerAuftrag 0, rz, nn
dsnNN = dsnSetMbr(auft, nn)
call writeDsn dsnNN, m.auftrag.
if opt = '-R' then
nop
else if rz = 'RZ1' then
call adrIsp "edit dataset('"dsnNN"')", 4
else
call writeDsn rz'/'dsnNN, m.auftrag.
end
m.auftrag.0 = '' /* do not write back the new auftrag | */
if opt = '-R' then
m.exitValue = nn
return 0
endProcedure nextAuftrag
/*--- einen neuen Auftrag initialisieren -----------------------------*/
neuerAuftrag: procedure expose m.
parse arg isTst, rz, auftName
if rz = '' then
rz = m.myRz
else
call configureRz rz
if isTst then do
ow = m.uid
maPr = 'T' || left(translate(m.uNa), 3, 'X')
comMask = m.libPre'.MASK('maPr'PROT)'
impMask = m.libPre'.MASK('maPr'$subsys)'
end
else do
ow = 'S100447'
comMask = m.libPre'.MASK(PROT$trgNm)'
impMask = m.libPre'.MASK($trgNm$impNm)'
end
comIgno = m.libPre'.MASK(IGNORE)'
impIgno = ''
if m.auftrag.0 <> 0 then
call err 'fun n erstellt neuen Auftrag nur in leeres Member'
/* wahrscheinlichen Zügelschub bestimmen*/
zglS = '20130208 20130510 20130809 20131108 2014???? 2015????'
zi = date('s')
zi = overlay(right(substr(zi, 5, 2)+1, 2, 0), zi, 5)
do wx=1 while zi >> word(zglS, wx)
end
zglSchub = if(isTst, 'test', word(zglS, wx) '??:00')
call mAdd auftrag ,
, addDateUs('auftrag ' auftName ow) ,
, ' Zuegelschub' zglSchub ,
, ' Besteller pid name tel' ,
, ' comMask ' comMask ,
, ' comIgno ' comIgno ,
, ' impMask ' impMask ,
, ' impIgno ' impIgno ,
, 'source RZ8.DX0G' ,
, ' ts' left(auftName, 4)'A1P.A%' ,
, 'target RZ8.'if(left(auftName, 2) == 'XB', 'DCVG', 'DC0G')
return
endProcedure neuerAuftrag
neuerNachtrag: procedure expose m.
parse upper arg opt
call analyseAuftrag
call addNachtrag
return
endProcedure neuerNachtrag
nextNachtrag: procedure expose m.
parse arg nt
nx = pos(nt, m.nachtragChars) + 1
if nx > length(m.nachtragChars) then
call err 'kein Nachtrag char mehr nach' nt
return substr(m.nachtragChars, nx, 1)
m.e.nachtrag = nt
return nt
endProcedure nextNachtrag
/*--- compare: Funktionen c, v und st --------------------------------*/
compare: procedure expose m.
parse upper arg fun, sendToRz
opts = ''
do forever
if abbrev(sendToRz, '=') then do
sendToRz = strip(substr(sendToRz, 2))
opts = opts'='
end
else if abbrev(sendToRz, '-') then do
opts = opts || substr(word(sendToRz, 1), 2)
sendToRz = subword(sendToRz, 2)
end
else
leave
end
cmpLast = pos('=', opts) > 0
if fun = 'C' then
function = 'compare'
else if fun = 'ST' then do
if sendToRz = '' | sendToRz = '*' then
call errHelp 'ST without sendToRz'
call mapPut e, 'toRz', sendToRz
function = 'sendTarget' sendToRz
end
else if fun = 'V' then
function = 'version'
else
call err 'bad fun' fun
call analyseAuftrag
if (m.scopeSrc.rz = m.sysRz ,
| (wordPos(m.scopeSrc.rz, 'RZ8 RZZ') > 0 & m.sysRZ = 'RZ1') ,
) & m.e.qCheck \== 0 then do
if qualityCheck(getDb2Catalog('SRC')) then
if pos('F', opts) < 1 & \ m.auftrag.force then
return
else
say 'wegen Option -f Verarbeitung',
'trotz Qualitaetsfehlern'
end
nacLast = m.e.nachtrag
if nacLast = '?' & cmpLast then
call err 'c = oder v = ohne vorangaengiges c oder v'
if nacLast = '?' | m.nacImp then
m.e.nachtrag = nextNachtrag(nacLast)
call mapPut e, 'mbrNac', left(m.e.auftrag, 7)m.e.nachtrag
m.o.0 = 0
call readDsn m.libSkels || m.jobCard')', m.i.
call mapPut e, 'jobName', 'Y'left(m.e.auftrag, 7)
call mapPut e, 'fun', function opts
call namingConv m.scopeTrg.rz, m.scopeTrg.subsys, 'trgNm'
call namingConv m.scopeSrc.rz, m.scopeSrc.subsys, 'srcNm'
call mapExpAll e, o, i
call mapPut e, 'mask', shrDummy(mapExp(e, m.e.comMask), 1)
call mapPut e, 'ignore', shrDummy(mapExp(e, m.e.comIgno))
call bmcVarsProf 0
if 0 then /* db ddl extrahieren ja / nein ???? */
call extractSrcTrg o, 'DB', cmpLast left(m.e.auftrag, 7)nacLast
if m.e.tool == ibm then
call extractSrcTrg o, '', cmpLast left(m.e.auftrag, 7)nacLast
else if m.e.tool == bmc then
call bmcSrcTrg cmpLast m.e.auftrag
else if m.e.tool == ca then do
call configureSubsys m.scopeSrc.rz, m.scopeSrc.subsys
end
if fun = 'C' then do
if m.optOvr then do
call mapPut e, 'ovr', 'OVR'
call readDsn m.libSkels'Ovr)', m.ovr.
call mapExpAll e, o, ovr
call mapPut e, 'src', 'OVR'
end
if m.e.keepTgt == 0 then
call mapPut e, 'keepTgt', ''
else
call mapPut e, 'keepTgt', 'KEEPTGT,'
call readDsn m.libSkels ,
|| if(m.e.tool=='IBM', 'comp', left(m.e.tool, 1)'Com'),
|| ')', m.cmp.
if m.e.tool == ca then
call caDDL o, cmp, scopeSrc, dsnGetMbr(mapGet(e, 'mask'))
else
call mapExpAll e, o, cmp
end
if fun = 'ST' then do
call readDsn m.libSkels'ST)', m.st.
call mapExpAll e, o, st
end
call writeSub o
call mAdd auftrag, addDateUs(function ,
left('===', 3*cmpLast)m.e.nachtrag,
m.scopeTrg.rz'.'m.scopeTrg.subSys ,
mapExp(e, "'${libPre}." ,
|| if(m.e.tool=="IBM","srcCat",m.e.tool"Cdl") ,
|| "($mbrNac)'"))
return
endProcedure compare
/*--- find the naming convention for a rz and subsystem --------------*/
namingConv: procedure expose m.
parse arg rz, subsys, var
if rz = '.' then do
if pos('.', subSys) > 0 then
call err 'namingConv old target' subsys
if pos('/', subSys) > 0 then
parse var subsys rz '/' subsys
else
rz = m.sysRz
end
if strip(rz) = 'RZ1' then
t = strip(subsys)
else
t = 'DBOF'
if var ^== '' then
call mapPut e, var, t
return t
endProcedure namingConv
/*--- write jcl and submit it ----------------------------------------*/
writeSub: procedure expose m.
parse arg o, rz, noWri
userSubmits = 0 /* edit jcl and user submits it */
if noWri <> 1 then do
jcl = m.libPre'.JCL('m.e.auftrag')'
call mStrip o, 't'
do ox=1 to m.o.0
if length(m.o.ox) > 70 then
call debug 'o.'ox 'len' length(m.o.ox)':' m.o.ox
end
call writeDsn jcl, m.o., ,1
if userSubmits then /* edit dataset and user may submit it */
call adrIsp "edit dataset('"jcl"')", 4
end
if (noWri <> 1) & (rz = '' | rz = m.sysRz) then do
if ^ userSubmits then
call adrTso "sub '"jcl"'"
end
else do /* submit jcl in another rz */
sysl = csmSysDsn(rz'/')
if sysl = '*/' then
sysl = ''
iral = dsnAlloc(sysl 'SYSOUT(T) dd(ir) .WRITER(INTRDR)')
call writeDDBegin ir
call writeDD ir, m.o.
call writeDDend 'IR'
interpret subword(irAl, 2)
end
return
endProcedure writeSub
/*--- view or edit a member -----------------------------------------*/
viewEdit: procedure expose m.
parse upper arg fun 2 wh, nac
call analyseAuftrag
if wh = 'Y' then do
if length(word(nac, 1)) == 4 then
d = word(nac, 1)
else
d = m.imp.last
n1 = right(m.imp.d.nachtrag, 1)
if nac <> '' then
if length(word(nac, words(nac))) == 1 then
n1 = word(nac, words(nac))
d = m.libPre || d'.STRY('left(m.e.auftrag,7)n1')'
end
else do
if wh = 'C' then
d = copies(m.e.tool, m.e.tool \== 'IBM')'CDL'
else if wh = 'E' then
d = 'EXEJCL'
else if wh = 'J' then
d = 'JCL'
else if wh = 'S' then
d = 'SRCDDL'
else if wh = 'T' then
d = 'TRGDDL'
else if wh = 'W' then
d = 'BMCWSL'
if nac == '' then
nac = m.e.nachtrag
if wh == 'J' then
d = m.libPre'.'d'('m.e.auftrag')'
else
d = m.libPre'.'d'('left(m.e.auftrag,7)nac')'
end
if fun == 'E' then
call adrIsp "edit dataset('"d"')", 4
else
call adrIsp "view dataset('"d"')", 4
return
endProcedure viewEdit
/*--- return jcl either dd dummy or dd disp=shr,dsn=... --------------*/
shrDummy: procedure expose m.
parse arg dsn, keepEmpty
if dsn \= '' then
return 'DISP=SHR,DSN='translate(dsn)
else if keepEmpty == 1 then
return ''
else
return 'DUMMY'
endProcedure shrDummy
/*--- funktion i -----------------------------------------------------*/
import: procedure expose m.
parse upper arg fun, rzSubSysList opt .
call analyseAuftrag
if m.e.nachtrag = '?' then
call err 'vor i=import braucht es compare'
if opt <> '' then
nop
else if words(m.targets) > 1 then
call err 'i=import mit mehreren targets muss Nachtraege',
'explizit angeben, z.B. dbx i' rzSubSysList m.e.nachtrag
else if m.cmpLast then
call err 'i=import mit c = oder v = muss Nachtraege',
'explizit angeben, z.B. dbx i' rzSubSysList m.e.nachtrag
if ^ m.nacImp then do
cdl = cdlDsnCheck(m.e.nachtrag)
if m.e.dbaCheck == 0 then nop
else if m.e.tool \== 'IBM' then
say 'dbaCheck for' m.e.tool 'not implemented'
else do
if m.editMacro then
dbaParm = 'EX0'
else
dbaParm = 'END'
call adrIsp "edit dataset('"cdl"') macro(dbacheck)",
"parm(dbaParm)", 4
end
end
call mapPut e, 'expOpt', if(m.e.keepTgt, 'A', 'X')
call readDsn m.libSkels || m.jobCard')', m.jc.
call readDsn m.libSkels || left(m.e.tool, m.e.tool\=='IBM')'Imp)',
, m.ic.
list = iListExpand(rzSubSysList, 0)
if list = '' then
call err 'no targets in list "'rzSubSysList'"'
impCnt = 0
call configureRz m.sysRz
if fun = 'IA' then
fu2 = 'Ana'
else if fun = 'IE' then
fu2 = 'AnaExe'
else
fu2 = ''
call mapPut e, 'fun', strip('import'fu2 left(rzSubSysList, 30))
call mapPut e, 'jobName', 'Y'left(m.e.auftrag, 7)
m.e.impMasks = ''
fu2 = fun fu2
m.jOut.0 = 0
call mapExpAll e, jOut, jc /* Jobcard expandieren */
call stepGroup 1
j0 = m.jOut.0
rz = '?'
do lx = 1
r1 = word(list, lx)
parse var r1 r '/' subsys
if r <> rz | subsys = '' then do
if impCnt <> 0 then do
if rz <> m.sysRz then do
if symbol('m.sCdl.0') \== 'VAR' then do
call readDsn m.libSkels'sCdl)', m.sCdl.
call readDsn m.libSkels'subRz)', m.subRz.
end
if m.impMbrs == '' then
call err 'int no impMbrs'
call mapPut e, 'mbrNac',
, left(m.e.auftrag, 7)left(m.impMbrs, 1)
call mapPut e, 'toRz', m.myRz
call mapExpAll e, jOut, sCdl
jy = m.jOut.0
jx = jy-1
m.jOut.0 = jx
jla = m.jOut.jy
cx = pos(')-', m.jOut.jx)
if cx < 1 | substr(m.jout.jx, cx+2) \= '' then
call err 'bad sCdl line' jx':'m.jOut.jx
m.jOut.jx = left(m.jOut.jx,cx-1) '-'
do mx=2 to length(m.impMbrs)
call mAdd jOut, left('', cx-10)',' ,
|| left(m.e.auftrag,7) ,
|| substr(m.impMbrs, mx,1) '-'
end
call mAdd jOut, left('', cx-10)') -'
call mAdd jOut, jLa
call mapExpAll e, jOut, subRz
jy = m.jOut.0
jla = m.jOut.jy
m.jOut.0 = jy-1
call mAddSt jOut, jAft
call mAdd jOut, jLa
end
end
if subsys = '' then do
if m.jout.0 > j0 then
call writeSub jOut
return
end
rz = r
if rz = m.sysRz then do
job = jOut
m.jAft.0 = 'noUse'
end
else do
job = jAft
m.jAft.0 = 0
end
m.impMbrs = ''
call configureRz rz
impCnt = 0
call mapPut e, 'fun', 'import'fu2 rz
call mapPut e, 'fu2', fun
call configureSubsys rz
end
if length(subsys) <> 4 then
call err 'ungueltiges db2SubSys' subsys 'im import' rz
call configureSubsys rz, subsys
if rz = m.sysRz then
impCnt = impCnt + importAdd(job, subsys, opt, ic, fu2)
else if m.sysRz == 'RZ1' then
impCnt = impCnt + importAdd(job, rz'/'subsys, opt, ic, fu2)
else
call err 'cannot import into' rz 'from' m.sysRz
end
endProcedure import
/*--- add a single import to jcl in o --------------------------------*/
importAdd: procedure expose m.
parse upper arg o, rzSubSys, opt, ic, fun fu2
/* Uebergang altes auf neue Delta Merge Verfahren ++++++++ begin */
deltaNew = 1 /* abbrev(rzSubSys,'RZ1.'),
| (pos('.',rzSubSys) < 1 & m.sysRz = 'RZ1') */
if deltaNew then do /* neues delta merge verfahren */
inDdn = 'DCHG'
call mapPut e, 'cType', "''''T''''"
end
else do /* altes delta merge verfahren */
inDdn = 'SRCDDN2'
call mapPut e, 'cType', "''''C''''"
end
call mapPut e, 'inDdn', inDdn
/* Uebergang altes auf neue Delta Merge Verfahren ++++++++ end */
if opt ^= '' & opt ^= '=' then do
nachAll = opt
end
else if symbol('m.imp.rzSubSys.nachtrag') ^== 'VAR' then do
nachAll = m.compares
end
else do
if opt = '=' then
la = left(m.imp.rzSubSys.nachtrag, 1)
else
la = right(m.imp.rzSubSys.nachtrag, 1)
cx = pos(la, m.compares)
if cx < 1 then
call err 'nachtrag' la 'von' rzSubSys m.rzSubSys.change ,
'nicht in Compare Liste' m.compares
nachAll = substr(m.compares, cx + (opt ^= '='))
end
if nachAll = ' ' then do
say 'alle Nachtraege schon importiert fuer' rzSubSys
return 0
end
call mapPut e, 'mbrChg', left(m.e.auftrag, 7)right(nachAll, 1)
if length(nachAll) = 1 then
nachVB = nachAll
else
nachVB = left(nachAll, 1)'-'right(nachAll, 1)
trgNm = ''
do nx=1 to m.nachtrag.0
if pos(m.nachtrag.nx, nachAll) < 1 then
iterate
act = namingConv('.', m.nachtrag.nx.trg)
if trgNm = '' then
trgNm = act
else if trgNm <> act then
call err 'targetNaming' trgNm 'wechselt zu' act ,
'fuer nachtrag' m.nachtrag.nx 'auf' m.nachtrag.nx.trg
end
m.imp.seq = m.imp.seq + 1
if length(m.imp.seq) > 3 then
call err 'import Sequenz Ueberlauf' m.imp.seq
m.imp.seq = right(m.imp.seq, 3, 0)
chaPre = m.e.auftrag'.'nachVB'.'m.imp.seq
zs = translate(strip(right(m.e.zuegelSchub, 6)))
if m.e.tool = 'IBM' then
call mapPut e, 'change',chaPre'.'zs/*'.V'mapGet(e,'toolVers')*/
else
call mapPut e, 'change',m.e.auftrag || m.imp.seq'_'zs
call mapPut e, 'changeRem', 'zs' m.e.zuegelSchub ,
'auf' m.e.auftrag nachAll 'import DBX'
call mapPut e, 'deltaVers', chaPre'.DLT'
call namingConv '.', rzSubSys, 'impNm'
call namingConv m.scopeSrc.rz, m.scopeSrc.subsys, 'srcNm'
call mapPut e, 'trgNm', trgNm
call mapPut e, 'ignore', shrDummy(mapExp(e, m.e.impIgno))
cdlPds = m.libPre'.CDL'
call mapPut e, 'cdlPds', cdlPds
call bmcVarsProf 1
if m.impMbrs = '' & m.myRz \== m.sysRz then
call mapExpAll e, o, jc /* Jobcard expandieren */
m.impMbrs = charInsAsc(m.impMbrs, nachAll)
if m.e.tool = 'CA' then do
call mapPut e, 'mbrNac', left(m.e.auftrag, 7)right(nachAll, 1)
call mapPut e, 'stry', mapGet(e, 'mbrNac')
call mapPut e, 'impMaskMbr', dsnGetMbr(mapExp(e, m.e.impMask))
call mapPut e, 'comIgnoMbr', dsnGetMbr(mapExp(e, m.e.comIgno))
call mapPut e, 'ddlin', m.libPre'.CACDL('mapGet(e, 'mbrNac')')'
call mapPut e, 'bpid', m.libPre'.CASTRAT-'mapGet(e, 'mbrNac') ,
|| '-'m.imp.seq
end
impM = translate(mapExp(e, m.e.impMask))
m.e.impMbr = dsnGetMbr(impM)
call mapPut e, 'mask', shrDummy(impM, 1)
if m.e.impMbr = '' | m.e.tool \== 'CA' then do
end
else do
mapCdl = m.libPre'MAP.'m.e.impMbr'('mapGet(e, 'mbrNac')')'
call mapPut e, 'ddlout', mapCdl
if wordPos(m.e.impMbr, m.e.impMasks) < 1 then do
call importMapping o, m.e.impMbr, ic, nachAll, deltaNew,
, mapCdl
call stepGroup
m.e.impMasks = m.e.impMasks m.e.impMbr
end
call mapPut e, 'ddlin', mapCdl
call mapPut e, 'impMaskMbr', ''
end
call importExpand o, ic, nachAll, deltaNew
if wordPos(fun, 'IA IE') > 0 then do /* analyse step */
if m.e.tool = ibm then
call err 'fun' fun 'not implemented for' m.e.tool
call addIf o
call readDsn m.libSkels || left(m.e.tool, 1)'Ana)', m.ia.
call mapExpAll e, o, ia
call caGlbChg o, dsnGetMbr(mapGet(e, 'mask'))
call addIf o, 'end'
call setIf 'ANA', 0 4
end
if wordPos(fun, 'IE') > 0 then do /* execute step */
call readDsn m.libSkels || left(m.e.tool, 1)'Exe)', m.ie.
call addIf o
call mapExpAll e, o, ie
ej = mapExp(e, "'${libPre}.EXEJCL($mbrChg)'")
call addIf o, 'end'
call setIf 'RUN'
j.1 = 'exeJcl for' m.e.auftrag 'noch nicht generiert'
call writeDsn ej, j., 1, 1
end
if m.e.tool <> ibm then
ifl2 = overlay(' ', m.ifLine, pos('IF', m.ifLine))
ifl2 = overlay(') THEN', ifl2, pos('THEN', ifl2))
call mAdd o, '// IF ABEND OR NOT (', ifl2,
, '//PERROR EXEC PGM=IDCAMS ',
, '//SYSPRINT DD SYSOUT=*',
, '//SYSIN DD *',
, ' SET MAXCC = 12',
, '// ENDIF'
call mAdd auftrag,
, addDateUs("import" rzSubsys nachAll mapGet(e, 'change') fu2)
call stepGroup
return 1
endProcedure importAdd
stepGroup: procedure expose m.
parse arg f
if f == 1 then
no = 1
else
no = m.e.stepNo + 1
m.e.stepNo = right(no, 3, 0)
m.e.stepGr = 'S'm.e.stepNo
call mapPut e, 'stp', m.e.stepGr
return
endProcedure stepGroup
setIf: procedure expose m.
parse arg stp, codes
if stp == '' then
li = ''
else do
if length(stp) < 5 then
stp = m.e.stepGr || stp
li = '// IF' stp'.RUN AND'
pr = '('
if codes == '' then
codes = 0
do cx=1 to words(codes)
li = li pr stp'.RC='word(codes,cx)
pr = 'OR'
end
li = li ') THEN'
end
if length(li) > 72 then
call err 'if too long' li
m.ifLine = li
if li == '' then
call mapPut e, 'endIf', '//* no endIf'
else
call mapPut e, 'endIf', '// ENDIF'
return
endProcedure setIf
addIf: procedure expose m.
parse arg o, opt
if m.ifLine == '' then
return
else if opt == 'end' then
call mAdd o, '// ENDIF'
else
call mAdd o, m.ifLine
return
endProcedure addIf
importExpand: procedure expose m.
parse arg o, ic, nachAll, deltaNew
call addIf o
if m.e.tool = 'CA' then
call mapPut e, 'impMaskMbr', 'DBXEQ'
sto = mapExpAllAt(e, o, ic, 1, 1)
do while sto ^= ''
parse var sto lx cx
w = word(substr(m.ic.lx, cx), 1)
if w == '$@maskDD' then do
if mapGet(e, 'mask') \= '' then
call mAdd o, '//MSKDDN1 DD' mapGet(e, 'mask')
end
else if w == '$@maskII' then do
if mapGet(e, 'mask') \= '' then
call mAdd o, " MSKDDN='MSKDDN1',",
, " MSKOWN='DUMMY',",
, " MSKNAME='DUMMY',"
end
else if w == '$@bmcCdl' then do
le = left('//IMPORTIN', 13)
do ix=1 to length(nachAll)
call mAdd o, le || 'DD DISP=SHR,DSN=',
|| cdlDsnCheck(substr(nachAll, ix, 1))
le = left('//', 13)
end
end
else if w ^== '$@cdl' then do
call err 'unbekannte Anweisung' w 'in Zeile' cx m.ic.cx
end
else if deltaNew then do
do ix=1 to length(nachAll)
call mAdd o, left('//'inDdn || right(ix,3,0), 13) ,
|| 'DD DISP=SHR,DSN=',
|| cdlDsnCheck(substr(nachAll, ix, 1))
end
end
else do
le = left('//'inDdn, 13)
do ix=1 to length(nachAll)
call mAdd o, le || 'DD DISP=SHR,DSN=',
|| cdlDsnCheck(substr(nachAll, ix, 1))
le = left('//', 13)
end
end
sto = mapExpAllAt(e, o, ic, lx, cx + length(w))
end
if m.e.tool = 'CA' & mapGet(e, 'impMaskMbr') == '' then
m.o.0 = m.o.0 -2 /* die beiden maskZeilen entfernen */
call addIf o, 'end'
call setIf 'AUTO'
return
endProcedure importExpand
importMapping: procedure expose m.
parse arg o, msk, ic, nachAll, deltaNew, mapCdl
say '???adding impMbr' msk
call addIf o
mStry = left(m.e.auftrag, 7)'#'
call mapPut e, 'mStry', mStry
interpret subword(dsnAlloc(mapCdl '::F'), 2)
call mAdd o,'//****** importMasking' mask 'begin ???????'
call readDsn m.libSkels'CMAP)', m.im.
call mapExpAll e, o, im
call mapPut e, 'ddlout', mapCdl
call caGlbChg o, mapGet(e, 'impMaskMbr')
call mAdd o,'//****** importMasking' mask 'end ???????'
call setIf 'MANA', 0
call addIf o, 'end'
return
endProcedure importMapping
/*--- DSN für CDL des Nachtrags zurückgeben und auf Existenz prüfen---*/
cdlDsnCheck: procedure expose m.
parse arg nt
cdl = m.libPre'.'copies(m.e.tool, m.e.tool\=='IBM') ,
|| 'CDL('left(m.e.auftrag, 7) || nt')'
rr = sysDsn("'"cdl"'")
if rr <> 'OK' then
call err 'cdl fuer' nt'. Nachtrag fehlt:' cdl rr
return cdl
endProcedure cdlDsnCheck
/*--- Date und user rechtsbuendig einfuegen --------------------------*/
addDateUs: procedure expose m.
parse arg le
return le right(date(s) time() m.uNa, 71-length(le))
endProcedure addDateUs "'"
/*--- den aktuellen Auftrag analysieren ------------------------------*/
analyseAuftrag: procedure expose m.
m.scopeSrc.0 = 0
m.scopeSrc.subSys = m.mySub
m.scopeSrc.rz = m.myRz
m.catSrc.0 = ''
m.scopeTrg.0 = 0
m.scopeTrg.subSys = m.mySub
m.scopeTrg.rz = m.myRz
m.catTrg.0 = ''
m.imp.seq = -1
m.nacImp = 0
m.e.impMask = ''
m.e.comMask = ''
m.e.tool = 'IBM'
if m.auftrag.0 = 0 then
call err 'Auftrag ist leer'
vaWo = 'AUFTRAG'
varWo = 'ZUEGELSCHUB BESTELLER COMMASK COMIGNO IMPMASK IMPIGNO' ,
'KEEPTGT DBACHECK QCHECK V72 V10 CA BMC IBM'
ignWo = 'SW SENDWSL RECEIVEWSL RECEIVESOURCE'
ignCh = '*|'
lev1Wo = 'SCOPE SOURCE TARGET COMPARE VERSION IMPORT SENDTARGET' ,
varWo 'PROTOTYPERZ'
do lx=1 to m.auftrag.0
li = m.auftrag.lx
parse upper var li w1 w2 w3 .
if w1 = '' | pos(left(w1, 1), ignCh) > 0 ,
| wordPos(w1, ignWo) > 0 then
iterate
if wordPos(w1, vaWo) < 1 then
call err 'operation' w1 ', erwartet' vaWo 'in Zeile' lx li
w2 = translate(word(li, 2))
if w1 = 'AUFTRAG' then do
if w2 ^= m.auftrag.member then
call err 'auftrag' w2 '<> member' m.auftrag.member
m.e.auftrag = w2
m.e.nachtrag = '?'
m.nachtrag.0 = 0
if dataType(left(w3, 1), 'U') & length(w3) <= 8 then
ow = w3
else
ow = 'S100447'
call mapPut e, 'chgOwn', ow
vaWo = lev1Wo
end
else if wordPos(w1, 'V72 V10') > 0 then do
call configureRZ , , substr(w1, 2)
end
else if wordPos(w1, 'CA BMC IBM') > 0 then do
m.e.tool = w1
end
else if wordPos(w1, varWo) > 0 then do
m.e.w1 = word(li, 2)
end
else if w1 = 'PROTOTYPERZ' then do /* alte syntax sep08 ??? */
m.scopeSrc.rz = word(li, 2)
end
else if wordPos(w1, 'SCOPE SOURCE TARGET') > 0 then do
suSy = ''
if w1 = 'SOURCE' then do
scp = 'SCOPESRC'
suSy = w2
end
else if w1 = 'TARGET' then do
scp = 'SCOPETRG'
if abbrev('EXPLICIT', w2, 2) then do
m.optAuto = 0
suSy = w3
end
else do
suSy = w2
if abbrev('EXPLICIT', w3, 2) then
m.optAuto = 0
end
end
else do /* alte syntax */
if abbrev('SOURCE', w2) then
scp = 'SCOPESRC'
else if abbrev('TARGET', w2) then
scp = 'SCOPETRG'
else
call err 'scope' w2 'nicht abk. von SOURCE TARGET',
'in Zeile' lx li
end
if (abbrev(suSy, 'DQ0') | abbrev(suSy, 'RZ1.DQ0')) ,
<> (m.libPre == 'DSN.DBQ') then
call err 'subSys' suSy 'mit Auftrag in' m.libPre
m.scp.0 = 0
if pos('.', suSy) > 0 then
parse var suSy suRz '.' suSy
else if pos('/', suSy) > 0 then
parse var suSy suRz '/' suSy
else
suRZ = ''
if suSy <> '' then
m.scp.subsys = suSy
if suRz <> '' then
m.scp.rz = suRz
vaWo = m.scopeTypes m.scopeType1 lev1Wo
call debug 'scope' scp m.scp.rz'.'m.scp.subsys
end
else if wordPos(w1, m.scopeTypes m.scopeType1) > 0 then do
parse value analyseScope(li) with ty nm qu
if ty = '?' then
call err nm qu 'in scope line' lx':' strip(li)
aa = mAdd(scp, 'scope')
m.aa.type = ty
m.aa.qual = qu
m.aa.name = nm
end
else if wordPos(w1, 'COMPARE VERSION SENDTARGET') > 0 then do
if w1 = 'SENDTARGET' then
w2 = w3
cmpLast = abbrev(w2, '=')
w2 = strip(w2, 'l', '=')
if length(w2) <> 1 | pos(w2, m.nachtragChars) < 1 then
call err 'nachtrag' w2 'in Zeile' lx li
if pos(w2, m.nachtragChars) ,
< pos(m.e.nachtrag, m.nachtragChars) then
call err 'nachtrag' w2 '< vorherigem' m.e.nachtrag ,
'in Zeile' lx li
if m.e.nachtrag <> w2 then do
m.e.nachtrag = w2
nx = m.nachtrag.0 + 1
m.nachtrag.0 = nx
m.nachtrag.nx = w2
end
m.nachtrag.nx.fun = ''
m.nachtrag.nx.last = cmpLast
if pos(left(w1, 1), 'CV') > 0 then
m.nachtrag.nx.fun = left(w1, 1)
if abbrev(w3, "'") | verify(w3, '/.', 'm') < 1 then
t1 = m.myRz'/'m.mySub
else
t1 = translate(w3, '/', '.')
m.nachtrag.nx.trg = t1
call debug 'nachtr' nx m.nachtrag.nx 'trg' m.nachtrag.nx.trg
m.nacImp = (w1 <> 'COMPARE')
end
else if w1 = 'IMPORT' then do
parse upper var li . subsys nachAll chg .
subsys = translate(subsys, '/', '.')
parse var chg chgAuf '.' chgNac '.' chgSeq '.' chgImp
aa = m.e.auftrag
if chgAuf = aa then do
if left(chgNac, 1) <> left(nachAll, 1) then
call err 'Nachtrag von mismatch in Zeile' lx li
if right(chgNac, 1) <> right(nachAll, 1) then
call err 'Nachtrag bis mismatch in Zeile' lx li
end
else if abbrev(chgAuf, aa) ,
& substr(chgAuf, length(aa)+4, 1) == '_' then do
chgSeq = substr(chgAuf, length(aa)+1, 3)
end
else
call err 'Auftrag mismatch in Zeile' lx li
if chgSeq <= m.imp.seq then
call err 'seq' chgSeq 'nicht > letzte' m.imp.seq,
'in Zeile' lx li
m.nacImp = 1
m.imp.last = subSys
m.imp.subSys.nachtrag = nachAll
m.imp.subSys.change = chg
m.imp.seq = chgSeq
end
else do
call err 'ungültiger Operator' w1 'in Zeile' lx':' strip(li)
end
end
/* nachtrae durchgehen und kumulieren */
m.targets = ''
m.compares = ''
m.versions = ''
drop cmpLast
m.cmpLast = 0
do nx=1 to m.nachtrag.0
m.cmpLast = m.cmpLast | m.nachtrag.nx.last
if wordPos(m.nachtrag.nx.trg, m.targets) < 1 then
m.targets = m.targets m.nachtrag.nx.trg
if m.nachtrag.nx.fun = 'C' then
m.compares = m.compares || m.nachtrag.nx
if m.nachtrag.nx.fun = 'V' then
m.versions = m.versions || m.nachtrag.nx
call debug 'nachtrag' nx m.nachtrag.nx 'trg' m.nachtrag.nx.trg,
'all' m.targets 'fun' ,
m.nachtrag.nx.fun 'com' m.compares 'ver' m.versions,
'cmpLast' m.cmpLast
end
if 0 & abbrev(m.scopeSrc.subSys, 'DQ0') then
call configureRz , '915 P0'
if 0 then do
say 'auftrag ' m.e.auftrag m.e.nachtrag mapGet(e, 'chgOwn')
say ' comMask ' m.e.comMask
say ' comIgno ' m.e.comIgno
say ' impMask ' m.e.impMask
say ' impIgno ' m.e.impIgno
scp = 'SCOPESRC'
drop subsys
say ' scope ' m.scp.0 m.scp.subsys ,
' target ' m.scopeTrg.0 m.scopeTrg.subsys
do sx=1 to m.scp.0
say ' ' m.scp.sx.type m.scp.sx.qual'.'m.scp.sx.name
end
end
call bmcVars
return
endProcedure analyseAuftrag
/*--- eine Scope Zeile analysieren -----------------------------------*/
analyseScope: procedure expose m.
parse arg li
parse upper var li ty w1 rest
if wordPos(ty, m.scopeType1) > 0 then
ty = word(m.scopeTypes, wordPos(ty, m.scopeType1))
if wordPos(ty, m.scopeTypes) < 1 then
return '?'
cx = pos('.', w1)
if cx < 1 then do
qu = w1
end
else do
qu =strip(left(w1, cx-1))
rest = substr(w1, cx) rest
end
if qu = '' then
return '? leerer Qualifier'
if ty = 'DB' then
return ty qu
if left(rest, 1) = '.' then
rest = substr(rest, 2)
nm = word(rest, 1)
if nm = '' then
return '? leerer Name'
return ty nm qu
endProcedure analyseScope
/*--- jcl generieren um Src und Trg Version und DDL zu extrahieren ---*/
extractSrcTrg: procedure expose m.
parse arg o, xx, oldSrc mbrLast
call readDsn m.libSkels'ExVe)', m.exVe.
call configureSubsys m.scopeSrc.rz, m.scopeSrc.subsys
call mapPut e, 'auto', xx'AUTO'
call mapPut e, 'src', xx'SRC'
call mapPut e, 'trg', xx'TRG'
mbrNac = mapGet(e, 'mbrNac')
call mapPut e, 'what', xx'SRC'
if ^ oldSrc then do
call extractScopeVersion o, exVe, xx, 'SRC'
end
else if mbrNac <> mbrLast then do
pr = m.libPre'.'xx'SRC'
call copyDsn pr'DDL('mbrLast')', pr'DDL('mbrNac')', 1
call copyDsn pr'CAT('mbrLast')', pr'CAT('mbrNac')', 1
end
call configureSubsys m.scopeTrg.rz, m.scopeTrg.subsys
call mapPut e, 'what', xx'TRG'
if m.optAuto then do
call readDsn m.libSkels'AutMa)', m.autoMap.
call readDsn m.libSkels'AutEx)', m.autoExt.
call mapExpAll e, o, autoMap
if m.sysRz = m.scopeTrg.rz then do
call mapExpAll e, o, autoExt
end
else do
mbrN = mapGet(e, 'mbrNac')
mark = mbrN'@'time()
autD = mapExp(e, '${libPre}.$auto($mbrNac)')
cf = mapExp(e, '${libPre}.SENDCF($mbrNac)')
sndIn = sendJob1(o, m.scopeTrg.rz, 'RECTRG',
, 'send' autD ,
, 'job -ddJob' m.timeout'//??' cf mark ,
, 'receive' mapExp(e, '${libPre}.${what}DDL($mbrNac)') ,
, 'receive' mapExp(e, '${libPre}.${what}CAT($mbrNac)') )
call mapExpAll e, o, autoExt
call sendJob2 o, sndIn, cf mark
end
end
else do
call extractScopeVersion o, exVe, xx, 'TRG'
end
return
endProcedure extractSrcTrg
/*--- Version + DDL zu extrahieren -----------------------------------*/
extractScopeVersion: procedure expose m.
parse arg o, i, ty, what
scp = 'SCOPE'what
/* say m.scp.rz 'scp' scp */
if m.sysRz = m.scp.rz then do
call extractVersionStep o, i, ty, what
end
else do
mbrN = mapGet(e, 'mbrNac')
mark = mbrN'@'time()
cf = mapExp(e, '${libPre}.SENDCF($mbrNac)')
sndIn = sendJob1(o, m.scp.rz, 'REC'what,
, 'job -ddJob' m.timeout'//??' cf mark ,
, 'receive' mapExp(e, '${libPre}.${what}DDL($mbrNac)') ,
, 'receive' mapExp(e, '${libPre}.${what}CAT($mbrNac)') )
call extractVersionStep o, i, ty, what
call sendJob2 o, sndIn, cf mark
end
return
endProcedure extractScopeVersion
/*--- einen Step um Version + DDL zu extrahieren ---------------------*/
extractVersionStep: procedure expose m.
parse arg o, i, ty, what
scp = 'SCOPE'what
call mapPut e, 'what', ty || what
sto = mapExpAllAt(e, o, i, 1, 1)
do while sto ^== ''
parse var sto lx cx
w = word(substr(m.i.lx, cx), 1)
if w == '$@scope' then do
if ty == '' then do
do sx=1 to m.scp.0
sn = scp'.'sx
if wordPos(m.sn.type, 'UDT UDF') > 0 then do
t = "SCH = '"m.sn.qual"', " ,
m.sn.type "= '"m.sn.name"';"
end
else do
t = "TYPE = '"m.sn.type"',"
if m.sn.type <> 'DB' then
t = t "QUAL = '"m.sn.qual"',"
t = t "NAME = '"m.sn.name"'"
if m.sn.type = 'SP' then
t = t", VERSION='%'"
t = t';'
end
if length(t) < 30 then do
call mAdd o, ' ' t
end
else do
cx = lastPos(',', t)
call mAdd o, ' ' left(t, cx),
, ' ' substr(t, cx+1)
end
end
end
else if ty == 'DB' then do
c = getDb2Catalog(what)
do x=1 to m.c.0
d1 = m.c.x.db
if db.d1 == 1 then
iterate
db.d1 = 1
call mAdd o, " TYPE = 'DB,' NAME = '"d1"';"
end
end
else
call err 'extractVersionStep bad ty' ty
end
else do
call err 'implement stop' sto 'word' w 'in line' lx m.i.lx
end
sto = mapExpAllAt(e, o, i, lx, cx + length(w))
end
return
endProcedure extractVersionStep
/*--- add jcl to stem o to send a job to rz toRz with stepname step
and add the remaining arguments as sendJob statements
afterwards the caller must add the jcl and call sendJob2 ----*/
sendJob1: procedure expose m.
parse arg o, toRz, step
oldRz = m.myRz
call configureRz toRz
call readDsn m.libSkels'SendJ)', m.sendJob.
call mapPut e, 'step', step
call mapExpAll e, o, sendJob
do ax=4 to arg()
call debug 'sendJob1 le' length(arg(ax)) arg(ax)'|'
call mAdd o, arg(ax) left('-', (ax < arg()))
end
call mAdd o, '//DDJOB DD *'
stReX = m.o.0+1
call readDsn m.libSkels || m.jobCard')', m.i.
call mapPut e, 'jobName', 'Y'left(m.e.auftrag, 7)
call mapPut e, 'fun', 'extract data from' toRz
call mapExpAll e, o, i
return oldRz stReX
endProcedure sendJob1
/*--- add the mark step to the job, translate leading // to ??
and switch back to original rz -----------------------------*/
sendJob2: procedure expose m.
parse arg o, oldRz stReX, cfMark
if cfMark ^= '' then do
call mAdd o, '// IF NOT ABEND' ,
'AND RC >= 0 AND RC <= 4 THEN'
call mapPut e, 'step', 'MARKOK'
call mapExpAll e, o, sendJob
call mAdd o, 'mark' cfMark 'okRc0'
call mAdd o, '// ELSE'
call mapPut e, 'step', 'MARKERR'
call mapExpAll e, o, sendJob
call mAdd o, 'mark' cfMark 'badRcOrAbend'
call mAdd o, '// ENDIF'
end
do ox = stReX to m.o.0
if abbrev(m.o.ox, '//') then
m.o.ox = overlay('??', m.o.ox)
end
call configureRz oldRz
return
endProcedure sendJob2
/*--- return Stem fuer die CatalogInfo für Src oder Trg
falls noetig aus Db2Catalog einlesen -----------------------*/
getDb2Catalog: procedure expose m.
parse arg wh
st = 'CAT'wh
if datatype(m.st.0, n) then
return st
else if m.st.0 ^== '' then
call err 'getDb2Catalog('wh') bad value m.'st'.0' m.st.0
scp = 'SCOPE'wh
if m.sysRz = m.scp.rz then
call sqlOConnect m.scp.subSys
else
call sqlOConnect m.scp.rz'/'m.scp.subSys
call queryDb2Catalog st, wh
m.v9.0 = 0
call queryDb2V9 st, 'V9'
return st
endProcedure getDb2Catalog
/*--- Information aus Db2Catalog fuer einen Scope einlesen -----------*/
queryDb2Catalog: procedure expose m.
parse arg st, what
scp = 'SCOPE'what
/* m.scopeTypes = 'DB TS TB VW IX AL' */
ts = ''
tb = ''
ix = ''
unQueried = 0
do sx=1 to m.scp.0
sn = scp'.'sx
t = " TYPE = '"m.sn.type"',"
if m.sn.type <> 'DB' then
t = t "QUAL = '"m.sn.qual"',"
t = t "NAME = '"m.sn.name"';"
call debug 'queryDb2Catalog' sx t
if m.sn.type = 'DB' then
ts = ts 'or s.dbName' sqlClause(m.sn.name)
else if m.sn.Type = 'TS' then
ts = ts 'or (s.dbName' sqlClause(m.sn.qual) ,
'and s.name' sqlClause(m.sn.name)')'
else if m.sn.Type = 'TB' then
tb = tb 'or (t.creator' sqlClause(m.sn.qual) ,
'and t.name' sqlClause(m.sn.name)')'
else if m.sn.Type = 'IX' then
ix = ix 'or (x.creator' sqlClause(m.sn.qual) ,
'and x.name' sqlClause(m.sn.name)')'
else
unQueried = unQueried + 1
end
sel = 'select s.dbName db, s.name ts , s.type, ',
's.partitions, s.segSize, s.log, ',
't.creator cr, t.name tb,' ,
't.status tbSta, t.tableStatus tbTbSta',
'from sysibm.sysTableSpace S, sysibm.sysTables T'
wh = "where s.dbName = t.dbName and s.name = t.tsName",
"and t.type = 'T'"
sql = ''
if ts <> '' then
sql = sql 'union' sel wh 'and ('substr(ts, 5)')'
call debug 'ts sql' sql
if tb <> '' then
sql = sql 'union' sel wh 'and ('substr(tb, 5)')'
call debug 'tb sql' sql
if ix <> '' then
sql = sql 'union' sel ', SYSIBM.SYSINDEXES X',
wh 'and t.creator=x.tbCreator and t.name=x.tbName',
'and ('substr(ix, 5)')'
call debug 'ix sql' sql
if sql = '' then do
m.st.0 = 0
if unQueried < 1 then
say 'nothing specified in source scope'
return 0
end
drop db ts cr tb type
call sql2St substr(sql, 8), st
if m.debug == 1 then do
say m.st.0
do sx = 1 to m.st.0
say strip(m.st.sx.db)'.'strip(m.st.sx.ts) m.st.sx.type ,
m.st.sx.partitions m.st.sx.segSize
end
end
return m.st.0
endProcedure queryDb2Catalog
/*--- haben wir schon DB2 V9 Objekte ? -------------------------------*/
queryDb2V9: procedure expose m.
parse arg sc, vv
m.vv.0 = 0
wh =''
do x = 1 to m.sc.0
wh = wh "or (cr='"m.sc.x.cr"' and tb='"m.sc.x.tb"')"
end
if wh == '' then
return 0
return sql2st("select tp,nm,v9",
"from s100447.db2v9",
"where V9 <> '' and (" substr(wh, 5) ")",
"order by cr,tb,cl", vv)
endProcedure queryDb2V9
/*--- Qualitaets Pruefung fuer CatalogInfo Stem c --------------------*/
qualityCheck: procedure expose m.
parse arg c
if m.libPre <> 'DSN.DBQ' then
call maskIni
o = 'AUFTRAG'
m.o.orig = 'rmQu' m.o.orig
m.spezialFall.done = ''
aufOld = m.o.0
do x=1 to m.c.0
vDb = strip(m.c.x.db)
n = '|| db' vDb
if d.n ^== 1 then do
d.n = 1
call spezialfall vDb, substr(n, 4)
end
n = '|| ts' vDb'.'strip(m.c.x.ts)
if d.n ^== 1 then do
d.n = 1
call spezialfall vDb, substr(n, 4)
if m.c.x.log <> 'Y' then
call mAdd o, n 'not logged'
if m.c.x.partitions > 0 then
nop
else if m.c.x.segSize = 0 then
call mAdd o, n 'simple TS'
end
n = '|| tb' strip(m.c.x.cr)'.'strip(m.c.x.tb)
if d.n ^== 1 then do
d.n = 1
call spezialfall vDb, substr(n, 4)
if m.c.x.tbTbSta = 'L' then
call mAdd o, n 'auxilary index oder table fehlt'
else if m.c.x.tbTbSta = 'P' then
call mAdd o, n 'primary index fehlt'
else if m.c.x.tbTbSta = 'R' then
call mAdd o, n 'index auf Row ID fehlt'
else if m.c.x.tbTbSta = 'U' then
call mAdd o, n 'index auf unique key fehlt'
else if m.c.x.tbTbSta = 'V' then
call mAdd o, n 'Regenerierung interne ViewDarstellung'
else if m.c.x.tbTbSta ^= '' then
call mAdd o, n 'TableStatus' m.c.x.tbTbSta 'unbekannt'
end
end
do vx=1 to m.v9.0
call mAdd o, '|| V9' m.v9.vx.tp left(m.v9.vx.nm, 30) ,
left(m.v9.vx.v9, 30)
end
return aufOld < m.o.0
endProcedure qualityCheck
/*--- für jedes Objekt aus Source Scope Eintrage in der
Spezialfall Library suchen und falls vorhanden anzeigen --------*/
spezialFall: procedure expose m.
parse upper arg db, typ qua '.' nam
if m.libPre = 'DSN.DBQ' then
return
pDb = mask2prod('DBNAME', db)
if (typ = 'DB' | typ = 'TS') & db <> qua then
call err 'db mismatch spezialFall('db',' typ qua'.'nam')'
if typ = 'DB' then
srch = typ pDb'.'
else if typ = 'TS' then
srch = typ pDb'.'mask2prod('TSNAME', nam)
else if typ = 'TB' then
srch = typ mask2prod('TBOWNER', qua)'.'mask2prod('TBNAME', nam)
else
call err 'bad typ' typ
st = spezialFall'.'pDb
if symbol('m.st.0') <> 'VAR' then do
dsn = m.libSpezial"("pDb")"
sy = sysDsn("'"dsn"'")
if sy <> 'OK' then do
m.st.0 = 0
if sy <> 'MEMBER NOT FOUND' then
call err 'spezialFall library' dsn':' sy
end
else do
call readDsn dsn, 'M.SPEZIALFALL.'pDB'.'
end
end
if m.st.0 < 1 then
return
offs = 999
found = 0
do sx = 1 to m.st.0
fx = verify(m.st.sx, ' ')
if fx = 0 | fx > 72 then
iterate
if substr(m.st.sx, fx, 1) = '*' then
iterate
if fx <= offs then do
offs = fx
m.st.sx = left(m.st.sx, 72)
n = ''
if pos('.', m.st.sx) > 0 then
parse upper var m.st.sx t q '.' n .
else
parse upper var m.st.sx t q .
if wordPos(t, 'DB TS TB') < 1 then
call err 'spezialFall' pDb 'line' sx 'ungueltig:' m.st.sx
found = match(srch, t strip(q)'.'strip(n)) ,
& ^ (wordPos(pDb'.'sx, m.spezialFall.done) > 0)
if found then
m.spezialFall.done = m.spezialFall.done pDb'.'sx
end
if found then
call mAdd auftrag, '|-'left(m.st.sx, 78)
end
return
endProcedure spezialFall
/*--- mask handling initialise ---------------------------------------*/
maskIni: procedure expose m.
call maskHierarchy
call maskRead mask.prot, m.libPre'.MASK(PROTDBAF)'
call maskRead mask.dbof, m.libPre'.MASK(DBAFDBOF)'
return
endProcedure maskIni
/*--- mask a whole scope --------------------------------------------*/
maskScope: procedure expose m.
parse arg mskDsn, fr, to
call maskRead masc, mskDsn
do fx=1 to m.fr.0
ty = m.fr.fx.type
m.to.fx.type = ty
if wordPos(ty, 'DB SG') > 0 then
m.to.fx.qual = ''
else if wordPos(ty, 'TS') > 0 then
m.to.fx.qual = maskTrans(masc, 'DBNAME', m.fr.fx.qual)
else
m.to.fx.qual = maskTrans(masc, 'SCHEMA', m.fr.fx.qual)
if wordPos(ty, 'DB') > 0 then
m.to.fx.name = maskTrans(masc, 'DBNAME', m.fr.fx.name)
else if wordPos(ty, 'TB VW AL') > 0 then
m.to.fx.name = maskTrans(masc, 'TBNAME', m.fr.fx.name)
else if wordPos(ty, 'SP') > 0 then
m.to.fx.name = maskTrans(masc, 'STPNAME', m.fr.fx.name)
else
m.to.fx.name = maskTrans(masc, ty'NAME', m.fr.fx.name)
end
m.to.0 = m.fr.0
return
endProcedure maskScope
/*--- mask test functions --------------------------------------------*/
testMask: procedure expose m.
call maskIni
call maskTT OWNER, GDB9998
call maskTT DBNAME, DGDB9998
call maskTT DBNAME, DGDB0287
call maskTT OWNER, GDB0301
call maskTT TSNAME, AGRFX12A2
call maskTT OWNER, SYS123EF
return 0
endProcedure testMask
maskTT: procedure expose m.
parse arg ty, na
say 'maskTrans(prot,' ty',' na') =' maskTrans(mask.prot, ty, na) ,
' -> DBOF' maskTrans(mask.dbof, ty, maskTrans(mask.prot,ty,na))
return
/*--- translate a prototype object to DBOF naming -------------------*/
mask2Prod: procedure expose m.
parse arg ty, na
return translate(strip(,
maskTrans(mask.dbof, ty, maskTrans(mask.prot,ty,na))))
/*--- translate an object of type ty and name na
by the masking file in st --------------------------------*/
maskTrans: procedure expose m.
parse arg st, ty, na
if symbol('m.mask.hier.ty') <> 'VAR' then
call err 'bad type' ty
types = m.mask.hier.ty
do sx=1 to m.st.0
if wordPos(m.st.sx.typ, types) < 1 then
iterate
if match(na, m.st.sx.in, vv) then
return matchTrans(m.st.sx.out, vv)
end
return na
endProcedure maskTrans
/*--- read and analyse the masking file dsn into stem st ------------*/
maskRead: procedure expose m.
parse arg st, dsn
maskIgno = 'COMPRESS SEGSIZE DEFER DEFINE PRIQTY SECQTY'
call readDsn dsn, i.
j = 0
do i=1 to i.0
parse var i.i t ':' s ',' d
t = strip(t)
if symbol('m.mask.hier.t') == 'VAR' then
nop
else if wordPos(t, maskIgno) > 0 then
iterate
else
call err 'bad typ' t 'in maskline' i':' i.i
j = j+1
m.st.j.typ = t
m.st.j.in = strip(s)
m.st.j.out = word(d, 1)
end
m.st.0 = j
return
drop typ in out
do wx=1 to m.st.0
say wx m.st.wx.typ':' m.st.wx.in'==>'m.st.wx.out'|'
end
endProcedure maskRead
/*--- initialise the type hierarchy of masking
as input use the msgLines of the mask editor --------------*/
maskHierarchy: procedure expose m.
/* copy der hierarch aus masking template */
call mAdd mCut('T', 0) ,
, 'COLNAME ' ,
, 'NAME ' ,
, ' DBNAME,TSNAME,TBNAME,IXNAME,UDFNAME, ' ,
, ' UDTNAME,COLLNAME,PKGNAME,PGMNAME,PLNNAME ' ,
, ' DBRMNAME,STPNAME,SFNAME,TGNAME,GRPNAME, ' ,
, ' VCATNAME,GBPNAME ' ,
, ' BPNAME ' ,
, ' TSBPNAME,IXBPNAME ' ,
, ' SGNAME ' ,
, ' TSSGNAME,IXSGNAME ' ,
, 'AUTHID ' ,
, ' SQLID,SCHEMA ' ,
, ' OWNER ' ,
, ' DBOWNER,TSOWNER,TBOWNER,IXOWNER ' ,
, ' GRANTID ' ,
, ' GRANTOR,GRANTEE '
qx = 0
lOff = -1
m.mask.hier = ''
do x=1 to m.t.0
of = verify(m.t.x, ' ', 'n')
li = translate(m.t.x, ' ', ',')
do while qx > 0 & word(q.qx, 1) >= of
qx = qx -1
end
px = qx - 1
if (qx = 0 | of > word(q.qx, 1)) & words(li) = 1 then do
px = qx
qx = qx + 1
if qx = 1 then
q.qx = of word(li, 1)
else
q.qx = of word(li, 1) subword(q.px, 2)
end
do wx=1 to words(li)
w1 = word(li, wx)
m.mask.hier = m.mask.hier w1
if wordPos(w1, subWord(q.qx, 2)) < 1 then
m.mask.hier.w1 = w1 subWord(q.qx, 2)
else
m.mask.hier.w1 = subWord(q.qx, 2)
end
end
return
endProcedure maskHierarchy
/*--- Funktion q: scope Zeilen pruefen -------------------------------*/
queryScope: procedure expose m.
parse arg subSys
subs2 = ''
rf = 1
isConn = 0
if adrEdit('(rl) = lineNum .zl', 4) = 4 then
rl = 0
if ^ m.editMacro then
call err 'q nicht als Macro'
if ^ m.editProc then do
if adrEdit('PROCESS RANGE Q', 0 4) = 0 then do
call adrEdit '(rf) = lineNum .zfrange'
call adrEdit '(rl) = lineNum .zlrange'
end
m.editProc = 1
end
do rx = rf by 1 while rx <= rl
call adrEdit '(li) = line' rx
parse value analyseScope(li) with ty nm qu
if ty = '?' then do
if nm <> '' then
say nm qu 'in line' rx':' strip(li)
if \ isConn & subsys == '' then do
parse upper var li w1 w2 .
if wordpos(w1, 'SOURCE TARGET') > 0 then do
if length(w2) = 4 | ( length(w2) = 8 ,
& pos(substr(w2,4,1), './') > 0) then
subs2 = translate(w2, '/', '.')
end
end
iterate
end
if \ isConn then do
isConn = 1
if subSys = '' then
subSys = if(subs2 == '', m.mySub, subs2)
subsys = translate(subsys, '/', '.')
call sqlConnect subSys
subsys = translate(subsys, m.mAlfLC, m.mAlfUC)
end
call expandScope mCut(qq, 0), ty, qu, nm
do qx=1 to m.qq.0
neu = m.qq.qx
if length(neu subSys) < 70 then
neu = left(neu, 68 - length(subSys)) '*'subSys
else if length(neu subSys) < 80 then
neu = neu '*'subSys
liCm = if(qx=1, "line" rx, "line_after" (rx+qx-2))
if adrEdit(liCm "= (neu)", 4) = 4 then
say 'truncation line' rx':' neu
end
rx = rx + m.qq.0 - 1
rl = rl + m.qq.0 - 1
end
call sqlDisConnect
return 0
endProcedure queryScope
/*--- einen Scope Ausdruck expandieren -------------------------------*/
expandScope: procedure expose m.
parse arg o, ty, qu, nm
sql = ''
dec2s = "strip(case when abs(?) > 9223372036854775807",
"then char(real(?)) else char(bigint(?)) end)"
if ty = 'DB' then
sql = "select 'db', name, '' from sysibm.sysDatabase",
"where name" sqlClause(nm)
else if ty = 'TS' then
sql = "select 'ts', strip(dbName) || '.' || strip(tsName)," ,
"case when count(*) = 1 then 'tb '" ,
"else strip(char(count(*))) || ' tables||| '",
"end || min(strip(creator) ||'.'|| strip(name))",
"from sysibm.systables" ,
"where type = 'T' and dbName" sqlClause(qu),
"and tsName" sqlClause(nm),
"group by dbName, tsName"
else if ty = 'TB' | ty = 'VW' | ty = 'AL' then
sql = "select case when type = 'T' then 'tb'",
"when type = 'V' then 'vw'",
"when type = 'A' then 'al'",
"else '?' || type end,",
"strip(creator) || '.' || strip(name),",
"case when type = 'A' then 'for '",
"|| strip(location) || '.'" ,
"|| strip(tbCreator)||'.'||strip(tbName)",
"else 'ts ' || strip(dbName) ||'.'",
"|| strip(tsName)",
"end",
"from sysibm.systables" ,
"where type =" quote(left(ty, 1), "'"),
"and creator" sqlClause(qu),
"and name" sqlClause(nm)
else if ty = 'IX' then
sql = "select 'ix', strip(creator) || '.' || strip(name),",
"'tb ' || strip(tbCreator)||'.'||strip(tbName)",
'from sysibm.sysIndexes' ,
'where creator' sqlClause(qu),
'and name' sqlClause(nm)
else if ty = 'UDT' then
sql = "select 'udt', strip(schema) || '.' || strip(name),",
"'source ' || strip(sourceSchema)",
"|| '.' || strip(sourceType)",
"from sysibm.sysDataTypes",
'where schema' sqlClause(qu),
'and name' sqlClause(nm)
else if ty = 'UDF' | ty = 'SP' then
sql = "select case when routineType = 'F' then 'udf'",
"when routineType = 'P' then 'sp'",
"else '?' || routineType end, ",
"strip(schema) || '.' || strip(name),",
"'otp=' || origin || function_type" ,
"|| strip(char(parm_count))",
"|| ' spec=' || strip(specificName)",
"|| ' a=' || active || ' vers=' || version",
"from sysibm.sysRoutines",
'where routineType =' quote(right(ty, 1), "'"),
'and schema' sqlClause(qu) ,
'and name' sqlClause(nm)
else if ty = 'TG' then
sql = "select 'tg', strip(schema) || '.' || strip(name),",
"'teg ' || trigTime || trigEvent||granularity",
"|| ' tb ' || strip(tbOwner) || '.'",
"|| strip(tbName)",
"from sysibm.sysTriggers",
'where seqNo=1 and schema' sqlClause(qu),
'and name' sqlClause(nm)
else if ty = 'SQ' then
sql = "select 'sq', strip(schema) || '.' || strip(name),",
"'start ' ||" repAll(dec2s, "?", "start"),
"|| ': ' ||" repAll(dec2s, "?", "minValue"),
"|| '-' ||" repAll(dec2s, "?", "maxValue"),
"|| ' inc ' ||" repAll(dec2s, "?", "increment"),
"from sysibm.sysSequences",
"where seqType='S' and schema" sqlClause(qu),
"and name" sqlClause(nm)
else if ty = 'SY' then
sql = "select 'sy', strip(creator) || '.' || strip(name),",
"'for ' || strip(tbCreator) || '.'" ,
"||strip(tbName)",
"from sysibm.sysSynonyms",
"where creator" sqlClause(qu),
"and name" sqlClause(nm)
else do
call mAdd o, ty left(qu'.'nm, 30) '* query nicht implementiert'
return
end
call sqlQuery 1, sql 'order by 2', ,
, classNew('n* SQL u f FT v, f FN v, f FI v')
do cx=0 by 1 while sqlFetch(1, d)
call mAdd o, lefA(m.d.ft, 3) lefA(m.d.fn, 30) m.d.fi
end
call sqlClose 1
if cx = 0 then
call mAdd o, lefA(ty, 3) lefA(strip(qu)left('.', qu \== '') ,
|| strip(nm), 30) '* nicht gefunden'
return
endProcedure expandScope
/*--- return sql condition (= String oder like String) ---------------*/
sqlClause: procedure expose m.
parse arg val
val = translate(val, '%_', '*?')
if verify(val, '%_', 'm') > 0 then
return 'like' quote(val, "'")
else
return '=' quote(val, "'")
endProcedure sqlClause
lefA: procedure expose m.
parse arg s, len
if length(s) < len then
return left(s, len)
else
return s
endProcedure lefA
/*--- copy srcDdl und srcCat aus anderem rz --------------------------*/
receiveSource: procedure expose m.
parse arg rz
if rz = '' | rz = '*' | rz = m.myRz then
call err 'rs receiveSource mit ungueltigem rz' rz
call readAuftrag rz, m.auftrag.dataset, m.e.auftrag
call analyseAuftrag
if m.e.nachtrag = '?' then
call err 'keine Version in Auftrag' m.e.auftrag 'im' rz
nacMbr = left(m.e.auftrag, 7) || m.e.nachtrag
call csmCopy rz'/'m.libPre'.srcDdl('nacMbr')', m.libPre'.'rz'DDL'
call csmCopy rz'/'m.libPre'.srcCat('nacMbr')', m.libPre'.'rz'Cat'
call readAuftrag , m.auftrag.dataset, m.auftrag
call mAdd auftrag, addDateUs('receiveSource' rz,
m.libPre'.'rz'Cat('nacMbr')')
return
endProcedure receiveSource
/*--- copy wsl aus anderem rz ----------------------------------------*/
receiveWSL: procedure expose m.
parse arg rz
if rz = m.myRz then
rz = ''
call analyseAuftrag
sWsl = 'dsn.dba.clon.wsl('left(m.e.auftrag, 7)'Q)'
sIff = 'dsn.dba.'left(m.e.auftrag, 7)'Q.IFF'
if rz <> '' then do
call csmCopy rz'/'sWsl, sWsl
if adrCsm("dslist SYSTEM("rz") DSNMASK('"sIff"') SHORT", 4) = 0,
& stemSize = 1 then
call csmCopy rz'/'sIff, sIff
else
say 'iff existiert nicht im' rz
end
call cloneWsl '', m.e.auftrag, 1
call mAdd auftrag, addDateUs('receiveWSL' rz)
return
endProcedure receiveWSL
/*--- send wsl to the argument rz ------------------------------------*/
sendWSL: procedure expose m.
parse arg rz
if rz = m.myRz then
rz = ''
call analyseAuftrag
if m.versions = '' | m.compares <> '' then
call warn 'sendWSL ohne versions oder mit compares'
sWsl = 'dsn.dba.clon.wsl('left(m.e.auftrag, 7)'Q)'
sIff = 'dsn.dba.'left(m.e.auftrag, 7)'Q.IFF'
if sysDsn("'"sWsl"'") <> 'OK' then
call err 'source wsl fehlt:' sWsl sysDsn("'"sWsl"'")
if rz <> '' then do
call csmCopy sWsl, rz'/'sWsl
if sysDsn("'"sIff"'") <> 'OK' then
say 'iff existiert nicht' sIff sysDsn("'"sIff"'")
else
call csmCopy sIff, rz'/'sIff
end
call cloneWsl rz, m.e.auftrag, 1
call mAdd auftrag, addDateUs('sendWSL' rz)
return
endProcedure sendWSL
/*--- clone a wsl mbr in the rz sys,
if doRemove=1 remove old members first ---------------------*/
cloneWsl: procedure expose m.
parse arg sys, mbr, doRemove
/* copy multi clone jcl from target rz */
jcl = csmSysDsn(sys'/DSN.DBA.MULTI.CLONE'right(mbr, 1)'.JCL', 0)
CALL READdsn jcl, m.jj.
/* modify the jcl */
do jx=1 to m.jj.0
if word(m.jj.jx, 2) == '=' then do
if word(m.jj.jx, 1) = 'SRCWSLST' then
m.jj.jx = 'SRCWSLST =' left(mbr, 7)'Q'
else if word(m.jj.jx, 1) = 'CLNWSLST' then
m.jj.jx = 'CLNWSLST =' mbr
end
else if space(subword(m.jj.jx, 1, 2) ,1) ,
== '//DELMBRIF IF' then do
m.jj.jx = '//DELMBRIF IF RC =' (7 *(^doRemove)) 'THEN'
end
else if word(m.jj.jx, 1) == 'DELETE' then do
nm = word(m.jj.jx, 2)
cx = pos('(', nm)
if right(nm, 1) = ')' & cx > 0 then
m.jj.jx = ' DELETE' left(nm, cx)mbr')'
else
call err 'bad delete' jx m.jj.jx
end
end
call writeSub jj, sys, 1
return 0
endProcedure cloneWsl
warn:
say '*** warning:' arg(1)
return
endSubroutine warn
repAll: procedure expose m.
parse arg src, w, new
res = ''
cx = 1
do forever
nx = pos(w, src, cx)
if nx < 1 then
return res || substr(src, cx)
res = res || substr(src, cx, nx-cx) || new
cx = nx + length(w)
end
endProcedure repAll
/**** ca *************************************************************/
/*--- extract ddl from source system ---------------------------------*/
caDDl: procedure expose m.
trace ?r
parse arg o, cco1, scp, GlbChg
if m.sysRz = m.scp.rz then do
call caDD1 o, cco1, scp, GlbChg
end
else do
mbrN = mapGet(e, 'mbrNac')
mark = mbrN'@'time()
cf = mapExp(e, '${libPre}.SENDCF($mbrNac)')
sndIn = sendJob1(o, m.scp.rz, 'RECSRC',
, 'job -ddJob' m.timeout'//??' cf mark ,
, 'receive' mapExp(e, '${libPre}.CACDL($mbrNac)'))
call caDD1 o, cco1, scp, GlbChg
call sendJob2 o, sndIn, cf mark
end
return
endProcedure caDDL
/*--- quickMigrate to create ddl -------------------------------------*/
caDD1: procedure expose m.
parse arg o, cco1, scp, GlbChg
call mapPut e, 'user', userid()
call mapExpAll e, o, cco1
do sx=1 to m.scp.0
sn = scp'.'sx
if m.sn.type == 'DB' then
call caEx o, 'DATABASE' '=' m.sn.name, 'db'
else if m.sn.type == 'IX' then
call caEx o, 'INDEX' m.sn.qual m.sn.name, 'i'
else if m.sn.type == 'TS' then
call caEx o, 'TABLESPACE' m.sn.qual m.sn.name, 'ts'
else if m.sn.type == 'VW' then
call caEx o, 'VIEW' m.sn.qual m.sn.name, 'v'
else
call err 'implement type' m.sn.type 'for ca'
end
call readDsn m.libSkels'CCO2)', m.cco2.
call mapExpAll e, o, cco2
call caGlbChg o, glbChg
return
endProcedure caDD1
caGlbChg: procedure expose m.
parse arg o, glbchg, cr
if glbChg == '' then
return
/* call mAdd o, ' GLBLNAME ' GlbChg, nein, ins member schreiben ???
, ' GLBLCRTR ' mapGet(e, 'cacr') */
glblDsn = m.libPre".caGlbChg("GlbChg")"
if sysDsn("'"glblDsn"'") \== 'OK' then
call err 'mask' GlbChg':' glblDsn sysDsn("'"glblDsn"'")
call readDsn glblDsn, 'M.GLBL.'
call mAddSt o, glbl
return
endProcedure caGlblChg
/*--- add explode options depending on object type -------------------*/
caEx: procedure expose m.
parse arg o, oLine, ty
call mAdd o, '' oLine
call caE1 o, ty, 'e TABLESPACE db'
call caE1 o, ty, 'e TABLE db ts'
call caE1 o, ty, 'e INDEX db ts t'
call caE1 o, ty, 'e VIEW db ts t v'
call caE1 o, ty, 'e SYNONYM db ts t v'
call caE1 o, ty, 'e TRIGGER db ts t v'
call caE1 o, ty, 'e MQTB_T db ts t v'
call caE1 o, ty, 'e MQTB_I db ts t v'
call caE1 o, ty, 'e MQTB_V db ts t v'
call caE1 o, ty, 'e MQTB_S db ts t v'
call caE1 o, ty, 'e MQVW_VW db ts t v'
call caE1 o, ty, 'e MQVW_I db ts t v'
call caE1 o, ty, 'e MQVW_V db ts t v'
call caE1 o, ty, 'e MQVW_S db ts t v'
call caE1 o, ty, 'i MQVW_VW i'
return
endProcedure caEx
caE1: procedure expose m.
parse arg o, ty, v1 v2 types
if v1 == 'e' then
e = 'EXPLODE'
else if v1 == 'i' then
e = 'IMPLODE'
else
call err 'bad explode' v1 'in caE1('o',' ty',' v1 v2 types')'
if wordPos(ty, types) > 0 then
call mAdd o, ' 'left(e, 11) v2
return
endProcedure caE1
/**** bmc ************************************************************/
/*--- src und trg profile erstellen ----------------------------------*/
bmcVars: procedure expose m.
m.e.profSrc = m.e.auftrag'_SRC'
m.e.profTrg = m.e.auftrag'_TRG'
m.e.profOwn = 'DBXAUFTR'
return
endProcedure bmcVars
bmcVarsProf: procedure expose m.
parse arg isImport
m.e.profChg = bmcMask2Prof(m.e.comMask)
if isImport then
m.e.profImp = bmcMask2Prof(m.e.impMask)
return
endProcedure bmcVarsProf
bmcMask2Prof: procedure expose m.
parse arg mask
m2 = translate(mapExp(e, mask))
return word(translate(m2, ' ', '.()'), 2)'.'dsnGetMbr(m2)
endProdecure bmcMask2Prof
/*--- src und trg profile erstellen ----------------------------------*/
bmcSrcTrg: procedure expose m.
parse arg oldSrc prof
if symbol('m.mask.hier') \== 'VAR' then
call maskHierarchy
if m.scopeSrc.rz \== m.sysRz | m.scopeTrg.rz \== m.sysRz then
call err 'bmc compare on other rz not implemented'
if m.scopeSrc.subsys \== m.scopeTrg.subsys then
call err 'bmc compare on different subsystems not implemented'
call configureSubsys m.scopeSrc.rz, m.scopeSrc.subsys
call bmcProfile m.e.profOwn, m.e.profSrc, 'SCOPESRC'
if m.optAuto then
call maskScope m.e.comMask, 'SCOPESRC', 'SCOPETRG'
call bmcProfile m.e.profOwn, m.e.profTrg, 'SCOPETRG'
return
endProcedure bmcSrcTrg
bmcProfile: procedure expose m.
parse arg ow, prof, scp
call sqlOConnect m.scp.subSys
call sqlExec "insert into bmcacma1.CM_BLPROFILE" ,
"(BLPOWNER, blpName, type, template)" ,
"values('"ow"', '"prof"', 'C', '"prof"####')", -803
call sqlExec "delete from bmcacma1.CM_SCOPE" ,
"where scOwner = '"ow"' and scName = '"prof"'", 100
do sx=1 to m.scp.0
sn = scp'.'sx
if m.sn.type = 'DB' then do
q1 = m.sn.name
q2 = ''
end
else do
q1 = m.sn.qual
q2 = m.sn.name
end
call sqlExec "insert into bmcacma1.CM_SCOPE" ,
"(SCOWNER, SCName, Type, ACTION,OBJECT,NAME_PART1,NAME_PART2",
",MIGDT, MIGTS, MIGTB, MIGCK, MIGFK, MIGIX, MIGVW, MIGAU",
",MIGSY, MIGAL, MIGRO, MIGTR, MIGUC, MIGAX",
")values('"ow"', '"prof"', 'B', 'I'" ,
", '"m.sn.type"', '"q1"', '"q2"'" ,
",'N' , 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'N'",
",'Y' , 'Y', '', 'Y', 'Y', 'Y')"
end
call sqlCommit
return
endProcedure bmcProfile
/* copy match begin ***************************************************/
/************************************* begin copy match ******/
/*--- wildCard matching with the following wildchars:
* 0-n chars
? 1 char
fill matched expressions instem st if st is non empty
return 1 if mask matches wert ----------------------------------*/
match: procedure expose m.
parse arg wert, mask, st
if st == '' then
return matchRO(wert, mask)
m.st.0 = -9
return matchSt(wert, mask, st, 0)
endProcedure match
/*--- return the fixed prefix of maskt -------------------------------*/
matchPref: procedure
arg mask, suff
ix = verify(mask, '*?', 'm')
if ix = 0 then
return mask
else
return left(mask, ix-1)suff
endProcedure matchPref
/*--- return true if mask matches wert -------------------------------*/
matchRO: procedure
arg wert, mask
ix = verify(mask, '*?', 'm')
if ix < 1 then return (mask == wert)
if length(wert) < ix-1 then return 0
if left(mask, ix-1) \== left(wert, ix-1) then return 0
if substr(mask, ix, 1) == '?' then do
if length(wert) < ix then return 0
return matchRO(substr(wert, ix+1), substr(mask, ix+1))
end
mask = substr(mask, ix+1) /* * 0 - n Chars */
do ex = 1+length(wert) to ix by -1
if matchRO(substr(wert, ex), mask) then return 1
end
return 0
endProcedure matchRO
/*--- wildCard matching: fill matched expressions instem st
return 1 if mask matches wert ----------------------------------*/
matchSt: procedure expose m.
parse arg wert, mask, st, sx
ix = verify(mask, '*?', 'm')
if ix < 1 then do
if mask \== wert then
return 0
m.st.0 = sx
return 1
end
if \ abbrev(wert, left(mask, ix-1)) then
return 0
reMa = substr(mask, ix+1)
sx = sx + 1
if substr(mask, ix, 1) == '?' then do /* ? 1 Character */
if length(wert) < ix then
return 0
m.st.sx = substr(wert, ix, 1)
return matchSt(substr(wert, ix+1), reMa, st, sx)
end
do lx = 1+length(wert) to ix by -1 /* greedy: from all to empty */
if matchSt(substr(wert, lx), reMa, st, sx) then do
m.st.sx = substr(wert, ix, lx-ix)
return 1
end
end
return 0
endProcedure matchSt
matchTrans: procedure expose m.
parse arg mask, st
r = ''
ox = 1
sx = 0
ix = verify(mask, '*?', 'm')
do sx=1 to m.st.0 while ix > 0
if sx > m.st.0 then
call err 'matchTrans('mask',' st') has only' ,
m.st.0 'variables'
r = r || substr(mask, ox, ix-ox)m.st.sx
ox = ix+1
ix = verify(mask, '*?', 'm', ox)
end
if ix > 0 then
call err 'matchTrans('mask',' st') has only' ,
m.st.0 'variables'
return r || substr(mask, ox)
endProcedure matchTrans
/* copy match end *****************************************************/
/* copy csm begin ******************************************************
interface to csm,
it is integrate with adrTso, eg. dsnAlloc , 'RZ3/..' uses csm
***********************************************************************/
adrCsm:
return adrTso('csmExec' arg(1), arg(2))
endProcedure adrCsm
csmCopy: procedure expose m.
parse arg csnFr, csnTo, ggRet
if dsnGetMbr(csnTo) \= '' ,
& dsnGetMbr(csnFr) <> dsnGetMbr(csnTo) then
call err 'member rename' csnFr 'to' csnTo
parse value csmSysDsn(csnFr) with sysFr '/' dsnFr
parse value csmSysDsn(csnTo) with sysTo '/' dsnTo
if sysFr = '*' & sysTo <> '*' then do
pdsTo = dsnSetMbr(dsnTo)
al = "SYSTEM("sysTo") DDNAME(COPYTo)",
"DATASET('"pdsTo"') DISP(SHR)"
alRes = dsnAlloc(systo'/'pdsTo, ,'COPYTO', '*')
if datatype(alRes, 'n') then do
/* wir müssen es selbst allozieren csmxUtil
vergisst management class ||||| */
say 'could not allocate' al
say 'trying to create'
rc = listDsi("'"dsnSetMbr(dsnFr)"' SMSINFO")
if rc = 0 then
mv = ''
else if rc = 4 & sysReason = 19 then do
mv = 'UNITCNT(30)'
say 'multi volume' mv
end
else if rc \= 0 then
call err 'listDsi rc' rc 'reason' sysReason,
sysMsgLvl1 sysMsgLvl2
al = left(al, length(al)-4)'CAT)'
if right(sysDsSms, 7) == 'LIBRARY' ,
| abbrev(sysDsSms, 'PDS') then
al = al 'DSNTYPE(LIBRARY)'
if sysUnits = 'TRACK' then
sysUnits = 'TRACKS'
al = al "DSORG("sysDSorg") MGMTCLAS("sysMgmtClass")",
"RECFM("sysREcFM") LRECL("SYSLRECL")",
"blksize("sysBLkSIZE")",
"SPACE("sysPrimary"," sysSeconds")" sysUnits mv
call adrCsm "allocate" al
end
call adrTso 'free dd(copyTo)'
end
c = "'COPY" sysFr"/''"dsnFr"'' TO" ,
sysTo"/''"dsnSetMbr(dsnTo)"'' REPLACE'"
return adrTso("exec 'CSM.RZ1.P0.EXEC(CSRXUTIL)'" c , ggRet)
return
endProcedure csmCopy
csmAlloc: procedure expose m.
parse arg dsn dd disp rest ':' nn, retRc
sys = ''
a2 = ''
parse value csmSysDsn(dsn) with sys '/' dsn
if disp = '' then
disp = 'shr'
al = "SYSTEM("sys") DDNAME("dd")"
if dsn <> '' then do
a2 = "DATASET('"dsnSetMbr(dsn)"')"
mbr = dsnGetMbr(dsn)
if mbr <> '' then
a2 = a2 'MEMBER('mbr')'
end
if abbrev(disp, 'SYSOUT(') then
a2 = a2 disp
else
a2 = a2 "DISP("disp")"
if retRc <> '' | nn = '' then do
alRc = adrCsm('allocate' al a2 rest, retRc)
if alRc <> 0 then
return alRc
return dd 'call adrTso "free dd('dd')";'
end
do retry=0 by 1
alRc = adrCsm('allocate' al a2 rest, '*')
if alRc = 0 then
return dd 'call adrTso "free dd('dd')";'
if retry > 0 | nn = '' | wordPos(disp, 'OLD SHR') < 1 then
return err('cmsAlloc rc' alRc 'for' al rest)
say 'csmAlloc rc' alRc 'for' al a2 rest '...trying to create'
nn = al 'disp(cat)' dsnCreateAtts(dsn, nn, 1)
call adrCsm 'allocate' nn
call adrTso 'free dd('dd')'
end
endProcedure csmAlloc
csmSysDsn: procedure expose m.
parse upper arg dsn, withStar
if pos('/', dsn) < 1 then
sys = '*'
else
parse var dsn sys '/' dsn
if sys <> '' & sys <> '*' & sys <> sysvar(sysnode) then
return sys'/'dsn
else if withStar == 0 then
return dsn
else
return '*/'dsn
endProcedure csmSysDsn
/* copy csm end********************************************************/
/* copy sqlO begin ***************************************************
sql interface mit o und j Anbindung
***********************************************************************/
sqlOini: procedure expose m.
if m.sqlO.ini == 1 then
return
call sqlIni
m.sqlO.ini = 1
m.sqlO.cursors = left('', 200)
call jIni
call classNew 'n SqlResultRdr u JRWO', 'm',
, "jReset m.m.cursor = arg; m.m.type = arg2;",
, "jOpen call sqlResultRdrOpen m, opt",
, "jClose call sqlClose m.m.cursor",
, "jReadO return sqlSelReadO(m)"
call classNew 'n SqlSel u JRWO', 'm',
, "jReset m.m.src = arg; m.m.type = arg2;",
, "jOpen call sqlSelOpen m, opt",
, "jClose call sqlSelClose m",
, "jReadO return sqlSelReadO(m)"
call classNew 'n SqlDRS u SqlSel', 'm',
, "jReset m.m.loc = arg; m.m.type = arg2;",
, "jOpen call sqlDRSOpen m, opt",
, "jClose call sqlSelClose m",
, "jReadO return sqlSelReadO(m)"
call classNew 'n SqlRxConnection u', 'm',
, "sqlQuery return sqlRxQuery(cx, src, retOk)",
, "sqlFetch return sqlRxFetch(cx, dst, retOk)",
, "sqlClose return sqlRxClose(cx, retOk)",
, "sqlUpdate return sqlRxUpdate(cx, src, retOk)",
, "sqlCall call err 'implement sqlRxCall"
call classNew 'n SqlRxStatement u', 'm',
, "sqlQuery return sqlRxQuery(m.cx.cursor, src, retOk)",
, "sqlFetch return sqlRxFetch(m.cx.cursor, dst, retOk)",
, "sqlClose return sqlRxClose(m.cx.cursor, retOk)",
, "sqlUpdate return sqlRxUpdate(m.cx.cursor, src, retOk)",
, "sqlCall call err 'implement sqlRxCall"
call classNew 'n SqlCsmConnection u', 'm',
, "sqlQuery return sqlCsmQuery(cx, src, retOk)",
, "sqlFetch return sqlCsmFetch(cx, dst)",
, "sqlClose return 0",
, "sqlUpdate call err 'implement sqlCsmUpdate'" ,
, "sqlCall call err 'implement sqlCsmCall'"
call classNew 'n SqlCsmStatement u', 'm',
, "sqlQuery return sqlCsmQuery(m.cx.cursor, src, retOk)",
, "sqlFetch return sqlCsmFetch(m.cx.cursor, dst)",
, "sqlClose return 0",
, "sqlUpdate call err 'implement sqlCsmUpdate'" ,
, "sqlCall call err 'implement sqlCsmCall'"
return 0
endProcedure sqlOini
/*--- execute a query from sql, with one resultset -------------------*/
sqlQuery: procedure expose m.
parse arg cx, src, retOk, m.sql.cx.type
if m.sql.cx.type \== '' then
m.sql.cx.type = class4Name(m.sql.cx.type)
if datatype(cx, 'n') then
interpret objMet(m.sql.connection, 'sqlQuery')
else
interpret objMet(cx, 'sqlQuery')
/*--- fetch next row to m.dst.* at end return false ------------------*/
sqlFetch: procedure expose m.
parse arg cx, dst, retOk
if datatype(cx, 'n') then
interpret objMet(m.sql.connection, 'sqlFetch')
else
interpret objMet(cx, 'sqlFetch')
/*--- close cursor 'c'cx ---------------------------------------------*/
sqlClose: procedure expose m.
parse arg cx, retOk
if datatype(cx, 'n') then
interpret objMet(m.sql.connection, 'sqlClose')
else
interpret objMet(cx, 'sqlClose')
return 0
/*-- execute an sql with no resultset, but possibly outParms ---------*/
sqlUpdate: procedure expose m.
parse arg cx, src, retOk
if cx == '' | datatype(cx, 'n') then
interpret objMet(m.sql.connection, 'sqlUpdate')
else
interpret objMet(cx, 'sqlUpdate')
return sqlCsmUpdate(cx, src, retOk)
/*-- execute an sql call with outParms and multiple resultSets -------*/
sqlCall: procedure expose m.
parse arg cx, src, retOk
if cx == '' | datatype(cx, 'n') then
interpret objMet(m.sql.connection, 'sqlCall')
else
interpret objMet(cx, 'sqlCall')
return sqlCsmUpdate(cx, src, retOk)
/*--- connect to the db2 subsystem sys -----------------------------*/
sqlOConnect: procedure expose m.
parse arg sys, retCon
call sqlOIni
return sqlConnect(sys, retCon)
endProcedure sqlOConnect
sqlSel: procedure expose m.
parse arg src, type
s = oNew('SqlSel', inp2str(src, '-sql'), type)
call pipeWriteAll s
return m.s.rowCount
endProcedure sqlSel
sqlStmtsOpt: procedure expose m.
parse arg src, opts
upper opts
sub = ''
o = ''
ggRet = ''
do wx=1 to words(opts)
w = word(opts, wx)
if abbrev(w, '-SQL') then
o = o'-sql'substr(w, 5)
else if w == '-O' | w == 'O' then
o = o'-o'
else if w = '*' | datatype(w, 'n') then
ggRet = ggRet w
else if length(w) == 4 then
sub = w
else
call err 'bad opt' w 'in opts' opts 'not -sql? -o or subsys'
end
call sqlOIni
if sub == '' then
call sqlOConnect
else if sub \== m.sql.connected then
call sqlConnect sub
return sqlStmts(src, strip(ggRet), strip(o))
endProcedure sqlStmtsOpt
/*** execute sql's in a stream (separated by ;)
opt: 'o' ==> write objects, otherwise fmtFTab
's' ==> spufi formatting (window 72) otherwise linebreak */
sqlStmts: procedure expose m.
parse arg src, ggRet, opt
dlm = ';'
isStr = oStrOrObj(src, m.j.in)
fLen = ''
if pos('sql', opt) > 0 then
fLen = word(substr(opt, pos('sql', opt)+3), 1)
if isStr then do
m.sqlStmts.rdr = ''
call sbSrc sqlStmts, ggStr
end
else do
fi = jOpen(o2File(ggObj), '<')
call jCatSqlReset sqlStmts, , fi, fLen
end
do forever
s1 = jCatSqlNext(sqlStmts, dlm)
if s1 = '' then
leave
w1 = translate(word(s1, 1))
if w1 == 'TERMINATOR' then do
dlm = strip(substr(m.s.val, 12))
if length(dlm) \== 1 then
call scanErr s, 'bad terminator' dlm 'in' strip(m.s.val)
iterate
end
call out sqlStmt(s1, ggRet, opt)
end
if \ isStr then
call jClose fi
return 0
endProcedure sqlStmts
sqlStmt: procedure expose m.
parse arg src, retOk, opt
cx = sqlGetCursor()
r1 = sqlExecute(cx, src, retOK)
res = 'sqlCode' r1
if wordPos(m.sql.cx.fun, 'DELETE INSERT UPDATE') > 0 then
res = res',' m.sql.cx.updateCount 'rows' ,
translate(fun, m.mAlfLC, m.mAlfUC)'d'
else if m.sql.cx.updateCount\=='' & m.sql.cx.updateCount\=0 then
res = res',' m.sql.cx.updateCount 'rows updated'
aa = strip(src)
if m.sql.cx.resultSet \== '' then do
rdr = sqlResultRdr(cx)
if pos('o', opt) > 0 then
call pipeWriteAll rdr
else
call fmtFTab sqlStmtFmt, rdr
res = m.rdr.rowCount 'rows fetched'
end
ll = 75 - length(res)
if length(aa) > ll then
aa = space(aa, 1)
if length(aa) > ll then
aa = left(aa, ll-3)'...'
call sqlFreeCursor cx
return res':' aa
endProceduire sqlStmt
removeSqlStmt: procedure expose m.
parse arg src, ggRet, opt
bx = verify(src, '( ')
if bx < 1 then
return ''
fun = translate(word(substr(src, bx), 1))
w2 = translate(word(substr(src, bx), 2))
res = ''
if fun == 'SELECT' | fun = 'WITH' then do
s = oNew('SqlSel', inp2str(src, '%S%+Q\s'))
if pos('o', opt) > 0 then
call pipeWriteAll s
else
call fmtFTab sqlStmtFmt, s
res = m.s.rowCount 'rows fetched'
end
else if fun = 'SET' & abbrev(w2, ':') then do
ex = pos('=', w2)
if ex > 2 then
var = strip(substr(w2, 2, ex-2))
else
var = strip(substr(w2, 2))
if var = '' then
var = 'varUnbekannt'
call sqlExec src, ggRet
res = 'sqlCode' sqlCode var'='value(var)
end
else if fun = 'SET' | (fun = 'DECLARE' & w2 = 'GLOBAL') then do
call sqlExImm src, ggRet
res = 'sqlCode' sqlCode
end
else if fun = 'CALL' then do
res = sqlStmtCall(src, ggRet, opt)
end
else do
if pos('-', ggRet) < 1 & fun = 'DROP' then
ggRet = -204 ggRet
call sqlExec src, ggRet
res = 'sqlCode' sqlCode
if wordPos(fun, 'DELETE INSERT UPDATE') > 0 THEN
res = res',' sqlErrd.3 'rows' ,
translate(fun, m.mAlfLC, m.mAlfUC)'d'
end
aa = strip(src)
ll = 75 - length(res)
if length(aa) > ll then
aa = space(aa, 1)
if length(aa) > ll then
aa = left(aa, ll-3)'...'
return res':' aa
endProcedure removeSqlStmt
sqlStmtCall: procedure expose m.
parse arg src, ggRet, opt
s = scanSrc(scanSqlReset(sqlstmtcall, ,0), src)
if \ scanSqlId(scanSkip(s)) | m.s.val \== 'CALL' then
call scanErr s, 'not a call'
if \ scanSqlQuId(scanSkip(s)) then
call scanErr s, 'qualified id missing after call'
loc = ''
if m.s.val.0 = 1 then
wh = 'name =' quote(m.s.val.1, "'")
else if m.s.val.0 = 2 then
wh = "schema = '"strip(m.s.val.1)"'" ,
"and name = '"strip(m.s.val.2)"'"
else if m.s.val.0 = 3 then do
loc = m.s.val.1
wh = "schema = '"strip(m.s.val.2)"'" ,
"and name = '"strip(m.s.val.3)"'"
end
else
call scanErr s, 'storedProcedureName' m.s.val ,
'has' m.s.val.0 'parts, should have 1, 2 or 3'
pn = m.s.val
da = sqlStmtCallDa(sqlStmtCall, loc, wh)
if \ scanLit(scanSkip(s), '(') then
call scanErr s, '( expected after call' pn
varChars = f
do ax=1
m.da.ax.varName = ''
isEmpty = 0
if scanLit(scanSkip(s), ':') then do
if \ scanVerify(scanSkip(s), m.mAlfDot) then
call scanErr s, 'variable expected after : in call' pn
m.da.ax.varName = m.s.tok
if m.da.ax.io == 'i' | m.da.ax.io == 'b' then
m.da.ax.sqlData = envGet(m.da.ax.varName)
end
else if scanString(s) then
m.da.ax.sqlData = m.s.val
else if scanVerify(s, ',):;', 'm') then
m.da.ax.sqlData = strip(m.s.tok)
else
isEmpty = 1
if scanLit(scanSkip(s), ')') then
leave
if \ scanLit(s, ',') then
call scanErr s, if(isEmpty, 'value, var, ') ,
|| "',' or ')' expected"
end
if ax \= m.da.sqlD then
if \ (ax=1 & m.da.sqlD = 0 & isEmpty) then
call scanErr s, 'call with' ax 'parms but' ,
pn 'needs' m.da.sqld
caCo = sqlExec('call' pn 'using descriptor :M.'da, 466)
call out '--- called' pn', sqlCode' caCo
do ax=1 to m.da.sqlD
call Out ' parm' ax m.da.ax.io m.da.ax.parmName,
|| if(m.da.ax.varName \== '',' $'m.da.ax.varName),
'=' m.da.ax.sqlData
if m.da.ax.varName \== '' then
call envPut m.da.ax.varName, m.da.ax.sqlData
end
if caCo = 466 then do
drop sqlDP
call sqlExec 'describe procedure :pn into :m.sqlDp'
if m.sqldp.sqlD < 1 then
call err 'bad sqldp sqlD='m.sqldp.sqlD 'for sqlCode' caCo
do dx=1 to m.sqldp.sqlD
call out ' dynamic result set' dx m.sqldp.dx.sqlName ,
'locator='m.sqldp.dx.sqlLocator
end
do dx=1 to m.sqldp.sqlD
drs = 'dynamic result set' dx'='m.sqldp.dx.sqlName 'of' pn
call out '--- begin of' drs
rdr = sqlDRS(m.sqldp.dx.sqlLocator)
if pos('o', opt) > 0 then
call pipeWriteAll rdr
else
call fmtFTab sqlStmtFmt, rdr
call out '---' m.rdr.rowCount 'rows fetched from' drs
end
end
return 'sqlCode' caCo
endProcedure sqlStmtCall
sqlStmtCallDa: procedure expose m.
parse arg da, loc, wh
cr = if(loc=='',,loc'.')'sysIbm'
sql = "select 'SCHEMA=''' || strip(schema) || ''''",
"|| ' and name=''' || strip(name ) || ''''",
"|| ' and specificName=''' || strip(specificName) || ''''",
"|| ' and routineType =''' || strip(routineType ) || ''''",
"|| ' and VERSION =''' || strip(VERSION ) || ''''",
"from" cr".SysRoutines ",
"where" wh "and active = 'Y'"
if sqlpreAllCl(49, sql, rou, ':m.rou') <> 1 then
call err m.rou.0 'routines found for' wh
rdr = jOpen(sqlRdr('select * from' cr'.sysParms where' m.rou,
'order by ordinal'), '<')
do ix=1 while assNN('A', jReadO(rdr))
if m.a.ordinal <> ix then
call err 'ix' ix 'mismatch ordinal' m.a.ordinal
ty = m.a.dataTypeId
m.da.ix.sqlType = ty
m.da.ix.sqlLen = m.a.length
m.da.ix.sqlLen.sqlPrecision = m.a.length
m.da.ix.sqlLen.sqlScale = m.a.scale
if wordPos(ty, 384 385) > 0 then /* date */
m.da.ix.sqlLen = 10
else if wordPos(ty, 388 389) > 0 then /* time */
m.da.ix.sqlLen = 8
else if wordPos(ty, 392 393) > 0 then /* timestamp */
m.da.ix.sqlLen = 26
m.da.ix.sqlData = ''
m.da.ix.parmName= m.a.parmName
m.da.ix.io = translate(m.a.rowType, 'iob', 'POB')
m.da.ix.sqlInd = 1
end
m.da.sqlD = ix - 1
return da
endProcedure sqlStmtCallDa
sqlResultRdr: procedure expose m.
parse arg cx, type
return oNew('SqlResultRdr', cx, type)
endProcedure sqlRdr
sqlRdr: procedure expose m.
parse arg src, type
return oNew('SqlSel', inp2str(src, '%S%+Q\s'), type)
endProcedure sqlRdr
sqlResultRdrOpen: procedure expose m.
parse arg m, opt
if opt\== m.j.cRead then
call err 'opt not' m.j.cRead 'sqlResultRdrOpen('m',' opt')'
m.m.jReading = 1
m.m.rowCount = 0
return m
endProcedure sqlResultRdrOpen
/*--- prepare and open cursor
generate type and fetchList ------------------------------------*/
sqlSelOpen: procedure expose m.
parse arg m, opt
m.m.cursor = sqlGetCursor()
call sqlQuery m.m.cursor, m.m.src, ,m.m.type /* ????? */
return sqlResultRdrOpen(m, opt)
endProcedure sqlOpen
/*--- dynamic result sets --------------------------------------------*/
sqlDRS: procedure expose m.
parse arg loc, type
return oNew('SqlDRS', loc, type)
endProcedure sqlDRS
sqlDRSOpen: procedure expose m.
parse arg m, opt
if opt\== m.j.cRead then
call err 'opt not' m.j.cRead 'sqlDRSOpen('m',' opt')'
crs = sqlGetCursor('a')
crN = 'C'crs
m.m.cursor = crs
call sqlexec 'allocate C'crs 'cursor for result set :m.m.loc'
call sqlExec('describe cursor :crN into :M.SQL.'crs'.D')
m.m.jReading = 1
m.m.rowCount = 0
return m
endProcedure sqlDRSOpen
/*--- return a free cursor -------------------------------------------*/
sqlGetCursor: procedure expose m.
parse arg rng
if rng == '' then
return sqlGetCursorRng(rng, 10, 49)
else if rng == 'h' then
return sqlGetCursorRng(rng, 60, 99)
else if rng == 'a' then
return sqlGetCursorRng(rng, 110, 199)
else
call err 'bad cursor range' rng
endProcedure sqlGetCursor
sqlGetCursorRng: procedure expose m.
parse arg rng, fr, to
cx = pos(' ', m.sqlO.cursors, fr)
if cx < fr & cx > to then
call err "no more '"rng"' cursors between" fr "and" to,
":"m.sqlO.cursors
m.sqlO.cursors = overlay('u', m.sqlO.cursors, cx)
return cx
endProcedure sqlGetCursorRNG
/*--- mark a cursor as closed ----------------------------------------*/
sqlFreeCursor: procedure expose m.
parse arg cx
if substr(m.sqlo.cursors, cx, 1) \== 'u' then
call err 'sqlFreeCursor('cx') not in use :'m.sqlo.cursors
m.sqlO.cursors = overlay(' ', m.sqlO.cursors, cx)
return
endProcedure sqlFreeCursor
/*--- create the type, fetch vars etc. from the sqlDA ---------------*/
sqlFetchClass: procedure expose m.
parse arg cx
if m.sql.cx.type = '' then do
ff = mCat('SQL.'cx'.COL', '%+Q v, f ')
m.sql.cx.type = classNew('n* SQL u f' ff 'v')
end
return m.sql.cx.type
endProcedure sqlFetchClass
/*--- fetch cursor for this sqlSel -----------------------------------*/
sqlSelReadO: procedure expose m.
parse arg m
cx = m.m.cursor
v = mNew(sqlFetchClass(cx))
if \ sqlFetch(cx, v) then
return ''
m.m.rowCount = m.m.rowCount + 1
return v
endProcedure sqlSelReadO
/*--- close sql Cursor -----------------------------------------------*/
sqlSelClose: procedure expose m.
parse arg m, v
call sqlClose m.m.cursor
call sqlFreeCursor m.m.cursor
m.m.cursor = ''
return m
endProcedure sqlSelClose
/*--- generate the format ff for a sql cx as specified in sp
use the information from the sqlDa -------------------------*/
deleteSqlGenFmt: procedure expose m.
parse arg ff, cx, sp
if abbrev(sp, '=') then
return substr(sp, 2)
if sp = '' then
sp = '*st'
m.ff.0 = m.sql.cx.d.sqlD
m.ff.flds = oFlds(sqlType(cx))
if abbrev(sp, '*') then do
do ix=1 to m.ff.0
m.ff.ix = substr(sp, 2)
end
return ff
end
if abbrev(fmts, '=') then
m.Sql.cx.FMT = substr(fmts, 2)
defs = 'ir7 fr9 sl12 Tl26' sp
do wx = 1 to words(defs)
parse value word(defs, wx) with ty 2 fo
select
when ty = 'd' then t.384 = fo
when ty = 'f' then t.480 = fo'/f'
when ty = 'i' then t.496 = fo'/i'
when ty = 'n' then t.484 = fo'/n'
when ty = 's' then t.448 = fo
when ty = 't' then t.388 = fo
when ty = 'T' then t.392 = fo
otherwise call err 'bad type' ty 'for format' fo
end
end
if symbol('t.496') == 'VAR' then
t.500 = t.496
if symbol('t.448') == 'VAR' then do
t.452 = t.448
t.456 = t.448
t.464 = t.448
end
do wx = 1 to m.ff.0
ty = m.sql.cx.d.wx.sqlType
le = m.sql.cx.d.wx.sqlLen
withNulls = ty // 2
ty = ty - withNulls
if symbol('t.ty') <> 'VAR' then
call err 'sqlType' ty 'not supported'
parse var t.ty fo 2 fl '/' op
if op = 'i' then
if le = 2 then le = 6
else le = 12
else if op <> '' then
call err 'length for sqlType' ty 'op' op 'not implemented'
if fl = '=' then
fl = le
else if abbrev(fl, '<') then
fl = min(le, substr(fl, 2))
m.ff.wx = fo || fl
end
return ff
endProcedure sqlGenFmt
/* copy sqlO end **************************************************/
/* copy sqlCsm begin **************************************************/
/*--- send an sql to csm an handle sqlCode ---------------------------*/
sqlCsmExe:
parse arg cx, ggSqlStmt, ggRetOk
sql_HOST = m.sql.conHost
SQL_DB2SSID = m.sql.conSSID
sql_query = ggSqlStmt
address tso "CSMAPPC START PGM(CSMASQL)"
if \ (rc = 0 | rc = 4) then
call err 'csmappc rc' rc
if sqlCode = 0 then
return 0
else if pos('*', ggRetOk) > 0 | wordPos(sqlCode, ggRetOk) > 0 ,
then do
if sqlCode < 0 & pos('say', ggRetOk) > 0 then
call errSay sqlmsg(sqlCA2Rx(sqlCa))
return sqlCode
end
else if sqlCode < 0 then
call err sqlmsg(sqlCA2rx(sqlCa))
else if pos('w', ggRetOk) < 1 then
if sqlCode = 100 then
call errSay 'sqlCode +100 row not found\nstmt =' ggSqlStmt
else
call errSay sqlMsg(sqlCA2rx(sqlCa)), ,'w'
return sqlCode
endProcedure sqlCsmExe
/*--- execute a query from sql, with one resultset -------------------*/
sqlCsmQuery: procedure expose m.
parse arg cx, sqlSrc, retOk, src
res = sqlCsmExe(cx, sqlSrc, 100 retOk)
if res < 0 then
return res
f = m.sql.cx.type
if src == '' then
src = 'SQL.'cx'.DATA'
m.sql.cx.data = src
if f \== '' then do
f = f'.FLDS'
if m.f.0 < sqlD then
call err 'not enough fields in type'
end
do kx=1 to sqlD
rxNa = SQLDA_REXXNAME.kx
cn = sqlVarName(f, kx, sqlDa_name.kx)
m.sql.cx.col.kx = cn
do rx=1 to sqlRow#
if substr(sqlIndicator.rx, kx ,1) == 'ff'x then
m.src.rx.cn = m.sqlNull
else
m.src.rx.cn = value(rxNa'.'rx)
end
end
m.src.0 = sqlRow#
m.sql.cx.col.0 = sqlD
m.sql.cx.daIx = 0
return 0
endProcedure sqlCsmQuery
sqlCsmFetch: procedure expose m.
parse arg cx, dst
src = m.sql.cx.data
rx = m.sql.cx.daIx + 1
if rx > m.sql.cx.data.0 then
return 0
m.sql.cx.daIx = rx
do kx = 1 to m.sql.cx.col.0
c = m.sql.cx.col.kx
m.dst.c = m.src.rx.c
end
return 1
endProcedure sqlCsmFetch
/* copy sqlCsm end **************************************************/
/* copy sql begin ***************************************************
sql interface
***********************************************************************/
/*--- initialize sqlRx (belongs to sqlQ, but currently only one|) ----*/
sqlIni: procedure expose m.
if m.sql.ini == 1 then
return
m.sqlNull = '---'
m.sqlInd = 'sqlInd'
m.sqlRetOK.0 = 0
m.sqlCAMsg = 0
m.sqlSuMsg = 2
call sqlPushRetOk
m.sql.ini = 1
m.sql.conType = ''
return 0
endProcedure sqlIni
/*--- connect and/or disconnect to DB2 -------------------------------*/
sqlConnect: procedure expose m.
parse upper arg sys, retOk
if sys \== '' then
nop
else if sysvar(sysnode) == 'RZ1' then
sys = 'DBAF'
else
call err 'no default subsys for' sysvar(sysnode)
call sqlOIni
hst = ''
if pos('/', sys) > 0 then do
parse value space(sys, 0) with hst '/' sys
cTy = 'Csm'
end
else do
cTy = 'Rx'
end
if m.sql.conType == cTy & m.sqlHost==hst & m.sqlConSSID == sys then
return 0
if m.sql.conType \== '' then
call sqlDisconnect
res = 0
if cTy = 'Rx' then
res = sqlRxConnect(sys, retOk)
if res < 0 then
return res
m.sql.conType = cTy
m.sql.conhost = hst
m.sql.conSSID = sys
m.sql.connection = oNew('Sql'cTy'Connection')
return res
endProcedure sqlConnect
sqlDisconnect: procedure expose m.
parse arg retOk
if m.sql.conType == 'Rx' then
call sqlRxDisconnect
m.sql.conType = ''
m.sql.conhost = ''
m.sql.conSSID = ''
return 0
endProcedure sqlDisonnect
/*--- execute a query from sql, with one resultset -------------------*/
sqlRxQuery: procedure expose m.
parse arg cx, src, retOk
m.sql.cx.updateCount = ''
m.sql.cx.resultSet = ''
m.sql.cx.needDesc = 1
res = sqlPrepare(cx, src, retOk, 1)
if res < 0 then
return res
res = sqlExec('declare c'cx 'cursor for s'cx, retOk)
if res < 0 then
return res
res = sqlExec('open c'cx, retOk)
if res < 0 then
return res
call sqlRxFetchVars cx
m.sql.cx.updateCount = sqlErrd.3
m.sql.cx.resultSet = cx
return res
endProcedure sqlRxQuery
/*--- fetch next row to m.dst.* at end return false ------------------*/
sqlRxFetch: procedure expose m.
parse arg cx, dst, retOk
if retOk == '' then
retOk = 100 m.sqlRetOk
fetCode = sqlExec('fetch c'cx 'into' sqlRxFetchVars(cx), retOk)
if fetCode == 100 then
return 0
if fetCode < 0 then
return fetCode
call sqlSetNull cx, dst
return 1
endProcedure sqlRxFetch
/*--- close cursor 'c'cx ---------------------------------------------*/
sqlRxClose: procedure expose m.
parse arg cx, retOk
return sqlExec('close c'cx, retOk)
endProcedure sqlRxClose
/*-- execute an sql with no resultset, but possibly outParms ---------*/
sqlRxUpdate: procedure expose m.
parse arg cx, src, retOk
m.sql.cx.updateCount = ''
m.sql.cx.resultSet = ''
bx = verify(src, '( ')
if bx > 0 then
fun = translate(word(substr(src, bx), 1))
if fun = 'SET' then do
w2 = translate(word(substr(src, bx), 2))
if \ abbrev(w2, ':') then
return sqlExImm(src, ggRet)
trace ?r
ex = pos('=', w2)
if ex = 0 then
ex = length(w2)+1
var = strip(substr(w2, 2, ex-2))
if var = '' then
call err 'bad hostVar in' src
m.sql.outVar = var
src2 = 'set :M.sql.out.'var substr(w, ex) subword(src, 3)
return sqlExec(src2, ggRet)
end
if fun == 'DECLARE' then do
if 'GLOBAL' == translate(word(substr(src, bx), 2)) then
return sqlExImm(src, ggRet)
end
res = sqlExec(src, ggRet)
if wordPos(fun, 'DELETE INSERT UPDATE') > 0 then
m.sql.cx.updateCount = sqlErrd.3
return res
endProcedure sqlRxUpdate
/*-- execute a query, update or call ---------------------------------*/
sqlExecute: procedure expose m.
parse arg cx, src, retOk
src = inp2Str(src, '-sql')
f = translate(word(substr(src, max(verify(src, '( '), 1)), 1))
m.sql.cx.fun = f
if f == 'SELECT' | fun == 'WITH' then
return sqlQuery(cx, src, retOk)
else if f == 'CALL' then
call err 'implement sql call for:' src
else
return sqlUpdate(cx, src, retOk)
endProcedure sqlExecute
/*-- execute a query, copy result to stem ----------------------------*/
sql2St: procedure expose m.
parse arg src, dst, retOk, type
cx = sqlGetCursor()
res = sqlQuery(cx, src, retOk, type)
if res >= 0 then do
do sx=1 while sqlFetch(cx, dst'.'sx)
end
res = sx-1
end
m.dst.0 = res
call sqlClose cx
call sqlFreeCursor cx
return res
endProcedure sql2St
/*-- execute a query and return value of the first column
if > 1 row fail, if 0 rows return arg(3) or fail ----------*/
sql2One: procedure expose m.
parse arg src, dst
cx = sqlGetCursor()
call sqlQuery cx, src
if \ sqlFetch(cx, dst) then
if arg() > 2 then
return arg(3)
else
call err 'no row returned for:' src
if sqlFetch(cx, dst.2) then
call err '2 or more rows for' src
c1 = m.sql.cx.col.1
res = m.dst.c1
call sqlClose cx
call sqlFreeCursor cx
return res
endProcedure sql2One
/*--- prepare statement 's'cx from sql src into descriptor desc ------*/
sqlPrepare: procedure expose m.
parse arg cx, src, ggRetOk, descOut
s = ''
src = inp2str(src, '%+Q\s')
m.sql.cx.d.sqlD = 'noSqlDA'
m.sql.cx.i.sqlD = 'noDescInp'
m.sql.cx.fetchVars = ''
m.sql.cx.col.0 = ''
m.sql.cx.into = ''
if descOut == 1 then
s = 'into :M.SQL.'cx'.D'
return sqlExec('prepare s'cx s 'from :src', ggRetOk)
endProcedure sqlPrepare
/*--- open cursor 'c'cx using arguments arg(2), arg(3)... ------------*/
sqlOpen: procedure expose m.
parse arg cx
if arg() <= 1 then
return sqlExec('open c'cx)
call sqlDescribeInput cx
do ix=1 to arg()-1
call sqlDASet cx , 'I', ix, arg(ix+1)
end
return sqlExec('open c'cx 'using descriptor :M.SQL.'cx'.I')
endProcedure sqlOpen
/*--- describe output (if not already done)
and return size of sqlDa ------------------------------------*/
sqlDescribeOutput: procedure expose m.
parse arg cx, force
if force == 1 | \ datatype(m.sql.cx.d.sqlD, 'n') then
call sqlExec 'describe s'cx 'into :M.SQL.'cx'.D', 0
return m.sql.cx.d.sqlD
endProcedure sqlDescribeOutput
/*--- describe input (if not already done)
and return size of input sqlDA ------------------------------*/
sqlDescribeInput: procedure expose m.
parse arg cx, force
if force == 1 | \ datatype(m.sql.cx.i.sqlD, 'n') then
call sqlExec 'describe input s'cx 'into :M.SQL.'cx'.I'
return m.sql.cx.i.sqlD
endProcedure sqlDescribeInput
/*--- put sqlNull in all vars where indicator says so ---------------*/
sqlSetNull: procedure expose m.
parse arg cx, dst
do nx=1 to m.sql.cx.sqlNull.0
col = m.sql.cx.sqlNull.nx
if m.dst.col.sqlInd < 0 then
m.dst.col = m.sqlNull
end
return
endProcedure sqlSetNull
/*--- use describe output to generate column names,
fetchVariables and sqlNull names ---------------------*/
sqlRxFetchVars: procedure expose m.
parse arg cx
if m.sql.cx.fetchVars \== '' then
return m.sql.cx.fetchVars
call sqlDescribeOutput cx
f = m.sql.cx.type
if f \== '' then do
f = f'.FLDS'
if m.f.0 < m.sql.cx.d.sqlD then
call err 'not enough column names'
end
m.sql.cx.col.0 = m.sql.cx.d.sqlD
nx = 0
vars = ''
do kx=1 to m.sql.cx.d.sqlD
cn = sqlVarName(f, kx, m.sql.cx.d.kx.sqlName)
m.sql.cx.col.kx = cn
vars = vars', :m.dst.'cn
if m.sql.cx.d.kx.sqlType // 2 = 1 then do
vars = vars' :m.dst.'cn'.sqlInd'
nx = nx + 1
m.sql.cx.sqlNull.nx = cn
end
end
m.sql.cx.sqlNull.0 = nx
m.sql.cx.fetchVars = substr(vars, 3)
return m.sql.cx.fetchVars
endProcedure sqlRxFetchVars
sqlVarName: procedure expose m. sqlVarName.
parse arg f, kx, sNa
if f == '' then do
cn = translate(word(sNa, 1))
if cn == '' | symbol('sqlVarName.cn') == 'VAR' then
cn = 'COL'kx
sqlVarName.cn = 1
return cn
end
else do
if m.f.kx == '' then
call err 'implement empty varName'
return substr(m.f.kx, 2)
end
endProcedure sqlVarName
/*--- set one value in a DA, handle nulls ----------------------------*/
sqlDASet: procedure expose m.
parse arg cx, da, ix, val
m.sql.cx.da.ix.sqlData = val
m.sql.cx.da.ix.sqlInd = - (val == m.sqlNull)
/* data types schienen einmal nicht zu funktionieren .......
if wordPos(m.da.ix.sqlType, '384 385 388 389 392 393') > 0 then
m.da.ix.sqlType = 448 + (m.da.ix.sqlType // 2) */
return
endProcedure sqlDASet
sqlExImm:
parse arg ggSrc, ggRetOk
return sqlExec('execute immediate :ggSrc', ggRetOk)
endProcedure sqlExImm
sqlCommit: procedure expose m.
parse arg src
return sqlExec('commit')
endProcedure sqlCommit
/*--- execute sql thru the dsnRexx interface -------------------------*/
sqlExec: /* no procedure, to keep variables sql... */
parse arg ggSqlStmt, ggRetOk
address dsnRexx 'execSql' ggSqlStmt
/* say 'sqlCode' sqlCode 'rc' rc 'for' ggSqlStmt ggNo */
sqlHandleRCSqlCode:
if rc = 0 then
return 0
if ggRetOk = '' then
ggRetOk = m.sqlRetOk
if wordPos(rc, '1 -1') < 0 then
call err 'dsnRexx rc' rc sqlmsg()
else if pos('*', ggRetOk) > 0 | wordPos(sqlCode, ggRetOk) > 0 ,
then do
if sqlCode < 0 & pos('say', ggRetOk) > 0 then
say 'sqlError' sqlmsg()
return sqlCode
end
else if rc < 0 then
call err sqlmsg()
/*???lse if sqlCode <> 0 | (pos('w',ggRetOk)<1 & sqlWarn.0^==' ') then*/
else if (sqlCode <> 0 | sqlWarn.0^==' ') & pos('w',ggRetOk)<1 then
call errSay sqlMsg(), ,'w'
return sqlCode
endSubroutine sqlExec
/*--- connect to the db2 subsystem sys -----------------------------*/
sqlRxConnect: procedure expose m.
parse upper arg sys, ggRetOk
call sqlIni
address tso "SUBCOM DSNREXX"
if rc <> 0 then do
sRc = RXSUBCOM('ADD','DSNREXX','DSNREXX') /* ADD HOST CMD ENV */
if sRc <> 0 then
call err 'rc' sRc 'from RXSUBCOM(ADD, DSNREXX, DSNREXX)'
end
if sys = '-' then
return 0
ggSqlStmt = 'connect' sys
address dsnRexx ggSqlStmt
return sqlHandleRcSqlCode()
endProcedure sqlRxConnect
/*--- diconnect from db2 ---------------------------------------------*/
sqlRxDisconnect: procedure expose m.
parse arg retOk
ggSqlStmt = 'disconnect'
address dsnRexx ggSqlStmt
return sqlHandleRcSqlCode()
endProcedure sqlDisconnect
/*--- send a command to db2 through the TSO dsn processor ------------*/
sqlDsn: procedure expose m.
parse arg st, sys, cmd, rcOk
x = outtrap('M.'st'.')
push 'END'
push cmd
address tso 'DSN SYSTEM('sys')'
rr = rc
x = outtrap(off)
if rr = 0 | rcOk = '*' | wordPos(rr, rcOk) > 0 then
return rr
fl = max(1, m.st.0 - 10)
em = 'rc' rr 'for DSN SYSTEM('sys') cmd' cmd,
'\nOuputlines' fl '-' m.st.0':'
do lx=fl to m.st.0
em = em '\n' strip(m.st.lx, 't')
end
call err em
endProcedure sqlDsn
/*--- push and pop currently accepted sqlCodes -----------------------*/
sqlPushRetOk: procedure expose m.
parse arg rr
nx = m.sqlRetOk.0 + 1
m.sqlRetOk.0 = nx
m.sqlRetOk.nx = rr
m.sqlRetOk = rr
return
endProcedure sqlPushRetOk
sqlPopRetOk: procedure expose m.
nx = m.sqlRetOk.0 - 1
if nx < 1 then
call err 'sqlPopRetOk with .0' m.sqlRetOk.0
m.sqlRetOk = m.sqlRetOk.nx
m.sqlRetOk.0 = nx
return
endProcedure sqlPopRetOk
/*--- issue an sql error message -------------------------------------*/
sqlMsg: /* no procedure, to keep variables sql... */
if \ dataType(sqlCode, 'n') then do
ggRes = 'sqlCode' sqlCode 'not numeric\n'sqlCaMsg()
end
else do
ggRes = sqlDsntiar(sqlRx2CA())
ggWa = sqlMsgWarn()
if ggWa \= '' then
ggRes = ggRes'\nwarnings' ggWa
if m.sqlCAMsg == 1 then
ggRes = ggRes'\n'sqlCaMsg()'\n'sqlCaMsg(sqlCa2Rx(sqlCa))
end
ggSt = 'SQL.HOST'
ggVa = 'SQL.HOST.VAR'
ggBe = 'SQL.HOST.BEF'
call sqlHostVars ggSqlStmt, 12, ggSt
if datatype(sqlErrd.5, 'n') & sqlErrd.5 > 0 then do
ggW1 = translate(word(ggSqlStmt, 1))
ggW2 = translate(word(ggSqlStmt, 2))
if ggW1 == 'PREPARE' then
ggVV = sqlHostVarFind(ggSt, 'FROM')
else if ggW1 ggW2 == 'EXECUTE IMMEDIATE' then
ggVV = sqlHostVarFind(ggSt, 1)
else
ggVV = ''
if ggVV == '' then
ggRes = ggRes || sqlMsgSrcPos(ggSqlStmt, sqlErrd.5)
else
ggRes = ggRes || sqlMsgSrcPos(value(ggVV), sqlErrd.5)
end
ggRes = ggRes'\nstmt =' ggSqlStmt
ggPref = '\nwith'
do ggXX=1 to m.ggSt.0
ggRes = ggRes || ggPref m.ggBe.ggXX ':'m.ggVa.ggXX ,
'=' value(m.ggVa.ggXX)
ggPref = '\n '
end
if m.sqlSuMsg == 1 | (m.sqlSuMsg == 2 & m.sql.conHost \== '') then
ggRes = ggRes'\nsubsys =' ,
if(m.sql.conHost=='',,m.sql.conHost'/'),
|| m.sql.conSSID', interfaceType' m.sql.conType
return ggRes
endSubroutine sqlMsg
/*--- use dsnTiar to translate sql Info to error text ----------------*/
sqlDsnTiar: procedure expose m.
parse arg ca
if -438 = sqlCa2Rx(ca) then
return '\nSQLCODE = -438:',
'APPLICATION RAISED ERROR WITH sqlState' sqlState ,
'and DIAGNOSTIC TEXT:' sqlErrMc
liLe = 78
msLe = liLe * 10
msg = d2c(msLe,2) || left('', msLe)
len = d2c(liLe, 4)
ADDRESS LINKPGM "DSNTIAR ca msg len"
if rc <> 0 then
call err 'linkPgm dsnTiar rc' rc 'sqlCa' ca
res = strip(substr(msg, 13, liLe-10))
cx = pos(', ERROR: ', res)
if cx > 0 then
res = left(res, cx-1)':' strip(substr(res, cx+9))
do c=3+liLe by liLe to msLe while substr(msg, c, 10) = ''
res = res'\n 'strip(substr(msg, c+10, liLe-10))
end
return res
endProcedure sqlDsnTiar
/*--- format all rexx sqlCa fields into a message --------------------*/
sqlCaMsg:
return 'sqlCode' sqlCode 'sqlState='sqlState ,
'\n errMC='translate(sqlErrMc, ',', 'ff'x) ,
'\n warnings='sqlWarnCat('+') 'erP='sqlErrP ,
'\n errD.1='sqlErrD.1 '2='sqlErrD.2 '3='sqlErrD.3 ,
'\n errD.4='sqlErrD.4 '5='sqlErrD.5 '6='sqlErrD.6
endProcedure sqlCaMsg
/*--- format the sqlCA into the dsnTiar SQLCA ------------------------*/
sqlRx2Ca:
if \ (datatype(sqlcode, 'n') & datatype(sqlErrD.1, 'n') ,
& datatype(sqlErrD.3, 'n')) then
return err('sqlCode etc. not numeric\nsqlCa =' sqlCaMsg())
if digits() < 10 then
numeric digits 10
sqlCa = 'SQLCA ' || d2c(136, 4) || d2c(sqlCode, 4) ,
|| d2c(min(70, length(sqlErrMc)), 2)left(sqlErrMc, 70) ,
|| left(sqlErrP, 8) ,
|| d2c(sqlErrD.1, 4)d2c(sqlErrD.2, 4)d2c(sqlErrD.3, 4) ,
|| d2c(sqlErrD.4, 4)d2c(sqlErrD.5, 4)d2c(sqlErrD.6, 4) ,
|| sqlWarnCat() || sqlState
if length(sqlCa) <> 136 then
call err 'sqlCa length' length(sqlCa) 'not 136' ,
'\n'sqlCaMsg() '==>' ca', hex='c2x(ca)
return sqlCa
endProcedure sqlRx2Ca
/*--- extract the fields from the SqlCA and put it to rexx vars ------*/
sqlCA2Rx: procedure expose m. ,
sqlCode sqlErrMc sqlErrP sqlErrD. sqlWarn. sqlState
parse arg ca
numeric digits 10
if length(ca) < 136 | c2d(substr(ca, 9, 4), 4) <> 136 then
call err 'bad sqlCa len' length(ca) 'not 136:' ca', hex='c2x(ca)
sqlCode = c2d(substr(ca, 13 ,4), 4)
sqlErrMC = substr(ca, 19, c2d(substr(ca, 17, 2), 2))
sqlErrP = substr(ca, 89, 8)
do ix=1 to 6
sqlErrD.ix = c2d(substr(ca, 93 + 4 * ix, 4), 4)
end
do ix=0 to 10
sqlWarn.ix = substr(ca, 121 + ix, 1)
end
sqlState = substr(ca, 132, 5)
return sqlCode
endProcedure sqlCA2Rx
/*--- concat the sql warnings with Separator sep --------------------*/
sqlWarnCat: procedure expose m. sqlWarn.
parse arg sep
return sqlWarn.0 || sep,
|| sqlWarn.1||sqlWarn.2||sqlWarn.3||sqlWarn.4||sqlWarn.5||sep ,
|| sqlWarn.6||sqlWarn.7||sqlWarn.8||sqlWarn.9||sqlWarn.10||sep
endProcedure sqlWarnCat
/*--- make the text for sqlWarnings ----------------------------------*/
sqlMsgWarn: procedure expose m. sqlWarn.
r = ''
text =' 1=W var truncated, 1=S scrollable, 1=N nonScrollable,' ,
'2=W nulls in aggregate,' ,
'3=W more cols than vars,' ,
'3=Z more result sets than locators,' ,
'4=W no where, 4=D sensitive dynamic, 4=I insensitive,' ,
'4=S sensitive static,' ,
'5=W not valid sql, 5=1 readOnly, 5=2 readDelete,' ,
'5=3 readDeleteUpdate,' ,
'6=W day changed to month range,' ,
'7=W dec digits truncated,' ,
'8=W char substituted,' ,
'9=W arith excep in count, 9=Z multipe result sets,' ,
'10=W char conversion err in ca,'
do wx = 1 to 10
w = sqlWarn.wx
if w = ' ' then
iterate
t = wx'='w
cx = pos(' 'wx'='w' ', text)
ex = pos(',' , text, cx + 1)
if cx > 0 & ex > cx then
r = r substr(text, cx+1, ex-cx)
else
r = r wx'='w '?,'
end
r = strip(r, 't', ',')
if r = '' & sqlwarn.0 <> '' then
call err 'sqlWarn.0='sqlWarn.0 'but all warns empty'
return r
endProcedure sqlMsgWarn
/*--- show in the source src the point pos (where error occured)
a few lines from src around pos and arrow to pos ----------*/
sqlMsgSrcPos: procedure expose m.
parse arg src, pos
liLe = 68
liCn = 3
afLe = 25
t1 = space(left(src, pos), 1)
t2 = left(' ', substr(src, pos, 1) == ' ' ,
| substr(src, pos+1, 1) == ' ') ,
|| space(substr(src, pos+1), 1)
afLe = min(afLe, length(t2))
if length(t1) + afLe > liLe * liCn then
t1 = '...'right(t1, liLe * liCn - afLe -3)
else if length(t1)+length(t2) > liLe then
t1 = left(' ', (liCn * liLe - length(t1) -afLe) // liLe)||t1
pL = length(t1) // liLe
if length(t2) <= liLe-pL then
tx = t1 || t2
else
tx = t1 || left(t2, liLe-pL-3)'...'
res = '\nsrc' strip(substr(tx, 1, liLe), 't')
do cx=1+liLe by liLe to length(tx)
res = res || '\n +' strip(substr(tx, cx, liLe), 't')
end
loc = 'pos' pos 'of' length(src)
if length(loc)+6 < pL then
return res'\n >' right('>>>'loc'>>>', pL)
else
return res'\n >' left('', pL-1)'<<<'loc'<<<'
endProcdedure sqlMsgSrcPos
/*--- get the hostVars in the sql in src and the word before ---------*/
sqlHostVars: procedure expose m.
parse arg src, cnt, st
cx = 1
sx = 0
do cnt
cx = pos(':', src, cx) + 1
if cx < 2 then
leave
if pos(substr(src, cx, 1), m.mAlfRex1) < 1 then
iterate
ex = verify(src, m.mAlfRexR, 'n', cx)
if ex - cx > 100 then
iterate
sx = sx + 1
if ex < 1 then
m.st.var.sx = substr(src, cx)
else
m.st.var.sx = substr(src, cx, ex - cx)
/* search word before */
do bE = cx-2 by -1 to 1 ,
while substr(src, bE, 1) == ' '
end
do bB = bE by -1 to max(1, bE-20),
while pos(substr(src, bB, 1), m.mAlfa) > 0
end
if bB < bE & bB >= 0 then
m.st.bef.sx = substr(src, bB+1, bE-bB)
else
m.st.bef.sx = ''
end
m.st.0 = sx
return sx
endProcedure sqlHostVars
/*--- find the name of hostvar, by index or by before ----------------*/
sqlHostVarFind: procedure expose m.
parse arg st, fnd
if datatype(fnd, 'n') & fnd <= m.st.0 then
return m.st.var.fnd
do ix=1 to m.st.0
if translate(m.st.bef.ix) = fnd then
return m.st.var.ix
end
return ''
endSubroutine sqlHostVarFind
/* copy sql end **************************************************/
/* copy j begin *******************************************************
the j framework
jReset
jOpen
jClose
jRead
jWrite
***********************************************************************/
jRead: procedure expose m.
parse arg m, var
call objMetClaM m, 'jRead'
if m.m.jReading then
interpret ggCode
else
return err('jRead('m',' var') but not opened r')
endProcedure jRead
jReadO: procedure expose m.
parse arg m
if arg() > 1 then call err '??? old interface'
call objMetClaM m, 'jReadO'
if m.m.jReading then
interpret ggCode
else
return err('jReadO('m',' var') but not opened r')
endProcedure jReadO
jWrite: procedure expose m.
parse arg m, line
call objMetClaM m, 'jWrite'
if \ m.m.jWriting then
return err('jWrite('m',' line') but not opened w')
interpret ggCode
return
endProcedure jWrite
jWriteO: procedure expose m.
parse arg m, var
call objMetClaM m, 'jWriteO'
if \ m.m.jWriting then
return err('jWriteO('m',' var') but not opened w')
interpret ggCode
return
endProcedure jWriteO
jWriteAll: procedure expose m.
parse arg m, rdr
rdr = o2file(rdr)
call objMetClaM m, 'jWriteAll'
if \ m.m.jWriting then
return err('jWriteAll('m',' rdr') but not opened w')
interpret ggCode
return
endProcedure jWriteAll
jWriteNow: procedure expose m.
parse arg m, rdr
rdr = o2file(rdr)
interpret objMet(m, 'jWriteNow')
return
endProcedure jWriteNow
jCat: procedure expose m.
parse arg opt m
if m = '' then do
m = opt
opt = m.j.cWri
end
call jOpen m, opt
do ax=2 to arg()
call jWriteAll m, arg(ax)
end
call jClose m
return m
endProcedure jCat
jWriteNowImpl: procedure expose m.
parse arg m, rdr
call jOpen rdr, m.j.cRead
do while jRead(rdr, line)
call jWrite m, m.line
end
call jClose rdr
return
endProcedure jWriteNow
jWriteNowImplO: procedure expose m.
parse arg m, rdr
call jOpen rdr, m.j.cRead
do while assNN('li', jReadO(rdr))
call jWriteO m, li
end
call jClose rdr
return
endProcedure jWriteNow
/*--- reset JRW: fail if open, initialise ---------------------------*/
jReset: procedure expose m.
parse arg m, arg, arg2, arg3
if m.m.jReading == 1 | m.m.jWriting == 1 then
return err('still open jReset('m',' arg2')') / 3
m.m.jReading = 0
m.m.jWriting = 0
m.m.jUsers = 0
interpret objMet(m, 'jReset')
return m
endProcedure jReset
jOpen: procedure expose m.
parse arg m, opt
call objMetClaM m, 'jOpen'
oUsers = m.m.jUsers
if opt = m.j.cRead then do
if m.m.jReading then
nop
else if m.m.jWriting then
return err('already opened for writing jOpen('m',' opt')')
else do
interpret ggCode
m.m.jReading = 1
end
end
else if \ abbrev('>>', opt, 1) then do
return err('bad option' opt 'in jOpen('m',' opt')')
end
else do
if m.m.jWriting then
nop
else if m.m.jReading then
return err('already opened for reading jOpen('m',' opt')')
else do
interpret ggCode
m.m.jWriting = 1
end
end
m.m.jUsers = oUsers + 1
return m
endProcedure jOpen
jClose: procedure expose m.
parse arg m
call objMetClaM m, 'jClose'
oUsers = m.m.jUsers
if oUsers = 1 then do
interpret ggCode
m.m.jReading = 0
m.m.jWriting = 0
end
else if oUsers < 1 then
call err 'jClose' m 'but already closed'
m.m.jUsers = oUsers - 1
return m
endProcedure jClose
/*--- cat the lines of the file together, with mid between lines,
fail if not all lines are strings -------------------*/
jCatLines: procedure expose m.
parse arg m, fmt
if abbrev(fmt, '-sql') then
return jCatSql(m, substr(fmt, 5))
if fmt == '' then
fmt = '%+Q\s'
call jOpen m, m.j.cRead
if \ jRead(m, line) then do
call jClose m
return ''
end
res = f(fmt, m.line)
do while jRead(m, line)
res = res || f(fmt'%-Qnxt', m.line)
end
call jClose m
fEnd = 'F.FORMAT.'fmt'%-Qend'
return res || m.fEnd
endProcedure jCatLines
/*--- cat the line of a file, using comments
fixline (with token wrapping) or separate lines -------*/
jCatSql: procedure expose m.
parse arg m, fLen
call jCatSqlReset m'.JCATSQL', , jOpen(m, '<'), fLen
res = jCatSqlNext(m'.JCATSQL')
call jClose m
return res
endProcedure jCatSql
jCatSqlReset: procedure expose m.
parse arg m, aSrc, m.m.rdr, m.m.fLen
call jCatSqlNL m, aSrc
return m
endProcedure jCatSqlReset
jCatSqlNL: procedure expose m.
parse arg m
if m.m.rdr \== '' then
if jRead(m.m.rdr, m'.SRC') then do
if m.m.fLen \== '' then
m.m.src = left(m.m.src, m.m.fLen)
else if substr(m.m.src, length(m.m.src), 1) \== ' ' then
m.m.src = m.m.src' '
m.m.pos = 1
return 1
end
m.m.pos = length(m.m.src)+1
return 0
endProcedure jCatSqlNl
jCatSqlNext: procedure expose m.
parse arg m, stop
res = ''
st = ''
bx = m.m.pos
do forever
call sbUntil m, '"''-/'stop
if sbEnd(m) then do
res = res || substr(m.m.src, bx)
bx = 0
end
else if substr(m.m.src, m.m.pos, 2) = '--' then do
res = res || substr(m.m.src, bx, m.m.pos-bx)' '
bx = 0
end
else if substr(m.m.src, m.m.pos, 2) = '/*' then do
res = res || substr(m.m.src, bx, m.m.pos-bx)' '
do forever
px = pos('*/', m.m.src, m.m.pos)
if px > 0 then
leave
if \ jCatSqlNL(m) then
return res
end
bx = px+2
m.m.pos = bx
end
else if sbLit(m, ''' "') then do
c1 = sbPrev(m)
do while \ sbStrEnd(m, c1)
res = res || substr(m.m.src, bx)
if m.m.fLen \== '' then
if jCatSqlNl(m) then do
bx = m.m.pos
iterate
end
call err 'unclosed' c1 'string:' m.m.src
end
end
else if pos(substr(m.m.src, m.m.pos, 1), stop) > 0 then do
res = strip(res||substr(m.m.src, bx, m.m.pos-bx), 't')
call sbChar m, 1
if res <> '' then
return res
bx = m.m.pos
end
if bx = 0 then
if jCatSqlNl(m) then
bx = m.m.pos
else
return res
end
endProcedure jCatSqlNext
jIni: procedure expose m.
if m.j.ini == 1 then
return
m.j.ini = 1
m.j.cRead = '<'
m.j.cWri = '>'
m.j.cApp = '>>'
call oIni
am = "call err 'call of abstract method"
call classNew 'n JRW u ORun, f JREADING v, f JWRITING v', 'm',
, "new call jReset m, arg, arg2, arg3",
, "jRead" am "jRead('m',' var')'" ,
, "jReadO if \ jRead(m, 'J.GGVAR') then return '';",
"return s2o(m.j.ggVar)" ,
, "jWrite" am "jWrite('m',' line')'" ,
, "jWriteO call jWrite(m, o2string(var))" ,
, "jWriteAll call jWriteNowImpl m, rdr",
, "jWriteNow call jWriteNowImpl m, rdr",
, "jReset",
, "jOpen" am" jOpen('m',' opt')'" ,
, "jClose" ,
, "oRun call pipeWriteAll m",
, "o2String return jCatLines(m, fmt)",
, "o2File return m"
call classNew 'n JRWO u JRW', 'm',
, "jRead res = jReadO(m); if res == '' then return 0;" ,
"m.var = o2string(res); return 1" ,
, "jReadO" am "jReadO('m')'" ,
, "jWrite call jWriteO(m, s2o(var))" ,
, "jWriteO" am "jWriteO('m',' line')'",
, "jWriteAll call jWriteNowImplO m, rdr",
, "jWriteNow call jWriteNowImplO m, rdr",
am = "call err 'call errObject"
call classNew 'n JRWErr u JRW', 'm',
, "jWriteAll" er "jWriteAll 'm', rdr'",
, "jWriteNow" er "jWriteNow 'm', 'rdr'",
, "jClose" er "jClose 'm'"
call classNew 'n JSay u JRW', 'm',
, "jWrite say line" ,
, "jWriteO call classOut , var, 'outO: '",
, "jOpen if \ abbrev(opt, m.j.cWri) then",
"call err 'can only write JSay.jOpen('m',' opt')';" ,
"else m.m.jWriting = 1"
call classNew 'n JStem u JSay', 'm',
, "jReset m.m.stem = arg;",
"if \ dataType(m.arg.0, 'n') then m.arg.0 = 0" ,
, "jWrite call mAdd m.m.stem, line"
call classNew 'n JRWEof u JRW', 'm',
, "jRead drop m.var; return 0",
, "jOpen if pos('>', opt) > 0 then",
"call err 'can only read JRWEof.jOpen('m',' opt')';" ,
"else m.m.jReading = 1"
m.j.in = jOpen(oNew('JRWEof'), m.j.cRead)
call outDst
call classNew "n JBuf u JRWO, f BUF s r", "m",
, "jOpen call jBufOpen m, opt",
, "jReset call jBufReset m, arg",
, "jRead return jBufRead(m, var)",
, "jReadO return jBufReadO(m)",
, "jWrite call jBufWrite m, line",
, "jWriteO call jBufWriteO m, var"
call classNew "n JBufTxt u JBuf, f MAXL v ", "m",
, "jReset call jBufReset m, arg; m.m.maxl = 80",
, "jWriteO call jBufWrite m, o2Text(var, m.m.maxl)"
return
endProcedure jIni
/*--- out interface of j --------------------------------------------*/
outIni: procedure expose m.
call jIni
return
endProcedure outIni
outDst: procedure expose m.
parse arg wrt
oldOut = m.j.out
if wrt == '' then
wrt = jOpen(oNew('JSay'), '>')
m.j.out = wrt
return oldOut
endProcedure outDst
/*--- return a JRW from rdr or in ------------------------------------*/
j2Rdr: procedure expose m.
parse arg rdr
if oStrOrObj(rdr, m.j.in) then
return jBuf(ggStr)
else
return o2file(ggObj)
endProcedure j2Rdr
/* jstr is part of out interface --> inp2str */
inp2str: procedure expose m.
parse arg rdr, fmt
if oStrOrObj(rdr, m.j.in) then
return ggStr
else
return o2String(ggObj, fmt)
endProcedure inp2str
j2Buf: procedure expose m.
parse arg rdr
if oStrOrObj(rdr, m.j.in) then
return jBuf(ggStr)
if classInheritsOf(ggCla, class4Name('JBuf')) ,
& m.ggObj.jUsers < 1 then
return ggObj
b = jOpen(jBuf(), m.j.cWri)
call jWriteNow b, o2File(ggObj)
return jClose(b)
endProcedure j2Buf
in: procedure expose m.
parse arg arg
return jRead(m.j.in, arg)
endProcedure in
inO: procedure expose m.
if arg() > 0 then call err '??? old interface'
return jReadO(m.j.in)
endProcedure in
out: procedure expose m.
parse arg line
call jWrite m.j.out, line
return 0
endProcedure out
outO: procedure expose m.
parse arg arg
call jWriteO m.j.out, arg
return
endProcedure outO
/*--- jBuf: buffer read or write (supports datataypes) ---------------*/
jBuf: procedure expose m.
m = oNew('JBuf') /* calls jBufReset */
do ax=1 to arg()
m.m.buf.ax = arg(ax)
end
m.m.buf.0 = ax-1
m.m.allV = 1
return m
endProcedure jBuf
/*--- jBuf: buffer read or write (supports datataypes) ---------------*/
jBufTxt: procedure expose m.
m = oNew('JBufTxt') /* calls jBufReset */
do ax=1 to arg()
m.m.buf.ax = arg(ax)
end
m.m.buf.0 = ax-1
m.m.allV = 1
return m
endProcedure jBufTxt
jBufReset: procedure expose m.
parse arg m
m.m.stem = m'.BUF'
do ax=1 to arg() - 1
m.m.buf.ax = arg(ax+1)
end
m.m.buf.0 = ax-1
m.m.allV = 1
return m
endProcedure jBufReset
jBufOpen: procedure expose m.
parse arg m, opt
if opt == m.j.cRead then do
m.m.readIx = 0
m.m.jReading = 1
return m
end
if opt == m.j.cWri then do
m.m.buf.0 = 0
m.m.allV = 1
end
else if opt \== m.j.cApp then
call err 'jBufOpen('m',' opt') with bad opt'
m.m.jWriting = 1
return m
endProcedure jBufOpen
jBufWrite: procedure expose m.
parse arg m, line
if m.m.allV then
call mAdd m'.BUF', line
else
call mAdd m'.BUF', s2o(line)
return
endProcedure jBufWrite
jBufWriteStem: procedure expose m.
parse arg m, st
ax = m.m.buf.0
if m.m.allV then do
do sx=1 to m.st.0
ax = ax + 1
m.m.buf.ax = m.st.sx
end
end
else do
do sx=1 to m.st.0
ax = ax + 1
m.m.buf.ax = o2String(m.st.sx)
end
end
m.m.buf.0 = ax
return m
endProcedure jBufWrite
jBufWriteO: procedure expose m.
parse arg m, ref
if m.m.allV then do
cl = objClass(ref)
if cl = m.class.classV then do
call mAdd m'.BUF', m.ref
return
end
if cl == m.class.classW then do
call mAdd m'.BUF', substr(ref, 2)
return
end
m.m.allV = 0
do ax=1 to m.m.buf.0
m.m.buf.ax = s2o(m.m.buf.ax)
end
end
call mAdd m'.BUF', ref
return
endProcedure jBufWriteO
jBufReadO: procedure expose m.
parse arg m
nx = m.m.readIx + 1
if nx > m.m.buf.0 then
return ''
m.m.readIx = nx
if m.m.allV then
return s2o(m.m.buf.nx)
else
return m.m.buf.nx
endProcedure jBufReadO
jBufRead: procedure expose m.
parse arg m, var
nx = m.m.readIx + 1
if nx > m.m.buf.0 then
return 0
m.m.readIx = nx
if m.m.allV then
m.var = m.m.buf.nx
else
m.var = o2String(m'.BUF.'nx)
return 1
endProcedure jBufRead
jBufTxtWriteO: procedure expose m.
parse arg m, ref
if m.m.allV \== 1 then
call err '1 \== allV' m.m.allV 'in jBufTxtWriteO('m',' ref')'
cl = objClass(ref, '?')
if cl = m.class.classV then
call mAdd m'.BUF', m.ref
else if cl == m.class.classW then
call mAdd m'.BUF', substr(ref, 2)
else if ref == '' then
call mAdd m'.BUF', '@ null object'
else if cl == '?' then
call mAdd m'.BUF', '@'ref 'class=???'
else do
l = '@'ref 'class='className(cl)
ff = cl'.FLDS'
do fx=1 to m.ff.0 while length(l) < m.m.maxl + 3
if m.ff.fx == '' then
l = l', .='m.ref
else do
f1 = substr(m.ff.fx, 2)
l = l',' f1'='m.ref.f1
end
end
if length(l) > m.m.maxl then
l = left(l, m.m.maxl-3)'...'
call mAdd m'.BUF', l
end
return
endProcedure jBufTxtWriteO
/* copy j end *********************************************************/
/* copy o begin ******************************************************
an object has a class which describes fields and methods
an object has fields (e.g. m.o.fld1)
an object may call it's methods (dynamic binding)
***********************************************************************/
oIni: procedure expose m.
if m.o.ini = 1 then
return
m.o.ini = 1
call classIni
call oAdd1Method m.class.classV, 'o2String return m.m'
m.class.escW = '!'
call oAdd1Method m.class.classW, 'o2String return substr(m, 2)'
or = classNew('n ORun u',
, 'm oRun call err "call of abstract method oRun"',
, 'm o2File return oRun2File(m)',
, 'm o2String return jCatLines(oRun2File(m), fmt)')
/* oRunner does not work yet ||||| */
rc = classNew('n* ORun u ORun, m oRun call oClassAdded arg(2)')
call oAddMethod rc'.OMET', rc
call classAddedRegister oMutate(mNew(), rc)
return
endProcedure oIni
/*--- when notified about a new class cl, build the redundancies ----*/
oClassAdded: procedure expose m.
parse arg cl
m.class.o2c.cl = m.class.class
call oAddMethod cl'.OMET', cl
new = "m.class.o2c.m =" cl
if m.cl.flds.0 > 0 | m.cl.stms.0 > 0 then
new = new"; call oClear m, '"cl"'"
new = new";" classMet(cl, 'new', '')
if cl == m.class.class then
call mAlias 'CLASS', cl
else /* object adresses */
call mNewArea cl, 'O.'substr(cl,7), new
if m.cl \== 'u' | m.cl.name == '' then
return
call mAlias cl, m.cl.name
new = 'new'
m.cl.oMet.new = ''
co = '' /* build code for copy */
do fx=1 to m.cl.flds.0
nm = m.cl.flds.fx
if translate(nm) == nm & \ abbrev(nm, 'GG') ,
& pos('.M.', nm'.') < 1 & pos('.T.', nm'.') < 1 then
co = co'm.t'nm '= m.m'nm';'
else
co = co 'f='quote(substr(nm, 2))';m.t.f = m.m.f;'
end
do fx=1 to m.cl.stms.0
nm = m.cl.stms.fx
sc = m.cl.stms.fx.class
if nm == ''then
co = co "m.t.0=m.m.0;" ,
"do sx=1 to m.m.0;" ,
"call oClaCopy '"sc"',m'.'sx, t'.'sx; end;"
else
co = co "st='"substr(nm, 2)"';m.t.st.0=m.m.st.0;",
"do sx=1 to m.m.st.0;",
"call oClaCopy '"sc"',m'.'st'.'sx, t'.'st'.'sx; end;"
end
p = cl'.OMET.oCopy'
if symbol('m.p') \== VAR then
m.p = co
return
endProcedure oClassAdded
/*--- add the methods of class cl to the methodtable mt -------------*/
oAddMethod: procedure expose m.
parse arg mt, cl
if pos(m.cl, 'frsv') > 0 then
return
if m.cl = 'm' then do
nm = m.cl.name
m.mt.nm = m.cl.met
return
end
/* if m.cl.class \== '' then
call oAddMethod mt, m.cl.class
*/ do x=1 to m.cl.0
call oAddMethod mt, m.cl.x
end
return
endProcedure oAddMethod
/* add 1 method to a completed class and its subclasses -------------*/
oAdd1Method: procedure expose m.
parse arg clNm, met code
cl = classAdd1Method(clNm, met code)
m.cl.omet.met = code
call oAdd1MethodSubs cl, met code
return cl
endProcedure oAdd1Method
/* add 1 method code to OMET of all subclasses of cl -------------*/
oAdd1MethodSubs: procedure expose m.
parse arg cl, met code
do sx=1 to m.cl.sub.0
sc = m.cl.sub.sx
if pos(m.sc, 'nvw') > 0 then do
do mx=1 to m.sc.0
ms = m.sc.mx
if m.ms == 'm' & m.ms.name == met then
call err 'method' med 'already in' sc
end
m.sc.omet.met = code
end
call oAdd1MethodSubs sc, met code
end
return cl
endProcedure oAdd1MethodSubs
/*--- create an an object of the class className
mutate it to class but DO NOT call it's new method ----------*/
oBasicNew: procedure expose m.
parse arg cl
return oMutate(mBasicNew(cl), cl)
/*--- create an an object of the class className
and call it's new method ------------------------------------*/
oNew: procedure expose m.
signal labelMNew /* work is done there | ???? remove */
/*--- return the class of object obj --------------------------------*/
objClass: procedure expose m.
parse arg obj
if symbol('m.class.o2c.obj') == 'VAR' then
return m.class.o2c.obj
if abbrev(obj, m.class.escW) then
return m.class.classW
if abbrev(obj, 'CLASS.CAST.') then
return substr(obj, 12, pos(':', obj, 12)-12)
if arg() >= 2 then
return arg(2)
return err('objClass no class found for object' obj)
endProcedure objClass
oKindOf: procedure expose m.
parse arg obj, sup
cl = objClass(obj, '')
if cl == '' then
return 0
return classInheritsOf(cl, class4name(sup))
endProcedure oKindOf
classInheritsOf: procedure expose m.
parse arg cl, sup /* wkTst optimierung in classAdded */
if cl == sup then
return 1
do while m.cl \== 'n' & m.cl \== 'u'
if m.cl.class == '' then
return 0
cl = m.cl.class
end
do cx=1 to m.cl.0
d = m.cl.cx
if m.d == 'u' then
if classInheritsOf(d, sup) then
return 1
end
return 0
endProcedure classInheritsOf
classSetMet: procedure expose m.
parse arg na, me, code
if symbol('m.class.n2c.na') \== 'VAR' then
call err 'no class' na 'in classMet('na',' me')'
cl = m.class.n2c.na
if symbol('m.cl.oMet.me') \== 'VAR' then
call err 'no method in classMet('na',' me')'
m.cl.oMet.me = code
return cl
endProcedure classSetMet
/*--- return the code of method me of the class with name na --------*/
classMet: procedure expose m.
parse arg na, me
if symbol('m.class.n2c.na') \== 'VAR' then
call err 'no class' na 'in classMet('na',' me')'
cl = m.class.n2c.na
if symbol('m.cl.oMet.me') == 'VAR' then
return m.cl.oMet.me
if arg() >= 3 then
return arg(3)
call err 'no method in classMet('na',' me')'
endProcedure classMethod
/*--- set m, ggClass, ggCode to the address, class and code
of method me of object m ------------------------------------*/
objMetClaM: procedure expose m. m ggClass ggCode
parse arg m, me
if symbol('m.class.o2c.m') == 'VAR' then
ggClass = m.class.o2c.m
else if abbrev(m, 'CLASS.CAST.') then
parse var m 'CLASS.CAST.' ggClass ':' m
else
return err('no class found for object' m)
if symbol('m.ggClass.oMet.me') == 'VAR' then
ggCode = m.ggClass.oMet.me
else
call err 'no method' me 'in class' className(ggClass),
'of object' m
return
endProcedure objMetClaM
/*--- return the code of method me of object obj --------------------*/
objMet: procedure expose m.
parse arg obj, me
/* handle the easy and frequent case directly */
if symbol('m.class.o2c.obj') == 'VAR' then
c = m.class.o2c.obj
else if abbrev(obj, m.class.escW) then
c = m.class.classW
else do
call objMetClaM obj, me
return 'M="'m'";'ggCode
end
if symbol('m.c.oMet.me') == 'VAR' then
return m.c.oMet.me
return err('no method' me 'in class' className(c) 'of object' obj)
endProcedure objMet
/*--- return the stem of fieldnames of object m ---------------------*/
oFlds: procedure expose m.
parse arg m
return objClass(m)'.FLDS'
endProcedure oFlds
/*--- return the contents of field f navigation along path ----*/
oGet: procedure expose m.
parse arg obj, path, clazz
nullNew = 0
ret = oAccPath(obj, path, clazz)
if ret == 1 then
ret = oAccStr(m, cl)
if ret == 1 then
return str
return err(ret 'in oGet('obj',' path')')
endProcedure oGet
oAccStr: procedure expose m. str
parse arg m, cl
if cl == m.class.classV then
str = m.m
else if m.cl.valueCl == '' then
return 'no value @' m 'class' className(cl)
else if m.m == '' then
return 'null @' m 'class' className(cl)
else if abbrev(m, m.class.escW) then
str = substr(m ,2)
else
str = o2String(m.m)
return 1
endProcedure oAccStr
oGetO: procedure expose m.
parse arg obj, path, opt, clazz
nullNew = pos('n', opt) > 0
ret = oAccPath(obj, path, clazz)
if ret == 1 then
ret = oAccO(m, cl, opt)
if ret == 1 then
return ref
else
return err(ret 'in oGetO('obj',' path')')
endProcedure oGetO
oAccO: procedure expose m. ref
parse arg m, cl, opt
if cl == m.class.classV then do
ref = s2o(m.m)
end
else if m.cl \== 'r' then do
ref = m
end
else if m.m == '' then do
if opt == '-b' then do
m.m = jBuf()
end
else if opt == '-n' then do
rsn = oRefSetNew(m, cl)
if rsn \==1 then
return rsn
end
ref = m.m
end
else if objClass(m.m, 0) \== 0 then do
ref = m.m
end
else do
return 'no class for' m.m '@' m 'class' cl
end
return 1
endProcedure oAccO
oPut: procedure expose m.
parse arg obj, path, str
nullNew = 1
res = oAccPath(obj, path)
if res == 1 then
res = ocPut(m, cl, str)
if res == 1 then
return str
return err(res 'in oPut('obj',' path',' str')')
endProceudre oPut
ocPut: procedure expose m.
parse arg m, cl, str
if m.cl.valueCl == m.class.classV then
m.m = str
else if m.cl.valueCl \== '' then
m.m = s2o(str)
else
return 'no value @' m 'class' className(cl)
return 1
endProcedure ocPut
oPutO: procedure expose m.
parse arg obj, path, ref
nullNew = 1
res = oAccPath(obj, path)
if res == 1 then
res = ocPutO(m, cl, ref)
if res == 1 then
return ref
return err(ret 'in oPut('obj',' path',' ref')')
endProcedure oPutO
ocPutO: procedure expose m.
parse arg m, cl, ref
if m.cl.valueCl == m.class.classV then
m.m = o2string(ref)
else if m.cl.valueCl \== '' then
m.m = ref
else if m.cl.stemCl \== '' then
return 'implement put to stem'
else
return 'no value @' m 'class' className(cl)
return 1
endProcedure ocPutO
oClear: procedure expose m.
parse arg obj, cl
if cl == '' then
cl = objClass(obj)
do fx=1 to m.cl.flds.0
f1 = m.cl.flds.fx
o1 = obj || f1
if f1 == '' then
c1 = cl
else do
c1 = substr(f1, 2)
c1 = m.cl.f2c.c1
end
if c1 == m.class.classW then
m.o1 = m.class.escW
else
m.o1 = ''
end
do sx=1 to m.cl.stms.0
f1 = obj || m.cl.stms.sx
m.f1.0 = 0
end
return obj
endProcedure oClear
oAccPath: procedure expose m. m cl nullNew
parse arg m, pa, cl
if cl == '' & m \== '' then do
cl = objClass(m)
end
if pa == '' then
return 1
if abbrev(pa, m.class.cRef) ,
| (\ m.cl.hasFlds & abbrev(pa, m.class.cNav)) then do
if pa == m.class.cRef & m.cl.valueCl == m.class.classV then do
cl = m.class.classV
return 1
end
if (m.cl.valueCl == '' | m.cl.valueCl == m.class.classV) ,
& m.cl \== 'r' then
return 'no reference @' m 'class' cl
if m.m = '' then do
if \ nullNew then
return 'null @' m 'class' className(cl)
rsn = oRefSetNew(m, cl)
if rsn \== 1 then
return rsn
end
return oAccPath(m.m, substr(pa, 2))
end
if pos(left(pa, 1), m.class.cPath) > 0 then
return oAccPath(m, substr(pa, 2), cl)
px = verify(pa, m.class.cPath, 'm')
if px < 1 then
px = length(pa)+1
fn = left(pa, px-1)
pa = substr(pa, px)
if symbol('m.cl.f2c.fn') == 'VAR' then
return oAccPath(m'.'fn, pa, m.cl.f2c.fn)
if m.cl.stemCl=='' | fn=='' | verify(fn, '0123456789','n')>0 then
return 'no field' fn '@' m 'class' className(cl)
if fn == 0 then
return oAccPath(m'.0', pa, m.class.classV)
if abbrev(fn, 0) | verify(m.m.0, '0123456789', 'n') > 0,
| fn > m.m.0 then
return 'bad stem index' fn'>'m.m.0 '@' m 'class' className(cl)
return oAccPath(m'.'fn, pa, m.cl.stemCl)
endProcedure oAccPath
oRefSetNew: procedure expose m.
parse arg m, cl
cr = m.cl.valueCl
if m.cr.class = '' then
return 'no class for null @' m 'class' className(cl)
if m.cr.class = m.class.classW then
m.m = o2s()
else if m.cr \== 'r' then
return 'class' className(cl) 'not ref'
else
m.m = mNew(m.cr.class)
return 1
endProcedure oRefSetNew
/*--- mutate object m to the class named name -----------------------*/
oMutate: procedure expose m.
parse arg m, name
m.class.o2c.m = class4Name(name)
return m
endProcedure oMutate
/*--- return object obj cast'd to class named cl --------------------*/
oCast: procedure expose m.
parse arg obj, cl
if abbrev(obj, 'CLASS.CAST.') then
obj = substr(obj, 1 + pos(':', obj, 12))
return 'CLASS.CAST.'class4Name(cl)':'obj
endProcedure oCast
/*--- copy object m of class c to t ---------------------------------*/
oClaCopy: procedure expose m.
parse arg ggCla, m, t
if t == '' then do
if ggCla == m.class.classW then
return m
t = mBasicNew(ggCla)
end
else if ggCla == m.class.classW then do
m.t = o2String(m)
m.class.o2c.t = m.class.classV
return t
end
ggCode = ggCla'.OMET.oCopy'
interpret m.ggCode
m.class.o2c.t = ggCla
return t
endProcedure oClaCopy
/*--- copy object m to t --------------------------------------------*/
oCopy: procedure expose m.
parse arg m, t
return oClaCopy(objClass(m), m, t)
endProcedure oCopy
/*--- copy object to a newly created object -------------------------*/
oCopyNew: procedure expose m.
parse arg m
if symbol('m.class.o2c.m') == 'VAR' then
return oCopy(m, mBasicNew(m.class.o2c.m))
return oCopy(m, mBasicNew(m.class.classV))
endProcedure oCopyNew
/*--- return a new instance of a subclass of Run
with code code in method oRun -------------------------------*/
oRunner: procedure expose m.
if arg() >= 1 then
r = oNew(classNew('n* ORun u ORun, m oRun' arg(1)))
else
r = oNew(classNew('n| ORun u ORun'))
return r
endProcedure oRunner
/*--- set code for runner -------------------------------------------*/
oRunnerCode: procedure expose m.
parse arg r, code
call classSetMet objClass(r), 'oRun', code
return r
endProcedure oRunnerCode
/*--- run method oRun of object m -----------------------------------*/
oRun: procedure expose m.
parse arg m, arg, arg2, arg3
interpret objMet(m, 'oRun')
return
endProcedure oRun
/*--- run method oRun and return output in new JBuf ------------------*/
oRun2File: procedure expose m.
parse arg rn
b = jBuf()
call pipeBeLa '>' b
call oRun rn
call pipeEnd
return b
endProcedure oRun2File
/*--- cast the object to a file -------------------------------------*/
o2File: procedure expose m.
parse arg m
interpret objMet(m, 'o2File')
call err 'o2file did not return'
endProcedure o2File
/*--- cast the object to a String -----------------------------------*/
o2String: procedure expose m.
parse arg m, fmt
if opt == '' then
opt = '-b '
interpret objMet(m, 'o2String')
return err('o2String did not return')
endProcedure o2String
/*--- return true if object is kind of String------------------------*/
oStrOrObj: procedure expose m. ggStr ggObj ggCla
parse arg ggObj, def
if ggObj == '' then
ggObj = def
ggCla = objClass(ggObj, '')
if ggCla == '' then do
ggStr = ggObj
ggObj = ''
return 1
end
else if wordPos(ggCla, m.class.classV m.class.classW) > 0 then do
ggStr = o2String(ggObj)
ggObj = ''
return 1
end
else do
ggStr = ''
return 0
end
endProcedure oStrOrObj
/*--- return true if object is kind of String ----- ???? -------------*/
oStrOrFile: procedure expose m. ggStr ggObj ggCla
parse arg m, def
if oStrOrObj(m, def) then
return 1
ggObj = o2File(ggObj)
return 0
endProcedure oStrOrFile
/*--- return a short string representation of an object -------------*/
o2Text: procedure expose m.
parse arg m, maxL
if m == '' then
return '@ null object'
if maxL == '' then
maxL = 80
cl = objClass(m, '?')
if cl = m.class.classV then
l = m.m
else if cl == m.class.classW then
l = substr(m, 2)
else if cl == '?' then
l = '@'m 'class=???'
else do
l = '@'m 'class='className(cl)
ff = cl'.FLDS'
do fx=1 to m.ff.0 while length(l) < maxL + 3
if m.ff.fx == '' then
l = l', .='m.m
else do
f1 = substr(m.ff.fx, 2)
l = l',' f1'='m.m.f1
end
end
end
if length(l) <= maxL then
return l
return left(l, maxL-3)'...'
endProcedure o2Text
/*--- cast a String to an object -----------------------------------*/
s2o: procedure expose m.
parse arg str
return m.class.escW || str
return r
endProcedure s2o
oIfStr: procedure expose m.
parse arg m
if length(m) > 200 then
return m
cl = objClass(m, '')
if cl = '' then
return m
else if cl = m.class.classV then
return = m.m
else if cl == m.class.classW then
return = substr(m, 2)
else if arg() >= 2 then
return arg(2)
else
call err m 'of class' className(cl) 'not kind of string'
endProcedure oIfStr
/* copy o end *******************************************************/
/* copy class begin **************************************************
a class has fields and methods,
the class module handles only the metadata,
object handling (instanciation, methodcalls etc.) is in O
classes are represented by a metadata tree,
its nodes of class class have diffenrent types:
class subTypes (implemented as choices)
'u' = union: NAME -> name of class if <> '',
stem -> references component classes
'f' = field: NAME -> fieldName (x.name),
CLASSS -> reference to class of fieldValue
's' = stem: class -> ref to class at each stem element
'c' = choice: NAME -> selection value,
CLASS -> ref to class of choice
'm' = method: NAME -> methodName,
MET -> rexxCode
'r' = reference CLASS -> ref to type at reference
special classes
'v' = Value String Value
'w' = ValueAsA StringValue packed into an adress (prefix escW)
'o' = AnyClass any class with dynamic classLookup on object
formal definition, see classIni
class expression (ce) allow the following syntax
ce = className | classAdr | 'n'('?','*','|')? name union | union
| 'f' name ce | 's' ce | 'c' name ce | 'm' name code | r ce?
union = 'u' (ce (',' ce)*)?
the modifiers of 'n' means
none: create new class, fail if name already defined
'?': create new class or return old of that name
'*': use an exisiting class of that definition
or create new class with a unique name
'|': create a new class with a unique name
'm' extends to then end of the ce (line)
'u' allows several components, in classNew also multiple args
Achtung, aber NICHT rekursiv|
***********************************************************************/
classIni: procedure expose m.
if m.class.ini == 1 then
return
m.class.ini = 1
call mapIni
call mNewArea 'CLASS', 'CLASS'
call mapReset 'CLASS.N2C' /* name to class */
/* to notify other modules (e.g. O) on every new named class */
m.class.addedSeq.0 = 0
m.class.addedListeners.0 = 0
m.class.classV = classBasicNew('u', 'v')
m.class.classW = classBasicNew('u', 'w')
m.class.classO = classBasicNew('u', 'o')
cr = mIterBegin('CLASS')
do while assNN('cr', mIter(cr))
call classAddedNotify cr
end
m.class.class = classNew('n class u v',
, 'c u u f NAME v, s r class',
, 'c f u f NAME v, f CLASS r class',
, 'c s f CLASS r class' ,
, 'c c u f NAME v, f CLASS r class',
, 'c m u f NAME v, f MET v' ,
, 'c r f CLASS r class' )
m.class.cNav = '.'
m.class.cRef = '|'
m.class.cDot = '%'
m.class.cPath = m.class.cNav || m.class.cRef || m.class.cDot
m.class.classR = classNew('r')
return
endProcedure classIni
/*--- return the name of a class if it exists otherwise the class ---*/
className: procedure expose m.
parse arg cl
if m.cl = 'u' & m.cl.name \= '' then
return m.cl.name
else
return cl
endProcedure class4Name
/*--- return class of given name or class ---------------------------*/
class4Name: procedure expose m.
parse arg nm
if symbol('m.class.n2c.nm') == 'VAR' then
return m.class.n2c.nm
if arg() > 1 then
return arg(2)
call err 'no class' nm
endProcedure class4Name
classBasicNew: procedure expose m.
parse arg ty, nm, cl, nmTy
n = mNew('CLASS')
m.n = ty
m.n.name = nm
m.n.nameComp = nm
if ty == 'u' & nm \== '' then do
if pos(nmTy, '*|') > 0 then do
m.n.name = nm || substr(n, 1+lastPos('.', n))
if nmTy == '*' then
m.n.nameComp = nm'*'
else
m.n.nameComp = m.n.name
end
call mapAdd class.n2c, m.n.name, n
end
call mapAdd class.n2c, n, n
m.n.class = ''
m.n.met = ''
m.n.0 = 0
m.n.sub.0 = 0
m.n.super.0 = 0
if length(ty) \== 1 | pos(ty, 'ufscrm') < 1 then
call err 'bad type' ty': classBasicNew('ty',' nm',' cl')'
else if nm == '' & pos(ty, 'fm') > 0 then
call err 'empty name: classBasicNew('ty',' nm',' cl')'
else if nm \== '' & ty \== 'c' ,
& ( verify(nm, '0123456789') < 1 ,
| verify(nm, ' .*|@', 'm') > 0 ) then
call err 'bad name' nm': classBasicNew('ty',' nm',' cl')'
else if nm \= '' & pos(ty, 'rs') > 0 then
call err 'name for type' ty': classBasicNew('ty',' nm',' cl')'
else if pos(ty, 'fcrs') > 0 then do
if cl \== '' then
m.n.class = mapGet(class.n2c, cl)
else if ty == 'r' then
m.n.class = m.class.classO
/* else say 'cl leer' ty nm nmTy ???????*/
end
else if ty == 'm' then
m.n.met = cl
else if cl \== '' then
call err 'class for type' ty': classBasicNew('ty',' nm',' cl')'
return n
endProcedure classBasicNew
classNew: procedure expose m.
parse arg clEx 1 ty rest
if abbrev(ty, 'n') then do
if wordPos(ty, 'n n? n* n|') < 1 then
call err 'bad type' ty': classNew('clEx')'
nmTy = right(ty, 1)
parse var rest nm ty rest
if ty \== 'u' then
call err 'class name' nm 'without u: classNew('clEx')'
if nmTy == 'n' then do
if mapHasKey(class.n2c, nm) then
call err 'class' nm 'already defined: classNew('clEx')'
end
else if nmTy == '?' then do
if mapHasKey(class.n2c, nm) then
return mapGet(class.n2c, nm)
end
else if nmTy == '*' then do
if arg() \== 1 then
call err 'arg()='arg() 'for n* : classNew('clEx')'
if mapHasKey(class.n2c, clEx) then
return mapGet(class.n2c, clEx)
end
n = classBasicNew('u', nm, , nmTy)
end
else do
nmTy = ''
if arg() \== 1 then
call err 'arg()='arg() 'without name: classNew('clEx')'
if mapHasKey(class.n2c, clEx) then
return mapGet(class.n2c, clEx)
if length(ty) <> 1 | pos(ty, 'ufscmr') < 1 then
call err 'bad type' ty': classNew('clEx')'
nm = ''
if pos(ty, 'usr') < 1 then
parse var rest nm rest
if ty = 'u' then do
n = classBasicNew(ty)
end
else if ty = 'm' then do
n = classBasicNew(ty, nm, rest)
rest = ''
end
else do
parse var rest t1 rest
if wordPos(t1, 'u f s c m r') > 0 then do
n = classBasicNew(ty, nm)
m.n.class = classNew(t1 rest)
rest = ''
end
else do
n = classBasicNew(ty, nm, t1)
end
end
end
if ty \== 'u' then do
if rest \== '' then
call err 'rest' rest 'but end of classExp expected:' clEx
end
else do
lx = 0
do while lx < length(rest)
cx = pos(',', rest, lx+1)
if cx <= lx | word(substr(rest, lx+1), 1) == 'm' then
cx = length(rest)+1
a = mAdd(n, classNew(strip(substr(rest, lx+1, cx-lx-1))))
lx=cx
end
pref = ''
do ax=2 to arg()
if length(arg(ax)) == 1 & arg(ax) \== ' ' then
pref = arg(ax)' '
else
call mAdd n, classNew(pref || arg(ax))
end
end
cr = mIterBegin('CLASS')
do while assNN('cr', mIter(cr)) & \ classEqual(n, cr)
end
isNew = cr == n
if \ isNew then do
if mapRemove(class.n2c, n) \== n then
call err 'mapRemove('n') mismatch'
if m.n == 'u' & m.n.name \== '' then
if mapRemove(class.n2c, m.n.name) \== n then
call err 'mapRemove('m.n.name') mismatch'
call mFree n
n = cr
end
if nmTy == '' | nmTy == '*' then
call mapAdd class.n2c, clEx, n
if isNew then
call classAddedNotify n
return n
endProcedure classNew
classAdd1Method: procedure expose m.
parse arg clNm, met code
cl = class4Name(clNm)
if pos(m.cl, 'uvw') < 1 then
call err 'class not nvw but' m.cl,
'in classAdd1Method('clNm',' met code')'
do sx = 1 to m.cl.0
su = m.cl.sx
if m.cl.sx = 'm' & m.cl.name == met then
call err 'met' met 'already in' clNm
end
call mAdd cl, classNew('m' met code)
return cl
endProcedure classAdd1Method
/*--- register a listener for newly defined classes
and call it for all already defined classes -----------------*/
classAddedRegister: procedure expose m.
parse arg li
call mAdd 'CLASS.ADDEDLISTENERS', li
do cx = 1 to m.class.addedSeq.0
call oRun li, m.class.addedSeq.cx
end
return
endProcedure classAddedRegister
/*--- to notify all listeners about a newly defined classes --------*/
classAddedNotify: procedure expose m.
parse arg cl
call mAdd 'CLASS.ADDEDSEQ', cl
if m.cl == 'u' then
call classSuperSub cl
m.cl.flds.0 = 0
m.cl.stms.0 = 0
m.cl.stemCl = ''
m.cl.valueCl = ''
call classAddFields cl, cl
m.cl.hasFlds = m.cl.flds.0 > 1 ,
| (m.cl.flds.0 == 1 & m.cl.flds.1 \== '') | m.cl.stms.0 > 0
do lx = 1 to m.class.addedListeners.0
call oRun m.class.addedListeners.lx, cl
end
return
endProcedure classAddedNotify
/*--- add supper and sub links for class cl -------------------------*/
classSuperSub: procedure expose m.
parse arg cl
do ux=1 to m.cl.0
u1 = m.cl.ux
if m.u1 == 'u' then do
if mPos(cl'.SUPER', u1) > 0 then
call err u1 'is already in' cl'.SUPER.'sx ,
|| ': classSuperSub('cl')'
call mAdd cl'.SUPER', u1
if mPos(cl'.SUB', cl) > 0 then
call err cl 'is already in' u1'.SUB.'sx ,
|| ': classSuperSub('cl')'
call mAdd u1'.SUB', cl
end
end
return
endProcedure classSuperSub
/*--- add the the fields of class cl to stem f ----------------------*/
classAddFields: procedure expose m.
parse arg f, cl, nm
n1 = substr(nm, 1+abbrev(nm, '.') )
if symbol('m.f.f2c.n1') \== 'VAR' then
m.f.f2c.n1 = cl
/* else if cl == m.f.f2c.n1 then
return 0 */
if cl == m.class.classV | cl == m.class.classW | m.cl=='r' then do
if nm == '' then do
if m.f.valueCl \== '' then
return err('value mistmatch')
m.f.valueCl = cl
end
if nm == '' then do
call mMove f'.FLDS', 1, 2
m.f.flds.1 = ''
end
else do
call mAdd f'.FLDS', nm
end
return 0
end
if m.cl = 's' then do
if m.cl.class == '' then
call err 'stem null class'
a1 = mAdd(f'.STMS', nm)
m.a1.class = m.cl.class
if nm == '' then
m.f.stemCl = m.cl.class
return 0
end
if m.cl = 'f' then
return classAddFields(f, m.cl.class, nm'.'m.cl.name)
if m.cl.class \== '' then
return classAddFields(f, m.cl.class, nm)
do tx=1 to m.cl.0
call classAddFields f, m.cl.tx, nm
end
return 0
endProcedure classAddFields
/*--- return true iff the two classes are equal -------------------*/
classEqual: procedure expose m.
parse arg l, r
if m.l \== m.r | m.l.nameComp \== m.r.nameComp ,
| m.l.class \== m.r.class | m.l.0 \== m.r.0 then
return 0
if m.l.met \== m.r.met then
return 0
do sx=1 to m.l.0
if m.l.sx \== m.r.sx then
return 0
end
return 1
endProcedure classEqual
/*--- print object ---------------------------------------------------*/
objOut: procedure expose m.
parse arg m, pr, p1
c = objClass(m, '')
if c == '' then
call out p1 'no class for' m
else if c == m.class.classV then
call out p1 || m.m
else if c == m.class.classW then
call out p1 || o2String(m)
else
call classOutDone c, m, pr, p1
return
endProcedure objOut
/*--- recursively output (with out:) the object a with class t -------*/
classOut: procedure expose m.
parse arg t, a, pr, p1
return classOutDone(if(t=='',m.class.classO, t), a, pr, p1)
endProcedure classOut
/*--- ouput object a with class t and stopper done ------------------*/
classOutDone: procedure expose m. done.
parse arg t, a, pr, p1
if p1 == '' then
p1 = pr
if right(p1, 1) \== ' ' then
p1 = p1' '
if done.ini \== 1 then do
done.ini = 1
t = class4Name(t, t)
p1 = p1'@'a' '
end
if done.t.a == 1 then
return out(p1'done :'className(t) '@'a)
done.t.a = 1
if t = m.class.classO then do
if a == '' then
return out(p1'obj null')
t = objClass(a, '')
if t = '' then
return out(p1'obj has no class @'m.a)
else
return classOutDone(t, a, pr, p1'isA')
end
if t == m.class.classV then
return out(p1'=' m.a)
if t == m.class.classW == 'w' then
return out(p1'}' substr(a, 2))
if m.t == 'f' then
return classOutDone(m.t.class, a'.'m.t.name, pr, p1'.'m.t.name)
if m.t == 'r' then do
if m.a == '' then
return out(p1'refTo :'className(m.t.class) '@null@')
else
return classOutDone(m.t.class, m.a, pr,
, p1'refTo @'m.a)
end
if m.t = 'u' then do
t1 = m.t.1
vv = m.t.0 > 0 & m.t.1 == m.class.classV
call out p1 || if(m.t.name == '', 'union', ':'m.t.name) ,
|| copies(' =' m.a, vv)
do ux=1+vv to m.t.0
call classOutDone m.t.ux, a, pr' '
end
return 0
end
if m.t = 's' then do
call out p1'stem' m.a.0
do ux=1 to m.a.0
call classOutDone m.t.class, a'.'ux, pr' ', pr' .'ux
end
return 0
end
if m.t = 'c' then do
if m.t.name = m.a then
call classOutDone m.t.class, a, pr, p1'choice' m.a
return 0
end
if m.t = 'm' then
return 0
return err('bad class type' m.t)
endProcedure classOutDone
/* copy class end ***************************************************/
/* copy map begin ******************************************************
a map stores values at keys
it may also maintain a list of keys
the basic ideas are similar to the java Interface java.util.Map
contrary to stems we also handle keys longer then 250 bytes
***********************************************************************/
/*--- initialize the module ------------------------------------------*/
mapIni: procedure expose m.
if m.map.ini = 1 then
return
m.map.ini = 1
call mIni
m.map.0 = 0
m.map.inlineSearch = 1
call mapReset map.inlineName, map.inline
return
endProcedure mapIni
mapInline: procedure expose m.
parse arg pName, opt
if mapHasKey(map.inlineName, pName) then do
im = mapGet(map.inlineName, pName)
if pos('l', opt) < 1 & symbol('m.im.0') \== 'VAR' then do
m.im.0 = m.im.lEnd - m.im.lBegin - 1
do ix=1 to m.im.0
m.im.ix = strip(sourceline(ix+m.im.lBegin), 't')
end
end
return im
end
name = '/'
do lx = m.map.inlineSearch to sourceline()
if \ abbrev(sourceline(lx), '$') then
iterate
li = sourceline(lx)
s1 = pos('/', li)+ 1
if s1 < 3 | s1 > 4 then
iterate
s2 = pos('/', li, s1)
if s2 <= s1 then
iterate
if s1 == 3 then do
if name \== substr(li, s1, s2-s1) then
iterate
im = 'MAP.INLINE.' || (m.map.inline.0+1)
call mapAdd map.inlineName, name, im
m.im.lBegin = lBeg
m.im.lEnd = lx
m.im.mark = mrk
if name == pName then do
m.map.inlineSearch = lx+1
return mapInline(pName)
end
name = '/'
end
else if \ mapHasKey(map.inlineName,
, substr(li, s1, s2-s1)) then do
lBeg = lx
mrk = substr(li, 2, s1-3)
name = substr(li, s1, s2-s1)
end
else do
name = '/'
end
end
if pos('r', opt) > 0 then
return ''
return err('no inline data /'pName'/ found')
endProcedure mapInline
/*--- create a new map ----------------------------------------------*/
mapNew: procedure expose m.
parse arg opt
m.map.0 = m.map.0 + 1
return mapReset('MAP.'m.map.0 , opt)
endProcedure mapNew
/*--- make an empty map, if opt <> '' maintain stem of keys
('K' in map.keys, '=' in a else in opt) --------------*/
mapReset: procedure expose m.
parse arg a, opt
if symbol('m.map.keys.a') == 'VAR' then
call mapClear a
if opt = '=' then
st = a
else if translate(opt) = 'K' then
st = 'MAP.KEYS.'a
else
st = opt
m.map.keys.a = st
if st \== '' then
m.st.0 = 0
return a
endProcedure
/*--- add a new key value pair to the map ----------------------------*/
mapAdd: procedure expose m.
parse arg a, ky, val
vv = mapValAdr(a, ky, 'a')
m.vv = val
return val
endProcedure mapAdd
/*--- change the value at a key or add key value ---------------------*/
mapPut: procedure expose m.
parse arg a, ky, val
vv = mapValAdr(a, ky, 'p')
m.vv = val
return val
endProcedure mapPut
/*--- return 1 if key ky exists in map a, 0 otherwise ----------------*/
mapHasKey: procedure expose m.
parse arg a, ky
return mapValAdr(a, ky) \== ''
endProcedure mapHasKey
/*--- return the value of key ky in map a if it exists,
else if called with a third argument return third argument
else issue an error ----------------------------------------*/
mapGet: procedure expose m.
parse arg a, ky
vv = mapValAdr(a, ky)
if vv \== '' then
return m.vv
else if arg() > 2 then
return arg(3)
else
return err('missing key in mapGet('a',' ky')')
endProcedure mapGet
/*--- return a stem of all keys --------------------------------------*/
mapKeys: procedure expose m.
parse arg a
if m.map.keys.a == '' then
call err 'mapKeys('a') with no keys'
return m.map.keys.a
endProcedure mapKeys
/*--- remove a key from the map, do nothing if it is missing ---------*/
mapRemove: procedure expose m.
parse arg a, ky
vv = mapValAdr(a, ky)
if vv == '' then
return ''
if m.map.keys.a \== '' then do
trace ?R /* not tested yet ???wkTest */
k = m.map.keys.a
mx = m.k.0
do i=1 to mx
if m.k.i == ky then do
m.k.i = m.k.mx
m.k.0 = mx - 1
return
end
end
end
val = m.vv
drop m.a.ky
return val
endProcedure mapRemove
/*--- remove all entries ---------------------------------------------*/
mapClear: procedure expose m.
parse arg a
st = mapKeys(a)
liLe = 243 - length(a)
do kx=1 to m.st.0
ky = m.st.kx
drop m.st.kx
if length(ky) <= liLe then do
drop m.a.ky
end
else do
adr = mapValAdr(a, ky)
if adr \== '' then do
ha = left(adr, lastPos('.', adr) - 3)
do i = 1 to m.ha.k.0
drop m.ha.k.i m.ha.v.i
end
drop m.ha.k.0
end
end
end
m.st.0 = 0
return a
endProcedure mapClear
/*--- return the value pointer for a key, '' if non existing
with fun = 'a' add a key, with 'p' put a key ------------*/
mapValAdr: procedure expose m.
parse arg a, ky, fun
if length(ky) + length(a) <= 243 then do
res = a'.'ky
if symbol('m.res') == 'VAR' then do
if fun == 'a' then
call err 'duplicate key' ky 'in map' a
return res
end
else if fun == '' then
return ''
end
else do
len = 243 - length(a)
q = len % 4
ha = a'.'left(ky, len - 2 * q) || substr(ky,
, (length(ky)-len) % 2 + 2 * q, q) || right(ky, q)
if symbol('M.ha.k.0') == 'VAR' then do
do i=1 to m.ha.k.0
if m.ha.k.i == ky then do
if fun == 'a' then
call err 'duplicate key' ky ,
'map' a 'hash' ha'.K.'i
return ha'.V.'i
end
end
end
else do
i = 1
end
if fun == '' then
return ''
if i > 9 then
call err 'overflow long key' y 'in map' a 'hash' ha'.K.'i
m.ha.k.0 = i
m.ha.k.i = ky
res = ha'.V.'i
end
if m.map.keys.a \== '' then
call mAdd m.map.Keys.a, ky
m.res = ''
return res
endProcedure mapValAdr
/* copy map end *******************************************************/
/* copy mapExp begin **************************************************/
mapVia: procedure expose m.
parse arg a, ky
sx = pos('|', ky)
if sx < 1 then
return mapGet(a, ky)
via = mapGet(a, left(ky, sx-1))
do while sx <= length(ky)
fx = sx+1
sx = pos('|', ky, fx)
if sx < 1 then
sx = length(ky) + 1
if sx = fx then do
if symbol('m.via') \== 'VAR' then
call err 'missing m.'via 'at' sx 'in mapVia('a',' ky')'
via = m.via
end
else do
f = substr(ky, fx, sx - fx)
if symbol('m.via.f') \== 'VAR' then
call err 'missing m.'via'.'f ,
'at' sx 'in mapVia('a',' ky')'
via = m.via.f
end
end
return via
endProcedure mapVia
mapExpAt: procedure expose m.
parse arg a, src, sx
m.map.ExpAt = 0
cx = pos('$', src, sx)
if cx < 1 then
return substr(src, sx)
res = substr(src, sx, cx-sx)
do forever
if substr(src, cx+1, 1) = '{' then do
ex = pos('}', src, cx+2)
if ex < 1 then
call err 'missing } after' substr(src, cx) 'in' src
res = res || mapVia(a, strip(substr(src, cx+2, ex-cx-2)))
ex = ex + 1
end
else do
ex = verify(src, m.mAlfDot, 'n', cx+1)
if ex < 1 then
return res || mapVia(a, substr(src, cx+1))
if ex = cx+1 then do
m.map.ExpAt = cx
return res
end
res = res || mapVia(a, substr(src, cx+1, ex-cx-1))
end
cx = pos('$', src, ex)
if cx < 1 then
return res || substr(src, ex)
res = res || substr(src, ex, cx-ex)
end
endProcedure mapExpAt
mapExp: procedure expose m.
parse arg a, src
res = mapExpAt(a, src, 1)
if m.map.ExpAt \== 0 then
call err 'mapExp stopped at' substr(src, map.ExpAt) 'in' src
return res
endProcedure mapExp
mapExpAllAt: procedure expose m.
parse arg a, dst, src, sx, cx
do while sx <= m.src.0
li = mapExpAt(a, m.src.sx, cx)
dx = m.map.ExpAt
if (cx=1 & dx = 0) | li \= '' then
call mAdd dst, li
if dx = 0 then do
cx = 1
sx = sx+1
end
else do
return sx dx
end
end
return ''
endProcedure mapExpAllAt
mapExpAll: procedure expose m.
parse arg a, dst, src
sto = mapExpAllAt(a, dst, src, 1, 1)
if sto == '' then
return
lx = word(sto, 1)
call err 'mapExpAll stopped at' sto':' m.src.lx
endProcedure mapExpAll
/* copy mapExp end ****************************************************/
/* copy m begin ********************************************************
we use variables as follows
m. stem m: all global data and object data that must survive
a procedure call (m for memory in Memoria of B5000)
m.<mbr>.** to avoid conflicts: every rexx Module (copy) should
only allocate addresses m.<mbr>.** with <mbr> the name of
the rexx module
we pass parameters around (e.g. a=address, m=memory, st=stem)
and the called function may use m.a or m.a.subField etc.
gg*: local variable in subroutines without procedure
everything else: temporary data within procedure
every subroutine is declared as procedure expose m.
(also if no m. variable is used, because e.g. of error handling)
the few subroutines that cannot use procedure, should use only
variables starting with gg
***********************************************************************/
/*---make an area -----*/
mNewArea: procedure expose m.
parse arg nm, adr, newCd, freeCd
m.m.area.0 = m.m.area.0 + 1
a = 'M.AREA.'m.m.area.0
if adr == '=' then
adr = nm
else if adr == '' then
adr = 'M.'m.m.area.0
if symbol('m.m.n2a.adr') == 'VAR' then
call err 'adr' adr 'for area' nm 'already used'
m.m.n2a.adr = a
call mAlias adr, nm
m.m.p2a.adr = a
m.a.0 = 0
m.a.free.0 = 0
m.a.address = adr
m.a.newCode = newCd
m.a.freeCode = freeCd
return nm
endProcedure mNewArea
mAlias: procedure expose m.
parse arg oldNa, newNa
if symbol('m.m.n2a.oldNa') \== 'VAR' then
call err 'area' oldNa 'does not exist'
if oldNa == newNa then
return
if symbol('m.m.n2a.newNa') == 'VAR' then
call err 'newName' newNa 'for old' oldNa 'already used'
m.m.n2a.newNa = m.m.n2a.oldNa
return
endProcedure mAlias
mBasicNew: procedure expose m. ggArea
parse arg name
if symbol('m.m.n2a.name') \== 'VAR' then
call err 'area' name 'does not exists'
ggArea = m.m.n2a.name
if m.ggArea.free.0 > 0 then do
fx = m.ggArea.free.0
m.ggArea.free.0 = fx-1
m = m.ggArea.free.fx
end
else do
m.ggArea.0 = m.ggArea.0 + 1
m = m.ggArea.address'.'m.ggArea.0
end
return m
endProcedure mBasicNew
mNew: procedure expose m.
labelMNew:
parse arg name, arg, arg2, arg3
m = mBasicNew(name)
interpret m.ggArea.newCode
return m
endProcedure mNew
mReset: procedure expose m.
parse arg a, name
ggArea = m.m.n2a.name
m = a
interpret m.ggArea.newCode
return m
endProcedure mReset
mFree: procedure expose m.
parse arg m
p = 'M.P2A.'left(m, lastPos('.', m)-1)
area = m.p
if m.area.freeCode \== '' then
interpret m.area.freeCode
fx = m.area.free.0 + 1
m.area.free.0 = fx
m.area.free.fx = m
return
endProcedure mFree
/*--- iterate over all allocate elements of an area ------------------*/
mIterBegin: procedure expose m.
parse arg nm
a = m.m.n2a.nm
return m.a.address'.0'
endProcedure mIterBegin
mIter: procedure expose m.
parse arg cur
if cur == '' then
return ''
lx = lastPos('.', cur)
p = 'M.P2A.'left(cur, lx-1)
a = m.p
ix = substr(cur, lx+1)
do ix=ix+1 to m.a.0
n = m.a.address'.'ix
do fx=1 to m.a.free.0 while m.a.free \== n
end
if fx > m.a.free.0 then
return n
end
return ''
endProcedure mIter
/*--- cut stem a to length len ---------------------------------------*/
mCut: procedure expose m.
parse arg a, len
m.a.0 = len
return a
endProcedure mCut
/*--- add one or several arguments to stem m.a -----------------------*/
mAdd: procedure expose m.
parse arg a
ix = m.a.0
do ax = 2 to arg()
ix = ix + 1
m.a.ix = arg(ax)
end
m.a.0 = ix
return a'.'ix
endProcedure mAdd
/*--- pop last element from stem m.a ---------------------------------*/
mPop: procedure expose m.
parse arg a
ix = m.a.0
if ix < 1 then
call err 'pop from empty stem' a
m.a.0 = ix-1
return m.a.ix
endProcedure mPop
/*--- add to m.dst.* a (sub)sequence of m.src.* ----------------------*/
mAddSt: procedure expose m.
parse arg dst, src
dx = m.dst.0
do sx = 1 to m.src.0
dx = dx + 1
m.dst.dx = m.src.sx
end
m.dst.0 = dx
return
endProcedure mAddSt
/*--- find position of first occurrence of ele in stem m,
return 0 if nonemove a part of a stem -----------------------*/
mPos: procedure expose m.
parse arg m, ele, sx
if sx == '' then
sx = 1
do x=sx to m.m.0
if m.m.x = ele then
return x
end
return 0
endProcedure mPos
/*--- move a part of a stem ------------------------------------------*/
mMove: procedure expose m.
parse arg m, sx, dx
if dx < sx then do
y = dx
do x=sx to m.m.0
m.m.y = m.m.x
y = y + 1
end
end
else if dx > sx then do
y = m.m.0 + dx - sx
do x=m.m.0 by -1 to sx
m.m.y = m.m.x
y = y - 1
end
end
m.m.0 = m.m.0 + dx - sx
return
endProcedure mMove
/*--- insert a stem into another ------------------------------------*/
mInsert: procedure expose m.
parse arg m, tx, st
call mMove m, tx, tx+m.st.0
do sx=1 to m.st.0
dx = tx-1+sx
m.m.dx = m.st.sx
end
return
endProcedure mInsert
/*--- strip all elements of a stem -----------------------------------*/
mStrip: procedure expose m.
parse arg st, opt
if opt == '' then
opt = 'b'
do x=1 to m.st.0
m.st.x = strip(m.st.x, opt)
end
return st
endProcedure mStrip
/* cat the lines of a stem, possibly repeated --------------------------
args: stem, fmt see fGen: -------------------------------------*/
mCat: procedure expose m.
parse arg st, fmt
if m.st.0 < 1 then
return ''
res = f(fmt, m.st.1)
do sx=2 to m.st.0
res = res || fPlus(fmt 'nxt', m.st.sx)
end
return res || fFld(fmt 'end')
endProcedure mCat
mIni: procedure expose m.
if m.m.ini = 1 then
return
m.m.ini = 1
m.mAlfLC = 'abcdefghijklmnopqrstuvwxyz'
m.mAlfUC = translate(m.mAlfLC)
m.mAlfa = m.mAlfLC || m.mAlfUC
m.mAlfNum = m.mAlfa || '0123456789'
m.mAlfDot = m.mAlfNum || '.'
m.mAlfRex1 = m.mAlfa'@#$?' /* charset problem with ¬| */
m.mAlfRexR = m.mAlfRex1'.0123456789'
m.m.area.0 = 0
call mNewArea
return
endProcedure mIni
/* copy m end *********************************************************/
/* copy adrIsp begin *************************************************/
/**********************************************************************
lmd: catalog read
call sequence: lmdBegin, lmdNext*, lmdEnd
mit lmd service (mit save in file und read,
weil list zu langsam und listcat abstürzt)
1. arg (grp) als group dataset für lmd save
und dd name für file read
***********************************************************************/
lmdBegin: procedure expose m.
parse arg grp, lev
call adrIsp 'lmdinit listid(lmdId) level('lev')'
res = adrIsp('lmdlist listid(&lmdId) option(save) group('grp')', 4)
call adrIsp 'lmdfree listid(&lmdId)'
if res = 0 then do
call trc timing() 'lmdlist save' grp lev
call adrTso 'alloc dd('grp') shr dsn('grp'.datasets)'
end
else do
call trc 'no datasets found' timing() 'lmdlist save' grp lev
call adrTso 'alloc dd('grp') dummy'
end
call readDDBegin grp
return /* end lmdBegin */
lmdNext:
parse arg ggGrp, ggSt, withVolume
if \ readDD(ggGrp, ggSt) then
return 0
if withVolume \== 1 then
do ggIx=1 to value(ggSt'0')
x = value(ggSt || ggIx, word(value(ggSt || ggIx), 1))
end
return 1
endSubroutin lmdNext
lmdEnd: procedure expose m.
parse arg grp
call readDDEnd grp
call adrTso 'free dd('grp')'
return /* end lmdEnd */
lmd: procedure expose m.
parse arg lev, withVol
call lmdBegin gg1, lev
do while lmdNext(gg1, q., withVol)
do x=1 to q.0
call out q.x
end
end
call lmdEnd gg1
return
endProcedure lmd
/**********************************************************************
member list of a pds:
call sequence x=lmmBegin(dsn) lmmNext(x) * lmmEnd(x)
***********************************************************************/
lmm: procedure expose m.
parse arg dsn
id = lmmBegin(dsn)
do ix=1 by 1
m = lmmNext(id)
if m = '' then
leave
call out m
end
call lmmEnd id
return
endProcedure lmm
lmmBegin: procedure expose m.
parse arg dsn
mbr = dsnGetMbr(dsn)
pds = dsnSetMbr(dsn, )
call adrIsp "LMINIT DATAID(lmmId) DATASET('"pds"') ENQ(SHRW)"
call adrIsp "LMOPEN DATAID("lmmId") OPTION(INPUT) "
res = lmmId
if mbr <> '' then
res = res 'pattern('mbr')'
return res
endProcedure lmmBegin
lmmEnd: procedure expose m.
parse arg lmmId opt
call adrIsp "LMMLIST DATAID("lmmId") option(free)", 8
call adrIsp "LMCLOSE DATAID("lmmId")"
call adrIsp "LMFREE DATAID("lmmId")"
return
endProcedure lmmEnd
lmmNext: procedure expose m.
parse arg lmmId opt
if adrIsp("LMMLIST DATAID("lmmid")" ,
"OPTION(LIST) MEMBER(Mbr)" opt, 4 8) = 0 then
return strip(mbr)
else
return ''
endProcedure lmmNext
lmmRm: procedure expose m.
parse arg dsn, mbrs
mbrs = dsnGetMbr(dsn) mbrs
pds = dsnSetMbr(dsn, )
call adrIsp "LMINIT DATAID(lmmId) DATASET("pds") ENQ(SHRW)"
call adrIsp "LMOPEN DATAID("lmmId") OPTION(OUTPUT) "
err = ''
do wx=1 to words(mbrs)
m1 = word(mbrs, wx)
rr = adrIsp("lmmDel dataid("lmmId") member("m1")", 0 8 12)
if rc = 0 then
say 'removed' m1 'from' pds
else if rc = 8 then
say 'not found' m1 'in' pds
else do
err = 'error deleting' m1 'in' pds 'rc' rr strip(zerrlm)
say err
leave
end
end
call adrIsp "LMCLOSE DATAID("lmmId")"
call adrIsp "LMFREE DATAID("lmmId")"
if err <> '' then
call err err
return
endProcedure lmmRm
/*--- address ispf with error checking -------------------------------*/
adrIsp:
parse arg ggIspCmd, ggRet
address ispexec ggIspCmd
if rc = 0 then return 0
else if ggRet == '*' then return rc
else if wordPOS(rc, ggRet) > 0 then return rc
else
call err 'adr ispExec rc' rc 'in' ggIspCmd':' strip(zerrlm)
endSubroutine adrIsp
/*--- address editor with error checking -----------------------------*/
adrEdit:
parse arg ggEditCmd, ggRet
address isrEdit ggEditCmd
if rc = 0 then return 0
else if ggRet == '*' then return rc
else if wordPOS(rc, ggRet) > 0 then return rc
else
call err 'adr isrEdit rc' rc 'for' ggEditCmd
endSubroutine adrEdit
/* copy adrIsp end *************************************************/
/* copy adrTso begin *************************************************/
/*--- send ggTsoCmd to tso, fail if rc <> 0 or not listed in ggRet ---*/
adrTso:
parse arg ggTsoCmd, ggRet
address tso ggTsoCmd
if rc == 0 then return 0
else if ggRet == '*' then return rc
else if wordPos(rc, ggRet) > 0 then return rc
else
call err 'adrTso rc' rc 'for' ggTsoCmd
return /* end adrTso */
/*--- format dsn from tso format to jcl format -----------------------*/
dsn2jcl: procedure expose m.
parse upper arg dsn ., addPrefix
if left(dsn,1) = "'" then
return strip(dsn, 'b', "'")
sp = sysvar('SYSPREF')
if sp == '' then
sp = userid()
cx = pos('~', dsn)
if cx < 1 & addPrefix == 1 then
return sp'.'dsn
do while cx \== 0
le = left(dsn, cx-1)
ri = substr(dsn, cx+1)
if right(le, 1) == '.' | left(ri, 1) == '.' then
dsn = le || sp || ri
else
dsn = le || left('.', le \== '') || sp ,
|| left('.', ri \== '') || ri
cx = pos('~', spec, cx)
end
return dsn
endProcedure dsn2Jcl
/*--- format dsn from jcl format to tso format -----------------------*/
jcl2dsn: procedure expose m.
parse arg dsn .
return "'"dsn"'"
endProcedure jcl2dsn
dsnSetMbr: procedure expose m.
parse arg dsn, mbr
bx = pos('(', dsn)
if bx > 0 then
dsn = strip(left(dsn, bx-1))
if mbr <> '' then
dsn = dsn'('strip(mbr)')'
return dsn
endProcedure dsnSetMbr
dsnGetMbr: procedure expose m.
parse arg dsn
lx = pos('(', dsn)
rx = pos(')', dsn, lx+1)
if lx < 1 then
return ''
else if lx < rx then
return substr(dsn, lx+1, rx-lx-1)
else
return strip(substr(dsn,lx+1))
endProcedure dsnGetMbr
/**********************************************************************
io: read or write a dataset with the following callsequences:
read: readDDBegin, readDD*, readDDEnd
write: writeBegin, writeDD*, writeEnd
readDD returns true if data read, false at eof
***********************************************************************/
/*--- prepare reading from a DD --------------------------------------*/
readDDBegin: procedure expose m.
parse upper arg ggDD
call errAddCleanup 'call readDDEnd' ggDD', "*"'
return /* end readDDBegin */
/*--- read from DD ggDD into ggSt, return false at eof ---------------*/
readDD:
parse arg ggDD, ggSt, ggCnt
if ggCnt = '' then
ggCnt = 100
call adrTso 'execio' ggCnt 'diskr' ggDD '(stem' ggSt')', 2
return (value(ggSt'0') > 0)
return /* end readDD */
/*--- finish reading DD ggDD ----------------------------------------*/
readDDEnd: procedure expose m.
parse upper arg ggDD, ggRet
call errRmCleanup 'call readDDEnd' ggDD', "*"'
return adrTso('execio 0 diskr' ggDD '(finis)', ggRet)
endProcedure readDDEnd
/*--- prepare writing to DD ggDD -------------------------------------*/
writeDDBegin: procedure expose m.
parse upper arg ggDD
/* ensure file is erased, if no records are written */
call adrTso 'execio' 0 'diskw' ggDD '(open)'
call errAddCleanup 'call writeDDEnd' ggDD', "*"'
return /* end writeDDBegin */
/*--- write to gg ggDD from stem ggSt, ggCnt records -----------------*/
writeDD:
parse arg ggDD, ggSt, ggCnt
if ggCnt == '' then
ggCnt = value(ggst'0')
call adrTso 'execio' ggCnt 'diskw' ggDD '(stem' ggSt')'
return
endSubroutine writeDD
/*--- end writing to dd ggDD (close) --------------------------------*/
writeDDEnd: procedure expose m.
parse upper arg ggDD, ggRet
call errRmCleanup 'call writeDDEnd' ggDD', "*"'
return adrTso('execio 0 diskw' ggDD '(finis)', ggRet)
endProcedure writeDDEnd
/*--- readNx: read next line, using buffer ---------------------------*/
/*--- begin: allocate dsnSpec and ini ------------------------ -------*/
readNxBegin: procedure expose m.
parse arg m, m.m.dsn, m.m.dd, m.m.Cnt
if m.m.dd = '' then
m.m.dd = 'DDNX'
if m.m.cnt = '' then
m.m.cnt = 1000
m.m.cx = m.m.cnt + 999
m.m.buf0x = 0
m.m.0 = 0
call dsnAlloc 'dd('m.m.dd')' m.m.dsn
call readDDBegin m.m.dd
return m
endProcedure readDDNxBegin
/*--- return the stem of the next line, or '' at end -----------------*/
readNx: procedure expose m.
parse arg m
ix = m.m.cx + 1
m.m.cx = ix
if m.m.cx <= m.m.0 then
return m'.'ix
m.m.buf0x = m.m.buf0x + m.m.0
if \ readDD(m.m.dd, 'M.'m'.', m.m.cnt)then
return ''
m.m.cx = 1
return m'.1'
endProcedure readDDNx
/*--- return the position (line number) of reader
plus le characters of the current line (default 50) ------*/
readnxPos: procedure expose m.
parse arg m, le
li = m'.'m.m.cx
li = strip(m.li, 't')
if arg() < 2 then
le = 50
if le < 1 then
li = ''
else if length(li) <= le then
li = ':' li
else
li = ':' left(li, le-3)'...'
return 'line' (m.m.buf0x + m.m.cx)li
endProcedure readnxPos
/*--- close and deallocate ------------------------------------------*/
readNxEnd: procedure expose m.
parse arg m
call readDDEnd m.m.dd
call tsoFree m.m.dd
return
endProcedure readDDNxEnd
/*--- standardise a dsn spec
word1 dsName or -
word2 dd or -
word3 disp or -
word4 to first : attributes in tso format
after first : attributes for new allocation
----------------------------------------------------------------------*/
dsnSpec: procedure expose m.
parse upper arg spec
rr = '' /* put leading - in separate words */
do sx=1 while words(rr) < 3 & wx \= ''
wx = word(spec, sx)
do while abbrev(wx, '-') & words(rr) < 3
wx = substr(wx, 2)
rr = rr '-'
end
rr = rr wx
end
spec = rr subWord(spec, sx)
na = ''
dd = ''
di = ''
if left(spec, 1) = '&' then /* external spec is handled ok */
spec = strip(substr(spec, 2))
do wx=1 by 1
w = word(spec, wx)
if w = '' | abbrev(w, '.') | abbrev(w, ':') then
leave
else if wordPos(w, 'OLD SHR MOD NEW')>0 | abbrev(w, 'SYSO') then
di = w
else if w = 'CATALOG' then
di = di w
else if abbrev(w, 'DD(') then
dd = substr(w, 4, length(w)-4)
else if abbrev(w, 'DSN(') then
na = strip(substr(w, 5, length(w)-5))
else if na == '' then
na = dsn2jcl(w)
else if dd == '' then
dd = w
else if di == '' then
di = w
else
leave
end
if na == '' then
na = '-'
else if abbrev(na, "'") then
na = substr(na, 2, length(na)-2)
if dd == '' then dd = '-'
if di == '' then di = '-'
re = subword(spec, wx)
if abbrev(re, '.') then
re = substr(re, 2)
return na dd di re
endProcedure dsnSpec
/*--- alloc a dsn with dsnAlloc
if the dsn is inuse wait and retry
until either the allocation is successfull
or the timeout occurs --------------------------------------*/
dsnAllocWait: procedure expose m.
parse upper arg spec, pDi, pDD, timeOut
x = max(1, arg() - 1)
do rt=0
m.adrTsoAl.1 = ''
m.adrTsoAl.2 = ''
m.adrTsoAl.3 = ''
call outtrap m.adrTsoAl.
res = dsnAlloc(spec, pDi, pDD, '*')
call outtrap off
if \ abbrev(res, ' ') then
return res
msg = m.adrTsoAl.1'\n'm.adrTsoAl.2'\n'm.adrTsoAl.3
if rt > timeOut & timeOut \== '' then
return err('timeout allocating' spec time() '\n'msg)
if pos('DATA SET IS ALLOCATED TO ANOTHER', msg) < 1 then
return err('allocating' spec'\n'msg)
say time() 'sleep and retry alloc' spec
call sleep 1, 0
end
endProcedure dsnAllocWait
/*--- alloc a dsn or a dd
spec '-'<ddName>
datasetName? disposition? '.'? attributes? (':' newAtts)?
disp default disposition
dd default dd name
retRc erlaubte ReturnCodes (leer = 0)
returns if ok then ddName <rexx for free> otherwise rc -----*/
dsnAlloc: procedure expose m.
parse upper arg spec, pDi, pDD, retRc
parse value dsnSpec(spec) with na dd di rest
if na = '-' then
m.dsnAlloc.dsn = ''
else
m.dsnAlloc.dsn = na
if na == '-' & dd \== '-' & di == '-' & rest = '' then
return dd
if dd == '-' & pDD \== '' then
dd = pDD
if dd == '-' then do
if symbol('m.adrTso.ddNum') = 'VAR' then
dd = m.adrTso.ddNum + 1
else
dd = 1
m.adrTso.ddNum = dd
dd = 'DD' || dd
end
if di = '-' & pDi \== '' then
di = pDi
if di = '-' then
di = 'SHR'
else if pos('(', na) < 1 then
nop
else if di = 'MOD' then
call err 'disp mod for' na
else
di = 'SHR'
if pos('/', na) > 0 then
return csmAlloc(na dd di rest, retRc)
else
return tsoAlloc(na dd di rest, retRc)
endProcedure dsnAlloc
tsoAlloc: procedure expose m.
parse arg na dd disp rest ':' nn, retRc
c = 'alloc dd('dd')' disp
if na \== '-' then
c = c "DSN('"na"')"
else if disp = 'NEW' and nn \== '' then
c = c dsnCreateAtts(,nn)
call outtrap m.adrTsoAl.
alRc = adrTso(c rest, '*')
call outtrap off
if alRc = 0 then do
call errAddCleanup 'call tsoFree' dd', "*"'
return dd 'call tsoFree' dd';'
end
if nn \= '' & wordPos(disp, 'OLD SHR') > 0 ,
& sysDsn("'"m.dsnAlloc.dsn"'") == 'DATASET NOT FOUND' then do
say 'tsoAlloc creating' c rest ':'nn
call adrTso 'alloc dd('dd') new catalog' dsnCreateAtts(na, nn)
call adrTso 'free dd('dd')'
return tsoAlloc(na dd disp rest, retRc)
end
do ax=1 to m.adrTsoAl.0
say m.adrTsoal.ax
end
if retRc = '*' | wordPos(alRc, retRc) > 0 then
return ' ' alRc
call err 'tsoAlloc rc' alRc 'for' c rest
endProcedure tsoAlloc
tsoAtts: procedure expose m.
parse arg dsn
rc = listDsi("'"dsn"' SMSINFO")
if rc = 0 then
mv = ''
else if rc = 4 & sysReason = 19 then do
mv = 'UNITCNT(30)'
say 'multi volume' mv
end
else if rc ^= 0 then
call err 'listDsi rc' rc 'reason' sysReason,
sysMsgLvl1 sysMsgLvl2
al = 'CAT'
al = ''
if right(sysDsSms, 7) == 'LIBRARY' ,
| abbrev(sysDsSms, 'PDS') then
al = al 'DSNTYPE(LIBRARY)'
if sysUnits = 'TRACK' then
sysUnits = 'TRACKS'
al = al "DSORG("sysDSorg") MGMTCLAS("sysMgmtClass")",
"DATACLAS("sysDataClass")" ,
"RECFM("translate('1 2 3', ' 'sysREcFM, ' 123')")",
"LRECL("SYSLRECL")",
"blksize("sysBLkSIZE")",
"SPACE("sysPrimary"," sysSeconds")" sysUnits mv
return al
endProcedure tsoAtts
tsoFree: procedure expose m.
parse arg dd, ggRet
call adrTso 'free dd('dd')', ggRet
call errRmCleanup 'call tsoFree' dd', "*"'
return
endProcedure tsoFree
dsnCreateAtts: procedure expose m.
parse arg dsn, atts, forCsm
forCsm = forCsm == 1
aU = ' 'translate(atts)
if abbrev(atts, ':') then do
parse var atts a1 atts
bl = 32760
rl = substr(a1, 3)
if abbrev(a1, ':F') then do
if rl = '' then
rl = 80
recfm='f b'
bl = bl - (bl // rl)
end
else do
if rl = '' then
rl = bl-4
recfm = substr(a1, 2, 1) 'b'
end
if forCsm then
atts = atts "recfm("space(recfm, 0)") lrecl("rl")",
"blkSize("bl")"
else
atts = atts "recfm("recfm") lrecl("rl") block("bl")"
end
if pos('(', dsn) > 0 & pos(' DSNTYPE(', aU) < 1 ,
& pos(' DSORG(', aU) < 1 then
atts = atts 'dsntype(library) dsorg(po)'
if pos(' MGMTCLAS(', aU) < 1 then
atts = atts 'mgmtclas(COM#A091)'
if pos(' SPACE(', aU) < 1 then
if forCsm then
atts = atts 'space(10, 1000) cylinder'
else
atts = atts 'space(10, 1000) cyl'
if dsn == '' then
return atts
return "dataset('"dsnSetMbr(dsn)"')" atts
endProcedure dsnCreateAtts
/*--- read the dataset specified in ggDsnSpec to stem ggSt -----------*/
readDSN:
parse arg ggDsnSpec, ggSt
ggAlloc = dsnAlloc(ggDsnSpec, 'SHR', 'readDsN')
call adrTso 'execio * diskr' word(ggAlloc, 1) '(stem' ggSt' finis)'
interpret subword(ggAlloc, 2)
return
endSubroutine readDsn
/*--- write the dataset specified in ggDsnSpec from stem ggSt
write ggCnt records if not empty otherwise ggst0
if ggSay 1 then say ... records written to ... -------------*/
writeDSN:
parse arg ggDsnSpec, ggSt, ggCnt, ggSay
if ggCnt == '' then
ggCnt = value(ggst'0')
ggAlloc = dsnAlloc(ggDsnSpec, 'OLD', 'readDsN')
call adrTso 'execio' ggCnt 'diskw' word(ggAlloc, 1) ,
'(stem' ggSt 'open finis)'
interpret subword(ggAlloc, 2)
if ggSay == 1 | m.debug == 1 then
say ggCnt 'records written to' ggDsnSpec
return
endSubroutine writeDsn
copyDSN: procedure expose m.
parse arg frSpec, toSpec, ggSay
frDD = dsnAlloc(frSpec, 'SHR', 'FRDD')
toDD = dsnAlloc(toSpec, 'OLD', 'TODD')
call readDDBegin word(frDD, 1)
call writeDDBegin word(toDD, 1)
cnt = 0
do while readDD(word(frDD, 1), r.)
call writeDD word(toDD, 1), r.
cnt = cnt + r.0
end
call readDDEnd word(frDD, 1)
call writeDDEnd word(toDD, 1)
interpret ';' subword(frDD, 2) '; ; ;' subword(toDD, 2)
if ggSay == 1 | m.debug == 1 then
say cnt 'records copied from' frSpec 'to' to toSpec
return
endSubroutine writeDsn
/* copy adrTso end ****************************************************/
/* copy err begin ******************************************************
messages, errorhandling,help
***********************************************************************/
errIni: procedure expose m.
if m.err.ini == 1 then
return
call outIni
m.err.ini = 1
m.err.handler = ''
m.err.cleanup = ';'
m.err.opt = ''
return
endProcedure errIni
/* configure err -----------------------------------------------------*/
errReset: procedure expose m.
call errIni
parse arg m.err.opt, m.err.handler
if pos('I', translate(m.err.opt)) > 0 then
if errOS() \== 'LINUX' then
if sysVar('sysISPF') = 'ACTIVE' then
call adrIsp 'control errors return'
return
endSubroutine errReset
/*--- error routine: abend with message ------------------------------*/
err:
parse arg ggTxt, ggOpt
call errIni
drop err handler cleanup opt call return
if ggOpt == '' & m.err.handler \== '' then do
if 1 then do /* no detection of recursive err call loop
--> will anyway fail by stack overflow */
interpret m.err.handler
end
else do
/* avoid recursive err call loop */
drop call return
if symbol('m.err.call') \== 'VAR' then
m.err.call = 1
else
m.err.call = m.err.call + 1
if m.err.call > 10 then do
say 'errHandler loop:' m.err.handler
end
else do
m.err.return = 1
call errInterpret m.err.handler
m.err.call = m.err.call - 1
if m.err.return then
return result
end
end
end
call outDst
call errSay ggTxt, 'e'
call errCleanup
if ggOpt == '' then
ggOpt = m.err.opt
ggOpt = translate(ggOpt)
if pos('T', ggOpt) > 0 then do
trace ?r
say 'trace ?r in err'
end
if pos('H', ggOpt) > 0 then do
call errSay 'divide by zero to show stackHistory', 'e'
x = 1 / 0
end
call errSay 'exit(12)', 'e'
exit errSetRc(12)
endSubroutine err
/*--- error routine: user message cleanup exit -----------------------*/
errEx:
parse arg ggTxt
call errIni
call outDst
call errSay ggTxt
call errCleanup
exit 8
endProcedure errEx
errAddCleanup: procedure expose m.
parse arg code
if m.err.ini \== 1 then
call errIni
/* concatenate backwards, then it is executed also backwards */
m.err.cleanup = ';'code || m.err.cleanup
return
endProcedure errAddCleanup
errRmCleanup: procedure expose m.
parse arg code
if m.err.ini \== 1 then
call errIni
cx = pos(';'code';', m.err.cleanup)
if cx > 0 then
m.err.cleanup = left(m.err.cleanup, cx) ,
|| substr(m.err.cleanup, cx + length(code)+2)
return
endProcedure errRmCleanup
errCleanup: procedure expose m.
call errIni
cl = m.err.cleanup
if cl = ';' then
return
m.err.cleanup = ';'
say 'err cleanup begin' cl
call errInterpret cl
say 'err cleanup end' cl
return
endProcedure errCleanup
errInterpret: procedure expose m.
parse arg code
interpret code
m.err.return = 0
return
endProcedure errInterpret
/*--- assert that the passed rexx expression evaluates to true -------*/
assert:
interpret 'assertRes =' arg(1)
if \ assertRes then
call err 'assert failed' arg(1)':' arg(2)
return
endProcedure assert
/*--- output an errorMessage msg with pref pref
split message in lines at '/n' ---------------------------*/
errSay: procedure expose m.
parse arg msg, pref
parse source . . ggS3 . /* current rexx */
if pref == 'e' then
msg = 'fatal error in' ggS3':' msg
else if pref == 'w' then
msg = 'warning in' ggS3':' msg
else if pref \== '' then
msg = pref':' msg
return outNl(msg)
endProcedure errSay
/*--- abend with Message after displaying help -----------------------*/
errHelp: procedure expose m.
parse arg msg, op
call errSay msg, 'e'
call help
call err msg, op
endProcedure errHelp
/*--- return the Operating System we are running on: TSO or LINUX ---*/
errOS: procedure expose m.
parse source os .
return os
endProcedure errOS
/*--- set rc for ispf: -------------------------------------------------
if a cmd is run by ispStart, its RC is ignored,
but ISPF passes the value of the shared varible 3IspfRc
back as return code
----------------------------------------------------------------------*/
errSetRc: procedure expose m.
parse arg zIspfRc
if errOS() \== 'LINUX' then
if sysVar('sysISPF') = 'ACTIVE' then
address ispExec vput 'zIspfRc' shared
return zIspfRc
endProcedure errSetRc
/*--- output a trace message if m.tr is set -----------------------*/
trc: procedure expose m.
parse arg msg
if m.trace == 1 then
call out 'trc:' msg
return
endProcedure trc
debug: procedure expose m.
parse arg msg
if m.debug == 1 then
call out 'debug' msg
return
endProcedure debug
/*--- display the first comment block of the source as help ----------*/
help: procedure expose m.
parse source . . s3 .
call out right(' help for rexx' s3, 79, '*')
do ax=1 to arg()
say ' ' arg(ax)
end
do lx=1 by 1
if pos('/*', sourceLine(lx)) > 0 then
leave
else if lx > 10 then do
call out 'initial commentblock not found for help'
return
end
end
do lx=lx+1 by 1
li = strip(sourceLine(lx), 't', ' ')
if pos('*/', li) > 0 then
leave
call out li
end
call out right(' end help for rexx' s3, 79, '*')
return 4
endProcedure help
/*--- output all lines (separated by '\n') of all args --------------*/
outNl: procedure expose m.
do ax=1 to max(1, arg())
msg = arg(ax)
sx = 0
bx = -1
do lx=1 until bx >= length(msg)
ex = pos('\n', msg, bx+2)
if ex < 1 then
ex = length(msg)+1
call out substr(msg, bx+2, ex-bx-2)
bx = ex
end
end
return 0
endProcedure outNl
/* copy err end *****************************************************/
/* copy ut begin *****************************************************/
/*--- if function warning all3 arguments get evaluated|
e.g if(x=0, 'infinity', 1/0) will fail| -----------*/
if: procedure expose m.
parse arg co, ifTrue, ifFalse
if co then
return ifTrue
else
return ifFalse
endProcedure if
/*--- embedded ASSignement:
assign the second argument to the variable with name in first arg
and return the value assigned ----------------------------------*/
ass:
call value arg(1), arg(2)
return arg(2)
/*--- embedded ASSignement only if NotNull:
assign the second argument to the variable with name in first arg
if the second arg is not null, return new value ---------------*/
assIf:
if arg(2) == '' then
return value(arg(1))
call value arg(1), arg(2)
return arg(2)
/*--- return first nonNull argument ---------------------------------*/
nn:
if arg(1) \== '' then
return arg(1)
if arg(2) \== '' then
return arg(2)
call err 'nn() both args empty'
/*--- embedded ASSignement return NotNull:
assign the second argument to the variable with name in first arg
and return 1 if value not null, 0 if null ----------------------*/
assNN:
call value arg(1), arg(2)
return arg(2) \== ''
/*--- return current time and cpu usage ------------------------------*/
timing: procedure expose m.
return return time() 'ela='time('E') 'cpu='sysvar('syscpu'),
'su='sysvar('syssrv')
timingTest: procedure expose m.
say 'begin' timing() sysvar('sysnode')
do 30000000
end
say 'end ' timing()
return
/*--- sleep several seconds ------------------------------------------*/
sleep: procedure expose m.
parse arg secs, sayIt
if sayit <> 0 then
say 'sleeping' secs 'secs' time()
CALL SYSCALLS 'ON'
ADDRESS SYSCALL "sleep" secs
CALL SYSCALLS 'OFF'
if sayit <> 0 then
say 'slept' secs 'secs' time()
return
endProcedure sleep
/*--- elongate inp with spaces up to given len -----------------------*/
elong: procedure expose m.
parse arg inp, len
if length(inp) >= len then
return inp
return left(inp, len)
endProcedure elong
/*--- quote string txt using quoteChar qu ("""" ==> ") ---------------*/
quote: procedure expose m.
parse arg txt, qu
if qu = '' then
qu = '"'
res = qu
ix = 1
do forever
qx = pos(qu, txt, ix)
if qx = 0 then
return res || substr(txt, ix) || qu
res = res || substr(txt, ix, qx-ix) || qu || qu
ix = qx + length(qu)
end
endProcedure quote
/*--- return the count of occurrences of needle in heyStack ----------*/
posCount: procedure expose m.
parse arg needle, hayStack, start, fin
if start = '' then
start = 1
if fin = '' then
fin = length(hayStack) + 1 - length(needle)
do cnt = 0 by 1
start = pos(needle, haystack, start)
if start < 1 | start > fin then
return cnt
start = start + length(needle)
end
endProcedure posCount
repAll: procedure expose m.
parse arg src, w, new
res = ''
cx = 1
do forever
nx = pos(w, src, cx)
if nx < 1 then
return res || substr(src, cx)
res = res || substr(src, cx, nx-cx) || new
cx = nx + length(w)
end
endProcedure repAll
repAllWords: procedure expose m.
parse arg src, w, new
res = ''
wx = 0
cx = 1
do forever
wx = wordPos(w, src, wx+1)
if wx < 1 then
return res || substr(src, cx)
nx = wordindex(src, wx)
res = res || substr(src, cx, nx-cx) || new
cx = nx + length(w)
end
endProcedure repAllWords
/* copy ut end ********************************************************/
}¢--- A540769.WK.REXX.O13(DBX1126) cre=2012-11-26 mod=2012-11-26-16.21.41 A540769 ---
/* rexx ****************************************************************
synopsis: DBX fun args v1.4
edit macro fuer CS Nutzung von DB2 AdminTool 10.1
(die a* Funktionen gehen auch mit tso dbx ...)
? diese Hilfe
aa,aw,ac pr naechste AuftragsId suchen fuer praefix pr
aa: anzueigen, aw, ac entsprechendes Member editieren
n, nt neuen Auftrag erstellen (nt = test)
q subSys? query und expandiert Scope Zeilen vom Db2Catalog
* fuegt alle bestehenden Objekte ein
* ergaenzt scope Zeile mit infos, z.B tb -> ts
* UNDO um Expansion rueckgaengig zu machen
* mit q, qq, etc. Zeile selekieren,
sonst werden alle expandiert
* funktioniert nicht nur in Auftrag
falls SubSys angegeben wird da gesucht sonst DBAF/DBOF
c opt? compare source gegen target
i subs nct changes in Db2Subsystem subSys importieren
subs = sub(,sub)*: Liste von Subsystemen/Umgebungen
sub: DBAF (lokal), RR2/DBOF (im PTA), RZ8(betr. Subsys)
ET, IT, PA (pta), PR (prod), pq(pta+rq2)
==> Rz/Subsys des PromotionPaths
nct: Nachtraege:
leer: noch nicht in dieses SubSys importierte
= : vom letzten import plus neue
89A : Nachtraege 8, 9 und A
v opt? version files erstellen für altes Verfahren
vc vd vj vs vt vy ec ed ej es et ey subsys? nt?
view or edit cdl, ccl jcl, srcddl, trgddl, strategY
sw rz? WSL ins RZ rz schicken und clonen, ohne rz multiclone
opt? Optionale Optionen =, -f, -=f etc. (fuer c, v, st)
= statt aktuelle source aus Db2 extrahieren
letzte extrahierte Version als Source brauchen
-f force: ignoriere QualitaetsVerletzungen
cloneWsl dbaMulti Funktionalitaet ist hier implementiert
Typen fuer scope und dbx q (analog adminTool, grossOderKlein ist egal):
type DB TS TB VW AL IX UDT UDF TG SP SQ SY
1stelliges Kuerzel D S T V A X E F J O Q Y
Optionen im Auftrag: v10, v72, keeptgt 0, qCheck 0, dbaCheck 0
Variabeln im Auftrag (expandiert werden $varName imd ${varName})
varName ist case sensitive|)
srcNm NamensKonvention compare source (z.B. DBAF)
trgNm NamensKonvention compare target (z.B. DBAF)
impNm NamensKonvention import Ziel (z.B. DBOF)
subsys Db2 Subsystem (source, target, import, je nachdem)
Optionen: ca, bmc, ibm
Funktionen: ia (imp+ana), ie (ia+exe), ee,ve (exejcl), ew,vw (wsl)
************************************************************************
9.11.2012 W. Keller ey und vy für view/edit strategy
*/ /* end of help
23. 8.2012 W. Keller v1015 für extract
13. 7.2012 W. Keller typo in query scope
18. 5.2012 W. Keller im neuen Auftrag source DX0G target DC0G/DCVG @rz8
PromotionPaths angepasst und vereinfacht
4. 4.2012 W. Keller sqlQuery via csm for dbx q and qualitycheck
4. 4.2012 W. Keller fix, import submits after last import empty, chroi
14. 2.2012 W. Keller ca prototype
23.12.2011 W. Keller bmc prototype
13.12.2011 W. Keller RZ0, ToolPrefix, csmCopy
3.11.2011 W. Keller Zuegeltermine 2012
6. 9.2011 W. Keller v10 RZ8 DE0G UND DM0G ausgebaut
29.08.2011 W. Keller v10 default mit p8 und p9 alias
24.06.2011 W. Keller v10 und v72
8.06.2011 W. Keller stored procedures editiert und version=%
26.05.2011 W. Keller qCheck 0 eingefügt
30.03.2011 W. Keller import et, it, .... , DD0G -> it, trg dc0g, i pa
24.12.2010 W. Keller plexZ (mit location CHROI00Z...)
10.12.2010 W. Keller db2 release 915, damit instead of trigger kommen
19.11.2010 W. Keller viewEdit macht jetzt view für v* statt immer edit
14.10.2010 W. Keller dp4g und dp2g in rz4.* bzw rz2.*, Zuegelsch 2012
24. 8.2010 W. Keller zusätzliche Typen für scope und dbx q
23. 8.2010 W. Keller dbzf ausgebaut
6. 8.2010 W. Keller vc vj vs vt ec ej es et nt? eingebaut
5. 8.2010 W. Keller stepName recTrg instead of recSrc for target
12. 7.2010 W. Keller sq=sequence für compare (fehlt noch in q)
18. 2.2010 W. Keller class=BS0 für PTA (wegen RR25 und RR26)
11. 2.2010 W. Keller dbaCheck mit ex0
9. 2.2010 W. Keller sendJob timeout 600 auch in extractScopeVersion
1.12.2009 W. Keller CSM.RZ1.P0.EXEC statt CMS.DIV...
12.11.2009 W. Keller Qualitätsfehler ohne -f stoppt wieder
25.10.2009 W. Keller DeltaNew überall, -a Optione, batch und do removed
28.09.2009 W. Keller Optionen keepTgt 0 und dbaCheck 0
10.09.2009 W. Keller mask ausschalten falls kein maskFile
07.09.2009 W. Keller fix error with dbaMulti
25.08.2009 W. Keller err statt fehl in line 1001
12.08.2009 W. Keller batch (ohne for) geflickt, ac pr -r: return new mbr
12.08.2009 W. Keller Zuegelschub wird nach Datum ausgesucht
19.05.2009 P. Kuhn DEFER im Masking ignorieren
05.03.2009 P. Kuhn Qualitaets-Check "ts not logged" eingebaut
18.12.2008 p. kuhn neues Delta Merge Verfahren im import fuer DQ0G
18.12.2008 p. kuhn SW fuer DVBP im RZ2 (frueher im RZ4)
10.12.2008 p. kuhn Timeout vom Sendjob von 30 auf 600 Sek. erhoeht.
28.11.2008 w. keller v9 Fehler bei leerer Selektion
24.09.2008 p. kuhn v9 checks
15.09.2008 p. kuhn beim ersten import wird cdl dbaCheck't und editiert
09.09.2008 w. keller target mit RZ (job holt ddl, version aus RZ), opt =
08.08.2008 w. keller import mit wildcards
24.07.2008 w. keller overwrite ausgebaut +25.7
24.06.2008 w. keller fix spezialFall für DB +18.7
19.05.2008 w. keller qualitaetsKontolle in c,v und st und -f Option
13.05.2008 w. keller rw, rs, sw, st und do ... for ... eingebaut
25.02.2008 w. keller subSys argument für dbx q
22.11.2007 w. keller fun v für ObjectCompare Verfahren inkl db ddl save
dq0g mit eigenen Libraries
12.11.2007 w. keller DSN für neuen Wartungsstand
05.06.2007 w. keller neu
***********************************************************************/
/* Ideen, Wünsche ******************************************************
AuftragsId aus Prototyp bestimmen
LCTL
sämtliche infos aus XLS
jedesmal Zwischenspeichern mit und restore Funktion
analyze generieren, falls möglich
batch Funktionen ganzen Zügelschub importieren usw. ==> mit wsh|
generierte Runs starten in richtiger Reihenfolge
mails an Entwickler schicken
Rückmeldung falls keine changes (leeres cdl)
Type Tabelle
char type Variabeln
fuer extract
db d DB
ts s TS
tb/vw/alias a v t - own name
ix x IX
userDefinedTy e - sch udt
function f - sch udf
trigger j TG qual name
storedProc o SP qual name
sequence q SQ qual name
synonym y SY qual name
**** alte Funktion (braucht es nicht mehr) *****************************
sw rz? WSL aus RZ rz holen und clonen, ohne rz mulitclone
rs rz source ddl und version aus RZ rz holen
st opt? rz target ddl und version extrahieren und ins rz schicken
***********************************************************************/
m.debug = 0
call errReset h
if sysvar(sysispf) = 'ACTIVE' then
call adrIsp 'Control errors return'
call jIni
parse upper arg oArgs
oArg1 = word(oArgs, 1)
m.auftrag.dataset = 'DSN.DBX.AUFTRAG'
m.editMacro = 0
m.editProc = 0
if oArgs = '' then do
if adrEdit('macro (oArgs) NOPROCESS', '*') <> 0 then
call errHelp('keine Argumente und kein editMacro rc =' rc)
m.editMacro = 1
call adrEdit 'caps off'
call adrEdit '(x) = member'
m.auftrag.member = x
m.edit.member = x
call adrEdit '(x) = dataset'
m.auftrag.dataset = x
m.edit.dataset = x
end
if oArgs = '' | pos('?', oArgs) > 0 then
exit help()
call dbxIni
m.exitValue = 0
call work oArgs
call sqlDisconnect
exit m.exitValue
/*--- hier wählen wir die wirklich Arbeit aus -----------------------*/
work: procedure expose m.
parse arg wArgs
parse upper var wArgs fun args
args = strip(args)
call mapReset e, 'K'
call mapPut e, 'dol', '$'
call stepGroup 1
m.auftrag.force = 0
do while abbrev(fun, '-')
r = substr(fun, 3)
if abbrev(fun, '-A') then do
if verify(r, '.()', 'm') < 1 then do
m.auftrag.member = r
end
else do
m.auftrag.dataset = dsnSetMbr(r)
m.auftrag.member = dsnGetMbr(r)
end
end
else if abbrev(fun, '-F') then do
m.auftrag.force = 1
end
else do
call err 'bad opt' fun 'in' wArgs
end
parse var args fun args
if fun = '' then
return errHelp('fun missing in args:' wArgs)
end
if m.auftrag.dataset = 'A540769.DBX.AUFTRAG' then do
m.libSkels = 'A540769.wk.skels(dbx'
m.libPre = 'A540769.DBX'
end
else if m.auftrag.dataset = 'DSN.DBQ.AUFTRAG' then do
m.libSkels = 'ORG.U0009.B0106.KIDI63.SKELS(dbx'
m.libPre = 'DSN.DBQ'
end
else do
m.libPre = 'DSN.DBX'
m.libSkels = 'ORG.U0009.B0106.KIDI63.SKELS(dbx'
end
if 1 then do /* ??? testSkels */
if userid() = 'A540769' then
m.libSkels = 'A540769.wk.skels(dbx'
say '??? test skels' m.libSkels '|||'
end
m.libSpezial = m.libPre'.spezial'
call configureRZ sysvar('SYSNODE')
m.sysRz = m.myRz
if m.myRZ = RZ1 then
m.sysSub = DBAF
else
m.sysSub = 'noSysSubFor'm.myRz
call mapPut e, 'rexxLib', 'ORG.U0009.B0106.KIDI63.EXEC'
call mapPut e, 'libSkels', translate(m.libSkels)
call mapPut e, 'ovrDD', 'DISP=SHR,DSN='m.libPre'.MASK(OVERRIDE)'
call mapPut e, 'libPre', m.libPre
if fun = 'Q' then /* macht process selber | */
return queryScope(args)
if m.editMacro & ^ m.editProc then do
call adrEdit 'process'
m.editProc = 1
end
if wordPos(fun, 'AA AC AW') > 0 then
return nextAuftrag(word(args, 1), substr(fun, 2), word(args, 2))
else if fun = 'COPYDUMMY' then
return copyDummy(args)
else if fun = 'CLONEWSL' then
return cloneWsl(word(args, 1), word(args, 2), 1==word(args, 3))
call memberOpt
if wordPos(fun, 'N NT') > 0 then
call neuerAuftrag (fun = 'NT'), args, m.auftrag.member
else if fun = 'C' | fun = 'V' | fun = 'ST' then
call compare fun, args
else if wordPos(fun, 'I IA IE') > 0 then
call import fun, args
else if fun = 'N' then
call neuerNachtrag args
else if fun = 'RS' then
call receiveSource args
else if fun = 'RW' then
call receiveWSL args
else if fun = 'SW' then
call sendWSL args
else if wordPos(fun, 'VC VD VE VJ VS VT VW VY' ,
'EC ED EE EJ ES ET EW EY') > 0 then
call viewEdit fun, args
else
call errHelp 'bad fun' fun 'in args' args, , ' '
if m.auftrag.orig = m.auftrag.0 | m.auftrag.0 = '' then do
end
else do
if abbrev(m.auftrag.orig, 'rmQu') then do
/* alte | Zeilen loeschen */
oldOr = word(m.auftrag.orig, 2)
ox = 0
do ix = 1 to m.auftrag.0
if abbrev(word(m.auftrag.ix, 1), '|') & ix <= oldOr then
iterate
ox = ox + 1
m.auftrag.ox = m.auftrag.ix
end
m.auftrag.0 = ox
m.auftrag.orig = 'rep'
end
if m.editMacro & m.auftrag.dataset = m.edit.dataset ,
& m.auftrag.member = m.edit.member then do
if m.auftrag.orig = 'rep' then do
call adrEdit 'delete .zf .zl'
m.auftrag.orig = 0
end
do lx = m.auftrag.orig+1 to m.auftrag.0
li = left(m.auftrag.lx, 72)
call adrEdit "line_after .zl = (li)"
end
call adrEdit 'save', 4
end
else do
call writeDsn dsnSetMbr(m.auftrag.dataset,
,m.auftrag.member), m.auftrag.,,1
end
end
return
endProcedure work
/*--- ini the CS config ----------------------------------------------*/
dbxIni: procedure expose m.
m.timeout = 600
m.uId = strip(userid())
if m.uId = 'A234579' then
m.uNa = 'Marc'
else if m.uId = 'A390880' then
m.uNa = 'Martin'
else if m.uId = 'A540769' then
m.uNa = 'Walter'
else if m.uId = 'A666308' then
m.uNa = 'Frank'
else if m.uId = 'A754048' then
m.uNa = 'Alessandro'
else if m.uId = 'A790472' then
m.uNa = 'Agnes'
else if m.uId = 'A828386' then
m.uNa = 'Reni'
else
m.uNa = m.uId
m.scopeTypes = 'DB TS TB VW AL IX UDT UDF TG SP SQ SY'
m.scopeType1 = 'D S T V A X E F J O Q Y'
m.nachtragChars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
/* PromotionPaths */
m.iProm.1 = 'ET IT PQ PA PR'
m.iProm.2 = 'RZ1/DBAF,RZ8/DC0G RZ1/DBTF,RZ8/DD0G,RZZ/DE0G' ,
'RQ2/DBOF,RR2/DBOF RR2/DBOF RZ2/DBOF'
m.iProm.3 = 'RZ1/DBBA,RZ8/DCVG RZ1/DVTB,RZ8/DDVG,RZZ/DEVG' ,
'RQ2/DVBP,RR2/DVBP RR2/DVBP RZ2/DVBP'
m.iProm.0 = 3
return
endProcedure dbxIni
/*--- expand the import target list entered by the user
to a list or rz/subsys, with pr1Sub first and the rest sorted*/
iListExpand: procedure expose m.
parse upper arg srcList
tl = iPromExpand(translate(space(srcList, 0), '/ ', '.,'))
local = ''
remote = ''
do tx=1 to words(tl)
t1 = word(tl, tx)
if abbrev(t1, m.myRz'/') then
local = wordInsAsc(local, t1)
else
remote = wordInsAsc(remote, t1)
end
return local remote
endProcedure iListExpand
/*--- expand a target using iProm infos to a list of rz/subsys -------*/
iPromExpand: procedure expose m.
parse arg inp
if words(inp) <> 1 then do /* several words, expand each */
out = ''
do wx=1 to words(inp)
out = out iPromExpand(word(inp, wx))
end
return out
end
if pos('/', inp) > 0 then /* already expanded */
return inp
if inp == '?*?' then do /* find current promotionPath */
tg = m.scopeTrg.rz'/'m.scopeTrg.subSys
do tx=2 to m.iProm.0
if pos(tg, m.iProm.tx) > 0 then
return m.iprom.tx
end
call err 'target' tg 'not in any PromotionPath'
end
px = wordPos(inp, m.iProm.1) /* one promotion environment */
if px > 0 then
return translate(word(iPromExpand('?*?'), px), ' ', ',')
if length(inp) = 4 then /* prepend rz to subsys */
return m.myRz'/'inp
/* all subsys that match something */
alOr = iPromExpand('?*?')
all = translate(alOr, ' ', ',')
out = ''
do ax = 1 to words(all)
if pos(inp, word(all, ax)) > 0 then
if wordPos(word(all, ax), out) < 1 then
out = out word(all, ax)
end
if out \== '' then
return out
call err 'inp' inp ' not found in promotionPath' alOr
endProcedure iPromExpand
wordInsAsc: procedure expose m.
parse arg lst, wrds
do wx=1
w = word(wrds, wx)
if w == '' then
return space(lst, 1)
do rx=1 to words(lst) while w > word(lst, rx)
end
r1 = word(lst, rx)
if r1 == '' then
lst = lst w
else if w < r1 then
lst = subWord(lst, 1, rx-1) w subWord(lst, rx)
end
endProcedure wordInsAsc
charInsAsc: procedure expose m.
parse arg lst, chrs
do wx=1 to length(chrs)
c = substr(chrs, wx, 1)
do rx=1 to length(lst) while c > substr(lst, rx, 1)
end
r1 = substr(lst, rx, 1)
if rx > length(lst) then
lst = lst || c
else if c < r1 then
lst = left(lst, rx-1) || c || substr(lst, rx)
end
return lst
endProcedure wordInsAsc
/*--- batch funktionen -----------------------------------------------*/
batchOld: procedure expose m.
parse upper arg args
m.auftrag.dataset = 'DSN.DBX.AUFTRAG'
wx = 1
do forever
w1 = word(args, wx)
if w1 = '' then
return 0
if w1 = 'ADATASET' then do
m.auftrag.dataset = word(args, wx+1)
wx = wx+2
end
else if w1 = 'DO' then do
fx = wordPos('FOR', args, wx)
if fx < 1 then
call err 'DO ohne FOR in' args
cmd = subWord(args, wx+1, fx-wx-1)
do wx=fx+1
ww = word(args, wx)
if ww = '' then
leave
m.auftrag.member = ww
say 'batch do' cmd 'for' ww '...'
call work cmd
end
end
else do
if wordPos(translate(w1), 'A AC AW') > 0 then do
drop m.auftrag.member
cmd = subword(args, wx)
end
else do
m.auftrag.member = w1
cmd = subword(args, wx+1)
end
say 'batch do' cmd 'for mbr' m.auftrag.member
call work cmd
return 0
end
end
return 0
endProcedure batchOld
/*--- create the necessary dbx libries in the specified rz -----------*/
copyDummy: procedure expose m.
parse arg rz subs
call copyDummy1 rz, 'DSN.DBX.AUFTRAG(DUMMY)'
call copyDummy1 rz, 'DSN.DBX.AUTO(DUMMY)'
call copyDummy1 rz, 'DSN.DBX.CDL(DUMMY)'
/* call copyDummy1 rz, 'DSN.DBX.DBAUTO(DUMMY)'
call copyDummy1 rz, 'DSN.DBX.DBSRCCAT(DUMMY)'
call copyDummy1 rz, 'DSN.DBX.DBSRCDDL(DUMMY)'
call copyDummy1 rz, 'DSN.DBX.DBTRGCAT(DUMMY)'
call copyDummy1 rz, 'DSN.DBX.DBTRGDDL(DUMMY)'
*/
call copyDummy1 rz, 'DSN.DBX.JCL(DUMMY)'
call copyDummy1 rz, 'DSN.DBX.MASK(DUMMY)'
/* call copyDummy1 rz, 'DSN.DBX.OVRCAT(DUMMY)' */
call copyDummy1 rz, 'DSN.DBX.SENDCF(DUMMY)'
call copyDummy1 rz, 'DSN.DBX.SPEZIAL(DUMMY)'
call copyDummy1 rz, 'DSN.DBX.SRCCAT(DUMMY)'
call copyDummy1 rz, 'DSN.DBX.SRCDDL(DUMMY)'
call copyDummy1 rz, 'DSN.DBX.TRGCAT(DUMMY)'
call copyDummy1 rz, 'DSN.DBX.TRGDDL(DUMMY)'
call copyDummy1 rz, 'DSN.DBX.CADDL(DUMMY)'
call copyDummy1 rz, 'DSN.DBX.CAGLBCHG(DUMMY)'
do sx=1 to words(subs)
s1 = word(subs, sx)
if length(s1) = 4 then
call copyDummy1 rz, 'DSN.DBX's1'.STRY(DUMMY)',
, 'DSN.DBXDBAF.STRY(DUMMY)'
else
call copyDummy1 rz, 'DSN.DBXMAP.'s1'(DUMMY)',
, 'DSN.DBXMAP.WKA2B(DUMMY)'
end
return 0
endProcedure copyDummy
copyDummy1: procedure expose m.
parse arg sys, dsn, fr
if fr == '' then
fr = dsn
say '???copyDummy' sys dsn fr
if sysDsn("'"fr"'") <> 'OK' then
call writeDsn fr, x, 0, 1
call csmCopy fr, sys'/'dsn
return
/*--- die Konfiguration pro db2 Subsys -------------------------------*/
configureRZSub: procedure expose m.
parse arg rz, subsys
call configureRZ rz
call configureSubsys rz, subsys
return
endProcedure configureRZSub
configureSubsys: procedure expose m.
parse arg rz, subsys
call mapPut e, 'subsys', subsys
if rz = 'RZ8' then
call mapPut e, 'location', 'CHROI000'subsys
else if rz = 'RZZ' then
call mapPut e, 'location', 'CHROI00Z'subsys
else
call mapPut e, 'location', 'CHSKA000'subsys
return
endProcedure configureSubsys
/*--- die Konfiguration pro RZ ---------------------------------------*/
configureRZ: procedure expose m.
parse arg rz, rel px, toolV
if rz = 'RZ0T' then
rz = 'RZ0'
if rz = '' then
rz = m.myRz
else
m.myRz = rz
m.jobCard = 'jobCa'
call mapPut e, 'jobCla', 'LOG0'
rx = pos(rz'/', m.iProm.2)
if rx < 1 then
m.pr1Sub = '?noSubsys?'
else
m.pr1Sub = substr(m.iProm.2, rx+4, 4)
call mapPut e, 'rz', rz
zz = overlay('Z', rz, 2)
call mapPut e, 'zz', zz
if rel == '' then
rel = 1015
if px == '' then
px = if(rz\=='RZ0', 'P0', 'PA')
call mapPut e, 'db2rel', rel
call mapPut e, 'db2relAl', px
call mapPut e, 'dsnload', if(rz=='RZ0', 'DSN', 'DB2@') ,
|| '.'zz'.'px'.DSNLOAD'
call mapPut e, 'capref', 'DSN.CADB2.'zz'.P0'
call mapPut e, 'caload', 'DSN.CADB2.'zz'.P0.CDBALOAD'
call mapPut e, 'cacr', DBX
if toolV \== '' then do
say 'v72 nicht mehr untertstuetzt, v10 wird benutzt'
toolV = mapGet(e, 'toolVers', 10)
toolV = ''
end
call mapPut e, 'toolVers', toolV
/* if toolV == 10 then do */
call mapPut e, 'toolPreP', 'DSN.TOOLS.'zz'.P0'
call mapPut e, 'toolPreC', 'DSN.TOOLS.'zz'.C0'
/* end
else if toolV == 72 then do
call mapPut e, 'toolPreP', 'DSN.TOOLS.'zz'.P8'
call mapPut e, 'toolPreC', 'DSN.TOOLS.'zz'.C8'
end
else
call err 'bad toolVersion' toolV
*/ if rz = 'RZ1' then do
if m.libPre = 'DSN.DBQ' then do
m.pr1Sub = 'DQ0G'
m.jobCard = 'jobCQ'
call mapPut e, 'toolPreP', 'DSN.ADB72.P0'
call mapPut e, 'toolPreC', 'DSN.ADB72.C0'
end
end
else if rz = 'RR2' then do
call mapPut e, 'jobCla', 'BS0'
end
return
endProcedure configureRZ
/*--- Member Namen prüfen und Auftrag lesen---------------------------*/
memberOpt: procedure expose m.
if m.auftrag.dataset <> m.libPre'.AUFTRAG' then
call err 'dbx sollte' m.libPre'.AUFTRAG editieren, nicht' ,
m.auftrag.dataset
m8 = substr(m.auftrag.member, 8, 1)
if pos(m8, 'CW') < 1 then
call err 'Member muss 8 stellig sein und mit C oder W enden',
'nicht' m.auftrag.member
m.optOvr = 0 /* (m8 == 'W') & (m.libPre ^== 'DSN.DBQ') */
m.optAuto = 1
call readAuftrag '', m.auftrag.dataset, m.auftrag.member
return
endProcedure memberOpt
/*--- Auftrag einlesen -----------------------------------------------*/
readAuftrag: procedure expose m.
parse arg sys, pds, mbr
editingAuftrag = 0
if sys = '' & m.editMacro then do
call adrEdit '(em) = member'
call adrEdit '(ed) = dataset'
editingAuftrag = ed = pds & em = mbr
end
if editingAuftrag then do
if adrEdit('(zl) = lineNum .zl', 4) = 4 then
zl = 0
m.auftrag.0 = zl
do lx=1 to zl
call adrEdit "(li) = line" lx
m.auftrag.lx = li
end
end
else do
dsn = dsnSetMbr(m.auftrag.dataset, m.auftrag.member)
if sys = '' then
if sysDsn("'"dsn"'") <> 'OK' then
call err 'auftrag' dsn 'existiert nicht:' sysDsn("'"dsn"'")
call readDsn sys'/'dsn, m.auftrag.
end
m.auftrag.orig = m.auftrag.0
return
endProcedure readAuftrag
/*--- naechste AuftragsNummer suchen ---------------------------------*/
nextAuftrag: procedure expose m.
parse arg pre, make, rz opt
if abbrev(rz, '-') then do
opt = rz
rz = ''
end
opt = translate(opt)
if rz = '' | rz = '*' then
rz = m.myRz
if m.myRz <> 'RZ1' then
call err 'Auftrag für RZ' rz 'muss aus RZ1 erstellt werden'
auft = m.libPre'.AUFTRAG'
call mAdd mCut(na, 0), auft, 'DSN.DBA.CLON.WSL'
max = pre
do nx=1 to m.na.0
lmm = lmmBegin(dsnSetMbr(m.na.nx, pre'*'))
mb = lmmNext(lmm)
fi = mb
la = ''
do cnt=2 by 1 while mb <> ''
la = mb
mb = lmmNext(lmm)
end
call lmmEnd lmm
say left(fi, 8) '-' left(la, 8)right(cnt-2, 5) ,
'member in' dsnSetMbr(m.na.nx, pre'*')
if la >> max then
max = la
end
nn = left(max, 7, '0')
do cx=7 by-1 to length(pre)+1,
while pos(substr(nn, cx, 1), '0123456789') > 0
end
if cx >= 7 then
nn = ''
else do
pp = 1 + substr(nn, cx+1)
if length(pp) > 7-cx then
nn = ''
else
nn = left(nn, cx) || right(pp, 7-cx, 0)
end
if length(nn) <> 7 then do
say 'max Auftrag' max 'kein naechster bestimmbar'
end
else if pos(make, 'CW') < 1 then do
say 'max Auftrag' max 'naechster' nn'?'
end
else do
nn = nn || make
say 'max Auftrag' max 'naechster' nn
m.auftrag.0 = 0
call neuerAuftrag 0, rz, nn
dsnNN = dsnSetMbr(auft, nn)
call writeDsn dsnNN, m.auftrag.
if opt = '-R' then
nop
else if rz = 'RZ1' then
call adrIsp "edit dataset('"dsnNN"')", 4
else
call writeDsn rz'/'dsnNN, m.auftrag.
end
m.auftrag.0 = '' /* do not write back the new auftrag | */
if opt = '-R' then
m.exitValue = nn
return 0
endProcedure nextAuftrag
/*--- einen neuen Auftrag initialisieren -----------------------------*/
neuerAuftrag: procedure expose m.
parse arg isTst, rz, auftName
if rz = '' then
rz = m.myRz
else
call configureRz rz
if isTst then do
ow = m.uid
maPr = 'T' || left(translate(m.uNa), 3, 'X')
comMask = m.libPre'.MASK('maPr'PROT)'
impMask = m.libPre'.MASK('maPr'$subsys)'
end
else do
ow = 'S100447'
comMask = m.libPre'.MASK(PROT$trgNm)'
impMask = m.libPre'.MASK($trgNm$impNm)'
end
comIgno = m.libPre'.MASK(IGNORE)'
impIgno = ''
if m.auftrag.0 <> 0 then
call err 'fun n erstellt neuen Auftrag nur in leeres Member'
/* wahrscheinlichen Zügelschub bestimmen*/
zglS = '20130208 20130510 20130809 20131108 2014???? 2015????'
zi = date('s')
zi = overlay(right(substr(zi, 5, 2)+1, 2, 0), zi, 5)
do wx=1 while zi >> word(zglS, wx)
end
zglSchub = if(isTst, 'test', word(zglS, wx) '??:00')
call mAdd auftrag ,
, addDateUs('auftrag ' auftName ow) ,
, ' Zuegelschub' zglSchub ,
, ' Besteller pid name tel' ,
, ' comMask ' comMask ,
, ' comIgno ' comIgno ,
, ' impMask ' impMask ,
, ' impIgno ' impIgno ,
, 'source RZ8.DX0G' ,
, ' ts' left(auftName, 4)'A1P.A%' ,
, 'target RZ8.'if(left(auftName, 2) == 'XB', 'DCVG', 'DC0G')
return
endProcedure neuerAuftrag
neuerNachtrag: procedure expose m.
parse upper arg opt
call analyseAuftrag
call addNachtrag
return
endProcedure neuerNachtrag
nextNachtrag: procedure expose m.
parse arg nt
nx = pos(nt, m.nachtragChars) + 1
if nx > length(m.nachtragChars) then
call err 'kein Nachtrag char mehr nach' nt
return substr(m.nachtragChars, nx, 1)
m.e.nachtrag = nt
return nt
endProcedure nextNachtrag
/*--- compare: Funktionen c, v und st --------------------------------*/
compare: procedure expose m.
parse upper arg fun, sendToRz
opts = ''
do forever
if abbrev(sendToRz, '=') then do
sendToRz = strip(substr(sendToRz, 2))
opts = opts'='
end
else if abbrev(sendToRz, '-') then do
opts = opts || substr(word(sendToRz, 1), 2)
sendToRz = subword(sendToRz, 2)
end
else
leave
end
cmpLast = pos('=', opts) > 0
if fun = 'C' then
function = 'compare'
else if fun = 'ST' then do
if sendToRz = '' | sendToRz = '*' then
call errHelp 'ST without sendToRz'
call mapPut e, 'toRz', sendToRz
function = 'sendTarget' sendToRz
end
else if fun = 'V' then
function = 'version'
else
call err 'bad fun' fun
call analyseAuftrag
if (m.scopeSrc.rz = m.sysRz ,
| (wordPos(m.scopeSrc.rz, 'RZ8 RZZ') > 0 & m.sysRZ = 'RZ1') ,
) & m.e.qCheck \== 0 then do
if qualityCheck(getDb2Catalog('SRC')) then
if pos('F', opts) < 1 & \ m.auftrag.force then
return
else
say 'wegen Option -f Verarbeitung',
'trotz Qualitaetsfehlern'
end
nacLast = m.e.nachtrag
if nacLast = '?' & cmpLast then
call err 'c = oder v = ohne vorangaengiges c oder v'
if nacLast = '?' | m.nacImp then
m.e.nachtrag = nextNachtrag(nacLast)
call mapPut e, 'mbrNac', left(m.e.auftrag, 7)m.e.nachtrag
m.o.0 = 0
call mapPut e, 'jobName', 'Y'left(m.e.auftrag, 7)
call mapPut e, 'fun', function opts
call namingConv m.scopeTrg.rz, m.scopeTrg.subsys, 'trgNm'
call namingConv m.scopeSrc.rz, m.scopeSrc.subsys, 'srcNm'
call mapExpAll e, o, skelStem(m.jobCard)
call mapPut e, 'mask', shrDummy(mapExp(e, m.e.comMask), 1)
call mapPut e, 'ignore', shrDummy(mapExp(e, m.e.comIgno))
call bmcVarsProf 0
if 0 then /* db ddl extrahieren ja / nein ???? */
call extractSrcTrg o, 'DB', cmpLast left(m.e.auftrag, 7)nacLast
if m.e.tool == ibm then
call extractSrcTrg o, '', cmpLast left(m.e.auftrag, 7)nacLast
else if m.e.tool == bmc then
call bmcSrcTrg cmpLast m.e.auftrag
else if m.e.tool == ca then do
call configureSubsys m.scopeSrc.rz, m.scopeSrc.subsys
end
if fun = 'C' then do
if m.optOvr then do
call mapPut e, 'ovr', 'OVR'
call mapExpAll e, o, skelStem('OVR')
call mapPut e, 'src', 'OVR'
end
if m.e.keepTgt then
call mapPut e, 'keepTgtV', ''
else
call mapPut e, 'keepTgtV', 'KEEPTGT,'
if m.e.tool == ca then
call caDDL o, scopeSrc, dsnGetMbr(mapGet(e, 'mask'))
else
call mapExpAll e, o, skelStem('COMP')
end
if fun = 'ST' then
call mapExpAll e, o, skelStem('ST')
call writeSub o
call mAdd auftrag, addDateUs(function ,
left('===', 3*cmpLast)m.e.nachtrag,
m.scopeTrg.rz'.'m.scopeTrg.subSys ,
mapExp(e, "'${libPre}." ,
|| if(m.e.tool=="IBM","srcCat",m.e.tool"Cdl") ,
|| "($mbrNac)'"))
return
endProcedure compare
/*--- find the naming convention for a rz and subsystem --------------*/
namingConv: procedure expose m.
parse arg rz, subsys, var
if rz = '.' then do
if pos('.', subSys) > 0 then
call err 'namingConv old target' subsys
if pos('/', subSys) > 0 then
parse var subsys rz '/' subsys
else
rz = m.sysRz
end
if strip(rz) = 'RZ1' then
t = strip(subsys)
else
t = 'DBOF'
if var ^== '' then
call mapPut e, var, t
return t
endProcedure namingConv
skelStem: procedure expose m.
parse upper arg nm
st = 'SKEL.'nm
if symbol('m.st.0') \== 'VAR' then
call readDsn m.libSkels || nm || ')', 'M.'st'.'
return st
endProcedur skelStem
/*--- write jcl and submit it ----------------------------------------*/
writeSub: procedure expose m.
parse arg o, rz, noWri
userSubmits = 1 /* edit jcl and user submits it */
if noWri <> 1 then do
jcl = m.libPre'.JCL('m.e.auftrag')'
call mStrip o, 't'
do ox=1 to m.o.0
if length(m.o.ox) > 70 then
call debug 'o.'ox 'len' length(m.o.ox)':' m.o.ox
end
call writeDsn jcl, m.o., ,1
if userSubmits then /* edit dataset and user may submit it */
call adrIsp "edit dataset('"jcl"')", 4
end
if (noWri <> 1) & (rz = '' | rz = m.sysRz) then do
if ^ userSubmits then
call adrTso "sub '"jcl"'"
end
else do /* submit jcl in another rz */
sysl = csmSysDsn(rz'/')
if sysl = '*/' then
sysl = ''
iral = dsnAlloc(sysl 'SYSOUT(T) dd(ir) .WRITER(INTRDR)')
call writeDDBegin ir
call writeDD ir, m.o.
call writeDDend 'IR'
interpret subword(irAl, 2)
end
return
endProcedure writeSub
/*--- view or edit a member -----------------------------------------*/
viewEdit: procedure expose m.
parse upper arg fun 2 wh, nac
call analyseAuftrag
if wh = 'D' then do
if words(nac) > 1 | length(word(nac, 1)) > 3 then do
d = m.libPre'Map.'word(nac, 1)
nac = subword(nac, 2)
end
else do
d = m.libPre'.caDDL'
end
end
else if wh = 'Y' then do
if length(word(nac, 1)) == 4 then
parse var nac d nac
else
d = substr(m.imp.last, 5)
rd = m.sysRz'/'d
d = m.libPre || d'.STRY'
end
else do
if wh = 'C' then
d = 'CDL'
else if wh = 'E' then
d = 'EXEJCL'
else if wh = 'J' then
d = 'JCL'
else if wh = 'S' then
d = 'SRCDDL'
else if wh = 'T' then
d = 'TRGDDL'
else if wh = 'W' then
d = 'BMCWSL'
end
if nac = '' then
d = d'('left(m.e.auftrag,7)m.e.nachtrag')'
else
d = d'('left(m.e.auftrag,7)right(strip(nac), 1)')'
if fun == 'E' then
call adrIsp "edit dataset('"d"')", 4
else
call adrIsp "view dataset('"d"')", 4
return
endProcedure viewEdit
/*--- return jcl either dd dummy or dd disp=shr,dsn=... --------------*/
shrDummy: procedure expose m.
parse arg dsn, keepEmpty
if dsn \= '' then
return 'DISP=SHR,DSN='translate(dsn)
else if keepEmpty == 1 then
return ''
else
return 'DUMMY'
endProcedure shrDummy
/*--- funktion i -----------------------------------------------------*/
import: procedure expose m.
parse upper arg fun, rzSubSysList opt .
call analyseAuftrag
if m.e.nachtrag = '?' then
call err 'vor i=import braucht es compare'
if opt <> '' then
nop
else if m.cmpLast then
call err 'i=import mit c = oder v = muss Nachtraege',
'explizit angeben, z.B. dbx i' rzSubSysList m.e.nachtrag
if ^ m.nacImp then do
cdl = cdlDsnCheck(m.e.nachtrag)
if m.e.dbaCheck == 0 then nop
else if m.e.tool \== 'IBM' then
say 'dbaCheck for' m.e.tool 'not implemented'
else do
if m.editMacro then
dbaParm = 'EX0'
else
dbaParm = 'END'
call adrIsp "edit dataset('"cdl"') macro(dbacheck)",
"parm(dbaParm)", 4
end
end
call mapPut e, 'expOpt', if(m.e.keepTgt, 'A', 'X')
if list = '' then
call err 'no targets in list "'rzDBSysList'"'
impCnt = 0
call configureRz m.sysRz
if fun = 'IA' then
fu2 = 'Ana'
else if fun = 'IE' then
fu2 = 'AnaExe'
else
fu2 = ''
call mapPut e, 'fun', strip('import'fun fu2 left(rzSubSysList, 30))
a7 = left(m.e.auftrag, 7)
call mapPut e, 'jobName', 'Y'a7
m.e.impMasks = ''
m.jOut.0 = 0
m.jOut.toRZ.0 = 0
m.jOut.send.0 = 0
call setIf jOut
call setIf jOut'.TORZ'
call mapExpAll e, jOut, skelStem(m.jobCard) /* Jobcards */
call configureRZ m.sysRz
rzLast = ''
call stepGroup 1
j0 = m.jOut.0
list = iListExpand(rzSubSysList, 0)
do lx = 1 to words(list)
rzDBSys = word(list, lx)
parse value word(list,lx) with r '/' subsys
if opt == '=' then do
if symbol('m.imp.rzDBSys.nachtrag') == 'VAR' then
nachAll = m.imp.rzDBSys.nachtrag
else
nachAll = ''
end
else if opt \== '' then do
nachAll = opt
end
else do
if symbol('m.imp.rzDBSys.nachtrag') \== 'VAR' then
nachAll = m.compares
else
nachAll = substr(m.compares,
, 1+pos(m.imp.rzDBSys.nachTop, m.compares))
end
if nachAll == '' then
iterate
if m.e.tool = 'CA' then
nachAll = right(nachAll, 1)
trgNm = ''
do nx=1 to m.nachtrag.0
if pos(m.nachtrag.nx, nachAll) < 1 then
iterate
act = namingConv('.', m.nachtrag.nx.trg)
if trgNm = '' then
trgNm = act
else if trgNm <> act then
call err 'targetNaming' trgNm 'wechselt zu' act ,
'fuer nachtrag' m.nachtrag.nx 'auf' m.nachtrag.nx.trg
end
m.imp.seq = m.imp.seq + 1
if length(m.imp.seq) > 3 then
call err 'import Sequenz Ueberlauf' m.imp.seq
m.imp.seq = right(m.imp.seq, 3, 0)
if length(nachAll) = 1 then
nachVB = nachAll
else
nachVB = left(nachAll, 1)'-'right(nachAll, 1)
chaPre = m.e.auftrag'.'nachVB'.'m.imp.seq
zs = translate(strip(right(m.e.zuegelSchub, 6)))
if m.e.tool = 'IBM' then
call mapPut e, 'change',chaPre'.'zs/*'.V'mapGet(e,'toolVers')*/
else
call mapPut e, 'change',m.e.auftrag || m.imp.seq'_'zs
call mapPut e, 'changeRem', 'zs' m.e.zuegelSchub ,
'auf' m.e.auftrag nachAll 'import DBX'
call mapPut e, 'deltaVers', chaPre'.DLT'
call namingConv '.', rzDBSys, 'impNm'
call namingConv m.scopeSrc.rz, m.scopeSrc.subsys, 'srcNm'
call mapPut e, 'trgNm', trgNm
call mapPut e, 'fun', 'import'fu2 rz
call mapPut e, 'fu2', fu2
call mapPut e, 'mbrNac', a7 || right(nachAll, 1)
if r <> m.myRz then do
call importToRZ jOut
call configureRZ r
end
call configureSubsys r, subsys
if m.e.tool == 'CA' then
call caImport jOut, fun, r, subsys, nachAll,
, mapExp(e, m.e.impMask), mapExp(e, m.e.comIgno)
else
call ibmImport jOut, fun, r, subsys, nachAll,
, mapExp(e, m.e.impMask), mapExp(e, m.e.comIgno)
call mAdd auftrag, addDateUs("import" rzDBSys nachAll,
mapGet(e, 'change') fun)
call stepGroup
end
call importToRz jOut
if m.jOut.0 <= j0 then
say 'nothing to import'
else do
if m.e.tool <> ibm & m.jOut.ifLine \== '' then do
call mAdd jOut, '// IF ABEND OR NOT (',
, '// ' m.jOut.ifLine ') THEN',
, '//PERROR EXEC PGM=IDCAMS ',
, '//SYSPRINT DD SYSOUT=*',
, '//SYSIN DD *',
, ' SET MAXCC = 12',
, '// ENDIF'
end
call writeSub jOut
end
return
endProcedure import
importToRZ: procedure expose m.
parse arg o
if m.o.send.0 \== 0 & m.sysRz \== m.myRz then do
sAft = ''
do sx=1 to m.o.send.0
c1 = m.o.send.sx
if m.cdlSent.c1 \== 1 then do
m.cdlSent.c1 = 1
if sAft == '' then do
call mapPut e, 'toRz', m.myRz
call mapPut e, 'cdl', dsnSetMbr(c1)
call addIf o
call mapExpAll e, o, skelStem('sCdl')
jx = m.o.0
sAft = m.o.jx
jx = jx - 1
sCx = pos('(', m.o.jx)
m.o.jx = left(m.o.jx, sCx) || dsnGetMbr(c1) '-'
m.o.0 = jx
end
else do
call mAdd o, right(',', sCx) || dsnGetMbr(c1) '-'
end
end
end
if sAft \== '' then do
call mAdd o, right(')', sCx) '-', sAft
call addIf o, 'end'
call setIf o, 'CP'm.myRz
end
end
if m.o.toRZ.0 == 0 then do
end
else if m.sysRz == m.myRz then do
call addIf o
call mAddSt o, o'.TORZ'
call addIf o, 'end'
m.o.ifLine = m.o.toRz.ifLine
end
else do
call addIf o
call mapExpAll e, o, skelStem('subRz')
la = m.o.0
la = m.o.la
m.o.0 = m.o.0 - 1
call mapExpAll e, o, skelStem(m.jobcard) /*Jobcards*/
call mAddSt o, o'.TORZ'
call mAdd o, la
call addIf o, 'end'
call setIf o, 'SUB'm.myRz
end
m.o.toRZ.0 = 0
call setIf jOut'.TORZ'
m.o.send.0 = 0
return
endProcedure importToRZ
ibmImport: procedure expose m.
parse arg o, fun, rz, dbSys, nachAll, msk, ign
say 'ibmImport' o',fun='fun', rz='rz', dbSys='dbSys,
|| ',nachAll='nachAll', mask='msk', ignore='ign
call mapPut e, 'ignore', shrDummy(ign)
call mapPut e, 'mask', shrDummy(msk, 1)
if rz <> m.sysRz then do
do nx=1 to length(nachAll) /* send changes to rz */
c1 = cdlDsnCheck(substr(nachAll, nx, 1))
call mAdd o.send, c1
end
call mapPut e, 'cType', "''''T''''"
call mapPut e, 'inDdn', 'DCHG'
cdlPds = m.libPre'.CDL'
call mapPut e, 'cdlPds', cdlPds
call ibmImportExpand o'.TORZ', nachAll
return
endProcedure ibmImport
caImport: procedure expose m.
parse arg o, fun, rz, dbSys, nachAll, msk, ign
say 'caImport' o',fun='fun', rz='rz', dbSys='dbSys,
|| ',nachAll='nachAll', mask='msk', ignore='ign
if length(nachAll) \== 1 then
call err 'caImport nachAll' nachAll 'not exactly one'
mskMbr = dsnGetMbr(msk)
call mapPut e, 'ddlin', m.libPre'.CADDL('mapGet(e, 'mbrNac')')'
call mapPut e, 'comIgnoMbr', dsnGetMbr(ign)
call mapPut e, 'impMaskMbr', mskMbr
if mskMbr \== '' & substr(mskMbr, 5) \== left(mskMbr, 4) then do
mapDdl = m.libPre'MAP.'mskMbr'('mapGet(e, 'mbrNac')')'
call mapPut e, 'ddlout', mapDdl
if m.caMapDdl.mapDdl \== 1 then do
m.caMapDdl.mapDdl = 1
call importMapping o, mskMbr, nachAll, mapDdl
call stepGroup o
end
call mapPut e, 'ddlin', mapDdl
call mapPut e, 'impMaskMbr', ''
end
call mAdd o'.SEND', mapGet(e, 'ddlin')
call mapPut e, 'stry', mapGet(e, 'mbrNac')
call mapPut e, 'bpid', m.libPre'.CASTRAT-'mapGet(e, 'mbrNac')
call addIf o'.TORZ'
call mapExpAll e, o'.TORZ', skelStem('CImp')
call addIf o'.TORZ', 'end'
call setIf o'.TORZ', 'AUTO'
if mskMbr == '' then
m.o.toRZ.0 = m.o.toRZ.0 -2 /* die maskZeilen entfernen */
if wordPos(fun, 'IA IE') > 0 then do /* analyse step */
if m.e.tool = ibm then
call err 'fun' fun 'not implemented for' m.e.tool
call addIf o'.TORZ'
call mapExpAll e, o'.TORZ', skelStem('CAna')
if mskMbr \== '' then
call caGlbChg o'.TORZ', mskMbr
call addIf o'.TORZ', 'end'
call setIf o'.TORZ', 'ANA', 0 4
end
if wordPos(fun, 'IE') > 0 then do /* execute step */
call addIf o'.TORZ'
call mapExpAll e, o'.TORZ', skelStem(left(m.e.tool, 1)'Exe')
ej = mapExp(e, "'${libPre}.EXEJCL($mbrNac)'")
call addIf o'.TORZ', 'end'
call setIf o'.TORZ', 'RUN'
j.1 = 'exeJcl for' m.e.auftrag 'noch nicht generiert'
call writeDsn ej, j., 1, 1
end
return
endProcedure caImport
importOld: procedure expose m.
parse upper arg fun, rzSubSysList opt .
call analyseAuftrag
if m.e.nachtrag = '?' then
call err 'vor i=import braucht es compare'
if opt <> '' then
nop
else if words(m.targets) > 1 then
call err 'i=import mit mehreren targets muss Nachtraege',
'explizit angeben, z.B. dbx i' rzSubSysList m.e.nachtrag
else if m.cmpLast then
call err 'i=import mit c = oder v = muss Nachtraege',
'explizit angeben, z.B. dbx i' rzSubSysList m.e.nachtrag
if ^ m.nacImp then do
cdl = cdlDsnCheck(m.e.nachtrag)
if m.e.dbaCheck == 0 then nop
else if m.e.tool \== 'IBM' then
say 'dbaCheck for' m.e.tool 'not implemented'
else do
if m.editMacro then
dbaParm = 'EX0'
else
dbaParm = 'END'
call adrIsp "edit dataset('"cdl"') macro(dbacheck)",
"parm(dbaParm)", 4
end
end
call mapPut e, 'expOpt', if(m.e.keepTgt, 'A', 'X')
call readDsn m.libSkels || left(m.e.tool, m.e.tool\=='IBM')'Imp)',
, m.ic.
list = iListExpand(rzSubSysList, 0)
if list = '' then
call err 'no targets in list "'rzSubSysList'"'
impCnt = 0
call configureRz m.sysRz
if fun = 'IA' then
fu2 = 'Ana'
else if fun = 'IE' then
fu2 = 'AnaExe'
else
fu2 = ''
call mapPut e, 'fun', strip('import'fu2 left(rzSubSysList, 30))
call mapPut e, 'jobName', 'Y'left(m.e.auftrag, 7)
m.e.impMasks = ''
fu2 = fun fu2
m.jOut.0 = 0
call mapExpAll e, jOut, skelStem(m.jobCard) /* Jobcards */
call stepGroup 1
j0 = m.jOut.0
rz = '?'
do lx = 1
r1 = word(list, lx)
parse var r1 r '/' subsys
if r <> rz | subsys = '' then do
if impCnt <> 0 then do
if rz <> m.sysRz then do
if symbol('m.sCdl.0') \== 'VAR' then do
call readDsn m.libSkels'sCdl)', m.sCdl.
call readDsn m.libSkels'subRz)', m.subRz.
end
if m.impMbrs == '' then
call err 'int no impMbrs'
call mapPut e, 'mbrNac',
, left(m.e.auftrag, 7)left(m.impMbrs, 1)
call mapPut e, 'toRz', m.myRz
call mapExpAll e, jOut, sCdl
jy = m.jOut.0
jx = jy-1
m.jOut.0 = jx
jla = m.jOut.jy
cx = pos(')-', m.jOut.jx)
if cx < 1 | substr(m.jout.jx, cx+2) \= '' then
call err 'bad sCdl line' jx':'m.jOut.jx
m.jOut.jx = left(m.jOut.jx,cx-1) '-'
do mx=2 to length(m.impMbrs)
call mAdd jOut, left('', cx-10)',' ,
|| left(m.e.auftrag,7) ,
|| substr(m.impMbrs, mx,1) '-'
end
call mAdd jOut, left('', cx-10)') -'
call mAdd jOut, jLa
call mapExpAll e, jOut, subRz
jy = m.jOut.0
jla = m.jOut.jy
m.jOut.0 = jy-1
call mAddSt jOut, jAft
call mAdd jOut, jLa
end
end
if subsys = '' then do
if m.jout.0 > j0 then
call writeSub jOut
return
end
rz = r
if rz = m.sysRz then do
job = jOut
m.jAft.0 = 'noUse'
end
else do
job = jAft
m.jAft.0 = 0
end
m.impMbrs = ''
call configureRz rz
impCnt = 0
call mapPut e, 'fun', 'import'fu2 rz
call mapPut e, 'fu2', fun
call configureSubsys rz
end
if length(subsys) <> 4 then
call err 'ungueltiges db2SubSys' subsys 'im import' rz
call configureSubsys rz, subsys
if rz = m.sysRz then
impCnt = impCnt + importAdd(job, subsys, opt, ic, fu2)
else if m.sysRz == 'RZ1' then
impCnt = impCnt + importAdd(job, rz'/'subsys, opt, ic, fu2)
else
call err 'cannot import into' rz 'from' m.sysRz
end
endProcedure importOld
/*--- add a single import to jcl in o --------------------------------*/
importAdd: procedure expose m.
parse upper arg o, rzSubSys, opt, fun fu2
/* Uebergang altes auf neue Delta Merge Verfahren ++++++++ begin */
deltaNew = 1 /* abbrev(rzSubSys,'RZ1.'),
| (pos('.',rzSubSys) < 1 & m.sysRz = 'RZ1') */
if deltaNew then do /* neues delta merge verfahren */
inDdn = 'DCHG'
call mapPut e, 'cType', "''''T''''"
end
else do /* altes delta merge verfahren */
inDdn = 'SRCDDN2'
call mapPut e, 'cType', "''''C''''"
end
call mapPut e, 'inDdn', inDdn
/* Uebergang altes auf neue Delta Merge Verfahren ++++++++ end */
if opt ^= '' & opt ^= '=' then do
nachAll = opt
end
else if symbol('m.imp.rzSubSys.nachtrag') ^== 'VAR' then do
nachAll = m.compares
end
else do
if opt = '=' then
la = left(m.imp.rzSubSys.nachtrag, 1)
else
la = right(m.imp.rzSubSys.nachtrag, 1)
cx = pos(la, m.compares)
if cx < 1 then
call err 'nachtrag' la 'von' rzSubSys m.rzSubSys.change ,
'nicht in Compare Liste' m.compares
nachAll = substr(m.compares, cx + (opt ^= '='))
end
if nachAll = ' ' then do
say 'alle Nachtraege schon importiert fuer' rzSubSys
return 0
end
call mapPut e, 'mbrChg', left(m.e.auftrag, 7)right(nachAll, 1)
if length(nachAll) = 1 then
nachVB = nachAll
else
nachVB = left(nachAll, 1)'-'right(nachAll, 1)
trgNm = ''
do nx=1 to m.nachtrag.0
if pos(m.nachtrag.nx, nachAll) < 1 then
iterate
act = namingConv('.', m.nachtrag.nx.trg)
if trgNm = '' then
trgNm = act
else if trgNm <> act then
call err 'targetNaming' trgNm 'wechselt zu' act ,
'fuer nachtrag' m.nachtrag.nx 'auf' m.nachtrag.nx.trg
end
m.imp.seq = m.imp.seq + 1
if length(m.imp.seq) > 3 then
call err 'import Sequenz Ueberlauf' m.imp.seq
m.imp.seq = right(m.imp.seq, 3, 0)
chaPre = m.e.auftrag'.'nachVB'.'m.imp.seq
zs = translate(strip(right(m.e.zuegelSchub, 6)))
if m.e.tool = 'IBM' then
call mapPut e, 'change',chaPre'.'zs/*'.V'mapGet(e,'toolVers')*/
else
call mapPut e, 'change',m.e.auftrag || m.imp.seq'_'zs
call mapPut e, 'changeRem', 'zs' m.e.zuegelSchub ,
'auf' m.e.auftrag nachAll 'import DBX'
call mapPut e, 'deltaVers', chaPre'.DLT'
call namingConv '.', rzSubSys, 'impNm'
call namingConv m.scopeSrc.rz, m.scopeSrc.subsys, 'srcNm'
call mapPut e, 'trgNm', trgNm
call mapPut e, 'ignore', shrDummy(mapExp(e, m.e.impIgno))
cdlPds = m.libPre'.CDL'
call mapPut e, 'cdlPds', cdlPds
call bmcVarsProf 1
if m.impMbrs = '' & m.myRz \== m.sysRz then
call mapExpAll e, o, skelStem(m.jobcard) /* Jobcards */
m.impMbrs = charInsAsc(m.impMbrs, nachAll)
if m.e.tool = 'CA' then do
return 1
endProcedure importAdd
stepGroup: procedure expose m.
parse arg f
if f == 1 then
no = 1
else
no = m.e.stepNo + 1
m.e.stepNo = right(no, 3, 0)
m.e.stepGr = 'S'm.e.stepNo
call mapPut e, 'stp', m.e.stepGr
return
endProcedure stepGroup
setIf: procedure expose m.
parse arg o, stp, codes
if stp == '' then
li = ''
else do
if length(stp) < 5 then
stp = m.e.stepGr || stp
li = stp'.RUN AND'
pr = '('
if codes == '' then
codes = 0
do cx=1 to words(codes)
li = li pr stp'.RC='word(codes,cx)
pr = 'OR'
end
li = li ')'
end
if length(li) > 53 then
call err 'if too long' li
m.o.ifLine = li
if li == '' then
call mapPut e, 'endIf', '//* no endIf'
else
call mapPut e, 'endIf', '// ENDIF'
return
endProcedure setIf
addIf: procedure expose m.
parse arg o, opt
if m.o.ifLine == '' then
return
else if opt == 'end' then
call mAdd o, '// ENDIF'
else
call mAdd o, '// IF' m.o.ifLine 'THEN'
return
endProcedure addIf
ibmImportExpand: procedure expose m.
parse arg o, nachAll, deltaNew
call addIf o
ic = skelStem('Imp')
sto = mapExpAllAt(e, o, ic, 1, 1)
do while sto ^= ''
parse var sto lx cx
w = word(substr(m.ic.lx, cx), 1)
if w == '$@maskDD' then do
if mapGet(e, 'mask') \= '' then
call mAdd o, '//MSKDDN1 DD' mapGet(e, 'mask')
end
else if w == '$@maskII' then do
if mapGet(e, 'mask') \= '' then
call mAdd o, " MSKDDN='MSKDDN1',",
, " MSKOWN='DUMMY',",
, " MSKNAME='DUMMY',"
end
else if w == '$@bmcCdl' then do
le = left('//IMPORTIN', 13)
do ix=1 to length(nachAll)
call mAdd o, le || 'DD DISP=SHR,DSN=',
|| cdlDsnCheck(substr(nachAll, ix, 1))
le = left('//', 13)
end
end
else if w ^== '$@cdl' then do
call err 'unbekannte Anweisung' w 'in Zeile' cx m.ic.cx
end
else do
inDdn = mapGet(e, 'inDdn')
do ix=1 to length(nachAll)
call mAdd o, left('//'inDdn || right(ix,3,0), 13) ,
|| 'DD DISP=SHR,DSN=',
|| cdlDsnCheck(substr(nachAll, ix, 1))
end
end
sto = mapExpAllAt(e, o, ic, lx, cx + length(w))
end
call addIf o, 'end'
call setIf o, 'AUTO'
return
endProcedure ibmImportExpand
importMapping: procedure expose m.
parse arg o, msk, nachAll, mapDdl
oldRz = m.myRz
oldSub= mapGet(e, 'subsys')
if m.myRz \== m.sysRz then
call configureRZSub m.sysRz, m.sysSub
say '???adding impMbr' msk
call addIf o
mStry = left(m.e.auftrag, 7)'#'
call mapPut e, 'mStry', mStry
interpret subword(dsnAlloc(mapDdl '::F'), 2)
call mAdd o,'//****** importMasking' mask 'begin ???????'
call mapExpAll e, o, skelStem('CMAP')
call mapPut e, 'ddlout', mapDdl
call caGlbChg o, mapGet(e, 'impMaskMbr')
call mAdd o,'// ENDIF'
call mAdd o,'//****** importMasking' mask 'end ???????'
call addIf o, 'end'
call setIf o, 'MANA', 0 4
if m.myRz \== oldRz then
call configureRZSub oldRz, oldSub
return
endProcedure importMapping
/*--- DSN für CDL des Nachtrags zurückgeben und auf Existenz prüfen---*/
cdlDsnCheck: procedure expose m.
parse arg nt
cdl = m.libPre'.'if(m.e.tool=='IBM', 'CDL', 'CADDL') ,
|| '('left(m.e.auftrag, 7) || nt')'
if m.cdlDsnCheck.cdl == 1 then
return cdl
rr = sysDsn("'"cdl"'")
if rr <> 'OK' then
call err 'cdl fuer' nt'. Nachtrag fehlt:' cdl rr
m.cdlDsnCheck.cdl = 1
return cdl
endProcedure cdlDsnCheck
/*--- Date und user rechtsbuendig einfuegen --------------------------*/
addDateUs: procedure expose m.
parse arg le
return le right(date(s) time() m.uNa, 71-length(le))
endProcedure addDateUs "'"
/*--- den aktuellen Auftrag analysieren ------------------------------*/
analyseAuftrag: procedure expose m.
m.scopeSrc.0 = 0
m.scopeSrc.subSys = m.pr1Sub
m.scopeSrc.rz = m.myRz
m.catSrc.0 = ''
m.scopeTrg.0 = 0
m.scopeTrg.subSys = m.pr1Sub
m.scopeTrg.rz = m.myRz
m.catTrg.0 = ''
m.imp.seq = -1
m.nacImp = 0
m.e.impMask = ''
m.e.comMask = ''
m.e.tool = 'IBM'
m.e.keepTgt = 1
allImpSubs = ''
if m.auftrag.0 = 0 then
call err 'Auftrag ist leer'
vaWo = 'AUFTRAG'
varWo = 'ZUEGELSCHUB BESTELLER COMMASK COMIGNO IMPMASK IMPIGNO' ,
'KEEPTGT DBACHECK QCHECK V72 V10 CA BMC IBM'
ignWo = 'SW SENDWSL RECEIVEWSL RECEIVESOURCE'
ignCh = '*|'
lev1Wo = 'SCOPE SOURCE TARGET COMPARE VERSION IMPORT SENDTARGET' ,
varWo 'PROTOTYPERZ'
do lx=1 to m.auftrag.0
li = m.auftrag.lx
parse upper var li w1 w2 w3 .
if w1 = '' | pos(left(w1, 1), ignCh) > 0 ,
| wordPos(w1, ignWo) > 0 then
iterate
if wordPos(w1, vaWo) < 1 then
call err 'operation' w1 ', erwartet' vaWo 'in Zeile' lx li
w2 = translate(word(li, 2))
if w1 = 'AUFTRAG' then do
if w2 ^= m.auftrag.member then
call err 'auftrag' w2 '<> member' m.auftrag.member
m.e.auftrag = w2
m.e.nachtrag = '?'
m.nachtrag.0 = 0
if dataType(left(w3, 1), 'U') & length(w3) <= 8 then
ow = w3
else
ow = 'S100447'
call mapPut e, 'chgOwn', ow
vaWo = lev1Wo
end
else if wordPos(w1, 'V72 V10') > 0 then do
call configureRZ , , substr(w1, 2)
end
else if wordPos(w1, 'CA BMC IBM') > 0 then do
m.e.tool = w1
end
else if wordPos(w1, varWo) > 0 then do
m.e.w1 = word(li, 2)
end
else if w1 = 'PROTOTYPERZ' then do /* alte syntax sep08 ??? */
m.scopeSrc.rz = word(li, 2)
end
else if wordPos(w1, 'SCOPE SOURCE TARGET') > 0 then do
suSy = ''
if w1 = 'SOURCE' then do
scp = 'SCOPESRC'
suSy = w2
end
else if w1 = 'TARGET' then do
scp = 'SCOPETRG'
if abbrev('EXPLICIT', w2, 2) then do
m.optAuto = 0
suSy = w3
end
else do
suSy = w2
if abbrev('EXPLICIT', w3, 2) then
m.optAuto = 0
end
end
else do /* alte syntax */
if abbrev('SOURCE', w2) then
scp = 'SCOPESRC'
else if abbrev('TARGET', w2) then
scp = 'SCOPETRG'
else
call err 'scope' w2 'nicht abk. von SOURCE TARGET',
'in Zeile' lx li
end
if (abbrev(suSy, 'DQ0') | abbrev(suSy, 'RZ1.DQ0')) ,
<> (m.libPre == 'DSN.DBQ') then
call err 'subSys' suSy 'mit Auftrag in' m.libPre
m.scp.0 = 0
if pos('.', suSy) > 0 then
parse var suSy suRz '.' suSy
else if pos('/', suSy) > 0 then
parse var suSy suRz '/' suSy
else
suRZ = ''
if suSy <> '' then
m.scp.subsys = suSy
if suRz <> '' then
m.scp.rz = suRz
vaWo = m.scopeTypes m.scopeType1 lev1Wo
call debug 'scope' scp m.scp.rz'.'m.scp.subsys
end
else if wordPos(w1, m.scopeTypes m.scopeType1) > 0 then do
parse value analyseScope(li) with ty nm qu
if ty = '?' then
call err nm qu 'in scope line' lx':' strip(li)
aa = mAdd(scp, 'scope')
m.aa.type = ty
m.aa.qual = qu
m.aa.name = nm
end
else if wordPos(w1, 'COMPARE VERSION SENDTARGET') > 0 then do
if w1 = 'SENDTARGET' then
w2 = w3
cmpLast = abbrev(w2, '=')
w2 = strip(w2, 'l', '=')
if length(w2) <> 1 | pos(w2, m.nachtragChars) < 1 then
call err 'nachtrag' w2 'in Zeile' lx li
if pos(w2, m.nachtragChars) ,
< pos(m.e.nachtrag, m.nachtragChars) then
call err 'nachtrag' w2 '< vorherigem' m.e.nachtrag ,
'in Zeile' lx li
if m.e.nachtrag <> w2 then do
m.e.nachtrag = w2
nx = m.nachtrag.0 + 1
m.nachtrag.0 = nx
m.nachtrag.nx = w2
end
m.nachtrag.nx.fun = ''
m.nachtrag.nx.last = cmpLast
if pos(left(w1, 1), 'CV') > 0 then
m.nachtrag.nx.fun = left(w1, 1)
if abbrev(w3, "'") | verify(w3, '/.', 'm') < 1 then
t1 = m.myRz'/'m.pr1Sub
else
t1 = translate(w3, '/', '.')
m.nachtrag.nx.trg = t1
call debug 'nachtr' nx m.nachtrag.nx 'trg' m.nachtrag.nx.trg
m.nacImp = (w1 <> 'COMPARE')
end
else if w1 = 'IMPORT' then do
parse upper var li . subsys nachAll chg .
subsys = translate(subsys, '/', '.')
if pos('/', subsys) < 1 then
subsys = 'RZ1/'subsys
parse var chg chgAuf '.' chgNac '.' chgSeq '.' chgImp
aa = m.e.auftrag
if chgAuf = aa then do
if left(chgNac, 1) <> left(nachAll, 1) then
call err 'Nachtrag von mismatch in Zeile' lx li
if right(chgNac, 1) <> right(nachAll, 1) then
call err 'Nachtrag bis mismatch in Zeile' lx li
end
else if abbrev(chgAuf, aa) ,
& substr(chgAuf, length(aa)+4, 1) == '_' then do
chgSeq = substr(chgAuf, length(aa)+1, 3)
end
else
call err 'Auftrag mismatch in Zeile' lx li
if chgSeq <= m.imp.seq then
call err 'seq' chgSeq 'nicht > letzte' m.imp.seq,
'in Zeile' lx li
m.nacImp = 1
m.imp.last = subSys
m.imp.subSys.nachtrag = nachAll
if wordPos(subSys, allImpSubs) < 1 then do
allImpSubs = allImpSubs subSys
m.imp.subSys.nachTop = left(nachAll, 1)
end
do nx=length(nachAll) by -1 to 1
if pos(substr(nachAll, nx, 1), m.nachtragChars) ,
> pos(m.imp.subSys.nachTop , m.nachtragChars) then
m.imp.subSys.nachTop = substr(nachAll, nx, 1)
end
m.imp.subSys.change = chg
m.imp.seq = chgSeq
end
else do
call err 'ungültiger Operator' w1 'in Zeile' lx':' strip(li)
end
end
m.e.keepTgt = m.e.keepTgt == 1
/* nachtrae durchgehen und kumulieren */
m.targets = ''
m.compares = ''
m.versions = ''
drop cmpLast
m.cmpLast = 0
do nx=1 to m.nachtrag.0
m.cmpLast = m.cmpLast | m.nachtrag.nx.last
if wordPos(m.nachtrag.nx.trg, m.targets) < 1 then
m.targets = m.targets m.nachtrag.nx.trg
if m.nachtrag.nx.fun = 'C' then
m.compares = m.compares || m.nachtrag.nx
if m.nachtrag.nx.fun = 'V' then
m.versions = m.versions || m.nachtrag.nx
call debug 'nachtrag' nx m.nachtrag.nx 'trg' m.nachtrag.nx.trg,
'all' m.targets 'fun' ,
m.nachtrag.nx.fun 'com' m.compares 'ver' m.versions,
'cmpLast' m.cmpLast
end
if 0 & abbrev(m.scopeSrc.subSys, 'DQ0') then
call configureRz , '915 P0'
if 0 then do
say 'auftrag ' m.e.auftrag m.e.nachtrag mapGet(e, 'chgOwn')
say ' comMask ' m.e.comMask
say ' comIgno ' m.e.comIgno
say ' impMask ' m.e.impMask
say ' impIgno ' m.e.impIgno
scp = 'SCOPESRC'
drop subsys
say ' scope ' m.scp.0 m.scp.subsys ,
' target ' m.scopeTrg.0 m.scopeTrg.subsys
do sx=1 to m.scp.0
say ' ' m.scp.sx.type m.scp.sx.qual'.'m.scp.sx.name
end
end
call bmcVars
return
endProcedure analyseAuftrag
/*--- eine Scope Zeile analysieren -----------------------------------*/
analyseScope: procedure expose m.
parse arg li
parse upper var li ty w1 rest
if wordPos(ty, m.scopeType1) > 0 then
ty = word(m.scopeTypes, wordPos(ty, m.scopeType1))
if wordPos(ty, m.scopeTypes) < 1 then
return '?'
cx = pos('.', w1)
if cx < 1 then do
qu = w1
end
else do
qu =strip(left(w1, cx-1))
rest = substr(w1, cx) rest
end
if qu = '' then
return '? leerer Qualifier'
if ty = 'DB' then
return ty qu
if left(rest, 1) = '.' then
rest = substr(rest, 2)
nm = word(rest, 1)
if nm = '' then
return '? leerer Name'
return ty nm qu
endProcedure analyseScope
/*--- jcl generieren um Src und Trg Version und DDL zu extrahieren ---*/
extractSrcTrg: procedure expose m.
parse arg o, xx, oldSrc mbrLast
call configureSubsys m.scopeSrc.rz, m.scopeSrc.subsys
call mapPut e, 'auto', xx'AUTO'
call mapPut e, 'src', xx'SRC'
call mapPut e, 'trg', xx'TRG'
mbrNac = mapGet(e, 'mbrNac')
call mapPut e, 'what', xx'SRC'
if ^ oldSrc then do
call extractScopeVersion o, xx, 'SRC'
end
else if mbrNac <> mbrLast then do
pr = m.libPre'.'xx'SRC'
call copyDsn pr'DDL('mbrLast')', pr'DDL('mbrNac')', 1
call copyDsn pr'CAT('mbrLast')', pr'CAT('mbrNac')', 1
end
call configureSubsys m.scopeTrg.rz, m.scopeTrg.subsys
call mapPut e, 'what', xx'TRG'
if m.optAuto then do
call mapExpAll e, o, skelStem('AutMa')
if m.sysRz = m.scopeTrg.rz then do
call mapExpAll e, o, skelStem('AutEx')
end
else do
mbrN = mapGet(e, 'mbrNac')
mark = mbrN'@'time()
autD = mapExp(e, '${libPre}.$auto($mbrNac)')
cf = mapExp(e, '${libPre}.SENDCF($mbrNac)')
sndIn = sendJob1(o, m.scopeTrg.rz, 'RECTRG',
, 'send' autD ,
, 'job -ddJob' m.timeout'//??' cf mark ,
, 'receive' mapExp(e, '${libPre}.${what}DDL($mbrNac)') ,
, 'receive' mapExp(e, '${libPre}.${what}CAT($mbrNac)') )
call mapExpAll e, o, skelStem('AutEx')
call sendJob2 o, sndIn, cf mark
end
end
else do
call extractScopeVersion o, xx, 'TRG'
end
return
endProcedure extractSrcTrg
/*--- Version + DDL zu extrahieren -----------------------------------*/
extractScopeVersion: procedure expose m.
parse arg o, ty, what
scp = 'SCOPE'what
/* say m.scp.rz 'scp' scp */
if m.sysRz = m.scp.rz then do
call extractVersionStep o, ty, what
end
else do
mbrN = mapGet(e, 'mbrNac')
mark = mbrN'@'time()
cf = mapExp(e, '${libPre}.SENDCF($mbrNac)')
sndIn = sendJob1(o, m.scp.rz, 'REC'what,
, 'job -ddJob' m.timeout'//??' cf mark ,
, 'receive' mapExp(e, '${libPre}.${what}DDL($mbrNac)') ,
, 'receive' mapExp(e, '${libPre}.${what}CAT($mbrNac)') )
call extractVersionStep o, ty, what
call sendJob2 o, sndIn, cf mark
end
return
endProcedure extractScopeVersion
/*--- einen Step um Version + DDL zu extrahieren ---------------------*/
extractVersionStep: procedure expose m.
parse arg o, ty, what
scp = 'SCOPE'what
call mapPut e, 'what', ty || what
i = skelStem('ExVe')
sto = mapExpAllAt(e, o, i, 1, 1)
do while sto ^== ''
parse var sto lx cx
w = word(substr(m.i.lx, cx), 1)
if w == '$@scope' then do
if ty == '' then do
do sx=1 to m.scp.0
sn = scp'.'sx
if wordPos(m.sn.type, 'UDT UDF') > 0 then do
t = "SCH = '"m.sn.qual"', " ,
m.sn.type "= '"m.sn.name"';"
end
else do
t = "TYPE = '"m.sn.type"',"
if m.sn.type <> 'DB' then
t = t "QUAL = '"m.sn.qual"',"
t = t "NAME = '"m.sn.name"'"
if m.sn.type = 'SP' then
t = t", VERSION='%'"
t = t';'
end
if length(t) < 30 then do
call mAdd o, ' ' t
end
else do
cx = lastPos(',', t)
call mAdd o, ' ' left(t, cx),
, ' ' substr(t, cx+1)
end
end
end
else if ty == 'DB' then do
c = getDb2Catalog(what)
do x=1 to m.c.0
d1 = m.c.x.db
if db.d1 == 1 then
iterate
db.d1 = 1
call mAdd o, " TYPE = 'DB,' NAME = '"d1"';"
end
end
else
call err 'extractVersionStep bad ty' ty
end
else do
call err 'implement stop' sto 'word' w 'in line' lx m.i.lx
end
sto = mapExpAllAt(e, o, i, lx, cx + length(w))
end
return
endProcedure extractVersionStep
/*--- add jcl to stem o to send a job to rz toRz with stepname step
and add the remaining arguments as sendJob statements
afterwards the caller must add the jcl and call sendJob2 ----*/
sendJob1: procedure expose m.
parse arg o, toRz, step
oldRz = m.myRz
call configureRz toRz
call mapPut e, 'step', step
call mapExpAll e, o, skelStem('SendJ')
do ax=4 to arg()
aa = arg(ax)
call debug 'sendJob1 le' length(aa) aa'|'
sx = 0
do forever
sy = sx
sx = pos(';', aa, sy+1)
if sx = 0 then
leave
call mAdd o, substr(aa,sy+1, sx-sy-1)
end
call mAdd o, substr(aa, sy+1) left('-', (ax < arg()))
end
call mAdd o, '//DDJOB DD *'
stReX = m.o.0+1
call mapPut e, 'jobName', 'Y'left(m.e.auftrag, 7)
call mapPut e, 'fun', 'extract data from' toRz
call mapExpAll e, o, skelStem(m.jobCard)
return oldRz stReX
endProcedure sendJob1
/*--- add the mark step to the job, translate leading // to ??
and switch back to original rz -----------------------------*/
sendJob2: procedure expose m.
parse arg o, oldRz stReX, cfMark
if cfMark ^= '' then do
call mAdd o, '// IF NOT ABEND' ,
'AND RC >= 0 AND RC <= 4 THEN'
call mapPut e, 'step', 'MARKOK'
call mapExpAll e, o, skelStem('SendJ')
call mAdd o, 'mark' cfMark 'okRc0'
call mAdd o, '// ELSE'
call mapPut e, 'step', 'MARKERR'
call mapExpAll e, o, skelStem('SendJ')
call mAdd o, 'mark' cfMark 'badRcOrAbend'
call mAdd o, '// ENDIF'
end
do ox = stReX to m.o.0
if abbrev(m.o.ox, '//') then
m.o.ox = overlay('??', m.o.ox)
end
call configureRz oldRz
return
endProcedure sendJob2
/*--- return Stem fuer die CatalogInfo für Src oder Trg
falls noetig aus Db2Catalog einlesen -----------------------*/
getDb2Catalog: procedure expose m.
parse arg wh
st = 'CAT'wh
if datatype(m.st.0, n) then
return st
else if m.st.0 ^== '' then
call err 'getDb2Catalog('wh') bad value m.'st'.0' m.st.0
scp = 'SCOPE'wh
if m.sysRz = m.scp.rz then
call sqlOConnect m.scp.subSys
else
call sqlOConnect m.scp.rz'/'m.scp.subSys
call queryDb2Catalog st, wh
m.v9.0 = 0
call queryDb2V9 st, 'V9'
return st
endProcedure getDb2Catalog
/*--- Information aus Db2Catalog fuer einen Scope einlesen -----------*/
queryDb2Catalog: procedure expose m.
parse arg st, what
scp = 'SCOPE'what
/* m.scopeTypes = 'DB TS TB VW IX AL' */
ts = ''
tb = ''
ix = ''
unQueried = 0
do sx=1 to m.scp.0
sn = scp'.'sx
t = " TYPE = '"m.sn.type"',"
if m.sn.type <> 'DB' then
t = t "QUAL = '"m.sn.qual"',"
t = t "NAME = '"m.sn.name"';"
call debug 'queryDb2Catalog' sx t
if m.sn.type = 'DB' then
ts = ts 'or s.dbName' sqlClause(m.sn.name)
else if m.sn.Type = 'TS' then
ts = ts 'or (s.dbName' sqlClause(m.sn.qual) ,
'and s.name' sqlClause(m.sn.name)')'
else if m.sn.Type = 'TB' then
tb = tb 'or (t.creator' sqlClause(m.sn.qual) ,
'and t.name' sqlClause(m.sn.name)')'
else if m.sn.Type = 'IX' then
ix = ix 'or (x.creator' sqlClause(m.sn.qual) ,
'and x.name' sqlClause(m.sn.name)')'
else
unQueried = unQueried + 1
end
sel = 'select s.dbName db, s.name ts , s.type, ',
's.partitions, s.segSize, s.log, ',
't.creator cr, t.name tb,' ,
't.status tbSta, t.tableStatus tbTbSta',
'from sysibm.sysTableSpace S, sysibm.sysTables T'
wh = "where s.dbName = t.dbName and s.name = t.tsName",
"and t.type = 'T'"
sql = ''
if ts <> '' then
sql = sql 'union' sel wh 'and ('substr(ts, 5)')'
call debug 'ts sql' sql
if tb <> '' then
sql = sql 'union' sel wh 'and ('substr(tb, 5)')'
call debug 'tb sql' sql
if ix <> '' then
sql = sql 'union' sel ', SYSIBM.SYSINDEXES X',
wh 'and t.creator=x.tbCreator and t.name=x.tbName',
'and ('substr(ix, 5)')'
call debug 'ix sql' sql
if sql = '' then do
m.st.0 = 0
if unQueried < 1 then
say 'nothing specified in source scope'
return 0
end
drop db ts cr tb type
call sql2St substr(sql, 8), st
if m.debug == 1 then do
say m.st.0
do sx = 1 to m.st.0
say strip(m.st.sx.db)'.'strip(m.st.sx.ts) m.st.sx.type ,
m.st.sx.partitions m.st.sx.segSize
end
end
return m.st.0
endProcedure queryDb2Catalog
/*--- haben wir schon DB2 V9 Objekte ? -------------------------------*/
queryDb2V9: procedure expose m.
parse arg sc, vv
m.vv.0 = 0
wh =''
do x = 1 to m.sc.0
wh = wh "or (cr='"m.sc.x.cr"' and tb='"m.sc.x.tb"')"
end
if wh == '' then
return 0
return sql2st("select tp,nm,v9",
"from s100447.db2v9",
"where V9 <> '' and (" substr(wh, 5) ")",
"order by cr,tb,cl", vv)
endProcedure queryDb2V9
/*--- Qualitaets Pruefung fuer CatalogInfo Stem c --------------------*/
qualityCheck: procedure expose m.
parse arg c
if m.libPre <> 'DSN.DBQ' then
call maskIni
o = 'AUFTRAG'
m.o.orig = 'rmQu' m.o.orig
m.spezialFall.done = ''
aufOld = m.o.0
do x=1 to m.c.0
vDb = strip(m.c.x.db)
n = '|| db' vDb
if d.n ^== 1 then do
d.n = 1
call spezialfall vDb, substr(n, 4)
end
n = '|| ts' vDb'.'strip(m.c.x.ts)
if d.n ^== 1 then do
d.n = 1
call spezialfall vDb, substr(n, 4)
if m.c.x.log <> 'Y' then
call mAdd o, n 'not logged'
if m.c.x.partitions > 0 then
nop
else if m.c.x.segSize = 0 then
call mAdd o, n 'simple TS'
end
n = '|| tb' strip(m.c.x.cr)'.'strip(m.c.x.tb)
if d.n ^== 1 then do
d.n = 1
call spezialfall vDb, substr(n, 4)
if m.c.x.tbTbSta = 'L' then
call mAdd o, n 'auxilary index oder table fehlt'
else if m.c.x.tbTbSta = 'P' then
call mAdd o, n 'primary index fehlt'
else if m.c.x.tbTbSta = 'R' then
call mAdd o, n 'index auf Row ID fehlt'
else if m.c.x.tbTbSta = 'U' then
call mAdd o, n 'index auf unique key fehlt'
else if m.c.x.tbTbSta = 'V' then
call mAdd o, n 'Regenerierung interne ViewDarstellung'
else if m.c.x.tbTbSta ^= '' then
call mAdd o, n 'TableStatus' m.c.x.tbTbSta 'unbekannt'
end
end
do vx=1 to m.v9.0
call mAdd o, '|| V9' m.v9.vx.tp left(m.v9.vx.nm, 30) ,
left(m.v9.vx.v9, 30)
end
return aufOld < m.o.0
endProcedure qualityCheck
/*--- für jedes Objekt aus Source Scope Eintrage in der
Spezialfall Library suchen und falls vorhanden anzeigen --------*/
spezialFall: procedure expose m.
parse upper arg db, typ qua '.' nam
if m.libPre = 'DSN.DBQ' then
return
pDb = mask2prod('DBNAME', db)
if (typ = 'DB' | typ = 'TS') & db <> qua then
call err 'db mismatch spezialFall('db',' typ qua'.'nam')'
if typ = 'DB' then
srch = typ pDb'.'
else if typ = 'TS' then
srch = typ pDb'.'mask2prod('TSNAME', nam)
else if typ = 'TB' then
srch = typ mask2prod('TBOWNER', qua)'.'mask2prod('TBNAME', nam)
else
call err 'bad typ' typ
st = spezialFall'.'pDb
if symbol('m.st.0') <> 'VAR' then do
dsn = m.libSpezial"("pDb")"
sy = sysDsn("'"dsn"'")
if sy <> 'OK' then do
m.st.0 = 0
if sy <> 'MEMBER NOT FOUND' then
call err 'spezialFall library' dsn':' sy
end
else do
call readDsn dsn, 'M.SPEZIALFALL.'pDB'.'
end
end
if m.st.0 < 1 then
return
offs = 999
found = 0
do sx = 1 to m.st.0
fx = verify(m.st.sx, ' ')
if fx = 0 | fx > 72 then
iterate
if substr(m.st.sx, fx, 1) = '*' then
iterate
if fx <= offs then do
offs = fx
m.st.sx = left(m.st.sx, 72)
n = ''
if pos('.', m.st.sx) > 0 then
parse upper var m.st.sx t q '.' n .
else
parse upper var m.st.sx t q .
if wordPos(t, 'DB TS TB') < 1 then
call err 'spezialFall' pDb 'line' sx 'ungueltig:' m.st.sx
found = match(srch, t strip(q)'.'strip(n)) ,
& ^ (wordPos(pDb'.'sx, m.spezialFall.done) > 0)
if found then
m.spezialFall.done = m.spezialFall.done pDb'.'sx
end
if found then
call mAdd auftrag, '|-'left(m.st.sx, 78)
end
return
endProcedure spezialFall
/*--- mask handling initialise ---------------------------------------*/
maskIni: procedure expose m.
call maskHierarchy
call maskRead mask.prot, m.libPre'.MASK(PROTDBAF)'
call maskRead mask.dbof, m.libPre'.MASK(DBAFDBOF)'
return
endProcedure maskIni
/*--- mask a whole scope --------------------------------------------*/
maskScope: procedure expose m.
parse arg mskDsn, fr, to
call maskRead masc, mskDsn
do fx=1 to m.fr.0
ty = m.fr.fx.type
m.to.fx.type = ty
if wordPos(ty, 'DB SG') > 0 then
m.to.fx.qual = ''
else if wordPos(ty, 'TS') > 0 then
m.to.fx.qual = maskTrans(masc, 'DBNAME', m.fr.fx.qual)
else
m.to.fx.qual = maskTrans(masc, 'SCHEMA', m.fr.fx.qual)
if wordPos(ty, 'DB') > 0 then
m.to.fx.name = maskTrans(masc, 'DBNAME', m.fr.fx.name)
else if wordPos(ty, 'TB VW AL') > 0 then
m.to.fx.name = maskTrans(masc, 'TBNAME', m.fr.fx.name)
else if wordPos(ty, 'SP') > 0 then
m.to.fx.name = maskTrans(masc, 'STPNAME', m.fr.fx.name)
else
m.to.fx.name = maskTrans(masc, ty'NAME', m.fr.fx.name)
end
m.to.0 = m.fr.0
return
endProcedure maskScope
/*--- mask test functions --------------------------------------------*/
testMask: procedure expose m.
call maskIni
call maskTT OWNER, GDB9998
call maskTT DBNAME, DGDB9998
call maskTT DBNAME, DGDB0287
call maskTT OWNER, GDB0301
call maskTT TSNAME, AGRFX12A2
call maskTT OWNER, SYS123EF
return 0
endProcedure testMask
maskTT: procedure expose m.
parse arg ty, na
say 'maskTrans(prot,' ty',' na') =' maskTrans(mask.prot, ty, na) ,
' -> DBOF' maskTrans(mask.dbof, ty, maskTrans(mask.prot,ty,na))
return
/*--- translate a prototype object to DBOF naming -------------------*/
mask2Prod: procedure expose m.
parse arg ty, na
return translate(strip(,
maskTrans(mask.dbof, ty, maskTrans(mask.prot,ty,na))))
/*--- translate an object of type ty and name na
by the masking file in st --------------------------------*/
maskTrans: procedure expose m.
parse arg st, ty, na
if symbol('m.mask.hier.ty') <> 'VAR' then
call err 'bad type' ty
types = m.mask.hier.ty
do sx=1 to m.st.0
if wordPos(m.st.sx.typ, types) < 1 then
iterate
if match(na, m.st.sx.in, vv) then
return matchTrans(m.st.sx.out, vv)
end
return na
endProcedure maskTrans
/*--- read and analyse the masking file dsn into stem st ------------*/
maskRead: procedure expose m.
parse arg st, dsn
maskIgno = 'COMPRESS SEGSIZE DEFER DEFINE PRIQTY SECQTY'
call readDsn dsn, i.
j = 0
do i=1 to i.0
parse var i.i t ':' s ',' d
t = strip(t)
if symbol('m.mask.hier.t') == 'VAR' then
nop
else if wordPos(t, maskIgno) > 0 then
iterate
else
call err 'bad typ' t 'in maskline' i':' i.i
j = j+1
m.st.j.typ = t
m.st.j.in = strip(s)
m.st.j.out = word(d, 1)
end
m.st.0 = j
return
drop typ in out
do wx=1 to m.st.0
say wx m.st.wx.typ':' m.st.wx.in'==>'m.st.wx.out'|'
end
endProcedure maskRead
/*--- initialise the type hierarchy of masking
as input use the msgLines of the mask editor --------------*/
maskHierarchy: procedure expose m.
/* copy der hierarch aus masking template */
call mAdd mCut('T', 0) ,
, 'COLNAME ' ,
, 'NAME ' ,
, ' DBNAME,TSNAME,TBNAME,IXNAME,UDFNAME, ' ,
, ' UDTNAME,COLLNAME,PKGNAME,PGMNAME,PLNNAME ' ,
, ' DBRMNAME,STPNAME,SFNAME,TGNAME,GRPNAME, ' ,
, ' VCATNAME,GBPNAME ' ,
, ' BPNAME ' ,
, ' TSBPNAME,IXBPNAME ' ,
, ' SGNAME ' ,
, ' TSSGNAME,IXSGNAME ' ,
, 'AUTHID ' ,
, ' SQLID,SCHEMA ' ,
, ' OWNER ' ,
, ' DBOWNER,TSOWNER,TBOWNER,IXOWNER ' ,
, ' GRANTID ' ,
, ' GRANTOR,GRANTEE '
qx = 0
lOff = -1
m.mask.hier = ''
do x=1 to m.t.0
of = verify(m.t.x, ' ', 'n')
li = translate(m.t.x, ' ', ',')
do while qx > 0 & word(q.qx, 1) >= of
qx = qx -1
end
px = qx - 1
if (qx = 0 | of > word(q.qx, 1)) & words(li) = 1 then do
px = qx
qx = qx + 1
if qx = 1 then
q.qx = of word(li, 1)
else
q.qx = of word(li, 1) subword(q.px, 2)
end
do wx=1 to words(li)
w1 = word(li, wx)
m.mask.hier = m.mask.hier w1
if wordPos(w1, subWord(q.qx, 2)) < 1 then
m.mask.hier.w1 = w1 subWord(q.qx, 2)
else
m.mask.hier.w1 = subWord(q.qx, 2)
end
end
return
endProcedure maskHierarchy
/*--- Funktion q: scope Zeilen pruefen -------------------------------*/
queryScope: procedure expose m.
parse arg subSys
subs2 = ''
rf = 1
isConn = 0
if adrEdit('(rl) = lineNum .zl', 4) = 4 then
rl = 0
if ^ m.editMacro then
call err 'q nicht als Macro'
if ^ m.editProc then do
if adrEdit('PROCESS RANGE Q', 0 4) = 0 then do
call adrEdit '(rf) = lineNum .zfrange'
call adrEdit '(rl) = lineNum .zlrange'
end
m.editProc = 1
end
do rx = rf by 1 while rx <= rl
call adrEdit '(li) = line' rx
parse value analyseScope(li) with ty nm qu
if ty = '?' then do
if nm <> '' then
say nm qu 'in line' rx':' strip(li)
if \ isConn & subsys == '' then do
parse upper var li w1 w2 .
if wordpos(w1, 'SOURCE TARGET') > 0 then do
if length(w2) = 4 | ( length(w2) = 8 ,
& pos(substr(w2,4,1), './') > 0) then
subs2 = translate(w2, '/', '.')
end
end
iterate
end
if \ isConn then do
isConn = 1
if subSys = '' then
subSys = if(subs2 == '', m.pr1Sub, subs2)
subsys = translate(subsys, '/', '.')
call sqlConnect subSys
subsys = translate(subsys, m.mAlfLC, m.mAlfUC)
end
call expandScope mCut(qq, 0), ty, qu, nm
do qx=1 to m.qq.0
neu = m.qq.qx
if length(neu subSys) < 70 then
neu = left(neu, 68 - length(subSys)) '*'subSys
else if length(neu subSys) < 80 then
neu = neu '*'subSys
liCm = if(qx=1, "line" rx, "line_after" (rx+qx-2))
if adrEdit(liCm "= (neu)", 4) = 4 then
say 'truncation line' rx':' neu
end
rx = rx + m.qq.0 - 1
rl = rl + m.qq.0 - 1
end
call sqlDisConnect
return 0
endProcedure queryScope
/*--- einen Scope Ausdruck expandieren -------------------------------*/
expandScope: procedure expose m.
parse arg o, ty, qu, nm
sql = ''
dec2s = "strip(case when abs(?) > 9223372036854775807",
"then char(real(?)) else char(bigint(?)) end)"
if ty = 'DB' then
sql = "select 'db', name, '' from sysibm.sysDatabase",
"where name" sqlClause(nm)
else if ty = 'TS' then
sql = "select 'ts', strip(dbName) || '.' || strip(tsName)," ,
"case when count(*) = 1 then 'tb '" ,
"else strip(char(count(*))) || ' tables||| '",
"end || min(strip(creator) ||'.'|| strip(name))",
"from sysibm.systables" ,
"where type = 'T' and dbName" sqlClause(qu),
"and tsName" sqlClause(nm),
"group by dbName, tsName"
else if ty = 'TB' | ty = 'VW' | ty = 'AL' then
sql = "select case when type = 'T' then 'tb'",
"when type = 'V' then 'vw'",
"when type = 'A' then 'al'",
"else '?' || type end,",
"strip(creator) || '.' || strip(name),",
"case when type = 'A' then 'for '",
"|| strip(location) || '.'" ,
"|| strip(tbCreator)||'.'||strip(tbName)",
"else 'ts ' || strip(dbName) ||'.'",
"|| strip(tsName)",
"end",
"from sysibm.systables" ,
"where type =" quote(left(ty, 1), "'"),
"and creator" sqlClause(qu),
"and name" sqlClause(nm)
else if ty = 'IX' then
sql = "select 'ix', strip(creator) || '.' || strip(name),",
"'tb ' || strip(tbCreator)||'.'||strip(tbName)",
'from sysibm.sysIndexes' ,
'where creator' sqlClause(qu),
'and name' sqlClause(nm)
else if ty = 'UDT' then
sql = "select 'udt', strip(schema) || '.' || strip(name),",
"'source ' || strip(sourceSchema)",
"|| '.' || strip(sourceType)",
"from sysibm.sysDataTypes",
'where schema' sqlClause(qu),
'and name' sqlClause(nm)
else if ty = 'UDF' | ty = 'SP' then
sql = "select case when routineType = 'F' then 'udf'",
"when routineType = 'P' then 'sp'",
"else '?' || routineType end, ",
"strip(schema) || '.' || strip(name),",
"'otp=' || origin || function_type" ,
"|| strip(char(parm_count))",
"|| ' spec=' || strip(specificName)",
"|| ' a=' || active || ' vers=' || version",
"from sysibm.sysRoutines",
'where routineType =' quote(right(ty, 1), "'"),
'and schema' sqlClause(qu) ,
'and name' sqlClause(nm)
else if ty = 'TG' then
sql = "select 'tg', strip(schema) || '.' || strip(name),",
"'teg ' || trigTime || trigEvent||granularity",
"|| ' tb ' || strip(tbOwner) || '.'",
"|| strip(tbName)",
"from sysibm.sysTriggers",
'where seqNo=1 and schema' sqlClause(qu),
'and name' sqlClause(nm)
else if ty = 'SQ' then
sql = "select 'sq', strip(schema) || '.' || strip(name),",
"'start ' ||" repAll(dec2s, "?", "start"),
"|| ': ' ||" repAll(dec2s, "?", "minValue"),
"|| '-' ||" repAll(dec2s, "?", "maxValue"),
"|| ' inc ' ||" repAll(dec2s, "?", "increment"),
"from sysibm.sysSequences",
"where seqType='S' and schema" sqlClause(qu),
"and name" sqlClause(nm)
else if ty = 'SY' then
sql = "select 'sy', strip(creator) || '.' || strip(name),",
"'for ' || strip(tbCreator) || '.'" ,
"||strip(tbName)",
"from sysibm.sysSynonyms",
"where creator" sqlClause(qu),
"and name" sqlClause(nm)
else do
call mAdd o, ty left(qu'.'nm, 30) '* query nicht implementiert'
return
end
call sqlQuery 1, sql 'order by 2', ,
, classNew('n* SQL u f FT v, f FN v, f FI v')
do cx=0 by 1 while sqlFetch(1, d)
call mAdd o, lefA(m.d.ft, 3) lefA(m.d.fn, 30) m.d.fi
end
call sqlClose 1
if cx = 0 then
call mAdd o, lefA(ty, 3) lefA(strip(qu)left('.', qu \== '') ,
|| strip(nm), 30) '* nicht gefunden'
return
endProcedure expandScope
/*--- return sql condition (= String oder like String) ---------------*/
sqlClause: procedure expose m.
parse arg val
val = translate(val, '%_', '*?')
if verify(val, '%_', 'm') > 0 then
return 'like' quote(val, "'")
else
return '=' quote(val, "'")
endProcedure sqlClause
lefA: procedure expose m.
parse arg s, len
if length(s) < len then
return left(s, len)
else
return s
endProcedure lefA
/*--- copy srcDdl und srcCat aus anderem rz --------------------------*/
receiveSource: procedure expose m.
parse arg rz
if rz = '' | rz = '*' | rz = m.myRz then
call err 'rs receiveSource mit ungueltigem rz' rz
call readAuftrag rz, m.auftrag.dataset, m.e.auftrag
call analyseAuftrag
if m.e.nachtrag = '?' then
call err 'keine Version in Auftrag' m.e.auftrag 'im' rz
nacMbr = left(m.e.auftrag, 7) || m.e.nachtrag
call csmCopy rz'/'m.libPre'.srcDdl('nacMbr')', m.libPre'.'rz'DDL'
call csmCopy rz'/'m.libPre'.srcCat('nacMbr')', m.libPre'.'rz'Cat'
call readAuftrag , m.auftrag.dataset, m.auftrag
call mAdd auftrag, addDateUs('receiveSource' rz,
m.libPre'.'rz'Cat('nacMbr')')
return
endProcedure receiveSource
/*--- copy wsl aus anderem rz ----------------------------------------*/
receiveWSL: procedure expose m.
parse arg rz
if rz = m.myRz then
rz = ''
call analyseAuftrag
sWsl = 'dsn.dba.clon.wsl('left(m.e.auftrag, 7)'Q)'
sIff = 'dsn.dba.'left(m.e.auftrag, 7)'Q.IFF'
if rz <> '' then do
call csmCopy rz'/'sWsl, sWsl
if adrCsm("dslist SYSTEM("rz") DSNMASK('"sIff"') SHORT", 4) = 0,
& stemSize = 1 then
call csmCopy rz'/'sIff, sIff
else
say 'iff existiert nicht im' rz
end
call cloneWsl '', m.e.auftrag, 1
call mAdd auftrag, addDateUs('receiveWSL' rz)
return
endProcedure receiveWSL
/*--- send wsl to the argument rz ------------------------------------*/
sendWSL: procedure expose m.
parse arg rz
if rz = m.myRz then
rz = ''
call analyseAuftrag
if m.versions = '' | m.compares <> '' then
call warn 'sendWSL ohne versions oder mit compares'
sWsl = 'dsn.dba.clon.wsl('left(m.e.auftrag, 7)'Q)'
sIff = 'dsn.dba.'left(m.e.auftrag, 7)'Q.IFF'
if sysDsn("'"sWsl"'") <> 'OK' then
call err 'source wsl fehlt:' sWsl sysDsn("'"sWsl"'")
if rz <> '' then do
call csmCopy sWsl, rz'/'sWsl
if sysDsn("'"sIff"'") <> 'OK' then
say 'iff existiert nicht' sIff sysDsn("'"sIff"'")
else
call csmCopy sIff, rz'/'sIff
end
call cloneWsl rz, m.e.auftrag, 1
call mAdd auftrag, addDateUs('sendWSL' rz)
return
endProcedure sendWSL
/*--- clone a wsl mbr in the rz sys,
if doRemove=1 remove old members first ---------------------*/
cloneWsl: procedure expose m.
parse arg sys, mbr, doRemove
/* copy multi clone jcl from target rz */
jcl = csmSysDsn(sys'/DSN.DBA.MULTI.CLONE'right(mbr, 1)'.JCL', 0)
CALL READdsn jcl, m.jj.
/* modify the jcl */
do jx=1 to m.jj.0
if word(m.jj.jx, 2) == '=' then do
if word(m.jj.jx, 1) = 'SRCWSLST' then
m.jj.jx = 'SRCWSLST =' left(mbr, 7)'Q'
else if word(m.jj.jx, 1) = 'CLNWSLST' then
m.jj.jx = 'CLNWSLST =' mbr
end
else if space(subword(m.jj.jx, 1, 2) ,1) ,
== '//DELMBRIF IF' then do
m.jj.jx = '//DELMBRIF IF RC =' (7 *(^doRemove)) 'THEN'
end
else if word(m.jj.jx, 1) == 'DELETE' then do
nm = word(m.jj.jx, 2)
cx = pos('(', nm)
if right(nm, 1) = ')' & cx > 0 then
m.jj.jx = ' DELETE' left(nm, cx)mbr')'
else
call err 'bad delete' jx m.jj.jx
end
end
call writeSub jj, sys, 1
return 0
endProcedure cloneWsl
warn:
say '*** warning:' arg(1)
return
endSubroutine warn
repAll: procedure expose m.
parse arg src, w, new
res = ''
cx = 1
do forever
nx = pos(w, src, cx)
if nx < 1 then
return res || substr(src, cx)
res = res || substr(src, cx, nx-cx) || new
cx = nx + length(w)
end
endProcedure repAll
/**** ca *************************************************************/
/*--- extract ddl from source system ---------------------------------*/
caDDl: procedure expose m.
parse arg o, scp, GlbChg
if m.sysRz = m.scp.rz then do
call caDD1 o, scp, GlbChg
end
else do
mbrN = mapGet(e, 'mbrNac')
mark = mbrN'@'time()
cf = mapExp(e, '${libPre}.SENDCF($mbrNac)')
sndIn = sendJob1(o, m.scp.rz, 'RECSRC',
, 'job -ddJob' m.timeout'//??' cf mark ,
, 'receive' mapExp(e, '${libPre}.caddl($mbrNac)'))
call caDD1 o, scp, GlbChg
call sendJob2 o, sndIn, cf mark
end
return
endProcedure caDDL
/*--- quickMigrate to create ddl -------------------------------------*/
caDD1: procedure expose m.
parse arg o, scp, GlbChg
call mapPut e, 'user', userid()
call mapExpAll e, o, skelStem('CCOM')
do sx=1 to m.scp.0
sn = scp'.'sx
if m.sn.type == 'DB' then
call caEx o, 'DATABASE' '=' m.sn.name, 'db'
else if m.sn.type == 'IX' then
call caEx o, 'INDEX' m.sn.qual m.sn.name, 'i'
else if m.sn.type == 'TS' then
call caEx o, 'TABLESPACE' m.sn.qual m.sn.name, 'ts'
else if m.sn.type == 'VW' then
call caEx o, 'VIEW' m.sn.qual m.sn.name, 'v'
else
call err 'implement type' m.sn.type 'for ca'
end
call mapExpAll e, o, skelStem('CCO2')
call caGlbChg o, glbChg
return
endProcedure caDD1
caGlbChg: procedure expose m.
parse arg o, gCh
if gCh == '' then
return
upper gCh
if symbol('m.glbChg.gCh.0') \== 'VAR' then do
glblDsn = m.libPre".caGlbChg("gCh")"
if sysDsn("'"glblDsn"'") \== 'OK' then
call err 'mask' gCh':' glblDsn sysDsn("'"glblDsn"'")
call readDsn glblDsn, 'M.GLBCHG.'gCh'.'
end
call mAddSt o, 'GLBCHG.'gCh
return
endProcedure caGlblChg
/*--- add explode options depending on object type -------------------*/
caEx: procedure expose m.
parse arg o, oLine, ty
call mAdd o, '' oLine
call caE1 o, ty, 'e TABLESPACE db'
call caE1 o, ty, 'e TABLE db ts'
call caE1 o, ty, 'e INDEX db ts t'
call caE1 o, ty, 'e VIEW db ts t v'
call caE1 o, ty, 'e SYNONYM db ts t v'
call caE1 o, ty, 'e TRIGGER db ts t v'
call caE1 o, ty, 'e MQTB_T db ts t v'
call caE1 o, ty, 'e MQTB_I db ts t v'
call caE1 o, ty, 'e MQTB_V db ts t v'
call caE1 o, ty, 'e MQTB_S db ts t v'
call caE1 o, ty, 'e MQVW_VW db ts t v'
call caE1 o, ty, 'e MQVW_I db ts t v'
call caE1 o, ty, 'e MQVW_V db ts t v'
call caE1 o, ty, 'e MQVW_S db ts t v'
call caE1 o, ty, 'i MQVW_VW i'
return
endProcedure caEx
caE1: procedure expose m.
parse arg o, ty, v1 v2 types
if v1 == 'e' then
e = 'EXPLODE'
else if v1 == 'i' then
e = 'IMPLODE'
else
call err 'bad explode' v1 'in caE1('o',' ty',' v1 v2 types')'
if wordPos(ty, types) > 0 then
call mAdd o, ' 'left(e, 11) v2
return
endProcedure caE1
/**** bmc ************************************************************/
/*--- src und trg profile erstellen ----------------------------------*/
bmcVars: procedure expose m.
m.e.profSrc = m.e.auftrag'_SRC'
m.e.profTrg = m.e.auftrag'_TRG'
m.e.profOwn = 'DBXAUFTR'
return
endProcedure bmcVars
bmcVarsProf: procedure expose m.
parse arg isImport
m.e.profChg = bmcMask2Prof(m.e.comMask)
if isImport then
m.e.profImp = bmcMask2Prof(m.e.impMask)
return
endProcedure bmcVarsProf
bmcMask2Prof: procedure expose m.
parse arg mask
m2 = translate(mapExp(e, mask))
return word(translate(m2, ' ', '.()'), 2)'.'dsnGetMbr(m2)
endProdecure bmcMask2Prof
/*--- src und trg profile erstellen ----------------------------------*/
bmcSrcTrg: procedure expose m.
parse arg oldSrc prof
if symbol('m.mask.hier') \== 'VAR' then
call maskHierarchy
if m.scopeSrc.rz \== m.sysRz | m.scopeTrg.rz \== m.sysRz then
call err 'bmc compare on other rz not implemented'
if m.scopeSrc.subsys \== m.scopeTrg.subsys then
call err 'bmc compare on different subsystems not implemented'
call configureSubsys m.scopeSrc.rz, m.scopeSrc.subsys
call bmcProfile m.e.profOwn, m.e.profSrc, 'SCOPESRC'
if m.optAuto then
call maskScope m.e.comMask, 'SCOPESRC', 'SCOPETRG'
call bmcProfile m.e.profOwn, m.e.profTrg, 'SCOPETRG'
return
endProcedure bmcSrcTrg
bmcProfile: procedure expose m.
parse arg ow, prof, scp
call sqlOConnect m.scp.subSys
call sqlExec "insert into bmcacma1.CM_BLPROFILE" ,
"(BLPOWNER, blpName, type, template)" ,
"values('"ow"', '"prof"', 'C', '"prof"####')", -803
call sqlExec "delete from bmcacma1.CM_SCOPE" ,
"where scOwner = '"ow"' and scName = '"prof"'", 100
do sx=1 to m.scp.0
sn = scp'.'sx
if m.sn.type = 'DB' then do
q1 = m.sn.name
q2 = ''
end
else do
q1 = m.sn.qual
q2 = m.sn.name
end
call sqlExec "insert into bmcacma1.CM_SCOPE" ,
"(SCOWNER, SCName, Type, ACTION,OBJECT,NAME_PART1,NAME_PART2",
",MIGDT, MIGTS, MIGTB, MIGCK, MIGFK, MIGIX, MIGVW, MIGAU",
",MIGSY, MIGAL, MIGRO, MIGTR, MIGUC, MIGAX",
")values('"ow"', '"prof"', 'B', 'I'" ,
", '"m.sn.type"', '"q1"', '"q2"'" ,
",'N' , 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'N'",
",'Y' , 'Y', '', 'Y', 'Y', 'Y')"
end
call sqlCommit
return
endProcedure bmcProfile
/* copy match begin ***************************************************/
/************************************* begin copy match ******/
/*--- wildCard matching with the following wildchars:
* 0-n chars
? 1 char
fill matched expressions instem st if st is non empty
return 1 if mask matches wert ----------------------------------*/
match: procedure expose m.
parse arg wert, mask, st
if st == '' then
return matchRO(wert, mask)
m.st.0 = -9
return matchSt(wert, mask, st, 0)
endProcedure match
/*--- return the fixed prefix of maskt -------------------------------*/
matchPref: procedure
arg mask, suff
ix = verify(mask, '*?', 'm')
if ix = 0 then
return mask
else
return left(mask, ix-1)suff
endProcedure matchPref
/*--- return true if mask matches wert -------------------------------*/
matchRO: procedure
arg wert, mask
ix = verify(mask, '*?', 'm')
if ix < 1 then return (mask == wert)
if length(wert) < ix-1 then return 0
if left(mask, ix-1) \== left(wert, ix-1) then return 0
if substr(mask, ix, 1) == '?' then do
if length(wert) < ix then return 0
return matchRO(substr(wert, ix+1), substr(mask, ix+1))
end
mask = substr(mask, ix+1) /* * 0 - n Chars */
do ex = 1+length(wert) to ix by -1
if matchRO(substr(wert, ex), mask) then return 1
end
return 0
endProcedure matchRO
/*--- wildCard matching: fill matched expressions instem st
return 1 if mask matches wert ----------------------------------*/
matchSt: procedure expose m.
parse arg wert, mask, st, sx
ix = verify(mask, '*?', 'm')
if ix < 1 then do
if mask \== wert then
return 0
m.st.0 = sx
return 1
end
if \ abbrev(wert, left(mask, ix-1)) then
return 0
reMa = substr(mask, ix+1)
sx = sx + 1
if substr(mask, ix, 1) == '?' then do /* ? 1 Character */
if length(wert) < ix then
return 0
m.st.sx = substr(wert, ix, 1)
return matchSt(substr(wert, ix+1), reMa, st, sx)
end
do lx = 1+length(wert) to ix by -1 /* greedy: from all to empty */
if matchSt(substr(wert, lx), reMa, st, sx) then do
m.st.sx = substr(wert, ix, lx-ix)
return 1
end
end
return 0
endProcedure matchSt
matchTrans: procedure expose m.
parse arg mask, st
r = ''
ox = 1
sx = 0
ix = verify(mask, '*?', 'm')
do sx=1 to m.st.0 while ix > 0
if sx > m.st.0 then
call err 'matchTrans('mask',' st') has only' ,
m.st.0 'variables'
r = r || substr(mask, ox, ix-ox)m.st.sx
ox = ix+1
ix = verify(mask, '*?', 'm', ox)
end
if ix > 0 then
call err 'matchTrans('mask',' st') has only' ,
m.st.0 'variables'
return r || substr(mask, ox)
endProcedure matchTrans
/* copy match end *****************************************************/
/* copy csm begin ******************************************************
interface to csm,
it is integrate with adrTso, eg. dsnAlloc , 'RZ3/..' uses csm
***********************************************************************/
adrCsm:
return adrTso('csmExec' arg(1), arg(2))
endProcedure adrCsm
csmCopy: procedure expose m.
parse arg csnFr, csnTo, ggRet
if dsnGetMbr(csnTo) \= '' ,
& dsnGetMbr(csnFr) <> dsnGetMbr(csnTo) then
call err 'member rename' csnFr 'to' csnTo
parse value csmSysDsn(csnFr) with sysFr '/' dsnFr
parse value csmSysDsn(csnTo) with sysTo '/' dsnTo
if sysFr = '*' & sysTo <> '*' then do
pdsTo = dsnSetMbr(dsnTo)
al = "SYSTEM("sysTo") DDNAME(COPYTo)",
"DATASET('"pdsTo"') DISP(SHR)"
alRes = dsnAlloc(systo'/'pdsTo, ,'COPYTO', '*')
if datatype(alRes, 'n') then do
/* wir müssen es selbst allozieren csmxUtil
vergisst management class ||||| */
say 'could not allocate' al
say 'trying to create'
rc = listDsi("'"dsnSetMbr(dsnFr)"' SMSINFO")
if rc = 0 then
mv = ''
else if rc = 4 & sysReason = 19 then do
mv = 'UNITCNT(30)'
say 'multi volume' mv
end
else if rc \= 0 then
call err 'listDsi rc' rc 'reason' sysReason,
sysMsgLvl1 sysMsgLvl2
al = left(al, length(al)-4)'CAT)'
if right(sysDsSms, 7) == 'LIBRARY' ,
| abbrev(sysDsSms, 'PDS') then
al = al 'DSNTYPE(LIBRARY)'
if sysUnits = 'TRACK' then
sysUnits = 'TRACKS'
al = al "DSORG("sysDSorg") MGMTCLAS("sysMgmtClass")",
"RECFM("sysREcFM") LRECL("SYSLRECL")",
"blksize("sysBLkSIZE")",
"SPACE("sysPrimary"," sysSeconds")" sysUnits mv
call adrCsm "allocate" al
end
call adrTso 'free dd(copyTo)'
end
c = "'COPY" sysFr"/''"dsnFr"'' TO" ,
sysTo"/''"dsnSetMbr(dsnTo)"'' REPLACE'"
return adrTso("exec 'CSM.RZ1.P0.EXEC(CSRXUTIL)'" c , ggRet)
return
endProcedure csmCopy
csmAlloc: procedure expose m.
parse arg dsn dd disp rest ':' nn, retRc
sys = ''
a2 = ''
parse value csmSysDsn(dsn) with sys '/' dsn
if disp = '' then
disp = 'shr'
al = "SYSTEM("sys") DDNAME("dd")"
if dsn <> '' then do
a2 = "DATASET('"dsnSetMbr(dsn)"')"
mbr = dsnGetMbr(dsn)
if mbr <> '' then
a2 = a2 'MEMBER('mbr')'
end
if abbrev(disp, 'SYSOUT(') then
a2 = a2 disp
else
a2 = a2 "DISP("disp")"
if retRc <> '' | nn = '' then do
alRc = adrCsm('allocate' al a2 rest, retRc)
if alRc <> 0 then
return alRc
return dd 'call adrTso "free dd('dd')";'
end
do retry=0 by 1
alRc = adrCsm('allocate' al a2 rest, '*')
if alRc = 0 then
return dd 'call adrTso "free dd('dd')";'
if retry > 0 | nn = '' | wordPos(disp, 'OLD SHR') < 1 then
return err('cmsAlloc rc' alRc 'for' al rest)
say 'csmAlloc rc' alRc 'for' al a2 rest '...trying to create'
nn = al 'disp(cat)' dsnCreateAtts(dsn, nn, 1)
call adrCsm 'allocate' nn
call adrTso 'free dd('dd')'
end
endProcedure csmAlloc
csmSysDsn: procedure expose m.
parse upper arg dsn, withStar
if pos('/', dsn) < 1 then
sys = '*'
else
parse var dsn sys '/' dsn
if sys <> '' & sys <> '*' & sys <> sysvar(sysnode) then
return sys'/'dsn
else if withStar == 0 then
return dsn
else
return '*/'dsn
endProcedure csmSysDsn
/* copy csm end********************************************************/
/* copy sqlO begin ***************************************************
sql interface mit o und j Anbindung
***********************************************************************/
sqlOini: procedure expose m.
if m.sqlO.ini == 1 then
return
call sqlIni
m.sqlO.ini = 1
m.sqlO.cursors = left('', 200)
call jIni
call classNew 'n SqlResultRdr u JRWO', 'm',
, "jReset m.m.cursor = arg; m.m.type = arg2;",
, "jOpen call sqlResultRdrOpen m, opt",
, "jClose call sqlClose m.m.cursor",
, "jReadO return sqlSelReadO(m)"
call classNew 'n SqlSel u JRWO', 'm',
, "jReset m.m.src = arg; m.m.type = arg2;",
, "jOpen call sqlSelOpen m, opt",
, "jClose call sqlSelClose m",
, "jReadO return sqlSelReadO(m)"
call classNew 'n SqlDRS u SqlSel', 'm',
, "jReset m.m.loc = arg; m.m.type = arg2;",
, "jOpen call sqlDRSOpen m, opt",
, "jClose call sqlSelClose m",
, "jReadO return sqlSelReadO(m)"
call classNew 'n SqlRxConnection u', 'm',
, "sqlQuery return sqlRxQuery(cx, src, retOk)",
, "sqlFetch return sqlRxFetch(cx, dst, retOk)",
, "sqlClose return sqlRxClose(cx, retOk)",
, "sqlUpdate return sqlRxUpdate(cx, src, retOk)",
, "sqlCall call err 'implement sqlRxCall"
call classNew 'n SqlRxStatement u', 'm',
, "sqlQuery return sqlRxQuery(m.cx.cursor, src, retOk)",
, "sqlFetch return sqlRxFetch(m.cx.cursor, dst, retOk)",
, "sqlClose return sqlRxClose(m.cx.cursor, retOk)",
, "sqlUpdate return sqlRxUpdate(m.cx.cursor, src, retOk)",
, "sqlCall call err 'implement sqlRxCall"
call classNew 'n SqlCsmConnection u', 'm',
, "sqlQuery return sqlCsmQuery(cx, src, retOk)",
, "sqlFetch return sqlCsmFetch(cx, dst)",
, "sqlClose return 0",
, "sqlUpdate call err 'implement sqlCsmUpdate'" ,
, "sqlCall call err 'implement sqlCsmCall'"
call classNew 'n SqlCsmStatement u', 'm',
, "sqlQuery return sqlCsmQuery(m.cx.cursor, src, retOk)",
, "sqlFetch return sqlCsmFetch(m.cx.cursor, dst)",
, "sqlClose return 0",
, "sqlUpdate call err 'implement sqlCsmUpdate'" ,
, "sqlCall call err 'implement sqlCsmCall'"
return 0
endProcedure sqlOini
/*--- execute a query from sql, with one resultset -------------------*/
sqlQuery: procedure expose m.
parse arg cx, src, retOk, m.sql.cx.type
if m.sql.cx.type \== '' then
m.sql.cx.type = class4Name(m.sql.cx.type)
if datatype(cx, 'n') then
interpret objMet(m.sql.connection, 'sqlQuery')
else
interpret objMet(cx, 'sqlQuery')
/*--- fetch next row to m.dst.* at end return false ------------------*/
sqlFetch: procedure expose m.
parse arg cx, dst, retOk
if datatype(cx, 'n') then
interpret objMet(m.sql.connection, 'sqlFetch')
else
interpret objMet(cx, 'sqlFetch')
/*--- close cursor 'c'cx ---------------------------------------------*/
sqlClose: procedure expose m.
parse arg cx, retOk
if datatype(cx, 'n') then
interpret objMet(m.sql.connection, 'sqlClose')
else
interpret objMet(cx, 'sqlClose')
return 0
/*-- execute an sql with no resultset, but possibly outParms ---------*/
sqlUpdate: procedure expose m.
parse arg cx, src, retOk
if cx == '' | datatype(cx, 'n') then
interpret objMet(m.sql.connection, 'sqlUpdate')
else
interpret objMet(cx, 'sqlUpdate')
return sqlCsmUpdate(cx, src, retOk)
/*-- execute an sql call with outParms and multiple resultSets -------*/
sqlCall: procedure expose m.
parse arg cx, src, retOk
if cx == '' | datatype(cx, 'n') then
interpret objMet(m.sql.connection, 'sqlCall')
else
interpret objMet(cx, 'sqlCall')
return sqlCsmUpdate(cx, src, retOk)
/*--- connect to the db2 subsystem sys -----------------------------*/
sqlOConnect: procedure expose m.
parse arg sys, retCon
call sqlOIni
return sqlConnect(sys, retCon)
endProcedure sqlOConnect
sqlSel: procedure expose m.
parse arg src, type
s = oNew('SqlSel', inp2str(src, '-sql'), type)
call pipeWriteAll s
return m.s.rowCount
endProcedure sqlSel
sqlStmtsOpt: procedure expose m.
parse arg src, opts
upper opts
sub = ''
o = ''
ggRet = ''
do wx=1 to words(opts)
w = word(opts, wx)
if abbrev(w, '-SQL') then
o = o'-sql'substr(w, 5)
else if w == '-O' | w == 'O' then
o = o'-o'
else if w = '*' | datatype(w, 'n') then
ggRet = ggRet w
else if length(w) == 4 then
sub = w
else
call err 'bad opt' w 'in opts' opts 'not -sql? -o or subsys'
end
call sqlOIni
if sub == '' then
call sqlOConnect
else if sub \== m.sql.connected then
call sqlConnect sub
return sqlStmts(src, strip(ggRet), strip(o))
endProcedure sqlStmtsOpt
/*** execute sql's in a stream (separated by ;)
opt: 'o' ==> write objects, otherwise fmtFTab
's' ==> spufi formatting (window 72) otherwise linebreak */
sqlStmts: procedure expose m.
parse arg src, ggRet, opt
dlm = ';'
isStr = oStrOrObj(src, m.j.in)
fLen = ''
if pos('sql', opt) > 0 then
fLen = word(substr(opt, pos('sql', opt)+3), 1)
if isStr then do
m.sqlStmts.rdr = ''
call sbSrc sqlStmts, ggStr
end
else do
fi = jOpen(o2File(ggObj), '<')
call jCatSqlReset sqlStmts, , fi, fLen
end
do forever
s1 = jCatSqlNext(sqlStmts, dlm)
if s1 = '' then
leave
w1 = translate(word(s1, 1))
if w1 == 'TERMINATOR' then do
dlm = strip(substr(m.s.val, 12))
if length(dlm) \== 1 then
call scanErr s, 'bad terminator' dlm 'in' strip(m.s.val)
iterate
end
call out sqlStmt(s1, ggRet, opt)
end
if \ isStr then
call jClose fi
return 0
endProcedure sqlStmts
sqlStmt: procedure expose m.
parse arg src, retOk, opt
cx = sqlGetCursor()
r1 = sqlExecute(cx, src, retOK)
res = 'sqlCode' r1
if wordPos(m.sql.cx.fun, 'DELETE INSERT UPDATE') > 0 then
res = res',' m.sql.cx.updateCount 'rows' ,
translate(fun, m.mAlfLC, m.mAlfUC)'d'
else if m.sql.cx.updateCount\=='' & m.sql.cx.updateCount\=0 then
res = res',' m.sql.cx.updateCount 'rows updated'
aa = strip(src)
if m.sql.cx.resultSet \== '' then do
rdr = sqlResultRdr(cx)
if pos('o', opt) > 0 then
call pipeWriteAll rdr
else
call fmtFTab sqlStmtFmt, rdr
res = m.rdr.rowCount 'rows fetched'
end
ll = 75 - length(res)
if length(aa) > ll then
aa = space(aa, 1)
if length(aa) > ll then
aa = left(aa, ll-3)'...'
call sqlFreeCursor cx
return res':' aa
endProceduire sqlStmt
removeSqlStmt: procedure expose m.
parse arg src, ggRet, opt
bx = verify(src, '( ')
if bx < 1 then
return ''
fun = translate(word(substr(src, bx), 1))
w2 = translate(word(substr(src, bx), 2))
res = ''
if fun == 'SELECT' | fun = 'WITH' then do
s = oNew('SqlSel', inp2str(src, '%S%+Q\s'))
if pos('o', opt) > 0 then
call pipeWriteAll s
else
call fmtFTab sqlStmtFmt, s
res = m.s.rowCount 'rows fetched'
end
else if fun = 'SET' & abbrev(w2, ':') then do
ex = pos('=', w2)
if ex > 2 then
var = strip(substr(w2, 2, ex-2))
else
var = strip(substr(w2, 2))
if var = '' then
var = 'varUnbekannt'
call sqlExec src, ggRet
res = 'sqlCode' sqlCode var'='value(var)
end
else if fun = 'SET' | (fun = 'DECLARE' & w2 = 'GLOBAL') then do
call sqlExImm src, ggRet
res = 'sqlCode' sqlCode
end
else if fun = 'CALL' then do
res = sqlStmtCall(src, ggRet, opt)
end
else do
if pos('-', ggRet) < 1 & fun = 'DROP' then
ggRet = -204 ggRet
call sqlExec src, ggRet
res = 'sqlCode' sqlCode
if wordPos(fun, 'DELETE INSERT UPDATE') > 0 THEN
res = res',' sqlErrd.3 'rows' ,
translate(fun, m.mAlfLC, m.mAlfUC)'d'
end
aa = strip(src)
ll = 75 - length(res)
if length(aa) > ll then
aa = space(aa, 1)
if length(aa) > ll then
aa = left(aa, ll-3)'...'
return res':' aa
endProcedure removeSqlStmt
sqlStmtCall: procedure expose m.
parse arg src, ggRet, opt
s = scanSrc(scanSqlReset(sqlstmtcall, ,0), src)
if \ scanSqlId(scanSkip(s)) | m.s.val \== 'CALL' then
call scanErr s, 'not a call'
if \ scanSqlQuId(scanSkip(s)) then
call scanErr s, 'qualified id missing after call'
loc = ''
if m.s.val.0 = 1 then
wh = 'name =' quote(m.s.val.1, "'")
else if m.s.val.0 = 2 then
wh = "schema = '"strip(m.s.val.1)"'" ,
"and name = '"strip(m.s.val.2)"'"
else if m.s.val.0 = 3 then do
loc = m.s.val.1
wh = "schema = '"strip(m.s.val.2)"'" ,
"and name = '"strip(m.s.val.3)"'"
end
else
call scanErr s, 'storedProcedureName' m.s.val ,
'has' m.s.val.0 'parts, should have 1, 2 or 3'
pn = m.s.val
da = sqlStmtCallDa(sqlStmtCall, loc, wh)
if \ scanLit(scanSkip(s), '(') then
call scanErr s, '( expected after call' pn
varChars = f
do ax=1
m.da.ax.varName = ''
isEmpty = 0
if scanLit(scanSkip(s), ':') then do
if \ scanVerify(scanSkip(s), m.mAlfDot) then
call scanErr s, 'variable expected after : in call' pn
m.da.ax.varName = m.s.tok
if m.da.ax.io == 'i' | m.da.ax.io == 'b' then
m.da.ax.sqlData = envGet(m.da.ax.varName)
end
else if scanString(s) then
m.da.ax.sqlData = m.s.val
else if scanVerify(s, ',):;', 'm') then
m.da.ax.sqlData = strip(m.s.tok)
else
isEmpty = 1
if scanLit(scanSkip(s), ')') then
leave
if \ scanLit(s, ',') then
call scanErr s, if(isEmpty, 'value, var, ') ,
|| "',' or ')' expected"
end
if ax \= m.da.sqlD then
if \ (ax=1 & m.da.sqlD = 0 & isEmpty) then
call scanErr s, 'call with' ax 'parms but' ,
pn 'needs' m.da.sqld
caCo = sqlExec('call' pn 'using descriptor :M.'da, 466)
call out '--- called' pn', sqlCode' caCo
do ax=1 to m.da.sqlD
call Out ' parm' ax m.da.ax.io m.da.ax.parmName,
|| if(m.da.ax.varName \== '',' $'m.da.ax.varName),
'=' m.da.ax.sqlData
if m.da.ax.varName \== '' then
call envPut m.da.ax.varName, m.da.ax.sqlData
end
if caCo = 466 then do
drop sqlDP
call sqlExec 'describe procedure :pn into :m.sqlDp'
if m.sqldp.sqlD < 1 then
call err 'bad sqldp sqlD='m.sqldp.sqlD 'for sqlCode' caCo
do dx=1 to m.sqldp.sqlD
call out ' dynamic result set' dx m.sqldp.dx.sqlName ,
'locator='m.sqldp.dx.sqlLocator
end
do dx=1 to m.sqldp.sqlD
drs = 'dynamic result set' dx'='m.sqldp.dx.sqlName 'of' pn
call out '--- begin of' drs
rdr = sqlDRS(m.sqldp.dx.sqlLocator)
if pos('o', opt) > 0 then
call pipeWriteAll rdr
else
call fmtFTab sqlStmtFmt, rdr
call out '---' m.rdr.rowCount 'rows fetched from' drs
end
end
return 'sqlCode' caCo
endProcedure sqlStmtCall
sqlStmtCallDa: procedure expose m.
parse arg da, loc, wh
cr = if(loc=='',,loc'.')'sysIbm'
sql = "select 'SCHEMA=''' || strip(schema) || ''''",
"|| ' and name=''' || strip(name ) || ''''",
"|| ' and specificName=''' || strip(specificName) || ''''",
"|| ' and routineType =''' || strip(routineType ) || ''''",
"|| ' and VERSION =''' || strip(VERSION ) || ''''",
"from" cr".SysRoutines ",
"where" wh "and active = 'Y'"
if sqlpreAllCl(49, sql, rou, ':m.rou') <> 1 then
call err m.rou.0 'routines found for' wh
rdr = jOpen(sqlRdr('select * from' cr'.sysParms where' m.rou,
'order by ordinal'), '<')
do ix=1 while assNN('A', jReadO(rdr))
if m.a.ordinal <> ix then
call err 'ix' ix 'mismatch ordinal' m.a.ordinal
ty = m.a.dataTypeId
m.da.ix.sqlType = ty
m.da.ix.sqlLen = m.a.length
m.da.ix.sqlLen.sqlPrecision = m.a.length
m.da.ix.sqlLen.sqlScale = m.a.scale
if wordPos(ty, 384 385) > 0 then /* date */
m.da.ix.sqlLen = 10
else if wordPos(ty, 388 389) > 0 then /* time */
m.da.ix.sqlLen = 8
else if wordPos(ty, 392 393) > 0 then /* timestamp */
m.da.ix.sqlLen = 26
m.da.ix.sqlData = ''
m.da.ix.parmName= m.a.parmName
m.da.ix.io = translate(m.a.rowType, 'iob', 'POB')
m.da.ix.sqlInd = 1
end
m.da.sqlD = ix - 1
return da
endProcedure sqlStmtCallDa
sqlResultRdr: procedure expose m.
parse arg cx, type
return oNew('SqlResultRdr', cx, type)
endProcedure sqlRdr
sqlRdr: procedure expose m.
parse arg src, type
return oNew('SqlSel', inp2str(src, '%S%+Q\s'), type)
endProcedure sqlRdr
sqlResultRdrOpen: procedure expose m.
parse arg m, opt
if opt\== m.j.cRead then
call err 'opt not' m.j.cRead 'sqlResultRdrOpen('m',' opt')'
m.m.jReading = 1
m.m.rowCount = 0
return m
endProcedure sqlResultRdrOpen
/*--- prepare and open cursor
generate type and fetchList ------------------------------------*/
sqlSelOpen: procedure expose m.
parse arg m, opt
m.m.cursor = sqlGetCursor()
call sqlQuery m.m.cursor, m.m.src, ,m.m.type /* ????? */
return sqlResultRdrOpen(m, opt)
endProcedure sqlOpen
/*--- dynamic result sets --------------------------------------------*/
sqlDRS: procedure expose m.
parse arg loc, type
return oNew('SqlDRS', loc, type)
endProcedure sqlDRS
sqlDRSOpen: procedure expose m.
parse arg m, opt
if opt\== m.j.cRead then
call err 'opt not' m.j.cRead 'sqlDRSOpen('m',' opt')'
crs = sqlGetCursor('a')
crN = 'C'crs
m.m.cursor = crs
call sqlexec 'allocate C'crs 'cursor for result set :m.m.loc'
call sqlExec('describe cursor :crN into :M.SQL.'crs'.D')
m.m.jReading = 1
m.m.rowCount = 0
return m
endProcedure sqlDRSOpen
/*--- return a free cursor -------------------------------------------*/
sqlGetCursor: procedure expose m.
parse arg rng
if rng == '' then
return sqlGetCursorRng(rng, 10, 49)
else if rng == 'h' then
return sqlGetCursorRng(rng, 60, 99)
else if rng == 'a' then
return sqlGetCursorRng(rng, 110, 199)
else
call err 'bad cursor range' rng
endProcedure sqlGetCursor
sqlGetCursorRng: procedure expose m.
parse arg rng, fr, to
cx = pos(' ', m.sqlO.cursors, fr)
if cx < fr & cx > to then
call err "no more '"rng"' cursors between" fr "and" to,
":"m.sqlO.cursors
m.sqlO.cursors = overlay('u', m.sqlO.cursors, cx)
return cx
endProcedure sqlGetCursorRNG
/*--- mark a cursor as closed ----------------------------------------*/
sqlFreeCursor: procedure expose m.
parse arg cx
if substr(m.sqlo.cursors, cx, 1) \== 'u' then
call err 'sqlFreeCursor('cx') not in use :'m.sqlo.cursors
m.sqlO.cursors = overlay(' ', m.sqlO.cursors, cx)
return
endProcedure sqlFreeCursor
/*--- create the type, fetch vars etc. from the sqlDA ---------------*/
sqlFetchClass: procedure expose m.
parse arg cx
if m.sql.cx.type = '' then do
ff = mCat('SQL.'cx'.COL', '%+Q v, f ')
m.sql.cx.type = classNew('n* SQL u f' ff 'v')
end
return m.sql.cx.type
endProcedure sqlFetchClass
/*--- fetch cursor for this sqlSel -----------------------------------*/
sqlSelReadO: procedure expose m.
parse arg m
cx = m.m.cursor
v = mNew(sqlFetchClass(cx))
if \ sqlFetch(cx, v) then
return ''
m.m.rowCount = m.m.rowCount + 1
return v
endProcedure sqlSelReadO
/*--- close sql Cursor -----------------------------------------------*/
sqlSelClose: procedure expose m.
parse arg m, v
call sqlClose m.m.cursor
call sqlFreeCursor m.m.cursor
m.m.cursor = ''
return m
endProcedure sqlSelClose
/*--- generate the format ff for a sql cx as specified in sp
use the information from the sqlDa -------------------------*/
deleteSqlGenFmt: procedure expose m.
parse arg ff, cx, sp
if abbrev(sp, '=') then
return substr(sp, 2)
if sp = '' then
sp = '*st'
m.ff.0 = m.sql.cx.d.sqlD
m.ff.flds = oFlds(sqlType(cx))
if abbrev(sp, '*') then do
do ix=1 to m.ff.0
m.ff.ix = substr(sp, 2)
end
return ff
end
if abbrev(fmts, '=') then
m.Sql.cx.FMT = substr(fmts, 2)
defs = 'ir7 fr9 sl12 Tl26' sp
do wx = 1 to words(defs)
parse value word(defs, wx) with ty 2 fo
select
when ty = 'd' then t.384 = fo
when ty = 'f' then t.480 = fo'/f'
when ty = 'i' then t.496 = fo'/i'
when ty = 'n' then t.484 = fo'/n'
when ty = 's' then t.448 = fo
when ty = 't' then t.388 = fo
when ty = 'T' then t.392 = fo
otherwise call err 'bad type' ty 'for format' fo
end
end
if symbol('t.496') == 'VAR' then
t.500 = t.496
if symbol('t.448') == 'VAR' then do
t.452 = t.448
t.456 = t.448
t.464 = t.448
end
do wx = 1 to m.ff.0
ty = m.sql.cx.d.wx.sqlType
le = m.sql.cx.d.wx.sqlLen
withNulls = ty // 2
ty = ty - withNulls
if symbol('t.ty') <> 'VAR' then
call err 'sqlType' ty 'not supported'
parse var t.ty fo 2 fl '/' op
if op = 'i' then
if le = 2 then le = 6
else le = 12
else if op <> '' then
call err 'length for sqlType' ty 'op' op 'not implemented'
if fl = '=' then
fl = le
else if abbrev(fl, '<') then
fl = min(le, substr(fl, 2))
m.ff.wx = fo || fl
end
return ff
endProcedure sqlGenFmt
/* copy sqlO end **************************************************/
/* copy sqlCsm begin **************************************************/
/*--- send an sql to csm an handle sqlCode ---------------------------*/
sqlCsmExe:
parse arg cx, ggSqlStmt, ggRetOk
sql_HOST = m.sql.conHost
SQL_DB2SSID = m.sql.conSSID
sql_query = ggSqlStmt
address tso "CSMAPPC START PGM(CSMASQL)"
if \ (rc = 0 | rc = 4) then
call err 'csmappc rc' rc
if sqlCode = 0 then
return 0
else if pos('*', ggRetOk) > 0 | wordPos(sqlCode, ggRetOk) > 0 ,
then do
if sqlCode < 0 & pos('say', ggRetOk) > 0 then
call errSay sqlmsg(sqlCA2Rx(sqlCa))
return sqlCode
end
else if sqlCode < 0 then
call err sqlmsg(sqlCA2rx(sqlCa))
else if pos('w', ggRetOk) < 1 then
if sqlCode = 100 then
call errSay 'sqlCode +100 row not found\nstmt =' ggSqlStmt
else
call errSay sqlMsg(sqlCA2rx(sqlCa)), ,'w'
return sqlCode
endProcedure sqlCsmExe
/*--- execute a query from sql, with one resultset -------------------*/
sqlCsmQuery: procedure expose m.
parse arg cx, sqlSrc, retOk, src
res = sqlCsmExe(cx, sqlSrc, 100 retOk)
if res < 0 then
return res
f = m.sql.cx.type
if src == '' then
src = 'SQL.'cx'.DATA'
m.sql.cx.data = src
if f \== '' then do
f = f'.FLDS'
if m.f.0 < sqlD then
call err 'not enough fields in type'
end
do kx=1 to sqlD
rxNa = SQLDA_REXXNAME.kx
cn = sqlVarName(f, kx, sqlDa_name.kx)
m.sql.cx.col.kx = cn
do rx=1 to sqlRow#
if substr(sqlIndicator.rx, kx ,1) == 'ff'x then
m.src.rx.cn = m.sqlNull
else
m.src.rx.cn = value(rxNa'.'rx)
end
end
m.src.0 = sqlRow#
m.sql.cx.col.0 = sqlD
m.sql.cx.daIx = 0
return 0
endProcedure sqlCsmQuery
sqlCsmFetch: procedure expose m.
parse arg cx, dst
src = m.sql.cx.data
rx = m.sql.cx.daIx + 1
if rx > m.sql.cx.data.0 then
return 0
m.sql.cx.daIx = rx
do kx = 1 to m.sql.cx.col.0
c = m.sql.cx.col.kx
m.dst.c = m.src.rx.c
end
return 1
endProcedure sqlCsmFetch
/* copy sqlCsm end **************************************************/
/* copy sql begin ***************************************************
sql interface
***********************************************************************/
/*--- initialize sqlRx (belongs to sqlQ, but currently only one|) ----*/
sqlIni: procedure expose m.
if m.sql.ini == 1 then
return
m.sqlNull = '---'
m.sqlInd = 'sqlInd'
m.sqlRetOK.0 = 0
m.sqlCAMsg = 0
m.sqlSuMsg = 2
call sqlPushRetOk
m.sql.ini = 1
m.sql.conType = ''
return 0
endProcedure sqlIni
/*--- connect and/or disconnect to DB2 -------------------------------*/
sqlConnect: procedure expose m.
parse upper arg sys, retOk
if sys \== '' then
nop
else if sysvar(sysnode) == 'RZ1' then
sys = 'DBAF'
else
call err 'no default subsys for' sysvar(sysnode)
call sqlOIni
hst = ''
if pos('/', sys) > 0 then do
parse value space(sys, 0) with hst '/' sys
cTy = 'Csm'
end
else do
cTy = 'Rx'
end
if m.sql.conType == cTy & m.sqlHost==hst & m.sqlConSSID == sys then
return 0
if m.sql.conType \== '' then
call sqlDisconnect
res = 0
if cTy = 'Rx' then
res = sqlRxConnect(sys, retOk)
if res < 0 then
return res
m.sql.conType = cTy
m.sql.conhost = hst
m.sql.conSSID = sys
m.sql.connection = oNew('Sql'cTy'Connection')
return res
endProcedure sqlConnect
sqlDisconnect: procedure expose m.
parse arg retOk
if m.sql.conType == 'Rx' then
call sqlRxDisconnect
m.sql.conType = ''
m.sql.conhost = ''
m.sql.conSSID = ''
return 0
endProcedure sqlDisonnect
/*--- execute a query from sql, with one resultset -------------------*/
sqlRxQuery: procedure expose m.
parse arg cx, src, retOk
m.sql.cx.updateCount = ''
m.sql.cx.resultSet = ''
m.sql.cx.needDesc = 1
res = sqlPrepare(cx, src, retOk, 1)
if res < 0 then
return res
res = sqlExec('declare c'cx 'cursor for s'cx, retOk)
if res < 0 then
return res
res = sqlExec('open c'cx, retOk)
if res < 0 then
return res
call sqlRxFetchVars cx
m.sql.cx.updateCount = sqlErrd.3
m.sql.cx.resultSet = cx
return res
endProcedure sqlRxQuery
/*--- fetch next row to m.dst.* at end return false ------------------*/
sqlRxFetch: procedure expose m.
parse arg cx, dst, retOk
if retOk == '' then
retOk = 100 m.sqlRetOk
fetCode = sqlExec('fetch c'cx 'into' sqlRxFetchVars(cx), retOk)
if fetCode == 100 then
return 0
if fetCode < 0 then
return fetCode
call sqlSetNull cx, dst
return 1
endProcedure sqlRxFetch
/*--- close cursor 'c'cx ---------------------------------------------*/
sqlRxClose: procedure expose m.
parse arg cx, retOk
return sqlExec('close c'cx, retOk)
endProcedure sqlRxClose
/*-- execute an sql with no resultset, but possibly outParms ---------*/
sqlRxUpdate: procedure expose m.
parse arg cx, src, retOk
m.sql.cx.updateCount = ''
m.sql.cx.resultSet = ''
bx = verify(src, '( ')
if bx > 0 then
fun = translate(word(substr(src, bx), 1))
if fun = 'SET' then do
w2 = translate(word(substr(src, bx), 2))
if \ abbrev(w2, ':') then
return sqlExImm(src, ggRet)
trace ?r
ex = pos('=', w2)
if ex = 0 then
ex = length(w2)+1
var = strip(substr(w2, 2, ex-2))
if var = '' then
call err 'bad hostVar in' src
m.sql.outVar = var
src2 = 'set :M.sql.out.'var substr(w, ex) subword(src, 3)
return sqlExec(src2, ggRet)
end
if fun == 'DECLARE' then do
if 'GLOBAL' == translate(word(substr(src, bx), 2)) then
return sqlExImm(src, ggRet)
end
res = sqlExec(src, ggRet)
if wordPos(fun, 'DELETE INSERT UPDATE') > 0 then
m.sql.cx.updateCount = sqlErrd.3
return res
endProcedure sqlRxUpdate
/*-- execute a query, update or call ---------------------------------*/
sqlExecute: procedure expose m.
parse arg cx, src, retOk
src = inp2Str(src, '-sql')
f = translate(word(substr(src, max(verify(src, '( '), 1)), 1))
m.sql.cx.fun = f
if f == 'SELECT' | fun == 'WITH' then
return sqlQuery(cx, src, retOk)
else if f == 'CALL' then
call err 'implement sql call for:' src
else
return sqlUpdate(cx, src, retOk)
endProcedure sqlExecute
/*-- execute a query, copy result to stem ----------------------------*/
sql2St: procedure expose m.
parse arg src, dst, retOk, type
cx = sqlGetCursor()
res = sqlQuery(cx, src, retOk, type)
if res >= 0 then do
do sx=1 while sqlFetch(cx, dst'.'sx)
end
res = sx-1
end
m.dst.0 = res
call sqlClose cx
call sqlFreeCursor cx
return res
endProcedure sql2St
/*-- execute a query and return value of the first column
if > 1 row fail, if 0 rows return arg(3) or fail ----------*/
sql2One: procedure expose m.
parse arg src, dst
cx = sqlGetCursor()
call sqlQuery cx, src
if \ sqlFetch(cx, dst) then
if arg() > 2 then
return arg(3)
else
call err 'no row returned for:' src
if sqlFetch(cx, dst.2) then
call err '2 or more rows for' src
c1 = m.sql.cx.col.1
res = m.dst.c1
call sqlClose cx
call sqlFreeCursor cx
return res
endProcedure sql2One
/*--- prepare statement 's'cx from sql src into descriptor desc ------*/
sqlPrepare: procedure expose m.
parse arg cx, src, ggRetOk, descOut
s = ''
src = inp2str(src, '%+Q\s')
m.sql.cx.d.sqlD = 'noSqlDA'
m.sql.cx.i.sqlD = 'noDescInp'
m.sql.cx.fetchVars = ''
m.sql.cx.col.0 = ''
m.sql.cx.into = ''
if descOut == 1 then
s = 'into :M.SQL.'cx'.D'
return sqlExec('prepare s'cx s 'from :src', ggRetOk)
endProcedure sqlPrepare
/*--- open cursor 'c'cx using arguments arg(2), arg(3)... ------------*/
sqlOpen: procedure expose m.
parse arg cx
if arg() <= 1 then
return sqlExec('open c'cx)
call sqlDescribeInput cx
do ix=1 to arg()-1
call sqlDASet cx , 'I', ix, arg(ix+1)
end
return sqlExec('open c'cx 'using descriptor :M.SQL.'cx'.I')
endProcedure sqlOpen
/*--- describe output (if not already done)
and return size of sqlDa ------------------------------------*/
sqlDescribeOutput: procedure expose m.
parse arg cx, force
if force == 1 | \ datatype(m.sql.cx.d.sqlD, 'n') then
call sqlExec 'describe s'cx 'into :M.SQL.'cx'.D', 0
return m.sql.cx.d.sqlD
endProcedure sqlDescribeOutput
/*--- describe input (if not already done)
and return size of input sqlDA ------------------------------*/
sqlDescribeInput: procedure expose m.
parse arg cx, force
if force == 1 | \ datatype(m.sql.cx.i.sqlD, 'n') then
call sqlExec 'describe input s'cx 'into :M.SQL.'cx'.I'
return m.sql.cx.i.sqlD
endProcedure sqlDescribeInput
/*--- put sqlNull in all vars where indicator says so ---------------*/
sqlSetNull: procedure expose m.
parse arg cx, dst
do nx=1 to m.sql.cx.sqlNull.0
col = m.sql.cx.sqlNull.nx
if m.dst.col.sqlInd < 0 then
m.dst.col = m.sqlNull
end
return
endProcedure sqlSetNull
/*--- use describe output to generate column names,
fetchVariables and sqlNull names ---------------------*/
sqlRxFetchVars: procedure expose m.
parse arg cx
if m.sql.cx.fetchVars \== '' then
return m.sql.cx.fetchVars
call sqlDescribeOutput cx
f = m.sql.cx.type
if f \== '' then do
f = f'.FLDS'
if m.f.0 < m.sql.cx.d.sqlD then
call err 'not enough column names'
end
m.sql.cx.col.0 = m.sql.cx.d.sqlD
nx = 0
vars = ''
do kx=1 to m.sql.cx.d.sqlD
cn = sqlVarName(f, kx, m.sql.cx.d.kx.sqlName)
m.sql.cx.col.kx = cn
vars = vars', :m.dst.'cn
if m.sql.cx.d.kx.sqlType // 2 = 1 then do
vars = vars' :m.dst.'cn'.sqlInd'
nx = nx + 1
m.sql.cx.sqlNull.nx = cn
end
end
m.sql.cx.sqlNull.0 = nx
m.sql.cx.fetchVars = substr(vars, 3)
return m.sql.cx.fetchVars
endProcedure sqlRxFetchVars
sqlVarName: procedure expose m. sqlVarName.
parse arg f, kx, sNa
if f == '' then do
cn = translate(word(sNa, 1))
if cn == '' | symbol('sqlVarName.cn') == 'VAR' then
cn = 'COL'kx
sqlVarName.cn = 1
return cn
end
else do
if m.f.kx == '' then
call err 'implement empty varName'
return substr(m.f.kx, 2)
end
endProcedure sqlVarName
/*--- set one value in a DA, handle nulls ----------------------------*/
sqlDASet: procedure expose m.
parse arg cx, da, ix, val
m.sql.cx.da.ix.sqlData = val
m.sql.cx.da.ix.sqlInd = - (val == m.sqlNull)
/* data types schienen einmal nicht zu funktionieren .......
if wordPos(m.da.ix.sqlType, '384 385 388 389 392 393') > 0 then
m.da.ix.sqlType = 448 + (m.da.ix.sqlType // 2) */
return
endProcedure sqlDASet
sqlExImm:
parse arg ggSrc, ggRetOk
return sqlExec('execute immediate :ggSrc', ggRetOk)
endProcedure sqlExImm
sqlCommit: procedure expose m.
parse arg src
return sqlExec('commit')
endProcedure sqlCommit
/*--- execute sql thru the dsnRexx interface -------------------------*/
sqlExec: /* no procedure, to keep variables sql... */
parse arg ggSqlStmt, ggRetOk
address dsnRexx 'execSql' ggSqlStmt
/* say 'sqlCode' sqlCode 'rc' rc 'for' ggSqlStmt ggNo */
sqlHandleRCSqlCode:
if rc = 0 then
return 0
if ggRetOk = '' then
ggRetOk = m.sqlRetOk
if wordPos(rc, '1 -1') < 0 then
call err 'dsnRexx rc' rc sqlmsg()
else if pos('*', ggRetOk) > 0 | wordPos(sqlCode, ggRetOk) > 0 ,
then do
if sqlCode < 0 & pos('say', ggRetOk) > 0 then
say 'sqlError' sqlmsg()
return sqlCode
end
else if rc < 0 then
call err sqlmsg()
/*???lse if sqlCode <> 0 | (pos('w',ggRetOk)<1 & sqlWarn.0^==' ') then*/
else if (sqlCode <> 0 | sqlWarn.0^==' ') & pos('w',ggRetOk)<1 then
call errSay sqlMsg(), ,'w'
return sqlCode
endSubroutine sqlExec
/*--- connect to the db2 subsystem sys -----------------------------*/
sqlRxConnect: procedure expose m.
parse upper arg sys, ggRetOk
call sqlIni
address tso "SUBCOM DSNREXX"
if rc <> 0 then do
sRc = RXSUBCOM('ADD','DSNREXX','DSNREXX') /* ADD HOST CMD ENV */
if sRc <> 0 then
call err 'rc' sRc 'from RXSUBCOM(ADD, DSNREXX, DSNREXX)'
end
if sys = '-' then
return 0
ggSqlStmt = 'connect' sys
address dsnRexx ggSqlStmt
return sqlHandleRcSqlCode()
endProcedure sqlRxConnect
/*--- diconnect from db2 ---------------------------------------------*/
sqlRxDisconnect: procedure expose m.
parse arg retOk
ggSqlStmt = 'disconnect'
address dsnRexx ggSqlStmt
return sqlHandleRcSqlCode()
endProcedure sqlDisconnect
/*--- send a command to db2 through the TSO dsn processor ------------*/
sqlDsn: procedure expose m.
parse arg st, sys, cmd, rcOk
x = outtrap('M.'st'.')
push 'END'
push cmd
address tso 'DSN SYSTEM('sys')'
rr = rc
x = outtrap(off)
if rr = 0 | rcOk = '*' | wordPos(rr, rcOk) > 0 then
return rr
fl = max(1, m.st.0 - 10)
em = 'rc' rr 'for DSN SYSTEM('sys') cmd' cmd,
'\nOuputlines' fl '-' m.st.0':'
do lx=fl to m.st.0
em = em '\n' strip(m.st.lx, 't')
end
call err em
endProcedure sqlDsn
/*--- push and pop currently accepted sqlCodes -----------------------*/
sqlPushRetOk: procedure expose m.
parse arg rr
nx = m.sqlRetOk.0 + 1
m.sqlRetOk.0 = nx
m.sqlRetOk.nx = rr
m.sqlRetOk = rr
return
endProcedure sqlPushRetOk
sqlPopRetOk: procedure expose m.
nx = m.sqlRetOk.0 - 1
if nx < 1 then
call err 'sqlPopRetOk with .0' m.sqlRetOk.0
m.sqlRetOk = m.sqlRetOk.nx
m.sqlRetOk.0 = nx
return
endProcedure sqlPopRetOk
/*--- issue an sql error message -------------------------------------*/
sqlMsg: /* no procedure, to keep variables sql... */
if \ dataType(sqlCode, 'n') then do
ggRes = 'sqlCode' sqlCode 'not numeric\n'sqlCaMsg()
end
else do
ggRes = sqlDsntiar(sqlRx2CA())
ggWa = sqlMsgWarn()
if ggWa \= '' then
ggRes = ggRes'\nwarnings' ggWa
if m.sqlCAMsg == 1 then
ggRes = ggRes'\n'sqlCaMsg()'\n'sqlCaMsg(sqlCa2Rx(sqlCa))
end
ggSt = 'SQL.HOST'
ggVa = 'SQL.HOST.VAR'
ggBe = 'SQL.HOST.BEF'
call sqlHostVars ggSqlStmt, 12, ggSt
if datatype(sqlErrd.5, 'n') & sqlErrd.5 > 0 then do
ggW1 = translate(word(ggSqlStmt, 1))
ggW2 = translate(word(ggSqlStmt, 2))
if ggW1 == 'PREPARE' then
ggVV = sqlHostVarFind(ggSt, 'FROM')
else if ggW1 ggW2 == 'EXECUTE IMMEDIATE' then
ggVV = sqlHostVarFind(ggSt, 1)
else
ggVV = ''
if ggVV == '' then
ggRes = ggRes || sqlMsgSrcPos(ggSqlStmt, sqlErrd.5)
else
ggRes = ggRes || sqlMsgSrcPos(value(ggVV), sqlErrd.5)
end
ggRes = ggRes'\nstmt =' ggSqlStmt
ggPref = '\nwith'
do ggXX=1 to m.ggSt.0
ggRes = ggRes || ggPref m.ggBe.ggXX ':'m.ggVa.ggXX ,
'=' value(m.ggVa.ggXX)
ggPref = '\n '
end
if m.sqlSuMsg == 1 | (m.sqlSuMsg == 2 & m.sql.conHost \== '') then
ggRes = ggRes'\nsubsys =' ,
if(m.sql.conHost=='',,m.sql.conHost'/'),
|| m.sql.conSSID', interfaceType' m.sql.conType
return ggRes
endSubroutine sqlMsg
/*--- use dsnTiar to translate sql Info to error text ----------------*/
sqlDsnTiar: procedure expose m.
parse arg ca
if -438 = sqlCa2Rx(ca) then
return '\nSQLCODE = -438:',
'APPLICATION RAISED ERROR WITH sqlState' sqlState ,
'and DIAGNOSTIC TEXT:' sqlErrMc
liLe = 78
msLe = liLe * 10
msg = d2c(msLe,2) || left('', msLe)
len = d2c(liLe, 4)
ADDRESS LINKPGM "DSNTIAR ca msg len"
if rc <> 0 then
call err 'linkPgm dsnTiar rc' rc 'sqlCa' ca
res = strip(substr(msg, 13, liLe-10))
cx = pos(', ERROR: ', res)
if cx > 0 then
res = left(res, cx-1)':' strip(substr(res, cx+9))
do c=3+liLe by liLe to msLe while substr(msg, c, 10) = ''
res = res'\n 'strip(substr(msg, c+10, liLe-10))
end
return res
endProcedure sqlDsnTiar
/*--- format all rexx sqlCa fields into a message --------------------*/
sqlCaMsg:
return 'sqlCode' sqlCode 'sqlState='sqlState ,
'\n errMC='translate(sqlErrMc, ',', 'ff'x) ,
'\n warnings='sqlWarnCat('+') 'erP='sqlErrP ,
'\n errD.1='sqlErrD.1 '2='sqlErrD.2 '3='sqlErrD.3 ,
'\n errD.4='sqlErrD.4 '5='sqlErrD.5 '6='sqlErrD.6
endProcedure sqlCaMsg
/*--- format the sqlCA into the dsnTiar SQLCA ------------------------*/
sqlRx2Ca:
if \ (datatype(sqlcode, 'n') & datatype(sqlErrD.1, 'n') ,
& datatype(sqlErrD.3, 'n')) then
return err('sqlCode etc. not numeric\nsqlCa =' sqlCaMsg())
if digits() < 10 then
numeric digits 10
sqlCa = 'SQLCA ' || d2c(136, 4) || d2c(sqlCode, 4) ,
|| d2c(min(70, length(sqlErrMc)), 2)left(sqlErrMc, 70) ,
|| left(sqlErrP, 8) ,
|| d2c(sqlErrD.1, 4)d2c(sqlErrD.2, 4)d2c(sqlErrD.3, 4) ,
|| d2c(sqlErrD.4, 4)d2c(sqlErrD.5, 4)d2c(sqlErrD.6, 4) ,
|| sqlWarnCat() || sqlState
if length(sqlCa) <> 136 then
call err 'sqlCa length' length(sqlCa) 'not 136' ,
'\n'sqlCaMsg() '==>' ca', hex='c2x(ca)
return sqlCa
endProcedure sqlRx2Ca
/*--- extract the fields from the SqlCA and put it to rexx vars ------*/
sqlCA2Rx: procedure expose m. ,
sqlCode sqlErrMc sqlErrP sqlErrD. sqlWarn. sqlState
parse arg ca
numeric digits 10
if length(ca) < 136 | c2d(substr(ca, 9, 4), 4) <> 136 then
call err 'bad sqlCa len' length(ca) 'not 136:' ca', hex='c2x(ca)
sqlCode = c2d(substr(ca, 13 ,4), 4)
sqlErrMC = substr(ca, 19, c2d(substr(ca, 17, 2), 2))
sqlErrP = substr(ca, 89, 8)
do ix=1 to 6
sqlErrD.ix = c2d(substr(ca, 93 + 4 * ix, 4), 4)
end
do ix=0 to 10
sqlWarn.ix = substr(ca, 121 + ix, 1)
end
sqlState = substr(ca, 132, 5)
return sqlCode
endProcedure sqlCA2Rx
/*--- concat the sql warnings with Separator sep --------------------*/
sqlWarnCat: procedure expose m. sqlWarn.
parse arg sep
return sqlWarn.0 || sep,
|| sqlWarn.1||sqlWarn.2||sqlWarn.3||sqlWarn.4||sqlWarn.5||sep ,
|| sqlWarn.6||sqlWarn.7||sqlWarn.8||sqlWarn.9||sqlWarn.10||sep
endProcedure sqlWarnCat
/*--- make the text for sqlWarnings ----------------------------------*/
sqlMsgWarn: procedure expose m. sqlWarn.
r = ''
text =' 1=W var truncated, 1=S scrollable, 1=N nonScrollable,' ,
'2=W nulls in aggregate,' ,
'3=W more cols than vars,' ,
'3=Z more result sets than locators,' ,
'4=W no where, 4=D sensitive dynamic, 4=I insensitive,' ,
'4=S sensitive static,' ,
'5=W not valid sql, 5=1 readOnly, 5=2 readDelete,' ,
'5=3 readDeleteUpdate,' ,
'6=W day changed to month range,' ,
'7=W dec digits truncated,' ,
'8=W char substituted,' ,
'9=W arith excep in count, 9=Z multipe result sets,' ,
'10=W char conversion err in ca,'
do wx = 1 to 10
w = sqlWarn.wx
if w = ' ' then
iterate
t = wx'='w
cx = pos(' 'wx'='w' ', text)
ex = pos(',' , text, cx + 1)
if cx > 0 & ex > cx then
r = r substr(text, cx+1, ex-cx)
else
r = r wx'='w '?,'
end
r = strip(r, 't', ',')
if r = '' & sqlwarn.0 <> '' then
call err 'sqlWarn.0='sqlWarn.0 'but all warns empty'
return r
endProcedure sqlMsgWarn
/*--- show in the source src the point pos (where error occured)
a few lines from src around pos and arrow to pos ----------*/
sqlMsgSrcPos: procedure expose m.
parse arg src, pos
liLe = 68
liCn = 3
afLe = 25
t1 = space(left(src, pos), 1)
t2 = left(' ', substr(src, pos, 1) == ' ' ,
| substr(src, pos+1, 1) == ' ') ,
|| space(substr(src, pos+1), 1)
afLe = min(afLe, length(t2))
if length(t1) + afLe > liLe * liCn then
t1 = '...'right(t1, liLe * liCn - afLe -3)
else if length(t1)+length(t2) > liLe then
t1 = left(' ', (liCn * liLe - length(t1) -afLe) // liLe)||t1
pL = length(t1) // liLe
if length(t2) <= liLe-pL then
tx = t1 || t2
else
tx = t1 || left(t2, liLe-pL-3)'...'
res = '\nsrc' strip(substr(tx, 1, liLe), 't')
do cx=1+liLe by liLe to length(tx)
res = res || '\n +' strip(substr(tx, cx, liLe), 't')
end
loc = 'pos' pos 'of' length(src)
if length(loc)+6 < pL then
return res'\n >' right('>>>'loc'>>>', pL)
else
return res'\n >' left('', pL-1)'<<<'loc'<<<'
endProcdedure sqlMsgSrcPos
/*--- get the hostVars in the sql in src and the word before ---------*/
sqlHostVars: procedure expose m.
parse arg src, cnt, st
cx = 1
sx = 0
do cnt
cx = pos(':', src, cx) + 1
if cx < 2 then
leave
if pos(substr(src, cx, 1), m.mAlfRex1) < 1 then
iterate
ex = verify(src, m.mAlfRexR, 'n', cx)
if ex - cx > 100 then
iterate
sx = sx + 1
if ex < 1 then
m.st.var.sx = substr(src, cx)
else
m.st.var.sx = substr(src, cx, ex - cx)
/* search word before */
do bE = cx-2 by -1 to 1 ,
while substr(src, bE, 1) == ' '
end
do bB = bE by -1 to max(1, bE-20),
while pos(substr(src, bB, 1), m.mAlfa) > 0
end
if bB < bE & bB >= 0 then
m.st.bef.sx = substr(src, bB+1, bE-bB)
else
m.st.bef.sx = ''
end
m.st.0 = sx
return sx
endProcedure sqlHostVars
/*--- find the name of hostvar, by index or by before ----------------*/
sqlHostVarFind: procedure expose m.
parse arg st, fnd
if datatype(fnd, 'n') & fnd <= m.st.0 then
return m.st.var.fnd
do ix=1 to m.st.0
if translate(m.st.bef.ix) = fnd then
return m.st.var.ix
end
return ''
endSubroutine sqlHostVarFind
/* copy sql end **************************************************/
/* copy j begin *******************************************************
the j framework
jReset
jOpen
jClose
jRead
jWrite
***********************************************************************/
jRead: procedure expose m.
parse arg m, var
call objMetClaM m, 'jRead'
if m.m.jReading then
interpret ggCode
else
return err('jRead('m',' var') but not opened r')
endProcedure jRead
jReadO: procedure expose m.
parse arg m
if arg() > 1 then call err '??? old interface'
call objMetClaM m, 'jReadO'
if m.m.jReading then
interpret ggCode
else
return err('jReadO('m',' var') but not opened r')
endProcedure jReadO
jWrite: procedure expose m.
parse arg m, line
call objMetClaM m, 'jWrite'
if \ m.m.jWriting then
return err('jWrite('m',' line') but not opened w')
interpret ggCode
return
endProcedure jWrite
jWriteO: procedure expose m.
parse arg m, var
call objMetClaM m, 'jWriteO'
if \ m.m.jWriting then
return err('jWriteO('m',' var') but not opened w')
interpret ggCode
return
endProcedure jWriteO
jWriteAll: procedure expose m.
parse arg m, rdr
rdr = o2file(rdr)
call objMetClaM m, 'jWriteAll'
if \ m.m.jWriting then
return err('jWriteAll('m',' rdr') but not opened w')
interpret ggCode
return
endProcedure jWriteAll
jWriteNow: procedure expose m.
parse arg m, rdr
rdr = o2file(rdr)
interpret objMet(m, 'jWriteNow')
return
endProcedure jWriteNow
jCat: procedure expose m.
parse arg opt m
if m = '' then do
m = opt
opt = m.j.cWri
end
call jOpen m, opt
do ax=2 to arg()
call jWriteAll m, arg(ax)
end
call jClose m
return m
endProcedure jCat
jWriteNowImpl: procedure expose m.
parse arg m, rdr
call jOpen rdr, m.j.cRead
do while jRead(rdr, line)
call jWrite m, m.line
end
call jClose rdr
return
endProcedure jWriteNow
jWriteNowImplO: procedure expose m.
parse arg m, rdr
call jOpen rdr, m.j.cRead
do while assNN('li', jReadO(rdr))
call jWriteO m, li
end
call jClose rdr
return
endProcedure jWriteNow
/*--- reset JRW: fail if open, initialise ---------------------------*/
jReset: procedure expose m.
parse arg m, arg, arg2, arg3
if m.m.jReading == 1 | m.m.jWriting == 1 then
return err('still open jReset('m',' arg2')') / 3
m.m.jReading = 0
m.m.jWriting = 0
m.m.jUsers = 0
interpret objMet(m, 'jReset')
return m
endProcedure jReset
jOpen: procedure expose m.
parse arg m, opt
call objMetClaM m, 'jOpen'
oUsers = m.m.jUsers
if opt = m.j.cRead then do
if m.m.jReading then
nop
else if m.m.jWriting then
return err('already opened for writing jOpen('m',' opt')')
else do
interpret ggCode
m.m.jReading = 1
end
end
else if \ abbrev('>>', opt, 1) then do
return err('bad option' opt 'in jOpen('m',' opt')')
end
else do
if m.m.jWriting then
nop
else if m.m.jReading then
return err('already opened for reading jOpen('m',' opt')')
else do
interpret ggCode
m.m.jWriting = 1
end
end
m.m.jUsers = oUsers + 1
return m
endProcedure jOpen
jClose: procedure expose m.
parse arg m
call objMetClaM m, 'jClose'
oUsers = m.m.jUsers
if oUsers = 1 then do
interpret ggCode
m.m.jReading = 0
m.m.jWriting = 0
end
else if oUsers < 1 then
call err 'jClose' m 'but already closed'
m.m.jUsers = oUsers - 1
return m
endProcedure jClose
/*--- cat the lines of the file together, with mid between lines,
fail if not all lines are strings -------------------*/
jCatLines: procedure expose m.
parse arg m, fmt
if abbrev(fmt, '-sql') then
return jCatSql(m, substr(fmt, 5))
if fmt == '' then
fmt = '%+Q\s'
call jOpen m, m.j.cRead
if \ jRead(m, line) then do
call jClose m
return ''
end
res = f(fmt, m.line)
do while jRead(m, line)
res = res || f(fmt'%-Qnxt', m.line)
end
call jClose m
fEnd = 'F.FORMAT.'fmt'%-Qend'
return res || m.fEnd
endProcedure jCatLines
/*--- cat the line of a file, using comments
fixline (with token wrapping) or separate lines -------*/
jCatSql: procedure expose m.
parse arg m, fLen
call jCatSqlReset m'.JCATSQL', , jOpen(m, '<'), fLen
res = jCatSqlNext(m'.JCATSQL')
call jClose m
return res
endProcedure jCatSql
jCatSqlReset: procedure expose m.
parse arg m, aSrc, m.m.rdr, m.m.fLen
call jCatSqlNL m, aSrc
return m
endProcedure jCatSqlReset
jCatSqlNL: procedure expose m.
parse arg m
if m.m.rdr \== '' then
if jRead(m.m.rdr, m'.SRC') then do
if m.m.fLen \== '' then
m.m.src = left(m.m.src, m.m.fLen)
else if substr(m.m.src, length(m.m.src), 1) \== ' ' then
m.m.src = m.m.src' '
m.m.pos = 1
return 1
end
m.m.pos = length(m.m.src)+1
return 0
endProcedure jCatSqlNl
jCatSqlNext: procedure expose m.
parse arg m, stop
res = ''
st = ''
bx = m.m.pos
do forever
call sbUntil m, '"''-/'stop
if sbEnd(m) then do
res = res || substr(m.m.src, bx)
bx = 0
end
else if substr(m.m.src, m.m.pos, 2) = '--' then do
res = res || substr(m.m.src, bx, m.m.pos-bx)' '
bx = 0
end
else if substr(m.m.src, m.m.pos, 2) = '/*' then do
res = res || substr(m.m.src, bx, m.m.pos-bx)' '
do forever
px = pos('*/', m.m.src, m.m.pos)
if px > 0 then
leave
if \ jCatSqlNL(m) then
return res
end
bx = px+2
m.m.pos = bx
end
else if sbLit(m, ''' "') then do
c1 = sbPrev(m)
do while \ sbStrEnd(m, c1)
res = res || substr(m.m.src, bx)
if m.m.fLen \== '' then
if jCatSqlNl(m) then do
bx = m.m.pos
iterate
end
call err 'unclosed' c1 'string:' m.m.src
end
end
else if pos(substr(m.m.src, m.m.pos, 1), stop) > 0 then do
res = strip(res||substr(m.m.src, bx, m.m.pos-bx), 't')
call sbChar m, 1
if res <> '' then
return res
bx = m.m.pos
end
if bx = 0 then
if jCatSqlNl(m) then
bx = m.m.pos
else
return res
end
endProcedure jCatSqlNext
jIni: procedure expose m.
if m.j.ini == 1 then
return
m.j.ini = 1
m.j.cRead = '<'
m.j.cWri = '>'
m.j.cApp = '>>'
call oIni
am = "call err 'call of abstract method"
call classNew 'n JRW u ORun, f JREADING v, f JWRITING v', 'm',
, "new call jReset m, arg, arg2, arg3",
, "jRead" am "jRead('m',' var')'" ,
, "jReadO if \ jRead(m, 'J.GGVAR') then return '';",
"return s2o(m.j.ggVar)" ,
, "jWrite" am "jWrite('m',' line')'" ,
, "jWriteO call jWrite(m, o2string(var))" ,
, "jWriteAll call jWriteNowImpl m, rdr",
, "jWriteNow call jWriteNowImpl m, rdr",
, "jReset",
, "jOpen" am" jOpen('m',' opt')'" ,
, "jClose" ,
, "oRun call pipeWriteAll m",
, "o2String return jCatLines(m, fmt)",
, "o2File return m"
call classNew 'n JRWO u JRW', 'm',
, "jRead res = jReadO(m); if res == '' then return 0;" ,
"m.var = o2string(res); return 1" ,
, "jReadO" am "jReadO('m')'" ,
, "jWrite call jWriteO(m, s2o(var))" ,
, "jWriteO" am "jWriteO('m',' line')'",
, "jWriteAll call jWriteNowImplO m, rdr",
, "jWriteNow call jWriteNowImplO m, rdr",
am = "call err 'call errObject"
call classNew 'n JRWErr u JRW', 'm',
, "jWriteAll" er "jWriteAll 'm', rdr'",
, "jWriteNow" er "jWriteNow 'm', 'rdr'",
, "jClose" er "jClose 'm'"
call classNew 'n JSay u JRW', 'm',
, "jWrite say line" ,
, "jWriteO call classOut , var, 'outO: '",
, "jOpen if \ abbrev(opt, m.j.cWri) then",
"call err 'can only write JSay.jOpen('m',' opt')';" ,
"else m.m.jWriting = 1"
call classNew 'n JStem u JSay', 'm',
, "jReset m.m.stem = arg;",
"if \ dataType(m.arg.0, 'n') then m.arg.0 = 0" ,
, "jWrite call mAdd m.m.stem, line"
call classNew 'n JRWEof u JRW', 'm',
, "jRead drop m.var; return 0",
, "jOpen if pos('>', opt) > 0 then",
"call err 'can only read JRWEof.jOpen('m',' opt')';" ,
"else m.m.jReading = 1"
m.j.in = jOpen(oNew('JRWEof'), m.j.cRead)
call outDst
call classNew "n JBuf u JRWO, f BUF s r", "m",
, "jOpen call jBufOpen m, opt",
, "jReset call jBufReset m, arg",
, "jRead return jBufRead(m, var)",
, "jReadO return jBufReadO(m)",
, "jWrite call jBufWrite m, line",
, "jWriteO call jBufWriteO m, var"
call classNew "n JBufTxt u JBuf, f MAXL v ", "m",
, "jReset call jBufReset m, arg; m.m.maxl = 80",
, "jWriteO call jBufWrite m, o2Text(var, m.m.maxl)"
return
endProcedure jIni
/*--- out interface of j --------------------------------------------*/
outIni: procedure expose m.
call jIni
return
endProcedure outIni
outDst: procedure expose m.
parse arg wrt
oldOut = m.j.out
if wrt == '' then
wrt = jOpen(oNew('JSay'), '>')
m.j.out = wrt
return oldOut
endProcedure outDst
/*--- return a JRW from rdr or in ------------------------------------*/
j2Rdr: procedure expose m.
parse arg rdr
if oStrOrObj(rdr, m.j.in) then
return jBuf(ggStr)
else
return o2file(ggObj)
endProcedure j2Rdr
/* jstr is part of out interface --> inp2str */
inp2str: procedure expose m.
parse arg rdr, fmt
if oStrOrObj(rdr, m.j.in) then
return ggStr
else
return o2String(ggObj, fmt)
endProcedure inp2str
j2Buf: procedure expose m.
parse arg rdr
if oStrOrObj(rdr, m.j.in) then
return jBuf(ggStr)
if classInheritsOf(ggCla, class4Name('JBuf')) ,
& m.ggObj.jUsers < 1 then
return ggObj
b = jOpen(jBuf(), m.j.cWri)
call jWriteNow b, o2File(ggObj)
return jClose(b)
endProcedure j2Buf
in: procedure expose m.
parse arg arg
return jRead(m.j.in, arg)
endProcedure in
inO: procedure expose m.
if arg() > 0 then call err '??? old interface'
return jReadO(m.j.in)
endProcedure in
out: procedure expose m.
parse arg line
call jWrite m.j.out, line
return 0
endProcedure out
outO: procedure expose m.
parse arg arg
call jWriteO m.j.out, arg
return
endProcedure outO
/*--- jBuf: buffer read or write (supports datataypes) ---------------*/
jBuf: procedure expose m.
m = oNew('JBuf') /* calls jBufReset */
do ax=1 to arg()
m.m.buf.ax = arg(ax)
end
m.m.buf.0 = ax-1
m.m.allV = 1
return m
endProcedure jBuf
/*--- jBuf: buffer read or write (supports datataypes) ---------------*/
jBufTxt: procedure expose m.
m = oNew('JBufTxt') /* calls jBufReset */
do ax=1 to arg()
m.m.buf.ax = arg(ax)
end
m.m.buf.0 = ax-1
m.m.allV = 1
return m
endProcedure jBufTxt
jBufReset: procedure expose m.
parse arg m
m.m.stem = m'.BUF'
do ax=1 to arg() - 1
m.m.buf.ax = arg(ax+1)
end
m.m.buf.0 = ax-1
m.m.allV = 1
return m
endProcedure jBufReset
jBufOpen: procedure expose m.
parse arg m, opt
if opt == m.j.cRead then do
m.m.readIx = 0
m.m.jReading = 1
return m
end
if opt == m.j.cWri then do
m.m.buf.0 = 0
m.m.allV = 1
end
else if opt \== m.j.cApp then
call err 'jBufOpen('m',' opt') with bad opt'
m.m.jWriting = 1
return m
endProcedure jBufOpen
jBufWrite: procedure expose m.
parse arg m, line
if m.m.allV then
call mAdd m'.BUF', line
else
call mAdd m'.BUF', s2o(line)
return
endProcedure jBufWrite
jBufWriteStem: procedure expose m.
parse arg m, st
ax = m.m.buf.0
if m.m.allV then do
do sx=1 to m.st.0
ax = ax + 1
m.m.buf.ax = m.st.sx
end
end
else do
do sx=1 to m.st.0
ax = ax + 1
m.m.buf.ax = o2String(m.st.sx)
end
end
m.m.buf.0 = ax
return m
endProcedure jBufWrite
jBufWriteO: procedure expose m.
parse arg m, ref
if m.m.allV then do
cl = objClass(ref)
if cl = m.class.classV then do
call mAdd m'.BUF', m.ref
return
end
if cl == m.class.classW then do
call mAdd m'.BUF', substr(ref, 2)
return
end
m.m.allV = 0
do ax=1 to m.m.buf.0
m.m.buf.ax = s2o(m.m.buf.ax)
end
end
call mAdd m'.BUF', ref
return
endProcedure jBufWriteO
jBufReadO: procedure expose m.
parse arg m
nx = m.m.readIx + 1
if nx > m.m.buf.0 then
return ''
m.m.readIx = nx
if m.m.allV then
return s2o(m.m.buf.nx)
else
return m.m.buf.nx
endProcedure jBufReadO
jBufRead: procedure expose m.
parse arg m, var
nx = m.m.readIx + 1
if nx > m.m.buf.0 then
return 0
m.m.readIx = nx
if m.m.allV then
m.var = m.m.buf.nx
else
m.var = o2String(m'.BUF.'nx)
return 1
endProcedure jBufRead
jBufTxtWriteO: procedure expose m.
parse arg m, ref
if m.m.allV \== 1 then
call err '1 \== allV' m.m.allV 'in jBufTxtWriteO('m',' ref')'
cl = objClass(ref, '?')
if cl = m.class.classV then
call mAdd m'.BUF', m.ref
else if cl == m.class.classW then
call mAdd m'.BUF', substr(ref, 2)
else if ref == '' then
call mAdd m'.BUF', '@ null object'
else if cl == '?' then
call mAdd m'.BUF', '@'ref 'class=???'
else do
l = '@'ref 'class='className(cl)
ff = cl'.FLDS'
do fx=1 to m.ff.0 while length(l) < m.m.maxl + 3
if m.ff.fx == '' then
l = l', .='m.ref
else do
f1 = substr(m.ff.fx, 2)
l = l',' f1'='m.ref.f1
end
end
if length(l) > m.m.maxl then
l = left(l, m.m.maxl-3)'...'
call mAdd m'.BUF', l
end
return
endProcedure jBufTxtWriteO
/* copy j end *********************************************************/
/* copy o begin ******************************************************
an object has a class which describes fields and methods
an object has fields (e.g. m.o.fld1)
an object may call it's methods (dynamic binding)
***********************************************************************/
oIni: procedure expose m.
if m.o.ini = 1 then
return
m.o.ini = 1
call classIni
call oAdd1Method m.class.classV, 'o2String return m.m'
m.class.escW = '!'
call oAdd1Method m.class.classW, 'o2String return substr(m, 2)'
or = classNew('n ORun u',
, 'm oRun call err "call of abstract method oRun"',
, 'm o2File return oRun2File(m)',
, 'm o2String return jCatLines(oRun2File(m), fmt)')
/* oRunner does not work yet ||||| */
rc = classNew('n* ORun u ORun, m oRun call oClassAdded arg(2)')
call oAddMethod rc'.OMET', rc
call classAddedRegister oMutate(mNew(), rc)
return
endProcedure oIni
/*--- when notified about a new class cl, build the redundancies ----*/
oClassAdded: procedure expose m.
parse arg cl
m.class.o2c.cl = m.class.class
call oAddMethod cl'.OMET', cl
new = "m.class.o2c.m =" cl
if m.cl.flds.0 > 0 | m.cl.stms.0 > 0 then
new = new"; call oClear m, '"cl"'"
new = new";" classMet(cl, 'new', '')
if cl == m.class.class then
call mAlias 'CLASS', cl
else /* object adresses */
call mNewArea cl, 'O.'substr(cl,7), new
if m.cl \== 'u' | m.cl.name == '' then
return
call mAlias cl, m.cl.name
new = 'new'
m.cl.oMet.new = ''
co = '' /* build code for copy */
do fx=1 to m.cl.flds.0
nm = m.cl.flds.fx
if translate(nm) == nm & \ abbrev(nm, 'GG') ,
& pos('.M.', nm'.') < 1 & pos('.T.', nm'.') < 1 then
co = co'm.t'nm '= m.m'nm';'
else
co = co 'f='quote(substr(nm, 2))';m.t.f = m.m.f;'
end
do fx=1 to m.cl.stms.0
nm = m.cl.stms.fx
sc = m.cl.stms.fx.class
if nm == ''then
co = co "m.t.0=m.m.0;" ,
"do sx=1 to m.m.0;" ,
"call oClaCopy '"sc"',m'.'sx, t'.'sx; end;"
else
co = co "st='"substr(nm, 2)"';m.t.st.0=m.m.st.0;",
"do sx=1 to m.m.st.0;",
"call oClaCopy '"sc"',m'.'st'.'sx, t'.'st'.'sx; end;"
end
p = cl'.OMET.oCopy'
if symbol('m.p') \== VAR then
m.p = co
return
endProcedure oClassAdded
/*--- add the methods of class cl to the methodtable mt -------------*/
oAddMethod: procedure expose m.
parse arg mt, cl
if pos(m.cl, 'frsv') > 0 then
return
if m.cl = 'm' then do
nm = m.cl.name
m.mt.nm = m.cl.met
return
end
/* if m.cl.class \== '' then
call oAddMethod mt, m.cl.class
*/ do x=1 to m.cl.0
call oAddMethod mt, m.cl.x
end
return
endProcedure oAddMethod
/* add 1 method to a completed class and its subclasses -------------*/
oAdd1Method: procedure expose m.
parse arg clNm, met code
cl = classAdd1Method(clNm, met code)
m.cl.omet.met = code
call oAdd1MethodSubs cl, met code
return cl
endProcedure oAdd1Method
/* add 1 method code to OMET of all subclasses of cl -------------*/
oAdd1MethodSubs: procedure expose m.
parse arg cl, met code
do sx=1 to m.cl.sub.0
sc = m.cl.sub.sx
if pos(m.sc, 'nvw') > 0 then do
do mx=1 to m.sc.0
ms = m.sc.mx
if m.ms == 'm' & m.ms.name == met then
call err 'method' med 'already in' sc
end
m.sc.omet.met = code
end
call oAdd1MethodSubs sc, met code
end
return cl
endProcedure oAdd1MethodSubs
/*--- create an an object of the class className
mutate it to class but DO NOT call it's new method ----------*/
oBasicNew: procedure expose m.
parse arg cl
return oMutate(mBasicNew(cl), cl)
/*--- create an an object of the class className
and call it's new method ------------------------------------*/
oNew: procedure expose m.
signal labelMNew /* work is done there | ???? remove */
/*--- return the class of object obj --------------------------------*/
objClass: procedure expose m.
parse arg obj
if symbol('m.class.o2c.obj') == 'VAR' then
return m.class.o2c.obj
if abbrev(obj, m.class.escW) then
return m.class.classW
if abbrev(obj, 'CLASS.CAST.') then
return substr(obj, 12, pos(':', obj, 12)-12)
if arg() >= 2 then
return arg(2)
return err('objClass no class found for object' obj)
endProcedure objClass
oKindOf: procedure expose m.
parse arg obj, sup
cl = objClass(obj, '')
if cl == '' then
return 0
return classInheritsOf(cl, class4name(sup))
endProcedure oKindOf
classInheritsOf: procedure expose m.
parse arg cl, sup /* wkTst optimierung in classAdded */
if cl == sup then
return 1
do while m.cl \== 'n' & m.cl \== 'u'
if m.cl.class == '' then
return 0
cl = m.cl.class
end
do cx=1 to m.cl.0
d = m.cl.cx
if m.d == 'u' then
if classInheritsOf(d, sup) then
return 1
end
return 0
endProcedure classInheritsOf
classSetMet: procedure expose m.
parse arg na, me, code
if symbol('m.class.n2c.na') \== 'VAR' then
call err 'no class' na 'in classMet('na',' me')'
cl = m.class.n2c.na
if symbol('m.cl.oMet.me') \== 'VAR' then
call err 'no method in classMet('na',' me')'
m.cl.oMet.me = code
return cl
endProcedure classSetMet
/*--- return the code of method me of the class with name na --------*/
classMet: procedure expose m.
parse arg na, me
if symbol('m.class.n2c.na') \== 'VAR' then
call err 'no class' na 'in classMet('na',' me')'
cl = m.class.n2c.na
if symbol('m.cl.oMet.me') == 'VAR' then
return m.cl.oMet.me
if arg() >= 3 then
return arg(3)
call err 'no method in classMet('na',' me')'
endProcedure classMethod
/*--- set m, ggClass, ggCode to the address, class and code
of method me of object m ------------------------------------*/
objMetClaM: procedure expose m. m ggClass ggCode
parse arg m, me
if symbol('m.class.o2c.m') == 'VAR' then
ggClass = m.class.o2c.m
else if abbrev(m, 'CLASS.CAST.') then
parse var m 'CLASS.CAST.' ggClass ':' m
else
return err('no class found for object' m)
if symbol('m.ggClass.oMet.me') == 'VAR' then
ggCode = m.ggClass.oMet.me
else
call err 'no method' me 'in class' className(ggClass),
'of object' m
return
endProcedure objMetClaM
/*--- return the code of method me of object obj --------------------*/
objMet: procedure expose m.
parse arg obj, me
/* handle the easy and frequent case directly */
if symbol('m.class.o2c.obj') == 'VAR' then
c = m.class.o2c.obj
else if abbrev(obj, m.class.escW) then
c = m.class.classW
else do
call objMetClaM obj, me
return 'M="'m'";'ggCode
end
if symbol('m.c.oMet.me') == 'VAR' then
return m.c.oMet.me
return err('no method' me 'in class' className(c) 'of object' obj)
endProcedure objMet
/*--- return the stem of fieldnames of object m ---------------------*/
oFlds: procedure expose m.
parse arg m
return objClass(m)'.FLDS'
endProcedure oFlds
/*--- return the contents of field f navigation along path ----*/
oGet: procedure expose m.
parse arg obj, path, clazz
nullNew = 0
ret = oAccPath(obj, path, clazz)
if ret == 1 then
ret = oAccStr(m, cl)
if ret == 1 then
return str
return err(ret 'in oGet('obj',' path')')
endProcedure oGet
oAccStr: procedure expose m. str
parse arg m, cl
if cl == m.class.classV then
str = m.m
else if m.cl.valueCl == '' then
return 'no value @' m 'class' className(cl)
else if m.m == '' then
return 'null @' m 'class' className(cl)
else if abbrev(m, m.class.escW) then
str = substr(m ,2)
else
str = o2String(m.m)
return 1
endProcedure oAccStr
oGetO: procedure expose m.
parse arg obj, path, opt, clazz
nullNew = pos('n', opt) > 0
ret = oAccPath(obj, path, clazz)
if ret == 1 then
ret = oAccO(m, cl, opt)
if ret == 1 then
return ref
else
return err(ret 'in oGetO('obj',' path')')
endProcedure oGetO
oAccO: procedure expose m. ref
parse arg m, cl, opt
if cl == m.class.classV then do
ref = s2o(m.m)
end
else if m.cl \== 'r' then do
ref = m
end
else if m.m == '' then do
if opt == '-b' then do
m.m = jBuf()
end
else if opt == '-n' then do
rsn = oRefSetNew(m, cl)
if rsn \==1 then
return rsn
end
ref = m.m
end
else if objClass(m.m, 0) \== 0 then do
ref = m.m
end
else do
return 'no class for' m.m '@' m 'class' cl
end
return 1
endProcedure oAccO
oPut: procedure expose m.
parse arg obj, path, str
nullNew = 1
res = oAccPath(obj, path)
if res == 1 then
res = ocPut(m, cl, str)
if res == 1 then
return str
return err(res 'in oPut('obj',' path',' str')')
endProceudre oPut
ocPut: procedure expose m.
parse arg m, cl, str
if m.cl.valueCl == m.class.classV then
m.m = str
else if m.cl.valueCl \== '' then
m.m = s2o(str)
else
return 'no value @' m 'class' className(cl)
return 1
endProcedure ocPut
oPutO: procedure expose m.
parse arg obj, path, ref
nullNew = 1
res = oAccPath(obj, path)
if res == 1 then
res = ocPutO(m, cl, ref)
if res == 1 then
return ref
return err(ret 'in oPut('obj',' path',' ref')')
endProcedure oPutO
ocPutO: procedure expose m.
parse arg m, cl, ref
if m.cl.valueCl == m.class.classV then
m.m = o2string(ref)
else if m.cl.valueCl \== '' then
m.m = ref
else if m.cl.stemCl \== '' then
return 'implement put to stem'
else
return 'no value @' m 'class' className(cl)
return 1
endProcedure ocPutO
oClear: procedure expose m.
parse arg obj, cl
if cl == '' then
cl = objClass(obj)
do fx=1 to m.cl.flds.0
f1 = m.cl.flds.fx
o1 = obj || f1
if f1 == '' then
c1 = cl
else do
c1 = substr(f1, 2)
c1 = m.cl.f2c.c1
end
if c1 == m.class.classW then
m.o1 = m.class.escW
else
m.o1 = ''
end
do sx=1 to m.cl.stms.0
f1 = obj || m.cl.stms.sx
m.f1.0 = 0
end
return obj
endProcedure oClear
oAccPath: procedure expose m. m cl nullNew
parse arg m, pa, cl
if cl == '' & m \== '' then do
cl = objClass(m)
end
if pa == '' then
return 1
if abbrev(pa, m.class.cRef) ,
| (\ m.cl.hasFlds & abbrev(pa, m.class.cNav)) then do
if pa == m.class.cRef & m.cl.valueCl == m.class.classV then do
cl = m.class.classV
return 1
end
if (m.cl.valueCl == '' | m.cl.valueCl == m.class.classV) ,
& m.cl \== 'r' then
return 'no reference @' m 'class' cl
if m.m = '' then do
if \ nullNew then
return 'null @' m 'class' className(cl)
rsn = oRefSetNew(m, cl)
if rsn \== 1 then
return rsn
end
return oAccPath(m.m, substr(pa, 2))
end
if pos(left(pa, 1), m.class.cPath) > 0 then
return oAccPath(m, substr(pa, 2), cl)
px = verify(pa, m.class.cPath, 'm')
if px < 1 then
px = length(pa)+1
fn = left(pa, px-1)
pa = substr(pa, px)
if symbol('m.cl.f2c.fn') == 'VAR' then
return oAccPath(m'.'fn, pa, m.cl.f2c.fn)
if m.cl.stemCl=='' | fn=='' | verify(fn, '0123456789','n')>0 then
return 'no field' fn '@' m 'class' className(cl)
if fn == 0 then
return oAccPath(m'.0', pa, m.class.classV)
if abbrev(fn, 0) | verify(m.m.0, '0123456789', 'n') > 0,
| fn > m.m.0 then
return 'bad stem index' fn'>'m.m.0 '@' m 'class' className(cl)
return oAccPath(m'.'fn, pa, m.cl.stemCl)
endProcedure oAccPath
oRefSetNew: procedure expose m.
parse arg m, cl
cr = m.cl.valueCl
if m.cr.class = '' then
return 'no class for null @' m 'class' className(cl)
if m.cr.class = m.class.classW then
m.m = o2s()
else if m.cr \== 'r' then
return 'class' className(cl) 'not ref'
else
m.m = mNew(m.cr.class)
return 1
endProcedure oRefSetNew
/*--- mutate object m to the class named name -----------------------*/
oMutate: procedure expose m.
parse arg m, name
m.class.o2c.m = class4Name(name)
return m
endProcedure oMutate
/*--- return object obj cast'd to class named cl --------------------*/
oCast: procedure expose m.
parse arg obj, cl
if abbrev(obj, 'CLASS.CAST.') then
obj = substr(obj, 1 + pos(':', obj, 12))
return 'CLASS.CAST.'class4Name(cl)':'obj
endProcedure oCast
/*--- copy object m of class c to t ---------------------------------*/
oClaCopy: procedure expose m.
parse arg ggCla, m, t
if t == '' then do
if ggCla == m.class.classW then
return m
t = mBasicNew(ggCla)
end
else if ggCla == m.class.classW then do
m.t = o2String(m)
m.class.o2c.t = m.class.classV
return t
end
ggCode = ggCla'.OMET.oCopy'
interpret m.ggCode
m.class.o2c.t = ggCla
return t
endProcedure oClaCopy
/*--- copy object m to t --------------------------------------------*/
oCopy: procedure expose m.
parse arg m, t
return oClaCopy(objClass(m), m, t)
endProcedure oCopy
/*--- copy object to a newly created object -------------------------*/
oCopyNew: procedure expose m.
parse arg m
if symbol('m.class.o2c.m') == 'VAR' then
return oCopy(m, mBasicNew(m.class.o2c.m))
return oCopy(m, mBasicNew(m.class.classV))
endProcedure oCopyNew
/*--- return a new instance of a subclass of Run
with code code in method oRun -------------------------------*/
oRunner: procedure expose m.
if arg() >= 1 then
r = oNew(classNew('n* ORun u ORun, m oRun' arg(1)))
else
r = oNew(classNew('n| ORun u ORun'))
return r
endProcedure oRunner
/*--- set code for runner -------------------------------------------*/
oRunnerCode: procedure expose m.
parse arg r, code
call classSetMet objClass(r), 'oRun', code
return r
endProcedure oRunnerCode
/*--- run method oRun of object m -----------------------------------*/
oRun: procedure expose m.
parse arg m, arg, arg2, arg3
interpret objMet(m, 'oRun')
return
endProcedure oRun
/*--- run method oRun and return output in new JBuf ------------------*/
oRun2File: procedure expose m.
parse arg rn
b = jBuf()
call pipeBeLa '>' b
call oRun rn
call pipeEnd
return b
endProcedure oRun2File
/*--- cast the object to a file -------------------------------------*/
o2File: procedure expose m.
parse arg m
interpret objMet(m, 'o2File')
call err 'o2file did not return'
endProcedure o2File
/*--- cast the object to a String -----------------------------------*/
o2String: procedure expose m.
parse arg m, fmt
if opt == '' then
opt = '-b '
interpret objMet(m, 'o2String')
return err('o2String did not return')
endProcedure o2String
/*--- return true if object is kind of String------------------------*/
oStrOrObj: procedure expose m. ggStr ggObj ggCla
parse arg ggObj, def
if ggObj == '' then
ggObj = def
ggCla = objClass(ggObj, '')
if ggCla == '' then do
ggStr = ggObj
ggObj = ''
return 1
end
else if wordPos(ggCla, m.class.classV m.class.classW) > 0 then do
ggStr = o2String(ggObj)
ggObj = ''
return 1
end
else do
ggStr = ''
return 0
end
endProcedure oStrOrObj
/*--- return true if object is kind of String ----- ???? -------------*/
oStrOrFile: procedure expose m. ggStr ggObj ggCla
parse arg m, def
if oStrOrObj(m, def) then
return 1
ggObj = o2File(ggObj)
return 0
endProcedure oStrOrFile
/*--- return a short string representation of an object -------------*/
o2Text: procedure expose m.
parse arg m, maxL
if m == '' then
return '@ null object'
if maxL == '' then
maxL = 80
cl = objClass(m, '?')
if cl = m.class.classV then
l = m.m
else if cl == m.class.classW then
l = substr(m, 2)
else if cl == '?' then
l = '@'m 'class=???'
else do
l = '@'m 'class='className(cl)
ff = cl'.FLDS'
do fx=1 to m.ff.0 while length(l) < maxL + 3
if m.ff.fx == '' then
l = l', .='m.m
else do
f1 = substr(m.ff.fx, 2)
l = l',' f1'='m.m.f1
end
end
end
if length(l) <= maxL then
return l
return left(l, maxL-3)'...'
endProcedure o2Text
/*--- cast a String to an object -----------------------------------*/
s2o: procedure expose m.
parse arg str
return m.class.escW || str
return r
endProcedure s2o
oIfStr: procedure expose m.
parse arg m
if length(m) > 200 then
return m
cl = objClass(m, '')
if cl = '' then
return m
else if cl = m.class.classV then
return = m.m
else if cl == m.class.classW then
return = substr(m, 2)
else if arg() >= 2 then
return arg(2)
else
call err m 'of class' className(cl) 'not kind of string'
endProcedure oIfStr
/* copy o end *******************************************************/
/* copy class begin **************************************************
a class has fields and methods,
the class module handles only the metadata,
object handling (instanciation, methodcalls etc.) is in O
classes are represented by a metadata tree,
its nodes of class class have diffenrent types:
class subTypes (implemented as choices)
'u' = union: NAME -> name of class if <> '',
stem -> references component classes
'f' = field: NAME -> fieldName (x.name),
CLASSS -> reference to class of fieldValue
's' = stem: class -> ref to class at each stem element
'c' = choice: NAME -> selection value,
CLASS -> ref to class of choice
'm' = method: NAME -> methodName,
MET -> rexxCode
'r' = reference CLASS -> ref to type at reference
special classes
'v' = Value String Value
'w' = ValueAsA StringValue packed into an adress (prefix escW)
'o' = AnyClass any class with dynamic classLookup on object
formal definition, see classIni
class expression (ce) allow the following syntax
ce = className | classAdr | 'n'('?','*','|')? name union | union
| 'f' name ce | 's' ce | 'c' name ce | 'm' name code | r ce?
union = 'u' (ce (',' ce)*)?
the modifiers of 'n' means
none: create new class, fail if name already defined
'?': create new class or return old of that name
'*': use an exisiting class of that definition
or create new class with a unique name
'|': create a new class with a unique name
'm' extends to then end of the ce (line)
'u' allows several components, in classNew also multiple args
Achtung, aber NICHT rekursiv|
***********************************************************************/
classIni: procedure expose m.
if m.class.ini == 1 then
return
m.class.ini = 1
call mapIni
call mNewArea 'CLASS', 'CLASS'
call mapReset 'CLASS.N2C' /* name to class */
/* to notify other modules (e.g. O) on every new named class */
m.class.addedSeq.0 = 0
m.class.addedListeners.0 = 0
m.class.classV = classBasicNew('u', 'v')
m.class.classW = classBasicNew('u', 'w')
m.class.classO = classBasicNew('u', 'o')
cr = mIterBegin('CLASS')
do while assNN('cr', mIter(cr))
call classAddedNotify cr
end
m.class.class = classNew('n class u v',
, 'c u u f NAME v, s r class',
, 'c f u f NAME v, f CLASS r class',
, 'c s f CLASS r class' ,
, 'c c u f NAME v, f CLASS r class',
, 'c m u f NAME v, f MET v' ,
, 'c r f CLASS r class' )
m.class.cNav = '.'
m.class.cRef = '|'
m.class.cDot = '%'
m.class.cPath = m.class.cNav || m.class.cRef || m.class.cDot
m.class.classR = classNew('r')
return
endProcedure classIni
/*--- return the name of a class if it exists otherwise the class ---*/
className: procedure expose m.
parse arg cl
if m.cl = 'u' & m.cl.name \= '' then
return m.cl.name
else
return cl
endProcedure class4Name
/*--- return class of given name or class ---------------------------*/
class4Name: procedure expose m.
parse arg nm
if symbol('m.class.n2c.nm') == 'VAR' then
return m.class.n2c.nm
if arg() > 1 then
return arg(2)
call err 'no class' nm
endProcedure class4Name
classBasicNew: procedure expose m.
parse arg ty, nm, cl, nmTy
n = mNew('CLASS')
m.n = ty
m.n.name = nm
m.n.nameComp = nm
if ty == 'u' & nm \== '' then do
if pos(nmTy, '*|') > 0 then do
m.n.name = nm || substr(n, 1+lastPos('.', n))
if nmTy == '*' then
m.n.nameComp = nm'*'
else
m.n.nameComp = m.n.name
end
call mapAdd class.n2c, m.n.name, n
end
call mapAdd class.n2c, n, n
m.n.class = ''
m.n.met = ''
m.n.0 = 0
m.n.sub.0 = 0
m.n.super.0 = 0
if length(ty) \== 1 | pos(ty, 'ufscrm') < 1 then
call err 'bad type' ty': classBasicNew('ty',' nm',' cl')'
else if nm == '' & pos(ty, 'fm') > 0 then
call err 'empty name: classBasicNew('ty',' nm',' cl')'
else if nm \== '' & ty \== 'c' ,
& ( verify(nm, '0123456789') < 1 ,
| verify(nm, ' .*|@', 'm') > 0 ) then
call err 'bad name' nm': classBasicNew('ty',' nm',' cl')'
else if nm \= '' & pos(ty, 'rs') > 0 then
call err 'name for type' ty': classBasicNew('ty',' nm',' cl')'
else if pos(ty, 'fcrs') > 0 then do
if cl \== '' then
m.n.class = mapGet(class.n2c, cl)
else if ty == 'r' then
m.n.class = m.class.classO
/* else say 'cl leer' ty nm nmTy ???????*/
end
else if ty == 'm' then
m.n.met = cl
else if cl \== '' then
call err 'class for type' ty': classBasicNew('ty',' nm',' cl')'
return n
endProcedure classBasicNew
classNew: procedure expose m.
parse arg clEx 1 ty rest
if abbrev(ty, 'n') then do
if wordPos(ty, 'n n? n* n|') < 1 then
call err 'bad type' ty': classNew('clEx')'
nmTy = right(ty, 1)
parse var rest nm ty rest
if ty \== 'u' then
call err 'class name' nm 'without u: classNew('clEx')'
if nmTy == 'n' then do
if mapHasKey(class.n2c, nm) then
call err 'class' nm 'already defined: classNew('clEx')'
end
else if nmTy == '?' then do
if mapHasKey(class.n2c, nm) then
return mapGet(class.n2c, nm)
end
else if nmTy == '*' then do
if arg() \== 1 then
call err 'arg()='arg() 'for n* : classNew('clEx')'
if mapHasKey(class.n2c, clEx) then
return mapGet(class.n2c, clEx)
end
n = classBasicNew('u', nm, , nmTy)
end
else do
nmTy = ''
if arg() \== 1 then
call err 'arg()='arg() 'without name: classNew('clEx')'
if mapHasKey(class.n2c, clEx) then
return mapGet(class.n2c, clEx)
if length(ty) <> 1 | pos(ty, 'ufscmr') < 1 then
call err 'bad type' ty': classNew('clEx')'
nm = ''
if pos(ty, 'usr') < 1 then
parse var rest nm rest
if ty = 'u' then do
n = classBasicNew(ty)
end
else if ty = 'm' then do
n = classBasicNew(ty, nm, rest)
rest = ''
end
else do
parse var rest t1 rest
if wordPos(t1, 'u f s c m r') > 0 then do
n = classBasicNew(ty, nm)
m.n.class = classNew(t1 rest)
rest = ''
end
else do
n = classBasicNew(ty, nm, t1)
end
end
end
if ty \== 'u' then do
if rest \== '' then
call err 'rest' rest 'but end of classExp expected:' clEx
end
else do
lx = 0
do while lx < length(rest)
cx = pos(',', rest, lx+1)
if cx <= lx | word(substr(rest, lx+1), 1) == 'm' then
cx = length(rest)+1
a = mAdd(n, classNew(strip(substr(rest, lx+1, cx-lx-1))))
lx=cx
end
pref = ''
do ax=2 to arg()
if length(arg(ax)) == 1 & arg(ax) \== ' ' then
pref = arg(ax)' '
else
call mAdd n, classNew(pref || arg(ax))
end
end
cr = mIterBegin('CLASS')
do while assNN('cr', mIter(cr)) & \ classEqual(n, cr)
end
isNew = cr == n
if \ isNew then do
if mapRemove(class.n2c, n) \== n then
call err 'mapRemove('n') mismatch'
if m.n == 'u' & m.n.name \== '' then
if mapRemove(class.n2c, m.n.name) \== n then
call err 'mapRemove('m.n.name') mismatch'
call mFree n
n = cr
end
if nmTy == '' | nmTy == '*' then
call mapAdd class.n2c, clEx, n
if isNew then
call classAddedNotify n
return n
endProcedure classNew
classAdd1Method: procedure expose m.
parse arg clNm, met code
cl = class4Name(clNm)
if pos(m.cl, 'uvw') < 1 then
call err 'class not nvw but' m.cl,
'in classAdd1Method('clNm',' met code')'
do sx = 1 to m.cl.0
su = m.cl.sx
if m.cl.sx = 'm' & m.cl.name == met then
call err 'met' met 'already in' clNm
end
call mAdd cl, classNew('m' met code)
return cl
endProcedure classAdd1Method
/*--- register a listener for newly defined classes
and call it for all already defined classes -----------------*/
classAddedRegister: procedure expose m.
parse arg li
call mAdd 'CLASS.ADDEDLISTENERS', li
do cx = 1 to m.class.addedSeq.0
call oRun li, m.class.addedSeq.cx
end
return
endProcedure classAddedRegister
/*--- to notify all listeners about a newly defined classes --------*/
classAddedNotify: procedure expose m.
parse arg cl
call mAdd 'CLASS.ADDEDSEQ', cl
if m.cl == 'u' then
call classSuperSub cl
m.cl.flds.0 = 0
m.cl.stms.0 = 0
m.cl.stemCl = ''
m.cl.valueCl = ''
call classAddFields cl, cl
m.cl.hasFlds = m.cl.flds.0 > 1 ,
| (m.cl.flds.0 == 1 & m.cl.flds.1 \== '') | m.cl.stms.0 > 0
do lx = 1 to m.class.addedListeners.0
call oRun m.class.addedListeners.lx, cl
end
return
endProcedure classAddedNotify
/*--- add supper and sub links for class cl -------------------------*/
classSuperSub: procedure expose m.
parse arg cl
do ux=1 to m.cl.0
u1 = m.cl.ux
if m.u1 == 'u' then do
if mPos(cl'.SUPER', u1) > 0 then
call err u1 'is already in' cl'.SUPER.'sx ,
|| ': classSuperSub('cl')'
call mAdd cl'.SUPER', u1
if mPos(cl'.SUB', cl) > 0 then
call err cl 'is already in' u1'.SUB.'sx ,
|| ': classSuperSub('cl')'
call mAdd u1'.SUB', cl
end
end
return
endProcedure classSuperSub
/*--- add the the fields of class cl to stem f ----------------------*/
classAddFields: procedure expose m.
parse arg f, cl, nm
n1 = substr(nm, 1+abbrev(nm, '.') )
if symbol('m.f.f2c.n1') \== 'VAR' then
m.f.f2c.n1 = cl
/* else if cl == m.f.f2c.n1 then
return 0 */
if cl == m.class.classV | cl == m.class.classW | m.cl=='r' then do
if nm == '' then do
if m.f.valueCl \== '' then
return err('value mistmatch')
m.f.valueCl = cl
end
if nm == '' then do
call mMove f'.FLDS', 1, 2
m.f.flds.1 = ''
end
else do
call mAdd f'.FLDS', nm
end
return 0
end
if m.cl = 's' then do
if m.cl.class == '' then
call err 'stem null class'
a1 = mAdd(f'.STMS', nm)
m.a1.class = m.cl.class
if nm == '' then
m.f.stemCl = m.cl.class
return 0
end
if m.cl = 'f' then
return classAddFields(f, m.cl.class, nm'.'m.cl.name)
if m.cl.class \== '' then
return classAddFields(f, m.cl.class, nm)
do tx=1 to m.cl.0
call classAddFields f, m.cl.tx, nm
end
return 0
endProcedure classAddFields
/*--- return true iff the two classes are equal -------------------*/
classEqual: procedure expose m.
parse arg l, r
if m.l \== m.r | m.l.nameComp \== m.r.nameComp ,
| m.l.class \== m.r.class | m.l.0 \== m.r.0 then
return 0
if m.l.met \== m.r.met then
return 0
do sx=1 to m.l.0
if m.l.sx \== m.r.sx then
return 0
end
return 1
endProcedure classEqual
/*--- print object ---------------------------------------------------*/
objOut: procedure expose m.
parse arg m, pr, p1
c = objClass(m, '')
if c == '' then
call out p1 'no class for' m
else if c == m.class.classV then
call out p1 || m.m
else if c == m.class.classW then
call out p1 || o2String(m)
else
call classOutDone c, m, pr, p1
return
endProcedure objOut
/*--- recursively output (with out:) the object a with class t -------*/
classOut: procedure expose m.
parse arg t, a, pr, p1
return classOutDone(if(t=='',m.class.classO, t), a, pr, p1)
endProcedure classOut
/*--- ouput object a with class t and stopper done ------------------*/
classOutDone: procedure expose m. done.
parse arg t, a, pr, p1
if p1 == '' then
p1 = pr
if right(p1, 1) \== ' ' then
p1 = p1' '
if done.ini \== 1 then do
done.ini = 1
t = class4Name(t, t)
p1 = p1'@'a' '
end
if done.t.a == 1 then
return out(p1'done :'className(t) '@'a)
done.t.a = 1
if t = m.class.classO then do
if a == '' then
return out(p1'obj null')
t = objClass(a, '')
if t = '' then
return out(p1'obj has no class @'m.a)
else
return classOutDone(t, a, pr, p1'isA')
end
if t == m.class.classV then
return out(p1'=' m.a)
if t == m.class.classW == 'w' then
return out(p1'}' substr(a, 2))
if m.t == 'f' then
return classOutDone(m.t.class, a'.'m.t.name, pr, p1'.'m.t.name)
if m.t == 'r' then do
if m.a == '' then
return out(p1'refTo :'className(m.t.class) '@null@')
else
return classOutDone(m.t.class, m.a, pr,
, p1'refTo @'m.a)
end
if m.t = 'u' then do
t1 = m.t.1
vv = m.t.0 > 0 & m.t.1 == m.class.classV
call out p1 || if(m.t.name == '', 'union', ':'m.t.name) ,
|| copies(' =' m.a, vv)
do ux=1+vv to m.t.0
call classOutDone m.t.ux, a, pr' '
end
return 0
end
if m.t = 's' then do
call out p1'stem' m.a.0
do ux=1 to m.a.0
call classOutDone m.t.class, a'.'ux, pr' ', pr' .'ux
end
return 0
end
if m.t = 'c' then do
if m.t.name = m.a then
call classOutDone m.t.class, a, pr, p1'choice' m.a
return 0
end
if m.t = 'm' then
return 0
return err('bad class type' m.t)
endProcedure classOutDone
/* copy class end ***************************************************/
/* copy map begin ******************************************************
a map stores values at keys
it may also maintain a list of keys
the basic ideas are similar to the java Interface java.util.Map
contrary to stems we also handle keys longer then 250 bytes
***********************************************************************/
/*--- initialize the module ------------------------------------------*/
mapIni: procedure expose m.
if m.map.ini = 1 then
return
m.map.ini = 1
call mIni
m.map.0 = 0
m.map.inlineSearch = 1
call mapReset map.inlineName, map.inline
return
endProcedure mapIni
mapInline: procedure expose m.
parse arg pName, opt
if mapHasKey(map.inlineName, pName) then do
im = mapGet(map.inlineName, pName)
if pos('l', opt) < 1 & symbol('m.im.0') \== 'VAR' then do
m.im.0 = m.im.lEnd - m.im.lBegin - 1
do ix=1 to m.im.0
m.im.ix = strip(sourceline(ix+m.im.lBegin), 't')
end
end
return im
end
name = '/'
do lx = m.map.inlineSearch to sourceline()
if \ abbrev(sourceline(lx), '$') then
iterate
li = sourceline(lx)
s1 = pos('/', li)+ 1
if s1 < 3 | s1 > 4 then
iterate
s2 = pos('/', li, s1)
if s2 <= s1 then
iterate
if s1 == 3 then do
if name \== substr(li, s1, s2-s1) then
iterate
im = 'MAP.INLINE.' || (m.map.inline.0+1)
call mapAdd map.inlineName, name, im
m.im.lBegin = lBeg
m.im.lEnd = lx
m.im.mark = mrk
if name == pName then do
m.map.inlineSearch = lx+1
return mapInline(pName)
end
name = '/'
end
else if \ mapHasKey(map.inlineName,
, substr(li, s1, s2-s1)) then do
lBeg = lx
mrk = substr(li, 2, s1-3)
name = substr(li, s1, s2-s1)
end
else do
name = '/'
end
end
if pos('r', opt) > 0 then
return ''
return err('no inline data /'pName'/ found')
endProcedure mapInline
/*--- create a new map ----------------------------------------------*/
mapNew: procedure expose m.
parse arg opt
m.map.0 = m.map.0 + 1
return mapReset('MAP.'m.map.0 , opt)
endProcedure mapNew
/*--- make an empty map, if opt <> '' maintain stem of keys
('K' in map.keys, '=' in a else in opt) --------------*/
mapReset: procedure expose m.
parse arg a, opt
if symbol('m.map.keys.a') == 'VAR' then
call mapClear a
if opt = '=' then
st = a
else if translate(opt) = 'K' then
st = 'MAP.KEYS.'a
else
st = opt
m.map.keys.a = st
if st \== '' then
m.st.0 = 0
return a
endProcedure
/*--- add a new key value pair to the map ----------------------------*/
mapAdd: procedure expose m.
parse arg a, ky, val
vv = mapValAdr(a, ky, 'a')
m.vv = val
return val
endProcedure mapAdd
/*--- change the value at a key or add key value ---------------------*/
mapPut: procedure expose m.
parse arg a, ky, val
vv = mapValAdr(a, ky, 'p')
m.vv = val
return val
endProcedure mapPut
/*--- return 1 if key ky exists in map a, 0 otherwise ----------------*/
mapHasKey: procedure expose m.
parse arg a, ky
return mapValAdr(a, ky) \== ''
endProcedure mapHasKey
/*--- return the value of key ky in map a if it exists,
else if called with a third argument return third argument
else issue an error ----------------------------------------*/
mapGet: procedure expose m.
parse arg a, ky
vv = mapValAdr(a, ky)
if vv \== '' then
return m.vv
else if arg() > 2 then
return arg(3)
else
return err('missing key in mapGet('a',' ky')')
endProcedure mapGet
/*--- return a stem of all keys --------------------------------------*/
mapKeys: procedure expose m.
parse arg a
if m.map.keys.a == '' then
call err 'mapKeys('a') with no keys'
return m.map.keys.a
endProcedure mapKeys
/*--- remove a key from the map, do nothing if it is missing ---------*/
mapRemove: procedure expose m.
parse arg a, ky
vv = mapValAdr(a, ky)
if vv == '' then
return ''
if m.map.keys.a \== '' then do
trace ?R /* not tested yet ???wkTest */
k = m.map.keys.a
mx = m.k.0
do i=1 to mx
if m.k.i == ky then do
m.k.i = m.k.mx
m.k.0 = mx - 1
return
end
end
end
val = m.vv
drop m.a.ky
return val
endProcedure mapRemove
/*--- remove all entries ---------------------------------------------*/
mapClear: procedure expose m.
parse arg a
st = mapKeys(a)
liLe = 243 - length(a)
do kx=1 to m.st.0
ky = m.st.kx
drop m.st.kx
if length(ky) <= liLe then do
drop m.a.ky
end
else do
adr = mapValAdr(a, ky)
if adr \== '' then do
ha = left(adr, lastPos('.', adr) - 3)
do i = 1 to m.ha.k.0
drop m.ha.k.i m.ha.v.i
end
drop m.ha.k.0
end
end
end
m.st.0 = 0
return a
endProcedure mapClear
/*--- return the value pointer for a key, '' if non existing
with fun = 'a' add a key, with 'p' put a key ------------*/
mapValAdr: procedure expose m.
parse arg a, ky, fun
if length(ky) + length(a) <= 243 then do
res = a'.'ky
if symbol('m.res') == 'VAR' then do
if fun == 'a' then
call err 'duplicate key' ky 'in map' a
return res
end
else if fun == '' then
return ''
end
else do
len = 243 - length(a)
q = len % 4
ha = a'.'left(ky, len - 2 * q) || substr(ky,
, (length(ky)-len) % 2 + 2 * q, q) || right(ky, q)
if symbol('M.ha.k.0') == 'VAR' then do
do i=1 to m.ha.k.0
if m.ha.k.i == ky then do
if fun == 'a' then
call err 'duplicate key' ky ,
'map' a 'hash' ha'.K.'i
return ha'.V.'i
end
end
end
else do
i = 1
end
if fun == '' then
return ''
if i > 9 then
call err 'overflow long key' y 'in map' a 'hash' ha'.K.'i
m.ha.k.0 = i
m.ha.k.i = ky
res = ha'.V.'i
end
if m.map.keys.a \== '' then
call mAdd m.map.Keys.a, ky
m.res = ''
return res
endProcedure mapValAdr
/* copy map end *******************************************************/
/* copy mapExp begin **************************************************/
mapVia: procedure expose m.
parse arg a, ky
sx = pos('|', ky)
if sx < 1 then
return mapGet(a, ky)
via = mapGet(a, left(ky, sx-1))
do while sx <= length(ky)
fx = sx+1
sx = pos('|', ky, fx)
if sx < 1 then
sx = length(ky) + 1
if sx = fx then do
if symbol('m.via') \== 'VAR' then
call err 'missing m.'via 'at' sx 'in mapVia('a',' ky')'
via = m.via
end
else do
f = substr(ky, fx, sx - fx)
if symbol('m.via.f') \== 'VAR' then
call err 'missing m.'via'.'f ,
'at' sx 'in mapVia('a',' ky')'
via = m.via.f
end
end
return via
endProcedure mapVia
mapExpAt: procedure expose m.
parse arg a, src, sx
m.map.ExpAt = 0
cx = pos('$', src, sx)
if cx < 1 then
return substr(src, sx)
res = substr(src, sx, cx-sx)
do forever
if substr(src, cx+1, 1) = '{' then do
ex = pos('}', src, cx+2)
if ex < 1 then
call err 'missing } after' substr(src, cx) 'in' src
res = res || mapVia(a, strip(substr(src, cx+2, ex-cx-2)))
ex = ex + 1
end
else do
ex = verify(src, m.mAlfDot, 'n', cx+1)
if ex < 1 then
return res || mapVia(a, substr(src, cx+1))
if ex = cx+1 then do
m.map.ExpAt = cx
return res
end
res = res || mapVia(a, substr(src, cx+1, ex-cx-1))
end
cx = pos('$', src, ex)
if cx < 1 then
return res || substr(src, ex)
res = res || substr(src, ex, cx-ex)
end
endProcedure mapExpAt
mapExp: procedure expose m.
parse arg a, src
res = mapExpAt(a, src, 1)
if m.map.ExpAt \== 0 then
call err 'mapExp stopped at' substr(src, map.ExpAt) 'in' src
return res
endProcedure mapExp
mapExpAllAt: procedure expose m.
parse arg a, dst, src, sx, cx
do while sx <= m.src.0
li = mapExpAt(a, m.src.sx, cx)
dx = m.map.ExpAt
if (cx=1 & dx = 0) | li \= '' then
call mAdd dst, li
if dx = 0 then do
cx = 1
sx = sx+1
end
else do
return sx dx
end
end
return ''
endProcedure mapExpAllAt
mapExpAll: procedure expose m.
parse arg a, dst, src
sto = mapExpAllAt(a, dst, src, 1, 1)
if sto == '' then
return
lx = word(sto, 1)
call err 'mapExpAll stopped at' sto':' m.src.lx
endProcedure mapExpAll
/* copy mapExp end ****************************************************/
/* copy m begin ********************************************************
we use variables as follows
m. stem m: all global data and object data that must survive
a procedure call (m for memory in Memoria of B5000)
m.<mbr>.** to avoid conflicts: every rexx Module (copy) should
only allocate addresses m.<mbr>.** with <mbr> the name of
the rexx module
we pass parameters around (e.g. a=address, m=memory, st=stem)
and the called function may use m.a or m.a.subField etc.
gg*: local variable in subroutines without procedure
everything else: temporary data within procedure
every subroutine is declared as procedure expose m.
(also if no m. variable is used, because e.g. of error handling)
the few subroutines that cannot use procedure, should use only
variables starting with gg
***********************************************************************/
/*---make an area -----*/
mNewArea: procedure expose m.
parse arg nm, adr, newCd, freeCd
m.m.area.0 = m.m.area.0 + 1
a = 'M.AREA.'m.m.area.0
if adr == '=' then
adr = nm
else if adr == '' then
adr = 'M.'m.m.area.0
if symbol('m.m.n2a.adr') == 'VAR' then
call err 'adr' adr 'for area' nm 'already used'
m.m.n2a.adr = a
call mAlias adr, nm
m.m.p2a.adr = a
m.a.0 = 0
m.a.free.0 = 0
m.a.address = adr
m.a.newCode = newCd
m.a.freeCode = freeCd
return nm
endProcedure mNewArea
mAlias: procedure expose m.
parse arg oldNa, newNa
if symbol('m.m.n2a.oldNa') \== 'VAR' then
call err 'area' oldNa 'does not exist'
if oldNa == newNa then
return
if symbol('m.m.n2a.newNa') == 'VAR' then
call err 'newName' newNa 'for old' oldNa 'already used'
m.m.n2a.newNa = m.m.n2a.oldNa
return
endProcedure mAlias
mBasicNew: procedure expose m. ggArea
parse arg name
if symbol('m.m.n2a.name') \== 'VAR' then
call err 'area' name 'does not exists'
ggArea = m.m.n2a.name
if m.ggArea.free.0 > 0 then do
fx = m.ggArea.free.0
m.ggArea.free.0 = fx-1
m = m.ggArea.free.fx
end
else do
m.ggArea.0 = m.ggArea.0 + 1
m = m.ggArea.address'.'m.ggArea.0
end
return m
endProcedure mBasicNew
mNew: procedure expose m.
labelMNew:
parse arg name, arg, arg2, arg3
m = mBasicNew(name)
interpret m.ggArea.newCode
return m
endProcedure mNew
mReset: procedure expose m.
parse arg a, name
ggArea = m.m.n2a.name
m = a
interpret m.ggArea.newCode
return m
endProcedure mReset
mFree: procedure expose m.
parse arg m
p = 'M.P2A.'left(m, lastPos('.', m)-1)
area = m.p
if m.area.freeCode \== '' then
interpret m.area.freeCode
fx = m.area.free.0 + 1
m.area.free.0 = fx
m.area.free.fx = m
return
endProcedure mFree
/*--- iterate over all allocate elements of an area ------------------*/
mIterBegin: procedure expose m.
parse arg nm
a = m.m.n2a.nm
return m.a.address'.0'
endProcedure mIterBegin
mIter: procedure expose m.
parse arg cur
if cur == '' then
return ''
lx = lastPos('.', cur)
p = 'M.P2A.'left(cur, lx-1)
a = m.p
ix = substr(cur, lx+1)
do ix=ix+1 to m.a.0
n = m.a.address'.'ix
do fx=1 to m.a.free.0 while m.a.free \== n
end
if fx > m.a.free.0 then
return n
end
return ''
endProcedure mIter
/*--- cut stem a to length len ---------------------------------------*/
mCut: procedure expose m.
parse arg a, len
m.a.0 = len
return a
endProcedure mCut
/*--- add one or several arguments to stem m.a -----------------------*/
mAdd: procedure expose m.
parse arg a
ix = m.a.0
do ax = 2 to arg()
ix = ix + 1
m.a.ix = arg(ax)
end
m.a.0 = ix
return a'.'ix
endProcedure mAdd
/*--- pop last element from stem m.a ---------------------------------*/
mPop: procedure expose m.
parse arg a
ix = m.a.0
if ix < 1 then
call err 'pop from empty stem' a
m.a.0 = ix-1
return m.a.ix
endProcedure mPop
/*--- add to m.dst.* a (sub)sequence of m.src.* ----------------------*/
mAddSt: procedure expose m.
parse arg dst, src
dx = m.dst.0
do sx = 1 to m.src.0
dx = dx + 1
m.dst.dx = m.src.sx
end
m.dst.0 = dx
return
endProcedure mAddSt
/*--- find position of first occurrence of ele in stem m,
return 0 if nonemove a part of a stem -----------------------*/
mPos: procedure expose m.
parse arg m, ele, sx
if sx == '' then
sx = 1
do x=sx to m.m.0
if m.m.x = ele then
return x
end
return 0
endProcedure mPos
/*--- move a part of a stem ------------------------------------------*/
mMove: procedure expose m.
parse arg m, sx, dx
if dx < sx then do
y = dx
do x=sx to m.m.0
m.m.y = m.m.x
y = y + 1
end
end
else if dx > sx then do
y = m.m.0 + dx - sx
do x=m.m.0 by -1 to sx
m.m.y = m.m.x
y = y - 1
end
end
m.m.0 = m.m.0 + dx - sx
return
endProcedure mMove
/*--- insert a stem into another ------------------------------------*/
mInsert: procedure expose m.
parse arg m, tx, st
call mMove m, tx, tx+m.st.0
do sx=1 to m.st.0
dx = tx-1+sx
m.m.dx = m.st.sx
end
return
endProcedure mInsert
/*--- strip all elements of a stem -----------------------------------*/
mStrip: procedure expose m.
parse arg st, opt
if opt == '' then
opt = 'b'
do x=1 to m.st.0
m.st.x = strip(m.st.x, opt)
end
return st
endProcedure mStrip
/* cat the lines of a stem, possibly repeated --------------------------
args: stem, fmt see fGen: -------------------------------------*/
mCat: procedure expose m.
parse arg st, fmt
if m.st.0 < 1 then
return ''
res = f(fmt, m.st.1)
do sx=2 to m.st.0
res = res || fPlus(fmt 'nxt', m.st.sx)
end
return res || fFld(fmt 'end')
endProcedure mCat
mIni: procedure expose m.
if m.m.ini = 1 then
return
m.m.ini = 1
m.mAlfLC = 'abcdefghijklmnopqrstuvwxyz'
m.mAlfUC = translate(m.mAlfLC)
m.mAlfa = m.mAlfLC || m.mAlfUC
m.mAlfNum = m.mAlfa || '0123456789'
m.mAlfDot = m.mAlfNum || '.'
m.mAlfRex1 = m.mAlfa'@#$?' /* charset problem with ¬| */
m.mAlfRexR = m.mAlfRex1'.0123456789'
m.m.area.0 = 0
call mNewArea
return
endProcedure mIni
/* copy m end *********************************************************/
/* copy adrIsp begin *************************************************/
/**********************************************************************
lmd: catalog read
call sequence: lmdBegin, lmdNext*, lmdEnd
mit lmd service (mit save in file und read,
weil list zu langsam und listcat abstürzt)
1. arg (grp) als group dataset für lmd save
und dd name für file read
***********************************************************************/
lmdBegin: procedure expose m.
parse arg grp, lev
call adrIsp 'lmdinit listid(lmdId) level('lev')'
res = adrIsp('lmdlist listid(&lmdId) option(save) group('grp')', 4)
call adrIsp 'lmdfree listid(&lmdId)'
if res = 0 then do
call trc timing() 'lmdlist save' grp lev
call adrTso 'alloc dd('grp') shr dsn('grp'.datasets)'
end
else do
call trc 'no datasets found' timing() 'lmdlist save' grp lev
call adrTso 'alloc dd('grp') dummy'
end
call readDDBegin grp
return /* end lmdBegin */
lmdNext:
parse arg ggGrp, ggSt, withVolume
if \ readDD(ggGrp, ggSt) then
return 0
if withVolume \== 1 then
do ggIx=1 to value(ggSt'0')
x = value(ggSt || ggIx, word(value(ggSt || ggIx), 1))
end
return 1
endSubroutin lmdNext
lmdEnd: procedure expose m.
parse arg grp
call readDDEnd grp
call adrTso 'free dd('grp')'
return /* end lmdEnd */
lmd: procedure expose m.
parse arg lev, withVol
call lmdBegin gg1, lev
do while lmdNext(gg1, q., withVol)
do x=1 to q.0
call out q.x
end
end
call lmdEnd gg1
return
endProcedure lmd
/**********************************************************************
member list of a pds:
call sequence x=lmmBegin(dsn) lmmNext(x) * lmmEnd(x)
***********************************************************************/
lmm: procedure expose m.
parse arg dsn
id = lmmBegin(dsn)
do ix=1 by 1
m = lmmNext(id)
if m = '' then
leave
call out m
end
call lmmEnd id
return
endProcedure lmm
lmmBegin: procedure expose m.
parse arg dsn
mbr = dsnGetMbr(dsn)
pds = dsnSetMbr(dsn, )
call adrIsp "LMINIT DATAID(lmmId) DATASET('"pds"') ENQ(SHRW)"
call adrIsp "LMOPEN DATAID("lmmId") OPTION(INPUT) "
res = lmmId
if mbr <> '' then
res = res 'pattern('mbr')'
return res
endProcedure lmmBegin
lmmEnd: procedure expose m.
parse arg lmmId opt
call adrIsp "LMMLIST DATAID("lmmId") option(free)", 8
call adrIsp "LMCLOSE DATAID("lmmId")"
call adrIsp "LMFREE DATAID("lmmId")"
return
endProcedure lmmEnd
lmmNext: procedure expose m.
parse arg lmmId opt
if adrIsp("LMMLIST DATAID("lmmid")" ,
"OPTION(LIST) MEMBER(Mbr)" opt, 4 8) = 0 then
return strip(mbr)
else
return ''
endProcedure lmmNext
lmmRm: procedure expose m.
parse arg dsn, mbrs
mbrs = dsnGetMbr(dsn) mbrs
pds = dsnSetMbr(dsn, )
call adrIsp "LMINIT DATAID(lmmId) DATASET("pds") ENQ(SHRW)"
call adrIsp "LMOPEN DATAID("lmmId") OPTION(OUTPUT) "
err = ''
do wx=1 to words(mbrs)
m1 = word(mbrs, wx)
rr = adrIsp("lmmDel dataid("lmmId") member("m1")", 0 8 12)
if rc = 0 then
say 'removed' m1 'from' pds
else if rc = 8 then
say 'not found' m1 'in' pds
else do
err = 'error deleting' m1 'in' pds 'rc' rr strip(zerrlm)
say err
leave
end
end
call adrIsp "LMCLOSE DATAID("lmmId")"
call adrIsp "LMFREE DATAID("lmmId")"
if err <> '' then
call err err
return
endProcedure lmmRm
/*--- address ispf with error checking -------------------------------*/
adrIsp:
parse arg ggIspCmd, ggRet
address ispexec ggIspCmd
if rc = 0 then return 0
else if ggRet == '*' then return rc
else if wordPOS(rc, ggRet) > 0 then return rc
else
call err 'adr ispExec rc' rc 'in' ggIspCmd':' strip(zerrlm)
endSubroutine adrIsp
/*--- address editor with error checking -----------------------------*/
adrEdit:
parse arg ggEditCmd, ggRet
address isrEdit ggEditCmd
if rc = 0 then return 0
else if ggRet == '*' then return rc
else if wordPOS(rc, ggRet) > 0 then return rc
else
call err 'adr isrEdit rc' rc 'for' ggEditCmd
endSubroutine adrEdit
/* copy adrIsp end *************************************************/
/* copy adrTso begin *************************************************/
/*--- send ggTsoCmd to tso, fail if rc <> 0 or not listed in ggRet ---*/
adrTso:
parse arg ggTsoCmd, ggRet
address tso ggTsoCmd
if rc == 0 then return 0
else if ggRet == '*' then return rc
else if wordPos(rc, ggRet) > 0 then return rc
else
call err 'adrTso rc' rc 'for' ggTsoCmd
return /* end adrTso */
/*--- format dsn from tso format to jcl format -----------------------*/
dsn2jcl: procedure expose m.
parse upper arg dsn ., addPrefix
if left(dsn,1) = "'" then
return strip(dsn, 'b', "'")
sp = sysvar('SYSPREF')
if sp == '' then
sp = userid()
cx = pos('~', dsn)
if cx < 1 & addPrefix == 1 then
return sp'.'dsn
do while cx \== 0
le = left(dsn, cx-1)
ri = substr(dsn, cx+1)
if right(le, 1) == '.' | left(ri, 1) == '.' then
dsn = le || sp || ri
else
dsn = le || left('.', le \== '') || sp ,
|| left('.', ri \== '') || ri
cx = pos('~', spec, cx)
end
return dsn
endProcedure dsn2Jcl
/*--- format dsn from jcl format to tso format -----------------------*/
jcl2dsn: procedure expose m.
parse arg dsn .
return "'"dsn"'"
endProcedure jcl2dsn
dsnSetMbr: procedure expose m.
parse arg dsn, mbr
bx = pos('(', dsn)
if bx > 0 then
dsn = strip(left(dsn, bx-1))
if mbr <> '' then
dsn = dsn'('strip(mbr)')'
return dsn
endProcedure dsnSetMbr
dsnGetMbr: procedure expose m.
parse arg dsn
lx = pos('(', dsn)
rx = pos(')', dsn, lx+1)
if lx < 1 then
return ''
else if lx < rx then
return substr(dsn, lx+1, rx-lx-1)
else
return strip(substr(dsn,lx+1))
endProcedure dsnGetMbr
/**********************************************************************
io: read or write a dataset with the following callsequences:
read: readDDBegin, readDD*, readDDEnd
write: writeBegin, writeDD*, writeEnd
readDD returns true if data read, false at eof
***********************************************************************/
/*--- prepare reading from a DD --------------------------------------*/
readDDBegin: procedure expose m.
parse upper arg ggDD
call errAddCleanup 'call readDDEnd' ggDD', "*"'
return /* end readDDBegin */
/*--- read from DD ggDD into ggSt, return false at eof ---------------*/
readDD:
parse arg ggDD, ggSt, ggCnt
if ggCnt = '' then
ggCnt = 100
call adrTso 'execio' ggCnt 'diskr' ggDD '(stem' ggSt')', 2
return (value(ggSt'0') > 0)
return /* end readDD */
/*--- finish reading DD ggDD ----------------------------------------*/
readDDEnd: procedure expose m.
parse upper arg ggDD, ggRet
call errRmCleanup 'call readDDEnd' ggDD', "*"'
return adrTso('execio 0 diskr' ggDD '(finis)', ggRet)
endProcedure readDDEnd
/*--- prepare writing to DD ggDD -------------------------------------*/
writeDDBegin: procedure expose m.
parse upper arg ggDD
/* ensure file is erased, if no records are written */
call adrTso 'execio' 0 'diskw' ggDD '(open)'
call errAddCleanup 'call writeDDEnd' ggDD', "*"'
return /* end writeDDBegin */
/*--- write to gg ggDD from stem ggSt, ggCnt records -----------------*/
writeDD:
parse arg ggDD, ggSt, ggCnt
if ggCnt == '' then
ggCnt = value(ggst'0')
call adrTso 'execio' ggCnt 'diskw' ggDD '(stem' ggSt')'
return
endSubroutine writeDD
/*--- end writing to dd ggDD (close) --------------------------------*/
writeDDEnd: procedure expose m.
parse upper arg ggDD, ggRet
call errRmCleanup 'call writeDDEnd' ggDD', "*"'
return adrTso('execio 0 diskw' ggDD '(finis)', ggRet)
endProcedure writeDDEnd
/*--- readNx: read next line, using buffer ---------------------------*/
/*--- begin: allocate dsnSpec and ini ------------------------ -------*/
readNxBegin: procedure expose m.
parse arg m, m.m.dsn, m.m.dd, m.m.Cnt
if m.m.dd = '' then
m.m.dd = 'DDNX'
if m.m.cnt = '' then
m.m.cnt = 1000
m.m.cx = m.m.cnt + 999
m.m.buf0x = 0
m.m.0 = 0
call dsnAlloc 'dd('m.m.dd')' m.m.dsn
call readDDBegin m.m.dd
return m
endProcedure readDDNxBegin
/*--- return the stem of the next line, or '' at end -----------------*/
readNx: procedure expose m.
parse arg m
ix = m.m.cx + 1
m.m.cx = ix
if m.m.cx <= m.m.0 then
return m'.'ix
m.m.buf0x = m.m.buf0x + m.m.0
if \ readDD(m.m.dd, 'M.'m'.', m.m.cnt)then
return ''
m.m.cx = 1
return m'.1'
endProcedure readDDNx
/*--- return the position (line number) of reader
plus le characters of the current line (default 50) ------*/
readnxPos: procedure expose m.
parse arg m, le
li = m'.'m.m.cx
li = strip(m.li, 't')
if arg() < 2 then
le = 50
if le < 1 then
li = ''
else if length(li) <= le then
li = ':' li
else
li = ':' left(li, le-3)'...'
return 'line' (m.m.buf0x + m.m.cx)li
endProcedure readnxPos
/*--- close and deallocate ------------------------------------------*/
readNxEnd: procedure expose m.
parse arg m
call readDDEnd m.m.dd
call tsoFree m.m.dd
return
endProcedure readDDNxEnd
/*--- standardise a dsn spec
word1 dsName or -
word2 dd or -
word3 disp or -
word4 to first : attributes in tso format
after first : attributes for new allocation
----------------------------------------------------------------------*/
dsnSpec: procedure expose m.
parse upper arg spec
rr = '' /* put leading - in separate words */
do sx=1 while words(rr) < 3 & wx \= ''
wx = word(spec, sx)
do while abbrev(wx, '-') & words(rr) < 3
wx = substr(wx, 2)
rr = rr '-'
end
rr = rr wx
end
spec = rr subWord(spec, sx)
na = ''
dd = ''
di = ''
if left(spec, 1) = '&' then /* external spec is handled ok */
spec = strip(substr(spec, 2))
do wx=1 by 1
w = word(spec, wx)
if w = '' | abbrev(w, '.') | abbrev(w, ':') then
leave
else if wordPos(w, 'OLD SHR MOD NEW')>0 | abbrev(w, 'SYSO') then
di = w
else if w = 'CATALOG' then
di = di w
else if abbrev(w, 'DD(') then
dd = substr(w, 4, length(w)-4)
else if abbrev(w, 'DSN(') then
na = strip(substr(w, 5, length(w)-5))
else if na == '' then
na = dsn2jcl(w)
else if dd == '' then
dd = w
else if di == '' then
di = w
else
leave
end
if na == '' then
na = '-'
else if abbrev(na, "'") then
na = substr(na, 2, length(na)-2)
if dd == '' then dd = '-'
if di == '' then di = '-'
re = subword(spec, wx)
if abbrev(re, '.') then
re = substr(re, 2)
return na dd di re
endProcedure dsnSpec
/*--- alloc a dsn with dsnAlloc
if the dsn is inuse wait and retry
until either the allocation is successfull
or the timeout occurs --------------------------------------*/
dsnAllocWait: procedure expose m.
parse upper arg spec, pDi, pDD, timeOut
x = max(1, arg() - 1)
do rt=0
m.adrTsoAl.1 = ''
m.adrTsoAl.2 = ''
m.adrTsoAl.3 = ''
call outtrap m.adrTsoAl.
res = dsnAlloc(spec, pDi, pDD, '*')
call outtrap off
if \ abbrev(res, ' ') then
return res
msg = m.adrTsoAl.1'\n'm.adrTsoAl.2'\n'm.adrTsoAl.3
if rt > timeOut & timeOut \== '' then
return err('timeout allocating' spec time() '\n'msg)
if pos('DATA SET IS ALLOCATED TO ANOTHER', msg) < 1 then
return err('allocating' spec'\n'msg)
say time() 'sleep and retry alloc' spec
call sleep 1, 0
end
endProcedure dsnAllocWait
/*--- alloc a dsn or a dd
spec '-'<ddName>
datasetName? disposition? '.'? attributes? (':' newAtts)?
disp default disposition
dd default dd name
retRc erlaubte ReturnCodes (leer = 0)
returns if ok then ddName <rexx for free> otherwise rc -----*/
dsnAlloc: procedure expose m.
parse upper arg spec, pDi, pDD, retRc
parse value dsnSpec(spec) with na dd di rest
if na = '-' then
m.dsnAlloc.dsn = ''
else
m.dsnAlloc.dsn = na
if na == '-' & dd \== '-' & di == '-' & rest = '' then
return dd
if dd == '-' & pDD \== '' then
dd = pDD
if dd == '-' then do
if symbol('m.adrTso.ddNum') = 'VAR' then
dd = m.adrTso.ddNum + 1
else
dd = 1
m.adrTso.ddNum = dd
dd = 'DD' || dd
end
if di = '-' & pDi \== '' then
di = pDi
if di = '-' then
di = 'SHR'
else if pos('(', na) < 1 then
nop
else if di = 'MOD' then
call err 'disp mod for' na
else
di = 'SHR'
if pos('/', na) > 0 then
return csmAlloc(na dd di rest, retRc)
else
return tsoAlloc(na dd di rest, retRc)
endProcedure dsnAlloc
tsoAlloc: procedure expose m.
parse arg na dd disp rest ':' nn, retRc
c = 'alloc dd('dd')' disp
if na \== '-' then
c = c "DSN('"na"')"
else if disp = 'NEW' and nn \== '' then
c = c dsnCreateAtts(,nn)
call outtrap m.adrTsoAl.
alRc = adrTso(c rest, '*')
call outtrap off
if alRc = 0 then do
call errAddCleanup 'call tsoFree' dd', "*"'
return dd 'call tsoFree' dd';'
end
if nn \= '' & wordPos(disp, 'OLD SHR') > 0 ,
& sysDsn("'"m.dsnAlloc.dsn"'") == 'DATASET NOT FOUND' then do
say 'tsoAlloc creating' c rest ':'nn
call adrTso 'alloc dd('dd') new catalog' dsnCreateAtts(na, nn)
call adrTso 'free dd('dd')'
return tsoAlloc(na dd disp rest, retRc)
end
do ax=1 to m.adrTsoAl.0
say m.adrTsoal.ax
end
if retRc = '*' | wordPos(alRc, retRc) > 0 then
return ' ' alRc
call err 'tsoAlloc rc' alRc 'for' c rest
endProcedure tsoAlloc
tsoAtts: procedure expose m.
parse arg dsn
rc = listDsi("'"dsn"' SMSINFO")
if rc = 0 then
mv = ''
else if rc = 4 & sysReason = 19 then do
mv = 'UNITCNT(30)'
say 'multi volume' mv
end
else if rc ^= 0 then
call err 'listDsi rc' rc 'reason' sysReason,
sysMsgLvl1 sysMsgLvl2
al = 'CAT'
al = ''
if right(sysDsSms, 7) == 'LIBRARY' ,
| abbrev(sysDsSms, 'PDS') then
al = al 'DSNTYPE(LIBRARY)'
if sysUnits = 'TRACK' then
sysUnits = 'TRACKS'
al = al "DSORG("sysDSorg") MGMTCLAS("sysMgmtClass")",
"DATACLAS("sysDataClass")" ,
"RECFM("translate('1 2 3', ' 'sysREcFM, ' 123')")",
"LRECL("SYSLRECL")",
"blksize("sysBLkSIZE")",
"SPACE("sysPrimary"," sysSeconds")" sysUnits mv
return al
endProcedure tsoAtts
tsoFree: procedure expose m.
parse arg dd, ggRet
call adrTso 'free dd('dd')', ggRet
call errRmCleanup 'call tsoFree' dd', "*"'
return
endProcedure tsoFree
dsnCreateAtts: procedure expose m.
parse arg dsn, atts, forCsm
forCsm = forCsm == 1
aU = ' 'translate(atts)
if abbrev(atts, ':') then do
parse var atts a1 atts
bl = 32760
rl = substr(a1, 3)
if abbrev(a1, ':F') then do
if rl = '' then
rl = 80
recfm='f b'
bl = bl - (bl // rl)
end
else do
if rl = '' then
rl = bl-4
recfm = substr(a1, 2, 1) 'b'
end
if forCsm then
atts = atts "recfm("space(recfm, 0)") lrecl("rl")",
"blkSize("bl")"
else
atts = atts "recfm("recfm") lrecl("rl") block("bl")"
end
if pos('(', dsn) > 0 & pos(' DSNTYPE(', aU) < 1 ,
& pos(' DSORG(', aU) < 1 then
atts = atts 'dsntype(library) dsorg(po)'
if pos(' MGMTCLAS(', aU) < 1 then
atts = atts 'mgmtclas(COM#A091)'
if pos(' SPACE(', aU) < 1 then
if forCsm then
atts = atts 'space(10, 1000) cylinder'
else
atts = atts 'space(10, 1000) cyl'
if dsn == '' then
return atts
return "dataset('"dsnSetMbr(dsn)"')" atts
endProcedure dsnCreateAtts
/*--- read the dataset specified in ggDsnSpec to stem ggSt -----------*/
readDSN:
parse arg ggDsnSpec, ggSt
ggAlloc = dsnAlloc(ggDsnSpec, 'SHR', 'readDsN')
call adrTso 'execio * diskr' word(ggAlloc, 1) '(stem' ggSt' finis)'
interpret subword(ggAlloc, 2)
return
endSubroutine readDsn
/*--- write the dataset specified in ggDsnSpec from stem ggSt
write ggCnt records if not empty otherwise ggst0
if ggSay 1 then say ... records written to ... -------------*/
writeDSN:
parse arg ggDsnSpec, ggSt, ggCnt, ggSay
if ggCnt == '' then
ggCnt = value(ggst'0')
ggAlloc = dsnAlloc(ggDsnSpec, 'OLD', 'readDsN')
call adrTso 'execio' ggCnt 'diskw' word(ggAlloc, 1) ,
'(stem' ggSt 'open finis)'
interpret subword(ggAlloc, 2)
if ggSay == 1 | m.debug == 1 then
say ggCnt 'records written to' ggDsnSpec
return
endSubroutine writeDsn
copyDSN: procedure expose m.
parse arg frSpec, toSpec, ggSay
frDD = dsnAlloc(frSpec, 'SHR', 'FRDD')
toDD = dsnAlloc(toSpec, 'OLD', 'TODD')
call readDDBegin word(frDD, 1)
call writeDDBegin word(toDD, 1)
cnt = 0
do while readDD(word(frDD, 1), r.)
call writeDD word(toDD, 1), r.
cnt = cnt + r.0
end
call readDDEnd word(frDD, 1)
call writeDDEnd word(toDD, 1)
interpret ';' subword(frDD, 2) '; ; ;' subword(toDD, 2)
if ggSay == 1 | m.debug == 1 then
say cnt 'records copied from' frSpec 'to' to toSpec
return
endSubroutine writeDsn
/* copy adrTso end ****************************************************/
/* copy err begin ******************************************************
messages, errorhandling,help
***********************************************************************/
errIni: procedure expose m.
if m.err.ini == 1 then
return
call outIni
m.err.ini = 1
m.err.handler = ''
m.err.cleanup = ';'
m.err.opt = ''
return
endProcedure errIni
/* configure err -----------------------------------------------------*/
errReset: procedure expose m.
call errIni
parse arg m.err.opt, m.err.handler
if pos('I', translate(m.err.opt)) > 0 then
if errOS() \== 'LINUX' then
if sysVar('sysISPF') = 'ACTIVE' then
call adrIsp 'control errors return'
return
endSubroutine errReset
/*--- error routine: abend with message ------------------------------*/
err:
parse arg ggTxt, ggOpt
call errIni
drop err handler cleanup opt call return
if ggOpt == '' & m.err.handler \== '' then do
if 1 then do /* no detection of recursive err call loop
--> will anyway fail by stack overflow */
interpret m.err.handler
end
else do
/* avoid recursive err call loop */
drop call return
if symbol('m.err.call') \== 'VAR' then
m.err.call = 1
else
m.err.call = m.err.call + 1
if m.err.call > 10 then do
say 'errHandler loop:' m.err.handler
end
else do
m.err.return = 1
call errInterpret m.err.handler
m.err.call = m.err.call - 1
if m.err.return then
return result
end
end
end
call outDst
call errSay ggTxt, 'e'
call errCleanup
if ggOpt == '' then
ggOpt = m.err.opt
ggOpt = translate(ggOpt)
if pos('T', ggOpt) > 0 then do
trace ?r
say 'trace ?r in err'
end
if pos('H', ggOpt) > 0 then do
call errSay 'divide by zero to show stackHistory', 'e'
x = 1 / 0
end
call errSay 'exit(12)', 'e'
exit errSetRc(12)
endSubroutine err
/*--- error routine: user message cleanup exit -----------------------*/
errEx:
parse arg ggTxt
call errIni
call outDst
call errSay ggTxt
call errCleanup
exit 8
endProcedure errEx
errAddCleanup: procedure expose m.
parse arg code
if m.err.ini \== 1 then
call errIni
/* concatenate backwards, then it is executed also backwards */
m.err.cleanup = ';'code || m.err.cleanup
return
endProcedure errAddCleanup
errRmCleanup: procedure expose m.
parse arg code
if m.err.ini \== 1 then
call errIni
cx = pos(';'code';', m.err.cleanup)
if cx > 0 then
m.err.cleanup = left(m.err.cleanup, cx) ,
|| substr(m.err.cleanup, cx + length(code)+2)
return
endProcedure errRmCleanup
errCleanup: procedure expose m.
call errIni
cl = m.err.cleanup
if cl = ';' then
return
m.err.cleanup = ';'
say 'err cleanup begin' cl
call errInterpret cl
say 'err cleanup end' cl
return
endProcedure errCleanup
errInterpret: procedure expose m.
parse arg code
interpret code
m.err.return = 0
return
endProcedure errInterpret
/*--- assert that the passed rexx expression evaluates to true -------*/
assert:
interpret 'assertRes =' arg(1)
if \ assertRes then
call err 'assert failed' arg(1)':' arg(2)
return
endProcedure assert
/*--- output an errorMessage msg with pref pref
split message in lines at '/n' ---------------------------*/
errSay: procedure expose m.
parse arg msg, pref
parse source . . ggS3 . /* current rexx */
if pref == 'e' then
msg = 'fatal error in' ggS3':' msg
else if pref == 'w' then
msg = 'warning in' ggS3':' msg
else if pref \== '' then
msg = pref':' msg
return outNl(msg)
endProcedure errSay
/*--- abend with Message after displaying help -----------------------*/
errHelp: procedure expose m.
parse arg msg, op
call errSay msg, 'e'
call help
call err msg, op
endProcedure errHelp
/*--- return the Operating System we are running on: TSO or LINUX ---*/
errOS: procedure expose m.
parse source os .
return os
endProcedure errOS
/*--- set rc for ispf: -------------------------------------------------
if a cmd is run by ispStart, its RC is ignored,
but ISPF passes the value of the shared varible 3IspfRc
back as return code
----------------------------------------------------------------------*/
errSetRc: procedure expose m.
parse arg zIspfRc
if errOS() \== 'LINUX' then
if sysVar('sysISPF') = 'ACTIVE' then
address ispExec vput 'zIspfRc' shared
return zIspfRc
endProcedure errSetRc
/*--- output a trace message if m.tr is set -----------------------*/
trc: procedure expose m.
parse arg msg
if m.trace == 1 then
call out 'trc:' msg
return
endProcedure trc
debug: procedure expose m.
parse arg msg
if m.debug == 1 then
call out 'debug' msg
return
endProcedure debug
/*--- display the first comment block of the source as help ----------*/
help: procedure expose m.
parse source . . s3 .
call out right(' help for rexx' s3, 79, '*')
do ax=1 to arg()
say ' ' arg(ax)
end
do lx=1 by 1
if pos('/*', sourceLine(lx)) > 0 then
leave
else if lx > 10 then do
call out 'initial commentblock not found for help'
return
end
end
do lx=lx+1 by 1
li = strip(sourceLine(lx), 't', ' ')
if pos('*/', li) > 0 then
leave
call out li
end
call out right(' end help for rexx' s3, 79, '*')
return 4
endProcedure help
/*--- output all lines (separated by '\n') of all args --------------*/
outNl: procedure expose m.
do ax=1 to max(1, arg())
msg = arg(ax)
sx = 0
bx = -1
do lx=1 until bx >= length(msg)
ex = pos('\n', msg, bx+2)
if ex < 1 then
ex = length(msg)+1
call out substr(msg, bx+2, ex-bx-2)
bx = ex
end
end
return 0
endProcedure outNl
/* copy err end *****************************************************/
/* copy ut begin *****************************************************/
/*--- if function warning all3 arguments get evaluated|
e.g if(x=0, 'infinity', 1/0) will fail| -----------*/
if: procedure expose m.
parse arg co, ifTrue, ifFalse
if co then
return ifTrue
else
return ifFalse
endProcedure if
/*--- embedded ASSignement:
assign the second argument to the variable with name in first arg
and return the value assigned ----------------------------------*/
ass:
call value arg(1), arg(2)
return arg(2)
/*--- embedded ASSignement only if NotNull:
assign the second argument to the variable with name in first arg
if the second arg is not null, return new value ---------------*/
assIf:
if arg(2) == '' then
return value(arg(1))
call value arg(1), arg(2)
return arg(2)
/*--- return first nonNull argument ---------------------------------*/
nn:
if arg(1) \== '' then
return arg(1)
if arg(2) \== '' then
return arg(2)
call err 'nn() both args empty'
/*--- embedded ASSignement return NotNull:
assign the second argument to the variable with name in first arg
and return 1 if value not null, 0 if null ----------------------*/
assNN:
call value arg(1), arg(2)
return arg(2) \== ''
/*--- return current time and cpu usage ------------------------------*/
timing: procedure expose m.
return return time() 'ela='time('E') 'cpu='sysvar('syscpu'),
'su='sysvar('syssrv')
timingTest: procedure expose m.
say 'begin' timing() sysvar('sysnode')
do 30000000
end
say 'end ' timing()
return
/*--- sleep several seconds ------------------------------------------*/
sleep: procedure expose m.
parse arg secs, sayIt
if sayit <> 0 then
say 'sleeping' secs 'secs' time()
CALL SYSCALLS 'ON'
ADDRESS SYSCALL "sleep" secs
CALL SYSCALLS 'OFF'
if sayit <> 0 then
say 'slept' secs 'secs' time()
return
endProcedure sleep
/*--- elongate inp with spaces up to given len -----------------------*/
elong: procedure expose m.
parse arg inp, len
if length(inp) >= len then
return inp
return left(inp, len)
endProcedure elong
/*--- quote string txt using quoteChar qu ("""" ==> ") ---------------*/
quote: procedure expose m.
parse arg txt, qu
if qu = '' then
qu = '"'
res = qu
ix = 1
do forever
qx = pos(qu, txt, ix)
if qx = 0 then
return res || substr(txt, ix) || qu
res = res || substr(txt, ix, qx-ix) || qu || qu
ix = qx + length(qu)
end
endProcedure quote
/*--- return the count of occurrences of needle in heyStack ----------*/
posCount: procedure expose m.
parse arg needle, hayStack, start, fin
if start = '' then
start = 1
if fin = '' then
fin = length(hayStack) + 1 - length(needle)
do cnt = 0 by 1
start = pos(needle, haystack, start)
if start < 1 | start > fin then
return cnt
start = start + length(needle)
end
endProcedure posCount
repAll: procedure expose m.
parse arg src, w, new
res = ''
cx = 1
do forever
nx = pos(w, src, cx)
if nx < 1 then
return res || substr(src, cx)
res = res || substr(src, cx, nx-cx) || new
cx = nx + length(w)
end
endProcedure repAll
repAllWords: procedure expose m.
parse arg src, w, new
res = ''
wx = 0
cx = 1
do forever
wx = wordPos(w, src, wx+1)
if wx < 1 then
return res || substr(src, cx)
nx = wordindex(src, wx)
res = res || substr(src, cx, nx-cx) || new
cx = nx + length(w)
end
endProcedure repAllWords
/* copy ut end ********************************************************/
}¢--- A540769.WK.REXX.O13(DB2CAT) cre=2013-01-21 mod=2013-01-21-16.45.52 A540769 ---
/* copy db2Cat begin **************************************************/
catTbLastCol: procedure expose m.
parse upper arg cr, tb
return sql2one( ,
"select strip(char(colcount)) || ' ' || strip(c.name) one" ,
"from sysibm.sysTables t left join sysibm.sysColumns c" ,
"on c.tbCreator = t.creator and c.tbName = t.name" ,
"and c.colNo = t.colCount" ,
"where t.creator = '"cr"' and t.name = '"tb"'", ,'')
endProcedure catTbLastCol
catTbCols: procedure expose m.
parse upper arg cr, tb
if sql2St("select strip(name) name " ,
"from sysibm.sysColumns " ,
"where tbcreator = '"cr"' and tbname='"tb"'",
"order by colNo", ggSt) < 1 then
return ''
res = m.ggst.1.name
do cx=2 to m.ggst.0
res = res m.ggst.cx.name
end
return res
endProcedure catTbCols
catTbColsTrunc: procedure expose m.
parse upper arg cr, tb, maxL
if sql2St("select strip(name) name, colType, length, length2" ,
"from sysibm.sysColumns " ,
"where tbcreator = '"cr"' and tbname='"tb"'",
"order by colNo", ggSt) < 1 then
return ''
res = ''
do cx=1 to m.ggst.0
ty = m.ggSt.cx.colType
if pos('LOB', ty) > 0 then
res = res', substr('m.ggSt.cx.name', 1,' ,
min(maxL, m.ggSt.cx.length2)') 'm.ggSt.cx.name
else if pos('CHAR', ty) > 0 & m.ggSt.cx.length > maxL then
res = res', substr('m.ggSt.cx.name', 1,' maxL')',
m.ggSt.cx.name
else
res = res',' m.ggSt.cx.name
end
return substr(res, 3)
endProcedure catTbColsTrunc
catIxKeys: procedure expose m.
parse upper arg cr, ix
sql = "select colSeq, colName, ordering" ,
"from sysibm.sysKeys" ,
"where ixCreator = '"cr"' and ixName = '"ix"'" ,
"order by colSeq"
call sqlPreOpen 1, sql
res = ''
do kx=1 while sqlFetchInto(1, ':sq, :col, :ord')
if sq \= kx then
call err 'expected' kx 'but got colSeq' sq ,
'in index' cr'.'ix'.'col
res = res || strip(col) || translate(ord, '<>?', 'ADR')
end
call sqlClose 1
return res
endProcedure catIxKeys
catColCom: procedure expose m.
parse upper arg fCr, fTb, tCr, tTb
sql = "select t.name, t.colType, t.nulls, t.""DEFAULT""" ,
", coalesce(f.nulls, 'new')" ,
"from sysibm.sysColumns t" ,
"left join sysibm.sysColumns f" ,
"on f.tbCreator = '"fCr"' and f.tbName = '"fTb"'" ,
"and f.name = t.name" ,
"where t.tbCreator = '"tCr"' and t.tbName = '"tTb"'" ,
"order by t.colNo"
call sqlPreOpen 1, sql
pr = ' '
do kx=1 while sqlFetchInto(1, ':na, :ty, :nu, :de, :nn')
/* say kx na ty nu de 'nn' nn */
if pos('CHAR', ty) > 0 then
dv = "''"
else if pos('INT' ,ty) > 0 | wordPos(ty, 'REAL FLOAT') > 0 then
dv = 0
else if ty == 'TIMESTMP' then
dv = '0001-01-01-00.00.00'
else if pos('LOB', ty) > 0 then
dv = ty"('')"
else
dv = '???'
if nu = 'Y' then
dv = 'case when 1=0 then' dv 'else null end'
r = '???'
if ty = 'ROWID' then do
r = '--'
end
else if nn == 'new' then do
if de = 'Y' then
r = '--'
else if nu == 'N' then
r = dv
else
r = 'case when 1=0 then' dv 'else null end'
end
else do
if nu = 'Y' | (nu = nn) then
r = ''
else
r = 'coalesce('na',' dv')'
end
if abbrev(r, '--') then do
r = ' ' r
end
else do
r = pr r
pr = ','
end
if pos('???', r) > 0 then
call err 'no default for type' ty 'in' tCr'.'tTb'.'na
call out r na
end
call sqlClose 1
return
endProcedure catColCom
/* copy db2Cat end **************************************************/
}¢--- A540769.WK.REXX.O13(DB2JAA) cre=2013-10-30 mod=2013-10-30-12.32.56 A540769 ---
wie gehts
}¢--- A540769.WK.REXX.O13(DB2MVEXT) cre=2012-09-17 mod=2012-09-19-13.45.35 A540769 ---
/* rexx ****************************************************************
***********************************************************************/
call errReset 'h'
call errAddCleanup 'call sqlExec rollback'
m.inpDs = 'DSN.MVEXT.CMDLIST'
m.dbSy = 'DBOC'
call iniA2V
say 'reading' m.inpDs
call readNxBegin ii, m.inpDs
do lx=1 until abbrev(m.il, ' SSI ')
il = readNx(ii)
if il == '' then
call err 'no SSI header found in' m.inpDs
end
h1 = m.il
il = readNx(ii)
h2 = m.il
m.col.0 = 0
call addCol 'dbMbr', pos('Trgt', h2)
call addCol 'system', pos('System', h2)
call addCol 'date', pos('Date', h2)
call addCol 'time', pos('Time', h2)
call addCol 'verb', pos('Verb', h2)
call addCol 'cmd', pos('Line 1', h2)
call addCol 'corr', pos('Corrid', h1)
call addCol 'auth', pos('Authid', h1)
call addCol 'operator', pos('Operator', h1)
il = readNx(ii)
call sqlRxConnect m.dbSy
call errAddCleanup 'call sqlExec rollback'
call preInsert 55
cIns = 0
cDup = 0
mode = ''
do lx=lx+2 while il \== ''
call getCols cc, m.il
sc = sqlRxExecute('55 -803', m.cc.dbMbr, m.cc.system, m.cc.tst,
, m.cc.verb,
, m.cc.cmd , m.cc.corr , m.cc.auth , m.cc.operator)
if sc = 0 then
nMode = 'ins'
else
nMode = 'dup'
if mode \== nMode then do
call finishMode
cMode = 0
mode = nMode
mFirst = m.cc.dbMbr m.cc.tst
end
cMode = cMode + 1
mLast = m.cc.dbMbr m.cc.tst m.cc.cmd
if cMode // 10000 = 0 then do
call sqlCommit
call preInsert 55
say left(' ' time() mode cMode mLast, 78)
end
il = readNx(ii)
end
call sqlCommit
call finishMode
say 'total' cIns 'inserts and' cDup 'duplicates'
exit
finishMode:
if mode == '' then
return
say left(right(cMode, 7) mode mFirst mLast, 78)
if mode == 'ins' then
cIns = cIns + cMode
else
cDup = cDup + cMode
return
preInsert: procedure expose m.
parse arg cx
call sqlPrepare cx, 'insert into oa1p.tadmCmd' ,
'values(?, ?, ?, ?, ?, ?, ?, ?)'
return
endProcedure preInsert
addCol: procedure expose m.
m = 'COL'
fy = m.m.0
fx = fy + 1
parse upper arg m.m.fx.col, m.m.fx.pos
m.m.fx.len = ''
if fy > 0 then do
m.m.fy.len = m.m.fx.pos - m.m.fy.pos
if m.m.fy.len < 1 then
call err 'not ascending col' fy m.m.fy.col m.m.fy.pos ,
'>' fx m.m.fx.col m.m.fx.pos
end
m.m.0 = fx
return
endProcedure addCol
getCols: procedure expose m.
parse arg to, li
m = 'COL'
t = ''
do cx=1 to m.col.0 - 1
c1 = m.m.cx.col
m.to.c1 = strip(substr(li, m.m.cx.pos, m.m.cx.len))
end
c1 = m.m.cx.col
m.to.c1 = strip(substr(li, m.m.cx.pos))
m.to.tst = translate(m.to.date'-'m.to.time, '.' ,':')
v1 = translate(m.to.verb)
if symbol('m.a2v.v1') == 'VAR' then
m.to.verb = m.a2v.v1
else
m.to.verb = v1
return
endProcedure getCols
iniA2V: procedure expose m.
m.a2v.f = 'MODIFY'
m.a2v.p = 'STOP'
v3 = ACCESS ALTER ARCHIVE CANCEL CHANGE DISPLAY MODIFY,
RECOVER REFRESH START STOP TERM TRACE
do vx=1 to words(v3)
k = left(word(v3, vx), 3)
m.a2v.k = word(v3, vx)
end
return
endProcedure iniA2V
/* copy sql begin ***************************************************
sql interface
***********************************************************************/
/*--- initialize sqlRx (belongs to sqlQ, but currently only one|) ----*/
sqlIni: procedure expose m.
if m.sql.ini == 1 then
return
m.sqlNull = '---'
m.sqlInd = 'sqlInd'
m.sqlRetOK.0 = 0
m.sqlCAMsg = 0
m.sqlSuMsg = 2
call sqlPushRetOk
m.sql.ini = 1
m.sql.conType = ''
m.sql.conSSID = ''
return 0
endProcedure sqlIni
/*--- connect and/or disconnect to DB2 -------------------------------*/
sqlConnect: procedure expose m.
parse upper arg sys, retOk
if sys \== '' then
nop
else if sysvar(sysnode) == 'RZ1' then
sys = 'DBAF'
else
call err 'no default subsys for' sysvar(sysnode)
call sqlOIni
hst = ''
if pos('/', sys) > 0 then do
parse value space(sys, 0) with hst '/' sys
cTy = 'Csm'
end
else do
cTy = 'Rx'
end
if m.sql.conType == cTy & m.sqlHost==hst & m.sqlConSSID == sys then
return 0
if m.sql.conType \== '' then
call sqlDisconnect
res = 0
if cTy = 'Rx' then
res = sqlRxConnect(sys, retOk)
if res < 0 then
return res
m.sql.conType = cTy
m.sql.conhost = hst
m.sql.conSSID = sys
m.sql.connection = oNew('Sql'cTy'Connection')
return res
endProcedure sqlConnect
sqlDisconnect: procedure expose m.
parse arg retOk
if m.sql.conType == 'Rx' then
call sqlRxDisconnect
m.sql.conType = ''
m.sql.conhost = ''
m.sql.conSSID = ''
return 0
endProcedure sqlDisonnect
/*--- execute a query from sql, with one resultset -------------------*/
sqlRxQuery: procedure expose m.
parse arg cx, src, retOk
m.sql.cx.updateCount = ''
m.sql.cx.resultSet = ''
m.sql.cx.needDesc = 1
res = sqlPrepare(cx, src, retOk, 1)
if res < 0 then
return res
res = sqlExec('declare c'cx 'cursor for s'cx, retOk)
if res < 0 then
return res
res = sqlExec('open c'cx, retOk)
if res < 0 then
return res
call sqlRxFetchVars cx
m.sql.cx.updateCount = sqlErrd.3
m.sql.cx.resultSet = cx
return res
endProcedure sqlRxQuery
/*--- fetch next row to m.dst.* at end return false ------------------*/
sqlRxFetch: procedure expose m.
parse arg cx, dst, retOk
if retOk == '' then
retOk = 100 m.sqlRetOk
fetCode = sqlExec('fetch c'cx 'into' sqlRxFetchVars(cx), retOk)
if fetCode == 100 then
return 0
if fetCode < 0 then
return fetCode
call sqlSetNull cx, dst
return 1
endProcedure sqlRxFetch
/*--- close cursor 'c'cx ---------------------------------------------*/
sqlRxClose: procedure expose m.
parse arg cx, retOk
return sqlExec('close c'cx, retOk)
endProcedure sqlRxClose
/*-- execute an sql with no resultset, but possibly outParms ---------*/
sqlRxUpdate: procedure expose m.
parse arg cx, src, retOk
m.sql.cx.updateCount = ''
m.sql.cx.resultSet = ''
bx = verify(src, '( ')
if bx > 0 then
fun = translate(word(substr(src, bx), 1))
if fun = 'SET' then do
w2 = translate(word(substr(src, bx), 2))
if \ abbrev(w2, ':') then
return sqlExImm(src, retOk)
trace ?r
ex = pos('=', w2)
if ex = 0 then
ex = length(w2)+1
var = strip(substr(w2, 2, ex-2))
if var = '' then
call err 'bad hostVar in' src
m.sql.outVar = var
src2 = 'set :M.sql.out.'var substr(w, ex) subword(src, 3)
return sqlExec(src2, retOk)
end
if fun == 'DECLARE' then do
if 'GLOBAL' == translate(word(substr(src, bx), 2)) then
return sqlExImm(src, retOk)
end
res = sqlExec(src, retOk)
if wordPos(fun, 'DELETE INSERT UPDATE') > 0 then
m.sql.cx.updateCount = sqlErrd.3
return res
endProcedure sqlRxUpdate
/*-- execute a query, update or call ---------------------------------*/
sqlExecute: procedure expose m.
parse arg cx, src, retOk
src = inp2Str(src, '-sql')
f = translate(word(substr(src, max(verify(src, '( '), 1)), 1))
m.sql.cx.fun = f
if f == 'SELECT' | fun == 'WITH' then
return sqlQuery(cx, src, retOk)
else if f == 'CALL' then
call err 'implement sql call for:' src
else
return sqlUpdate(cx, src, retOk)
endProcedure sqlExecute
/*-- execute a query, copy result to stem ----------------------------*/
sql2St: procedure expose m.
parse arg src, dst, retOk, type
cx = sqlGetCursor()
res = sqlQuery(cx, src, retOk, type)
if res >= 0 then do
do sx=1 while sqlFetch(cx, dst'.'sx)
end
res = sx-1
end
m.dst.0 = res
call sqlClose cx
call sqlFreeCursor cx
return res
endProcedure sql2St
/*-- execute a query and return value of the first column
if > 1 row fail, if 0 rows return arg(3) or fail ----------*/
sql2One: procedure expose m.
parse arg src, dst
cx = sqlGetCursor()
call sqlQuery cx, src
if \ sqlFetch(cx, dst) then
if arg() > 2 then
return arg(3)
else
call err 'no row returned for:' src
if sqlFetch(cx, dst.2) then
call err '2 or more rows for' src
c1 = m.sql.cx.col.1
res = m.dst.c1
call sqlClose cx
call sqlFreeCursor cx
return res
endProcedure sql2One
/*--- prepare statement 's'cx from sql src into descriptor desc ------*/
sqlPrepare: procedure expose m.
parse arg cx, src, ggRetOk, descOut
s = ''
src = inp2str(src, '%+Q\s')
m.sql.cx.d.sqlD = 'noSqlDA'
m.sql.cx.i.sqlD = 'noDescInp'
m.sql.cx.fetchVars = ''
m.sql.cx.col.0 = ''
m.sql.cx.into = ''
if descOut == 1 then
s = 'into :M.SQL.'cx'.D'
return sqlExec('prepare s'cx s 'from :src', ggRetOk)
endProcedure sqlPrepare
/*--- open cursor 'c'cx using arguments arg(2), arg(3)... ------------*/
sqlOpen: procedure expose m.
parse arg cx
if arg() <= 1 then
return sqlExec('open c'cx)
call sqlDescribeInput cx
do ix=1 to arg()-1
call sqlDASet cx , 'I', ix, arg(ix+1)
end
return sqlExec('open c'cx 'using descriptor :M.SQL.'cx'.I')
endProcedure sqlOpen
/*--- execute a prepared statement with arg(2), arg(3)... ------------*/
sqlRxExecute: procedure expose m.
parse arg cx retOk
if arg() <= 1 then
return sqlExec('execute s'cx, retOk)
call sqlDescribeInput cx
do ix=1 to arg()-1
call sqlDASet cx , 'I', ix, arg(ix+1)
end
return sqlExec('execute s'cx 'using descriptor :M.SQL.'cx'.I',
, retOk)
endProcedure
/*--- describe output (if not already done)
and return size of sqlDa ------------------------------------*/
sqlDescribeOutput: procedure expose m.
parse arg cx, force
if force == 1 | \ datatype(m.sql.cx.d.sqlD, 'n') then
call sqlExec 'describe s'cx 'into :M.SQL.'cx'.D', 0
return m.sql.cx.d.sqlD
endProcedure sqlDescribeOutput
/*--- describe input (if not already done)
and return size of input sqlDA ------------------------------*/
sqlDescribeInput: procedure expose m.
parse arg cx, force
if force == 1 | \ datatype(m.sql.cx.i.sqlD, 'n') then
call sqlExec 'describe input s'cx 'into :M.SQL.'cx'.I'
return m.sql.cx.i.sqlD
endProcedure sqlDescribeInput
/*--- put sqlNull in all vars where indicator says so ---------------*/
sqlSetNull: procedure expose m.
parse arg cx, dst
do nx=1 to m.sql.cx.sqlNull.0
col = m.sql.cx.sqlNull.nx
if m.dst.col.sqlInd < 0 then
m.dst.col = m.sqlNull
end
return
endProcedure sqlSetNull
/*--- use describe output to generate column names,
fetchVariables and sqlNull names ---------------------*/
sqlRxFetchVars: procedure expose m.
parse arg cx
if m.sql.cx.fetchVars \== '' then
return m.sql.cx.fetchVars
call sqlDescribeOutput cx
f = m.sql.cx.type
if f \== '' then do
f = f'.FLDS'
if m.f.0 < m.sql.cx.d.sqlD then
call err 'not enough column names'
end
m.sql.cx.col.0 = m.sql.cx.d.sqlD
nx = 0
vars = ''
do kx=1 to m.sql.cx.d.sqlD
cn = sqlVarName(f, kx, m.sql.cx.d.kx.sqlName)
m.sql.cx.col.kx = cn
vars = vars', :m.dst.'cn
if m.sql.cx.d.kx.sqlType // 2 = 1 then do
vars = vars' :m.dst.'cn'.sqlInd'
nx = nx + 1
m.sql.cx.sqlNull.nx = cn
end
end
m.sql.cx.sqlNull.0 = nx
m.sql.cx.fetchVars = substr(vars, 3)
return m.sql.cx.fetchVars
endProcedure sqlRxFetchVars
sqlVarName: procedure expose m. sqlVarName.
parse arg f, kx, sNa
if f == '' then do
cn = translate(word(sNa, 1))
if cn == '' | symbol('sqlVarName.cn') == 'VAR' then
cn = 'COL'kx
sqlVarName.cn = 1
return cn
end
else do
if m.f.kx == '' then
call err 'implement empty varName'
return substr(m.f.kx, 2)
end
endProcedure sqlVarName
/*--- set one value in a DA, handle nulls ----------------------------*/
sqlDASet: procedure expose m.
parse arg cx, da, ix, val
m.sql.cx.da.ix.sqlData = val
m.sql.cx.da.ix.sqlInd = - (val == m.sqlNull)
/* data types schienen einmal nicht zu funktionieren .......
if wordPos(m.da.ix.sqlType, '384 385 388 389 392 393') > 0 then
m.da.ix.sqlType = 448 + (m.da.ix.sqlType // 2) */
return
endProcedure sqlDASet
sqlExImm:
parse arg ggSrc, ggRetOk
return sqlExec('execute immediate :ggSrc', ggRetOk)
endProcedure sqlExImm
sqlCommit: procedure expose m.
parse arg src
return sqlExec('commit')
endProcedure sqlCommit
/*--- execute sql thru the dsnRexx interface -------------------------*/
sqlExec: /* no procedure, to keep variables sql... */
parse arg ggSqlStmt, ggRetOk
address dsnRexx 'execSql' ggSqlStmt
/* say 'sqlCode' sqlCode 'rc' rc 'for' ggSqlStmt ggNo */
sqlHandleRCSqlCode:
if rc = 0 then
return 0
if ggRetOk = '' then
ggRetOk = m.sqlRetOk
if wordPos(rc, '1 -1') < 0 then
call err 'dsnRexx rc' rc sqlmsg()
else if pos('*', ggRetOk) > 0 | wordPos(sqlCode, ggRetOk) > 0 ,
then do
if sqlCode < 0 & pos('say', ggRetOk) > 0 then
say 'sqlError' sqlmsg()
return sqlCode
end
else if rc < 0 then
call err sqlmsg()
/*???lse if sqlCode <> 0 | (pos('w',ggRetOk)<1 & sqlWarn.0^==' ') then*/
else if (sqlCode <> 0 | sqlWarn.0^==' ') & pos('w',ggRetOk)<1 then
call errSay sqlMsg(), ,'w'
return sqlCode
endSubroutine sqlExec
/*--- connect to the db2 subsystem sys -----------------------------*/
sqlRxConnect: procedure expose m.
parse upper arg sys, ggRetOk
call sqlIni
address tso "SUBCOM DSNREXX"
if rc <> 0 then do
sRc = RXSUBCOM('ADD','DSNREXX','DSNREXX') /* ADD HOST CMD ENV */
if sRc <> 0 then
call err 'rc' sRc 'from RXSUBCOM(ADD, DSNREXX, DSNREXX)'
end
if sys = '-' then
return 0
m.sql.conSSID = sys
ggSqlStmt = 'connect' sys
address dsnRexx ggSqlStmt
return sqlHandleRcSqlCode()
endProcedure sqlRxConnect
/*--- diconnect from db2 ---------------------------------------------*/
sqlRxDisconnect: procedure expose m.
parse arg retOk
ggSqlStmt = 'disconnect'
m.sql.conSSID = ''
address dsnRexx ggSqlStmt
return sqlHandleRcSqlCode()
endProcedure sqlDisconnect
/*--- send a command to db2 through the TSO dsn processor ------------*/
sqlDsn: procedure expose m.
parse arg st, sys, cmd, rcOk
x = outtrap('M.'st'.')
push 'END'
push cmd
address tso 'DSN SYSTEM('sys')'
rr = rc
x = outtrap(off)
if rr = 0 | rcOk = '*' | wordPos(rr, rcOk) > 0 then
return rr
fl = max(1, m.st.0 - 10)
em = 'rc' rr 'for DSN SYSTEM('sys') cmd' cmd,
'\nOuputlines' fl '-' m.st.0':'
do lx=fl to m.st.0
em = em '\n' strip(m.st.lx, 't')
end
call err em
endProcedure sqlDsn
/*--- push and pop currently accepted sqlCodes -----------------------*/
sqlPushRetOk: procedure expose m.
parse arg rr
nx = m.sqlRetOk.0 + 1
m.sqlRetOk.0 = nx
m.sqlRetOk.nx = rr
m.sqlRetOk = rr
return
endProcedure sqlPushRetOk
sqlPopRetOk: procedure expose m.
nx = m.sqlRetOk.0 - 1
if nx < 1 then
call err 'sqlPopRetOk with .0' m.sqlRetOk.0
m.sqlRetOk = m.sqlRetOk.nx
m.sqlRetOk.0 = nx
return
endProcedure sqlPopRetOk
/*--- issue an sql error message -------------------------------------*/
sqlMsg: /* no procedure, to keep variables sql... */
if \ dataType(sqlCode, 'n') then do
ggRes = 'sqlCode' sqlCode 'not numeric\n'sqlCaMsg()
end
else do
ggRes = sqlDsntiar(sqlRx2CA())
ggWa = sqlMsgWarn()
if ggWa \= '' then
ggRes = ggRes'\nwarnings' ggWa
if m.sqlCAMsg == 1 then
ggRes = ggRes'\n'sqlCaMsg()'\n'sqlCaMsg(sqlCa2Rx(sqlCa))
end
ggSt = 'SQL.HOST'
ggVa = 'SQL.HOST.VAR'
ggBe = 'SQL.HOST.BEF'
call sqlHostVars ggSqlStmt, 12, ggSt
if datatype(sqlErrd.5, 'n') & sqlErrd.5 > 0 then do
ggW1 = translate(word(ggSqlStmt, 1))
ggW2 = translate(word(ggSqlStmt, 2))
if ggW1 == 'PREPARE' then
ggVV = sqlHostVarFind(ggSt, 'FROM')
else if ggW1 ggW2 == 'EXECUTE IMMEDIATE' then
ggVV = sqlHostVarFind(ggSt, 1)
else
ggVV = ''
if ggVV == '' then
ggRes = ggRes || sqlMsgSrcPos(ggSqlStmt, sqlErrd.5)
else
ggRes = ggRes || sqlMsgSrcPos(value(ggVV), sqlErrd.5)
end
ggRes = ggRes'\nstmt =' ggSqlStmt
ggPref = '\nwith'
do ggXX=1 to m.ggSt.0
ggRes = ggRes || ggPref m.ggBe.ggXX ':'m.ggVa.ggXX ,
'=' value(m.ggVa.ggXX)
ggPref = '\n '
end
if m.sqlSuMsg == 1 | (m.sqlSuMsg == 2 & m.sql.conHost \== '') then
ggRes = ggRes'\nsubsys =' ,
if(m.sql.conHost=='',,m.sql.conHost'/'),
|| m.sql.conSSID', interfaceType' m.sql.conType
return ggRes
endSubroutine sqlMsg
/*--- use dsnTiar to translate sql Info to error text ----------------*/
sqlDsnTiar: procedure expose m.
parse arg ca
if -438 = sqlCa2Rx(ca) then
return '\nSQLCODE = -438:',
'APPLICATION RAISED ERROR WITH sqlState' sqlState ,
'and DIAGNOSTIC TEXT:' sqlErrMc
liLe = 78
msLe = liLe * 10
msg = d2c(msLe,2) || left('', msLe)
len = d2c(liLe, 4)
ADDRESS LINKPGM "DSNTIAR ca msg len"
if rc <> 0 then
call err 'linkPgm dsnTiar rc' rc 'sqlCa' ca
res = strip(substr(msg, 13, liLe-10))
cx = pos(', ERROR: ', res)
if cx > 0 then
res = left(res, cx-1)':' strip(substr(res, cx+9))
do c=3+liLe by liLe to msLe while substr(msg, c, 10) = ''
res = res'\n 'strip(substr(msg, c+10, liLe-10))
end
return res
endProcedure sqlDsnTiar
/*--- format all rexx sqlCa fields into a message --------------------*/
sqlCaMsg:
return 'sqlCode' sqlCode 'sqlState='sqlState ,
'\n errMC='translate(sqlErrMc, ',', 'ff'x) ,
'\n warnings='sqlWarnCat('+') 'erP='sqlErrP ,
'\n errD.1='sqlErrD.1 '2='sqlErrD.2 '3='sqlErrD.3 ,
'\n errD.4='sqlErrD.4 '5='sqlErrD.5 '6='sqlErrD.6
endProcedure sqlCaMsg
/*--- format the sqlCA into the dsnTiar SQLCA ------------------------*/
sqlRx2Ca:
if \ (datatype(sqlcode, 'n') & datatype(sqlErrD.1, 'n') ,
& datatype(sqlErrD.3, 'n')) then
return err('sqlCode etc. not numeric\nsqlCa =' sqlCaMsg())
if digits() < 10 then
numeric digits 10
sqlCa = 'SQLCA ' || d2c(136, 4) || d2c(sqlCode, 4) ,
|| d2c(min(70, length(sqlErrMc)), 2)left(sqlErrMc, 70) ,
|| left(sqlErrP, 8) ,
|| d2c(sqlErrD.1, 4)d2c(sqlErrD.2, 4)d2c(sqlErrD.3, 4) ,
|| d2c(sqlErrD.4, 4)d2c(sqlErrD.5, 4)d2c(sqlErrD.6, 4) ,
|| sqlWarnCat() || sqlState
if length(sqlCa) <> 136 then
call err 'sqlCa length' length(sqlCa) 'not 136' ,
'\n'sqlCaMsg() '==>' ca', hex='c2x(ca)
return sqlCa
endProcedure sqlRx2Ca
/*--- extract the fields from the SqlCA and put it to rexx vars ------*/
sqlCA2Rx: procedure expose m. ,
sqlCode sqlErrMc sqlErrP sqlErrD. sqlWarn. sqlState
parse arg ca
numeric digits 10
if length(ca) < 136 | c2d(substr(ca, 9, 4), 4) <> 136 then
call err 'bad sqlCa len' length(ca) 'not 136:' ca', hex='c2x(ca)
sqlCode = c2d(substr(ca, 13 ,4), 4)
sqlErrMC = substr(ca, 19, c2d(substr(ca, 17, 2), 2))
sqlErrP = substr(ca, 89, 8)
do ix=1 to 6
sqlErrD.ix = c2d(substr(ca, 93 + 4 * ix, 4), 4)
end
do ix=0 to 10
sqlWarn.ix = substr(ca, 121 + ix, 1)
end
sqlState = substr(ca, 132, 5)
return sqlCode
endProcedure sqlCA2Rx
/*--- concat the sql warnings with Separator sep --------------------*/
sqlWarnCat: procedure expose m. sqlWarn.
parse arg sep
return sqlWarn.0 || sep,
|| sqlWarn.1||sqlWarn.2||sqlWarn.3||sqlWarn.4||sqlWarn.5||sep ,
|| sqlWarn.6||sqlWarn.7||sqlWarn.8||sqlWarn.9||sqlWarn.10||sep
endProcedure sqlWarnCat
/*--- make the text for sqlWarnings ----------------------------------*/
sqlMsgWarn: procedure expose m. sqlWarn.
r = ''
text =' 1=W var truncated, 1=S scrollable, 1=N nonScrollable,' ,
'2=W nulls in aggregate,' ,
'3=W more cols than vars,' ,
'3=Z more result sets than locators,' ,
'4=W no where, 4=D sensitive dynamic, 4=I insensitive,' ,
'4=S sensitive static,' ,
'5=W not valid sql, 5=1 readOnly, 5=2 readDelete,' ,
'5=3 readDeleteUpdate,' ,
'6=W day changed to month range,' ,
'7=W dec digits truncated,' ,
'8=W char substituted,' ,
'9=W arith excep in count, 9=Z multipe result sets,' ,
'10=W char conversion err in ca,'
do wx = 1 to 10
w = sqlWarn.wx
if w = ' ' then
iterate
t = wx'='w
cx = pos(' 'wx'='w' ', text)
ex = pos(',' , text, cx + 1)
if cx > 0 & ex > cx then
r = r substr(text, cx+1, ex-cx)
else
r = r wx'='w '?,'
end
r = strip(r, 't', ',')
if r = '' & sqlwarn.0 <> '' then
call err 'sqlWarn.0='sqlWarn.0 'but all warns empty'
return r
endProcedure sqlMsgWarn
/*--- show in the source src the point pos (where error occured)
a few lines from src around pos and arrow to pos ----------*/
sqlMsgSrcPos: procedure expose m.
parse arg src, pos
liLe = 68
liCn = 3
afLe = 25
t1 = space(left(src, pos), 1)
t2 = left(' ', substr(src, pos, 1) == ' ' ,
| substr(src, pos+1, 1) == ' ') ,
|| space(substr(src, pos+1), 1)
afLe = min(afLe, length(t2))
if length(t1) + afLe > liLe * liCn then
t1 = '...'right(t1, liLe * liCn - afLe -3)
else if length(t1)+length(t2) > liLe then
t1 = left(' ', (liCn * liLe - length(t1) -afLe) // liLe)||t1
pL = length(t1) // liLe
if length(t2) <= liLe-pL then
tx = t1 || t2
else
tx = t1 || left(t2, liLe-pL-3)'...'
res = '\nsrc' strip(substr(tx, 1, liLe), 't')
do cx=1+liLe by liLe to length(tx)
res = res || '\n +' strip(substr(tx, cx, liLe), 't')
end
loc = 'pos' pos 'of' length(src)
if length(loc)+6 < pL then
return res'\n >' right('>>>'loc'>>>', pL)
else
return res'\n >' left('', pL-1)'<<<'loc'<<<'
endProcdedure sqlMsgSrcPos
/*--- get the hostVars in the sql in src and the word before ---------*/
sqlHostVars: procedure expose m.
parse arg src, cnt, st
cx = 1
sx = 0
do cnt
cx = pos(':', src, cx) + 1
if cx < 2 then
leave
if pos(substr(src, cx, 1), m.mAlfRex1) < 1 then
iterate
ex = verify(src, m.mAlfRexR, 'n', cx)
if ex - cx > 100 then
iterate
sx = sx + 1
if ex < 1 then
m.st.var.sx = substr(src, cx)
else
m.st.var.sx = substr(src, cx, ex - cx)
/* search word before */
do bE = cx-2 by -1 to 1 ,
while substr(src, bE, 1) == ' '
end
do bB = bE by -1 to max(1, bE-20),
while pos(substr(src, bB, 1), m.mAlfa) > 0
end
if bB < bE & bB >= 0 then
m.st.bef.sx = substr(src, bB+1, bE-bB)
else
m.st.bef.sx = ''
end
m.st.0 = sx
return sx
endProcedure sqlHostVars
/*--- find the name of hostvar, by index or by before ----------------*/
sqlHostVarFind: procedure expose m.
parse arg st, fnd
if datatype(fnd, 'n') & fnd <= m.st.0 then
return m.st.var.fnd
do ix=1 to m.st.0
if translate(m.st.bef.ix) = fnd then
return m.st.var.ix
end
return ''
endSubroutine sqlHostVarFind
/* copy sql end **************************************************/
/* copy adrTso begin *************************************************/
/*--- send ggTsoCmd to tso, fail if rc <> 0 or not listed in ggRet ---*/
adrTso:
parse arg ggTsoCmd, ggRet
address tso ggTsoCmd
if rc == 0 then return 0
else if ggRet == '*' then return rc
else if wordPos(rc, ggRet) > 0 then return rc
else
call err 'adrTso rc' rc 'for' ggTsoCmd
return /* end adrTso */
/*--- format dsn from tso format to jcl format -----------------------*/
dsn2jcl: procedure expose m.
parse upper arg dsn ., addPrefix
if left(dsn,1) = "'" then
return strip(dsn, 'b', "'")
sp = sysvar('SYSPREF')
if sp == '' then
sp = userid()
cx = pos('~', dsn)
if cx < 1 & addPrefix == 1 then
return sp'.'dsn
do while cx \== 0
le = left(dsn, cx-1)
ri = substr(dsn, cx+1)
if right(le, 1) == '.' | left(ri, 1) == '.' then
dsn = le || sp || ri
else
dsn = le || left('.', le \== '') || sp ,
|| left('.', ri \== '') || ri
cx = pos('~', spec, cx)
end
return dsn
endProcedure dsn2Jcl
/*--- format dsn from jcl format to tso format -----------------------*/
jcl2dsn: procedure expose m.
parse arg dsn .
return "'"dsn"'"
endProcedure jcl2dsn
dsnSetMbr: procedure expose m.
parse arg dsn, mbr
bx = pos('(', dsn)
if bx > 0 then
dsn = strip(left(dsn, bx-1))
if mbr <> '' then
dsn = dsn'('strip(mbr)')'
return dsn
endProcedure dsnSetMbr
dsnGetMbr: procedure expose m.
parse arg dsn
lx = pos('(', dsn)
rx = pos(')', dsn, lx+1)
if lx < 1 then
return ''
else if lx < rx then
return substr(dsn, lx+1, rx-lx-1)
else
return strip(substr(dsn,lx+1))
endProcedure dsnGetMbr
/**********************************************************************
io: read or write a dataset with the following callsequences:
read: readDDBegin, readDD*, readDDEnd
write: writeBegin, writeDD*, writeEnd
readDD returns true if data read, false at eof
***********************************************************************/
/*--- prepare reading from a DD --------------------------------------*/
readDDBegin: procedure expose m.
parse upper arg ggDD
call errAddCleanup 'call readDDEnd' ggDD', "*"'
return /* end readDDBegin */
/*--- read from DD ggDD into ggSt, return false at eof ---------------*/
readDD:
parse arg ggDD, ggSt, ggCnt
if ggCnt = '' then
ggCnt = 100
call adrTso 'execio' ggCnt 'diskr' ggDD '(stem' ggSt')', 2
return (value(ggSt'0') > 0)
return /* end readDD */
/*--- finish reading DD ggDD ----------------------------------------*/
readDDEnd: procedure expose m.
parse upper arg ggDD, ggRet
call errRmCleanup 'call readDDEnd' ggDD', "*"'
return adrTso('execio 0 diskr' ggDD '(finis)', ggRet)
endProcedure readDDEnd
/*--- prepare writing to DD ggDD -------------------------------------*/
writeDDBegin: procedure expose m.
parse upper arg ggDD
/* ensure file is erased, if no records are written */
call adrTso 'execio' 0 'diskw' ggDD '(open)'
call errAddCleanup 'call writeDDEnd' ggDD', "*"'
return /* end writeDDBegin */
/*--- write to gg ggDD from stem ggSt, ggCnt records -----------------*/
writeDD:
parse arg ggDD, ggSt, ggCnt
if ggCnt == '' then
ggCnt = value(ggst'0')
call adrTso 'execio' ggCnt 'diskw' ggDD '(stem' ggSt')'
return
endSubroutine writeDD
/*--- end writing to dd ggDD (close) --------------------------------*/
writeDDEnd: procedure expose m.
parse upper arg ggDD, ggRet
call errRmCleanup 'call writeDDEnd' ggDD', "*"'
return adrTso('execio 0 diskw' ggDD '(finis)', ggRet)
endProcedure writeDDEnd
/*--- readNx: read next line, using buffer ---------------------------*/
/*--- begin: allocate dsnSpec and ini ------------------------ -------*/
readNxBegin: procedure expose m.
parse arg m, m.m.dsn, m.m.dd, m.m.Cnt
if m.m.dd = '' then
m.m.dd = 'DDNX'
if m.m.cnt = '' then
m.m.cnt = 1000
m.m.cx = m.m.cnt + 999
m.m.buf0x = 0
m.m.0 = 0
m.m.free = subword(dsnAlloc('dd('m.m.dd')' m.m.dsn), 2)
call readDDBegin m.m.dd
return m
endProcedure readDDNxBegin
/*--- return the stem of the next line, or '' at end -----------------*/
readNx: procedure expose m.
parse arg m
m.m.cx = m.m.cx + 1
if m.m.cx <= m.m.0 then
return m'.'m.m.cx
m.m.buf0x = m.m.buf0x + m.m.0
if \ readDD(m.m.dd, 'M.'m'.', m.m.cnt)then
return ''
m.m.cx = 1
return m'.1'
endProcedure readDDNx
/*--- return the stem of the curr line, '' at end --------------------*/
readNxCur: procedure expose m.
parse arg m
if m.m.cx <= m.m.0 then
return m'.'m.m.cx
else
return ''
endProcedure readNxCur
/*--- return the position (line number) of reader
plus le characters of the current line (default 50) ------*/
readnxPos: procedure expose m.
parse arg m, le
li = m'.'m.m.cx
li = strip(m.li, 't')
if arg() < 2 then
le = 50
if le < 1 then
li = ''
else if length(li) <= le then
li = ':' li
else
li = ':' left(li, le-3)'...'
return 'line' (m.m.buf0x + m.m.cx)li
endProcedure readnxPos
/*--- close and deallocate ------------------------------------------*/
readNxEnd: procedure expose m.
parse arg m
call readDDEnd m.m.dd
interpret m.m.free
return
endProcedure readDDNxEnd
/*--- standardise a dsn spec
word1 dsName or -
word2 dd or -
word3 disp or -
word4 to first : attributes in tso format
after first : attributes for new allocation
----------------------------------------------------------------------*/
dsnSpec: procedure expose m.
parse upper arg spec
rr = '' /* put leading - in separate words */
do sx=1 while words(rr) < 3 & wx \= ''
wx = word(spec, sx)
do while abbrev(wx, '-') & words(rr) < 3
wx = substr(wx, 2)
rr = rr '-'
end
rr = rr wx
end
spec = rr subWord(spec, sx)
na = ''
dd = ''
di = ''
if left(spec, 1) = '&' then /* external spec is handled ok */
spec = strip(substr(spec, 2))
do wx=1 by 1
w = word(spec, wx)
if w = '' | abbrev(w, '.') | abbrev(w, ':') then
leave
else if wordPos(w, 'OLD SHR MOD NEW')>0 | abbrev(w, 'SYSO') then
di = w
else if w = 'CATALOG' then
di = di w
else if abbrev(w, 'DD(') then
dd = substr(w, 4, length(w)-4)
else if abbrev(w, 'DSN(') then
na = strip(substr(w, 5, length(w)-5))
else if na == '' then
na = dsn2jcl(w)
else if dd == '' then
dd = w
else if di == '' then
di = w
else
leave
end
if na == '' then
na = '-'
else if abbrev(na, "'") then
na = substr(na, 2, length(na)-2)
if dd == '' then dd = '-'
if di == '' then di = '-'
re = subword(spec, wx)
if abbrev(re, '.') then
re = substr(re, 2)
return na dd di re
endProcedure dsnSpec
/*--- alloc a dsn with dsnAlloc
if the dsn is inuse wait and retry
until either the allocation is successfull
or the timeout occurs --------------------------------------*/
dsnAllocWait: procedure expose m.
parse upper arg spec, pDi, pDD, timeOut
x = max(1, arg() - 1)
do rt=0
m.adrTsoAl.1 = ''
m.adrTsoAl.2 = ''
m.adrTsoAl.3 = ''
call outtrap m.adrTsoAl.
res = dsnAlloc(spec, pDi, pDD, '*')
call outtrap off
if \ abbrev(res, ' ') then
return res
msg = m.adrTsoAl.1'\n'm.adrTsoAl.2'\n'm.adrTsoAl.3
if rt > timeOut & timeOut \== '' then
return err('timeout allocating' spec time() '\n'msg)
if pos('DATA SET IS ALLOCATED TO ANOTHER', msg) < 1 then
return err('allocating' spec'\n'msg)
say time() 'sleep and retry alloc' spec
call sleep 1, 0
end
endProcedure dsnAllocWait
/*--- alloc a dsn or a dd
spec '-'<ddName>
datasetName? disposition? '.'? attributes? (':' newAtts)?
disp default disposition
dd default dd name
retRc erlaubte ReturnCodes (leer = 0)
returns if ok then ddName <rexx for free> otherwise rc -----*/
dsnAlloc: procedure expose m.
parse upper arg spec, pDi, pDD, retRc
parse value dsnSpec(spec) with na dd di rest
if na = '-' then
m.dsnAlloc.dsn = ''
else
m.dsnAlloc.dsn = na
if na == '-' & dd \== '-' & di == '-' & rest = '' then
return dd
if dd == '-' & pDD \== '' then
dd = pDD
if dd == '-' then do
if symbol('m.adrTso.ddNum') = 'VAR' then
dd = m.adrTso.ddNum + 1
else
dd = 1
m.adrTso.ddNum = dd
dd = 'DD' || dd
end
if di = '-' & pDi \== '' then
di = pDi
if di = '-' then
di = 'SHR'
else if pos('(', na) < 1 then
nop
else if di = 'MOD' then
call err 'disp mod for' na
else
di = 'SHR'
if pos('/', na) > 0 then
return csmAlloc(na dd di rest, retRc)
else
return tsoAlloc(na dd di rest, retRc)
endProcedure dsnAlloc
tsoAlloc: procedure expose m.
parse arg na dd disp rest ':' nn, retRc
c = 'alloc dd('dd')' disp
if na \== '-' then
c = c "DSN('"na"')"
else if disp = 'NEW' and nn \== '' then
c = c dsnCreateAtts(,nn)
call outtrap m.adrTsoAl.
alRc = adrTso(c rest, '*')
call outtrap off
if alRc = 0 then do
call errAddCleanup 'call tsoFree' dd', "*"'
return dd 'call tsoFree' dd';'
end
if nn \= '' & wordPos(disp, 'OLD SHR') > 0 ,
& sysDsn("'"m.dsnAlloc.dsn"'") == 'DATASET NOT FOUND' then do
say 'tsoAlloc creating' c rest ':'nn
call adrTso 'alloc dd('dd') new catalog' dsnCreateAtts(na, nn)
call adrTso 'free dd('dd')'
return tsoAlloc(na dd disp rest, retRc)
end
do ax=1 to m.adrTsoAl.0
say m.adrTsoal.ax
end
if retRc = '*' | wordPos(alRc, retRc) > 0 then
return ' ' alRc
call err 'tsoAlloc rc' alRc 'for' c rest
endProcedure tsoAlloc
tsoAtts: procedure expose m.
parse arg dsn
rc = listDsi("'"dsn"' SMSINFO")
if rc = 0 then
mv = ''
else if rc = 4 & sysReason = 19 then do
mv = 'UNITCNT(30)'
say 'multi volume' mv
end
else if rc ^= 0 then
call err 'listDsi rc' rc 'reason' sysReason,
sysMsgLvl1 sysMsgLvl2
al = 'CAT'
al = ''
if right(sysDsSms, 7) == 'LIBRARY' ,
| abbrev(sysDsSms, 'PDS') then
al = al 'DSNTYPE(LIBRARY)'
if sysUnits = 'TRACK' then
sysUnits = 'TRACKS'
al = al "DSORG("sysDSorg") MGMTCLAS("sysMgmtClass")",
"DATACLAS("sysDataClass")" ,
"RECFM("translate('1 2 3', ' 'sysREcFM, ' 123')")",
"LRECL("SYSLRECL")",
"blksize("sysBLkSIZE")",
"SPACE("sysPrimary"," sysSeconds")" sysUnits mv
return al
endProcedure tsoAtts
tsoFree: procedure expose m.
parse arg dd, ggRet
call adrTso 'free dd('dd')', ggRet
call errRmCleanup 'call tsoFree' dd', "*"'
return
endProcedure tsoFree
dsnCreateAtts: procedure expose m.
parse arg dsn, atts, forCsm
forCsm = forCsm == 1
aU = ' 'translate(atts)
if abbrev(atts, ':') then do
parse var atts a1 atts
bl = 32760
rl = substr(a1, 3)
if abbrev(a1, ':F') then do
if rl = '' then
rl = 80
recfm='f b'
bl = bl - (bl // rl)
end
else do
if rl = '' then
rl = bl-4
recfm = substr(a1, 2, 1) 'b'
end
if forCsm then
atts = atts "recfm("space(recfm, 0)") lrecl("rl")",
"blkSize("bl")"
else
atts = atts "recfm("recfm") lrecl("rl") block("bl")"
end
if pos('(', dsn) > 0 & pos(' DSNTYPE(', aU) < 1 ,
& pos(' DSORG(', aU) < 1 then
atts = atts 'dsntype(library) dsorg(po)'
if pos(' MGMTCLAS(', aU) < 1 then
atts = atts 'mgmtclas(COM#A091)'
if pos(' SPACE(', aU) < 1 then
if forCsm then
atts = atts 'space(10, 1000) cylinder'
else
atts = atts 'space(10, 1000) cyl'
if dsn == '' then
return atts
return "dataset('"dsnSetMbr(dsn)"')" atts
endProcedure dsnCreateAtts
/*--- read the dataset specified in ggDsnSpec to stem ggSt -----------*/
readDSN:
parse arg ggDsnSpec, ggSt
ggAlloc = dsnAlloc(ggDsnSpec, 'SHR', 'readDsN')
call adrTso 'execio * diskr' word(ggAlloc, 1) '(stem' ggSt' finis)'
interpret subword(ggAlloc, 2)
return
endSubroutine readDsn
/*--- write the dataset specified in ggDsnSpec from stem ggSt
write ggCnt records if not empty otherwise ggst0
if ggSay 1 then say ... records written to ... -------------*/
writeDSN:
parse arg ggDsnSpec, ggSt, ggCnt, ggSay
if ggCnt == '' then
ggCnt = value(ggst'0')
ggAlloc = dsnAlloc(ggDsnSpec, 'OLD', 'readDsN')
call adrTso 'execio' ggCnt 'diskw' word(ggAlloc, 1) ,
'(stem' ggSt 'open finis)'
interpret subword(ggAlloc, 2)
if ggSay == 1 | m.debug == 1 then
say ggCnt 'records written to' ggDsnSpec
return
endSubroutine writeDsn
copyDSN: procedure expose m.
parse arg frSpec, toSpec, ggSay
frDD = dsnAlloc(frSpec, 'SHR', 'FRDD')
toDD = dsnAlloc(toSpec, 'OLD', 'TODD')
call readDDBegin word(frDD, 1)
call writeDDBegin word(toDD, 1)
cnt = 0
do while readDD(word(frDD, 1), r.)
call writeDD word(toDD, 1), r.
cnt = cnt + r.0
end
call readDDEnd word(frDD, 1)
call writeDDEnd word(toDD, 1)
interpret ';' subword(frDD, 2) '; ; ;' subword(toDD, 2)
if ggSay == 1 | m.debug == 1 then
say cnt 'records copied from' frSpec 'to' to toSpec
return
endSubroutine writeDsn
/* copy adrTso end ****************************************************/
/* copy ut begin *****************************************************/
/*--- if function warning all3 arguments get evaluated|
e.g if(x=0, 'infinity', 1/0) will fail| -----------*/
if: procedure expose m.
parse arg co, ifTrue, ifFalse
if co then
return ifTrue
else
return ifFalse
endProcedure if
/*--- embedded ASSignement:
assign the second argument to the variable with name in first arg
and return the value assigned ----------------------------------*/
ass:
call value arg(1), arg(2)
return arg(2)
/*--- embedded ASSignement only if NotNull:
assign the second argument to the variable with name in first arg
if the second arg is not null, return new value ---------------*/
assIf:
if arg(2) == '' then
return value(arg(1))
call value arg(1), arg(2)
return arg(2)
/*--- return first nonNull argument ---------------------------------*/
nn:
if arg(1) \== '' then
return arg(1)
if arg(2) \== '' then
return arg(2)
call err 'nn() both args empty'
/*--- embedded ASSignement return NotNull:
assign the second argument to the variable with name in first arg
and return 1 if value not null, 0 if null ----------------------*/
assNN:
call value arg(1), arg(2)
return arg(2) \== ''
/*--- return current time and cpu usage ------------------------------*/
timing: procedure expose m.
return return time() 'ela='time('E') 'cpu='sysvar('syscpu'),
'su='sysvar('syssrv')
timingTest: procedure expose m.
say 'begin' timing() sysvar('sysnode')
do 30000000
end
say 'end ' timing()
return
/*--- sleep several seconds ------------------------------------------*/
sleep: procedure expose m.
parse arg secs, sayIt
if sayit <> 0 then
say 'sleeping' secs 'secs' time()
CALL SYSCALLS 'ON'
ADDRESS SYSCALL "sleep" secs
CALL SYSCALLS 'OFF'
if sayit <> 0 then
say 'slept' secs 'secs' time()
return
endProcedure sleep
/*--- elongate inp with spaces up to given len -----------------------*/
elong: procedure expose m.
parse arg inp, len
if length(inp) >= len then
return inp
return left(inp, len)
endProcedure elong
/*--- quote string txt using quoteChar qu ("""" ==> ") ---------------*/
quote: procedure expose m.
parse arg txt, qu
if qu = '' then
qu = '"'
res = qu
ix = 1
do forever
qx = pos(qu, txt, ix)
if qx = 0 then
return res || substr(txt, ix) || qu
res = res || substr(txt, ix, qx-ix) || qu || qu
ix = qx + length(qu)
end
endProcedure quote
/*--- return the count of occurrences of needle in heyStack ----------*/
posCount: procedure expose m.
parse arg needle, hayStack, start, fin
if start = '' then
start = 1
if fin = '' then
fin = length(hayStack) + 1 - length(needle)
do cnt = 0 by 1
start = pos(needle, haystack, start)
if start < 1 | start > fin then
return cnt
start = start + length(needle)
end
endProcedure posCount
repAll: procedure expose m.
parse arg src, w, new
res = ''
cx = 1
do forever
nx = pos(w, src, cx)
if nx < 1 then
return res || substr(src, cx)
res = res || substr(src, cx, nx-cx) || new
cx = nx + length(w)
end
endProcedure repAll
repAllWords: procedure expose m.
parse arg src, w, new
res = ''
wx = 0
cx = 1
do forever
wx = wordPos(w, src, wx+1)
if wx < 1 then
return res || substr(src, cx)
nx = wordindex(src, wx)
res = res || substr(src, cx, nx-cx) || new
cx = nx + length(w)
end
endProcedure repAllWords
/* copy ut end ********************************************************/
/* copy err begin ******************************************************
messages, errorhandling,help
***********************************************************************/
errIni: procedure expose m.
if m.err.ini == 1 then
return
call outIni
m.err.ini = 1
m.err.handler = ''
m.err.cleanup = ';'
m.err.opt = ''
return
endProcedure errIni
/* configure err -----------------------------------------------------*/
errReset: procedure expose m.
call errIni
parse arg m.err.opt, m.err.handler
if pos('I', translate(m.err.opt)) > 0 then
if errOS() \== 'LINUX' then
if sysVar('sysISPF') = 'ACTIVE' then
call adrIsp 'control errors return'
return
endSubroutine errReset
/*--- error routine: abend with message ------------------------------*/
err:
parse arg ggTxt, ggOpt
call errIni
drop err handler cleanup opt call return
if ggOpt == '' & m.err.handler \== '' then do
if 1 then do /* no detection of recursive err call loop
--> will anyway fail by stack overflow */
interpret m.err.handler
end
else do
/* avoid recursive err call loop */
drop call return
if symbol('m.err.call') \== 'VAR' then
m.err.call = 1
else
m.err.call = m.err.call + 1
if m.err.call > 10 then do
say 'errHandler loop:' m.err.handler
end
else do
m.err.return = 1
call errInterpret m.err.handler
m.err.call = m.err.call - 1
if m.err.return then
return result
end
end
end
call outDst
call errSay ggTxt, 'e'
call errCleanup
if ggOpt == '' then
ggOpt = m.err.opt
ggOpt = translate(ggOpt)
if pos('T', ggOpt) > 0 then do
trace ?r
say 'trace ?r in err'
end
if pos('H', ggOpt) > 0 then do
call errSay 'divide by zero to show stackHistory', 'e'
x = 1 / 0
end
call errSay 'exit(12)', 'e'
exit errSetRc(12)
endSubroutine err
/*--- error routine: user message cleanup exit -----------------------*/
errEx:
parse arg ggTxt
call errIni
call outDst
call errSay ggTxt
call errCleanup
exit 8
endProcedure errEx
errAddCleanup: procedure expose m.
parse arg code
if m.err.ini \== 1 then
call errIni
/* concatenate backwards, then it is executed also backwards */
m.err.cleanup = ';'code || m.err.cleanup
return
endProcedure errAddCleanup
errRmCleanup: procedure expose m.
parse arg code
if m.err.ini \== 1 then
call errIni
cx = pos(';'code';', m.err.cleanup)
if cx > 0 then
m.err.cleanup = left(m.err.cleanup, cx) ,
|| substr(m.err.cleanup, cx + length(code)+2)
return
endProcedure errRmCleanup
errCleanup: procedure expose m.
call errIni
cl = m.err.cleanup
if cl = ';' then
return
m.err.cleanup = ';'
say 'err cleanup begin' cl
call errInterpret cl
say 'err cleanup end' cl
return
endProcedure errCleanup
errInterpret: procedure expose m.
parse arg code
interpret code
m.err.return = 0
return
endProcedure errInterpret
/*--- assert that the passed rexx expression evaluates to true -------*/
assert:
interpret 'assertRes =' arg(1)
if \ assertRes then
call err 'assert failed' arg(1)':' arg(2)
return
endProcedure assert
/*--- output an errorMessage msg with pref pref
split message in lines at '/n' ---------------------------*/
errSay: procedure expose m.
parse arg msg, pref
parse source . . ggS3 . /* current rexx */
if pref == 'e' then
msg = 'fatal error in' ggS3':' msg
else if pref == 'w' then
msg = 'warning in' ggS3':' msg
else if pref \== '' then
msg = pref':' msg
return outNl(msg)
endProcedure errSay
/*--- abend with Message after displaying help -----------------------*/
errHelp: procedure expose m.
parse arg msg, op
call errSay msg, 'e'
call help
call err msg, op
endProcedure errHelp
/*--- return the Operating System we are running on: TSO or LINUX ---*/
errOS: procedure expose m.
parse source os .
return os
endProcedure errOS
/*--- set rc for ispf: -------------------------------------------------
if a cmd is run by ispStart, its RC is ignored,
but ISPF passes the value of the shared varible 3IspfRc
back as return code
----------------------------------------------------------------------*/
errSetRc: procedure expose m.
parse arg zIspfRc
if errOS() \== 'LINUX' then
if sysVar('sysISPF') = 'ACTIVE' then
address ispExec vput 'zIspfRc' shared
return zIspfRc
endProcedure errSetRc
/*--- output a trace message if m.tr is set -----------------------*/
trc: procedure expose m.
parse arg msg
if m.trace == 1 then
call out 'trc:' msg
return
endProcedure trc
debug: procedure expose m.
parse arg msg
if m.debug == 1 then
call out 'debug' msg
return
endProcedure debug
/*--- display the first comment block of the source as help ----------*/
help: procedure expose m.
parse source . . s3 .
call out right(' help for rexx' s3, 79, '*')
do ax=1 to arg()
say ' ' arg(ax)
end
do lx=1 by 1
if pos('/*', sourceLine(lx)) > 0 then
leave
else if lx > 10 then do
call out 'initial commentblock not found for help'
return
end
end
do lx=lx+1 by 1
li = strip(sourceLine(lx), 't', ' ')
if pos('*/', li) > 0 then
leave
call out li
end
call out right(' end help for rexx' s3, 79, '*')
return 4
endProcedure help
/*--- output all lines (separated by '\n') of all args --------------*/
outNl: procedure expose m.
do ax=1 to max(1, arg())
msg = arg(ax)
sx = 0
bx = -1
do lx=1 until bx >= length(msg)
ex = pos('\n', msg, bx+2)
if ex < 1 then
ex = length(msg)+1
call out substr(msg, bx+2, ex-bx-2)
bx = ex
end
end
return 0
endProcedure outNl
/* copy err end *****************************************************/
/* copy out begin ******************************************************
out interface simple with say only
***********************************************************************/
outIni: procedure expose m.
parse arg msg
return
endProcedure outIni
/*--- output a message to the current destination -------------------*/
out: procedure expose m.
parse arg msg
say msg
return 0
endProcedure out
/*--- set a new out destination and return old one ------------------*/
outDst: procedure expose m.
parse arg d
return ''
endProcedure outDst
/* return the contents of a string or std input */
inp2str: procedure expose m.
parse arg rdr, opt
return rdr
endProcedure inp2str
/* copy out end *****************************************************/
}¢--- A540769.WK.REXX.O13(DB2REVLO) cre=2006-04-20 mod=2006-05-08-17.42.30 F540769 ---
/* rexx ****************************************************************
db2revlo: copy load infos from several db2SubSystems
parameter:
get <sd> from <s1> <s2> ...
<sd> destination db2 subsystem i.e. DBOL
<s1> <s2> ... source db2 subsystems
this rexx copies tuples
from sysibm.syscopy of the source subsystems <s1> <s2> ...
to revi.db2load of the destinatin subsystem <sd>
and deletes rows older then 222 days from this table
history:
2006.04.18 W.Keller new
***********************************************************************/
/*--- main code: analyse arguments and call work function ------------*/
parse arg args
parse source . . m.this.name .
/*--- configure constants ---*/
m.dTable = 'revi.db2Load'/* name of destination table */
m.retries = 3 /* max num of retries in retryHandler */
m.selSrcOnly = 500 /* max rows to fetch per transaction */
m.retentionDays = 222 /* delete rows older than so many days*/
m.insLimit = -1 /* stop inserting after so many rows */
if args = '' then do
args = 'get dbaf from dbTf dbaf'
say m.this.name 'setting test arguments' fun subDest cFr subSrc
end
say m.this.name 'analysing arguments:' args
parse upper var args fun subDest cFr subSrc
if cFr ^= 'FROM' then
call errHelp 'from missing in arguments:' args
if words(subSrc) < 1 then
call errHelp 'source db2 subsystems missing in arguments:' args
select
when fun == 'GET' then call retryHandler subDest, subSrc
when fun == 'DO' then do
call adrSqlConnect subDest
call doGet subDest <> subSrc, subSrc
if m.oldTuples & m.retentionDays > 0 then
call doDelete subSrc
call adrSqlDisconnect
end
otherwise call errHelp 'bad function' fun ,
'in arguments:' args
end
say m.this.name 'end'
exit 0
/*--- retryHandler: retry to get the date from each subsystem --------*/
retryHandler: procedure expose m.
parse arg dest, src
say '---' m.this.name 'retryHandler begin'
done = ''
do rx=1 to m.retries while src ^= ''
say '--- begin try' rx 'for' src
next = ''
do sx=1 to words(src)
s1 = word(src, sx)
say '--- try' rx 'from' s1
/* call get via tso not directly in rexx,
so we get an abend as a condition code back| */
cc = adrTso(m.this.name 'do' dest 'from' s1, '*')
if cc = 0 then do
say '--- ok from' s1
done = done s1
end
else do
say '--- error from' s1 'rc' cc
next = next s1
end
end
src = next
end
say '--- successfully got' dest 'from' done
if src ^= '' then do
say '--- failed getting' dest 'from' src
call err '--- failed getting' dest 'from' src
end
return
endProcedure retryHandler
doGet: procedure expose m.
parse upper arg otherLoc, src
cDup = 0
cIns = 0
cCom = 0
cSrc = 0
cRead = 0
firstTst = ''
lastTst = ''
m.oldTuples = 1
do forever
say time() 'preparing'
call doGetPrepare otherLoc, src
drop strt.
strt.tst = ''
strt.cnt = 0
/* select latest rows from destination */
call adrSql "open" m.selDestCrs
do forever
call adrSql m.selDestFetch
if sqlCode = 100 then
leave
/* say 'fetch dest:' expVars(m.columns) */
strt.dbname.tsname.dsnum.ictype.jobname.authid = 1
strt.tst = timestamp
strt.cnt = strt.cnt + 1
end
say time() 'startTimestamp' strt.tst 'with' strt.cnt 'tuples'
if strt.tst = '' then do
strt.tst = left(date(s),4)'-'substr(date(s), 5, 2) ,
|| '-01-00.00.00.000000'
say 'no old tuples setting startTimestamp to' strt.tst
m.oldTuples = 0
end
if strt.cnt >= m.selSrcOnly then
call err strt.cnt 'startTimestamp rows >=' m.selSrcOnly ,
'ROWS ONLY of select from' src
call adrSql "close" m.selDestCrs
/* select rows from source and insert them */
call adrSql "open" m.selSrcCrs "using :strt.tst"
cSrc = 0
do forever
call adrSql m.selSrcFetch
if sqlCode = 100 then
leave
cSrc = cSrc + 1
/* say 'fetch' src':' expVars(m.columns) */
if timestamp == strt.tst then do
if 'VAR' = symbol( ,
'strt.dbname.tsname.dsnum.ictype.jobname.authid') ,
then do
/* say 'same timestamp duplicate' */
cDup = cDup + 1
iterate
end
else do
/* say 'same timestamp not copied yet' */
end
end
call adrSql m.insDst
cIns = cIns + 1
if firstTst = '' then
firstTst = timestamp
lastTst = timestamp
end
call adrSql "close" m.selSrcCrs
call adrSql "commit"
cCom = cCom + 1
cRead = cRead + cSrc
say time() 'inserted' cIns', dups' cDup', read' cRead,
|| ', commits' cCom 'from' src
if cSrc < m.selSrcOnly then
leave
if m.insLimit > 0 then do
if cIns >= m.insLimit then do
say '--- insert Limit' m.insLimit 'reached, stopping'
leave
end
end
end
say '--- inserted' cIns', dups' cDup', read' cRead,
|| ', commits' cCom 'from' src
say ' from' firstTst 'to' lastTst
return
endProcedure doGet
/*--- prepare sql's --------------------------------------------------*/
doGetPrepare: procedure expose m.
parse upper arg otherLoc, src
cols = 'timestamp, dbname, tsname, dsnum, ictype, jobname, authid'
m.columns = cols
hCols = ':timestamp,:dbname,:tsname,:dsnum,:ictype,:jobname,:authid'
sTable = 'sysibm.sysCopy'
if otherLoc then
sTable = 'CHSKA000'src'.'sTable
/* select latest rows from dTable */
sql = "select" cols ,
"from" m.dTable ,
"where subsys = '"src"'",
"and timestamp =",
"( select max(timestamp)",
"from" m.dTable ,
"where subsys = '"src"'",
")"
call adrSql "prepare s1 from :sql", , sql
call adrSql "declare c1 cursor for s1"
m.selDestCrs = 'c1'
m.selDestFetch = 'fetch c1 into' hCols
/* select next rows from sTable */
sql = "select" cols ,
"from" sTable ,
"where timestamp >= ?",
"and timestamp < current timestamp - 10 minutes",
"and icType in ('P','R','S','W','X','Y','Z')",
"order by timestamp asc" ,
"fetch first" m.selSrcOnly "rows only"
call adrSql "prepare s2 from :sql", ,sql
call adrSql "declare c2 cursor for s2"
m.selSrcCrs = 'c2'
m.selSrcFetch = 'fetch c2 into' hCols
/* insert 1 row into dTable */
sql = "insert into" m.dTable ,
"(subSys, " cols")",
"values('"src"', ?, ?, ?, ?, ?, ?, ?)"
call adrSql "prepare s3 from :sql", ,sql
m.insDst = "execute s3 using" hCols
return
endProcedure doGetPrepare
doDelete: procedure expose m.
parse upper arg src
sql = "delete" ,
"from" m.dTable ,
"where subsys = '"src"'",
"and timestamp < current timestamp" ,
"-" m.retentionDays "days"
call adrSql "execute immediate :sql", , sql
cDel = sqlErrd.3
call adrSql "commit"
say '--- deleted' cDel 'rows older than' m.retentionDays 'days'
return
endProcedure doDelete
expVars:
parse arg ggVars
ggVars = translate(ggVars, ' ', ',')
ggRes = ''
do ggIx = 1 to words(ggVars)
ggWW = word(ggVars, ggIx)
ggRes = ggRes', 'ggWW'='value(ggWW)
end
if ggRes ^= '' then
ggRes = substr(ggRes, 3)
return ggRes
endSubroutine expVars
err:
parse arg ggMsg
say 'fatal error' ggMsg
if 'VAR' = symbol('m.selSrcCrs') then
call adrSql 'close' m.selSrcCrs, '*'
if 'VAR' = symbol('m.selDestCrs') then
call adrSql "close" m.selDestCrs, '*'
call adrSqlDisconnect '*'
call adrSqlDisconnect '*'
call errA ggMsg
endSubroutine err
/* copy adrIsp begin *************************************************/
/**********************************************************************
adrSql: execute sql thru the dsnRexx interface
***********************************************************************/
adrSql: /* no procedure, to keep variables sql... */
parse arg ggSqlStmt, ggRet, ggNo
if ggNo <> '1' then do
ggSqlStmt = 'execSql' ggSqlStmt
if ggNo ^= '' then
ggNo = '==>' ggNo
end
address dsnRexx ggSqlStmt
/* say 'sqlCode' sqlCode 'rc' rc 'for' ggSqlStmt ggNo */
if rc = 0 then do
return 0
end
else if rc < 0 then do
if ggRet == '*' then nop
else if wordPos(sqlCode, ggRet) > 0 then nop
else
call err "sql rc" rc sqlmsg() ggNo
end
else if sqlWarn.0 ^== ' ' then do
say 'warning' sqlMsg() 'for' ggSqlStmt ggNo
end
return sqlCode
endSubroutine adrSql
adrSqlConnect: procedure
parse arg ggSys, ggRetCon
if adrTSO("SUBCOM DSNREXX", '*') <> 0 then do
sRc = RXSUBCOM('ADD','DSNREXX','DSNREXX') /* ADD HOST CMD ENV */
if sRc <> 0 then
call err 'rc' sRc 'from RXSUBCOM(ADD, DSNREXX, DSNREXX)'
end
call adrSql "connect" ggSys, ggRetCon ,1
return
endProcedure adrSqlConnect
adrSqlDisconnect: procedure
parse arg ggRet
call adrSql "disconnect ", ggRet, 1
return
endProcedure adrSqlDisconnect
sqlMsg: /* no procedure, to keep variables sql... */
ggW = ''
do ggX=0 to 10
if sqlWarn.ggx <> '' then
ggw = ggw ggx'='sqlWarn.ggx
end
return 'sqlCode' sqlCode 'state' sqlState 'warn' ggW ,
'errMc' strip(translate(sqlerrmc, ',', 'FF'x))':' ggSqlStmt
endSubroutine sqlMsg
/**********************************************************************
adrDsn: send a command to db2 with the TSO dsn command
***********************************************************************/
adrDsn: procedure
parse arg sys, cmd, rcOk
call adrTso 'alloc dd(sysprint) new reuse'
push 'END'
push cmd
rr = adrTso('DSN SYSTEM('sys')', '*')
say 'rc' rr 'adrTso DSN SYSTEM('sys') cmd' cmd
if wordPos(rr, rcOk) < 1 then do
say 'error rc' rr 'in adrTso DSN SYSTEM('sys') cmd' cmd
call adrTso 'execio * diskr sysprint (finis stem pr.)'
say 'sysprint' pr.0 'lines'
do x=1 to pr.0
say strip(pr.x, 't')
end
call adrTso 'free dd(sysprint) '
call err 'rc' rr 'in adrTso DSN SYSTEM('sys') cmd' cmd
end
call adrTso 'free dd(sysprint)'
return rr
endProcedure adr Dsn
/**********************************************************************
adr*: address an environment
***********************************************************************/
adrIsp:
parse arg ggIspCmd, ggRet
address ispexec ggIspCmd
if rc = 0 then return 0
else if ggRet == '*' then return rc
else if wordPOS(rc, ggRet) > 0 then return rc
else
call err 'adr ispExec rc' rc 'for' ggIspCmd
endSubroutine adrIsp
adrEdit:
parse arg ggEditCmd, ggRet
address isrEdit ggEditCmd
if rc = 0 then return 0
else if ggRet == '*' then return rc
else if wordPOS(rc, ggRet) > 0 then return rc
else
call err 'adr isrEdit rc' rc 'for' ggEditCmd
endSubroutine adrEdit
/* copy adrIsp end *************************************************/
/* copy adr begin ****************************************************/
/*--- format dsn from tso format to jcl format -----------------------*/
dsn2jcl: procedure
parse arg dsn .
if left(dsn,1) = "'" then
return strip(dsn, 'b', "'")
else if sysvar('SYSPREF') = '' then
return dsn
else
return sysvar('SYSPREF')'.'dsn
endProcedure dsn2Jcl
/*--- format dsn from jcl format to tso format -----------------------*/
dsnFromJcl: procedure
parse arg dsn .
return "'"dsn"'"
endProcedure dsnFromJcl
/**********************************************************************
io: read or write a dataset with the following callsequences:
read: readDDBegin, readDD*, readDDEnd
write: writeBegin, writeDD*, writeEnd
readDD returns true if data read, false at eof
***********************************************************************/
/*--- prepare reading from a DD --------------------------------------*/
readDDBegin: procedure
return /* end readDDBegin */
/*--- read from DD ggDD into ggSt, return false at eof ---------------*/
readDD:
parse arg ggDD, ggSt, ggCnt
if ggCnt = '' then
ggCnt = 100
call adrTso 'execio' ggCnt 'diskr' ggDD '(stem' ggSt')', 2
return (value(ggSt'0') > 0)
return /* end readDD */
/*--- finish reading DD ggDD ----------------------------------------*/
readDDEnd: procedure
parse arg ggDD
call adrTso 'execio 0 diskr' ggDD '(finis)'
return /* end readDDEnd */
/*--- prepare writing to DD ggDD -------------------------------------*/
writeDDBegin: procedure
parse arg ggDD
/* ensure file is erased, if no records are written */
call adrTso 'execio' 0 'diskw' ggDD '(open)'
return /* end writeDDBegin */
/*--- write to gg ggDD from stem ggSt, ggCnt records -----------------*/
writeDD:
parse arg ggDD, ggSt, ggCnt
if ggCnt == '' then
ggCnt = value(ggst'0')
call adrTso 'execio' ggCnt 'diskw' ggDD '(stem' ggSt')'
return
endSubroutine writeDD
/*--- end writing to dd ggDD (close) --------------------------------*/
writeDDEnd: procedure
parse arg ggDD
call adrTso 'execio 0 diskw' ggDD '(finis)'
return /* end writeDDEnd */
/*--- send ggTsoCmd to tso, fail if rc <> 0 or not listed in ggRet ---*/
adrTso:
parse arg ggTsoCmd, ggRet
address tso ggTsoCmd
if rc == 0 then return 0
else if ggRet == '*' then return rc
else if wordPos(rc, ggRet) > 0 then return rc
else
call err 'adrTso rc' rc 'for' ggTsoCmd
return /* end adrTso */
/* copy adr end ****************************************************/
/* copy err begin ******************************************************
messages, errorhandling,help
***********************************************************************/
/* caller should define err as follows ---------------------------------
err:
parse arg ggMsg
call errA ggMsg
exit 12
endSubroutine err
end call should define err ----------------------------------------*/
/*--- error routine: abend with message ------------------------------*/
errA:
parse arg ggTxt
parse source . . ggS3 . /* current rexx */
say 'fatal error in' ggS3':' ggTxt
x = x / 0
exit setRc(12)
endSubroutine errA
/*--- abend with Message after displaying help -----------------------*/
errHelp: procedure
parse arg ggMsg
say 'fatal error:' ggMsg
call help
call err ggMsg
endProcedure errHelp
/*--- set rc for ispf: -----------------------------------------------*/
if a cmd is run by ispStart, its RC is ignored,
but ISPF passes the value of the shared varible zIspfRc
back as return code
----------------------------------------------------------------------*/
setRc: procedure
parse arg zIspfRc
if sysVar('sysISPF') = 'ACTIVE' then do
say 'exitRc setting zIspfRc='zIspfRc
address ispExec vput 'zIspfRc' shared
end
return zIspfRc
endProcedure setRc
/*--- output a trace message if m.trace is set -----------------------*/
trc: procedure expose m.
parse arg msg
if m.trace == 1 then
say 'trc:' msg
return
endProcedure trc
/*--- quote string txt using quoteChar qu ("""" ==> ") ---------------*/
quote: procedure
parse arg txt, qu
if qu = '' then
qu = '"'
res = qu
ix = 1
do forever
qx = pos(qu, txt, ix)
if qx = 0 then
return res || substr(txt, ix) || qu
res = res || substr(txt, ix, qx-ix) || qu || qu
ix = qx + length(qu)
end
endProcedure quote
/*--- return current time and cpu usage ------------------------------*/
showtime: procedure
parse arg showmsg
return time() sysvar('syscpu') /* sysvar('syssrv') */ showmsg
/--- display the first comment block of the source as help -----------*/
help: procedure
parse source . . s3 .
say 'help for rexx' s3
do lx=1 by 1
if pos('/*', sourceLine(lx)) > 0 then
leave
else if lx > 10 then do
say 'initial commentblock not found for help'
return
end
end
do lx=lx+1 by 1
li = strip(sourceLine(lx), 't', ' ')
if pos('*/', li) > 0 then
leave
say li
end
return 4
endProcedure help
/* copy err end *****************************************************/
}¢--- A540769.WK.REXX.O13(DB2UT) cre=2011-06-03 mod=2011-06-03-10.36.56 A540769 ---
/* rexx ****************************************************************
db2Ut: Entwickler Interface für Db2 Utilites
dieses übernimmt verschiedene Funktionen von Db2Ut, typischerweise
in dieser Reihenfolge
* ohne parm: Aufruf von DB2Ut mit ispf newappl(DBUT)
* parm = panel: Anzeige des Panels und ausführen der Funktionen
* param = DB .... storedProcedure Db2UtilP aufrufen mit den
mitgegebenen Parametern
* rexxName = Db2UtilP Funktion der StoredProcedure Db2UtilP
************************************************************************
23.12.2008 W.Keller utTemplate mit m.explicitTempl
19.12.2008 F.Schuck REORG eingebaut
************************/ /* end help **********************************
09.12.2008 F.Schuck richtige Table fuer Load bzw. Fehlermeldung
04.12.2008 W.Keller fix uninitialisierte .delims variable
10.11.2008 W.Keller native jcl
17.10.2008 W.Keller delimited, help
17.09.2008 W.Keller neu
***********************************************************************/
m.self.version = '1.0 - 19.12.2008'
parse arg pArgs
parse upper var pArgs pA1 pA2 .
parse source s1 s2 s3 s4 s5
m.self.name = s3
m.out = 0
m.out.0 = 0
m.punch.0 = 0
m.debug = 0
m.maxRc = 0
call dbg 'db2Ut start' m.self.version 'args' pArgs
call dbg 'db2Ut start source' s1',' s2',' s3',' s4',' s5
call dbg 'db2Ut user' userid()
call catIni
call scanWinIni
m.id = userid()'.DB2UT'
m.cnf.procDb2Ut = 'DB2UTIL.DB2UTIL'
m.cnf.procSys = 'DB2ADMIN.DSNUTILS'
m.cnf.lf = '\'
m.cnf.eSt = '\' /* end of statement NO semicolon, lf */
m.mapTab = ''
m.templ.0 = 0
m.templ.copyD = "DSN('&SSID..&DB..&SN..P&PART..&UNIQ.')"m.cnf.lf,
"DATACLAS(ENN0X) MGMTCLAS(SUB#ADB1) STORCLAS(FAR$N)"m.cnf.lf,
"SPACE (100,10000) TRK"
m.templ.SYUTD = "DSN('&SSID..&DB..&SN..P&PART..&UNIQ..UT')"m.cnf.lf,
"DATACLAS(ENN0X) MGMTCLAS(COM#E001)"m.cnf.lf,
"SPACE (100,10000) TRK"
m.templ.SOUTD = "DSN('&SSID..&DB..&SN..P&PART..&UNIQ..SRT')"m.cnf.lf,
"DATACLAS(ENN0X) MGMTCLAS(COM#E001)"m.cnf.lf,
"SPACE (100,10000) TRK"
m.templ.srecd = ,
"DSN('&SSID..&DB..&SN..P&PART..D&YE(3).&MO.&DA..REC')"m.cnf.lf,
"DATACLAS(ENN0X) MGMTCLAS(COM#A032)"m.cnf.lf,
"SPACE (100,10000) TRK"
m.templ.new = ,
"DATACLAS(ENN0X) MGMTCLAS(COM#A041) STORCLAS(FAR$N)"m.cnf.lf,
"SPACE TRK MAXPRIME 600"
if s3 == 'DB2UTILP' then
call storedProcCall pArgs
else if pArgs = '' then
call switchIspfAppl
else if pA1 = 'PANEL' then
call doPanel
else if pA1 = 'DB' then
call sqlCallDb2Ut pA2, subWord(pArgs, 3)
else
call err 'bad pArgs' pArgs
mr = m.maxRc
call globalCleanup
exit mr
/*--- kleine Tests ---------------------------------------------------*/
exit testStoredProc('DBAF')
exit testmaptab()
exit testRebind()
call sqlCallDb2Ut
call testCopy1
exit
/*--- aufräumen am Ende des Programms --------------------------------*/
globalCleanup: procedure expose m.
if symbol('m.db') == 'VAR' & m.db <> '-' then do
call dbg 'committing in' m.db
call sqlCommit
call dbg 'disconnect from' m.db
call sqlDisconnect
end
do px=1 to m.punch.0
pu = m.punch.px
drop m.punch.pu
end
m.out.0 = 0
m.punch.0 = 0
m.maxRc = 0
drop m.db
return
endProcedure globalCleanup
/*--- set global variables -------------------------------------------*/
setGlobal: procedure expose m.
parse arg name, val
call dbg 'setting global' name '=' val
if name = 'DB' then do
if symbol('m.DB') == 'VAR' then
call err 'global db already set'
call sqlConnect val
end
m.name = val
return
endProcedure setGlobal
/***********************************************************************
panel Funktionen
***********************************************************************/
/*--- switch ispf application ----------------------------------------*/
switchIspfAppl: procedure expose m.
call adrIsp 'control errors return'
/* if we are in an edit macro, we must do a macro first */
call adrEdit 'macro (aa)', '*'
call adrIsp "select cmd(DB2UT panel) newappl(DBUT) passlib"
return
endProcedure switchIspfAppl
/*--- panel Verarbeitung ---------------------------------------------*/
doPanel: procedure expose m.
msg = ''
/* restart Punkt nach Fehlern */
doPanelRestart:
call adrIsp 'control errors return'
call errReset , 'signal doPanelErrHandler'
do forever
msg = doPanelOne(msg, errMsg)
call globalCleanup
if msg = 'end' then
exit /* nicht return wegen FehlerHandler | */
call doPanelErrMsg msg
end
/* error handler: Fehler anzeigen und wieder von vorn */
doPanelErrHandler:
call errReset 'h'
if ^ doPanelErrMsg(ggTxt) then do /* falls keine panel msg, */
call errSay ggTxt /* anzeigen im Tso */
msg = 'msg(dbut213)'
end
call globalCleanup
signal doPanelRestart
endProcedure doPanel
/*--- panelInfos aus FehlerMeldung rausholen -------------------------*/
doPanelErrMsg: procedure expose m. msg errmsg
parse arg txt
sx = pos('££', txt)
if sx < 1 then do
msg = ''
errMsg = ''
return 0
end
qq = substr(txt, sx+2)
ex = pos('££', qq)
if ex > 0 sx then
qq = left(qq, ex-1)
parse var qq msg '£' cur '£' errMsg
if msg = '' | length(msg) > 8 then
call err 'bad msg "'msg'" in' txt
msg = 'msg('msg')'
if cur <> '' then
msg = msg 'cursor('cur')'
return 1
endProcedure doPanelErrMsg
/*--- panel anzeigen und auf User reagieren --------------------------*/
doPanelOne: procedure expose m.
parse arg msg, errMsg
di = adrIsp('display panel(db2Ut)' msg, '*')
if di <> 0 then do
if di <> 4 & di <> 8 then
call out 'adrDisp rc' di
return 'end'
end
call mAdd mCut(st, 0), 'db' susy, 'id' id, t1 strip(obj1)
if t2 <> '' & obj2 <> '' then
call mAdd st, t2 strip(obj2)
if t3 <> '' & obj3 <> '' then
call mAdd st, t3 strip(obj3)
/* parameter für jede Utility Fun zusammenstellen */
do fx=1 to 3
fa = value('fu'fx)
if fa = '' then
iterate
if fa = 'LOA' | fa = 'UNL' then do
shr = 'SHRLEVEL' shr
if punch = '' then
punch = '-'
else
punch = dsn2jcl(punch)
if fa = 'UNL' then do
call mAdd st, fa dsn2jcl(loadf), punch, shr
if unli <> '' then
call mAdd st, 'LIMIT' unLi
if d = 'Y' then
call mAdd st, ' delimited' analyseDelimiter(delim)
end
else do
if punch = '' then do
if d = 'Y' then
oDelim = analyseDelimiter(delim)
else
oDelim = ''
end
else do
pn = loadPunch(punch)
if loadf ^== '' then
nop
else if pn ^== '' & m.pn.inDsn ^== '' then
loadf = m.pn.inDsn
oDelim = m.pn.delims
end
if loadf = '' then
return '££DBUT211£loadf££'
call mAdd st, fa dsn2jcl(loadf) shr 'resume' p
if oDelim <> '' then
call mAdd st, ' ' oDelim
if pn ^== '' then do
if t1 <> 'TB' | obj2 <> '' | obj3 <> '' ,
| verify(obj1, '*?,' , 'm') > 0 then
return '££DBUT218£t1££'
call mAdd st, ' into' obj1 m.pn.flds
end
end
end
else do
call mAdd st, fa
end
end
/* Funktion im gewählten runMode ausführen */
src = mCat(st, ' ')
call dbg 'panel db' susy 'src' src
call genJobcards mCut(jcl,0), jobCard1, jobCard2, jobCard3, jobCard4
if r = 'F' then do
call sqlCallDb2Ut susy, subword(src ,3)
end
else if r = 'V' then do
call genJcl jcl, susy, st
call outputSysprint jcl, 0
end
else if r = 'S' then do
call genJcl jcl, susy, st
call writeDsn 'SYSOUT(T) dd(ir) .WRITER(INTRDR)', 'M.JCL.', , 1
end
else if r = 'N' then do
call nativeJcl jcl, susy, subword(src ,3)
call outputSysprint jcl, 0
end
else do
return '££dbut212£r££'
end
return ''
endProcedure doPanelOne
/*--- delimiter syntax umformen:
wir erlauben nackte Zeichen, Strings oder hex Strings
und mehrere dürfen zusammengehängt sein
- Utility ist restriktiver -------------------------------------*/
analyseDelimiter: procedure expose m.
parse arg delim
de = ''
dc = 0
call scanReset ds
call scanSrc ds, delim
do while ^ scanAtEnd(scanSkip(ds))
hex = 0
if scanString(ds, ''' x'' X'' " x" X"') then do
d1 = m.ds.val
hex = pos(left(m.ds.tok, 1), 'xX') > 0
end
else do
call scanChar ds, 1
d1 = m.ds.tok
end
if ^ hex then do
do xx=1 by 1 to length(d1)
de = de quote(substr(d1, xx, 1), "'")
dc = dc + 1
end
end
else do
d1 = translate(m.ds.val)
if verify(d1, '0123456789ABCDEF') > 0 ,
| length(d1) // 2 <> 0 then
call scanErr ds, 'bad hex literal' ,
'££DBUT216£delim£'d1'££'
do xx=1 by 2 to length(d1)
de = de "X'"substr(d1, xx, 2)"'"
dc = dc + 1
end
end
end
if dc > 3 then
call err 'mehr als drei Delimiter' ,
'££DBUT217£delim£'de'££'
de = de subword("',' '""' '.'", dc+1)
if words(de) <> 3 then
call err 'delimiter not 3 words:' de
return de
endProcedure analyseDelimiter
/*--- punchfile einlesen und analysieren, falls nötig ----------------*/
loadPunch: procedure expose m.
parse arg pu
if pu = '-' then
return ''
if symbol('m.punch.pu') = 'VAR' then
nd = m.punch.pu
else do
nd = mAdd(punch, pu)
m.punch.pu = nd
call analysePunch nd, pu
end
return nd
endProcedure loadPunch
/*--- analyse a punchfile ----------------------------------------------
nd for punch info
puDsn: dsn of the punch file to analyse --------------------*/
analysePunch: procedure expose m.
parse arg nd, puDsn
if sysdsn("'"puDsn"'") <> 'OK' then
call err 'punch fehlt: ££DBut214£punch£' ,
|| puDsn':' sysdsn("'"puDsn"'")'££'
rdr = catMake('-r', puDsn)
sc = scanUtilSql(rdr)
call scanUtil sc
ld = 0
do while m.sc.utilType <> ''
if m.sc.utilType <> 'u' then do
call scanUtil sc
end
else if m.sc.val == 'TEMPLATE' then do
parse value analyseTemplate(sc) with nm templ.nm
end
else if m.sc.val == 'LOAD' then do
if ld then
call scanErr sc, 'more than one load'
ld = 1
call analyseLoad nd, sc
x = m.nd.inddn
if symbol('templ.x') = 'VAR' then
m.nd.inDsn = templ.x
else
m.nd.inDsn = ''
end
else do
call scanUtil sc
end
end
if ld < 1 then
call scanErr sc, 'no load'
call jClose rdr
return
endProcedure analysePunch
/*--- analyse a utility template statement
return <template name> <dsn> ----------------------------*/
analyseTemplate: procedure expose m.
parse arg sc
if scanUtil(sc) ^== 'n' then
call scanErr sc, 'template name expected'
res = m.sc.val
do while ^ (scanUtil(sc) = 'u' | m.sc.utilType = '')
if m.sc.utilType == 'n' & m.sc.utilBrackets = 0 then do
if m.sc.val = 'DSN' then
res = res scanUtilValue(sc, 1)
end
end
if words(res) > 2 then
call err 'to many dsns in template' res
return res
endProcedure analyseTemplate
/*--- analyse load put atts into stem nd -----------------------------*/
analyseLoad: procedure expose m.
parse arg nd, sc
if scanUtil(sc) ^== 'n' & m.sc.val ^== 'DATA' then
call scanErr sc, 'load data expected'
/* the load into syntax is too complex to analyse completely
we only catch the interesting (and disturbing) parts */
m.nd.inDdn = ''
m.nd.part = ''
m.nd.flds = ''
m.nd.tb = ''
m.nd.delims = ''
intos = 0
do while 'u' ^== scanUtil(sc) & m.sc.utilType ^== ''
if m.sc.utilType ^= 'n' | m.sc.utilBrackets ^= 0 then do
if m.sc.utilType = '(' then do
if m.sc.utilBrackets ^== 1 | intos ^== 1 then
call scanErr 'bad brackets for fields'
call scanBack sc, '('
m.nd.flds = '('scanUtilValue(sc, 0, m.cnf.lf)')'
end
iterate
end
opt = m.sc.val
if wordPos(opt, 'INDDN PART') > 0 then do
m.nd.opt = scanUtilValue(sc)
end
else if wordPos(opt, 'WHEN CCSID') > 0 then do
vv = scanUtilValue(sc) /* skip over brackets */
end
else if opt = 'INTO' then do
intos = intos+1
if intos > 1 then
call scanErr sc, 'more than one into not implemented'
if scanUtil(sc) ^== 'n' | m.sc.val ^== 'TABLE' then
call scanErr sc, 'into table expected'
if ^ scanSqlQuId(scanSkip(sc)) then
call scanErr sc, 'table name expected'
m.nd.tb = m.sc.val
m.nd.tbQu = m.sc.tok
end
else if opt = 'FORMAT' then do
if scanUtil(sc) ^== 'n' then
call scanErr sc, 'format type expected'
if m.sc.val = 'UNLOAD' then
iterate
else if m.sc.val ^== 'DELIMITED' then
call scanErr sc, 'format' m.sc.val 'not supported'
parse value "',' '""', '.'" with d.col d.cha d.dec
do while scanUtil(sc) == 'n' ,
& wordPos(m.sc.val, 'COLDEL CHARDEL DECPT') > 0
ky = left(m.sc.val, 3)
if ^ scanString(scanSkip(sc), "' x' X'") then
call scanErr sc, 'delimiter string expected'
d.ky = m.sc.tok
if ^abbrev(d.ky, "'") then
upper d.ky
end
m.nd.delims = 'DELIMITED' d.col d.cha d.dec
end
end
return
endProcedure analyseLoad
/*--- jcl generieren für Run mit db2ut -------------------------------*/
genJobcards: procedure expose m.
parse arg oo
do ax=2 to arg()
if arg(ax) <> '' then
call mAdd oo, arg(ax)
end
return
endProcedure genJobcards
genJcl: procedure expose m.
parse arg oo, susy, st
call mAdd jclTso(oo, 'db2Ut', 'S1', 1), "%DB2UT -"
do ix = 1 to m.st.0
line = strip(m.st.ix)
sx = 1
of = 4 - 2 * (wordPos(translate(word(line, 1)),
, 'ID DB COP RUN REB LOA UNL' ) > 0)
do forever
px = pos(m.cnf.lf, line, sx)
if px = 0 then do
call mAdd oo, left('', of)substr(line, sx) '-'
leave
end
call mAdd oo, left('', of)substr(line, sx, px-sx) '-'
of = 4
sx = px + 1
end
end
ox = m.oo.0
m.oo.ox = left(m.oo.ox, length(m.oo.ox)-1)
do ox=1 to m.oo.0
if length(m.oo.ox) >= 72 then
call err 'genJcl line overflow ('length(m.oo.ox)'):' m.oo.ox
end
return
endProcedure genJcl
/***********************************************************************
sql call auf db2UtilP und Ausgabe Output
***********************************************************************/
/*--- connect und sql call auf db2UtilP ------------------------------*/
sqlCallDb2Ut: procedure expose m.
parse arg db, src
if db <> '' then
call sqlConnect db
rst = 'NO'
retcode = -9876
e = ''
z = 0
call debugSqlCurrent 'before sql call'
call dbg "call" m.cnf.procDb2Ut "("src", ...)"
call sqlExec "call" m.cnf.procDb2Ut "(:src, :rst)", 0 +466
call dbg 'after call src='src
call debugSqlCurrent 'after sql call'
call outputSysprint , 1
return 0
endProcedure sqlCallDb2Ut
/*--- session sysprint oder stem ausgeben ----------------------------*/
outputSysprint: procedure expose m.
parse arg stem, summ
if m.out & m.out.0 > 0 & stem = '' then do
call sysPrintInsert out /* restlichen Output einfügen */
m.out.0 = 0
end
/* outputfile utilPrt allozieren */
if listDsi('utilPrt' file) <= 4 then
listDsi = 0
else
listDsi = sysReason
call dbg 'listDsi(utilPrt file)' listDsi sysMsgLvl2
if sysVar('sysISPF') = 'ACTIVE' then do
ty = 1
call adrTso 'alloc reuse dd(utilPrt)',
'recfm(v b) lrecl(136) block(32760) dsorg(PS)'
end
else if listDsi <> 2 then do
ty = 0 /* bereits alloziert */
end
else if SYSVAR('SYSENV') = 'FORE' then do
ty = 2
call adrTso 'alloc reuse dd(utilPrt) dsName(*)',
'recfm(v b) lrecl(136) block(32760) dsorg(PS)'
end
else if adrTso( 'alloc reuse sysout(*) dd(utilPrt)',
'recfm(v b) lrecl(136) block(32760) dsorg(PS)',
, '*') = 0 then do
ty = 3
end
else do
ty = -1
say '--- sysprint output'
end
if ty >= 0 then
call writeDDBegin utilPrt
if stem = '' then do /* daten aus session.sysprint */
Call sqlPreOpen 2, 'SELECT SEQNO, TEXT' ,
'FROM SESSION.SYSPRINT ORDER BY 1'
call dbg 'utility output sysprint'
stem = mCut(qq, 0)
do while sqlExec('fetch c2 into :seq, :txt', 0 100) = 0
call mAdd stem, strip(substr(txt, 2), 't')
end
call sqlClose 2
end
bb = mCut(bb, 0)
if summ == 1 then do
do ox=1 to m.stem.0
if abbrev(m.stem.ox, '+++') then do
call mAdd bb, m.stem.ox
r = word(m.stem.ox, words(m.stem.ox))
if datatype(r, 'n') then
m.maxRc = max(m.maxRc, r)
end
end
call mAdd bb, '+++' myTime() 'max rc' m.maxRc, ''
end
aa = mCut(aa, 0)
all = bb stem
ox = 0
do ax=1 to words(all)
st = word(all, ax)
do sx = 1 to m.st.0
txt = strip(m.st.sx, 't')
if ty < 0 then do
say txt
end
else do
do cx=1 by 132 while cx+132 <= length(txt)
ox = ox + 1
out.ox = substr(txt, cx, 132)
end
ox = ox + 1
out.ox = substr(txt, cx)
if ox > 100 then do
call writeDD utilPrt, out., ox
ox = 0
end
end
end
end
call writeDD utilPrt, out., ox
call writeDDEnd utilPrt
call dbg 'utilprt type' ty 'end output'
if ty = 1 then do /* view ouput */
call adrIsp "LMINIT DATAID(vwId) DDNAME(utilPrt) ENQ(SHRW)"
call dbg 'dataid' vwId
call adrIsp "VIEW DATAID("vwId")", 0 4
call adrIsp "LMFREE DATAID("vwId")"
end
if ty >= 1 then
call adrTso 'free dd(utilPrt)', '*'
return 0
endProcedure outputSysprint
myTime: procedure
return time() 'cpu' strip(sysvar('syscpu'))
/*--- say the contents of session.sysprint ---------------------------*/
showSysPrint: procedure expose m.
p = ':m.st.sx.'
call sqlPreAllCl 12, 'select seqNo, text',
'from session.sysPrint order by seqNo asc', st,
, p'sq,' p'tx'
say '-- sysprint has' m.st.0 'records'
do sx=1 to m.st.0
say right(m.st.sx.sq, 3) strip(m.st.sx.tx, 't')
end
return
endProcedure showSysprint
/*--- insert the lines sysibm.sysprint or stem oo (if not '')
into session.sysprint with prefix pref
if opt='b' before existing rows, otherwise after ---------------*/
sysprintInsert: procedure expose m.
parse arg oo, pref, opt
call sqlPreAllCl 12, 'select count(*), min(seqNO), max(seqNo)',
'from session.sysPrint', spr,
, ':cnt, :min :minI, :max :maxI'
call dbg 'sysprint count' cnt 'min' min minI 'max' max maxI
if oo <> '' then do
call sqlPrepare 5,"insert into session.sysPrint values (?, ?)"
if opt = 'b' then
sf = min - m.oo.0
else
sf = max + 1
sq = sf
do ix=1 to m.oo.0
tx = '?'pref || m.oo.ix /* printer vorschub auf pos 1 ||?*/
if length(tx) > 254 then
tx = left(tx, 251)'...'
call sqlExecute 5, sq, tx
sq = sq + 1
end
call dbg 'sysprint insert' oo'.'m.oo.0 'from' sf 'to' (sq-1)
end
else do
call sqlPreAllCl 12, 'select count(*), min(seqNO), max(seqNo)',
'from sysIbm.sysPrint', spr,
, ':sCn, :sMi :sMiI, :sMa :sMaI'
call dbg 'sysibm count' sCn 'min' sMi sMiI 'max' sMa sMaI
if sCn < 1 then
call out 'sysibm.sysprint is empty'
else
call sqlExec "insert into session.sysPrint" ,
"select seqno +" (max+1-sMi) ", text" ,
"from sysibm.sysprint"
end
return
endProcedure sysprintInsert
/***********************************************************************
stored procedure call:
scan parms generate utility and rebind statements
and call dsnUtilU to execeute them
***********************************************************************/
/*--- scan parms, do the work, put output into session.sysprint ------*/
storedProcCall: procedure expose m.
parse arg args
call activateErrHandler
call dbg 'stored Proc call'
res = scanStringRun('-', args)
call errReset 'h'
call globalCleanup
return res
endProcedure storedProcCall
/*--- activate the error handler for the stored proc -----------------*/
activateErrHandler: procedure expose m.
call dbg 'activating err handler'
m.out = 1
call errReset 'h', 'exit(errHandler(ggTxt))'
return
endProcedure activateErrHandler
/*--- stored proc error handler insert error messages
into session.sysprint ----------------------------*/
errHandler: procedure expose m.
parse arg msg
call errReset 'h'
call errSay msg, st, 'e'
do sx=1 to m.st.0
call out m.st.sx
end
say '| inserting output into session.sysprint'
call sysprintInsert out
m.out.0 = 0
/* keine gute Idee, es kommt nur Schrott vom letzten Mal||| ???
say '| insert sysibm.sysprint into session.sysprint'
call sysprintInsert */
say '| globalCleanup'
call globalCleanup
call out '||| error' msg
call out '+++' myTime() 'error exit 12'
say '| inserting output into session.sysprint'
call sysprintInsert out
m.out.0 = 0
say '||| exit(12) |||'
exit(12)
endProcedure errHandler
/*--- connect to pDb, scan src, do the work and
insert output into session.sysprint ---------------------*/
scanStringRun: procedure expose m.
parse arg pDb, src
if pDb <> '' then
call setGlobal 'DB', pDb
if sqlExImm('declare global temporary table sysprint',
'(SEQNO INTEGER NOT NULL,',
'TEXT VARCHAR(254))', -601) = -601 then
call sqlExec 'DELETE FROM SESSION.SYSPRINT', 100
call sqlExec 'set :us = user'
m.superUser = us = 'A695189'
m.explicitTempl = 1
call sqlExec "insert into session.SYSPRINT values",
"(1, '?--- "m.self.name" start'",
"|| ' at" myTime()"'",
"|| ', version " m.self.version"'",
"|| ', db2 member ' || current member)"
call sqlExec "insert into session.SYSPRINT values",
"(2,' sqlUser" strip(us) m.superuser"'",
"|| ', osUser " userid()"')"
call debugSqlCurrent 'scanStringRun db' m.db
call genStatements mCut(gen, 0), src
if m.mapTab ^== '' then
/* das muessen wir vor dem PackageSwitch machen, weil
create statements nur fuer ein Package mit
mit DYNAMICRULES(RUN) erlaubt (sonst SQL -549)
fehlt dem Benutzer die Berechtigung
bekommt er eine Fehlermehldung */
call createMapTab m.mapTab
if pDb = '-' then do
call debugSqlCurrent 'before switch pkg'
call sqlExec "set current packageset = 'DB2ADMIN'"
call debugSqlCurrent 'after switch pkg'
end
cnt = 0
succ = 0
do gx=1 to m.gen.0
if abbrev(m.gen.gx, 'REBIND ') then do
parse var m.gen.gx st '-- ' info
call out '---' st
call out '-- ' info
cnt = cnt + 1
succ = succ + bindCommand(st)
end
else do
call runUtility m.id, m.gen.gx
end
end
if cnt <> succ then
call out '+++' cnt 'rebinds,' (cnt-succ) 'unsuccessful, rc 4'
else if cnt <> 0 then
call out '+++' cnt 'rebinds, all successful, rc 0'
call out "---" myTime() m.self.name "stop"
call sysPrintInsert out
return 0
endProcedure scanStringRun
/*--- connect to pDb, scan src, do the work and
insert output into session.sysprint ---------------------*/
nativeJcl: procedure expose m.
parse arg oo, pDb, src
if pDb <> '' then
call setGlobal 'DB', pDb
call debugSqlCurrent 'nativeJcl db' m.db
m.superuser = -1
m.explicitTempl = 0
call genStatements mCut(gen, 0), src
inReb = 0
step = 0
do gx=1 to m.gen.0
if abbrev(m.gen.gx, 'REBIND ') then do
parse var m.gen.gx st '-- ' info
if ^inReb then do
inReb = 1
step = step + 1
call jclTso oo, "db2 rebind", 'S'step, 0
call mAdd oo, "DSN SYS("m.db")"
end
call mAdd oo, st '-', ' /*' info '*/'
end
else do
inReb = 0
step = step + 1
call mAdd oo,
, left("//*", 50, '-') "db2 utility",
, "//S"step " EXEC PGM=DSNUTILB,REGION=0M,",
|| "PARM=("m.db",'"m.id"')" ,
, "//DSSPRINT DD SYSOUT=*" ,
, "//SYSPRINT DD SYSOUT=*" ,
, "//SYSUDUMP DD SYSOUT=*" ,
, "//UTPRINT DD SYSOUT=*" ,
, "//STPRIN01 DD SYSOUT=*" ,
, "//DUMMY DD DUMMY " ,
, "//SYSTEMPL DD DISP=SHR," ,
|| "DSN="m.db".DBAA.LISTDEF(TEMPL)" ,
, "//SYSIN DD *"
call utilityFormat oo, m.gen.gx
end
end
return 0
endProcedure nativeJcl
jclTso: procedure expose m.
parse arg oo, tit, step, proc
call mAdd oo ,
, left("//*", 50, '-') tit ,
, "//"left(step,9) "EXEC PGM=IKJEFT01,DYNAMNBR=200" ,
, "//SYSTSPRT DD SYSOUT=*" ,
, "//SYSPRINT DD SYSOUT=*"
if proc then
call mAdd oo, "//SYSPROC DD DISP=SHR,DSN=TSO.RZ1.P0.USER.EXEC"
call mAdd oo, "//SYSTSIN DD *"
return oo
endProcedure jclTso
genStatements: procedure expose m.
parse arg gen, src
call mCut c, 0
m.c.list = mCut(l, 0)
call utScanString c, src
call expandLists c
util = utGen(c)
if util = '' then
call out '--- no utility statements generated'
else
call mAdd gen, util
rebCnt = genRebinds(gen, c)
if util = '' & rebCnt = 0 then
call out "+++ nothing to do rc 4"
return
endProcedure genStatements
/*--- scan src, build tasks into stem u ------------------------------*/
utScanString: procedure expose m.
parse arg u, src
call scanSqlReset sc, , 0
call scanSrc sc, src
return utScan(u, sc)
endProcedure ut ScanString
/*--- build tasks into stem u by scanning with sc --------------------*/
utScan: procedure expose m.
parse arg u, sc
m.sc.utilBrackets = 0
utilAll = 'COPY RUNSTATS REBIND LOAD UNLOAD REORG'
gloAll = 'DB ID'
laLi = ''
call scanSqlType sc
do while m.sc.sqlType ^== ''
if utScanList(m.u.list, sc) then do
l = m.u.list
laLi = l'.'m.l.0
call dbg 'new list' laLi 'len' m.laLi.0
do x=1 to m.laLi.0
call dbg x m.laLi.x m.laLi.x.ts
end
end
else if m.sc.sqlType = 'i' ,
& wordPos(m.sc.val, gloAll) > 0 then do
g = m.sc.val
if scanSqlQuId(sc) then
call setGlobal g, m.sc.val
else if scanLit(sc, '-') then
call setGlobal g, '-'
else
call scanErr sc, 'qual id excpected after' g
call scanSqlType sc
end
else if m.sc.sqlType = 'i' ,
& pos(' 'm.sc.val, ' 'utilAll) > 0 then do
uw = word(substr(utilAll, pos(' 'm.sc.val, ' 'utilAll)), 1)
nd = mAdd(u, uw)
m.nd.util = uw
m.nd.shrlevel = 'C'
m.nd.delims = ''
m.nd.limit = ''
m.nd.list = laLi
if laLii = '' then
call scanErr sc, m.nd.util 'without list'
if uw = 'LOAD' | uw = 'UNLOAD' then do
if ^ scanVerify(scanSkip(sc), ' ', 'm') then
call scanErr sc, 'load file dsn expected'
m.nd.loadfile = m.sc.tok
m.nd.0 = 0
end
if uw = 'UNLOAD' then do
if ^ scanVerify(scanSkip(sc), ' ', 'm') then
call scanErr sc, 'punch file dsn expected'
m.nd.punchfile = m.sc.tok
end
call scanSqlType scanSkip(sc)
call utScanOpts nd, sc
end
else if m.sc.sqlType = 'i' & m.sc.val = 'INTO' then do
if m.nd.util <> 'LOAD' then
call scanErr sc, 'into must be in LOAD'
if ^ scanSqlQuID(sc) then
call scanErr 'table name expected'
in = mAdd(nd, m.sc.val)
m.in.tbQu = m.sc.tok
nx = scanUtil(sc)
call scanBack sc, m.sc.tok
m.in.flds = ''
if nx = '(' then do
m.in.flds = '(' scanUtilValue(sc, 0) ')'
call scanSqlType sc
end
end
else if m.sc.sqlType = 'i' & m.sc.val = 'DELIMITED' then do
if m.nd.util <> 'LOAD' & m.nd.util <> 'UNLOAD' then
call scanErr sc, 'delimited must be in LOAD or UNLOAD'
call scanSqlType sc
m.nd.delims = 'DELIMITED COLDEL' delWo(sc) ,
'CHARDEL' delWo(sc) 'DECPT' delWo(sc)
end
else do
call scanErr sc, 'list or' utilAll 'excpected'
end
end
return 1
endProcedure utScan
/*--- scan a word for delimiter syntax -------------------------------*/
delWo: procedure expose m.
parse arg sc
if m.sc.sqlType ^== 's' then
call scanErr sc, "delimiter expected (',' or x'25')"
res = m.sc.tok
call scanSqlType sc
return res
endProcedure delWo
/*--- if the scanner is at a list, scannit and add it to l -----------*/
utScanList: procedure expose m.
parse arg l, sc
listAll = 'TB TS VW'
if m.sc.sqlType ^== 'i' | wordPos(m.sc.val, listAll) < 1 then
return 0
nl = mCut(mAdd(l, 'list'), 0)
do while m.sc.sqlType == 'i' & wordPos(m.sc.val, listAll) > 0
ty = m.sc.val
do forever
if ^ quMask(sc) then
call scanErr sc, 'qualified id for' ty 'expected'
name = m.sc.val
call scanSqlType sc
pa = ''
if m.sc.sqlType = '*' then do
pa = '*'
call scanSqlType sc
end
else do while m.sc.sqlType = 'n'
pa = pa m.sc.val
call scanSqlType sc
if m.sc.sqlType = '-' then do
call scanSqlType sc
if m.sc.sqlType ^== 'n' then
call scanErr sc, 'number expected after -'
pa = pa'-'m.sc.val
call scanSqlType sc
end
else if m.sc.sqlType = 'n' & abbrev(m.sc.val,'-')then do
pa = pa || m.sc.val
call scanSqlType sc
end
end
n1 = mAdd(nl, ty)
m.n1.ts = name
m.n1.parts = pa
if m.sc.sqlType ^== ',' then
leave
end
end
return 1
endProcedure utScanList
/*--- scan a qualifier with mask characters (* ?) --------------------*/
quMask: procedure expose m.
parse arg sc
old1 = m.sc.scanName1
oldR = m.sc.scanNameR
m.sc.scanName1 = old1'*?%_\'
m.sc.scanNameR = oldR'*?%_\'
res = scanSqlQuId(sc)
m.sc.scanName1 = old1
m.sc.scanNameR = oldR
return res
endProcedure quMask
/*--- scan options an put them into u --------------------------------*/
utScanOpts: procedure expose m.
parse arg u, sc
optsAll = ' SHRLEVEL LIMIT RESUME '
do forever
px = pos(' 'm.sc.val, optsAll)
if m.sc.sqlType ^== 'i' | px < 1 then
return 0
if px = pos(' 'm.sc.val, optsAll, px+2) > 0 then
call scanErr sc, 'abbreviation not unique' m.sc.val
att = word(substr(optsAll, px), 1)
if ^ scanSqlType(sc) & pos(m.sc.sqlType, 'in') < 1 then
call scanErr sc, 'value expected for' att
m.u.att = m.sc.val
call scanSqlType sc
end
return
endProcedure utScanOpts
/***********************************************************************
expand lists. query db2Catalog to expand wildcards
***********************************************************************/
/*--- expand all lists -----------------------------------------------*/
expandLists: procedure expose m.
parse arg c
lstLst = m.c.list
do cx = 1 to m.c.0
src = m.c.cx.list
if symbol('st.src') = 'VAR' then do
m.src.list = st.src
iterate
end
trg = mCut(mAdd(lstLst, 'expList' src), 0)
st.src = trg
m.src.list = trg
if m.explicitTempl then
call out ' list' cx
do sx=1 to m.src.0
call expandAdd trg, m.src.sx, m.src.sx.ts, m.src.sx.parts
end
end
return
endProcedure expandLists
/*--- expand one list entry and add the results to lst ---------------*/
expandAdd: procedure expose m.
parse arg lst, ty, qu '.' na, pa
if m.explicitTempl then
call out ' expanding' ty qu'.'na pa
/* build the sql */
sqS = 'select distinct strip(t.creator), strip(t.name),',
'strip(t.dbName), strip(t.tsName),',
's.partitions, s.nTables' ,
'from sysIbm.sysTables t, sysIbm.sysTablespace s'
sqW = 'where t.tsName = s.name and t.dbName = s.dbName',
"and t.type = 'T'"
if ty = 'TS' then
sq = sqS sqW 'and t.dbName' sqlClause(qu) ,
'and t.tsName' sqlClause(na)
else if ty = 'TB' then
sq = sqS sqW 'and t.creator' sqlClause(qu) ,
'and t.name' sqlClause(na)
else if ty = 'VW' then
sq = "with pa (cre, nam, typ, lev) as" ,
"( select bCreator, bName, bType, 1" ,
"from sysibm.sysViewDep" ,
"where dType = 'V'" ,
"and dCreator" sqlClause(qu) ,
"and dName" sqlClause(na) ,
"union all select d.bCreator, d.bName," ,
"d.bType, p.lev+1" ,
"from sysibm.sysViewDep d, pa p" ,
"where d.dcreator = p.cre and d.dName = p.nam" ,
"and d.dType = p.Typ and p.lev < 1000" ,
")" sqS ", pa p" sqW ,
"and p.typ = 'T' and p.cre = t.creator" ,
"and p.nam = t.name"
else
call err 'bad list type' ty 'for' qu'.'na pa
call dbg 'exp sql' sq
call sqlPreOpen 1, sq
xOld = m.lst.0
do x=xOld+1 by 1 /* fetch the result rows */
z = lst'.' || x
y = ':m.'z'.'
if ^ sqlFetchInto(1, y'CR,' y'TB,',
y'db,' y'ts,' y'paCnt,' y'tbCnt') then
leave
ky = m.z.cr'.'m.z.tb
/* check authorization */
if m.superuser == -1 then do
m.auth.ky = ''
end
else if symbol('m.auth.ky') ^== 'VAR' then do
aa = 'delete from' ky
if sqlExec('prepare s9 from :aa', '0 -551') = 0 then do
m.auth.ky = 'w'
end
else do
m.auth.ky = 'r' sqlMsg()
call dbg 'no auth w' ky m.auth.ky
aa = 'select 1 from' ky
if sqlExec('prepare s9 from :aa', '0 -551') = -551 then
m.auth.ky = '-' sqlMsg()
end
end
m.z.auth = m.auth.ky
if m.explicitTempl | m.debug then
call out ' ts' m.z.db'.'m.z.ts',' m.z.paCnt 'parts,' ,
m.z.tbCnt 'tables:' ky', auth' m.z.auth
m.z.parts = pa
call dbg 'llll' z m.z.auth parts m.z.parts
end
m.lst.0 = x-1
call sqlClose 1
call dbg 'fetched' m.lst.0 - xOld
return
endProcedure expandAdd
/*--- return a sql clause = val, like val, like val escape -----------*/
sqlClause: procedure expose m.
parse arg val
if verify(val, '*?', 'm') < 1 then
return '=' quote(val, "'")
else if verify(val, '_%', 'm') < 1 then
return 'like' quote(translate(val, '%_', '*?'), "'")
call dbg 'sql val before' val
cx = -1
do while cx < length(val)
cx = verify(val, '\_%', 'm', cx+2)
if cx < 1 then
leave
val = left(val, cx-1)'\'substr(val, cx)
end
val = translate(val, '%_', '*?')
call dbg 'sql val after ' val
return 'like' quote(val, "'") "escape '\'"
endProcedure sqlClause
/***********************************************************************
generate utility statements
***********************************************************************/
/*--- generate all utility statements --------------------------------*/
utGen: procedure expose m.
parse arg utSt
st = ''
do ux=1 to m.utSt.0
u = utSt'.'ux
if m.u.util = 'COPY' then
st = st utCopy(u)
else if m.u.util = 'LOAD' then
st = st utLoad(u)
else if m.u.util = 'RUNSTATS' then
st = st utRunstats(u)
else if m.u.util = 'UNLOAD' then
st = st utUnload(u)
else if m.u.util = 'REORG' then
st = st utReorg(u)
else if wordPos(m.u.util, 'REBIND') < 1 then
call err 'utility' m.u.util 'not implemented (yet)'
end
return st
endProcedure utGen
/*--- generate copy --------------------------------------------------*/
utCopy: procedure expose m.
parse arg u
listDef = utListDef(m.u.list, 1, 'r')
if listDef = '' then do
call out '+++ copy on empty list, rc 4'
return ''
end
tCo = utTemplate('COPYD')
st = subword(tCo, 2)
st = st subword(listdef, 2) ,
'COPY LIST' word(listdef, 1),
'COPYDDN('word(tCo, 1)') FULL YES PARALLEL' m.cnf.lf,
'SHRLEVEL' word('REFERENCE CHANGE',
, 2 - abbrev(m.c.shrLevel, 'R'))
return st m.cnf.eSt
endProcedure utCopy
/*--- generate runstats ----------------------------------------------*/
utRunstats: procedure expose m.
parse arg u
listDef = utListDef(m.u.list, 0, 'w')
if listDef = '' then do
call out '+++ runstats on empty list, rc 4'
return ''
end
st = subword(listdef, 2) ,
'RUNSTATS TABLESPACE LIST' word(listdef,1),
'INDEX(ALL) UPDATE(ALL) SHRLEVEL CHANGE'
return st m.cnf.eSt
endProcedure genRunstats
/*--- generate unload ------------------------------------------------*/
utUnload: procedure expose m.
parse arg u
ll = m.u.list
listDef = utListDef(ll, 0, 'w', 'tbCnt')
ll = m.ll.list
if m.ll.0 < 1 then do
call out '+++ unload on empty list, rc 4'
return ''
end
tLo = utTemplate('LOAD', m.u.loadFile)
tPu = utTemplate('PUNCH', m.u.punchFile)
st = subword(tLo,2) subword(tPu, 2)
do lx = 1 to m.ll.0
st = st 'UNLOAD DATA FROM TABLE' m.ll.lx.cr'.'m.ll.lx.tb
if m.u.limit <> '' then
st = st 'LIMIT' m.u.limit
st = st m.cnf.lf,
'UNLDDN' word(tLo, 1) m.cnf.lf,
'PUNCHDDN' word(tPu, 1) m.cnf.lf,
m.u.delims utShr(m.u.shrlevel) m.cnf.eSt
end
return st
endProcedure utUnload
/*--- generate load --------------------------------------------------*/
utLoad: procedure expose m.
parse arg u
ll = m.u.list
listDef = utListDef(ll, 1, 'w', 'tbCnt')
ll = m.ll.list
if m.ll.0 < 1 then do
call out '+++ load on empty list, rc 4'
return ''
end
tCo = utTemplate('COPYD')
tLo = utTemplate('LOAD', m.u.loadFile)
tWo = utTemplate('WORKDDN')
st = subword(tLo, 2) subword(tCo, 2) subword(tWo, 2)
if abbrev('YES', m.u.resume) then
rere = 'RESUME YES' utshr(m.u.shrlevel)
else if abbrev('NO', m.u.resume) then
rere = 'RESUME NO REPLACE COPYDDN' word(tCo, 1)m.cnf.lf,
'STATISTICS INDEX ALL UPDATE ALL'
else
call err 'bad resume' m.u.resume
do lx = 1 to m.ll.0
st = st 'LOAD INDDN' word(tLo, 1) rere m.cnf.lf ,
word(tWo, 1) m.cnf.lf
if m.u.delims <> '' then
st = st 'FORMAT' m.u.delims
crTb = m.ll.lx.cr'.'m.ll.lx.tb
do ix = 1 to m.u.0 until m.u.ix = crTb
end
if ix > m.u.0 then do
st = st 'INTO TABLE' crTb
end
else do
in = u'.'ix
st = st 'INTO TABLE' m.in.tbQu
if m.in.flds <> '' then
st = st m.cnf.lf m.in.flds
end
st = st m.cnf.eSt
end
return st
endProcedure utLoad
/*--- generate Reorg -------------------------------------------------*/
utReorg: procedure expose m.
parse arg u
listDef = utListDef(m.u.list, 0, 'w')
mt = m.id
if pos('.', mt) > 0 then
mt = left(mt, pos('.', mt) - 1)
if mt = '' then
call err 'bad utility id' m.id 'gives empty mapTab'
m.mapTab = 'S100447.'mt
if listDef = '' then do
call out '+++ reorg on empty list, rc 4'
return ''
end
st = ''
tCo = utTemplate('COPYD')
tRe = utTemplate('SRECD')
tWo = utTemplate('WORKDDN')
st = subword(tCo, 2) subword(tRe, 2) subword(tWo, 2)
st = st subword(listdef, 2) ,
'REORG TABLESPACE LIST' word(listdef, 1) m.cnf.lf,
'LOG NO SORTDATA NOSYSREC SORTKEYS' m.cnf.lf,
'COPYDDN('word(tCo, 1)')'m.cnf.lf,
'SHRLEVEL CHANGE' m.cnf.lf,
'DRAIN_WAIT 1800 RETRY 0 RETRY_DELAY 300'm.cnf.lf,
'MAPPINGTABLE' m.mapTab m.cnf.lf,
'MAXRO 120 DRAIN WRITERS LONGLOG CONTINUE' m.cnf.lf,
'DELAY 1200 TIMEOUT TERM' m.cnf.lf,
'UNLDDN('word(tRe, 1)')' m.cnf.lf,
word(tWo, 1) 'SORTDEVT DISK SORTNUM 48' m.cnf.lf,
'STATISTICS INDEX ALL KEYCARD REPORT NO' m.cnf.lf,
'UPDATE ALL HISTORY NONE FORCEROLLUP NO'
return st m.cnf.eSt
endProcedure utReorg
/*--- Create Mappingtable für Reorg if necessary
Mappintable heisst S100447.name in DB2MAPUT.name -------*/
createMaptab: procedure expose m.
parse upper arg cr '.' name
if sqlPreAllCl(5,'SELECT 1',
'FROM SYSIBM.SYSTABLES' ,
"WHERE CREATOR = '"cr"'" ,
"AND NAME = '"NAME"' AND TYPE = 'T'",
, st , ':haha') > 0 then
return cr'.'name
call sqlCommit /* sonst ist nach rollback session.sysprint weg */
call debugSqlCurrent 'before switch sql'
sc = sqlExec("set current sqlid = 'S100447'", '*')
call debugSqlCurrent 'after switch sql'
if sc = 0 then
if sqlExec('CREATE DATABASE DB2MAPUT',
'BUFFERPOOL BP2',
'INDEXBP BP1',
'CCSID EBCDIC',
'STOGROUP GSMS',
, '*') = -601 then /* wenn vorhanden, dann ok */
sc = 0
/* Tablespace für Maptab */
if sc = 0 then
sc = sqlExec('CREATE TABLESPACE' name,
'IN DB2MAPUT',
'USING STOGROUP GSMS',
'PRIQTY 12 SECQTY 48',
'ERASE NO ',
'FREEPAGE 0 PCTFREE 5',
'GBPCACHE CHANGED',
'TRACKMOD YES ',
'SEGSIZE 64 ',
'BUFFERPOOL BP2 ',
'LOCKSIZE ANY ',
'LOCKMAX SYSTEM ',
'CLOSE YES ',
'COMPRESS NO ',
'CCSID EBCDIC',
'DEFINE YES ',
'MAXROWS 255',
, '*')
/* Mappingtable anlegen */
if sc = 0 then
sc = sqlExec( 'CREATE TABLE' cr'.'name,
'("TYPE" CHAR(1) FOR SBCS DATA NOT NULL,',
'SOURCE_RID CHAR(5) FOR SBCS DATA NOT NULL,',
'TARGET_XRID CHAR(9) FOR SBCS DATA NOT NULL with default,',
'LRSN CHAR(6) FOR SBCS DATA NOT NULL)',
'IN DB2MAPUT.'name ' audit none ccsid ebcdic not volatile',
, '*')
if sc = 0 then
sc = sqlExec('CREATE UNIQUE INDEX' cr'.I'name,
'ON' cr'.'name,
'(SOURCE_RID ASC,',
' "TYPE" ASC,',
'TARGET_XRID ASC,',
'LRSN ASC)',
'USING STOGROUP GSMS',
'PRIQTY -1 SECQTY -1',
'ERASE NO',
'FREEPAGE 0 PCTFREE 10',
'GBPCACHE CHANGED',
'NOT CLUSTER',
'CLOSE YES',
'COPY NO',
'DEFINE YES',
'PIECESIZE 2 G',
, '*')
if sc = 0 then do
call sqlCommit
return cr'.'name
end
call out ' '
call out '+++ Sie haben keine Berechtigung,'
call out '+++ die Mappingtable' cr'.'name 'zu erstellen'
call out '+++ bitte wenden Sie sich an die Db2 Administration'
call out ' '
call out sqlMsg()
call sqlExec 'rollback'
call err 'Berechtigung fuer MappgingTable'
endProcedure createMaptab
/*--- generate listdef -----------------------------------------------*/
utListDef: procedure expose m.
parse arg l, allParts, necAuth, checks
call dbg 'utListDef' l '-->' m.l.list
l = m.l.list
if m.l.0 = 0 then
return ''
if symbol('m.listdef') == 'VAR' then
m.listdef = m.listdef + 1
else
m.listdef = 1
st = 'LIST'm.listdef
st = st 'LISTDEF' st
if pos('tbCnt', checks) > 0 then do
do x=1 to m.l.0
if m.l.x.tbCnt <> 1 then
call err 'nur 1 table unterstuetzt, nicht' m.l.x.tbCnt,
'in ts' m.l.x.db'.'m.l.x.ts,
'mit table' m.l.x.cr'.'m.l.x.tb
end
end
do x=1 to m.l.0
aa = word(m.l.x.auth, 1)
if m.superUser == -1 then
nop
else if wordPos(necAuth || aa, 'ww rw rr') > 0 then
call dbg 'auth' necAuth 'allowed for' ,
m.l.x.cr'.'m.l.x.tb 'in' m.l.x.db'.'m.l.x.ts aa
else if m.superUser == 1 then
call out 'ignoring authorization' necAuth 'for',
m.l.x.cr'.'m.l.x.tb 'in' m.l.x.db'.'m.l.x.ts m.l.x.auth
else
call err 'authorization' necAuth 'error for',
m.l.x.cr'.'m.l.x.tb 'in' m.l.x.db'.'m.l.x.ts m.l.x.auth
st = st m.cnf.lf 'INCLUDE TABLESPACE' m.l.x.db'.'m.l.x.ts
if ^ abbrev('*', m.l.x.parts) then
st = st 'PARTLEVEL' m.l.x.parts
else if allParts then
st = st 'PARTLEVEL'
end
return st m.cnf.eSt
endProcedure utListDef
/*--- generate shrlevel ----------------------------------------------*/
utShr: procedure expose m.
parse arg lv, opt
if abbrev('CHANGE', lv) then
return 'SHRLEVEL CHANGE'
if abbrev('REFERENCE', lv) then
return 'SHRLEVEL REFERENCE'
if ^ abbrev('NONE', lv) then
call err 'bad shrLevel' lv
if opt = 1 then
return 'SHRLEVEL NONE'
else
return ''
endProcedure utShr
/*--- generate template ----------------------------------------------*/
utTemplate: procedure expose m.
parse upper arg ty, dsn
nm = 'T'ty
if dsn = '' then do
if m.templ.gen.nm == 1 then
return nm
if ty = 'WORKDDN' then do
u = utTemplate('SYUTD')
s = utTemplate('SOUTD')
return 'WORKDDN('word(u, 1)','word(s, 1)')' ,
subword(u, 2) subword(s, 2)
end
m.templ.gen.nm = 1
end
else if dsn = 'DUMMY' then do
return DUMMY
end
else do
dsn = "DSN('"dsn"')"m.cnf.lf
nm = nm || mInc(templ.0)
end
m.templ.name = nm
if wordPos(ty, 'COPYD SYUTD SOUTD SRECD') < 1 then
return nm 'TEMPLATE' nm dsn m.templ.new m.cnf.eSt
else if m.explicitTempl then
return nm 'TEMPLATE' nm dsn m.templ.ty m.cnf.eSt
else
return nm
endProcedure utTemplate
/*--- run utility with the given stamtents and write output ----------*/
runUtility: procedure expose m.
parse arg utId, st
call scanUtilReset xxx
call out ''
call out '--- utility statements'
call utilityFormat , st
st = translate(st, ' ', m.cnf.lf)
call dbg 'util st' length(st)':' st
rst = 'NO'
retcode = -9876
e = ''
z = 0
call out
call out '---' myTime() "exec sql call" m.cnf.procSys "("utId",...)"
src = "call" m.cnf.procSys"( :utId, :rst,",
":st,:retcode, :ANY" copies(',:e,:e,:z',12) ")"
if m.debug == 1 then do
call debugSqlCurrent 'before sql' src
call dbg ' with utId' utId
call dbg ' with rst' rst
call dbg ' with st' st
call dbg ' with e' e
call dbg ' with z' z
end
call sqlExec src, 0 +466
call out '---' myTime() 'utility retCode' retCode
call out '--- utility output'
call sysPrintInsert out
m.out.0 = 0
call sysPrintInsert
call out '--- end utility output'
call out '+++' myTime() 'utility retCode' retCode
call sysPrintInsert out
m.out.0 = 0
return
endProcedure runUtility
/*--- write the utility statements in st
formated in lines to stem oo -------------------------------*/
utilityFormat: procedure expose m.
parse arg oo, st
call scanUtilReset xxx
x = 0
cont = 0
do while x < length(st)
y = pos(m.cnf.lf, st, x+1)
if y = 0 then
y = length(st) + 1
li = strip(substr(st, x+1, y-x-1))
cont = wordPos(word(li, 1), m.scanUtil) < 1
if oo = '' then
call out left('', 4 * cont)li
else
call mAdd oo, left('', 4 * cont)li
x = y
end
return
endProcedure utilityFormat
/***********************************************************************
rebinds
***********************************************************************/
/*--- all rebinds ----------------------------------------------------*/
doRebind: procedure expose m.
parse arg utSt
oldDb = ''
sel = ''
do ux=1 to m.utSt.0
u = utSt'.'ux
if m.u.util ^= 'REBIND' then
iterate
gotRebind = 1
l = m.u.list
listDef = utListDef(l, 0, 'w') /* check authorization */
call dbg 'list' l m.l.0
l = m.l.list
do lx=1 to m.l.0
call dbg 'rebind tb' m.l.lx.cr'.'m.l.lx.tb
if oldDb <> m.l.lx.DB then do
oldDb = m.l.lx.DB
sel = sel ")) or (bQualifier='"oldDb"' and bName in ('"
end
else do
sel = sel", '"
end
sel = sel || m.l.lx.ts"'"
call dbg 'sel +' sel
end
end
if sel = '' then do
if gotRebind = 1 then
call out '+++ no rebinds for empty object list, rc 4'
return 0
end
sel = substr(sel, 7)'))'
call dbg 'sel =' sel
p = ':m.pk.sx.'
call sqlPreOpen 8,
, "select distinct dCollid, dName, dContoken, version, p.type,",
"p.bindTime, p.valid, p.operative",
"from sysibm.sysPackDep d, sysibm.sysPackage p" ,
"where bType in ('P', 'R')" ,
"and d.dLocation = p.location" ,
"and d.dCollid = p.collid" ,
"and d.dName = p.name" ,
"and d.dConToken = p.conToken" ,
"and ("sel")" ,
"order by 2, 4, 1"
succ = 0
do sx=1 while sqlFetchInto(8, ':col, :nam, :cTo, :ver, :typ,' ,
':bTi, :val, :ope')
call dbg sx col nam c2x(cTo) ver typ bTi 'vo' val ope
st = 'PACKAGE('strip(col)'.'strip(nam)
if typ = 'T' then
st = 'REBIND TRIGGER' st')'
else
st = 'REBIND' st'.('strip(ver)'))'
call out '---' st
call out '-- valid='val', op='ope', lastBind='bTi
succ = succ + bindCommand(st)
end
call sqlClose 8
sx = sx-1
if sx = succ then
call out '+++' sx 'rebinds, all successful, rc 0'
else
call out '+++' sx 'rebinds,' (sx-succ) 'unsuccessful, rc 4'
return sx
endProcedure doRebind
genRebinds: procedure expose m.
parse arg gen, utSt
oldDb = ''
sel = ''
do ux=1 to m.utSt.0
u = utSt'.'ux
if m.u.util ^= 'REBIND' then
iterate
gotRebind = 1
l = m.u.list
listDef = utListDef(l, 0, 'w') /* check authorization */
call dbg 'list' l m.l.0
l = m.l.list
do lx=1 to m.l.0
call dbg 'rebind tb' m.l.lx.cr'.'m.l.lx.tb
if oldDb <> m.l.lx.DB then do
oldDb = m.l.lx.DB
sel = sel ")) or (bQualifier='"oldDb"' and bName in ('"
end
else do
sel = sel", '"
end
sel = sel || m.l.lx.ts"'"
call dbg 'sel +' sel
end
end
if sel = '' then do
if gotRebind = 1 then
call out '+++ no rebinds for empty object list, rc 4'
return 0
end
sel = substr(sel, 7)'))'
call dbg 'sel =' sel
p = ':m.pk.sx.'
call sqlPreOpen 8,
, "select distinct dCollid, dName, dContoken, version, p.type,",
"p.bindTime, p.valid, p.operative",
"from sysibm.sysPackDep d, sysibm.sysPackage p" ,
"where bType in ('P', 'R')" ,
"and d.dLocation = p.location" ,
"and d.dCollid = p.collid" ,
"and d.dName = p.name" ,
"and d.dConToken = p.conToken" ,
"and ("sel")" ,
"order by 2, 4, 1"
succ = 0
do sx=1 while sqlFetchInto(8, ':col, :nam, :cTo, :ver, :typ,' ,
':bTi, :val, :ope')
call dbg sx col nam c2x(cTo) ver typ bTi 'vo' val ope
st = 'PACKAGE('strip(col)'.'strip(nam)
if typ = 'T' then
st = 'REBIND TRIGGER' st')'
else
st = 'REBIND' st'.('strip(ver)'))'
call mAdd gen, st '-- valid='val', op='ope', lastBind='bTi
end
call sqlClose 8
return sx - 1
endProcedure genRebinds
/*--- one bindstatement ----------------------------------------------*/
bindCommand: procedure expose m.
parse arg stmt
/****** use undocumented DSNESM71 programm,
as it is used in DSNTBIND ***********************************/
'NEWSTACK'
queue "DSNE"
queue stmt
queue "END"
x = outtrap('m.bm.')
ADDRESS ATTCHMVS "DSNESM71" /* call "pre" bind */
bind_rc = rc /* set rc to DSNESM71 call */
x = outtrap('OFF')
'DELSTACK'
call dbg 'bind rc' bind_rc D2X(ABS(bind_rc)) 'msgs' m.bm.0
call sysPrintInsert out
m.out.0 = 0
if m.debug then do x=1 to m.bm.0
call dbg m.bm.x
end
call sysPrintInsert bm
do bx = 1 to m.bm.0
if pos(' SUCCESSFUL REBIND ', m.bm.bx) > 0
then return 1
end
return 0
endProcedure bindCommand
/***********************************************************************
small helper functions
***********************************************************************/
/*--- one output message ---------------------------------------------*/
out: procedure expose m.
parse arg msg
sx = 0
bx = -1
do lx=1 until bx >= length(msg)
ex = pos('\n', msg, bx+2)
if ex < 1 then
ex = length(msg)+1
say substr(msg, bx+2, ex-bx-2)
if m.out then
call mAdd out, substr(msg, bx+2, ex-bx-2)
bx = ex
end
return
endProcedure out
/*--- one debug message ----------------------------------------------*/
dbg: procedure expose m.
parse arg msg
if m.debug then
call out '???' msg
return
endProcedure dbg
/***********************************************************************
old test functions
***********************************************************************/
autTest: procedure expose m.
call setGlobal 'DB', 'DBAF'
call sqlExec 'set :oldPkgSet = current packageset'
call out '*** autTest oldPkgSet =' oldPkgSet
call autTestOne 'DSNREXX'
call autTestOne 'DSNREXCS'
call autTestOne 'DSNREXRR'
call autTestOne 'DSNREXRS'
call autTestOne 'DSNREXUR'
call autTestOne 'DB2ADMIN'
call sqlExec 'set current packageset = :oldPkgSet'
call sqlExec 'set :act = current packageset'
call out '*** autTest switche back to PkgSet =' act
return 0
endProcedure autTest
autTestOne: procedure expose m.
parse arg pkgSet
call sqlExec 'set current packageset = :pkgSet'
call sqlExec 'set :act = current packageset'
call out '*** autTestOne with pkgSet' pkgSet '=' act
se = 'select WK011CH20 from A540769A.TWK011A'
call autTestSel se
call autTestSel se 'where 1 = 0'
up = "update A540769A.TWK011A set WK011CH2 = 'q'"
call autTestUpd up
call autTestUpd up 'where 1 = 0'
return
endProcedure autTestOne
autTestSel: procedure expose m.
parse arg sel
msg = ''
if sqlExec('prepare s7 from :sel', '*') < 0 then
msg = 'prepare' sqlMsg()
if sqlExec('declare c7 cursor for s7', '*') < 0 & msg = '' then
msg = 'declare' sqlMsg()
if sqlExec('open c7', '*') < 0 & msg = '' then
msg = 'open' sqlMsg()
v=''
fet = sqlExec('fetch c7 into :v', '*')
if fet < 0 msg = '' then
msg = 'fetch v='v sqlMsg()
if sqlExec('close c7', '*') < 0 then
msg = 'close' sqlMsg()
if msg = '' then
msg = 'sel ok fet' fet 'v' v
else
msg = 'sel err fet' fet
call out msg sel
return
endTestSel
autTestSelOld: procedure expose m.
parse arg sel
call out 'autTestSel' sel
call sqlExec 'prepare s7 from :sel', '*'
call out ' prepare' sqlMsg()
call sqlExec 'declare c7 cursor for s7', '*'
call out ' declare' sqlMsg()
call sqlExec 'open c7', '*'
call out ' open' sqlMsg()
v=''
call sqlExec 'fetch c7 into :v', '*'
call out ' fetch v='v sqlMsg()
call sqlExec 'close c7', '*'
call out ' close' sqlMsg()
return
endTestSelOld
autTestUpd: procedure expose m.
parse arg upd
msg = ''
if sqlExec('prepare s1 from :upd', '*') < 0 then
msg = 'prep' sqlMsg()
if sqlExec('execute s1', '*') < 0 & msg = '' then
msg = 'exec' sqlMsg()
if msg = '' then
msg = 'ok'
call out 'upd' msg
return
endTestUpd
autTestUpdOld: procedure expose m.
parse arg upd
call out 'autTestUpd' upd
call sqlExec 'execute immediate :upd', '*'
call out ' execute immediate' sqlMsg()
return
endTestUpdOld
debugSqlCurrent: procedure expose m.
parse arg pr, always
if m.debug ^== 1 & always ^== 1 then
return
call sqlPreAllCl 5,'SELECT current sqlid, user, current packageset',
'from sysibm.sysDummy1' , st , ':id, :us, :pa'
if m.st.0 <> 1 then
call err 'sysDummy1 <> 1'
call out pr 'sqlCurrent sqlId' id 'user' us 'pkgSet' pa
return
endProcedure debugSqlCurrent
/*--- return current collection --------------------------------------*/
testAnaPunch: procedure expose m.
call errReset 'h'
call analysePunch p1, 'DBAF.TMP.TST.DA540769.A418A.PUN3'
say 'tb' m.p1.tb '*' m.p1.tbQu
say ' inDsn' m.p1.inDsn
say ' flds' m.p1.flds
return 0
endProcedure testAnaPunch
testmaptab: procedure expose m.
call errReset 'h'
call sqlconnect dbaf
call sqlExec "set current sqlid = 'S100447'"
call createMaptab 's100447.Walter2'
call sqldisconnect
return 0
endProcedure testmaptab
testCopy1: procedure expose m.
call activateErrHandler
call setGlobal 'DB', 'DBAF'
m.l.1.ts = 'DGDB9998.A422A'
m.l.1.parts = '*'
m.l.0 = 1
m.c.0 = 1
c = 'C.1'
m.c.util = 'COPY'
m.c.list = l
c = 'C'
call runUtility m.id, utGen(c)
/* call err 'test errhandler\nline2\nline3 |' */
call outputSysprint
m.c.1.util = 'RUNSTATS'
call runUtility m.id, utGen(c)
call outputSysprint
call globalCleanup
return 0
endProcedure testCopy1
testCopy2: procedure expose m.
call activateErrHandler
call scanStringRun 'DBAF', 'ts DGDB9998.A422A 4 - 8 11 12 -18',
'id A540769.test2 copy shr r'
call outputSysprint
call globalCleanup
return 0
endProcedure testCopy2
testCopy3: procedure expose m.
call activateErrHandler
call scanStringRun 'DBAF', 'ts DGDB9998.A202A ',
'id A540769.test2 copy shr r run'
call outputSysprint
call globalCleanup
return 0
endProcedure testCopy2
testRebind: procedure expose m.
c = 'REBIND PACKAGE(DB.DBWK3.(DB2J000003))'
c = '-DIS DATABASE(DA540769)'
b = 'REBIND PACKAGE(DB.DBWK1.(DB2J000003))'
c = 'REBIND PACKAGE(DB.DBWK3.(DB2J000003))'
d = 'REBIND PACKAGE(DB.DBWK411.(DB2J000003))'
call bindCommand b
return 0
db2Command: procedure expose m.
parse arg cmd
call dbg 'db2Command' cmd
len = length(cmd)
e = ''
cCmd = -99
iRet = -99
iRes = -99
xsBy = -99
gRea = -99
gXs = -99
cRc = -99
cMsg = left('', 6000)
cMsgI = -123
sql = "CALL SYSPROC.ADMIN_COMMAND_DB2(" ,
":cmd," ,/* DB2_CMD P 1 VARCHAR */
":len," ,/* LEN_CMD P 2 INTEGER */
":e," ,/* PARSE_TYPE P 3 VARCHAR */
":e," ,/* DB2_MEMBER P 4 VARCHAR */
":cCmd," ,/* CMD_EXEC O 5 INTEGER */
":iRet," ,/* IFCA_RET O 6 INTEGER */
":iRes," ,/* IFCA_RES O 7 INTEGER */
":xsBy," ,/* XS_BYTES O 8 INTEGER */
":gRea," ,/* IFCA_GRES O 9 INTEGER */
":gXs," ,/* GXS_BYTES O 10 INTEGER */
":cRc," ,/* RETURN_CODE O 11 INTEGER */
":cMsg :cMsgI" ,/* MSG O 12 VARCHAR */
")"
call dbg 'db2Cmd sql' sql
sc = sqlExec(sql, 466)
call dbg 'cmd sqlCode' sc 'cCmd' cCmd 'ret' iRet
call dbg 'msg ind' cMsgI 'len' length(cMsg) length(strip(cMsg))
call sqlPreOpen 1, 'select rowNum, text' ,
'from sysibm.db2_cmd_output' ,
'order by 1 asc'
do while sqlFetchInto(1, ':rw, :tx', 100)
call dbg 'cmd' rw strip(tx, 't')
end
return 0
endProcedure db2Command
testStoredProc: procedure expose m.
parse arg conn
call errReset 'h'
m.out = 1
call scanStringRun conn, 'id A540769A tb gdb6663.TWK401A',
'reo '
/* call scanStringRun conn, 'id A540769.stoPr tb A540769.TWK418A' ,
' loa TSS.SKA.TMP.TST.&TS..UNL3',
' RESU n SHRLEVEL CHANGE LIMIT 89' ,
' delimited '','' X''7F'' ''.'' '
call scanStringRun conn, 'id A540769.stoPr tb OA1A01.TBE111A1 REB'
call scanStringRun conn, 'id A540769.stoPr tb A540769.TWK418A ',
'copy shr r reb'
' LOA DBAF.TMP.TST.DA540769.A418A.LOA3',
' SHRLEVEL CHA resume Y',
' into "A540769"."TWK418A" ( ',
' "WK418K1"',
'\POSITION( 00003:00008) CHAR(00006)',
'\, "WK418K2"',
'\POSITION( 00009:00012) CHAR(00004)',
'\, "WK418D1"',
'\POSITION( 00014:00015) CHAR(00002)',
"\ NULLIF(00013)=X'FF')"
'copy shr r rebi'
' tb *.AB?T_T* ' ,
' tb A540769.TWK411A1 TB OA1A.TMF716A1' ,
' vw GDB9998.VWK210A2 ' ,
' unl TSS.SKA.TMP.TST.&TS..UNL3',
' TSS.SKA.TMP.TST.&TS..PUN3',
' RESU n SHRLEVEL CHANGE LIMIT 89 RUN',
call scanStringRun conn, 'id A540769.stoPr tb A540769.TWK418A' ,
' unl TSS.SKA.TMP.TST.&TS..UNL3',
' TSS.SKA.TMP.TST.&TS..PUN3',
' RESU n SHRLEVEL CHANGE LIMIT 89',
' delimited '','' X''7F'' ''.'' '
*/
call showSysPrint
return 0
endProcedure testStoredProc
/* copy scanUtil begin *************************************************
scan db2 utility input statements using scan and a reader
**********************************************************************/
/*--- initialize with reader inRdr ----------------------------------*/
scanUtilReader: procedure expose m.
parse arg m, inRdr
call scanReader m, inRdr
call scanOptions sc, , , '--'
call scanUtilReset m
return m
endProcedure scanUtilReader
scanUtilSql: procedure expose m.
parse arg inRdr
m = scanSql(inRdr)
call scanUtilReset m
return m
endProcedure scanUtilReader
scanUtilReset: procedure expose m.
parse arg m
m.m.utilBrackets = 0
m.scanUtil = 'BACKUP CATENFM CATMAINT CHECK' ,
'COPY COPYTOCOPY DIAGNOSE EXEC LISTDEF LOAD' ,
'MERGECOPY MODIFY OPTIONS QUIESCE REBUILD' ,
'RECOVER REORG REPAIR REPORT RESTORE' ,
'RUNSTATS STOSPACE TEMPLATE UNLOAD'
return
endProcedure scanUtilReset
/*--- scan next token and put its type in m.sc.utilType:
'u' a utility name
'n' a name
'"' a quoted name
"'" an apostroph'd string
'.' a .
',' a ,
'v' a value
'' at end
---------------------------------------------------------------*/
scanUtil: procedure expose m.
parse arg sc
m.sc.utilSpace = scanSpaceNl(sc)
ty = '?'
if scanLit(sc, '(') then do
m.sc.utilBrackets = m.sc.utilBrackets + 1
end
else if scanLIT(sc, ')') then do
m.sc.utilBrackets = m.sc.utilBrackets - 1
if m.sc.utilBrackets < 0 then
call scanErr sc, 'unmatched closing bracket )'
end
else if scanLit(sc, ',') then do
end
else if scanLit(sc, '.') then do
end
else if scanString(sc, "'") then do
end
else if scanString(sc, '"') then do
end
else if scanName(sc) then do
m.sc.val = translate(m.sc.tok)
if m.sc.utilBrackets > 0 then
ty = 'n'
else if 0 < wordPos(m.sc.val, m.scanUtil) then
ty = 'u'
else
ty = 'n'
end
else if scanVerify(sc, ' (),''"', 'm') then do
ty = 'v'
m.sc.val = translate(m.sc.tok)
end
else if ^scanAtEnd(sc) then do
call scanErr sc, 'scanUtil stopped before end'
end
else do
/* say 'scanUtil return atEnd' */
ty = ''
m.sc.val = ''
end
if ty == '?' then
m.sc.utilType = left(m.sc.tok, 1)
else
m.sc.utilType = ty
return m.sc.utilType
endProcedure scanUtil
/*--- scan a value or a bracketed list of values ---------------------*/
scanUtilValue: procedure expose m.
parse arg sc, remApo, nl
if remApo = '' | rempApo = 0 then
remApo = "nv"
else if rempApo = 1 then
remApo = "nv'"
if '(' ^== scanUtil(sc) then
return scanUtilValueOne(sc, remApo)
v = ''
brx = m.sc.utilBrackets
oLine = word(scanPos(sc), 1)
do forever
call scanUtil sc
one = scanUtilValueOne(sc, remApo)
if one == '' then
call scanErr sc, 'eof in brackets'
else if brx > m.sc.utilBrackets then
return v
nLine = word(scanPos(sc), 1)
if ^ m.sc.utilSpace then
v = v || one
else if nl ^== '' & oLine <> nLine then
v = v || nl || one
else
v = v' 'one
oLine = nLine
end
endProcedure scanUtilValue
scanUtilValueOne: procedure expose m.
parse arg sc, valTy
if m.sc.utilType == '' then
return ''
else if m.sc.utilType == 'u' then
call scanErr sc, 'util in scanUtilValueOne'
if pos(m.sc.utilType, valTy) > 0 then
return m.sc.val
else
return m.sc.tok
endProcedure scanUtilValueOne
/* copy scanUtil end **************************************************/
/* copy sql begin ***************************************************
sql interface
***********************************************************************/
sqlIni: procedure expose m.
m.sqlNull = '---'
return
endProcedure sqlIni
/*--- prepare statement 's'cx from sql src into descriptor desc ------*/
sqlPrepare: procedure expose m.
parse arg cx, src, descOut, descInp
s = ''
if descOut == 1 then
s = 'into :M.SQL.'cx'.D'
call sqlExec 'prepare s'cx s 'from :src'
if descInp == 1 | (descInp == '' & pos('?', src) > 0) then
call sqlExec 'describe input s'cx 'into :M.SQL.'cx'.I'
else
m.sql.cx.i.sqlD = 0
return
endProcedure
/*--- prepare and declare 'c'cx from sql src -------------------------*/
sqlPreDeclare: procedure expose m.
parse arg cx, src, descOut, descInp
call sqlPrepare cx, src, descOut, descInp
call sqlExec 'declare c'cx 'cursor for s'cx
return
endProcedure sqlPreDeclare
/*--- prepare, declare and open 'c'cx from sql src -------------------*/
sqlPreOpen: procedure expose m.
parse arg cx, src, descOut, descInp
call sqlPreDeclare cx, src, descOut, descInp
call sqlOpen cx
return
endProcedure sqlPreOpen
/*--- open cursor 'c'cx using arguments arg(2), arg(3)... ------------*/
sqlOpen: procedure expose m.
parse arg cx
do ix=1 to arg()-1
call sqlDataSet 'SQL.'cx'.I', ix, arg(ix+1)
end
call sqlExec 'open c'cx 'using descriptor :M.SQL.'cx'.I'
return
endProcedure sqlOpen
/*--- close cursor 'c'cx ---------------------------------------------*/
sqlClose: procedure expose m.
parse arg cx, src
return sqlExec('close c'cx)
endProcedure sqlClose
/*--- fetch cursor 'c'cx into variables ggVars -----------------------*/
sqlFetchInto:
parse arg ggCx, ggVars
if ggVars == '' then
ggVars = 'descriptor :M.SQL.'ggCX'.D'
/* accept sqlCodes > 0 except 100 */
return sqlExec('fetch c'ggCx 'into' ggVars, 0 100) <> 100
endProcedure sqlFetchInto
/*--- return sql variable list for stem st and fields the word in vars
if withInd == 1 then with sqlIndicator variables
sqlVars('S', 'A B') --> ':S.A, :S.B'
sqlVars('S', 'A B', 1) --> ':S.A :S.A.SQLIND, :S.B :S.B.SQLIND'
----------------------------------------------------------------------*/
sqlVars: procedure expose m.
parse arg st, vars, withInd
res = ''
if st ^== '' then
st = st'.'
do ix=1 to words(vars)
res = res', :'st || word(vars, ix)
if withInd == 1 then
res = res ':'st || word(vars, ix)'.SQLIND'
end
return substr(res, 3)
endProcedure sqlVars
sqlVarsNull: procedure expose m.
parse arg st, vars
hasNulls = 0
do ix = 1 to words(vars)
fld = word(vars, ix)
if m.st.fld.sqlInd < 0 then do
m.st.fld = m.sqlNull
hasNulls = 1
end
end
return hasNulls
endProcedure sqlVarsNull
sqlDescNull: procedure expose m.
parse arg cx
desc = 'SQL.'ggCX'.D',
hasNulls = 0
do ix=1 to m.desc.SQLD
if m.desc.ix.sqlInd < 0 then do
m.desc.ix.sqlData = m.sqlNull
hasNulls = 1
end
end
return hasNulls
endProcedure sqlDescNull
/*--- open cursor 'c'cx fetch all into variables vars and close
st = passed stem, sx = row number
return number of rows fetched ----------------------------------*/
sqlOpAllCl:
parse arg ggCx, st, ggVars
do ggAx=4 to arg()
call sqlDataSet 'SQL.'ggCx'.I', ggAx-3, arg(ggAx)
end
call sqlOpen ggCx
do sx = 1 while sqlFetchInto(ggCx, ggVars)
end
m.st.0 = sx - 1
call sqlClose ggCx
return m.st.0
endProcedure sqlOpAllCl
sqlDataSet: procedure expose m.
parse arg da, ix, val
m.da.ix.sqlData = val
m.da.ix.sqlInd = - (arg(ix+2) == m.sqlNull)
return
endProcedure sqlDataSet
/*--- prepare, declare open cursor 'c'cx, fetch all and close
return number of rows fetched ----------------------------------*/
sqlPreAllCl:
parse arg ggCx, ggSrc, st, ggVars
call sqlPreDeclare ggCx, ggSrc
return sqlOpAllCl(ggCx, st, ggVars)
endProcedure sqlPreAllCl
/*--- execute statement 's'cx using arguments arg(2), arg(3)... ------*/
sqlExecute:
parse arg ggCx
do ggAx=2 to arg()
call sqlDataSet 'SQL.'ggCx'.I', ggAx-1, arg(ggAx)
end
call sqlExec 'execute s'ggCx 'using descriptor :M.SQL.'ggCx'.I'
return
endProcedure
/*--- execute immediate the sql src ----------------------------------*/
sqlExImm:
parse arg ggSrc, ggRet
return sqlExec('execute immediate :ggSrc', ggRet)
endProcedure sqlExImm
sqlCommit: procedure expose m.
parse arg src
return sqlExec('commit')
endProcedure sqlCommit
/*--- execute sql thru the dsnRexx interface -------------------------*/
sqlExec: /* no procedure, to keep variables sql... */
parse arg ggSqlStmt, ggRet, ggNo
if ggNo <> '1' then
ggSqlStmt = 'execSql' ggSqlStmt
address dsnRexx ggSqlStmt
/* say 'sqlCode' sqlCode 'rc' rc 'for' ggSqlStmt ggNo */
if rc = 0 then
return 0
else if ggRet = '*' | wordPos(sqlCode, ggRet) > 0 then
return sqlCode
else if rc < 0 then
call err sqlmsg()
else if sqlWarn.0 ^== ' ' | sqlCode <> 0 then
call errSay sqlMsg(), ,'w'
return sqlCode
endSubroutine sqlExec
/*--- connect to the db2 subsystem ggSys -----------------------------*/
sqlConnect: procedure expose m.
parse arg ggSys, ggRetCon
call sqlIni
address tso "SUBCOM DSNREXX"
if rc <> 0 then do
sRc = RXSUBCOM('ADD','DSNREXX','DSNREXX') /* ADD HOST CMD ENV */
if sRc <> 0 then
call err 'rc' sRc 'from RXSUBCOM(ADD, DSNREXX, DSNREXX)'
end
if ggSys = '-' then
return 0
return sqlExec("connect" ggSys, ggRetCon ,1)
endProcedure sqlConnect
/*--- diconnect from db2 ---------------------------------------------*/
sqlDisconnect: procedure expose m.
parse arg ggRet
call sqlExec "disconnect ", ggRet, 1
return
endProcedure sqlDisconnect
/*--- issue an sql error message -------------------------------------*/
sqlMsg: /* no procedure, to keep variables sql... */
signal on syntax name sqlMsgOnSyntax
ggRes = 'sqlCode' sqlCodeT(sqlCode, sqlErrMc, sqlwarn.0':' ,
|| sqlwarn.1||sqlwarn.2||sqlwarn.3||sqlwarn.4||sqlwarn.5',',
|| sqlwarn.6||sqlwarn.7||sqlwarn.8||sqlwarn.9||sqlwarn.10)
if 0 then
sqlMsgOnSyntax: do
ggRes = 'sqlCode' sqlCode translate(sqlErrMc, ',', 'ff'x),
'<<rexx sqlCodeT not found or syntax>>\nwarnings'
do ggX=0 to 10
if sqlWarn.ggx <> '' then
ggRes = ggRes ggx'='sqlWarn.ggx
end
end
signal off syntax
ggRes = ggRes'\nstate' sqlState'\nstmt = ' ggSqlStmt
ggPref = '\nwith'
ggXX = pos(':', ggSqlStmt)+1
do 12 while ggXX > 1
ggYY = verify(ggSqlStmt, ' ,:+-*/&%?|()¢!', 'm', ggXX)
if ggYY < 1 then
ggYY = length(ggSqlStmt) + 1
ggVar = substr(ggSqlStmt, ggXX, ggYY - ggXX)
if ggVar <> '' then do
ggRes = ggRes || ggPref ggVar '=' value(ggVar)
ggPref = '\n '
end
ggXX = pos(':', ggSqlStmt, ggYY+1) + 1
end
return ggRes
endSubroutine sqlMsg
/*--- send a command to db2 through the TSO dsn processor ------------*/
sqlDsn: procedure expose m.
parse arg st, sys, cmd, rcOk
x = outtrap('M.'st'.')
push 'END'
push cmd
call address tso 'DSN SYSTEM('sys')'
rr = rc
x = outtrap(off)
if rr = 0 | rcOk = '*' | wordPos(rr, rcOk) > 0 then
return rr
fl = max(1, m.st.0 - 10)
em = 'rc' rr 'for DSN SYSTEM('sys') cmd' cmd,
'\nOuputlines' fl '-' m.st.0':'
do lx=fl to m.st.0
em = em '\n' strip(m.st.lx, 't')
end
call err em
endProcedure sqlDsn
/* copy sql end **************************************************/
/* copy scanSql begin *************************************************/
/*--- initialize with reader inRdr ----------------------------------*/
scanSql: procedure expose m.
parse arg inRdr
return scanSqlReset(scanWin(inRdr), inRdr)
scanSqlReset: procedure expose m.
parse arg m, rdr, scanWin
if scanWin ^== 0 then
call scanWinReset m, rdr, 5, 2, 1, 72
else
m.m.read = rdr
return scanOpts(m, , '0123456789_' , '--')
scanSqlSeekId: procedure expose m.
parse arg m, lx, cmd, opts
if opts = '' then
opts = word
if adrEdit("cursor =" max(trunc(lx), 1), 12) = 12 then
return -1
do while adrEdit("seek" cmd opts, 4) = 0 /* find each command*/
call adrEdit "(fx) = cursor"
if m.debug then do
call adrEdit "(LI) = LINE" fx
call debug 'scanSqlSeekId after' lx 'found' cmd 'at' fx li
end
call editReadReset m.m.read, fx
call scanWinOpen es, fx
do while word(scanPos(m), 1) <= fx & scanSqlType(m)
if m.m.sqlType = 'i' & m.m.val == cmd then
return fx
end
end
return -1
endProcedure scanSqlSeekId
/*--- scan a sql token put type in m.sqltype:
'i': ordinary identifier e.g. Name
'd': delimited identifier e.g. "Delimited"
'q': qualified identifier e.g. abc."efg"
'u': integer units e.g. 8G
'n': number e.g. -234
's': string e.g. 'abc''ef'
'' : at end
: any other character e.g. ;
----------------------------------------------------------------*/
scanSqlType: procedure expose m.
parse arg m, retSpace
m.m.val = ''
if scanSpaceNl(m) & retSpace = 1 then do
m.m.sqlType = 'b'
return 1
end
c2 = scanLook(m ,2)
if scanString(m, "' x' X'") then do
m.m.sqlType = 's'
if ^abbrev(m.m.tok, "'") then
m.m.val = x2c(m.m.val)
end
else if scanSqlQuId(m) then do
if m.m.val.0 > 1 then
m.m.sqlType = 'q'
else if abbrev(m.m.tok, '"') then
m.m.sqlType = 'd'
else
m.m.sqlType = 'i'
end
else if scanSqlNum(m, 0, 1) then
m.m.sqlType = 'n'
else if scanChar(m, 1) then
m.m.sqlType = m.m.tok
else if scanAtEnd(m) then do
m.m.sqlType = ''
return 0
end
else
call scanErr m, 'cannot scan sql'
return 1
endProcedure scanSqlType
scanSqlSkipBrackets: procedure expose m.
parse arg m, br
if br ^== '' then
nop
else if scanLit(m, '(') then
br = 1
else
return 0
do while scanSqlType(m) & m.m.sqlType ^== ';'
if m.m.sqlType = '(' then br = br + 1
else if m.m.sqlType ^== ')' then iterate
else if br > 1 then br = br - 1
else return 1
end
call scanErr m, '; or eof, but' br 'closing ) expected'
endProcedure skipBrackets
/*--- scan an ordinary sql identifier e.g. abc, ef_12 ----------------*/
scanSqlId: procedure expose m.
parse arg m
if ^ scanName(m) then
return 0
m.m.val = translate(m.m.tok)
return 1
endProcedure scanSqlId
/*--- scan a delimited or ordinay sql identifier ---------------------*/
scanSqlDeId: procedure expose m.
parse arg m
if scanSqlId(m) then
return 1
if ^ scanString(m, '"') then
return 0
m.m.val = strip(m.m.val, 't')
return 1
endProcedure scanSqlDeId
/*--- scan a qualified sql identifier --------------------------------*/
scanSqlQuId: procedure expose m.
parse arg m
res = ''
rto = ''
do qx=1
if ^ scanSqlDeId(m) then do
if qx <> 1 then
call scanErr m, 'id expected after .'
return 0
end
m.m.val.qx = m.m.val
res = res'.'m.m.val
rto = rto'.'m.m.tok
if ^ scanLit(scanSkip(m), '.') then
leave
call scanSpaceNl m
end
m.m.val.0 = qx
m.m.val = substr(res, 2)
m.m.tok = substr(rto, 2)
return 1
endProcedure scanSqlQuId
/*--- scan a sql number ----------------------------------------------*/
scanSqlNum: procedure expose m.
parse arg m, checkEnd, noSp
n = ''
if scanLit(m, '+', '-') then do
n = m.m.tok
if noSp <> 1 then
call scanSpaceNl m
end
if scanLit(m, '.') then
n = n'.'
if scanVerify(m, '0123456789') then
n = n || m.m.tok
else if n == '' then
return 0
else if noSp = 1 then do
call scanBack m, n
return 0
end
else
call scanErr m, 'scanSqlNum bad number: no digits after' n
if pos('.', n) < 1 then
if scanLit(m, '.') then do
if scanVerify(m, '0123456789') then
n = n'.'m.m.tok
end
if scanLit(m, 'E', 'e') then do
n = n'E'
if scanLit(m, '+', '-') then
n = n || m.m.tok
if ^ scanVerify(m, '0123456789') then
call scanErr m, 'scanSqlNum bad number: no digits after' n
n = n || m.m.tok
end
if checkEnd ^= 0 then
if pos(scanLook(m, 1), m.m.scanNameR) > 0 then
call scanErr m, 'scanSqlNum number' n 'bad end' ,
scanLook(m, 1)
m.m.val = n
return 1
endProcedure scanSqlNum
/*--- scan a sql number with a unit which may follow without space ---*/
scanSqlNumUnit: procedure expose m.
parse arg m, both, units
if ^ scanSqlNum(m, 0) then
return 0
nu = m.m.val
sp = scanSpaceNl(m)
if scanSqlId(m) then do
if units == '' | wordpos(m.m.val, units) > 0 then
nu = nu m.m.val
else if both | ^ sp then
call scanErr m, 'scanSqlNumUnit after' nu 'bad unit' m.m.val
else
call scanBack m, m.m.tok
end
else if both then
call scanErr m, 'scanSqlNumUnit no unit after' nu
else if ^sp & pos(scanLook(m, 1), m.m.scanNameR) > 0 then
call scanErr m, 'scanSqlNumUnit bad number end after' nu
m.m.val = nu
return 1
endProcedure scanSqlNumUnit
/* copy scanSql end *************************************************/
/* copy scanWin begin *************************************************
scan the the concatenation of the lines of a reader
any token my be split over several line
except the end-of-line-comment-token
***********************************************************************/
scanWinIni: procedure expose m.
if m.scanWin.ini = 1 then
return
m.scanWin.ini = 1
call scanIni
call jIni
call oDecMethods oNewClass('ScanWin'),
, 'scanReadNl return scanWinNl(m, unCond)',
, 'scanSpaceNl scanWinSpaceNl(m)',
, 'scanClose call scanWinClose m ',
, 'scanInfo scanWinInfo(m)',
, 'scanPos scanWinPos(m)'
return
endProcedure scanReadIni
/*--- instanciate a new window scanner, open rdr ---------------------*/
scanWin: procedure expose m.
parse arg rdr, wiSz, wiBa, cuPo, cuLe
return scanWinReset(oNew('ScanWin'), rdr, wiSz, wiBa, cuPo, cuLe)
/*--- set the attributes of window scanner m, open rdr and start read*/
scanWinReset: procedure expose m.
parse arg m, rdr, wiSz, wiGa, cuPo, cuLe
call scanReset m
m.m.read = rdr
m.m.atEnd = 'still closed'
return scanWinOpts(m, wiSz, wiGa, cuPo, cuLe)
endProcedure scanWinReset
scanWinOpts: procedure expose m.
parse arg m, wiSz, wiGa, cuPo, cuLe
wiSz = word(wiSz 5, 1)
wiGa = word(wiGa 1, 1)
m.m.cutPos = word(cuPo 1, 1)
m.m.cutLen = word(cuLe 72, 1)
m.m.winTot = (wiSz * 2 + wiGa) * m.m.cutLen
m.m.posLim = (wiSz + wiGa) * m.m.cutLen
m.m.posOff = wiGa * m.m.cutLen
return scanWinOpen(m)
endProcedure scanWinReset
scanWinOpen: procedure expose m.
parse arg m, lx
m.m.atEnd = 0
if lx = '' then
m.m.lineX = 1
else
m.m.lineX = lx
m.m.pos = 1
m.m.src = ''
call jOpen m.m.read, 'r'
call scanWinRead m
return m
endProcedure scanWinOpen
scanWinClose: procedure expose m.
m.m.atEnd = 'still closed'
call jClose m.m.read
return
endProcedure scanWinClose
/*--- move the source window: cut left side and append at right side
return number of characters cut at left ------------------------*/
scanWinRead: procedure expose m.
parse arg m
dlt = 0
if m.m.atEnd then
return 0
if m.m.pos >= m.m.posLim then do /* cut left side */
dlt = m.m.pos - (m.m.pos // m.m.cutLen + m.m.posOff)
m.m.src = substr(m.m.src, dlt+1)
m.m.pos = m.m.pos - dlt
m.m.lineX = m.m.lineX + dlt % m.m.cutLen
end
do while length(m.m.src) < m.m.winTot /* read and fill to len */
if ^ jRead(m.m.read, m'.'one) then do
m.m.atEnd = 1
return dlt
end
m.m.src = m.m.src || substr(m.m.one, m.m.cutPos, m.m.cutLen)
end
call assert 'length(m.m.src) = m.m.winTot'
return dlt
endProcedure scanWinRead
/*--- return position of next line start -----------------------------*/
scanWinNLPos: procedure expose m.
parse arg m
return m.m.pos + m.m.cutLen - ((m.m.pos - 1) // m.m.cutLen)
/*--- scan over spaces and comments ----------------------------------*/
scanWinSpaceNL: procedure expose m.
parse arg m
res = 0
do forever
r1 = 0
if scanVerify(m, ' ') then do
r1 = 1
end
else if m.m.scanComment ^== '' ,
& abbrev(substr(m.m.src, m.m.pos), m.m.scanComment) then do
np = scanWinNlPos(m)
r1 = length(m.m.scanComment) <= np - m.m.pos
if r1 then
m.m.pos = np
end
if r1 then
res = 1
else if scanWinRead(m) = 0 then
return res
end
endProcedure scanWinSpaceNl
/*--- return current position in input ------------------------------*/
scanWinPos: procedure expose m.
parse arg m
if scanAtEnd(m) then
return 'E'
else
ps = m.m.pos - 1
return (m.m.lineX + (ps % m.m.cutLen)) (ps // m.m.cutLen + 1)
endProcedure scanWinPos
/*--- return a description of the current scan position --------------*/
scanWinInfo: procedure expose m.
parse arg m
p = scanWinPos(m)
if p == 'E' then do
res = 'atEnd after'
p = m.m.lineX - 1 + length(m.m.src) % m.m.cutLen
end
else do
res = 'pos' word(p, 2) 'in'
p = word(p, 1)
end
return res 'line' p':' strip(substr(m.m.src,
, 1 + (p - m.m.lineX) * m.m.cutLen, m.m.cutLen), 't')
endProcedure scanWinInfo
/* copy scanWin end *************************************************/
/* copy scan begin ****************************************************
Scan: scan an input:
scanLine(m,ln) : begin scanning a single line (string)
scanRead??(m,ln): begin scanning all lines of an opened reader
scanAtEnd(m) : returns whether we reached end of input
scanLit(m,lit) : scan Literal lit if present or return 0
scanChar(m,n) : scan next n characters
scanName(m) : scan a name
ScanNat(m) : scan a natural number (without sign)
scanString(m,q): scan a String with quote q. (with doubble = 1)
scanVerify(m,c,o): verify(...,c,o,...)
scanKeyValue(m): scan a key = value clause (with spaces)
scanWord(m,u) : scan a space delimited word or a string,
if u=1 then uppercase non-strings
scanErr(m, txt): error with current scan location
m is an adress, to store our state
if a scan function succeeds, the scan posititon is moved
returns: true if scanned, false otherwise
m.m.tok ==> last token
m.m.val ==> last value for scanString/Word/KeyValue
m.key ==> key for scanKeyValue
m.m.pos ==> scan position
m.m.src ==> scan source
***********************************************************************/
scanIni: procedure expose m.
if m.scan.ini == 1 then
return
m.scan.ini = 1
m.scan.alfLC = 'abcdefghijklmnopqrstuvwxyz'
m.scan.alfUC = translate(m.scan.alfLC)
m.scan.alfa = m.scan.alfLC || m.scan.alfUC
m.scan.alfNum = m.scan.alfa || '0123456789'
return
endProcedure scanIni
scanReset: procedure expose m.
parse arg m, n1, np, co
m.m.tok = ''
m.m.val = ''
m.m.key = ''
m.m.read = ''
return scanOpts(m, n1, np, co)
endProcedure scanReset
scanOpts: procedure expose m.
parse arg m, m.m.scanName1, namePlus, m.m.scanComment
call scanIni
if m.m.scanName1 == '' then
m.m.scanName1 = m.scan.alfa
if namePlus == '' then
m.m.scanNameR = m.m.scanName1 || '0123456789'
else
m.m.scanNameR = m.m.scanName1 || namePlus
return m
endProcedure scanReset
/*--- begin scanning a single line -----------------------------------*/
scanSrc: procedure expose m.
parse arg m, m.m.src
m.m.atEnd = 1
m.m.pos = 1
return m
endProcedure scanSrc
/*--- return the next len characters ---------------------------------*/
scanLook: procedure expose m.
parse arg m, len
if len == '' then
return substr(m.m.src, m.m.pos)
else
return substr(m.m.src, m.m.pos,
, min(len, 1 + length(m.m.src) - m.m.pos))
endProcedure scanLook
/*--- scan the literal lit ------------------------------------------*/
scanLit: procedure expose m.
parse arg m
do ax=2 to arg()
if abbrev(substr(m.m.src, m.m.pos), arg(ax)) then do
m.m.tok = arg(ax)
m.m.pos = m.m.pos + length(arg(ax))
return 1
end
end
m.m.tok = ''
return 0
endProcedure scanLit
/*--- scan the next len characters -----------------------------------*/
scanChar: procedure expose m.
parse arg m, len
nx = 1 + length(m.m.src)
if len ^= '' then
nx = min(m.m.pos + len, nx)
m.m.tok = substr(m.m.src, m.m.pos, nx - m.m.pos)
m.m.pos = nx
return m.m.tok ^== ''
endProcedure scanChar
/*--- scan a string with quote char qu -------------------------------*/
scanString: procedure expose m.
parse arg m, prefs
m.m.tok = ''
bx = m.m.pos
if prefs = '' then do
qu = substr(m.m.src, bx, 1)
if pos(qu, "'""") < 1 then
return 0
ax = bx + 1
end
else do
do px=1 until abbrev(substr(m.m.src, bx), p1)
p1 = word(prefs, px)
if p1 = '' then
return 0
end
qu = right(p1, 1)
ax = bx + length(p1)
end
m.m.val = ''
do forever
qx = pos(qu, m.m.src, ax)
if qx < 1 then
return scanErr(m, 'ending Apostroph('qu') missing')
m.m.val = m.m.val || substr(m.m.src, ax, qx-ax)
if qx >= length(m.m.src) then
leave
else if substr(m.m.src, qx+1, 1) <> qu then
leave
ax = qx+2
m.m.val = m.m.val || qu
end
m.m.tok = substr(m.m.src, bx, qx+1-bx)
m.m.pos = qx+1
return 1
endProcedure scanString
/*--- scan a Name, first char in *.scanName1, rest in *.scanNameR ----*/
scanName: procedure expose m.
parse arg m
if pos(substr(m.m.src, m.m.pos, 1),
, m.m.scanName1) <= 0 then do
m.m.tok = ''
return 0
end
return scanVerify(m, m.m.scanNameR)
endProcedure scanName
/*--- scan with verify, vOpt is passed to verify ---------------------*/
scanVerify: procedure expose m.
parse arg m, alpha, vOpt
if vOpt == '' then /* empty string does not take default| */
nx = verify(m.m.src, alpha, , m.m.pos)
else
nx = verify(m.m.src, alpha, vOpt, m.m.pos)
if nx = 0 then
nx = length(m.m.src) + 1
m.m.tok = substr(m.m.src, m.m.pos, nx - m.m.pos)
m.m.pos = nx
return m.m.tok ^== ''
endProcedure scanVerify
/*--- scan a natural number (no sign, decpoint ...) ------------------*/
scanNat: procedure expose m.
parse arg m, chEn
if ^ scanVerify(m, '0123456789') then
return 0
if chEn^==0 & pos(substr(m.m.src, m.m.pos,1), m.m.scanNameR)>0 then
call scanErr m, 'illegal number end'
return 1
endProcedure ScanNat
scanInt: procedure expose m.
parse arg m, chEn
if scanNat(m, chEn) then
return 1
ox = m.scan.m.pos
if pos(substr(m.scan.m.src, ox, 1) , '+-') < 1 then
return 0
m.scan.m.pos = ox + 1
if | scanNat(m) then do
m.scan.m.pos = ox
return 0
end
m.tok =substr(m.scan.m.src, ox, 1)|| m.tok
return 1
endProcedure scanInt
/*--- scan a word and put value into *.val
a word is either delimited by space or stopper
or a string (with single or double quotes -------*/
scanWord: procedure expose m.
parse arg m, stopper
if scanString(m) then return 1
if ^scanVerify(m, ' 'stopper, 'm') then return 0
m.m.val = m.m.tok
return 1
endProcedure scanWord
scanBack: procedure expose m.
parse arg m, tok
if m.m.pos <= length(tok) then
call scanErr sc, 'cannot back "'tok'" length'
cx = m.m.pos - length(tok)
if substr(m.m.src, cx, length(tok)) ^== tok then
call scanErr sc, 'cannot back "'tok'" value'
m.m.pos = cx
return
endProcedure scanBack
/*--- scan a key = word phrase
put key into m.key and word into m.m.val -------*/
scanKeyValue: procedure expose m.
parse arg m, def
if ^ scanName(m) then
return 0
m.m.key = m.m.tok
if ^ scanLit(scanSkip(m), '=') then do
m.m.val = def
m.m.tok = ' no='
end
else if ^scanWord(scanSkip(m)) then
call scanErr(m, 'word expected after' m.m.key '=')
return 1
endProcedure scanKeyValue
scanAtEnd: procedure expose m.
parse arg m
return m.m.atEnd & m.m.pos > length(m.m.src)
endProcedure scanAtEnd
/*--- skip over spaces, nl and comments (if option set) --------------*/
scanSpaceNL: procedure expose m.
parse arg m
lastTok = m.m.tok
if m.m.read ^== '' then
interpret 'res = ' oObjMethod(m, 'scanSpaceNl')
else
res = scanSpaceCom(m)
m.m.tok = lastTok
return res
endProcedure scanSpaceNL
scanSpaceCom: procedure expose m.
parse arg m
res = scanVerify(m, ' ')
if m.m.scanComment ^== '' then
if abbrev(substr(m.m.src, m.m.pos), m.m.scanComment) then do
m.m.pos = 1 + length(m.m.src)
return 1
end
return res
endProcedure scanSpaceCom
/*--- skip over space, nl and comments and return m -----------------*/
scanSkip: procedure expose m.
parse arg m
call scanSpaceNl m
return m
endProcedure scanSkip
/*--- emit an error with current scan pos ----------------------------*/
scanErr: procedure expose m.
parse arg m, txt
m.m.err.0 = 0
call err 'scanErr' txt'\n'scanInfo(m, m'.ERR')
return 0
endProcedure scanErr
scanPos: procedure expose m.
parse arg m
if m.m.read ^== '' then
interpret 'return' oObjMethod(m, 'scanPos')
else if scanAtEnd(m) then
return E
else
return 1 m.m.pos
endProcedure scanPos
scanInfo: procedure expose m.
parse arg m
msg = 'last token' m.m.tok 'scanPosition' ,
strip(left(substr(m.m.src, m.m.pos), 40), 't')
if m.m.read == '' then
return msg'\npos' m.m.Pos 'in string' strip(m.m.src, 't')
else
interpret 'return msg"\n" ||' oObjMethod(m, 'scanInfo')
endProcedure scanInfo
/* copy scan end ****************************************************/
/* copy cat begin ****************************************************
***********************************************************************/
catOpt: procedure
parse arg opt, keep
if abbrev(opt, '<') then
o = 'r'substr(opt, 2)
else if abbrev(opt, '>>') then
o = 'a'substr(opt, 3)
else if abbrev(opt, '>') then
o = 'w'substr(opt, 2)
else if pos(left(opt, 1), 'rwa') > 0 then
o = opt
else
o = '?'opt
if keep ^== 1 then
o = translate(o, ' ', '£#')
return space(o, 0)
endProcedure catOpt
/*--- create and possibly open a reader or writer --------------------*/
catMake: procedure expose m.
parse arg opt, spec
o = catOpt(opt, 1)
if pos('£', o) > 0 then
return spec
else if pos('#', o) > 0 then do
if envhasKey(spec) then
return catMake(translate(opt, '£', '#'), envGet(spec))
else
return envPut(spec, jBuf())
end
else if pos('&', o) > 0 then
return catDsn('&'spec)
else
return catDsn(spec)
call err 'catMake implement' opt
if defDsn == '' then do
o = left(o, length(o)-1)
end
else if defDsn == '' then do
rw = catDsn(spec)
end
else do
rw = jReset(defDsn, spec)
end
if pos('-', o) < 1 then
call jOpen rw, o
return rw
endProcedure catMake
/*--- create a new cat -----------------------------------------------*/
cat: procedure expose m.
m = oNew('Cat')
m.m.catIx = -9
call catReset m
do ax=1 by 2 to arg()
call catWriteAll m, arg(ax), arg(ax+1)
end
return m
endProcedure cat
catReset: procedure expose m.
parse arg m
m.m.RWs.0 = 0
m.m.catWr = ''
m.m.catRd = ''
m.m.catToClose = ''
m.m.catIx = -9
call oSetTypePara m
do ax=2 by 2 to arg()
call catWriteAll m, arg(ax), arg(ax+1)
end
return m
endProcedure catReset
catClose: procedure expose m.
parse arg m
if m.m.catIx == -9 then
return
if m.m.catWr ^== '' then do
call jClose m.m.catWr
bx = mInc(m'.RWS.0')
m.m.opts.bx = ""
m.m.RWs.bx = m.m.catWr
m.m.catWr = ''
end
if m.m.catIx >= 0 then do
if m.m.catRd ^== '' then do
ix = m.m.catIx
if pos('-', m.m.opts.ix) < 1 then
call jClose m.m.catRd
m.m.catRd = ''
end
do wx = 1 to words(m.m.catToClose)
cl = word(m.m.catToClose, wx)
if cl ^== m then
call jClose cl
end
m.m.catToClose = ''
end
m.m.catIx = -9
return m
endProcedure catClose
catOpen: procedure expose m.
parse arg m, oo
call jClose m
if oo = 'r' then do
m.m.catIx = 0
m.m.catRd = catNextRdr(m)
m.m.jReading = 1
end
else if oo == 'w' | oo == 'a' then do
if oo == 'w' then
m.m.RWs.0 = 0
m.m.catIx = -7
m.m.jWriting = 1
end
else do
call err 'catOpen('m',' oo') bad opt'
end
return m
endProcedure catOpen
/*--- return and open next reader ------------------------------------*/
catNextRdr: procedure expose m.
parse arg m
cx = m.m.catIx
if cx > 0 & cx <= m.m.RWs.0 & pos('-', m.m.opts.cx) < 1 then
call jClose m.m.catRd
cx = cx + 1
m.m.catIx = cx
if cx > m.m.RWs.0 then
return ''
oo = overlay('r', m.m.opts.cx)
if pos('-', oo) < 1 then
call jOpen m.m.RWs.cx, oo
return m.m.RWs.cx
endProcedure catNextRdr
catRead: procedure expose m.
parse arg m, var
do while m.m.catRd ^== ''
if jRead(m.m.catRd, var) then
return 1
m.m.catRd = catNextRdr(m)
end
return 0
endProcedure catRead
catWrite: procedure expose m.
parse arg m, line
if m.m.catWr == '' then do
m.m.catWr = jOpen(jBuf(), 'w')
call oSetTypePara m.m.catWr, oGetTypePara(m)
end
call jWrite m.m.catWr, line
return
endProcedure catWrite
/*--- write contents of a reader to cat
or keep it for later reading -------------------------------*/
catWriteAll: procedure expose m.
parse arg m
if m.m.catIx >= 0 then
call err 'catWriteAll('m',' arg(2)',' arg(3)') but opened,',
'catIx='m.m.catIx
bx = m.m.RWs.0
if m.m.catWr ^== '' then do
call jClose m.m.catWr
bx=bx+1
m.m.opts.bx = ""
m.m.RWs.bx = m.m.catWr
m.m.catWr = ''
end
do ax=2 by 2 to arg()
bx=bx+1
m.m.opts.bx = catOpt(arg(ax))
m.m.RWs.bx = catMake(arg(ax), arg(ax+1))
call oSetTypePara m, oGetTypePara(m.m.RWs.bx)
end
m.m.RWs.0 = bx
return
endProcedure catWriteAll
/*--- store the list toClose to close them when closing cat ----------*/
catLazyClose: procedure expose m.
parse arg m, toClose
if m.m.catIx <> -7 then
call err 'catLazyClose with catIx' m.m.catIx
if m.m.RWs.0 = 0 then
return 0
if m.m.catToClose ^== '' then
call err 'catLazyClose with catToClose' m.m.catToClose
if m.m.catIx <> -7 | m.m.catToClose ^== '' then
m.m.catToClose = toClose
return 1
endProcedure catLazyClose
catSetTypePara: procedure expose m.
parse arg m, type
do ix=1 to m.m.RWs.0
call oSetTypePara m.m.RWs.ix, type
end
return
endProcedure catSetTypePara
/*--- create a reader/writer for a dsn -------------------------------*/
catDsn: procedure expose m.
parse arg spec
m = oNew('CatDsn')
m.m.readIx = 'c'
ix = mInc('CAT.BUF')
m.m.defDD = 'CAT'ix
m.m.buf = 'CAT.BUF'ix
call catDsnReset m, spec
return m
endProcedure catDsn
catDsnReset: procedure expose m.
parse arg m, sp
if symbol('m.m.defDD') ^== 'VAR' then
m.m.defDD = 'CDD' mInc('CAT.DEFDD')
m.m.spec = sp
return m
endProcedure catDsnReset
catDsnOpen: procedure expose m.
parse arg m, opt
call jClose m
buf = m.m.buf
if opt == 'r' then do
aa = dsnAlloc(m.m.spec, 'SHR', m.m.defDD)
if m.dsnAlloc.dsn <> '' then
if sysDsn("'"m.dsnAlloc.dsn"'") <> 'OK' then
call err 'cannot read' m.dsnAlloc.dsn':',
sysDsn("'"m.dsnAlloc.dsn"'")
call readDDBegin word(aa, 1)
m.m.jReading = 1
m.buf.0 = -1
m.m.readIx = 0
end
else do
if opt == 'w' then
aa = dsnAlloc(m.m.spec, 'OLD', m.m.defDD)
else if opt == 'a' then
aa = dsnAlloc(m.m.spec, 'MOD', m.m.defDD)
else
call err 'catDsnOpen('m',' opt') with bad opt'
call writeDDbegin word(aa, 1)
m.m.jWriting = 1
m.buf.0 = 0
m.m.readIx = 'w'
end
m.m.dd = word(aa, 1)
m.m.free = subword(aa, 2)
return m
endProcedure catDsnOpen
catDsnClose:
parse arg m
buf = m.m.buf
if m.m.readIx ^== 'c' then do
if m.m.readIx == 'w' then do
if m.buf.0 > 0 then
call writeDD m.m.dd, 'M.'BUF'.'
call writeDDend m.m.dd
end
else do
call readDDend m.m.dd
end
interpret m.m.free
end
m.buf.0 = 'closed'
m.m.readIx = 'c'
m.m.free = ''
m.m.dd = ''
return m
endProcedure catDsnClose
catDsnRead: procedure expose m.
parse arg m, var
ix = m.m.readIx + 1
buf = m.m.buf
if ix > m.buf.0 then do
res = readDD(m.m.dd, 'M.'buf'.')
if ^ res then
return 0
ix = 1
end
m.m.readIx = ix
m.var = m.buf.ix
return 1
endProcedure catDsnRead
catDsnWrite: procedure expose m.
parse arg m, var
buf = m.m.buf
ix = m.buf.0 + 1
m.buf.0 = ix
m.buf.ix = var
if ix > 99 then do
call writeDD m.m.dd, 'M.'buf'.'
m.buf.0 = 0
end
return
endProcedure catDsnWrite
catIni: procedure expose m.
if m.cat.ini == 1 then
return
m.cat.ini = 1
m.cat.buf = 0
call jIni
call oDecMethods oNewClass("Cat", "JRW"),
, "jOpen return catOpen(m, arg)",
, "jReset return catReset(m, '', arg)",
, "jClose call catClose m",
, "jWriteAll call err 'jWriteAll not opened w",
, "oSetTypePara call catSetTypePara m, type",
, "jRead return catRead(m, var)",
, "jWrite call catWrite m, line; return",
, "jWriteAll call catWriteAll m, opt, rdr; return"
call oDecMethods oNewClass("CatDsn", "JRW"),
, "jOpen return catDsnOpen(m, arg)",
, "jReset return catDsnReset(m, arg)",
, "jClose call catDsnClose m",
, "jRead return catDsnRead(m, var)",
, "jWrite call catDsnWrite m, line"
return
endProcedure catIni
/* copy cat end ****************************************************/
/* copy j begin *******************************************************
the j framework
jReset
jOpen
jClose
jRead
jWrite
***********************************************************************/
jRead: procedure expose m.
parse arg m, var
if m.m.jReading then
interpret oObjMethod(m, 'jRead')
else
call err 'jRead('m',' var') but not opened r'
endProcedure jRead
jWrite: procedure expose m.
parse arg m, line
if m.m.jWriting then
interpret oObjMethod(m, 'jWrite')
else
call err 'jWrite('m',' line') but not opened w'
return
endProcedure jWrite
jWriteAll: procedure expose m.
parse arg m, opt, rdr
interpret oObjMethod(m, 'jWriteAll')
return
endProcedure jWriteAll
jWriteAllImpl: procedure expose m.
parse arg m, opt, rdr
if pos('-', opt) < 1 then
call jOpen rdr, catOpt(opt)
do while jRead(rdr, line)
call jWrite m, m.line
end
if pos('-', opt) < 1 then
call jClose rdr
return
endProcedure jWriteAll
jReset: procedure expose m.
parse arg m, arg
call jClose m
interpret oObjMethod(m, 'jReset')
return m
endProcedure jOpen
jOpen: procedure expose m.
parse arg m, arg
interpret oObjMethod(m, 'jOpen')
return m
endProcedure jOpen
jClose: procedure expose m.
parse arg m
if m.m.jReading = 1 | m.m.jWriting = 1 then
interpret oObjMethod(m, 'jClose')
m.m.jReading = 0
m.m.jWriting = 0
return m
endProcedure jClose
/*--- analyze an option in oOpt and oVal -----------------------------*/
jOpt: procedure expose m.
parse arg src, alone, val
m.j.oOpt = ''
if left(src, 1) ^== '-' then do
m.j.oVal = src
return 0
end
sx = 2
if alone ^== '' then do
sx = verify(src, alone, 'n', sx)
if sx = 0 then
sx = length(src)+1
end
if length(src) < sx then
m.j.oVal = ''
else if val == '' then
call err 'bad opt "'src'" should contain only "'alone'"'
else if pos(substr(src, sx, 1), val) < 1 then
call err 'bad opt "'src'" should contain only "'alone'"' ,
'and/or 1 of "'val'" with value'
else do
sx = sx + 1
m.j.oVal = substr(src, sx)
end
m.j.oOpt = substr(src, 2, sx-2)
return 1
endProcedure jOpt
jIni: procedure expose m.
if m.j.ini == 1 then
return
m.j.ini = 1
call oIni
call oDecMethods oNewClass("JRW"),
, "jRead call err 'jRead('m',' var') but not opened r'",
, "jWrite call err 'jWrite('m',' line') but not opened w'",
, "jWriteAll call jWriteAllImpl m, opt, rdr",
, "jRead drop m.arg; return 0",
, "jWrite say 'jOut:' line",
, "jReset ;",
, "jOpen ;",
, "jClose ;"
x = oNew("JRW")
m.j.jIn = x
m.x.jReading = 1
m.x.jWriting = 0
x = oNew("JRW")
m.j.jOut = x
m.x.jReading = 0
m.x.jWriting = 1
call oDecMethods oNewClass("Jbuf", "JRW"),
, "jOpen return jBufOpen(m, arg)",
, "jReset return jBufReset(m, arg)",
, "oSetTypePara call jBufSetTypePara m, type",
, "jRead return jBufRead(m, var)",
, "jWrite call jBufWrite m, line"
return
endProcedure jInit
jIn: procedure expose m.
parse arg arg
return jRead(m.j.jIn, arg)
endProcedur jIn
jOut: procedure expose m.
parse arg arg
call jWrite m.j.jOut, arg
return
endProcedure jOut
/*--- jBuf: buffer read or write (supports datataypes) ---------------*/
jBuf: procedure expose m.
m = oNew('Jbuf')
call jBufReset m
do ax=1 to arg()
m.m.buf.ax = arg(ax)
end
m.m.buf.0 = ax-1
return m
endProcedure jBuf
jBufReset: procedure expose m.
parse arg m
m.m.stem = m'.BUF'
m.m.buf.0 = 0
call oSetTypePara m
do ax=1 to arg() - 1
m.m.buf.ax = arg(ax+1)
m.m.buf.0 = ax
end
return m
endProcedure jBufReset
jBufSetTypePara: procedure expose m.
parse arg m, type
if m.m.buf.0 <> 0 then
call err 'jBufSetTypePara but not empty'
return
endProcedure jBufSetTypePara
jBufOpen: procedure expose m.
parse arg m, opt
call jClose m
if opt == 'r' then do
m.m.readIx = 0
m.m.jReading = 1
return m
end
if opt == 'w' then
m.m.buf.0 = 0
else if opt ^== 'a' then
call err 'jBufOpen('m',' opt') with bad opt'
m.m.jWriting = 1
return m
endProcedure jBufOpen
jBufRead: procedure expose m.
parse arg m, var
nx = m.m.readIx + 1
if nx > m.m.buf.0 then
return 0
m.m.readIx = nx
ty = oGetTypePara(m)
if abbrev(ty, '=') then
m.var = m.m.buf.nx
else
call oTyCopy ty, var, m'.BUF.'nx
return 1
endProcedure jBufRead
jBufWrite: procedure expose m.
parse arg m, line
nx = mInc(m'.BUF.0')
ty = oGetTypePara(m)
if abbrev(ty, '=') then
m.m.buf.nx = line
else
call oTyCopy ty, m'.BUF.'nx, line
return 1
endProcedure jBufRead
/* copy j end *********************************************************/
/* copy o begin ********************************************************
object layer has three freatures
* an object may have a class which has methods
* an object may have a parmeterized type
* a class may contain field descriptions
***********************************************************************/
oClaMethod: procedure expose m.
parse arg cl, me
if symbol('m.o.cla.cl.met.me') = 'VAR' then
return m.o.cla.cl.met.me
else
call err 'no method' me 'in class' cl
endProcedure oClaMethod
oHasMethod: procedure expose m.
parse arg obj, me
cla = oGetClass(obj)
return symbol('m.o.cla.cl.met.me') = 'VAR'
endProcedure oHasMethod
oGetClass: procedure expose m.
parse arg Obj
if symbol('m.o.obj2cla.Obj') = 'VAR' then
return m.o.obj2cla.Obj
call err 'no class found for object' obj
endProcedure oGetClass
oObjMethod: procedure expose m.
parse arg obj, me
if symbol('m.o.obj2cla.obj') = 'VAR' then
return oClaMethod(m.o.obj2cla.obj, me)
if abbrev(obj, 'oCast:') then do
cx = pos(':', obj, 7)
return 'M="'substr(obj, cx+1)'";' ,
oClaMethod(substr(obj, 7,cx-7), me)
end
call err 'no class found for object' obj
endProcedure oObjMethod
oCast: procedure
parse arg obj, cl
if abbrev(obj, 'oCast:') then
obj = substr(obj, 1 + pos(':', obj, 7))
return 'oCast:'cl':'obj
endProcedure oCast
oNewClass: procedure expose m.
parse arg name, super
/* call oIni */
name = oFldNew(name)
neMe = 'O.CLA.'name'.MET'
neFi = 'O.CLA.'name'.FLD'
do sx=1 to words(super)
sup = word(super, sx)
if symbol('m.o.cla.sup') ^== 'VAR' then
call err 'superclass' sup 'is not defined'
if m.o.cla.sup.val ^== '' then
m.o.cla.name.val = m.o.cla.sup.val
if m.o.cla.sup.stem ^== '' then
m.o.cla.name.stem = m.o.cla.sup.stem
st = 'O.CLA.'sup'.MET'
do x=1 to m.st.0
olMe = m.st.x
call oPut neMe, olMe, m.st.olMe
end
st = 'O.CLA.'sup'.FLD'
do x=1 to m.st.0
olFi = m.st.x
call oPut neFi, olFi, m.st.olFi
end
end
call oMutate 'O.CLA.'name, 'Class'
return name
endProcedure oNewClass
oValStemFldsWKOLD: procedure expose m.
parse arg cl, m.o.cla.cl.val, m.o.cla.cl.stem, flds
st = 'O.CLA.'cl'.FLD'
do wx=1 by 2 to words(flds)
call oPut st, word(flds, wx), word(flds, wx+1)
end
return cl
endProcedure oValStemFlds
oNewTypeWKOLD: procedure expose m.
parse arg cl, va, st, flds
return oValStemFlds(oNewClass(cl), va, st, flds)
/*--- a field type has only fields of type '='
finds or creates a field Type with the fields of types tps
and the field list aFl.
if dup = 'e' duplicate field names are resolved ------------*/
oFiTypeWKOLD: procedure expose m.
parse arg tps, aFl, dup
if symbol('m.o.cla.fiType.tps.aFl.dup') = 'VAR' then
return m.o.cla.fiType.tps.aFl.dup
fs = ''
do wx=1 to words(tps)
t1 = oFlds(word(tps, wx))
do fx=1 to m.t1.0
fs = fs m.t1.fx
end
end
fs = fs aFl
fd = ''
do wx=1 to words(fs)
f1 = word(fs, wx)
if wordPos(f1, fd) < 1 then do
fd = fd f1
end
else if dup == 'e' then do
do dx=2 by 1 while wordPos(f1 || dx, fn fs) > 0
end
fd = fd f1 || dx
end
end
fd = space(fd aFl)
if symbol('m.o.cla.fiType.fd') = 'VAR' then do
res = m.o.cla.fiType.fd
end
else do
res = oNewClass("FiType*")
m.o.cla.fiType.fd = res
st = 'O.CLA.'res'.FLD'
do wx=1 to words(fd)
call oPut st, word(fd, wx), '='
end
end
m.o.cla.fiType.tps.aFl = res
return res
endProcedure oFiType
oDecMethods: procedure expose m.
parse arg cla
st = 'O.CLA.'cla'.MET'
do ax=2 to arg()
call oPut st, word(arg(ax), 1), subWord(arg(ax), 2)
end
return
endProcedure oDecMethods
oNew: procedure expose m.
parse arg cla
st = 'O.CLA.'cla
if symbol('M.st') ^== 'VAR' then
call err 'class' cla 'is not initialized'
nn = m.st.inst + 1
m.st.inst = nn
nn = 'O.C' || m.st || 'I' || nn
if symbol('m.o.obj2cla.nn') == 'VAR' then
call err 'oNew already defined:' nn
m.o.obj2cla.nn = cla
return nn
endProcedure oNew
oMutate: procedure expose m.
parse arg obj, class
if obj == 'O.C13I12' then do
end
if symbol('M.O.CLA.class') ^== 'VAR' then
call err 'class' class 'is not initialized'
m.o.obj2cla.obj = class
return obj
endProcedure oMutate
oSay: procedure expose m.
parse arg type, a, aPr, mPr
ty = 'O.CLA.'type
msg = mPr || substr(a, length(aPr)+1)
redir = 0
do forever
if type == '=' then do
say msg '=' m.a
return
end
else if abbrev(type, '=') then do
a = m.a
msg = msg '==>' a
redir = 1
type = substr(type, 2)
end
else if left(type, 2) = '<>' then do
k = m.a
a = left(a, lastPos('.', a))k
msg = msg '=<>' k
redir = 1
type = substr(type, 3)
end
else if left(type, 1) = '.' then do
if ^ datatype(m.a.0, 'n') then
call err 'type' type 'not stem but m.'a'.0 is' m.a.0
type = substr(type, 2)
if redir then do
say msg 'stem 1..'m.a.0':' type
end
else do
do y=1 to m.a.0
call oSay type, a'.'y, a'.', mPr' '
end
end
return
end
else if redir then do
say msg':' type
return
end
else do
leave
end
end
if m.ty.val = '=' then
say msg '=' m.a
else
say msg '=' m.a':' m.ty.val
/* call oSay m.ty.val, a,==>' m.a '(to' m.ty.val')' */
do y=1 to m.ty.fld.0
f = m.ty.fld.y
call oSay m.ty.fld.f , a'.'f, a'.', mPr' '
end
if m.ty.stem ^== '' then
call oSay '.'m.ty.stem, a, a, mPr
return
endProcedure oSay
oClear: procedure expose m.
parse arg type, a, val
if abbrev(type, '.') then do
m.a.0 = 0
end
else if abbrev(type, '<>') then do
m.a = val
call oClear substr(type, 3), left(a, lastPos('.', a))val, val
end
else if abbrev(type, '=') then do
m.a = ''
end
else do
ty = 'O.CLA.'type
if m.ty.val ^== '' then
m.a = val
do x = 1 to m.ty.fld.0
k = m.ty.fld.x
call oClear m.ty.fld.k, a'.'k, val
end
if m.ty.stem ^== '' then
call m.a.0 = 0
end
return a
endProcedure oClear
oCopy: procedure expose m.
parse arg t, f
if symbol('m.o.obj2cla.f') ^== 'VAR' then
call err f 'has no class'
cl = m.o.obj2cla.f
m.o.obj2cla.t = m.o.obj2cla.f
return oTyCopy(cl, t, f)
endProcedure oCopy
oTyCopy: procedure expose m.
parse arg type, t, f
if abbrev(type, '.') then do
do y=1 to m.f.0
call oTyCopy substr(type, 2), t'.'y, f'.'y
end
m.t.0 = m.f.0
end
else if abbrev(type, '<>') then do
k = m.f
m.t = k
call oTyCopy substr(type, 3), left(t, lastPos('.', t))k,
, left(f, lastPos('.', f))k
end
else if abbrev(type, '=') then do
m.t = m.f
end
else do
ty = 'O.CLA.'type
if m.ty.val ^== '' then
m.t = m.f
do x = 1 to m.ty.fld.0
k = m.ty.fld.x
call oTyCopy m.ty.fld.k, t'.'k, f'.'k
end
if m.ty.stem ^== '' then
call oTyCopy '.'m.ty.stem, t, f
end
return t
endProcedure oTyCopy
/*--- Run ------------------------------------------------------------*/
oRunner: procedure expose m.
parse arg code
return oRunnerReset(oNew('ORunner'), code)
oRunnerReset: procedure expose m.
parse arg m, pCode
m.m.code = pCode
return m
endProcedure oRunnerReset
oRun: procedure expose m.
parse arg m
interpret m.m.code
return
endProcedure oRun
oIni: procedure expose m.
if m.o.ini = 1 then
return
m.o.ini = 1
call oFldIni
call mapIni
m.o.paTy.0 = 0
call oFldNew '=', '='
call oDecMethods oNewClass('ORunner'), 'oRun call oRun m'
return
endProcedure oIni
/* copy o end *********************************************************/
/* copy oFld begin *****************************************************
defines classes with field names
is the base for the oo layer in copy o
***********************************************************************/
/*--- initialize the module ------------------------------------------*/
oFldIni: procedure expose m.
if m.oFld.ini = 1 then
return
m.oFld.ini = 1
call mapIni
m.o.fldOnly = mapNew() /* map fields -> class */
m.o.cla.0 = 0 /* the stem for classes */
call oFldNew 'Class', '=', , , /* MetaClass definieren */
'INST = MET .<>= FLD .<>=Class STEM =Class'
return
endProcedure oFldIni
/*--- create a new class
name: name of new class, a star will be replaced by a number
va: type of value
st: type of stem
flds: pairs of field names and types
dup: duplicate resolver -----------------------------------*/
oFldNew: procedure expose m.
parse arg name, va, st, flds, dup
if pos('*', name) > 0 then
name = oPut('O.CLA', name, , '*')
else
call oPut 'O.CLA', name, , 'n'
m.o.cla.name.inst = 0
m.o.cla.name.val = va
m.o.cla.name.stem = st
m.o.cla.name.FLD.0 = 0
m.o.cla.name.MET.0 = 0
return oFldAdd(name, flds, dup)
endProcedure oFldNew
/*--- create or find a class with only simple fields fs --------------*/
oFldOnly: procedure expose m.
parse arg fs, dup
kk = space(fs '?'dup, 1)
if mapHasKey(m.o.fldOnly, kk) then
return mapGet(m.o.fldOnly, kk)
if dup ^== 'e' then do
ll = space(fs, 1)
end
else do
ll = ''
do wx=1 to words(fs)
w = word(fs, wx)
v = w
do x=2 while wordPos(v, ff) > 0
v = w || x
end
ll = space(ll v, 1)
end
end
if mapHasKey(m.o.fldOnly, ll) then do
nn = mapGet(m.o.fldOnly, ll)
end
else do
nn = oFldNew('FldType*')
st = 'O.CLA.'nn'.FLD'
do lx=1 to words(ll)
call oPut st, word(ll, lx), '=', dup
end
call mapPut m.o.fldOnly, ll, nn
end
call mapPut m.o.fldOnly, kk, nn
return nn
endProcedure oFldOnly
/*--- return the stem of flds of class type --------------------------*/
oFlds: procedure expose m.
parse arg type
return 'O.CLA.'type'.FLD'
/*--- return the concatenation of the fields of type ty in stem st
formated by fmt -------------------------------------------*/
oFldCat: procedure expose m.
parse arg ty, st, fmt
flds = oFlds(ty)
res = ''
do ix=1 to m.flds.0
f = m.flds.ix
if fmt == '' then
res = res m.st.f
else
res = res fmt(m.st.f, m.fmt.ix)
end
return substr(res, 2)
endProcedure oFldCat
/*--- add fields to class cl given as name type pairs in fs ----------*/
oFldAdd: procedure expose m.
parse arg cla, fs, dup
st = 'O.CLA.'cla'.FLD'
do ix=1 by 2 to words(fs)
call oPut st, word(fs, ix), word(fs, ix+1), dup
end
return cla
endProcedure oFldAdd
/*--- add/put key k with value v to stem st
duplicate handling dup:
* replace * in k by a number until it is new
e add a number in it is not new
o replace old value at existing key
= add a new key, fail if key exists and value is different
------------------------------------------------------------*/
oPut: procedure expose m.
parse arg st, k, v, dup
if dup = '*' then do
cx = pos('*', k)
if cx < 1 then
call err 'no * in key' k
k = oPutDupResolve(st, left(k, cx-1), 1)
end
else if symbol('m.st.k') = 'VAR' then do
if dup = '' | dup = 'o' then do
m.st.k = v
return k
end
if dup = '=' then do
if v <> m.st.k | ^ (v = '' & datatype(m.st.k, 'n')) then
call err 'not =: m.'st'.'k '=>' m.st.k '<>' v
return k
end
if dup = 'e' then
k = oPutDupResolve(st, k, 2)
else
call err 'key' k 'exists in' st 'but dup' dup
end
else if dup = 'o' then
call err 'old key' k 'does not exist in' st
if datatype(k, 'n') | words(k) <> 1 | pos('.', k) > 0 then
call err 'illegal name' k
x = m.st.0 + 1
m.st.0 = x
m.st.x = k
if v == '' then
m.st.k = x
else
m.st.k = v
return k
endProcedure oPut
oPutDupResolve: procedure expose m.
parse arg st, k, b
do ix=b
a = k || ix
if symbol('m.st.a') <> 'VAR' then
return a
end
endProcedure oPutDupResolve
/*--- parameterized types --------------------------------------------*/
oGetTypePara: procedure expose m.
parse arg m
if symbol('m.o.tyPa.m') == 'VAR' then
return m.o.tyPa.m
else
return '='
endProcedure oGetTypePara
oSetTypePara: procedure expose m.
parse arg m, type, noCall
if type = '' then
type = '='
if oGetTypePara(m) == type then
return
if noCall ^== 'noCall' then
interpret oObjMethod(m, 'oSetTypePara')
m.o.tyPa.m = type
return
endProcedure oSetTypePara
/* copy oFld end ***************************************************/
/* copy map begin ******************************************************
a map stores values at keys
it may also maintain a list of keys
the basic ideas are similar to the java Interface java.util.Map
contrary to stems we also handle keys longer then 250 bytes
***********************************************************************/
/*--- create a new map ----------------------------------------------*/
mapNew: procedure expose m.
parse arg opt
return mapReset('MAP.'mInc('MAP.0') , opt)
endProcedure mapNew
/*--- make an empty map, opt=K means maintain a stem of keys ---------*/
mapReset: procedure expose m.
parse arg a, opt
if symbol('m.map.keys.a') == 'VAR' then
call mapClear a
upper opt
if opt = '=' then
st = a
else if opt = 'K' then
st = 'MAP.KEYS.'a
else
st = ''
m.map.keys.a = st
if st ^== '' then
m.st.0 = 0
if abbrev(a, 'MAP.') then
m.map.loKy.a.0 = 0
return a
endProcedure
/*--- remove all entries ---------------------------------------------*/
mapClear: procedure expose m.
parse arg a
st = mapKeys(a)
do kx=1 to m.st.0
k = m.st.kx
drop m.a.k m.st.kx
end
m.st.0 = 0
if abbrev(a, 'MAP.') then do
do kx=1 to m.map.loKy.a.0
drop m.map.loKy.a.kx m.map.loVa.a.kx
end
m.map.loKy.a.0 = 0
end
return a
endProcedure mapClear
/*--- return a stem of all keys (including removed ones) -------------*/
mapKeys: procedure expose m.
parse arg a
if m.map.keys.a == '' then
call err 'mapKeys('a') with no keys'
return m.map.keys.a
endProcedure mapKeys
/*--- add a new key value pair to the map ----------------------------*/
mapAdd: procedure expose m.
parse arg a, ky, val
if mapValAdr(a, ky) ^== '' then
call err 'duplicate key in mAdd('a',' ky',' val')'
if length(ky) < 200 then do
m.a.ky = val
end
else do
kx = mInc('MAP.LOKY.'a'.0')
m.map.loKy.a.kx = ky
m.map.loVa.a.kx = val
end
if m.map.keys.a ^== '' then
return mAdd(m.map.keys.a, ky)
return
endProcedure mapAdd
/*--- change the value at a key or add key value ---------------------*/
mapPut: procedure expose m.
parse arg a, ky, val
vv = mapValAdr(a, ky)
if vv ^== '' then
m.vv = val
else
call mapAdd a, ky, val
return val
endProcedure mapPut
/*--- return the value pointer for a key, '' if non existang ---------*/
mapValAdr: procedure expose m.
parse arg a, ky
if length(ky) < 200 then do
if symbol('m.a.ky') == 'VAR' then
return a'.'ky
end
else if ^ abbrev(a, 'MAP.') then do
call err 'key too long mapValAdr('a',' ky')'
end
else do
do kx=1 to m.map.loKy.a.0
if m.map.loKy.a.kx == ky then
return 'MAP.LOVA.'a'.'kx
end
end
return ''
endProcedure mapValAdr
/*--- remove a key from the map, do nothing if it is missing ---------*/
mapRemove: procedure expose m.
parse arg a, ky
val = m.a.ky
vv = mapValAdr(a, ky)
if vv == '' then
return ''
if abbrev(vv, 'MAP.LOVA.') then
call err 'not implemented mapRemove('a',' ky')'
drop m.a.ky
return val
endProcedure mapRemove
/*--- return 1 if key ky exists in map a, 0 otherwise ----------------*/
mapHasKey: procedure expose m.
parse arg a, ky
return mapValAdr(a, ky) ^== ''
endProcedure mapHasKey
/*--- return the value of key ky in map a,
fail if it does not exist ----------------------------------*/
mapGet: procedure expose m.
parse arg a, ky, noKey
vv = mapValAdr(a, ky)
if vv == '' then
call err 'missing key in mapGet('a',' ky')'
return m.vv
endProcedure mapGet
/*--- initialize the module ------------------------------------------*/
mapIni: procedure expose m.
if m.map.ini = 1 then
return
m.map.ini = 1
call mIni
m.map.0 = 0
return
endProcedure mapIni
/* copy map end *******************************************************/
/* copy m begin ********************************************************
we use variables as follows
m. stem m: all global data and object data that must survive
a procedure call (m for memory in Memoria of B5000)
m.<mbr>.** to avoid conflicts: every rexx Module (copy) should
only allocate addresses m.<mbr>.** with <mbr> the name of
the rexx module
we pass parameters around (e.g. a=address, m=memory, st=stem)
and the called function may use m.a or m.a.subField etc.
gg*: local variable in subroutines without procedure
everything else: temporary data within procedure
every subroutine is declared as procedure expose m.
(also if no m. variable is used, because e.g. of error handling)
the few subroutines that cannot use procedure, should use only
variables starting with gg
***********************************************************************/
/*--- increase m.a and return it (fail if undefined) -----------------*/
mInc: procedure expose m.
parse arg a
m.a = m.a + 1
return m.a
endProcedure mInc
/*--- cut stem a to length len ---------------------------------------*/
mCut: procedure expose m.
parse arg a, len
m.a.0 = len
return a
endProcedure mCut
/*--- add one or several arguments to stem m.a -----------------------*/
mAdd: procedure expose m.
parse arg a
ix = m.a.0
do ax = 2 to arg()
ix = ix + 1
m.a.ix = arg(ax)
end
m.a.0 = ix
return a'.'ix
endProcedure mAdd
/*--- add to m.dst.* a (sub)sequence of m.src.* ----------------------*/
mAddSt: procedure expose m.
parse arg dst, src
dx = m.dst.0
do sx = 1 to m.src.0
dx = dx + 1
m.dst.dx = m.src.sx
end
m.dst.0 = dx
return
endProcedure mAddAt
/*--- strip all elements of a stem -----------------------------------*/
mStrip: procedure expose m.
parse arg st, opt
if opt == '' then
opt = 'b'
do x=1 to m.st.0
m.st.x = strip(m.st.x, opt)
end
return st
endProcedure mStrip
/*--- cat all elements of a stem together ----------------------------*/
mCat: procedure expose m.
parse arg st, mid
if m.st.0 < 1 then
return ''
res = m.st.1
do x=2 to m.st.0
res = res || mid || m.st.x
end
return res
endProcedure mCat
mIni: procedure expose m.
if m.m.ini = 1 then
return
m.m.ini = 1
m.mAlfLC = 'abcdefghijklmnopqrstuvwxyz'
m.mAlfUC = translate(m.mAlfLC)
m.mAlfa = m.mAlfLC || m.mAlfUC
m.mAlfNum = m.mAlfa || '0123456789'
m.mAlfDot = m.mAlfNum || '.'
return
endProcedure mIni
/* copy m end *********************************************************/
/* copy adrIsp begin *************************************************/
/**********************************************************************
lmd: catalog read
call sequence: lmdBegin, lmdNext*, lmdEnd
mit lmd service (mit save in file und read,
weil list zu langsam und listcat abstürzt)
1. arg (grp) als group dataset für lmd save
und dd name für file read
***********************************************************************/
lmdBegin: procedure expose m.
parse arg grp, lev
call adrIsp 'lmdinit listid(lmdId) level('lev')'
res = adrIsp('lmdlist listid(&lmdId) option(save) group('grp')', 4)
call adrIsp 'lmdfree listid(&lmdId)'
if res = 0 then do
call trc timing() 'lmdlist save' grp lev
call adrTso 'alloc dd('grp') shr dsn('grp'.datasets)'
end
else do
call trc 'no datasets found' timing() 'lmdlist save' grp lev
call adrTso 'alloc dd('grp') dummy'
end
call readDDBegin grp
return /* end lmdBegin */
lmdNext:
parse arg ggGrp, ggSt, withVolume
if ^ readDD(ggGrp, ggSt) then
return 0
if withVolume ^== 1 then
do ggIx=1 to value(ggSt'0')
x = value(ggSt || ggIx, word(value(ggSt || ggIx), 1))
end
return 1
endSubroutin lmdNext
lmdEnd: procedure expose m.
parse arg grp
call readDDEnd grp
call adrTso 'free dd('grp')'
return /* end lmdEnd */
lmd: procedure expose m.
parse arg lev, withVol
call lmdBegin gg1, lev
do while lmdNext(gg1, q., withVol)
do x=1 to q.0
call jOut q.x
end
end
call lmdEnd gg1
return
endProcedure lmd
/**********************************************************************
member list of a pds:
call sequence x=lmmBegin(dsn) lmmNext(x) * lmmEnd(x)
***********************************************************************/
lmm: procedure expose m.
parse arg dsn
id = lmmBegin(dsn)
do ix=1 by 1
m = lmmNext(id)
if m = '' then
leave
call jOut m
end
call lmmEnd id
return
endProcedure lmm
lmmBegin: procedure expose m.
parse arg dsn
mbr = dsnGetMbr(dsn)
pds = dsnSetMbr(dsn, )
call adrIsp "LMINIT DATAID(lmmId) DATASET('"pds"') ENQ(SHRW)"
call adrIsp "LMOPEN DATAID("lmmId") OPTION(INPUT) "
res = lmmId
if mbr <> '' then
res = res 'pattern('mbr')'
return res
endProcedure lmmBegin
lmmEnd: procedure expose m.
parse arg lmmId opt
call adrIsp "LMMLIST DATAID("lmmId") option(free)", 8
call adrIsp "LMCLOSE DATAID("lmmId")"
call adrIsp "LMFREE DATAID("lmmId")"
return
endProcedure lmmEnd
lmmNext: procedure expose m.
parse arg lmmId opt
if adrIsp("LMMLIST DATAID("lmmid")" ,
"OPTION(LIST) MEMBER(Mbr)" opt, 4 8) = 0 then
return strip(mbr)
else
return ''
endProcedure lmmNext
lmmRm: procedure expose m.
parse arg dsn, mbrs
mbrs = dsnGetMbr(dsn) mbrs
pds = dsnSetMbr(dsn, )
call adrIsp "LMINIT DATAID(lmmId) DATASET("pds") ENQ(SHRW)"
call adrIsp "LMOPEN DATAID("lmmId") OPTION(OUTPUT) "
err = ''
do wx=1 to words(mbrs)
m1 = word(mbrs, wx)
rr = adrIsp("lmmDel dataid("lmmId") member("m1")", 0 8 12)
if rc = 0 then
say 'removed' m1 'from' pds
else if rc = 8 then
say 'not found' m1 'in' pds
else do
err = 'error deleting' m1 'in' pds 'rc' rr strip(zerrlm)
say err
leave
end
end
call adrIsp "LMCLOSE DATAID("lmmId")"
call adrIsp "LMFREE DATAID("lmmId")"
if err <> '' then
call err err
return
endProcedure lmmRm
/*--- address ispf with error checking -------------------------------*/
adrIsp:
parse arg ggIspCmd, ggRet
address ispexec ggIspCmd
if rc = 0 then return 0
else if ggRet == '*' then return rc
else if wordPOS(rc, ggRet) > 0 then return rc
else
call err 'adr ispExec rc' rc 'in' ggIspCmd':' strip(zerrlm)
endSubroutine adrIsp
/*--- address editor with error checking -----------------------------*/
adrEdit:
parse arg ggEditCmd, ggRet
address isrEdit ggEditCmd
if rc = 0 then return 0
else if ggRet == '*' then return rc
else if wordPOS(rc, ggRet) > 0 then return rc
else
call err 'adr isrEdit rc' rc 'for' ggEditCmd
endSubroutine adrEdit
/* copy adrIsp end *************************************************/
/* copy adrTso begin *************************************************/
/*--- send ggTsoCmd to tso, fail if rc <> 0 or not listed in ggRet ---*/
adrTso:
parse arg ggTsoCmd, ggRet
address tso ggTsoCmd
if rc == 0 then return 0
else if ggRet == '*' then return rc
else if wordPos(rc, ggRet) > 0 then return rc
else
call err 'adrTso rc' rc 'for' ggTsoCmd
return /* end adrTso */
/*--- format dsn from tso format to jcl format -----------------------*/
dsn2jcl: procedure expose m.
parse arg dsn ., addPrefix
if left(dsn,1) = "'" then
return strip(dsn, 'b', "'")
sp = sysvar('SYSPREF')
if sp == '' then
sp = userid()
cx = pos('~', dsn)
if cx < 1 & addPrefix == 1 then
return sp'.'dsn
do while cx ^== 0
le = left(dsn, cx-1)
ri = substr(dsn, cx+1)
if right(le, 1) == '.' | left(ri, 1) == '.' then
dsn = le || sp || ri
else
dsn = le || left('.', le ^== '') || sp ,
|| left('.', ri ^== '') || ri
cx = pos('~', spec, cx)
end
return dsn
endProcedure dsn2Jcl
/*--- format dsn from jcl format to tso format -----------------------*/
jcl2dsn: procedure expose m.
parse arg dsn .
return "'"dsn"'"
endProcedure jcl2dsn
dsnSetMbr: procedure expose m.
parse arg dsn, mbr
bx = pos('(', dsn)
if bx > 0 then
dsn = strip(left(dsn, bx-1))
if mbr <> '' then
dsn = dsn'('strip(mbr)')'
return dsn
endProcedure dsnSetMbr
dsnGetMbr: procedure expose m.
parse arg dsn
lx = pos('(', dsn)
rx = pos(')', dsn, lx+1)
if lx < 1 then
return ''
else if lx < rx then
return substr(dsn, lx+1, rx-lx-1)
else
return strip(substr(dsn,lx+1))
endProcedure dsnGetMbr
/**********************************************************************
io: read or write a dataset with the following callsequences:
read: readDDBegin, readDD*, readDDEnd
write: writeBegin, writeDD*, writeEnd
readDD returns true if data read, false at eof
***********************************************************************/
/*--- prepare reading from a DD --------------------------------------*/
readDDBegin: procedure expose m.
return /* end readDDBegin */
/*--- read from DD ggDD into ggSt, return false at eof ---------------*/
readDD:
parse arg ggDD, ggSt, ggCnt
if ggCnt = '' then
ggCnt = 100
call adrTso 'execio' ggCnt 'diskr' ggDD '(stem' ggSt')', 2
return (value(ggSt'0') > 0)
return /* end readDD */
/*--- finish reading DD ggDD ----------------------------------------*/
readDDEnd: procedure expose m.
parse arg ggDD
call adrTso 'execio 0 diskr' ggDD '(finis)'
return /* end readDDEnd */
/*--- prepare writing to DD ggDD -------------------------------------*/
writeDDBegin: procedure expose m.
parse arg ggDD
/* ensure file is erased, if no records are written */
call adrTso 'execio' 0 'diskw' ggDD '(open)'
return /* end writeDDBegin */
/*--- write to gg ggDD from stem ggSt, ggCnt records -----------------*/
writeDD:
parse arg ggDD, ggSt, ggCnt
if ggCnt == '' then
ggCnt = value(ggst'0')
call adrTso 'execio' ggCnt 'diskw' ggDD '(stem' ggSt')'
return
endSubroutine writeDD
/*--- end writing to dd ggDD (close) --------------------------------*/
writeDDEnd: procedure expose m.
parse arg ggDD
call adrTso 'execio 0 diskw' ggDD '(finis)'
return /* end writeDDEnd */
/*--- alloc a dsn or a dd
spec '-'<ddName>
datasetName? disposition? '.'? attributes? (':' newAtts)?
disp default disposition
dd default dd name
retRc erlaubte ReturnCodes (leer = 0)
returns if ok then ddName <rexx for free> otherwise rc -----*/
dsnAlloc: procedure expose m.
parse upper arg spec, disp, dd, retRc
ds = ''
m.dsnAlloc.dsn = ds
if left(spec, 1) = '-' then
return strip(substr(spec, 2))
if left(spec, 1) = '&' then /* external spec is handled ok */
spec = strip(substr(spec, 2))
do wx=1 by 1
w = word(spec, wx)
if w = '' | abbrev(w, '.') | abbrev(w, ':') then
leave
else if wordPos(w, 'OLD SHR MOD NEW')>0 | abbrev(w, 'SYSO') then
disp = w
else if w = 'CATALOG' then
disp = disp w
else if abbrev(w, 'DD(') then
dd = substr(w, 4, length(w)-4)
else if abbrev(w, 'DSN(') then
ds = strip(substr(w, 5, length(w)-5))
else if ds = '' then
ds = dsn2jcl(w)
else
leave
end
rest = subword(spec, wx)
if abbrev(rest, '.') then
rest = substr(rest, 2)
parse var rest rest ':' nn
if dd <> '' & ds = '' & rest = '' & ^ abbrev(disp, 'SYSO') then
call err "'return" dd"' no longer supported please use -"dd
if dd = '' then do
if symbol('m.adrTso.ddNum') = 'VAR' then
dd = m.adrTso.ddNum + 1
else
dd = 1
m.adrTso.ddNum = dd
dd = 'DD' || dd
end
if disp = '' then
disp = 'SHR'
else if pos('(', ds) < 1 then
nop
else if disp = 'MOD' then
call err 'disp mod for' ds
else
disp = 'SHR'
m.dsnAlloc.dsn = ds
if pos('/', ds) > 0 then
return csmAlloc(dd, disp, ds, rest, nn, retRc)
else
return tsoAlloc(dd, disp, ds, rest, nn, retRc)
endProcedure dsnAlloc
tsoAlloc: procedure expose m.
parse arg dd, disp, dsn, rest, nn, retRc
c = 'alloc dd('dd')' disp
if dsn <> '' then
c = c "DSN('"dsn"')"
if retRc <> '' | nn = '' then do
alRc = adrTso(c rest, retRc)
if alRc <> 0 then
return alRc
return dd 'call adrTso "free dd('dd')";'
end
do retry=0 by 1
alRc = adrTso(c rest, '*')
if alRc = 0 then
return dd 'call adrTso "free dd('dd')";'
if retry > 0 | nn = '' | wordPos(disp, 'OLD SHR') < 1 ,
| sysDsn("'"m.dsnAlloc.dsn"'") ^== 'DATASET NOT FOUND' then
call err 'tsoAlloc rc' alRc 'for' c rest
say 'tsoAlloc rc' alRc 'for' c rest '...trying to create'
call adrTso 'alloc dd('dd') new catalog' dsnCreateAtts(dsn, nn)
call adrTso 'free dd('dd')'
end
endProcedure tsoAlloc
dsnCreateAtts: procedure expose m.
parse arg dsn, atts, forCsm
bl = 32760
if abbrev(atts, ':') then do
rl = substr(atts, 3)
if abbrev(atts, ':F') then do
if rl = '' then
rl = 80
recfm='f b'
bl = bl - (bl // rl)
end
else do
if rl = '' then
rl = bl-4
recfm = substr(atts, 2, 1) 'B'
end
end
if pos('(', dsn) > 0 then
po = 'dsntype(library) dsorg(po)'
else
po = ''
dsn = dsnSetMbr(dsn)
if forCsm == 1 then
return "dataset('"dsn"')" po,
"recfm("space(recfm, 0)") lrecl("rl") blkSize("bl")" ,
"mgmtclas(s005y000) space(10, 1000) cylinder"
else
return "dsn('"dsn"')" po,
"recfm("recfm") lrecl("rl") block("bl")" ,
"mgmtclas(s005y000) space(10, 1000) cyl"
endProcedure dsnCreateAtts
/*--- read the dataset specified in ggDsnSpec to stem ggSt -----------*/
readDSN:
parse arg ggDsnSpec, ggSt
ggAlloc = dsnAlloc(ggDsnSpec, 'SHR', 'readDsN')
call adrTso 'execio * diskr' word(ggAlloc, 1) '(stem' ggSt' finis)'
interpret subword(ggAlloc, 2)
return
endSubroutine readDsn
/*--- write the dataset specified in ggDsnSpec from stem ggSt
write ggCnt records if not empty otherwise ggst0
if ggSay 1 then say ... records written to ... -------------*/
writeDSN:
parse arg ggDsnSpec, ggSt, ggCnt, ggSay
if ggCnt == '' then
ggCnt = value(ggst'0')
ggAlloc = dsnAlloc(ggDsnSpec, 'OLD', 'readDsN')
call adrTso 'execio' ggCnt 'diskw' word(ggAlloc, 1) ,
'(stem' ggSt 'open finis)'
interpret subword(ggAlloc, 2)
if ggSay == 1 | m.debug == 1 then
say ggCnt 'records written to' ggDsnSpec
return
endSubroutine writeDsn
copyDSN: procedure expose m.
parse arg frSpec, toSpec, ggSay
frDD = dsnAlloc(frSpec, 'SHR', 'FRDD')
toDD = dsnAlloc(toSpec, 'OLD', 'TODD')
call readDDBegin word(frDD, 1)
call writeDDBegin word(toDD, 1)
cnt = 0
do while readDD(word(frDD, 1), r.)
call writeDD word(toDD, 1), r.
cnt = cnt + r.0
end
call readDDEnd word(frDD, 1)
call writeDDEnd word(toDD, 1)
interpret ';' subword(frDD, 2) '; ; ;' subword(toDD, 2)
if ggSay == 1 | m.debug == 1 then
say cnt 'records copied from' frSpec 'to' to toSpec
return
endSubroutine writeDsn
/* copy adrTso end ****************************************************/
/* copy err begin ******************************************************
messages, errorhandling,help
***********************************************************************/
/* configure err -----------------------------------------------------*/
errReset: procedure expose m.
parse arg oo, ha
if pos('I', translate(oo)) > 0 then
call adrIsp 'control errors return'
m.err.opt = translate(oo, 'h', 'H')
if ha == '' then
drop m.err.handler
else
m.err.handler = ha
return
endSubroutine errReset
/*--- error routine: abend with message ------------------------------*/
err:
parse arg ggTxt, ggOpt
drop err handler opt
if ggOpt == '' & symbol('m.err.handler') == 'VAR' then
interpret m.err.handler
call errSay ggTxt
parse source . . ggS3 . /* current rexx */
if ggOpt == '' | ggOpt == '*' then
ggOpt = translate(value('m.err.opt'), 'ht', 'HT')
if pos('h', ggOpt) > 0 then do
say 'fatal error in' ggS3': divide by zero to show stackHistory'
x = 1 / 0
end
say 'fatal error in' ggS3': exit(12)'
exit errSetRc(12)
endSubroutine err
/*--- assert that the passed rexx expression evaluates to true -------*/
assert:
interpret 'assertRes =' arg(1)
if ^ assertRes then
call err 'assert failed' arg(1)':' arg(2)
return
endProcedure assert
/*--- say an errorMessage msg with pref pref
split message in lines at '\n'
say addition message in stem st ---------------------------*/
errSay: procedure expose m.
parse arg msg, st, pref
parse source . . ggS3 . /* current rexx */
if pref == 'e' | (pref == '' & st == '') then
msg = 'fatal error:' msg
else if pref == 'w' then
msgf = 'warning:' msg
else if pref == 0 then
nop
else if right(pref, 1) ^== ' ' then
msg = pref':' msg
else
msg = pref || msg
sx = 0
bx = -1
do lx=1 until bx >= length(msg)
ex = pos('\n', msg, bx+2)
if ex < 1 then
ex = length(msg)+1
if st == '' then do
say substr(msg, bx+2, ex-bx-2)
end
else do
sx = sx+1
m.st.sx = substr(msg, bx+2, ex-bx-2)
m.st.0 = sx
end
bx = ex
end
return
endProcedure errSay
/*--- abend with Message after displaying help -----------------------*/
errHelp: procedure expose m.
parse arg msg, op
say 'fatal error:' msg
call help
call err msg, op
endProcedure errHelp
/*--- set rc for ispf: -------------------------------------------------
if a cmd is run by ispStart, its RC is ignored,
but ISPF passes the value of the shared varible 3IspfRc
back as return code
----------------------------------------------------------------------*/
errSetRc: procedure expose m.
parse arg zIspfRc
if sysVar('sysISPF') = 'ACTIVE' then do
address ispExec vput 'zIspfRc' shared
end
return zIspfRc
endProcedure errSetRc
/*--- output a trace message if m.trace is set -----------------------*/
trc: procedure expose m.
parse arg msg
if m.trace == 1 then
say 'trc:' msg
return
endProcedure trc
/*--- quote string txt using quoteChar qu ("""" ==> ") ---------------*/
quote: procedure expose m.
parse arg txt, qu
if qu = '' then
qu = '"'
res = qu
ix = 1
do forever
qx = pos(qu, txt, ix)
if qx = 0 then
return res || substr(txt, ix) || qu
res = res || substr(txt, ix, qx-ix) || qu || qu
ix = qx + length(qu)
end
endProcedure quote
debug: procedure expose m.
parse arg msg
if m.debug == 1 then
say 'debug' msg
return
endProcedure debug
/*--- return current time and cpu usage ------------------------------*/
timing: procedure expose m.
return time() time('E') sysvar('syscpu') /* sysvar('syssrv') */
/--- display the first comment block of the source as help -----------*/
help: procedure expose m.
parse source . . s3 .
say right(' help for rexx' s3, 79, '*')
do lx=1 by 1
if pos('/*', sourceLine(lx)) > 0 then
leave
else if lx > 10 then do
say 'initial commentblock not found for help'
return
end
end
do lx=lx+1 by 1
li = strip(sourceLine(lx), 't', ' ')
if pos('*/', li) > 0 then
leave
say li
end
say right(' end help for rexx' s3, 79, '*')
return 4
endProcedure help
/* copy err end *****************************************************/
}¢--- A540769.WK.REXX.O13(DDLCHECK) cre=2013-06-03 mod=2013-10-03-13.57.06 A540769 ---
/* rexx ----------------------------------------------------------------
synopsis:
DDLCHECK SEL dsnSpec dbSys view objs+
history:
25. 9.13 Walter erlaube cat oq <-> o fuer overwrites
6. 8.13 Walter ix fuer spezialfall
18. 7.13 Walter fix sqlDisconnect und insert gp (null verschluckt n|)
28. 6.13 Walter db fuer Selektion - alle TS, kein check auf db selber
20. 6.13 Walter pieceSize Logik mit 2 Defaults
3. 6.13 Walter neu
----------------------------------------------------------------------*/
parse arg mArg
call errReset hi
call wshIni
call csvIni
m.myRexx = 'ORG.U0009.B0106.KIDI63.EXEC'
m.m.toFree = ''
call mPut m'.SPEZIALTYPE.db', 'DB'
call mPut m'.SPEZIALTYPE.ts', 'TS'
call mPut m'.SPEZIALTYPE.t' , 'TB'
call mPut m'.SPEZIALTYPE.i' , 'IX'
m.spezialLib = 'DSN.DBX.SPEZIAL'
m.spezialOut = ''
if mArg == '' then
if m.err.ispf then
call adrEdit 'macro (mArg)', '*'
if 0 then do
call qForm aa, csvRdr(file('A540769.TMP.TEXV(DDLEINS)'))
call err endTest
end
if 0 & mArg == '' then do
say '???? calling ddlCheck ....'
res = ddlCheck('check ~tmp.texv(ddlChe3) rz1/dbaf rz2/dbof ',
't:A540769.TWK9% t:A540769.PLAN%')
/* res = ddlCheck('check ~tmp.texv(ddlChe2) rz8/dx0g rz2/dbof ',
't:OA1A.TMF150A1 t:OA1P.TMF15% t:OA%.TNI250%') */
say '???? ddlCheck result =' res
call outSt splitNl(xx, 'qualityCheck' res)
exit
end
if 0 & mArg == '' then
mArg = 'sel ~tmp.texv(ddlCheck) dbaf S100447.vDdlChec8' ,
't:OA1A.TMF150A1 t:OA1A.TMF160A1 t:OA%.TNI250%',
'ts:BE0%.A010% ts:BE0%.A10%',
'v:OA1A.VMF150% i:OA1A.IMF160% i:OA%.INI250%'
if pos('?', mArg) > 0 | mArg = '' then
exit help()
call scanIni
call scanSrc s, mArg
fun = scanSkWord(s, ,1)
if fun == 'CHECK' then do
dsn = scanSkWord(s, , , 'dsnSpec')
xRzDb = scanSkWord(s, , , 'rz/db2Subsystem')
parse var xRzdb xRz '/' xDbSys
yRzDb = scanSkWord(s, , , 'rz/db2Subsystem')
parse var yRzdb yRz '/' yDbSys
rest = scanLook(s)
/* say 'check to dsn='dsn
say ' from prototype rz='xRz 'dbsys='xDbSys
say ' from production rz='yRz 'dbsys='yDbSys
say ' rest' rest */
rX = selectOne(m, xRz, xDbSys, 'S100447.vDdlChec8', xSel, rest)
rY = selectOne(m, yRz, yDbSys, 'S100447.vDdlCheS8', ySel, rest)
call pipe '+F', file(dsn)
sum = qForm(m, rX, rY, xRzDb, yRzDb)
call pipe '-'
call tsoFree m.m.toFree
return sum
end
else if fun == 'SEL' then do
dsn = scanSkWord(s, , , 'dsnSpec')
dbSys = scanSkWord(s, , , 'db2 system')
view = scanSkWord(s, , , 'view to select from')
parse var view vCr '.' vw
/* say 'select to dsn='dsn
say ' from dbSys='dbSys 'view='view */
call sqlConnect dbSys
call insSels s, vCr
o = jOpen(file(dsn), '>')
call jWriteAll o, csvWrt(sqlRdr('select * from' view))
call jClose o
call sqlDisconnect
end
else do
do wx=1 while scanWord(scanSkip(s))
say wx m.s.val '<'m.s.tok'>'
end
call errHelp 'i}unknown function' fun
end
exit 0
insSels: procedure expose m.
parse arg s, vCr
call sqlUpdate 1, 'delete from' vCr'.'tDdlSel, 'w'
/* say m.sql.1.updateCount 'rows deleted from' vCr'.'tDdlSel */
cTy = ''
do while scanWord(scanSkip(s))
parse var m.s.val ty ':' cr '.' nm
if ty \== cTy | cCr \== cr then do
if cTy \== '' then
call insType vCr, cTy, cCr, cEq, cLi
cTy = ty
cCr = cr
cEq = ''
cLi = ''
end
if verify(nm, '%_', 'm') = 0 then
cEq = cEq nm
else
cLi = cLi nm
end
if cTy == '' then
call err 'no selections'
call insType vCr, cTy, cCr, cEq, cLi
return '???'
endProcedure genWhere
insType: procedure expose m.
parse arg vCr, ty, cr, eq, li
/* say 'insType' ty 'into' vCr'.tDdlSel' 'cr='cr 'eq='eq 'li='li */
sq = "insert into" vCr".tDdlSel select"
f1 = ", '' from sysibm.sys"
if ty == 'db' then
call insOne sq "'ts', dbName, name"f1"Tablespace",
"where", 'dbName', cr, 'name', ,'%'
else if ty == 'i' then
call insOne sq "'i', creator, name"f1"Indexes",
"where", 'creator', cr, 'name', eq, li
else if ty == 't' then
call insOne sq "'ts', dbName, tsName"f1"Tables" ,
"where type not in ('A', 'V') and" ,
, 'creator', cr, 'name', eq, li
else if ty == 'ts' then
call insOne sq "'ts', dbName, name"f1"Tablespace",
"where", 'dbName', cr, 'name', eq, li
else if ty == 'v' then
call insOne sq "'v', creator, name"f1"Tables",
"where type='V' and", 'creator', cr, 'name', eq, li
else
call err 'bad insType' ty
return
endProcedure insType
insOne: procedure expose m.
parse arg sq, crCo, crV, nmCo, nmEq, nmLi
if verify(crV, '%_', 'm') > 0 then
sq = sq crCo "like '"crV"' and"
else if crV \== '' then
sq = sq crCo "= '"crV"' and"
sq = sq '('
if nmEq <> '' then
sq = sq nmCo "in ('"repAll(space(nmEq, 1), ' ', "', '")"') or"
if nmLi <> '' then
sq = sq nmCo "like '" ,
|| repAll(space(nmLi, 1), ' ', "' or" nmCo "like '")"' or"
if right(sq, 3) \== ' or' then
call err 'no nm for sql' sq
sq = left(sq, length(sq)-3)')'
call sqlUpdate 1, sq, 100
/* say m.sql.1.updateCount '???rows inserted by' sq */
return
endProcedure insOne
selectOne: procedure expose m.
parse arg m, rz, dbSys, vw, dd, rest
upper rz
if rz <> '' & rz <> sysvar(sysnode) then do
call dsnAlloc rz"/"userid()".TMP."dd" DD("dd") new ::v"
call csmExRx rz, m.myRexx, ,'%ddlCheck sel dd('dd')' ,
dbSys vw rest
m.m.toFree = m.m.toFree dd
return csvRdr(file('dd('dd')'))
end
else do
parse var vw cr '.' nm
call sqlConnect dbSys
call scanSrc sOne, rest
call insSels sOne, cr
o = jOpen(jBuf(), '>')
call jWriteAll o, sqlRdr('select * from' vw)
call sqlDisconnect
call jCLose o
return o
end
endProcedure selectOne
qForm: procedure expose m.
parse arg m, xR, yR, xTit, yTit
xI = jReadO(jOpen(xR, '<'))
yI = jReadO(jOpen(yR, '<'))
m.m.stats = ''
call out right('help' ,
'http://chw20025641/host/db2wiki/pmwiki.php?n=Main.CaDDLQuality',72)
call out left('*ty ca object', 47) left('rows' yTit, 13) 'size'
call out ' ty ca name attribute ',
left(xTit, 13) 'standard ' yTit
call out ' '
do while xI \== '' | yI \== ''
xPa = m.xI.pa
if m.xI.ty == 'c' then
if right(xPa, length(m.xI.nm)+3) == ' c:'m.xI.nm then
xPa = left(xPa, length(xPa) - length(m.xI.nm) - 3)
else
call err 'bad c: path' qFormL0(xI)
yPa = m.yI.pa
if m.yI.ty == 'c' then
if right(yPa, length(m.yI.nm)+3) == ' c:'m.yI.nm then
yPa = left(yPa, length(yPa) - length(m.yI.nm) - 3)
else
call err 'bad c: path' qFormL0(yI)
if xI \== '' & yI \== '' & xPa == yPa then do
if cuPa \== xPa then do
if \ abbrev(m.xI.cat, 's') then
call err 'cat=s% expected not' qFormL0(xI)
if \abbrev(m.yI.cat, 's') then
call err 'cat=s% expected not' qFormL0(yI)
cuNewOld = '='
cuPa = xPa
call out qFormS1(m, cuNewOld, yI)
xI = jReadO(xR)
yI = jReadO(yR)
end
else if m.xI.att == m.yI.att then do
if qFormDoOut(cuNewOld, xI, yI) then
call out qFormL1(m, cuNewOld, xI, yI)
if m.xI.std \== m.yI.std then
call err 'std \==' qFormL0(xI) '\==' qFormL0(yI)
xI = jReadO(xR)
yI = jReadO(yR)
end
else if m.xI.att << m.yI.att then do
if qFormDoOut(cuNewOld, xI, ) then
call out qFormL1(m, cuNewOld, xI)
xI = jReadO(xR)
end
else do
if qFormDoOut(cuNewOld, , yI) then
call out qFormL1(m, cuNewOld, , yI)
yI = jReadO(yR)
end
end
else if yI == '' | xPa << yPa then do
if cuPa \== xPa then do
if \ abbrev(m.xI.cat, 's') then
call err 'cat=s% expected not' qFormL0(xI)
cuPa = xPa
cuNewOld = '+'
call out qFormS1(m, cuNewOld, xI)
end
else do
if qFormDoOut(cuNewOld, xI) then
call out qFormL1(m, cuNewOld, xI)
end
xI = jReadO(xR)
end
else do
if cuPa \== yPa then do
if \abbrev(m.yI.cat, 's') then
call err 'cat=s% expected not' qFormL0(yI)
cuPa = yPa
cuNewOld = '-'
call out qFormS1(m, cuNewOld, yI)
end
else do
if qFormDoOut(cuNewOld, , yI) then
call out qFormL1(m, cuNewOld, , yI)
end
yI = jReadO(yR)
end
end
call jClose xR
call jClose yR
return statsSum(m, 'n pq p oq iq sb - + =')
endProcedure qForm
/*--- piecesize has 2 stdValues 2G and 4G,
hide 4G valueS that do not change production --------*/
qFormDoOut: procedure expose m.
parse arg newOld, xI, yI
zI = xI
if zI == '' then
zI = yI
else if yI \== '' & m.xI.cat \== m.yI.cat then do
if wordPos(m.xI.cat, 'o oq') > 0 ,
& wordPos(m.yI.cat, 'o oq') > 0 then do
m.xI.cat = 'oq'
m.yI.cat = 'oq'
end
else
call err 'cat \==' qFormL0(xI) '\==' qFormL0(yI)
end
if m.zI.att \== 'piecesize' then
return 1
if m.zI.val \= 0 & m.zI.val \= 2097152 & m.zI.val \= 4194304 then
return 1
if newOld \== '=' then
return 0
if xI == '' | yI == '' then
return 1 /* one was default the other not NOT EQUAL| */
return m.xI.val \== m.yI.val
endProcedure formDoOut
qFormL0: procedure expose m.
parse arg i1
return 'ty='m.i1.ty 'qu='m.i1.qu 'nm='m.i1.nm 'cat='m.i1.cat ,
'att='m.i1.att 'val='m.i1.val 'std='m.i1.std 'pa='m.i1.pa
endProcedure qFormL0
qFormS1: procedure expose m.
parse arg m, newOld, i1
if m.i1.cat \== 's' then
call statsAdd m, newOLD, m.i1.cat, i1
call statsAdd m, newOld, newOld, i1
if abbrev(m.i1.pa, 'db:') then do
db = substr(word(m.i1.pa, 1), 4)
call spezialFall db, 'DB', db
t1 = m.i1.ty
if symbol('m.m.spezialType.t1') == VAR then
call spezialFall db, m.m.spezialType.t1, m.i1.qu, m.i1.nm
end
return ,
lefPad(lefPad(lefPad( ,
newOld || left(m.i1.ty, 2) left(m.i1.cat, 2) ,
strip(m.i1.qu)'.'strip(m.i1.nm), 47) ,
m.i1.val, 61) m.i1.std, 100) m.i1.pa
endProcedure qFormS1
qFormL1: procedure expose m.
parse arg m, newOld, nO, oO
if nO \== '' & oO \== '' then do
if newOld \== '=' then
call err 'newOld' newOld 'but both'
if m.nO.att \== m.oO.att then
call err 'newOld' newOld 'but att <>'
if m.nO.std \== m.oO.std then
call err 'newOld' newOld 'but std <>'
nVal = m.nO.val
oVal = m.oO.val
aO = nO
end
else if nO \== '' then do
nVal = m.nO.val
if newOld == '+' then
oVal = '---'
else if newOld == '=' then
parse var m.nO.std oVal ',' .
else
call err 'newOld' newOld 'but new not null'
aO = nO
end
else if oO \== '' then do
if newOld == '-' then
nVal = '---'
else if newOld == '=' then
parse var m.oO.std nVal ',' .
else
call err 'newOld' newOld 'but old not null'
oVal = m.oO.val
aO = oO
end
else
call err 'both null'
call statsAdd m, newOld, m.aO.cat, aO, nVal, oVal
vNm = ''
if m.aO.ty == 'c' then
vNm = m.aO.nm
return ,
lefPad(lefPad(lefPad(lefPad(lefPad( ,
left(' 'm.aO.ty, 3) left(m.aO.cat, 4) vNm, 20) ,
m.aO.att, 33) ,
nVal, 47) m.aO.std, 61) oVal, 100) m.aO.pa
endProcedure qFormL1
qFormLine: procedure expose m.
parse arg i1
return ,
lefPad(lefPad(lefPad(lefPad(lefPad(lefPad(,
left(m.i1.ty, 2) m.i1.qu, 11) m.i1.nm, 28),
m.i1.cat, 32) m.i1.att, 45) ,
m.i1.val, 59) m.i1.std, 73)
endProcedure qFormLine
statsAdd: procedure expose m.
parse arg m, newOld, c1, i1, xVal, yVal
if wordPos(c1, m.m.stats) < 1 then do
m.m.stats = m.m.stats c1
m.m.stats.c1 = 0
end
m.m.stats.c1 = m.m.stats.c1 + 1
if m.m.stats.c1 <= 3 then do
t = newOld || left(m.i1.ty, 2) left(m.i1.cat, 2),
m.i1.qu'.'m.i1.nm
if abbrev(m.i1.cat, 's') then
t = t 'rows='m.i1.val 'size='m.i1.std
else
t = t m.i1.att xVal'<'m.i1.std'>'yVal
call mPut m'.STATS.'c1'.'m.m.stats.c1, t
end
return
endProcedure statsAdd
statsSum: procedure expose m.
parse arg m, lst
ly = words(lst)
lst = lst m.m.stats
done = ''
m1 = ''
m2 = ''
ox = 0
do lx=1 to words(lst)
c1 = word(lst, lx)
if wordPos(c1, done) > 0 | wordPos(c1, m.m.stats) < 1 then
iterate
m1 = m1',' m.m.stats.c1'*'c1
done = done c1
do cx=1 to min(3, m.m.stats.c1) while lx<=ly & ox < 5
ox = ox + 1
m2 = m2'\n||' m.m.stats.c1.cx
end
end
return '||' substr(m1, 3)m2 || m.spezialOut
endProcedure statsSum
spezialFall: procedure expose m.
parse arg db, ty, qu, nm
if 1 == m.spezialDone.db.ty.qu.nm then
return
m.spezialDone.db.ty.qu.nm = 1
st = spezialFall'.'db
if symbol('m.st.0') <> 'VAR' then do
dsn = m.spezialLib"("db")"
sy = sysDsn("'"dsn"'")
if sy <> 'OK' then do
m.st.0 = 0
if sy <> 'MEMBER NOT FOUND' then
call err 'spezialFall library' dsn':' sy
end
else do
call readDsn dsn, 'M.'st'.'
end
end
if m.st.0 < 1 then
return
offs = 999
found = 0
do sx = 1 to m.st.0
fx = verify(m.st.sx, ' ')
if fx = 0 | fx > 72 then
iterate
if substr(m.st.sx, fx, 1) = '*' then
iterate
if fx <= offs then do
offs = fx
m.st.sx = left(m.st.sx, 72)
n = ''
if pos('.', m.st.sx) > 0 then
parse upper var m.st.sx t q '.' n .
else
parse upper var m.st.sx t q .
if t \== ty | m.spezialDonL.db.sx == 1 then
iterate
if t == 'DB' then
found = match(strip(db), strip(q))
else if wordPos(t, 'TS TB IX') > 0 then
found = match(strip(qu)'.'strip(nm),
, strip(q)'.'strip(n))
else
call err 'spezialFall' db 'line' sx 'ungueltig:' m.st.sx
if found then
m.spezialDonL.db.sx = 1
end
if found then
m.spezialOut = m.spezialOut'\n|-' left(m.st.sx, 78)
end
return
/* copy ws2 ??????????????????????????? */
/* rexx ****************************************************************
wsh: walter's rexx shell version 2.2
interfaces:
edit macro: for adhoc evaluation or programming
either block selection: q or qq and b or a
oder mit Directives ($#...) im Text
wsh i: tso interpreter
batch: input in dd wsh
docu: http://chsa4212/host/db2wiki/pmwiki.php?n=Main.Wsh
syntax: http://chsa4212/host/db2wiki/pmwiki.php?n=Main.WshSyn
--- history ------------------------------------------------------------
6. 2.13 w.keller csmCopy aendert mgmtClas für neue lokale Files
********/ /*** end of help ********************************************
23. 1.13 w.keller sqlErrHandler sowie sqlRx und sql
11. 6.12 w.keller sqlUpdComLoop
23. 5.12 w.keller fix sqlStmt: drop accepts -204
31. 3.12 w.keller sql Query interface incl. sql über CSM
10. 2.12 w.keller div catTb* und eLong
2. 6.11 w.keller sql error with current location and dsnTiar
2. 5.11 w.keller sqlStmt etc..
16. 3.11 w.keller basic new r '' ==> r m.class.classO
28. 2.11 w.keller compFile by exprBlock, fix $@do forever, |
7. 2.11 w.keller cleanup block / with sqlPush....
2. 2.11 w.keller simplified syntax, ast for blocks, ? for help
19. 6.10 w.keller open/close stacked mit jUsers, framed eliminiert
19. 5.10 w.keller class wird direkt erzeugt ohne temporary
18. 4.10 w.keller scanUtilInto ==> testCase noch einbauen
17. 4.10 w.keller oMutate in fileTsoList eingebaut
14. 1.10 w.keller batch interface no longer dies on openIfNotYet
CSM.RZ1.P0.EXEC korrigiert
***********************************************************************/
/*--- main code wsh --------------------------------------------------*/
call errReset 'hI'
call pipeIni /* without tstClass2 gives different result */
parse arg spec
isEdit = 0
if spec = '' & m.err.ispf then do /* z/OS edit macro */
isEdit = adrEdit('macro (spec) NOPROCESS', '*') == 0
if isEdit then do
call adrEdit '(d) = dataset'
call adrEdit '(m) = member'
m.editDsn = dsnSetMbr(d, m)
if spec = '' & m.editDsn = 'A540769.WK.REXX(WSH)' then
spec = 't'
end
end
if spec = '?' then
return help()
call utIni
f1 = spec
rest = ''
if pos(verify(f1, m.ut.alfNum), '1 2') > 0 then
parse var spec f1 2 rest
u1 = translate(f1)
if u1 = 'T' then
return wshTst(rest)
else if u1 = 'I' then
return wshInter(rest)
else if u1 = 'S' then
spec = '$#@ call sqlStmtsOpt $.$sqlIn,' quote(rest) '$#sqlIn#='
call wshIni
inp = ''
out = ''
if m.err.os == 'TSO' then do
if isEdit then do
parse value wshEditBegin(spec) with inp out
end
else if sysvar('sysEnv') = 'FORE' then do
end
else do
inp = s2o('-wsh')
useOut = listDsi('OUT FILE')
if \ (useOut = 16 & sysReason = 2) then
out = s2o('-out')
end
end
else if m.err.os == 'LINUX' then do
inp = s2o('&in')
out = s2o('&out')
end
else
call err 'implement wsh for os' m.err.os
m.wshInfo = 'compile'
call compRun spec, inp, out, wshInfo
if isEdit then
call wshEditEnd
exit 0
/*--- actual test case ----------------------------------------------*/
wshIni: procedure expose m.
call compIni
call sqlOIni
call scanWinIni
return
endProcedure wshIni
tstRts: procedure expose m.
call wshIni
call sqlConnect dbaf
call sqlQuery 3, "select * from sysibm.sysTableSpaceSTats" ,
"where dbName = 'MF01A1A' and name = 'A150A'",
"order by partition asc"
do while sqlFetch(3, rr)
say f('@.DBNAME%-8C.@NAME%-8C @PARTITION %4C' ,rr)
end
call sqlDisconnect
endProcedure tstRts
wshTst: procedure expose m.
parse arg rest
if rest = '' then do /* default */
call sqlConnect DBAF
call catColCom 'cmnBatch', 'DSN_PGROUP_TABLE',
, 'cmnBatch', 'DSN_PGROUP_TABLE_new'
call sqlDisConnect DBAF
return 0
end
c = ''
do wx=1 to words(rest)
c = c 'call tst'word(rest, wx)';'
end
if wx > 2 then
c = c 'call tstTotal;'
say 'wsh interpreting' c
interpret c
return 0
endProcedure wshTst
/*--- interpret user input: rexx, expr, data or shell ---------------*/
wshInter: procedure expose m.
parse arg inp
call wshIni
inp = strip(inp)
mode = '*'
do forever
if pos(left(inp, 1), '/;:*@.-=') > 0 then
parse var inp mode 2 inp
if mode == '/' then
return 0
mode = translate(mode, ';', ':')
if inp <> '' then do
say 'as' mode 'interpreting' inp
if mode = ';' then
interpret inp
else if mode = '*' then
interpret 'say' inp
else do
call errReset 'h', 'say "******* intercepting error";',
'call errSay ggTxt; return "";'
call oRun compile(comp(jBuf(inp)), mode)
call errReset 'h'
end
end
say 'enter' mode 'expression, / for end, ; or * for Rexx' ,
'@ . - = for wsh'
parse pull inp
end
endProcedure wshInter
wshEditBegin: procedure expose m.
parse arg spec
dst = ''
li = ''
m.wsh.editHdr = 0
pc = adrEdit("process dest range Q", 0 4 8 12 16)
if pc = 16 then
call err 'bad range must be q'
if pc = 0 | pc = 8 then do
call adrEdit "(rFi) = lineNum .zFrange"
call adrEdit "(rLa) = lineNum .zLrange"
/* say 'range' rFi '-' rLa */
end
else do
rFi = ''
/* say 'no range' */
end
if pc = 0 | pc = 4 then do
call adrEdit "(dst) = lineNum .zDest"
/* say 'dest' dst */
dst = dst + 1
end
else do
/* say 'no dest' */
if adrEdit("find first '$#out' 1", 4) = 0 then do
call adrEdit "(dst) = cursor"
/* say '$#out' dst */
call adrEdit "(li) = line" dst
m.wsh.editHdr = 1
end
end
m.wsh.editDst = dst
m.wsh.editOut = ''
if dst \== '' then do
m.wsh.editOut = jOpen(jBufTxt(), '>')
if m.wsh.editHdr then
call jWrite m.wsh.editOut, left(li, 50) date('s') time()
end
if rFi == '' then do
call adrEdit "(zLa) = lineNum .zl"
if adrEdit("find first '$#' 1", 4) = 0 then do
call adrEdit "(rFi) = cursor"
call adrEdit "(li) = line" rFi
if abbrev(li, '$#out') | abbrev(li, '$#end') then
rFi = 1
if rFi < dst & dst \== '' then
rLa = dst-1
else
rLa = zLa
end
else do
rFi = 1
rLa = zLa
end
end
/* say 'range' c1 'rc' pc':' rFi '-' rLa 'after' dst */
m.wsh.editIn = jOpen(jBuf(), m.j.cWri)
do lx=rFi to rLa
call adrEdit "(li) = line" lx
call jWrite m.wsh.editIn, li
end
call errReset 'h',
, 'return wshEditErrH(ggTxt, ' rFi',' rLa')'
return jClose(m.wsh.editIn) m.wsh.editOut
endProcedure wshEditBegin
wshEditEnd: procedure expose m.
call errReset 'h'
if m.wsh.editOut == '' then
return 0
call jClose(m.wsh.editOut)
lab = wshEditInsLinSt(m.wsh.editDst, 0, , m.wsh.editOut'.BUF')
call wshEditLocate max(1, m.wsh.editDst-7)
return 1
endProcedure wshEditEnd
wshEditLocate: procedure
parse arg ln
call adrEdit '(la) = linenum .zl'
call adrEdit 'locate ' max(1, min(ln, la - 37))
return
endProcedure wshEditLocate
wshEditErrH: procedure expose m.
parse arg ggTxt, rFi, rLa
call errCleanup
call errReset 'h'
call errMsg ' }'ggTxt
call mMove err, 1, 2
isScan = 0
if wordPos("pos", m.err.4) > 0 ,
& pos(" in line ", m.err.4) > 0 then do
parse var m.err.4 "pos " pos . " in line " lin":"
if pos = '' then do
parse var m.err.4 " line " lin":"
pos = 0
end
isScan = lin \== ''
end
m.err.1 = '***' m.wshInfo 'error ***'
if m.wshInfo=='compile' & isScan then do
do sx=1 to m.err.0
call out m.err.sx
end
lab = rFi + lin
if pos \= '' then
lab = wshEditInsLin(lab, 'msgline', right('*',pos))
lab = wshEditInsLinSt((rFi+lin),0, 'msgline', err)
call wshEditLocate rFi+lin-25
end
else do
if m.wsh.editOut \== '' then do
do sx=1 to m.err.0
call jWrite m.wsh.editOut, m.err.sx
end
lab = wshEditInsLinSt(m.wsh.editDst, 0, ,
, m.wsh.editOut'.BUF')
call wshEditInsLinSt m.wsh.editDst, m.wsh.editHdr,
, msgline, err
call wshEditLocate max(1, m.wsh.editDst-7)
end
else do
do sx=1 to m.err.0
say m.err.sx
end
end
end
call errCleanup
exit
endSubroutine wshEditErrH
wshEditInsLinCmd: procedure
parse arg wh
if dataType(wh, 'n') then do
if adrEdit("label" wh "= .a", 0 8 12) \= 12 then
return 'line_before .a ='
else
return 'line_after .zl ='
end
else if left(wh, 1) == '.' then
return 'line_before' wh '='
else
return wh
endProcedure wshEditInsLinCmd
wshEditInsLin: procedure
parse arg wh, type
cmd = wshEditInsLinCmd(wh)
do ax=3 to arg()
li = strip(arg(ax), 't')
if li == '' then
iterate
if translate(type) = 'MSGLINE' then do while length(li) > 72
sx = lastPos(' ', li, 72)
if sx < 10 then
sx = 72
one = left(li, sx)
li = ' 'strip(substr(li, sx))
call adrEdit cmd type "(one)"
end
call adrEdit cmd type "(li)", 0 4
end
return cmd
endProcedure wshEditInsLin
wshEditInsLinSt: procedure expose m.
parse arg wh, pl, type, st
if wh == '' then do
do ox=1 to m.st.0
say m.st.ox
end
return ''
end
wh = wh + pl
cmd = wshEditInsLinCmd(wh)
do ax=1 to m.st.0
call wshEditInsLin cmd, type, m.st.ax
end
return cmd
endProcedure wshEditInsLinSt
/*** end wsh, begin all copies ****************************************/
/* copy tstAll begin *************************************************/
/*----------- neu, noch versorgen |||||-------------------------------*/
tstWiki:
call mapReset docs, 'k'
call addFiles docs, 'n', '/media/wkData/literature/notes'
call addFiles docs, 'd', '/media/wkData/literature/docs'
in = jOpen(file('wiki.old'), '<')
out = jOpen(file('wiki.new'), '>')
abc = '(:abc: %l%'
do cx=1 to length(m.ut.alfLC)
c1 = substr(m.ut.alfLC, cx, 1)
abc = abc '¢¢#'c1 '|' c1'!!'
end
call jWrite out, abc ':)'
inTxt = 0
li = m.i
do lx=1 while jRead(in, i)
if 0 then
say length(m.i) m.i
if m.i = '' then
iterate
li = m.i
do forever
bx = pos('¢=', li)
if bx < 1 then
leave
ex = pos('=!', li)
if ex <= bx then
call err '=! before ¢= in' lx li
li = left(li, bx-1)substr(li,bx+2, ex-bx-2)substr(li,ex+2)
end
li = strip(li)
if abbrev(li, '|') then do
w = word(substr(li, 2), 1)
call jWrite out, '¢¢#'w'!! {$:abc}'
call jWrite out, '|||' substr(li, 2)
inTxt=1
iterate
end
if \ inTxt then do
call jWrite out, li
iterate
end
if \ (abbrev(li, '->') | abbrev(li, '#') ,
| abbrev(li, '¢')) then do
call jWrite out, '-<' li
iterate
end
cx = 1
if substr(li, cx, 2) == '->' then
cx = verify(li, ' ', 'n', cx+2)
hasCross = substr(li, cx, 1) == '#'
if hasCross then
cx = verify(li, ' ', 'n', cx+1)
ex = verify(li, '!:\, ', 'm', cx)
ex = ex - (substr(li, ex, 1) \== '!')
hasBr = substr(li, cx, 1) == '¢'
if \ hasBr then
w = substr(li, cx, ex+1-cx)
else if substr(li, ex, 1) == '!' then
w = substr(li, cx+1, ex-1-cx)
else
call err 'br not closed' substr(w, cx+1, ex-1-cx) 'in' lx li
hasPdf = right(w, 4) == '.pdf'
if hasPdf then
w = left(w, length(w)-4)
if verify(w, '#?', 'm') > 0 then do
w = translate(w, '__', '#?')
say '*** changing to' w 'in' lx li
end
o = '-< {def+'w'}'
o = '-< ¢¢'w'!!'
k = translate(w)
if k.k == 1 then
say '*** doppelter key' k 'in:' lx left(li,80)
k.k = 1
dT = ''
if mapHasKey(docs, k) then do
parse value mapGet(docs, k) with dT dC dN
call mapPut docs, k, dT (dC+1) dN
do tx=1 to length(dT)
t1 = substr(dT, tx, 1)
o = o '¢¢Lit'translate(t1)':'word(dN, tx) '|' t1 '!!'
end
end
qSeq = 'nd'
qq = left(qSeq, 1)
qx = 0
do forever
qx = pos('@'qq, li, qx+1)
if qx < 1 then do
qq = substr(qSeq, 1 + pos(qq, qSeq), 1)
qx=0
if qq = '' then
leave
else
iterate
end
if pos(qq, dT) < 1 then do
say '*** @'qq 'document not found:' lx li
iterate
end
do qb = qx-1 by -1 while substr(li, qb, 1) == ' '
end
do qe = qx+2 by 1 while substr(li, qe, 1) == ' '
end
if substr(li, qb, 1) == '.' & substr(li, qe, 1) == '.' then
li = left(li, qb)substr(li, qe+1)
else
li = left(li, qb) substr(li, qe)
end
o = o':' strip(substr(li, ex+1+(substr(li,ex+1,1)==':')))
if 0 then say left(li, 30) '==>' left(o, 30)
call jWrite out, o
end
dk = mapKeys(docs)
do dx=1 to m.dk.0
parse value mapGet(docs, m.dk.dx) with dT dC dN
if dC < 1 then
say '*** document not used:' dT dC dn
end
call jClose in
call jClose out
return
endProcedure tstWiki
addFiles: procedure expose m.
parse arg m, ty, file
fl = jOpen(fileList(file(file)), '<')
do while jRead(fl, fi1)
nm = substr(m.fi1, lastPos('/', m.fi1)+1)
k = translate(left(nm, pos('.', nm)-1))
if \ mapHasKey(m, k) then do
call mapAdd m, k, ty 0 nm
end
else do
parse value mapGet(m, k) with dT dC dN
call mapPut m, k, dT || ty 0 dN nm
end
end
call jClose fl
return
endProcedure addFiles
tstAll: procedure expose m.
say 'tstAll ws2 25.2.13...............'
call tstBase
call tstComp
call tstDiv
if m.err.os = 'TSO' then
call tstZos
call tstTut0
return 0
endProcedure tstAll
/* copx tstZos begin **************************************************/
tstZOs:
call tstTime
call sqlIni
call tstSql
call tstSqlC
call tstSqlCSV
call tstSqlQ
call tstSqlUpdComLoop
call tstSqlB
call tstSqlStmt
call tstSqlStmts
call tstSqlO1
call tstSqlO2
call tstSqls1
call tstSqlO
call tstSqlFTab
call tstTotal
return
endProcedure tstZOs
tstWshBatch:
call adrTso 'alloc dd(WSH) shr dsn(WK.TEXT(WSHBATCH))'
call wshBatch
return adrTso('free dd(WSH)')
tstLmdTiming:
parse arg lev
say timing() lev
call lmdBegin abc, lev
c = 0
do while lmdNext(abc, st.)
c = c + st.0
end
call lmdEnd abc
say timing() lev 'with group - without reading' c
call adrIsp 'lmdinit listid(lmdId) level('lev')'
do c=0 while adrIsp('lmdlist listid(&lmdId) dataset(abc)', 8) = 0
end
call adrIsp 'lmdfree listid(&lmdId)'
say timing() lev 'with list' c
return
endProcedure lmdTiming
tstCsi: procedure expose m.
if 0 then do
call lmd 'A540769.*K'
call tstCsiCla 'A540769.WK.REXX'
call tstCsiCla 'A540769.AAA.DATASETS'
call tstCsiCla 'A540769.RRR.DATASETS'
end
if 0 then do
call tstCsiOpNx 'A540769.WK.*E*'
call tstCsiOpNx 'A540769.AAA.DATASETS'
call tstCsiOpNx 'A540769.RRR.DATASETS'
end
if 1 then do
call tstCsiNxCl 'A540769.WK.**'
call tstCsiNxCl 'DBTF.M*.**'
call tstCsiNxCl 'DBTF.BE*.**'
end
return
tstCsi: procedure expose m.
/* call lmd 'A540769.*K' */
call tstCsi1 'A540769.WK.REXX'
call tstCsi1 'A540769.AAA.DATASETS'
call tstCsi1 'A540769.RRR.DATASETS'
return
tstCsiCla:
parse arg ds
say ds '-->' csiCla(ds)
return
tstCsiOpNx: procedure expose m.
parse arg ds
m = 'NUE123'
s = 'res89'
flds = 'devtyp volser mgmtclas comudsiz NOBYTTRK UDATASIZ HARBA'
say 'csiOpen' ds
call csiOpen m, ds, flds
do while csiNext(m, s)
say m.s 'dev' c2x(m.s.devTyp) ,
'vol' m.s.volSer 'cla' m.s.mgmtclas,
'comuDsiz' m.s.comuDsiz 'noBytTrk' m.s.noBytTrk,
'udatasiz' c2x(m.s.udatasiz) ,
'harba' c2x(m.s.harba)
end
return
tstCsiNxCl: procedure expose m.
parse arg ds
m = 'ABC123'
s = 'efg89'
flds = 'devtyp volser mgmtclas'
say 'csiOpen' ds
call csiOpen m, ds, flds
say timing() 'begin'
do i=1 while csiNext(m, s)
nn = csiArcTape(m.s.volser, m.s.mgmtClas, m.s.devtyp, m.s)
/* oo = csiCla(strip(m.s))
if oo <> nn then
say nn '<>' oo m.s
*/ if i // 1000 = 0 then
say timing() i nn m.s
end
say timing() (i-1) nn m.s
return
endProcedure tstCsiNxCl
listCatClass: procedure expose m.
parse upper arg dsn
call outtrap x., '*'
call adrTso "listcat volume entry('"dsn"')", 4
rt = rc
call outtrap off
/* say 'listct rc =' rt 'lines' x.0 */
cl = ''
vo = ''
if word(x.1, 3) \== dsn then
call out 'err ??? for dsn' dsn 'bad first line' x.1
else if pos('NOT FOUND', x.1) > 0 then
return 'notFound'
else if word(x.1, 1)\== 'NONVSAM' then
call out 'err ??? for dsn' dsn 'bad first line' x.1
do x=2 to x.0 while vo = '' & left(x.x, 1) = ' '
/* say x.x */
p = pos('MANAGEMENTCLASS-', x.x)
if p > 0 then
vo = strip(word(substr(x.x, p+16), 1), 'l', '-')
p = pos('VOLSER--', x.x)
if p > 0 then
vo = strip(word(substr(x.x, p+6), 1), 'l', '-')
p = pos('DEVCLASS--', x.x)
dt = strip(word(substr(x.x, p+8), 1), 'l', '-')
end
/* say 'lc' cl 'vo' vo 'dt' dt 'dsn' dsn */
if vo = '' then
call out '??? err no volume for dsn' dsn
else if vo = 'ARCIVE' then
res = 'arcive'
else if cl = '' then
res = 'tape'
else
res = cl
if abbrev(res, 'ar') \= abbrev(dt, "X'0") ,
| abbrev(res, 'ta') \= abbrev(dt, "X'7") ,
| (left(res, 1) >= 'A') \= abbrev(dt, "X'3") then
call out 'err ??? mismatch cl' cl 'vo' vo 'dt' dt 'dsn' dsn
return res
endProcedure listCatClass
/* copx tstZos end **************************************************/
/* copx tstDiv begin **************************************************/
tstDiv:
call tstSorQ
call tstSort
call tstMatch
call tstTotal
return
endProcedure tstDiv
tstSorQ: procedure expose m. /* wkTst??? remove once upon a time */
/*
$=/tstSorQ/
### start tst tstSorQ #############################################
sort 29 c ACHT DREI DREIZEHN EINS ELF FUENF M.I.25 M.I.26 M.I.27 M+
..I.29 NEUN SECHS SIEBEN VIER VIERZEHN ZEHN ZWEI ZWOELF 0 1 1 1 2 2+
. 3 3 4 4
sort 22 c ACHT DREIZEHN ELF M.I.25 M.I.26 M.I.27 M.I.29 NEUN VIERZ+
EHN ZEHN ZWOELF 0 1 1 1 2 2 3 3 4 4
sort 15 c M.I.25 M.I.26 M.I.27 M.I.29 0 1 1 1 2 2 3 3 4 4
sort 8 c M.I.25 M.I.26 M.I.27 M.I.29 0 1 1
sort 1 M.I.29
$/tstSorQ/ */
/*
$=/tstSorQAscii/
### start tst tstSorQAscii ########################################
sort 29 0 1 1 1 2 2 3 3 4 4 ACHT DREI DREIZEHN EINS ELF FUENF M.I.+
25 M.I.26 M.I.27 M.I.29 NEUN SECHS SIEBEN VIER VIERZEHN ZEHN ZWEI Z+
WOELF c
sort 22 0 1 1 1 2 2 3 3 4 4 ACHT DREIZEHN ELF M.I.25 M.I.26 M.I.27+
. M.I.29 NEUN VIERZEHN ZEHN ZWOELF c
sort 15 0 1 1 1 2 2 3 3 4 4 M.I.25 M.I.26 M.I.27 M.I.29 c
sort 8 0 1 1 M.I.25 M.I.26 M.I.27 M.I.29 c
sort 1 M.I.29
$/tstSorQAscii/ */
if m.err.os == 'LINUX' then
call tst t, "tstSorQAscii"
else
call tst t, "tstSorQ"
call mAdd mCut(i, 0), eins, zwei, drei, vier, fuenf, sechs,
,sieben, acht, neun, zehn, elf, zwoelf, dreizehn, vierzehn
call mAdd i, 1, 2, 3, 4, 4, 3, 2, 1, 0, 1,
, 'M.I.25', 'M.I.26', 'M.I.27', 'c', 'M.I.29'
do yy = m.i.0 by -1 to 1
do x = 0 to yy
m.i.0 = x
call sort i, o
m = ''
la = ''
if x <> m.o.0 then
call err 'size mismatch' x '<>' m.o.0
do y=1 to m.o.0
m = m m.o.y
if \ (la << m.o.y) then
call err 'sort mismatch' yy x y '\' la '<<' m.o.y
end
end
if yy // 7 = 1 then
call tstOut t, 'sort' yy m
do x = 2 to yy
x1 = x-1
m.i.x1 = m.i.x
end
end
call tstEnd t
return
endProcedure tstSorQ
tstSort: procedure expose m.
call tstSortComp
call tstSortComp '<<='
call tstSortComp 'm.aLe <<= m.aRi'
call tstSortComp 'if 1 then cmp = m.aLe <<= m.aRi; else call err sd'
return
endProcedure tstSort
tstSortComp: procedure expose m.
parse arg cmp
/*
$=/tstSort/
### start tst tstSort #############################################
sort 29 c ACHT DREI DREIZEHN EINS ELF FUENF M.I.25 M.I.26 M.I.27 M+
..I.29 NEUN SECHS SIEBEN VIER VIERZEHN ZEHN ZWEI ZWOELF 0 1 1 1 2 2+
. 3 3 4 4
sort 22 c ACHT DREIZEHN ELF M.I.25 M.I.26 M.I.27 M.I.29 NEUN VIERZ+
EHN ZEHN ZWOELF 0 1 1 1 2 2 3 3 4 4
sort 15 c M.I.25 M.I.26 M.I.27 M.I.29 0 1 1 1 2 2 3 3 4 4
sort 8 c M.I.25 M.I.26 M.I.27 M.I.29 0 1 1
sort 1 M.I.29
$/tstSort/ */
/*
$=/tstSortAscii/
### start tst tstSortAscii ########################################
sort 29 0 1 1 1 2 2 3 3 4 4 ACHT DREI DREIZEHN EINS ELF FUENF M.I.+
25 M.I.26 M.I.27 M.I.29 NEUN SECHS SIEBEN VIER VIERZEHN ZEHN ZWEI Z+
WOELF c
sort 22 0 1 1 1 2 2 3 3 4 4 ACHT DREIZEHN ELF M.I.25 M.I.26 M.I.27+
. M.I.29 NEUN VIERZEHN ZEHN ZWOELF c
sort 15 0 1 1 1 2 2 3 3 4 4 M.I.25 M.I.26 M.I.27 M.I.29 c
sort 8 0 1 1 M.I.25 M.I.26 M.I.27 M.I.29 c
sort 1 M.I.29
$/tstSortAscii/ */
say '### start with comparator' cmp '###'
if m.err.os == 'LINUX' then
call tst t, "tstSortAscii"
else
call tst t, "tstSort"
call mAdd mCut(i, 0), eins, zwei, drei, vier, fuenf, sechs,
,sieben, acht, neun, zehn, elf, zwoelf, dreizehn, vierzehn
call mAdd i, 1, 2, 3, 4, 4, 3, 2, 1, 0, 1,
, 'M.I.25', 'M.I.26', 'M.I.27', 'c', 'M.I.29'
do yy = m.i.0 by -1 to 1
do x = 0 to yy
m.i.0 = x
call sort i, o, cmp
m = ''
la = ''
if x <> m.o.0 then
call err 'size mismatch' x '<>' m.o.0
do y=1 to m.o.0
m = m m.o.y
if \ (la << m.o.y) then
call err 'sort mismatch' yy x y '\' la '<<' m.o.y
end
end
if yy // 7 = 1 then
call tstOut t, 'sort' yy m
do x = 2 to yy
x1 = x-1
m.i.x1 = m.i.x
end
end
call tstEnd t
return
endProcedure tstSort
tstMatch: procedure expose m.
/*
$=/tstMatch/
### start tst tstMatch ############################################
match(eins, e?n*) 1 1 2,i,s trans(E?N*) EiNs
match(eins, eins) 1 1 0 trans(EINS) EINS
match(e1nss, e?n*) 1 1 2,1,ss trans(?*) 1ss
match(eiinss, e?n*) 0 0 -9
match(einss, e?n *) 0 0 -9
match(ein s, e?n *) 1 1 2,i,s trans(E?N *) EiN s
match(ein abss , ?i*b*) 1 1 3,e,n a,ss trans(?I*B*) eIn aBss .
match(ein abss wie gehtsssxdirx und auch , ) 0 0 -9
match(ies000, *000) 1 1 1,ies trans(*000) ies000
match(xx0x0000, *000) 1 1 1,xx0x0 trans(*000) xx0x0000
match(000x00000xx, 000*) 1 1 1,x00000xx trans(000*) 000x00000xx
match(000xx, *0*) 1 1 2,00,xx trans(ab*cd*ef) ab00cdxxef
$/tstMatch/ */
call tst t, "tstMatch"
call tstOut t, matchTest1('eins', 'e?n*' )
call tstOut t, matchTest1('eins', 'eins' )
call tstOut t, matchTest1('e1nss', 'e?n*', '?*' )
call tstOut t, matchTest1('eiinss', 'e?n*' )
call tstOut t, matchTest1('einss', 'e?n *' )
call tstOut t, matchTest1('ein s', 'e?n *' )
call tstOut t, matchTest1('ein abss ', '?i*b*' )
call tstOut t, matchTest1('ein abss wie gehtsssxdirx und auch ' )
call tstOut t, matchTest1('ies000', '*000' )
call tstOut t, matchTest1('xx0x0000', '*000' )
call tstOut t, matchTest1('000x00000xx', '000*' )
call tstOut t, matchTest1('000xx', '*0*', 'ab*cd*ef' )
call tstEnd t
return
matchTest1:
parse arg w, m, m2
r = 'match('w',' m')' match(w, m) match(w, m, vv) m.vv.0
do x=1 to m.vv.0
r = r','m.vv.x
end
if m2 = '' then
m2 = translate(m)
if m.vv.0 >= 0 then
r = r 'trans('m2')' matchTrans(m2, vv)
return r
endProcedure matchTest1
tstTime: procedure
/* Winterzeit dez 2011
$=/tstTime/
### start tst tstTime #############################################
Lrsn2Lzt(C5E963363741) 2010-05-01-12.34.55.789008
Achtung: output ist abhaengig von Winter/Sommerzeit und LeapSecs
timeZone 7200.00000 leapSecs 25.0000000
2jul(2011-03-31-14.35.01.234567) 11090
Lrsn2Gmt(C5E963363741) 2010-05-01-10.35.20.789008
Lrsn2Lzt(C5E963363741) 2010-05-01-12.34.55.789008
gmt2Lrsn(2011-03-31-14.35.01.234567) C78D87B86E38
lzt2Lrsn(2011-03-31-14.35.01.234567) C78D6CFDD13C
Lrsn2Gmt(gmt2Lrsn(2011-03-31-14.35.01.234567) 2011-03-31-14.35.01.2+
34560
gmt2Lrsn(Lrsn2Gmt(C5E963363741) C5E963363741
Lrsn2LZt(LZt2Lrsn(2011-03-31-14.35.01.234567) 2011-03-31-14.35.01.2+
34560
LZt2Stc(Lrsn2LZt(C5E963363741)( C5E963363741
$/tstTime/
*/
call jIni
call tst t, 'tstTime'
t1 = '2011-03-31-14.35.01.234567'
s1 = 'C5E963363741'
call out 'Lrsn2Lzt('s1')' timeLrsn2Lzt(s1)
call out ,
'Achtung: output ist abhaengig von Winter/Sommerzeit und LeapSecs'
call out 'timeZone' m.timeZone * m.timeStckUnit ,
'leapSecs' m.timeLeap * m.timeStckUnit
call timeReadCvt 1
call out '2jul('t1') ' time2jul(t1)
call out 'Lrsn2Gmt('s1')' timeLrsn2Gmt(s1)
call out 'Lrsn2Lzt('s1')' timeLrsn2Lzt(s1)
call out 'gmt2Lrsn('t1')' timeGmt2Lrsn(t1)
call out 'lzt2Lrsn('t1')' timeLzt2Lrsn(t1)
call out 'Lrsn2Gmt(gmt2Lrsn('t1')' timeLrsn2Gmt(timeGmt2Lrsn(t1))
call out 'gmt2Lrsn(Lrsn2Gmt('s1')' timeGmt2Lrsn(timeLrsn2Gmt(s1))
call out 'Lrsn2LZt(LZt2Lrsn('t1')' timeLrsn2LZt(timeLZt2Lrsn(t1))
call out 'LZt2Stc(Lrsn2LZt('s1')(' timeLZt2Lrsn(timeLrsn2LZt(s1))
call tstEnd t
return
endProcedure tstTime
/* copx tstDiv end **************************************************/
/* copx tstSql begin **************************************************/
tstSqlUtils: procedure expose m.
call sqlConnect 'DBAF'
id = 'A540769.dsnUtils'
rst = 'NO'
retcode = -9876
e = ''
z = 0
st = "TEMPLATE TCOPYD",
"DSN('&SSID..&JO..&US..P&PART(2)..D&DATE(3)..T&TIME.')",
"DATACLAS(NULL12) MGMTCLAS(COM#A011) STORCLAS(FAR$N)",
"SPACE (150,3750) TRK UNCNT 59;",
"listdef abc include tablespace DA540769.A002* partlevel;",
"listdef mf include tablespace MF01A1A.A110A partlevel;",
"copy list abc copyddn(tcopyd) shrlevel change;"
st = translate(st)
call sqlExec "call SYSPROC.DSNUTILS ( :id, :rst,",
":st,:retcode, :ANY" copies(',:e,:e,:z',12) ")"
call sqlExec ,
'ASSOCIATE LOCATOR (:RESULTS) WITH PROCEDURE SYSPROC.DSNUTILS'
say 'results' results
call sqlExec 'ALLOCATE C111 CURSOR FOR RESULT SET :RESULTS'
say 'allocated c111'
do while sqlExec('fetch c111 into :seq, :txt', 0 100) = 0
say 'sysPrint' seq strip(txt, 't')
end
call sqlExec 'close c111'
say 'closed'
call sqlDisconnect
exit
endProcedure tstSqlUtils
tstSqlStored: procedure expose m.
call sqlConnect 'DBAF'
rst = 'NO'
retcode = -9876
e = ''
z = 0
st = "abc"
call sqlExec "call SYSPROC.COMMAND ( :st, :rst)"
say 'after call st='st 'rst='rst
call sqlExec ,
'ASSOCIATE LOCATOR (:RESULTS) WITH PROCEDURE SYSPROC.COMMAND'
say 'results' results
call sqlExec 'ALLOCATE C111 CURSOR FOR RESULT SET :RESULTS'
say 'allocated c111'
do while sqlExec('fetch c111 into :seq, :txt', 0 100) = 0
say 'sysPrint' seq strip(txt, 't')
end
call sqlExec 'close c111'
say 'closed'
call sqlDisconnect
return
endProcedure tstSqlStored
tstSqlStoredWK: procedure expose m.
call sqlConnect 'DBAF'
/* st = "direct wkUtiSub"
rst = 'NO'
say 'before call st='st 'rst='rst
call sqlExec "call A540769.WKUTILSUB ( :st, :rst)"
say 'after call st='st 'rst='rst
*/ rst = 'NO'
retcode = -9876
e = ''
z = 0
prc = 'DB2UTIL.DB2UTIL'
st = "DA540769.A2*" /* DA540769.A1*" */
say "call" prc "("st", ...)"
call sqlExec "call" prc "(:st, :rst)"
say 'after call st='st 'rst='rst
call sqlExec ,
'ASSOCIATE LOCATOR (:RESULTS) WITH PROCEDURE' prc
/* say 'results' results */
call sqlExec 'ALLOCATE C111 CURSOR FOR RESULT SET :RESULTS'
say ''
say '***** utility output'
do while sqlExec('fetch c111 into :seq, :txt', 0 100) = 0
say 'sysPrint' seq strip(txt, 't')
end
call sqlExec 'close c111'
say '***** end output'
call sqlDisconnect
return 0
endProcedure tstSqlStoredWK
tstSqlStoredSQL1: procedure expose m.
call sqlConnect 'DBIA'
rst = 'NO'
retcode = -9876
e = ''
z = 0
st = "DA540769.A2* DA540769.A1*"
call sqlExec "call A540769.WKSQL1 ( :st, :rst)"
say 'after call st='st 'rst='rst
call sqlExec ,
'ASSOCIATE LOCATOR (:RESULTS) WITH PROCEDURE A540769.WKUTIL'
say 'results' results
call sqlExec 'ALLOCATE C111 CURSOR FOR RESULT SET :RESULTS'
say 'allocated c111'
do while sqlExec('fetch c111 into :seq, :txt', 0 100) = 0
say 'sysPrint' seq strip(txt, 't')
end
call sqlExec 'close c111'
say 'closed'
call sqlDisconnect
return
endProcedure tstSqlStoredSQL1
tstSqlTriggerTiming:
parse upper arg tb ni
m.noInsert = ni == 0
cnt = 200000
if tb = '' then
TB = 'GDB9998.TWK511TRI'
call sqlConnect dbaf
say timing() 'noInsert' m.noInsert 'tb' tb
call sql2St 49, '*', cc, 'select max(pri) MX from' tb
if m.cc.1.mx == m.sqlNull then
m.cc.1.mx = 0
von = m.cc.1.mx + 1
bis = m.cc.1.mx + cnt
say m.cc.0 'max' m.cc.1.mx 'von' von 'bis' bis 'count' cnt tb
if right(tb, 2) = 'A1' then do
call sqlPrepare 3, 'insert into' tb '(pri, short, long, par)' ,
'values (?, ?, ?, ?)'
do ax=von to bis
call sqlExecute 3, ax,
, ax 'wsh short', ax 'wsh long long long long long ',
, (ax-1) // 1000 + 1
end
end
else do
call sqlPrepare 3, 'insert into' tb '(pri, short, long)' ,
'values (?, ?, ?)'
do ax=von to bis
call sqlExecute 3, ax,
, ax 'wsh short', ax 'wsh long long long long long ',
, (ax-1) // 1000 + 1
end
end
/* call sqlLn 5,,, 'select * from' tb 'where pri >=' von */
call sqlExImm 'commit'
say timing()
call sqlDisconnect
return
endProcedure tstSqlTriggerTiming
tstSql: procedure expose m.
cx = 2
call sqlConnect
call jIni
/*
$=/tstSql/
### start tst tstSql ##############################################
*** err: SQLCODE = -204: A540769.SYSDUMMY IS AN UNDEFINED NAME
. e 1: sql = select * from sysdummy
. e 2: stmt = prepare s7 from :src
fetchA 1 ab= m.abcdef.123.AB abc ef= efg
fetchA 0 ab= m.abcdef.123.AB abc ef= efg
sqlVars :M.STST.A :M.STST.A.sqlInd, :M.STST.B :M.STST.B.sqlInd, :M.+
STST.C :M.STST.C.sqlInd
1 all from dummy1
a=a b=2 c=---
fetchBT 1 SYSTABLES
fetchBT 0 SYSTABLES
fetchBI 1 SYSINDEXES
fetchBI 0 SYSINDEXES
opAllCl 3
fetchC 1 SYSTABLES
fetchC 2 SYSTABLESPACE
fetchC 3 SYSTABLESPACESTATS
sql2St 3
fetchD 1 SYSIBM.SYSTABLES
fetchD 2 SYSIBM.SYSTABLESPACE
fetchD 3 SYSIBM.SYSTABLESPACESTATS
$/tstSql/ */
call tst t, "tstSql"
src = 'select * from sysdummy'
call sqlExec 'prepare s7 from :src'
call sqlPrepare cx, "select 'abc' , 'efg'",
'from sysibm.sysDummy1'
call sqlExec 'declare c'cx 'cursor for s'cx
call sqlOpen cx
a = 'abcdef'
b = 123
do i=1 to 2
call out 'fetchA' sqlFetchInto(cx, ':m.a.b.ab, :m.a.b.ef') ,
'ab= m.'a'.' || b'.'ab m.a.b.ab 'ef=' m.a.b.ef
end
call sqlClose cx
drop stst a b c m.stst.a m.stst.b m.stst.c
sv = sqlVars('M.STST', A B C , 1)
call out 'sqlVars' sv
call out sql2St(,
"select 'a' a, 2 b, case when 1=0 then 1 else null end c",
"from sysibm.sysDummy1",
, stst) 'all from dummy1'
call out 'a='m.stst.1.a 'b='m.stst.1.b 'c='m.stst.1.c
call sqlPreDeclare cx, "select name" ,
"from sysibm.sysTables" ,
"where creator = 'SYSIBM' and name = ?"
call sqlOpen cx, 'SYSTABLES'
call out 'fetchBT' sqlFetchInto(cx, ':NM') nm
call out 'fetchBT' sqlFetchInto(cx, ':NM') nm
call sqlClose cx
call sqlOpen cx, 'SYSINDEXES'
a = 'a b c'
b = 1234565687687234
call out 'fetchBI' sqlFetchInto(cx, ':NM') nm
call out 'fetchBI' sqlFetchInto(cx, ':NM') nm
call sqlClose cx
src = 'select name' ,
"from sysibm.sysTables" ,
"where creator = 'SYSIBM' and name like 'SYSTABLES%'",
"fetch first 3 rows only"
call sqlPreDeclare cx, src
st = 'wie geht'' s'
call out 'opAllCl' sqlOpAllCl(cx, st, ':M.ST.SX.NAME')
do x=1 to m.st.0
call out 'fetchC' x m.st.x.name
end
st = 'auch noch'
src = "select strip(creator) || '.' || strip(name) name" ,
substr(src,12)
call out 'sql2St' sql2St(src, st)
do x=1 to m.st.0
call out 'fetchD' x m.st.x.name
end
call tstEnd t
return
endProcedure tstSql
tstSqlCSV: procedure expose m.
/*
$=/tstSqlCSV/
### start tst tstSqlCSV ###########################################
NAME,CREATOR,MITCOM,MITQUO,MITNU,COL6
SYSTABLES,SYSIBM ,"a,b","a""b",1,8
SYSTABLESPACE,SYSIBM ,"a,b","a""b",---,8
SYSTABLESPACESTATS,SYSIBM,"a,b","a""b",---,6
$/tstSqlCSV/ */
call csvIni
call sqlConnect
call tst t, "tstSqlCSV"
r = csvWrt(sqlRdr("select name, creator, 'a,b' mitCom",
", 'a""b' mitQuo" ,
", case when name='SYSTABLES' then 1 else null end mitNu" ,
",length(creator)" ,
"from sysibm.sysTables" ,
"where creator = 'SYSIBM' and name like 'SYSTABLES%'",
"fetch first 3 rows only"))
call pipeWriteAll r
/* do rx=1 while jRead(r, vv)
call out rx'<'m.vv'>'
end
call jClose r
*/ call tstEnd t
return
endProcedure tstSqlCsv
ddlCheckExt: procedure expose m.
parse dbSys cr '.' view sels
call sqlConnect dbSys
do sx=1 to words(sels)
parse value word(sels,sx) ty ':' qu '.' nm '?' gp
if verify(qu, '_%', 'm') > 0 then
quPr = 'like' quote(qu, "'")
else
quPr = '=' quote(qu, "'")
end
call sqlDisconnect
return
endProcedure ddlCheckExt
tstSqlB: procedure expose m.
/*
$=/tstSqlB/
### start tst tstSqlB #############################################
#jIn 1# select strip(name) "tb", strip(creator) cr
#jIn 2# , case when name = 'SYSTABLES' then 1 else null end
#jIn 3# from sysibm.sysTables
#jIn 4# where creator = 'SYSIBM' and name like 'SYSTABLES%'
#jIn 5# .
#jIn 6# order by name
#jIn 7# fetch first 3 rows only
#jIn eof 8#
dest1.fet: SYSTABLES SYSIBM 1
dest2.fet: SYSTABLESPACE SYSIBM ---
dest3.fet: SYSTABLESPACESTATS SYSIBM ---
$/tstSqlB/ */
call tst t, "tstSqlB"
cx = 9
call sqlConnect
call jIni
call mAdd mCut(t'.IN', 0),
, 'select strip(name) "tb", strip(creator) cr' ,
, ", case when name = 'SYSTABLES' then 1 else null end" ,
, "from sysibm.sysTables" ,
, "where creator = 'SYSIBM' and name like 'SYSTABLES%'", ,
, "order by name",
, "fetch first 3 rows only"
call sqlPreOpen cx
do qx=1 while sqlFetch(cx, 'dest'qx'.fet')
dst = 'dest'qx'.fet'
call out dst':' m.dst.tb m.dst.cr m.dst.col3
drop m.dst.tb m.dst.cr m.dst.col3
end
call tstEnd t
return
endProcedure tstSqlB
tstSqlO: procedure expose m.
/*
$=/tstSqlO/
### start tst tstSqlO #############################################
*** err: SQLCODE = -204: A540769.SYSDUMMY IS AN UNDEFINED NAME
. e 1: sql = select * from sysdummy
. e 2: stmt = prepare s7 from :src
REQD=Y col=123 case=--- .sqlInd:-1 col5=anonym geburri=1956-04-01+
-06.00.00.000000
tstR: @tstWriteoV2 isA :SQL???class
tstR: .COL1 = erstens
tstR: .COL2 = zweitens
tstR: @tstWriteoV3 isA :TstSqlO
tstR: .FEINS = erstens
tstR: .FZWEI = zweitens
$/tstSqlO/
*/
call sqlConnect
call sqlStmt 'set current schema = A540769';
call tst t, "tstSqlO"
src = 'select * from sysdummy'
call sqlExec 'prepare s7 from :src'
r = sqlRdr( ,
"select d.*, 123, timestamp('01.04.1956','06:00:00')" ,
'"geburri walter",',
'case when 1=0 then 1 else null end caseNull,',
"'anonym'" ,
'from sysibm.sysdummy1 d')
call jOpen r, '<'
do while assNN('o', jReadO(r))
call out 'REQD='m.o.IBMREQD 'col='m.o.col2,
'case='m.o.CASENULL '.sqlInd:'m.o.caseNull.sqlInd,
'col5='m.o.col5,
'geburri='m.o.GEBURRI
end
call jClose r
call classNew 'n? TstSqlO u f FEINS v, f FZWEI v'
sq2 = "select 'erstens', 'zweitens' from sysibm.sysDummy1"
call pipe '+N'
call sqlSel sq2
call pipe 'P|'
o1 = inO()
cn = className(objClass(o1))
if abbrev(cn, 'SQL') then
call mAdd t.trans, cn 'SQL???class'
call outO o1
call pipeWriteNow
call pipe '-'
call sqlSel sq2, 'TstSqlO'
call tstEnd t
return
endProcedure tstSqlO
tstSqlFTab: procedure expose m.
/*
$=/tstSqlFTab/
### start tst tstSqlFTab ##########################################
UPDATESTATSTIME----------------NACTIVE------NPAGES-XTENTS-LOADRLAST+
TIME--------------REORGLASTTIME--------------EORGINSERTS-EORGDELETE+
S-EORGUPDATES-GUNCLUSTINS-RGDISORGLOB-GMASSDELETE-GNEARINDREF-RGFAR+
INDREF-STATSLASTTIME--------------TATSINSERTS-TATSDELETES-TATSUPDAT+
ES-SMASSDELETE-COPYLASTTIME---------------PDATEDPAGES-COPYCHANGES-C+
OPYUP-COPYUPDATETIME-------------I---DBID---PSID-TITION-STANCE-SPAC+
E---TOTALRO-DATASIZ-UNCOMPR-DBNAME-------NAME---------REORGCL-REORG+
SC-REORGHA-HASHLASTUS-DRI-L-STATS01----
--- modified
allg vorher others vorher
db-------ts---------part---inst-UPDATESTATSTIME----------------NACT+
IVE------NPAGES-XTENTS-LOADRLASTTIME--------------REORGLASTTIME----+
----------EORGINSERTS-EORGDELETES-EORGUPDATES-GUNCLUSTINS-RGDISORG+
LOB-GMASSDELETE-GNEARINDREF-RGFARINDREF-STATSLASTTIME--------------+
TATSINSERTS-TATSDELETES-TATSUPDATES-SMASSDELETE-COPYLASTTIME-------+
--------PDATEDPAGES-COPYCHANGES-COPYUP-COPYUPDATETIME-------------+
I---DBID---PSID-SPACE---TOTALRO-DATASIZ-UNCOMPR-REORGCL-REORGSC-REO+
RGHA-HASHLASTUS-DRI-L-STATS01----
db-------ts---------part---inst-UPDATESTATSTIME----------------NACT+
IVE------NPAGES-XTENTS-LOADRLASTTIME--------------REORGLASTTIME----+
----------EORGINSERTS-EORGDELETES-EORGUPDATES-GUNCLUSTINS-RGDISORG+
LOB-GMASSDELETE-GNEARINDREF-RGFARINDREF-STATSLASTTIME--------------+
TATSINSERTS-TATSDELETES-TATSUPDATES-SMASSDELETE-COPYLASTTIME-------+
--------PDATEDPAGES-COPYCHANGES-COPYUP-COPYUPDATETIME-------------+
I---DBID---PSID-SPACE---TOTALRO-DATASIZ-UNCOMPR-REORGCL-REORGSC-REO+
RGHA-HASHLASTUS-DRI-L-STATS01----
allg nachher others nachher
DBNAME INSTANCE +
. NPAGES REORGLASTTIME +
. REORGUPDATES +
. REORGMASSDELETE STATSLASTTIME +
. STATSUPDATES +
. COPYUPDATEDPAGES COPYUPDATETIME +
. PSID DATASIZE REORGSC+
ANACCESS DRIVETYPE
. NAME UPDATESTATSTIME +
. EXTENTS +
. REORGINSERTS REORGUNCLUSTINS +
. REORGNEARINDREF +
. STATSINSERTS STATSMASSDELETE +
. COPYCHANGES +
. IBMREQD SPACE UNCOMPRESSEDDATASIZE +
. REORGHASHACCESS LPFACILITY
. PARTITION NACTIVE+
. LOADRLASTTIME +
. REORGDELETES REORGD+
ISORGLOB REORGFARINDREF +
. STATSDELETES COPYLASTTIME +
. COPYUPDATELRSN +
. DBID TOTALROWS REORGCLUSTERSEN+
S HASHLASTUSED STATS01
$/tstSqlFTab/
*/
call tst t, 'tstSqlFTab'
call sqlConnect
call sqlPreOpen 17, 'select * from sysibm.sysTablespaceStats' ,
"where dbName = 'xxxDB06' and name = 'SYSTSTAB'"
call sqlFTabReset abc, 17, 1, , 12
call sqlFTabDef abc, 492, '%7e'
call sqlFTabOthers abc
call sqlfTab abc
call sqlClose 17
call out '--- modified'
call sqlopen 17
call sqlFTabReset abc, 17, 2 1, 1 3 'c', 12
call sqlFTabDef abc, 492, '%7e'
call sqlFTabAdd abc, DBNAME, '%-8C', 'db', 'allg vorher' ,
, 'allg nachher'
call sqlFTabAdd abc, NAME , '%-8C', 'ts'
call sqlFTabAdd abc, PARTITION , , 'part'
call sqlFTabAdd abc, INSTANCE , , 'inst'
call fTabAddTit abc, 2, 'others vorher'
call fTabAddTit abc, 3, 'others nachher'
call sqlFTabOthers abc
call sqlFTab abc
call sqlClose 17
call tstEnd t
return
endProcedure tstSqlFTab
tstSqlC: procedure expose m.
/*
$=/tstSqlCRx/
### start tst tstSqlCRx ###########################################
*** err: SQLCODE = -104: ILLEGAL SYMBOL "?". SOME SYMBOLS THAT MIGH+
T
. e 1: BE LEGAL ARE: . <IDENTIFIER> JOIN INNER LEFT RIGHT FU+
LL CROSS ,
. e 2: HAVING GROUP
. e 3: src select * from sysibm?sysDummy1
. e 4: > >>>pos 21 of 30>>>
. e 5: sql = select * from sysibm?sysDummy1
. e 6: stmt = prepare s9 into :M.SQL.9.D from :src
. e 7: with into :M.SQL.9.D = M.SQL.9.D
*** err: SQLCODE = -204: NONONO.SYSDUMMY1 IS AN UNDEFINED NAME
. e 1: sql = select * from nonono.sysDummy1
. e 2: stmt = prepare s9 into :M.SQL.9.D from :src
. e 3: with into :M.SQL.9.D = M.SQL.9.D
sys ==> server CHSKA000DBAF .
fetched a1=abc, i2=12, c3=---
. I1 C2 .
. 1 eins
2222 zwei
$/tstSqlCRx/
$=/tstSqlCCsm/
### start tst tstSqlCCsm ##########################################
*** err: SQLCODE = -104: ILLEGAL SYMBOL "?". SOME SYMBOLS THAT MIGH+
T
. e 1: BE LEGAL ARE: . <IDENTIFIER> JOIN INNER LEFT RIGHT FU+
LL CROSS ,
. e 2: HAVING GROUP
. e 3: src select * from sysibm?sysDummy1
. e 4: > >>>pos 21 of 30>>>
. e 5: sql = select * from sysibm?sysDummy1
. e 6: subsys = DD0G, host = RZ8, interfaceType Csm
*** err: SQLCODE = -204: NONONO.SYSDUMMY1 IS AN UNDEFINED NAME
. e 1: sql = select * from nonono.sysDummy1
. e 2: subsys = DD0G, host = RZ8, interfaceType Csm
sys rz8/DD0G ==> server CHROI000DD0G .
fetched a1=abc, i2=12, c3=---
. I1 C2 .
. 1 eins
2222 zwei
$/tstSqlCCsm/ */
sqlBuf = jBuf("select 1 i1, 'eins' c2 from sysibm.sysDummy1",
, "union all select 2222 i1, 'zwei' c2 from sysibm.sysDummy1")
do tx=1 to 2
if tx = 1 then do
call tst t, "tstSqlCRx"
sys = ''
call sqlConnect
end
else do
call tst t, "tstSqlCCsm"
sys = 'rz8/DD0G'
end
call sqlConnect sys
cx = 9
call sqlQuery cx, 'select * from sysibm?sysDummy1'
call sqlQuery cx, 'select * from nonono.sysDummy1'
call sqlQuery cx, "select 'abc' a1, 12 i2, current server srv",
", case when 1=0 then 1 else null end c3",
"from sysibm.sysDummy1"
do while sqlFetch(cx, dst)
call out 'sys' sys '==> server' m.dst.srv
call out 'fetched a1='m.dst.a1', i2='m.dst.i2', c3='m.dst.c3
end
call fmtFTab , sqlRdr(sqlBuf)
call sqlDisconnect
call tstEnd t
end
return
endProcedure tstSqlC
tstSqlQ: procedure expose m.
/*
$=/tstSqlQ/
### start tst tstSqlQ #############################################
insert updC 1
insert select updC 2
dest4.fet: 1 eins 2012-04-01-06.07.08.000000 1 updC 0
dest5.fet: 2 zwei 2012-02-29-15.44.33.220000 --- updC 0
dest6.fet: 11 zehn+eins 2012-04-11-06.07.08.000000 1 updC 0
dest7.fet: 12 zehn+zwei 2012-03-10-15.44.33.220000 --- updC 0
SQLCODE = 000, SUCCESSFUL EXECUTION
warnings 4=W no where
sql = select * from final table (update session.dgtt set c2 = 'u' +
|| c2)
stmt = prepare s9 into :M.SQL.9.D from :src
with into :M.SQL.9.D = M.SQL.9.D
dest9.fet: 1 ueins 2012-04-01-06.07.08.000000 updC 4
dest10.fet: 2 uzwei 2012-02-29-15.44.33.220000 updC 4
dest11.fet: 11 uzehn+eins 2012-04-11-06.07.08.000000 updC 4
dest12.fet: 12 uzehn+zwei 2012-03-10-15.44.33.220000 updC 4
$/tstSqlQ/ */
call tst t, "tstSqlQ"
cx = 9
qx = 3
call sqlConnect
call sqlUpdate,"declare global temporary table session.dgtt",
"(i1 int, c2 varchar(20), t3 timestamp)"
call sqlUpdate,"insert into session.dgtt" ,
"values(1, 'eins', '2012-04-01 06.07.08')"
call sqlUpdate,"insert into session.dgtt" ,
"values(2, 'zwei', '2012-02-29 15:44:33.22')"
call out 'insert updC' m.sql..updateCount
call sqlUpdate,"insert into session.dgtt" ,
"select i1+10, 'zehn+'||strip(c2), t3+10 days",
"from session.dgtt"
call out 'insert select updC' m.sql..updateCount
call sqlQuery cx, 'select d.*' ,
', case when mod(i1,2) = 1 then 1 else null end grad' ,
'from session.dgtt d'
do qx=qx+1 while sqlFetch(cx, 'dest'qx'.fet')
dst = 'dest'qx'.fet'
call out dst':' m.dst.i1 m.dst.c2 m.dst.t3 m.dst.grad ,
'updC' m.sql.cx.updateCount
drop m.dst.i1 m.dst.c2 m.dst.t3 m.dst.grad
end
call sqlClose cx
call sqlQuery cx, "select * from final table (update session.dgtt",
" set c2 = 'u' || c2)"
do qx=qx+1 while sqlFetch(cx, 'dest'qx'.fet')
dst = 'dest'qx'.fet'
call out dst':' m.dst.i1 m.dst.c2 m.dst.t3 ,
'updC' m.sql.cx.updateCount
drop m.dst.i1 m.dst.c2 m.dst.t3 m.dst.grad
end
call sqlClose cx
call tstEnd t
return
endProcedure tstSqlQ
tstSqlUpdComLoop: procedure expose m.
/*
$=/tstSqlUpdComLoop/
### start tst tstSqlUpdComLoop ####################################
sqlCode 0: declare global temporary table session.dgtt (i1 int) on +
commit ....
sqlCode 0, 123 rows inserted: insert into session.dgtt select row_n+
umber()....
CNT
123
1 rows fetched: select count(*) cnt from session.dgtt
123 rows deleted, 10 commits: delete from session.dgtt d where i1 i+
n (sele....
T
0
1 rows fetched: select count(*) cnt from session.dgtt
$/tstSqlUpdComLoop/ */
call tst t, "tstSqlUpdComLoop"
call sqlConnect
call out sqlStmt("declare global temporary table session.dgtt",
"(i1 int) on commit preserve rows")
call out sqlStmt("insert into session.dgtt",
"select row_number() over() from sysibm.sysTables",
"fetch first 123 rows only")
call out sqlStmt("select count(*) cnt from session.dgtt")
call out sqlUpdComLoop("delete from session.dgtt d where i1 in",
"(select i1 from session.dgtt fetch first 13 rows only)")
call out sqlStmt("select count(*) cnt from session.dgtt")
call tstEnd t
return
endProcedure tstSqlUpdComLoop
tstSqlO1: procedure expose m.
/*
$=/tstSqlO1/
### start tst tstSqlO1 ############################################
tstR: @tstWriteoV2 isA :<tstSqlO1Type>
tstR: .CR = SYSIBM
tstR: .TB = SYSTABLEPART
tstR: @tstWriteoV3 isA :<tstSqlO1Type>
tstR: .CR = SYSIBM
tstR: .TB = SYSTABLEPART_HIST
tstR: @tstWriteoV4 isA :<tstSqlO1Type>
tstR: .CR = SYSIBM
tstR: .TB = SYSTABLES
tstR: @tstWriteoV5 isA :<tstSqlO1Type>
tstR: .CR = SYSIBM
tstR: .TB = SYSTABLESPACE
--- writeAll
tstR: @tstWriteoV6 isA :<tstSqlO1Type>
tstR: .CR = SYSIBM
tstR: .TB = SYSTABLEPART
tstR: @tstWriteoV7 isA :<tstSqlO1Type>
tstR: .CR = SYSIBM
tstR: .TB = SYSTABLEPART_HIST
tstR: @tstWriteoV8 isA :<tstSqlO1Type>
tstR: .CR = SYSIBM
tstR: .TB = SYSTABLES
tstR: @tstWriteoV9 isA :<tstSqlO1Type>
tstR: .CR = SYSIBM
tstR: .TB = SYSTABLESPACE
$/tstSqlO1/
*/
call sqlConnect
call tst t, "tstSqlO1"
sq = sqlRdr("select strip(creator) cr, strip(name) tb",
"from sysibm.sysTables",
"where creator='SYSIBM' and name like 'SYSTABL%'",
"order by 2 fetch first 4 rows only")
call jOpen sq, m.j.cRead
do while assNN('ABC', jReadO(sq))
if m.sq.rowCount = 1 then do
cx = m.sq.cursor
call mAdd t.trans, className(m.sql.cx.type) '<tstSqlO1Type>'
end
call outO abc
end
call jClose sq
call out '--- writeAll'
call pipeWriteAll sq
call tstEnd t
return 0
endProcedure tstSqlO1
tstSqlO2: procedure expose m.
/*
$=/tstSqlO2/
### start tst tstSqlO2 ############################################
CR TB RR
SYSIBM SYSTABLEPART 1
SYSIBM SYSTABLEPART_HIST 4
SYSIBM SYSTABLES 9
SYSIBM SYSTABLESPACE 16
$/tstSqlO2/
*/
call sqlConnect
call tst t, "tstSqlO2"
call pipe '+N'
call out "select strip(creator) cr, strip(name) tb,"
call out "(row_number()over())*(row_number()over()) rr"
call out "from sysibm.sysTables"
call out "where creator='SYSIBM' and name like 'SYSTABL%'"
call out "order by 2 fetch first 4 rows only"
call pipe 'N|'
call sqlSel
call pipe 'P|'
call fmtFTab abc
call pipe '-'
call tstEnd t
return 0
endProcedure tstSqlO2
tstSqlS1: procedure expose m.
/*
$=/tstSqlS1/
### start tst tstSqlS1 ############################################
select c, a from sysibm.sysDummy1
tstR: @tstWriteoV2 isA :<cla sql c a>
tstR: .C = 1
tstR: .A = a
select ... where 1=0
tstR: @ obj null
$/tstSqlS1/
*/
call sqlOIni
call tst t, "tstSqlS1"
call sqlConnect dbaf
s1 = fileSingle( ,
sqlRdr("select count(*) c, 'a' a from sysibm.sysdummy1"))
call mAdd t.trans, className(objClass(s1)) '<cla sql c a>'
call out 'select c, a from sysibm.sysDummy1'
call tstWriteO t, s1
call out 'select ... where 1=0'
call tstWriteO t, fileSingle( ,
sqlRdr("select*from sysibm.sysdummy1 where 1=0"), '')
call tstEnd t
return
endProcedure tstSqlS1
tstSqlStmt: procedure expose m.
/*
$=/tstSqlStmt/
### start tst tstSqlStmt ##########################################
*** err: SQLCODE = -713: THE REPLACEMENT VALUE FOR CURRENT SCHEMA I+
S
. e 1: INVALID
. e 2: sql = set current schema = 'sysibm'
. e 3: stmt = execute immediate :ggSrc
sqlCode -713: set current schema = 'sysibm'
sqlCode 0: set current schema = sysibm
tstR: @tstWriteoV2 isA :<sql?sc>
tstR: .C = SYSIBM
1 rows fetched: select current schema c from sysDummy1
tstR: @tstWriteoV3 isA :<sql?sc>
tstR: .C = SYSIBM
1 rows fetched: (select current schema c from sysDummy1)
$/tstSqlStmt/ */
call sqlConnect
call tst t, "tstSqlStmt"
cn = className(classNew('n* SQL u f C v'))
call mAdd t.trans, cn '<sql?sc>'
call tstOut t, sqlStmt("set current schema = 'sysibm'")
call tstOut t, sqlStmt(" set current schema = sysibm ")
call tstOut t, sqlStmt(" select current schema c from sysDummy1",
, ,'o')
call tstOut t, sqlStmt(" (select current schema c from sysDummy1)",
, ,'o')
call tstEnd t
return
endProcedure tstSqlStmt
tstSqlStmts: procedure expose m.
/*
$=/tstSqlStmts/
### start tst tstSqlStmts #########################################
*** err: SQLCODE = -104: ILLEGAL SYMBOL "BLABLA". SOME SYMBOLS THAT
. e 1: MIGHT BE LEGAL ARE: <ERR_STMT> <WNG_STMT> GET SQL SAV+
EPOINT HOLD
. e 2: FREE ASSOCIATE
. e 3: src blabla
. e 4: > <<<pos 1 of 6<<<
. e 5: sql = blabla
sqlCode -104: blabla
sqlCode 0: set current schema= sysIbm
C
1
1 rows fetched: select count(*) "c" from sysDummy1 with ur
C
1
1 rows fetched: select count(*) "c" from sysDummy1 with ur
#jIn 1# set current -- sdf
#jIn 2# schema = s100447;
sqlCode 0: set current schema = s100447
#jIn eof 3#
$/tstSqlStmts/ */
call sqlConnect
call scanReadIni
call scanWinIni
call tst t, "tstSqlStmts"
call sqlStmts "blabla ;;set current schema= sysIbm "
b = jBuf('select count(*) "c" from sysDummy1 --com' ,
,'with /* comm */ ur;')
call sqlStmts b
call sqlStmts b, , '-sql72'
call mAdd mCut(t'.IN', 0), 'set current -- sdf', 'schema = s100447;'
call sqlStmts
call tstEnd t
return
endProcedure tstSqlStmts
/* copx tstSql end ***************************************************/
/* copx tstComp begin **************************************************
test the wsh compiler
***********************************************************************/
tstComp: procedure expose m.
call compIni
call tstCompDataConst
call tstCompDataVars
call tstCompShell
call tstCompPrimary
call tstCompExpr
call tstCompFile
call tstCompStmt
call tstCompStmtA
call tstCompDir
call tstCompObj
call tstCompORun
call tstCompDataIO
call tstCompPipe
call tstCompRedir
call tstCompComp
call tstCompSyntax
call tstCompSql
call tstTotal
return
endProcedure tstComp
tstComp1: procedure expose m.
parse arg ty nm cnt
c1 = 0
if cnt = 0 |cnt = '+' then do
c1 = cnt
cnt = ''
end
call jIni
src = jBuf()
call jOpen src, m.j.cWri
do sx=2 to arg()
call jWrite src, arg(sx)
end
call tstComp2 nm, ty, jClose(src), , c1, cnt
return
endProcedure tstComp1
tstComp2: procedure expose m.
parse arg nm, spec, src, compSt
call compIni
call tst t, nm, compSt
if src == '' then do
src = jBuf()
call tst4dp src'.BUF', mapInline(nm'Src')
end
m.t.moreOutOk = abbrev(strip(arg(5)), '+')
cmp = comp(src)
call out 'compile' spec',' (m.src.buf.0) 'lines:' m.src.buf.1
r = compile(cmp, spec)
noSyn = m.t.errHand = 0
coErr = m.t.err
say if( noSyn, "compiled", "*** syntaxed") r ":" objMet(r, 'oRun')
cnt = 0
do ax = 5 to max(arg(), 5) while m.t.err = coErr & noSyn
a1 = strip(arg(ax))
if a1 == '' & arg() >= 5 then
iterate
if abbrev(a1, '+') then do
m.t.moreOutOk = 1
a1 = strip(substr(a1, 2))
end
if datatype(a1, 'n') then
cnt = a1
else if a1 \== '' then
call err 'tstComp2 bad arg('ax')' arg(ax)
if cnt = 0 then do
call mCut 'T.IN', 0
call out "run without input"
end
else do
call mAdd mCut('T.IN', 0),
,"eins zwei drei", "zehn elf zwoelf?",
, "zwanzig 21 22 23 24 ... 29|"
do lx=4 to cnt
call mAdd 'T.IN', left(lx "line" lx, lx+9, '-')';'
end
call out "run with" cnt "inputs"
end
m.t.inIx = 0
call oRun r
end
call tstEnd t
return
endProcedure tstComp2
tstCompDataConst: procedure expose m.
/*
$=/tstCompDataConst/
### start tst tstCompDataConst ####################################
compile =, 8 lines: Lline one, $** asdf
run without input
. Lline one, .
line two..
line threecontinued on 4
line five fortsetzung
line six fortsetzung
$/tstCompDataConst/ */
call tstComp1 '= tstCompDataConst',
, ' Lline one, $** asdf',
, 'line two.',
, 'line three$*+ bla bla' ,
, 'continued on 4',
, 'line five $*( und so',
, 'weiter $abc $? $''$*)'' $"$*)" und weiter $*) fortsetzung',
, 'line six $*( und $*( $** $*( so',
, 'weiter $abc $? $*)'' $"$*)" und weiter $*) fortsetzung'
/*
$=/tstCompDataConstBefAftComm1/
### start tst tstCompDataConstBefAftComm1 #########################
compile =, 3 lines: $*(anfangs com.$*) $*(plus$*) $** x
run without input
the only line;
$/tstCompDataConstBefAftComm1/ */
call tstComp1 '= tstCompDataConstBefAftComm1',
, ' $*(anfangs com.$*) $*(plus$*) $** x',
, 'the only line;',
, ' $*(end kommentar$*) '
/*
$=/tstCompDataConstBefAftComm2/
### start tst tstCompDataConstBefAftComm2 #########################
compile =, 11 lines: $*(anfangs com.$*) $*(plus$*) $*+ x
run without input
the first non empty line;
. .
befor an empty line with comments;
$/tstCompDataConstBefAftComm2/ */
call tstComp1 '= tstCompDataConstBefAftComm2',
, ' $*(anfangs com.$*) $*(plus$*) $*+ x',
, ' $*(forts Zeile com.$*) $*(plus$*) $** x',
, ' $*(comment 2. Zeile$*) $*(plus$*) $*+ x',
, ' $*(forts Zeile com.$*) $*(plus$*) $** x',
, 'the first non empty line;',
, ' ',
, 'befor an empty line with comments;',
, ' $*(comment 4. Zeile$*) $*(plus$*) $*+ x',
, ' $*(forts 4.Zeile com.$*) $*(plus$*) $** x',
, ' $*(end kommentar$*) $*+',
, ' $*(forts end com.$*) $*(plus$*) $** x'
return
endProcedure tstCompDataComm
tstCompDataVars: procedure expose m.
/*
$=/tstCompDataVars/
### start tst tstCompDataVars #####################################
compile =, 5 lines: Lline one, $** asdf
run without input
. Lline one, .
lline zwei output
lline 3 .
variable v1 = valueV1 ${v1}= valueV1; .
. $-.{""$v1} = valueV1; .
$/tstCompDataVars/ */
call tstComp1 '= tstCompDataVars',
, ' Lline one, $** asdf',
, ' $$ lline zwei output',
, 'lline 3 $=v1= valueV1 ' ,
, 'variable v1 = $v1 $"${v1}=" ${ v1 }; ',
, ' $"$-.{""""$v1} =" $-.{""$v1}; '
return
endProcedure tstCompDataVars
tstCompShell: procedure expose m.
/*
$=/tstCompShell/
### start tst tstCompShell ########################################
compile @, 12 lines: $$ Lline one, $** asdf
run without input
Lline one,
lline zwei output
v1 = valueV1 ${v1}= valueV1|
REXX OUT L5 CONTINUED L6 CONTINUED L7
L8 ONE
L9 TWO
valueV1
valueV1 valueV2
out valueV1 valueV2
SCHLUSS
$/tstCompShell/ */
call tstComp1 '@ tstCompShell',
, ' $$ Lline one, $** asdf',
, ' $$ lline zwei output',
, ' $=v1= valueV1 ' ,
, '$$ v1 = $v1 $"${v1}=" ${ v1 }| ' ,
, 'call out rexx out l5, ' ,
, ' continued l6 , ' ,
, ' continued l7 ' ,
, 'call out l8 one ' ,
, 'call out l9 two$=v2=valueV2 ',
, '$$- $v1 $$- $v1 $v2 ',
, 'call out "out " $v1 $v2 ',
, '$$- schluss '
/*
$=/tstCompShell2/
### start tst tstCompShell2 #######################################
compile @, 13 lines: $@do j=0 to 1 $@¢ $$ do j=$j
run without input
do j=0
after if 0 $@¢ $!
after if 0 $=@¢ $!
do j=1
if 1 then $@¢ a
a2
if 1 then $@=¢ b
b2
after if 1 $@¢ $!
after if 1 $=@¢ $!
end
$/tstCompShell2/ */
call tstComp1 '@ tstCompShell2',
, '$@do j=0 to 1 $@¢ $$ do j=$j' ,
, 'if $j then $@¢ ',
, '$$ if $j then $"$@¢" a $$a2' ,
, '$!',
, 'if $j then $@=¢ ',
, '$$ if $j then $"$@=¢" b $$b2' ,
, '$!',
, 'if $j then $@¢ $!' ,
, '$$ after if $j $"$@¢ $!"' ,
, 'if $j then $@=¢ $!' ,
, '$$ after if $j $"$=@¢ $!"' ,
, '$!',
, '$$ end'
return
endProcedure tstCompShell
tstCompPrimary: procedure expose m.
call compIni
/*
$=/tstCompPrimary/
### start tst tstCompPrimary ######################################
compile =, 16 lines: Strings $"$""$""""$""" $'$''$''''$'''
run without input
Strings $"$""$" $'$''$'
rexx $-{ 3 * 5 } = 15
rexx $-¢ 5 * 7 $! = 35
rexx $-// 7 * 11 $// = 77
rexx $-/abcEf/ 11 * 13 $/abcEf/ = 143
data line three line four bis hier
shell line five line six bis hier
var get v1 value Eins, v1 value Eins .
var isDef v1 1, v2 0 .
#jIn eof 1#
var read >1 0 rr undefined
#jIn eof 2#
var read >2 0 rr undefined
no call abc$-{4*5} $-{efg$-{6*7} abc20 EFG42
brackets $-{$-{1+9}*$-¢7+3$!*$-/b/5+5$/b/} 1000
run with 3 inputs
Strings $"$""$" $'$''$'
rexx $-{ 3 * 5 } = 15
rexx $-¢ 5 * 7 $! = 35
rexx $-// 7 * 11 $// = 77
rexx $-/abcEf/ 11 * 13 $/abcEf/ = 143
data line three line four bis hier
shell line five line six bis hier
var get v1 value Eins, v1 value Eins .
var isDef v1 1, v2 0 .
#jIn 1# eins zwei drei
var read >1 1 rr eins zwei drei
#jIn 2# zehn elf zwoelf?
var read >2 1 rr zehn elf zwoelf?
no call abc$-{4*5} $-{efg$-{6*7} abc20 EFG42
brackets $-{$-{1+9}*$-¢7+3$!*$-/b/5+5$/b/} 1000
$/tstCompPrimary/ */
call envRemove 'v2'
call tstComp1 '= tstCompPrimary 3',
, 'Strings $"$""$""""$"""' "$'$''$''''$'''",
, 'rexx $"$-{ 3 * 5 } =" $-{ 3 * 5 }' ,
, 'rexx $"$-¢ 5 * 7 $! =" $-¢ 5 * 7 $!' ,
, 'rexx $"$-// 7 * 11 $// =" $-// 7 * 11 $//' ,
, 'rexx $"$-/abcEf/ 11 * 13 $/abcEf/ ="',
'$-/abcEf/ 11 * 13 $/abcEf/' ,
, 'data $-=¢ line three',
, 'line four $! bis hier' ,
, 'shell $-@¢ $$ line five',
, '$$ line six $! bis hier' ,
, '$= v1 = value Eins $=rr=undefined $= eins = 1 ',
, 'var get v1 $v1, v1 ${ v1 } ',
, 'var isDef v1 ${? v${ eins } }, v2 ${?v2 } ',
, 'var read >1 ${> rr} rr $rr' ,
, 'var read >2 ${> rr} rr $rr',
, 'no call $"abc$-{4*5} $-{efg$-{6*7}"',
'abc$-{4*5} $-{efg$-{6*7}}',
, 'brackets $"$-{$-{1+9}*$-¢7+3$!*$-/b/5+5$/b/}"',
'$-{$-{1+9}*$-¢7+3$!*$-/b/5+5$/b/}'
return
endProcedure tstCompPrimary
tstCompExpr: procedure expose m.
call compIni
/*
$=/tstCompExprStr/
### start tst tstCompExprStr ######################################
compile -, 3 lines: $=vv=vvStr
run without input
vv=vvStr
o2String($.$vv)=vvStr
$/tstCompExprStr/ */
call tstComp1 '- tstCompExprStr',
, '$=vv=vvStr' ,
, '"vv="$vv' ,
, '$"o2String($.$vv)="o2String($.$vv)'
/*
$=/tstCompExprObj/
### start tst tstCompExprObj ######################################
compile ., 5 lines: $=vv=vvStr
run without input
vv=
vvStr
s2o($.$vv)=
vvStr
$/tstCompExprObj/ */
call tstComp1 '. tstCompExprObj',
, '$=vv=vvStr' ,
, '"!vv="', '$vv',
, '$"s2o($.$vv)="', 's2o($-$vv)'
/*
$=/tstCompExprDat/
### start tst tstCompExprDat ######################################
compile =, 4 lines: $=vv=vvDat
run without input
vv=vvDat
$.$vv= !vvDat
$.-{"abc"}=!abc
$/tstCompExprDat/ */
call tstComp1 '= tstCompExprDat',
, '$=vv=vvDat' ,
, 'vv=$vv',
, '$"$.$vv=" $.$vv',
, '$"$.-{""abc""}="$.-{"abc"}'
/*
$=/tstCompExprRun/
### start tst tstCompExprRun ######################################
compile @, 3 lines: $=vv=vvRun
run without input
vv=vvRun
o2string($.$vv)=vvRun
$/tstCompExprRun/ */
call tstComp1 '@ tstCompExprRun',
, '$=vv=vvRun' ,
, 'call out "vv="$vv',
, 'call out $"o2string($.$vv)="o2string($.$vv)'
/*
$=/tstCompExprCon/
$/tstCompExprCon/ */
/* wkTst sinnvolle Erweiterung ???
call tstComp1 '# tstCompExprCon',
, '$=vv=vvCon' ,
, 'call out "vv="$vv',
, 'call out $"o2string($.$vv)="o2string($.$vv)'
*/
return
endProcedure tstCompExpr
tstCompStmt: procedure expose m.
/*
$=/tstCompStmt1/
### start tst tstCompStmt1 ########################################
compile @, 8 lines: $= v1 = value eins $= v2 =- 3*5*7 .
run without input
data v1 value eins v2 105
eins
zwei
drei
vier
fuenf
elf
zwoelf dreiZ
. vierZ .
fuenfZ
lang v1 value eins v2 945
oRun ouput 1
$/tstCompStmt1/ */
call pipeIni
call envPutO 'oRun', oRunner('call out "oRun ouput" (1*1)')
call envRemove 'v2'
call tstComp1 '@ tstCompStmt1',
, '$= v1 = value eins $= v2 =- 3*5*7 ',
, '$$ data v1 $v1 v2 ${ v2 }',
, '$$eins $@¢$$ zwei $$ drei ',
, ' $@¢ $! $@{ } $@// $// $@/q r s / $/q r s /',
' $@/eins/ $@¢ $$vier $! $/eins/ $! $$fuenf',
, '$$elf $@=¢$@={ zwoelf dreiZ } ',
, ' $@=¢ $! $@=¢ $@=¢ vierZ $! $! $! $$fuenfZ',
, '$$- "lang v1" $v1 "v2" ${v2}*9',
, '$@$oRun""' /* String am schluss -> $$ "" statment||||| */
/*
$=/tstCompStmt2/
### start tst tstCompStmt2 ########################################
compile @, 1 lines: $@for qq $$ loop qq $qq
run without input
#jIn eof 1#
run with 3 inputs
#jIn 1# eins zwei drei
loop qq eins zwei drei
#jIn 2# zehn elf zwoelf?
loop qq zehn elf zwoelf?
#jIn 3# zwanzig 21 22 23 24 ... 29|
loop qq zwanzig 21 22 23 24 ... 29|
#jIn eof 4#
$/tstCompStmt2/ */
call tstComp1 '@ tstCompStmt2 3',
, '$@for qq $$ loop qq $qq'
/*
$=/tstCompStmt3/
### start tst tstCompStmt3 ########################################
compile @, 9 lines: $$ 1 begin run 1
2 ct zwei
ct 4 mit assign .
run without input
1 begin run 1
3 run 3 ctV = ct 4 assign ctV|
run 5 procCall $@$prCa
out in proc at 8
run 6 vor call $@prCa()
out in proc at 8
9 run end
run with 3 inputs
1 begin run 1
3 run 3 ctV = ct 4 assign ctV|
run 5 procCall $@$prCa
out in proc at 8
run 6 vor call $@prCa()
out in proc at 8
9 run end
$/tstCompStmt3/ */
call tstComp1 '@ tstCompStmt3 3',
, '$$ 1 begin run 1',
, '$@ct $$ 2 ct zwei',
, '$$ 3 run 3 ctV = $ctV|',
, '$@ct $@=¢ct 4 mit assign $=ctV = ct 4 assign ctV $!',
, '$$ run 5 procCall $"$@$prCa" $@$prCa',
, '$$ run 6 vor call $"$@prCa()"',
, '$@prCa()',
, '$@proc prCa $$out in proc at 8',
, '$$ 9 run end'
/*
$=/tstCompStmt4/
### start tst tstCompStmt4 ########################################
compile @, 4 lines: $=eins=vorher
run without input
eins vorher
eins aus named block eins .
$/tstCompStmt4/ */
call tstComp1 '@ tstCompStmt4 0',
, '$=eins=vorher' ,
, '$$ eins $eins' ,
, '$=/eins/aus named block eins $/eins/' ,
, '$$ eins $eins'
/*
$=/tstCompStmtDo/
### start tst tstCompStmtDo #######################################
compile @, 2 lines: ti=0$@do y=3 to 4 $@do 2 $@¢
run without input
y=3 ti1 z=7
y=3 ti1 z=8
y=3 ti2 z=7
y=3 ti2 z=8
y=4 ti3 z=7
y=4 ti3 z=8
y=4 ti4 z=7
y=4 ti4 z=8
$/tstCompStmtDo/ */
call tstComp1 '@ tstCompStmtDo', 'ti=0$@do y=3 to 4 $@do 2 $@¢',
, 'ti = ti + 1',
'$@do $*(sdf$*) z $*(sdf$*) = 7 to 8 $$ y=$y ti$-{ti} z=$z $!'
/*
$=/tstCompStmtDo2/
### start tst tstCompStmtDo2 ######################################
compile @, 7 lines: $$ $-=/sqlSel/
run without input
select 1 abc select 2 abc after table .
$/tstCompStmtDo2/ */
call tstComp1 '@ tstCompStmtDo2',
, '$$ $-=/sqlSel/',
, '$=ty = abc ',
, '$@do tx=1 to 2 $@=/table/',
, 'select $tx $ty',
, '$/table/',
, '$=ty = abc',
, 'after table',
'$/sqlSel/'
return
endProcedure tstCompStmt
tstCompStmtA: procedure expose m.
call pipeIni
/*
$=/tstCompStmtAssAtt/
### start tst tstCompStmtAssAtt ###################################
compile @, 19 lines: call tstCompStmtAA "begin", "tstAssAtt"
run without input
begin tstAssAtt F1=F1val1 F2= F3= FR=
gugus1
ass1 tstAssAtt F1=F1val1 F2=F2ass1 F3=F3ass1 FR=
ass2 tstAssAtt F1=F1val1 F2=F2ass1 F3=F3ass1 FR=<oAAR2>
ass2 tstAssAr2 F1=FRF1ass2 F2= F3= FR=
gugus3
ass3 tstAssAtt F1=F1val1 F2=F2ass3 F3=F3ass1 FR=<oAAR2>
ass3 tstAssAr2 F1=FRF1ass2 F2=FrF2ass3 F3= FR=<oAAR3>
ass3 tstAssAr3 F1=r2F1as3 F2=r2F2as3 F3= FR=
*** err: no field falsch in class tstAssAtt in EnvPut(falsch, +
falsch, 1)
$/tstCompStmtAssAtt/
*/
call classNew 'n? tstAssAtt u f F1 v, f F2 v,' ,
'f F3 v, f FR r tstAssAtt'
call envPutO 'tstAssAtt', oNew('tstAssAtt')
call envPut 'tstAssAtt.F1', 'F1val1'
call tstComp1 '@ tstCompStmtAssAtt',
, 'call tstCompStmtAA "begin", "tstAssAtt"',
, '$=tstAssAtt=:¢F2=F2ass1 $$gugus1',
, 'F3=F3ass1',
, '!',
, 'call tstCompStmtAA "ass1", "tstAssAtt"',
, '$=tstAssAtt.FR.F1 = FRF1ass2',
, '$=tstAssAr2 =. ${tstAssAtt.FR}',
, 'call mAdd T.trans, $.$tstAssAr2 "<oAAR2>"',
, 'call tstCompStmtAA "ass2", "tstAssAtt"',
';call tstCompStmtAA "ass2", "tstAssAr2"',
, '$=tstAssAtt=:¢F2=F2ass3 $$gugus3',
, ':/FR/ F2= FrF2ass3',
, 'FR=:¢F1=r2F1as3',
, 'F2=r2F2as3',
, ' * blabla $$ sdf',
, '!',
, '/FR/ !',
, '$=tstAssAr3 =. ${tstAssAtt.FR.FR}',
, 'call mAdd T.trans, $.$tstAssAr3 "<oAAR3>";',
'call tstCompStmtAA "ass3", "tstAssAtt";',
'call tstCompStmtAA "ass3", "tstAssAr2";',
'call tstCompStmtAA "ass3", "tstAssAr3"',
, '$=tstAssAtt=:¢falsch=falsch$!'
/*
$=/tstCompStmtAsSuTy/
### start tst tstCompStmtAsSuTy ###################################
compile @, 4 lines: call tstCompStmtA2 "begin", "tstAsSuTy"
run without input
begin tstAsSuTy G1=G1ini1 .
_..GT tstAsSuTy F1=GTF1ini1 F2= F3= FR=
as2 tstAsSuTy G1=G1ini1 .
_..GT tstAsSuTy F1=GtF1ass2 F2=F2ass2 F3= FR=
$/tstCompStmtAsSuTy/
*/
call classNew 'n? tstAsSuTy u f G1 v, f GT tstAssAtt'
call envPutO 'tstAsSuTy', oNew('tstAsSuTy')
call envPut 'tstAsSuTy.G1', 'G1ini1'
call envPut 'tstAsSuTy.GT.F1', 'GTF1ini1'
call tstComp1 '@ tstCompStmtAsSuTy',
, 'call tstCompStmtA2 "begin", "tstAsSuTy"',
, '$=tstAsSuTy.GT =:¢F1= GtF1ass2',
, 'F2= F2ass2 $!',
, 'call tstCompStmtA2 "as2", "tstAsSuTy"'
/*
$=/tstCompStmtAssSt/
### start tst tstCompStmtAssSt ####################################
compile @, 13 lines: .
run without input
*** err: bad stem index 1>0 @ <oASt>.HS class <clSt??> in EnvPut(ts+
tAssSt.HS.1.F1, HS.1.ini0, )
begin tstAssSt H1=H1ini1 HS.0=1 .
_..1 tstAssSt. F1=HS.1.ini F2= F3= FR=
ass2 tstAssSt H1=H1ass2 HS.0=1 .
_..1 tstAssSt. F1= F2=hs+f2as2 F3=hs+f3as2 FR=
ass3 tstAssSt H1=H1ass3 HS.0=3 .
_..1 tstAssSt. F1= F2=hs+f2as3 F3= FR=
_..2 tstAssSt. F1= F2= F3= FR=
_..3 tstAssSt. F1= F2= F3=hs+f3as3 FR=
$/tstCompStmtAssSt/
*/
cl = classNew('n? tstAssSt u f H1 v, f HS s tstAssAtt')
cl = m.cl.2
m.tstCl = m.cl.class
call envPutO 'tstAssSt', oNew('tstAssSt')
call oClaClear class4Name('tstAssAtt'), envGetO('tstAssSt')'.HS.1'
call envPut 'tstAssSt.H1', 'H1ini1'
call tstComp1 '@ tstCompStmtAssSt', '',
, "call mAdd t.trans, $.$tstAssSt '<oASt>'",
", m.tstCl '<clSt??>'",
";call envPut 'tstAssSt.HS.1.F1', 'HS.1.ini0'",
";call envPut 'tstAssSt.HS.0', 1",
";call envPut 'tstAssSt.HS.1.F1', 'HS.1.ini1'",
, 'call tstCompStmtSt "begin", "tstAssSt"',
, '$=tstAssSt =:¢H1= H1ass2',
, 'HS =<:¢F2=hs+f2as2',
, 'F3=hs+f3as2$! !' ,
, 'call tstCompStmtSt "ass2", "tstAssSt"',
, '$=tstAssSt =:¢H1= H1ass3',
, 'HS =<:¢F2=hs+f2as3',
, '; ; F3=hs+f3as3',
, ' ! !' ,
, 'call tstCompStmtSt "ass3", "tstAssSt"',
, ''
/*
$=/tstCompStmtAssSR/
### start tst tstCompStmtAssSR ####################################
compile @, 13 lines: .
run without input
*** err: bad stem index 1>0 @ <oASR>.HS class <clSR??> in EnvPut(ts+
tAssSR.HS.1.F1, HS.1.ini0, )
begin tstAssSR H1=H1ini1 HS.0=1 .
_..1 tstAssSR. F1=HS.1.ini F2= F3= FR=
ass2 tstAssSR H1=H1ass2 HS.0=1 .
_..1 tstAssSR. F1= F2=hs+f2as2 F3=hs+f3as2 FR=
ass3 tstAssSR H1=H1ass3 HS.0=3 .
_..1 tstAssSR. F1= F2=hs+f2as3 F3= FR=
_..2 tstAssSR. F1= F2= F3= FR=
_..3 tstAssSR. F1= F2= F3=hs+f3as3 FR=
$/tstCompStmtAssSR/
*/
cl = classNew('n? tstAssSR u f H1 v, f HS s r tstAssAtt')
cl = m.cl.2
m.tstCl = m.cl.class
call envPutO 'tstAssSR', oNew('tstAssSR')
call oClaClear class4Name('tstAssAtt'), envGetO('tstAssSR')'.HS.1'
call envPut 'tstAssSR.H1', 'H1ini1'
call tstComp1 '@ tstCompStmtAssSR', '',
, "call mAdd t.trans, $.$tstAssSR '<oASR>'",
", m.tstCl '<clSR??>'",
";call envPut 'tstAssSR.HS.1.F1', 'HS.1.ini0'",
";call envPut 'tstAssSR.HS.0', 1",
";call envPutO 'tstAssSR.HS.1', ''",
";call envPut 'tstAssSR.HS.1.F1', 'HS.1.ini1'",
, 'call tstCompStmtSt "begin", "tstAssSR"',
, '$=tstAssSR =:¢H1= H1ass2',
, 'HS =<<:¢F2=hs+f2as2',
, 'F3=hs+f3as2$! !' ,
, ';call tstCompStmtSt "ass2", "tstAssSR"',
, '$=tstAssSR =:¢H1= H1ass3',
, 'HS =<:¢F2=hs+f2as3',
, '; ; F3=hs+f3as3',
, ' ! !' ,
, 'call tstCompStmtSt "ass3", "tstAssSR"',
, ''
/*
$=/tstCompStmtassTb/
### start tst tstCompStmtassTb ####################################
compile @, 19 lines: .
run without input
*** err: bad stem index 1>0 @ <oASt>.HS class <clSt??> in EnvPut(ts+
tAssSt.HS.1.F1, HS.1.ini0, )
begin tstAssSt H1=H1ini1 HS.0=1 .
_..1 tstAssSt. F1=HS.1.ini F2= F3= FR=
tstR: @tstWriteoV4 isA :<assCla H1>
tstR: .H1 = H1ass2
ass2 tstAssSt H1=H1ini1 HS.0=2 .
_..1 tstAssSt. F1= F2=hs+f2as2 F3=hs+f3as2 FR=
_..2 tstAssSt. F1= F2=h3+f2as2 F3=h3+f3as2 FR=
ass3 tstAssSt H1=H1ass3 HS.0=3 .
_..1 tstAssSt. F1= F2=f2as3 F3= FR=
_..2 tstAssSt. F1= F2= F3= FR=
_..3 tstAssSt. F1= F2= F3=f3as3 FR=
$/tstCompStmtassTb/
*/
cl = classNew('n? tstAssSt u f H1 v, f HS s tstAssAtt')
cl = m.cl.2
m.tstCl = m.cl.class
call envPutO 'tstAssSt', oNew('tstAssSt')
call oClaClear class4Name('tstAssAtt'), envGetO('tstAssSt')'.HS.1'
call envPut 'tstAssSt.H1', 'H1ini1'
call tstComp1 '@ tstCompStmtassTb', '',
, "call mAdd t.trans, $.$tstAssSt '<oASt>'",
", m.tstCl '<clSt??>'",
";call envPut 'tstAssSt.HS.1.F1', 'HS.1.ini0'",
";call envPut 'tstAssSt.HS.0', 1",
";call envPut 'tstAssSt.HS.1.F1', 'HS.1.ini1'",
, 'call tstCompStmtSt "begin", "tstAssSt"',
, '$=tstAssSt =:¢ $@|¢ H1 ',
, ' H1ass2 ',
, "$@{call mAdd 'T.TRANS', className(objClass(envWithObj()))",
"'<assCla H1>'} $!",
, 'HS =<|¢ $*(...',
, '..$*) F2 F3 ',
, ' hs+f2as2 hs+f3as2 ' ,
, ' * kommentaerliiii ' ,
, ' ' ,
, ' h3+f2as2 h3+f3as22222$! !' ,
, 'call tstCompStmtSt "ass2", "tstAssSt"',
'$=tstAssSt =:¢H1= H1ass3',
, 'HS =<|¢F2 F3',
, ' f2as3' ,
, ' ',
, ' $""',
, ' f3as3 $! !' ,
, 'call tstCompStmtSt "ass3", "tstAssSt"'
/*
$=/tstCompStmtassInp/
### start tst tstCompStmtassInp ###################################
compile @, 11 lines: .
run without input
tstR: @tstWriteoV2 isA :<cla123>
tstR: .eins = l1v1
tstR: .zwei = l1v2
tstR: .drei = l1v3
tstR: @tstWriteoV3 isA :<cla123>
tstR: .eins = l2v1
tstR: .zwei = l2v2
tstR: .drei = l21v3
*** err: undefined variable oo in envGetO(oo)
oo before 0
oo nachher <oo>
tstR: @tstWriteoV5 isA :<cla123>
tstR: .eins = o1v1
tstR: .zwei = o1v2
tstR: .drei = o1v3
$/tstCompStmtassInp/
*/
call envRemove 'oo'
call tstComp1 '@ tstCompStmtassInp', '',
, "$@|¢eins zwei drei ",
, " l1v1 l1v2 l1v3",
, "$@{call mAdd 'T.TRANS', className(objClass(envWithObj()))",
"'<cla123>'}" ,
, " l2v1 l2v2 l21v3",
, "!",
, "$$ oo before $.$oo",
, "$; $>.$oo $@|¢eins zwei drei",
, " o1v1 o1v2 o1v3 $!",
, "$; call mAdd 'T.TRANS', $.$oo '<oo>'",
, "$; $$ oo nachher $.$oo $@$oo"
return
endProcedure tstCompStmtA
tstCompStmtAA: procedure expose m.
parse arg ggTxt, ggN
call out left(ggTxt,8) left(ggN, 9),
'F1='left(envGet(ggN'.F1'), 8),
'F2='left(envGet(ggN'.F2'), 8),
'F3='left(envGet(ggN'.F3'), 8),
'FR='envGetO(ggN'.FR')
return
endSubroutine
tstCompStmtA2: procedure expose m.
parse arg ggTxt, ggN
call out left(ggTxt,8) left(ggN, 9),
'G1='left(envGet(ggN'.G1'), 8)
call tstCompStmtAA '_..GT', ggN'.GT'
return
endSubroutine
tstCompStmtSt: procedure expose m.
parse arg ggTxt, ggN
call out left(ggTxt,8) left(ggN, 9),
'H1='left(envGet(ggN'.H1'), 8),
'HS.0='left(envGet(ggN'.HS.0'), 8)
do sx=1 to envGet(ggN'.HS.0')
call tstCompStmtAA '_..'sx, ggN'.HS.'sx
end
return
endSubroutine tstCompStmtSt
tstCompSyntax: procedure expose m.
call tstCompSynPrimary
call tstCompSynAss
call tstCompSynRun
return
endProcedure tstCompSyntax
tstCompSynPrimary: procedure expose m.
/*
$=/tstCompSynPri1/
### start tst tstCompSynPri1 ######################################
compile @, 1 lines: a $ =
*** err: scanErr pipe or $; expected: compile shell stopped before+
. end of input
. e 1: last token scanPosition $ =
. e 2: pos 3 in line 1: a $ =
$/tstCompSynPri1/ */
call tstComp1 '@ tstCompSynPri1 +', 'a $ ='
/*
$=/tstCompSynPri2/
### start tst tstCompSynPri2 ######################################
compile @, 1 lines: a $. {
*** err: scanErr objRef expected after $. expected
. e 1: last token scanPosition {
. e 2: pos 5 in line 1: a $. {
$/tstCompSynPri2/ */
call tstComp1 '@ tstCompSynPri2 +', 'a $. {'
/*
$=/tstCompSynPri3/
### start tst tstCompSynPri3 ######################################
compile @, 1 lines: b $- ¢ .
*** err: scanErr objRef expected after $- expected
. e 1: last token scanPosition ¢
. e 2: pos 5 in line 1: b $- ¢
$/tstCompSynPri3/ */
call tstComp1 '@ tstCompSynPri3 +', 'b $- ¢ '
/*
$=/tstCompSynPri4/
### start tst tstCompSynPri4 ######################################
compile @, 1 lines: a ${ $*( sdf$*) } =
*** err: scanErr var name expected
. e 1: last token scanPosition } =
. e 2: pos 17 in line 1: a ${ $*( sdf$*) } =
$/tstCompSynPri4/ */
call tstComp1 '@ tstCompSynPri4 +', 'a ${ $*( sdf$*) } ='
/*
$=/tstCompSynFile/
### start tst tstCompSynFile ######################################
compile @, 1 lines: $@.<$*( co1 $*) $$abc
*** err: scanErr block or expr expected for file expected
. e 1: last token scanPosition $$abc
. e 2: pos 17 in line 1: $@.<$*( co1 $*) $$abc
$/tstCompSynFile/ */
call tstComp1 '@ tstCompSynFile +', '$@.<$*( co1 $*) $$abc'
return
endProcedure tstCompSynPrimary
tstCompSynAss: procedure expose m.
/*
$=/tstCompSynAss1/
### start tst tstCompSynAss1 ######################################
compile @, 1 lines: $=
*** err: scanErr assignment expected after $=
. e 1: last token scanPosition .
. e 2: pos 3 in line 1: $=
$/tstCompSynAss1/ */
call tstComp1 '@ tstCompSynAss1 +', '$='
/*
$=/tstCompSynAss2/
### start tst tstCompSynAss2 ######################################
compile @, 2 lines: $= .
*** err: scanErr assignment expected after $=
. e 1: last token scanPosition .
. e 2: pos 6 in line 1: $=
$/tstCompSynAss2/ */
call tstComp1 '@ tstCompSynAss2 +', '$= ', 'eins'
/*
$=/tstCompSynAss3/
### start tst tstCompSynAss3 ######################################
compile @, 2 lines: $= $$
*** err: scanErr assignment expected after $=
. e 1: last token scanPosition $$
. e 2: pos 6 in line 1: $= $$
$/tstCompSynAss3/ */
call tstComp1 '@ tstCompSynAss3 +', '$= $$', 'eins'
/*
$=/tstCompSynAss4/
### start tst tstCompSynAss4 ######################################
compile @, 1 lines: $= eins
*** err: scanErr = expected after $= "eins"
. e 1: last token scanPosition .
. e 2: pos 10 in line 1: $= eins
$/tstCompSynAss4/ */
call tstComp1 '@ tstCompSynAss4 +', '$= eins'
/*
$=/tstCompSynAss5/
### start tst tstCompSynAss5 ######################################
compile @, 1 lines: $= abc eins $$ = x
*** err: scanErr = expected after $= "abc eins"
. e 1: last token scanPosition $$ = x
. e 2: pos 14 in line 1: $= abc eins $$ = x
$/tstCompSynAss5/ */
call tstComp1 '@ tstCompSynAss5 +', '$= abc eins $$ = x'
/*
$=/tstCompSynAss6/
### start tst tstCompSynAss6 ######################################
compile @, 1 lines: $= abc =
*** err: scanErr block or expression after $= "abc" = expected
. e 1: last token scanPosition .
. e 2: pos 10 in line 1: $= abc =
$/tstCompSynAss6/ */
call tstComp1 '@ tstCompSynAss6 +', '$= abc ='
/*
$=/tstCompSynAss7/
### start tst tstCompSynAss7 ######################################
compile @, 1 lines: $= abc =..
*** err: scanErr block or expression after $= "abc" = expected
. e 1: last token scanPosition .
. e 2: pos 11 in line 1: $= abc =..
$/tstCompSynAss7/ */
call tstComp1 '@ tstCompSynAss7 +', '$= abc =.'
return
endProcedure tstCompSynAss
tstCompSynRun: procedure expose m.
/*
$=/tstCompSynRun1/
### start tst tstCompSynRun1 ######################################
compile @, 1 lines: $@
*** err: scanErr block or expr expected after $@ expected
. e 1: last token scanPosition .
. e 2: pos 3 in line 1: $@
$/tstCompSynRun1/ */
call tstComp1 '@ tstCompSynRun1 +', '$@'
/*
$=/tstCompSynRun2/
### start tst tstCompSynRun2 ######################################
compile @, 1 lines: $@=
*** err: scanErr block or expr expected after $@ expected
. e 1: last token scanPosition .
. e 2: pos 4 in line 1: $@=
$/tstCompSynRun2/ */
call tstComp1 '@ tstCompSynRun2 +', '$@='
/*
$=/tstCompSynRun3/
### start tst tstCompSynRun3 ######################################
compile @, 1 lines: $@|
*** err: scanErr block or expr expected after $@ expected
. e 1: last token scanPosition .
. e 2: pos 4 in line 1: $@|
*** err: scanErr comp2code bad fr | to | for @|| .
. e 1: last token scanPosition .
. e 2: pos 4 in line 1: $@|
$/tstCompSynRun3/ */
call tstComp1 '@ tstCompSynRun3 +', '$@|'
/*
$=/tstCompSynFor4/
### start tst tstCompSynFor4 ######################################
compile @, 1 lines: $@for
*** err: scanErr variable name after $@for expected
. e 1: last token scanPosition .
. e 2: pos 6 in line 1: $@for
$/tstCompSynFor4/ */
call tstComp1 '@ tstCompSynFor4 +', '$@for'
/*
$=/tstCompSynFor5/
### start tst tstCompSynFor5 ######################################
compile @, 2 lines: $@for
*** err: scanErr variable name after $@for expected
. e 1: last token scanPosition .
. e 2: pos 6 in line 1: $@for
$/tstCompSynFor5/ */
call tstComp1 '@ tstCompSynFor5 +', '$@for', a
/*
$=/tstCompSynFor6/
### start tst tstCompSynFor6 ######################################
compile @, 2 lines: a
*** err: scanErr variable name after $@for expected
. e 1: last token scanPosition $$q
. e 2: pos 12 in line 2: b $@for $$q
$/tstCompSynFor6/ */
call tstComp1 '@ tstCompSynFor6 +', 'a', ' b $@for $$q'
/*
$=/tstCompSynFor7/
### start tst tstCompSynFor7 ######################################
compile @, 3 lines: a
*** err: scanErr statement after $@for "a" expected
. e 1: last token scanPosition .
. e 2: pos 11 in line 2: b $@for a
$/tstCompSynFor7/ */
call tstComp1 '@ tstCompSynFor7 +', 'a', ' b $@for a', ' $$q'
/*
$=/tstCompSynCt8/
### start tst tstCompSynCt8 #######################################
compile @, 3 lines: a
*** err: scanErr ct statement expected
. e 1: last token scanPosition .
. e 2: pos 8 in line 2: b $@ct
$/tstCompSynCt8/ */
call tstComp1 '@ tstCompSynCt8 +', 'a', ' b $@ct', ' $$q'
/*
$=/tstCompSynProc9/
### start tst tstCompSynProc9 #####################################
compile @, 2 lines: a
*** err: scanErr proc name expected
. e 1: last token scanPosition $$q
. e 2: pos 12 in line 2: b $@proc $$q
$/tstCompSynProc9/ */
call tstComp1 '@ tstCompSynProc9 +', 'a', ' b $@proc $$q'
/*
$=/tstCompSynProcA/
### start tst tstCompSynProcA #####################################
compile @, 2 lines: $@proc p1
*** err: scanErr proc statement expected
. e 1: last token scanPosition .
. e 2: pos 10 in line 1: $@proc p1
$/tstCompSynProcA/ */
call tstComp1 '@ tstCompSynProcA +', '$@proc p1', ' $$q'
/*
$=/tstCompSynCallB/
### start tst tstCompSynCallB #####################################
compile @, 1 lines: $@call (roc p1)
*** err: scanErr procCall, for, do, ct, proc or objRef expected aft+
er $@
. e 1: last token scanPosition (roc p1)
. e 2: pos 7 in line 1: $@call (roc p1)
$/tstCompSynCallB/ */
call tstComp1 '@ tstCompSynCallB +', '$@call (roc p1)'
/*
$=/tstCompSynCallC/
### start tst tstCompSynCallC #####################################
compile @, 1 lines: $@call( roc p1 )
*** err: scanErr closing ) expected after $@call(
. e 1: last token scanPosition roc p1 )
. e 2: pos 9 in line 1: $@call( roc p1 )
$/tstCompSynCallC/ */
call tstComp1 '@ tstCompSynCallC +', '$@call( roc p1 )'
/*
$=/tstCompSynCallD/
### start tst tstCompSynCallD #####################################
compile @, 2 lines: $@call( $** roc
*** err: scanErr closing ) expected after $@call(
. e 1: last token scanPosition .
. e 2: pos 16 in line 1: $@call( $** roc
$/tstCompSynCallD/ */
call tstComp1 '@ tstCompSynCallD +',
,'$@call( $** roc' , ' $*( p1 $*) )'
return
endProcedure tstCompSynRun
tstCompObj: procedure expose m.
call tstReset t
call oIni
cl = classNew('n? tstCompCla u v, f FEINS v, f FZWEI v')
do rx=1 to 10
o = oNew(cl)
m.tstComp.rx = o
m.o = 'o'rx
if rx // 2 = 0 then do
m.o.fEins = 'o'rx'.1'
m.o.fZwei = 'o'rx'.fZwei'rx
end
else do
m.o.fEins = 'o'rx'.fEins'
m.o.fZwei = 'o'rx'.2'
end
call mAdd 'T.TRANS', m.tstComp.rx '<o'rx'>'
end
/*
$=/tstCompObjRef/
### start tst tstCompObjRef #######################################
compile @, 13 lines: o1=m.tstComp.1
run without input
out .$"string" o1
string
out . o1
tstR: @<o1> isA :tstCompCla = o1
tstR: .FEINS = o1.fEins
tstR: .FZWEI = o1.2
out .{ o2 }
tstR: @<o2> isA :tstCompCla = o2
tstR: .FEINS = o2.1
tstR: .FZWEI = o2.fZwei2
out .¢ o3 $!
tstR: @<o3> isA :tstCompCla = o3
tstR: .FEINS = o3.fEins
tstR: .FZWEI = o3.2
out .¢ o4 $!
tstR: @<o4> isA :tstCompCla = o4
tstR: .FEINS = o4.1
tstR: .FZWEI = o4.fZwei4
out ./-/ o5 $/-/
tstR: @<o5> isA :tstCompCla = o5
tstR: .FEINS = o5.fEins
tstR: .FZWEI = o5.2
$/tstCompObjRef/ */
m.ttt=1
call tstComp1 '@ tstCompObjRef' ,
, 'o1=m.tstComp.1',
, 'o2 = m.tstComp.2' ,
, '$$ out $".$""string""" o1 $$.$"string"',
, '$$ out . o1 $$. o1',
, '$$ out .{ o2 } $$.{ o2 }',
, '$$ out .¢ o3 $"$!" $$.¢ ', ' m.tstComp.3 ', ' $!',
, '$$ out .¢ o4 $"$!" $$.¢ ', ' m.tstComp.4 ', ' $!',
, '$$ out ./-/ o5 $"$/-/" $$./-/ m.tstComp.5 ', ' $/-/'
/*
$=/tstCompObjRefPri/
### start tst tstCompObjRefPri ####################################
compile @, 9 lines: $$ out .$"$.{o1}" $$.$.{ m.tstComp.1 }
run without input
out .$.{o1}
tstR: @<o1> isA :tstCompCla = o1
tstR: .FEINS = o1.fEins
tstR: .FZWEI = o1.2
out .$.-{o2}
<o2>
out .$.={o3}
m.tstComp.3
out .$.@{out o4}
tstWriteO kindOf ORun oRun begin <<<
tstR: @<o4> isA :tstCompCla = o4
tstR: .FEINS = o4.1
tstR: .FZWEI = o4.fZwei4
tstWriteO kindOf ORun oRun end >>>
out .$.@¢$$abc $$efg$!
tstWriteO kindOf ORun oRun begin <<<
abc
efg
tstWriteO kindOf ORun oRun end >>>
out .$.@¢o5$!
tstWriteO kindOf ORun oRun begin <<<
tstR: @<o5> isA :tstCompCla = o5
tstR: .FEINS = o5.fEins
tstR: .FZWEI = o5.2
abc
tstWriteO kindOf ORun oRun end >>>
$/tstCompObjRefPri/ */
call tstComp1 '@ tstCompObjRefPri' ,
, '$$ out .$"$.{o1}" $$.$.{ m.tstComp.1 }',
, '$$ out .$"$.-{o2}" $$.$.-{ m.tstComp.2 }',
, '$$ out .$"$.={o3}" $$.$.={ m.tstComp.3 }',
, '$$ out .$"$.@{out o4}" $$.$.@{ call outO m.tstComp.4 }',
, '$$ out .$"$.@¢$$abc $$efg$!" $$.$.@¢ $$abc ', ' ', ' $$efg $!',
, '$$ out .$"$.@¢o5$!" $$.$.@¢ $$.m.tstComp.5', '$$abc $!'
/*
$=/tstCompObjRefFile/
### start tst tstCompObjRefFile ###################################
compile @, 7 lines: $$ out .$".<.¢o1!" $$.$.<.¢ m.tstComp.1 $!
run without input
out ..<.¢o1!
tstWriteO kindOf JRW jWriteNow begin <<<
tstR: @<o1> isA :tstCompCla = o1
tstR: .FEINS = o1.fEins
tstR: .FZWEI = o1.2
tstWriteO kindOf JRW jWriteNow end >>>
out .<$.-{o2}
tstWriteO kindOf JRW jWriteNow begin <<<
tstR: @<o2> isA :tstCompCla = o2
tstR: .FEINS = o2.1
tstR: .FZWEI = o2.fZwei2
tstWriteO kindOf JRW jWriteNow end >>>
out .$.<{o3}
tstWriteO kindOf JRW jWriteNow begin <<<
m.tstComp.3
tstWriteO kindOf JRW jWriteNow end >>>
out .$.<@{out o4}
tstWriteO kindOf JRW jWriteNow begin <<<
tstR: @<o4> isA :tstCompCla = o4
tstR: .FEINS = o4.1
tstR: .FZWEI = o4.fZwei4
tstWriteO kindOf JRW jWriteNow end >>>
out .$<@¢$$abc $$efg$!
tstWriteO kindOf JRW jWriteNow begin <<<
abc
efg
tstWriteO kindOf JRW jWriteNow end >>>
$/tstCompObjRefFile/ */
call tstComp1 '@ tstCompObjRefFile' ,
, '$$ out .$".<.¢o1!" $$.$.<.¢ m.tstComp.1 $!',
, '$$ out .$"<$.-{o2}" $$.$.<.{ m.tstComp.2 }',
, '$$ out .$"$.<{o3}" $$.$.<={ m.tstComp.3 }',
, '$$ out .$"$.<@{out o4}" $$.$.<@{ call outO m.tstComp.4 }',
, '$$ out .$"$<@¢$$abc $$efg$!" $$.$.<@¢ $$abc ', ' ', ' $$efg $!'
/*
$=/tstCompObjFor/
### start tst tstCompObjFor #######################################
compile @, 2 lines: $@do rx=1 to 3 $$. m.tstComp.rx
run without input
FEINS=o1.fEins FZWEI=o1.2
FEINS=o2.1 FZWEI=o2.fZwei2
FEINS=o3.fEins FZWEI=o3.2
$/tstCompObjFor/
*/
call tstComp1 '@ tstCompObjFor' ,
, '$@do rx=1 to 3 $$. m.tstComp.rx' ,
, '$| $@forWith with $$ FEINS=$FEINS FZWEI=$FZWEI'
/*
$=/tstCompObjRun/
### start tst tstCompObjRun #######################################
compile @, 4 lines: $$ out .$"$@¢o1!" $$.$.@¢ $$. m.tstComp.1 $!
run without input
out .$@¢o1!
tstWriteO kindOf ORun oRun begin <<<
tstR: @<o1> isA :tstCompCla = o1
tstR: .FEINS = o1.fEins
tstR: .FZWEI = o1.2
tstWriteO kindOf ORun oRun end >>>
out .$<@¢$$abc $$efg$!
tstWriteO kindOf JRW jWriteNow begin <<<
abc
efg
tstWriteO kindOf JRW jWriteNow end >>>
$/tstCompObjRun/ */
call tstComp1 '@ tstCompObjRun' ,
, '$$ out .$"$@¢o1!" $$.$.@¢ $$. m.tstComp.1 $!',
, '$$ out .$"$<@¢$$abc $$efg$!" $$.$.<@¢ $$abc ', ' ', ' $$efg $!'
m.t.trans.0 = 0
/*
$=/tstCompObj/
### start tst tstCompObj ##########################################
compile @, 6 lines: o1=m.tstComp.1
run without input
out . o1
tstR: @tstWriteoV1 isA :tstCompCla = o1
tstR: .FEINS = o1.fEins
tstR: .FZWEI = o1.2
out .{ o2 }
tstR: @tstWriteoV2 isA :tstCompCla = o2
tstR: .FEINS = o2.1
tstR: .FZWEI = o2.fZwei2
out .¢ o1, o2!
tstR: @tstWriteoV1 isA :tstCompCla = o1
tstR: .FEINS = o1.fEins
tstR: .FZWEI = o1.2
tstR: @tstWriteoV2 isA :tstCompCla = o2
tstR: .FEINS = o2.1
tstR: .FZWEI = o2.fZwei2
$/tstCompObj/ */
call tstComp1 '@ tstCompObj' ,
, 'o1=m.tstComp.1',
, 'o2 = m.tstComp.2' ,
, '$$ out . o1 $$. o1',
, '$$ out .{ o2 } $$.{ o2 }',
, '$$ out .¢ o1, o2!$; $@<.¢ m.tstComp.1 ', ' m.tstComp.2 $!'
return
m.t.trans.0 = 0
endProcedure tstCompObj
tstCompORun: procedure expose m.
/*
$=/tstCompORun/
### start tst tstCompORun #########################################
compile @, 6 lines: $@oRun()
run without input
oRun arg=1, v2=, v3=, v4=
oRun arg=1, v2=, v3=, v4=
oRun arg=2, v2=-{1 arg only} oder?, v3=, v4=
oRun arg=2, v2=!.{1 obj only} oder?, v3=, v4=
oRun arg=3, v2={2 args}, v3=und zwei?, v4=
oRun arg=4, v2={3 args}, v3=zwei, v4=und drei?
$/tstCompORun/ */
call compIni
call envPutO 'oRun', oRunner('parse arg , v2, v3, v4;',
'call tstOut t, "oRun arg="arg()", v2="v2", v3="v3", v4="v4' )
call tstComp1 '@ tstCompORun',
, '$@oRun()', '$@oRun-{}' ,
, ' $@oRun-{$"-{1 arg only}" ''oder?''}' ,
, ' $@oRun.{$".{1 obj only}" ''oder?''} $=v2=zwei' ,
, ' $@oRun-{$"{2 args}", "und" $v2"?"}' ,
, ' $@oRun-{$"{3 args}", $v2, "und drei?"}'
return
endProcedure tstCompORun
tstCompDataIO: procedure expose m.
/*
$=/tstCompDataHereData/
### start tst tstCompDataHereData #################################
compile =, 13 lines: herdata $@#/stop/ .
run without input
. herdata .
heredata 1 $x
heredata 2 $y
nach heredata
. herdata ¢ .
heredata 1 xValue
heredata 2 yValueY
nach heredata ¢
. herdata { .
HEREDATA 1 xValue
heredata 2 yValueY
nach heredata {
$/tstCompDataHereData/ */
call tstComp1 '= tstCompDataHereData',
, ' herdata $@#/stop/ ',
, 'heredata 1 $x',
, 'heredata 2 $y',
, '$/stop/ $$ nach heredata',
, ' herdata ¢ $@=/stop/ ',
, '$=x=xValue$=y=yValueY',
, 'heredata 1 $x',
, 'heredata 2 $y',
, '$/stop/ $$ nach heredata ¢',
, ' herdata { $@/st/',
, '; call out heredata 1 $x',
, '$$heredata 2 $y',
, '$/st/ $$ nach heredata {'
/*
$=/tstCompDataIO/
### start tst tstCompDataIO #######################################
compile =, 5 lines: input 1 $@.<$dsn $*+.
run without input
. input 1 .
readInp line 1 .
readInp line 2 .
. nach dsn input und nochmals mit & .
readInp line 1 .
readInp line 2 .
. und schluiss..
$/tstCompDataIO/ */
dsn = word(tstPdsMbr(tstFilename('lib37', 'r'), 'readInp'), 1)
dsnFB = strip(dsn tstFB('::F37', 0))
b = jBuf(tstFB('readInp line 1', 37),
,tstFB('readInp line 2', 37))
extFd = tstFB('&dsn('dsn') dd(xyz)', 0)
extFd = tstFB(dsn 'dd(xyz) ::f', 0)
if extFd = '' then
extFd = dsn
call jCat file(dsnFB), b
call envPut 'dsn', dsn
say 'dsn' dsn 'extFD' extFD'?'
call tstComp1 '= tstCompDataIO',
, ' input 1 $@.<$dsn $*+',
, tstFB('::f', 0),
, ' nach dsn input und nochmals mit & ' ,
, ' $@.<' extFD,
, ' und schluiss.'
return
endProcedure tstCompDataIO
tstObjVF: procedure expose m.
parse arg v, f
obj = oNew(classNew('n? TstClassVF u v, f FLD1 v'))
m.obj = if(f=='','val='v, v)
m.obj.fld1 = if(f=='','FLD1='v, f)
return obj
endProcedure tstObjVF
tstCompFile: procedure expose m.
/*
$=/tstCompFileBloSrc/
$=vv=value-of-vv
###file from empty # block
$@<#¢
$!
###file from 1 line # block
$@<#¢
the only $ix+1/0 line $vv
$!
###file from 2 line # block
$@<#¢
first line /0 $*+ no comment
second and last line $$ $wie
$!
===file from empty = block
$@<=¢ $*+ comment
$!
===file from 1 line = block
$@<=¢ the only line $!
===file from 2 line = block
$@<=¢ first line$** comment
second and last line $!
---file from empty - block
$@<-/s/
$/s/
---file from 1 line - block
$@<-/s/ the only "line" (1*1) $/s/
---file from 2 line = block
$@<-// first "line" (1+0)
second and "last line" (1+1) $//
...file from empty . block
$@<.¢
$!
...file from 1 line . block
$@<.¢ tstObjVF('v-Eins', '1-Eins') $!
...file from 2 line . block
$@<.¢ tstObjVF('v-Elf', '1-Elf')
tstObjVF('zwoelf') $!
...file from 3 line . block
$@<.¢ tstObjVF('einUndDreissig')
s2o('zweiUndDreissig' o2String($vv))
tstObjVF('dreiUndDreissig') $!
@@@file from empty @ block
$@<@¢
$!
$=noOutput=before
@@@file from nooutput @ block
$@<@¢ nop
$=noOutput = run in block $!
@@@nach noOutput=$noOutput
@@@file from 1 line @ block
$@<@¢ $$. tstObjVF('w-Eins', 'w1-Eins') $!
@@@file from 2 line @ block
$@<@¢ $$.tstObjVF('w-Elf', 'w1-Elf')
y='zwoelf' $$-y $!
@@@file from 3 line @ block
$@<@¢ $$.tstObjVF('w einUndDreissig') $$ +
zweiUndDreissig $$ 33 $vv$!
{{{ empty { block
$@<{ }
{{{ empty { block with comment
$@<{ $*+ abc
}
{{{ one line { block
$@<{ the only $"{...}" line $*+.
$vv }
{{{ one line -{ block
$@<-{ the only $"-{...}" "line" $vv }
{{{ empty #{ block
$@<#{ }
{{{ one line #{ block
$@<#{ the only $"-{...}" "line" $vv ${vv${x}} }
$/tstCompFileBloSrc/ */
/*
$=/tstCompFileBlo/
### start tst tstCompFileBlo ######################################
compile =, 70 lines: $=vv=value-of-vv
run without input
###file from empty # block
###file from 1 line # block
the only $ix+1/0 line $vv
###file from 2 line # block
first line /0 $*+ no comment
second and last line $$ $wie
===file from empty = block
===file from 1 line = block
. the only line .
===file from 2 line = block
. first line
second and last line .
---file from empty - block
---file from 1 line - block
THE ONLY line 1
---file from 2 line = block
FIRST line 1
SECOND AND last line 2
...file from empty . block
...file from 1 line . block
tstR: @tstWriteoV1 isA :TstClassVF = v-Eins
tstR: .FLD1 = 1-Eins
...file from 2 line . block
tstR: @tstWriteoV2 isA :TstClassVF = v-Elf
tstR: .FLD1 = 1-Elf
tstR: @tstWriteoV3 isA :TstClassVF = val=zwoelf
tstR: .FLD1 = FLD1=zwoelf
...file from 3 line . block
tstR: @tstWriteoV4 isA :TstClassVF = val=einUndDreissig
tstR: .FLD1 = FLD1=einUndDreissig
zweiUndDreissig value-of-vv
tstR: @tstWriteoV5 isA :TstClassVF = val=dreiUndDreissig
tstR: .FLD1 = FLD1=dreiUndDreissig
@@@file from empty @ block
@@@file from nooutput @ block
@@@nach noOutput=run in block
@@@file from 1 line @ block
tstR: @tstWriteoV6 isA :TstClassVF = w-Eins
tstR: .FLD1 = w1-Eins
@@@file from 2 line @ block
tstR: @tstWriteoV7 isA :TstClassVF = w-Elf
tstR: .FLD1 = w1-Elf
zwoelf
@@@file from 3 line @ block
tstR: @tstWriteoV8 isA :TstClassVF = val=w einUndDreissig
tstR: .FLD1 = FLD1=w einUndDreissig
zweiUndDreissig
33 value-of-vv
{{{ empty { block
{{{ empty { block with comment
{{{ one line { block
the only {...} line value-of-vv
{{{ one line -{ block
THE ONLY -{...} line value-of-vv
{{{ empty #{ block
. .
{{{ one line #{ block
. the only $"-{...}" "line" $vv ${vv${x}} .
$/tstCompFileBlo/ */
call tstComp2 'tstCompFileBlo', '='
m.t.trans.0 = 0
/*
$=/tstCompFileObjSrc/
$=vv=value-vv-1
$=fE=<¢ $!
$=f2=.$.<.¢s2o("f2 line 1" o2String($vv))
tstObjVF("f2 line2") $!
---empty file $"$@<$fE"
$@$fE
---file with 2 lines $"$@<$f2"
$@<.$f2
$=vv=value-vv-2
---file with 2 lines $"$@<$f2"
$@<.$f2
$= dsn =- word(tstPdsMbr(tstFilename('libvb', 'r'), 'fileObj'),1) +
tstFB('::V', 0)
$@¢
fi=jOpen(file($dsn),'>')
call jWrite fi, 'line one on' $"$dsn"
call jWrite fi, 'line two on' $"$dsn"
call jClose fi
$!
---file on disk out
$@.<$dsn
$/tstCompFileObjSrc/ */
/*
$=/tstCompFileObj/
### start tst tstCompFileObj ######################################
compile =, 20 lines: $=vv=value-vv-1
run without input
---empty file $@<$fE
---file with 2 lines $@<$f2
f2 line 1 value-vv-1
tstR: @tstWriteoV1 isA :TstClassVF = val=f2 line2
tstR: .FLD1 = FLD1=f2 line2
---file with 2 lines $@<$f2
f2 line 1 value-vv-1
tstR: @tstWriteoV1 isA :TstClassVF = val=f2 line2
tstR: .FLD1 = FLD1=f2 line2
---file on disk out
line one on $dsn
line two on $dsn
$/tstCompFileObj/ */
call tstComp2 'tstCompFileObj', '='
return
endProcedure tstCompFile
tstCompPipe: procedure expose m.
/*
$=/tstCompPipe1/
### start tst tstCompPipe1 ########################################
compile @, 1 lines: call pipePreSuf "(1 ", " 1)"
run without input
#jIn eof 1#
run with 3 inputs
#jIn 1# eins zwei drei
(1 eins zwei drei 1)
#jIn 2# zehn elf zwoelf?
(1 zehn elf zwoelf? 1)
#jIn 3# zwanzig 21 22 23 24 ... 29|
(1 zwanzig 21 22 23 24 ... 29| 1)
#jIn eof 4#
$/tstCompPipe1/ */
call tstComp1 '@ tstCompPipe1 3',
, ' call pipePreSuf "(1 ", " 1)"'
/*
$=/tstCompPipe2/
### start tst tstCompPipe2 ########################################
compile @, 2 lines: call pipePreSuf "(1 ", " 1)"
run without input
#jIn eof 1#
run with 3 inputs
#jIn 1# eins zwei drei
#jIn 2# zehn elf zwoelf?
#jIn 3# zwanzig 21 22 23 24 ... 29|
#jIn eof 4#
¢2 (1 eins zwei drei 1) 2!
¢2 (1 zehn elf zwoelf? 1) 2!
¢2 (1 zwanzig 21 22 23 24 ... 29| 1) 2!
$/tstCompPipe2/ */
call tstComp1 '@ tstCompPipe2 3',
, ' call pipePreSuf "(1 ", " 1)"' ,
, ' $| call pipePreSuf "¢2 ", " 2!"'
/*
$=/tstCompPipe3/
### start tst tstCompPipe3 ########################################
compile @, 3 lines: call pipePreSuf "(1 ", " 1)"
run without input
#jIn eof 1#
run with 3 inputs
#jIn 1# eins zwei drei
#jIn 2# zehn elf zwoelf?
#jIn 3# zwanzig 21 22 23 24 ... 29|
#jIn eof 4#
<3 ¢2 (1 eins zwei drei 1) 2! 3>
<3 ¢2 (1 zehn elf zwoelf? 1) 2! 3>
<3 ¢2 (1 zwanzig 21 22 23 24 ... 29| 1) 2! 3>
$/tstCompPipe3/ */
call tstComp1 '@ tstCompPipe3 3',
, ' call pipePreSuf "(1 ", " 1)"' ,
, ' $| call pipePreSuf "¢2 ", " 2!"',
, ' $| call pipePreSuf "<3 ", " 3>"'
/*
$=/tstCompPipe4/
### start tst tstCompPipe4 ########################################
compile @, 7 lines: call pipePreSuf "(1 ", " 1)"
run without input
#jIn eof 1#
run with 3 inputs
#jIn 1# eins zwei drei
#jIn 2# zehn elf zwoelf?
#jIn 3# zwanzig 21 22 23 24 ... 29|
#jIn eof 4#
<3 ¢222 ¢221 ¢21 ¢20 (1 eins zwei drei 1) 20! 21! 221! 222! 3>
<3 ¢222 ¢221 ¢21 ¢20 (1 zehn elf zwoelf? 1) 20! 21! 221! 222! 3>
<3 ¢222 ¢221 ¢21 ¢20 (1 zwanzig 21 22 23 24 ... 29| 1) 20! 21! 221!+
. 222! 3>
$/tstCompPipe4/ */
call tstComp1 '@ tstCompPipe4 3',
, ' call pipePreSuf "(1 ", " 1)"' ,
, ' $| $@¢ call pipePreSuf "¢20 ", " 20!"',
, ' $| call pipePreSuf "¢21 ", " 21!"',
, ' $| $@¢ call pipePreSuf "¢221 ", " 221!"',
, ' $| call pipePreSuf "¢222 ", " 222!"',
, '$! $! ',
, ' $| call pipePreSuf "<3 ", " 3>"'
return
endProcedure tstCompPipe
tstCompRedir: procedure expose m.
/*
$=/tstCompRedir/
### start tst tstCompRedir ########################################
compile @, 6 lines: $>.$eins $@for vv $$ <$vv> $; .
run without input
#jIn eof 1#
output eins .
output piped zwei .
run with 3 inputs
#jIn 1# eins zwei drei
#jIn 2# zehn elf zwoelf?
#jIn 3# zwanzig 21 22 23 24 ... 29|
#jIn eof 4#
output eins <eins zwei drei> <zehn elf zwoelf?> <zwanzig 21 22 23 2+
4 ... 29|>
output piped zwei ab<eins zwei drei>yz ab<zehn elf zwoelf?>yz ab<zw+
anzig 21 22 23 24 ... 29|>yz
$/tstCompRedir/ */
call pipeIni
call envRemove 'eins' /* alte Variable loswerden */
dsn = word(tstPdsMbr(tstFilename('libvb', 'r'), 'redir1'), 1)
call envPut 'dsn', dsn
call tstComp1 '@ tstCompRedir 3' ,
, ' $>.$eins $@for vv $$ <$vv> $; ',
, ' $$ output eins $-=¢$@$eins$!$; ',
, ' $@for ww $$b${ww}y ',
, ' $>$-{ $dsn } 'tstFB('::v', 0),
, '$| call pipePreSuf "a", "z" $<.$eins',
, ' $; $$ output piped zwei $-=¢$@<$dsn$! '
return
endProcedure tstCompRedir
tstCompComp: procedure expose m.
/*
$=/tstCompCompShell/
### start tst tstCompCompShell ####################################
compile @, 5 lines: $$compiling shell $; $= rrr =. $.compile@ $<#/+
aaa/
run without input
compiling shell
running einmal
RUN 1 COMPILED einmal
#jIn eof 1#
running zweimal
RUN 1 COMPILED zweimal
#jIn eof 2#
run with 3 inputs
compiling shell
running einmal
RUN 1 COMPILED einmal
#jIn 1# eins zwei drei
compRun eins zwei dreieinmal
#jIn 2# zehn elf zwoelf?
compRun zehn elf zwoelf?einmal
#jIn 3# zwanzig 21 22 23 24 ... 29|
compRun zwanzig 21 22 23 24 ... 29|einmal
#jIn eof 4#
running zweimal
RUN 1 COMPILED zweimal
#jIn eof 5#
$/tstCompCompShell/ */
call tstComp1 '@ tstCompCompShell 3',
, "$$compiling shell $; $= rrr =. $.compile@ $<#/aaa/",
, "call out run 1*1*1 compiled $cc; $@for v $$ compRun $v$cc",
, "$/aaa/ $;",
, "$=cc=einmal $$ running $cc $@$rrr",
, "$=cc=zweimal $$ running $cc $@$rrr"
/*
$=/tstCompCompData/
### start tst tstCompCompData #####################################
compile @, 5 lines: $$compiling data $; $= rrr =. $.compile= +
$<#/aaa/
run without input
compiling data
running einmal
call out run 1*1*1 compiled einmal
running zweimal
call out run 1*1*1 compiled zweimal
run with 3 inputs
compiling data
running einmal
call out run 1*1*1 compiled einmal
running zweimal
call out run 1*1*1 compiled zweimal
$/tstCompCompData/ */
call tstComp1 '@ tstCompCompData 3',
, "$$compiling data $; $= rrr =. $.compile= $<#/aaa/",
, "call out run 1*1*1 compiled $cc",
, "$/aaa/ $;",
, "$=cc=einmal $$ running $cc $@$rrr",
, "$=cc=zweimal $$ running $cc $@$rrr"
return
endProcedure tstCompComp
tstCompDir: procedure expose m.
/*
$=/tstCompDirSrc/
'in src v1='$v1
$#@ call out 'src @ out v1='$v1
$#. s2o('src . v1=')
$v1
$#- 'src - v1='$v1
$#= src = v1=$v1
$/tstCompDirSrc/ */
/*
$=/tstCompDir/
### start tst tstCompDir ##########################################
compile call out 'before v1='$v1 $=v1=eins $#. s2o('. v1='$-$v1) $#+
@ call out '@ v1='$v1 $#= = v1=$v1 $#- '- v1='$v1, 6 lines: 'in src+
. v1='$v1
run without input
before v1=v1Before
.. v1=eins
@ v1=eins
. = v1=eins .
- v1=eins
in src v1=eins
src @ out v1=eins
src . v1=
eins
src - v1=eins
. src = v1=eins
$/tstCompDir/ */
call envPut 'v1', 'v1Before'
call tstComp2 'tstCompDir', "call out 'before v1='$v1 $=v1=eins" ,
"$#. s2o('. v1='$-$v1) $#@ call out '@ v1='$v1" ,
"$#= = v1=$v1 $#- '- v1='$v1"
/*
$=/tstCompDirPiSrc/
zeile 1 v1=$v1
zweite Zeile vor $"$@$#-"
$@pi2()
$#pi2#-
$'zeile drei nach $@$#- v1='v1
vierte und letzte Zeile
$/tstCompDirPiSrc/ */
/*
$=/tstCompDirPi/
### start tst tstCompDirPi ########################################
compile call pipePreSuf '<','>' $=v1=eiPi $<.$pi $#pi#=, 6 lines: +
zeile 1 v1=$v1
run without input
<zeile 1 v1=eins>
<zweite Zeile vor $@$#->
<zeile drei nach $@$#- v1=V1>
<VIERTE UND LETZTE ZEILE>
$/tstCompDirPi/ */
call tstComp2 'tstCompDirPi',
, "call pipePreSuf '<','>' $=v1=eiPi $<.$pi $#pi#="
return
endProcedure tstCompDir
tstCompSql: procedure expose m.
/*
$=/tstCompSqlSrc/
$@=¢
select strip(creator) cr, strip(name) tb,
(row_number()over())*(row_number()over()) rr
from sysibm.sysTables
where creator='SYSIBM' and name like 'SYSTABL%'
order by 2 fetch first 4 rows only
$!
$| call sqlSel
$| call fmtFTab abc
$/tstCompSqlSrc/
$=/tstCompSql/
### start tst tstCompSql ##########################################
compile @, 9 lines: $@=¢
run without input
CR TB RR
SYSIBM SYSTABLEPART 1
SYSIBM SYSTABLEPART_HIST 4
SYSIBM SYSTABLES 9
SYSIBM SYSTABLESPACE 16
$/tstCompSql/
*/
call sqlConnect
call tstComp2 'tstCompSql', '@'
return
endProcedure tstCompFile
tstTut0: procedure expose m.
/*
$=/tstTut01Src/
$#=
$*+>.fSub() Kommentar
$*+>~tmp.jcl(t) Kommentar
$*+@=¢ Kommentar
$=subsys=DBAF
$=db=DA540769
$=ts=A977A
$*+@<~wk.jcl(jc) Kommentar
??* -{sysvar(sysnode) date() time()} ts=$ts 10*len=$-{length($ts) * 10}
//P02 EXEC PGM=DSNUTILB,
// PARM='$subsys,A540769C.FULCOPL'
//SYSPRINT DD SYSOUT=*
//UTPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSTEMPL DD DSN=$subsys.DBAA.LISTDEF(TEMPL),DISP=SHR
//SYSIN DD *
LISTDEF C#LIST
INCLUDE TABLESPACE $db.$ts* PARTLEVEL
OPTIONS EVENT(ITEMERROR, SKIP)
COPY LIST C#LIST COPYDDN(TCOPYD)
$@¢if right($ts, 2) == '7A' then $@=¢
FULL YES
$! else
$$ $'' FULL NO
$!
SHRLEVEL CHANGE
$*+! Kommentar
$#out 20130224 11:48:24
$/tstTut01Src/
$=/tstTut01/
### start tst tstTut01 ############################################
compile , 28 lines: $#=
run without input
??* -{sysvar(sysnode) date() time()} ts=A977A 10*len=50
//P02 EXEC PGM=DSNUTILB,
// PARM='DBAF,A540769C.FULCOPL'
//SYSPRINT DD SYSOUT=*
//UTPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSTEMPL DD DSN=DBAF.DBAA.LISTDEF(TEMPL),DISP=SHR
//SYSIN DD *
LISTDEF C#LIST
INCLUDE TABLESPACE DA540769.A977A* PARTLEVEL
OPTIONS EVENT(ITEMERROR, SKIP)
COPY LIST C#LIST COPYDDN(TCOPYD)
FULL YES
SHRLEVEL CHANGE
$/tstTut01/
$=/tstTut02Src/
$#@
$**>.fSub()
$**@¢
$=subsys=DBAF
$=db=DA540769
$=jx=0
$@do tx = 976 to 977 $@=¢
$=ts=A$tx
$=jx=-$jx+1
//A540769$jx JOB (CP00,KE50),'DB2 REO',
// MSGCLASS=T,TIME=1440,
// NOTIFY=&SYSUID,REGION=0M
//C$ts EXEC PGM=DSNUTILB,
// PARM='$subsys,A540769$jx.FULCOPL'
//SYSPRINT DD SYSOUT=*
//UTPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSTEMPL DD DSN=$subsys.DBAA.LISTDEF(TEMPL),DISP=SHR
//SYSIN DD *
LISTDEF C#LIST
INCLUDE TABLESPACE $db.$ts* PARTLEVEL
OPTIONS EVENT(ITEMERROR, SKIP)
COPY LIST C#LIST COPYDDN(TCOPYD)
PARALLEL
SHRLEVEL CHANGE
$!
$**!
$#out 20101229 13
$/tstTut02Src/
$=/tstTut02/
### start tst tstTut02 ############################################
compile , 28 lines: $#@
run without input
//A5407691 JOB (CP00,KE50),'DB2 REO',
// MSGCLASS=T,TIME=1440,
// NOTIFY=&SYSUID,REGION=0M
//CA976 EXEC PGM=DSNUTILB,
// PARM='DBAF,A5407691.FULCOPL'
//SYSPRINT DD SYSOUT=*
//UTPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSTEMPL DD DSN=DBAF.DBAA.LISTDEF(TEMPL),DISP=SHR
//SYSIN DD *
LISTDEF C#LIST
INCLUDE TABLESPACE DA540769.A976* PARTLEVEL
OPTIONS EVENT(ITEMERROR, SKIP)
COPY LIST C#LIST COPYDDN(TCOPYD)
PARALLEL
SHRLEVEL CHANGE
//A5407692 JOB (CP00,KE50),'DB2 REO',
// MSGCLASS=T,TIME=1440,
// NOTIFY=&SYSUID,REGION=0M
//CA977 EXEC PGM=DSNUTILB,
// PARM='DBAF,A5407692.FULCOPL'
//SYSPRINT DD SYSOUT=*
//UTPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSTEMPL DD DSN=DBAF.DBAA.LISTDEF(TEMPL),DISP=SHR
//SYSIN DD *
LISTDEF C#LIST
INCLUDE TABLESPACE DA540769.A977* PARTLEVEL
OPTIONS EVENT(ITEMERROR, SKIP)
COPY LIST C#LIST COPYDDN(TCOPYD)
PARALLEL
SHRLEVEL CHANGE
$/tstTut02/
$=/tstTut03Src/
$#@
$=subsys=DBAF
$@|¢
db ts
DGDB9998 A976
DA540769 A977
!
$** $| call fmtFTab
$** $#end
$|
$=jx=0
$@forWith o $@=¢
$=jx=-$jx+1
//A540769$jx JOB (CP00,KE50),'DB2 REO',
// MSGCLASS=T,TIME=1440,
// NOTIFY=&SYSUID,REGION=0M
//C$ts EXEC PGM=DSNUTILB,
// PARM='$subsys,A540769$jx.FULCOPL'
//SYSPRINT DD SYSOUT=*
//UTPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSTEMPL DD DSN=$subsys.DBAA.LISTDEF(TEMPL),DISP=SHR
//SYSIN DD *
LISTDEF C#LIST
INCLUDE TABLESPACE $db.$ts* PARTLEVEL
OPTIONS EVENT(ITEMERROR, SKIP)
COPY LIST C#LIST COPYDDN(TCOPYD)
PARALLEL
SHRLEVEL CHANGE
$!
$#out
$/tstTut03Src/
$=/tstTut03/
### start tst tstTut03 ############################################
compile , 31 lines: $#@
run without input
//A5407691 JOB (CP00,KE50),'DB2 REO',
// MSGCLASS=T,TIME=1440,
// NOTIFY=&SYSUID,REGION=0M
//CA976 EXEC PGM=DSNUTILB,
// PARM='DBAF,A5407691.FULCOPL'
//SYSPRINT DD SYSOUT=*
//UTPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSTEMPL DD DSN=DBAF.DBAA.LISTDEF(TEMPL),DISP=SHR
//SYSIN DD *
LISTDEF C#LIST
INCLUDE TABLESPACE DGDB9998.A976* PARTLEVEL
OPTIONS EVENT(ITEMERROR, SKIP)
COPY LIST C#LIST COPYDDN(TCOPYD)
PARALLEL
SHRLEVEL CHANGE
//A5407692 JOB (CP00,KE50),'DB2 REO',
// MSGCLASS=T,TIME=1440,
// NOTIFY=&SYSUID,REGION=0M
//CA977 EXEC PGM=DSNUTILB,
// PARM='DBAF,A5407692.FULCOPL'
//SYSPRINT DD SYSOUT=*
//UTPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSTEMPL DD DSN=DBAF.DBAA.LISTDEF(TEMPL),DISP=SHR
//SYSIN DD *
LISTDEF C#LIST
INCLUDE TABLESPACE DA540769.A977* PARTLEVEL
OPTIONS EVENT(ITEMERROR, SKIP)
COPY LIST C#LIST COPYDDN(TCOPYD)
PARALLEL
SHRLEVEL CHANGE
$/tstTut03/
$=/tstTut04Src/
$#@
$=subsys=DBAF
$=db=DA540769
call sqlConnect $subsys
$@=¢ select dbName db , tsName ts
from sysibm.sysTables
where creator = 'SYSIBM' and name like 'SYSINDEXPAR%'
order by name desc
$!
$| call sqlSel
$** $| call fmtFTab
$** $#end
$|
$=jx=0
$@forWith o $@=¢
$=jx=-$jx+1
//A540769$jx JOB (CP00,KE50),'DB2 REO',
// MSGCLASS=T,TIME=1440,
// NOTIFY=&SYSUID,REGION=0M
//C$TS EXEC PGM=DSNUTILB,
// PARM='$subsys,A540769$jx.FULCOPL'
//SYSPRINT DD SYSOUT=*
//UTPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSTEMPL DD DSN=$subsys.DBAA.LISTDEF(TEMPL),DISP=SHR
//SYSIN DD *
LISTDEF C#LIST
INCLUDE TABLESPACE $DB.$TS* PARTLEVEL
OPTIONS EVENT(ITEMERROR, SKIP)
COPY LIST C#LIST COPYDDN(TCOPYD)
PARALLEL
SHRLEVEL CHANGE
$!
call sqlDisConnect
$#out 20101229
$/tstTut04Src/
$=/tstTut04/
### start tst tstTut04 ############################################
compile , 35 lines: $#@
run without input
//A5407691 JOB (CP00,KE50),'DB2 REO',
// MSGCLASS=T,TIME=1440,
// NOTIFY=&SYSUID,REGION=0M
//CSYSHIST EXEC PGM=DSNUTILB,
// PARM='DBAF,A5407691.FULCOPL'
//SYSPRINT DD SYSOUT=*
//UTPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSTEMPL DD DSN=DBAF.DBAA.LISTDEF(TEMPL),DISP=SHR
//SYSIN DD *
LISTDEF C#LIST
INCLUDE TABLESPACE DSNDB06 .SYSHIST * PARTLEVEL
OPTIONS EVENT(ITEMERROR, SKIP)
COPY LIST C#LIST COPYDDN(TCOPYD)
PARALLEL
SHRLEVEL CHANGE
//A5407692 JOB (CP00,KE50),'DB2 REO',
// MSGCLASS=T,TIME=1440,
// NOTIFY=&SYSUID,REGION=0M
//CSYSTSIPT EXEC PGM=DSNUTILB,
// PARM='DBAF,A5407692.FULCOPL'
//SYSPRINT DD SYSOUT=*
//UTPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSTEMPL DD DSN=DBAF.DBAA.LISTDEF(TEMPL),DISP=SHR
//SYSIN DD *
LISTDEF C#LIST
INCLUDE TABLESPACE DSNDB06 .SYSTSIPT* PARTLEVEL
OPTIONS EVENT(ITEMERROR, SKIP)
COPY LIST C#LIST COPYDDN(TCOPYD)
PARALLEL
SHRLEVEL CHANGE
$/tstTut04/
$=/tstTut05Src/
$#@
$=subsys = dbaf
$=lst=<:¢
db = DGDB9998
ts =<|¢
ts
A976
A977
!;
db = DA540769
<|/ts/
ts
A976
A975
/ts/
!
$** $$. $lst
$** $@ct $@¢$=tool =. $.compile@ $<~.wk.rexx(wshtut06)$!
$** $@$tool
$@do sx=1 to ${lst.0} $@¢
$=db = ${lst.$sx.db}
$** $$. ${lst.$sx}
$@do tx=1 to ${lst.$sx.ts.0} $@=¢
$*+ $$. ${lst.$sx.ts.$tx}
$=ts= ${lst.$sx.ts.$tx.ts}
$@¢ say $-=¢subsys $subsys db $db ts $ts $! $!
$@copy()
$!
$!
$@ct $@¢
cl = classNew('n? DbTsList u s' ,
classNew('n? DbTs u f db v, f ts s' ,
classNew('n? Ts u f ts v')))
$=lst=. oNew(cl)
$!
$@proc copy $@=¢
$@ct $=jx=0
$=jx=-$jx+1
//A540769$jx JOB (CP00,KE50),'DB2 REO',
// MSGCLASS=T,TIME=1440,
// NOTIFY=&SYSUID,REGION=0M
//C$ts EXEC PGM=DSNUTILB,
// PARM='$subsys,A540769$jx.FULCOPL'
//SYSPRINT DD SYSOUT=*
//UTPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSTEMPL DD DSN=$subsys.DBAA.LISTDEF(TEMPL),DISP=SHR
//SYSIN DD *
LISTDEF C#LIST
INCLUDE TABLESPACE $db.$ts* PARTLEVEL
OPTIONS EVENT(ITEMERROR, SKIP)
COPY LIST C#LIST COPYDDN(TCOPYD)
PARALLEL
SHRLEVEL CHANGE
$!
$#out 201012
$/tstTut05Src/
$=/tstTut05/
### start tst tstTut05 ############################################
compile , 56 lines: $#@
run without input
//A5407691 JOB (CP00,KE50),'DB2 REO',
// MSGCLASS=T,TIME=1440,
// NOTIFY=&SYSUID,REGION=0M
//CA976 EXEC PGM=DSNUTILB,
// PARM='dbaf,A5407691.FULCOPL'
//SYSPRINT DD SYSOUT=*
//UTPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSTEMPL DD DSN=dbaf.DBAA.LISTDEF(TEMPL),DISP=SHR
//SYSIN DD *
LISTDEF C#LIST
INCLUDE TABLESPACE DGDB9998.A976* PARTLEVEL
OPTIONS EVENT(ITEMERROR, SKIP)
COPY LIST C#LIST COPYDDN(TCOPYD)
PARALLEL
SHRLEVEL CHANGE
//A5407692 JOB (CP00,KE50),'DB2 REO',
// MSGCLASS=T,TIME=1440,
// NOTIFY=&SYSUID,REGION=0M
//CA977 EXEC PGM=DSNUTILB,
// PARM='dbaf,A5407692.FULCOPL'
//SYSPRINT DD SYSOUT=*
//UTPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSTEMPL DD DSN=dbaf.DBAA.LISTDEF(TEMPL),DISP=SHR
//SYSIN DD *
LISTDEF C#LIST
INCLUDE TABLESPACE DGDB9998.A977* PARTLEVEL
OPTIONS EVENT(ITEMERROR, SKIP)
COPY LIST C#LIST COPYDDN(TCOPYD)
PARALLEL
SHRLEVEL CHANGE
//A5407693 JOB (CP00,KE50),'DB2 REO',
// MSGCLASS=T,TIME=1440,
// NOTIFY=&SYSUID,REGION=0M
//CA976 EXEC PGM=DSNUTILB,
// PARM='dbaf,A5407693.FULCOPL'
//SYSPRINT DD SYSOUT=*
//UTPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSTEMPL DD DSN=dbaf.DBAA.LISTDEF(TEMPL),DISP=SHR
//SYSIN DD *
LISTDEF C#LIST
INCLUDE TABLESPACE DA540769.A976* PARTLEVEL
OPTIONS EVENT(ITEMERROR, SKIP)
COPY LIST C#LIST COPYDDN(TCOPYD)
PARALLEL
SHRLEVEL CHANGE
//A5407694 JOB (CP00,KE50),'DB2 REO',
// MSGCLASS=T,TIME=1440,
// NOTIFY=&SYSUID,REGION=0M
//CA975 EXEC PGM=DSNUTILB,
// PARM='dbaf,A5407694.FULCOPL'
//SYSPRINT DD SYSOUT=*
//UTPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSTEMPL DD DSN=dbaf.DBAA.LISTDEF(TEMPL),DISP=SHR
//SYSIN DD *
LISTDEF C#LIST
INCLUDE TABLESPACE DA540769.A975* PARTLEVEL
OPTIONS EVENT(ITEMERROR, SKIP)
COPY LIST C#LIST COPYDDN(TCOPYD)
PARALLEL
SHRLEVEL CHANGE
$/tstTut05/
tstTut06 ==> platz für copy aus tut05
$=/tstTut07Src/
$**$>.fEdit()
call sqlConnect dbtf
$@|¢ ts
VTCASHFLOW
VTCASHFLOWAMOUNT
VTINSTRFLATDATA
$!
$| $@=¢
select name, statstime, strip(dbName) || '.' || strip(tsName) dbts
from sysibm.sysTables
where creator = 'VDPS2' and name in
$=co=(
$@forWith t $@=¢
$co '$ts'
$=co=,
$!
)
$!
$| call sqlSel
$** $| call fmtFtab
$|
$=jx=0
$@forWith t $@=¢
$=jx=-$jx+1
//A540769$jx JOB (CP00,KE50),
// 'CATALOG',MSGCLASS=T,TIME=1440,
// NOTIFY=&SYSUID,REGION=0M
//STEP$jx EXEC PGM=DSNUTILB,TIME=1440,
// PARM=(DBTF,'A540769$jx.RUNSTA'),
// REGION=0M
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//UTPRINT DD SYSOUT=*
//SYSOUT DD SYSOUT=*
//RNPRIN01 DD SYSOUT=*
//SYSIN DD *
LISTDEF LST#STA INCLUDE TABLESPACE $DBTS
OPTIONS EVENT (ITEMERROR, SKIP)
RUNSTATS TABLESPACE LIST LST#STA
SHRLEVEL CHANGE
INDEX(ALL KEYCARD)
REPORT YES UPDATE ALL
$!
call sqlDisconnect dbaf
$#out 20101231 11:56:23
$/tstTut07Src/
$=/tstTut07/
$=/tstTut07/
### start tst tstTut07 ############################################
compile , 46 lines: $**$>.fEdit()
run without input
//A5407691 JOB (CP00,KE50),
// 'CATALOG',MSGCLASS=T,TIME=1440,
// NOTIFY=&SYSUID,REGION=0M
//STEP1 EXEC PGM=DSNUTILB,TIME=1440,
// PARM=(DBTF,'A5407691.RUNSTA'),
// REGION=0M
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//UTPRINT DD SYSOUT=*
//SYSOUT DD SYSOUT=*
//RNPRIN01 DD SYSOUT=*
//SYSIN DD *
LISTDEF LST#STA INCLUDE TABLESPACE VV27A1T.VDPS329
OPTIONS EVENT (ITEMERROR, SKIP)
..
RUNSTATS TABLESPACE LIST LST#STA
SHRLEVEL CHANGE
INDEX(ALL KEYCARD)
REPORT YES UPDATE ALL
//A5407692 JOB (CP00,KE50),
// 'CATALOG',MSGCLASS=T,TIME=1440,
// NOTIFY=&SYSUID,REGION=0M
//STEP2 EXEC PGM=DSNUTILB,TIME=1440,
// PARM=(DBTF,'A5407692.RUNSTA'),
// REGION=0M
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//UTPRINT DD SYSOUT=*
//SYSOUT DD SYSOUT=*
//RNPRIN01 DD SYSOUT=*
//SYSIN DD *
LISTDEF LST#STA INCLUDE TABLESPACE VV28A1T.VDPS390
OPTIONS EVENT (ITEMERROR, SKIP)
..
RUNSTATS TABLESPACE LIST LST#STA
SHRLEVEL CHANGE
INDEX(ALL KEYCARD)
REPORT YES UPDATE ALL
//A5407693 JOB (CP00,KE50),
// 'CATALOG',MSGCLASS=T,TIME=1440,
// NOTIFY=&SYSUID,REGION=0M
//STEP3 EXEC PGM=DSNUTILB,TIME=1440,
// PARM=(DBTF,'A5407693.RUNSTA'),
// REGION=0M
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//UTPRINT DD SYSOUT=*
//SYSOUT DD SYSOUT=*
//RNPRIN01 DD SYSOUT=*
//SYSIN DD *
LISTDEF LST#STA INCLUDE TABLESPACE VV21A1T.VDPS004
OPTIONS EVENT (ITEMERROR, SKIP)
..
RUNSTATS TABLESPACE LIST LST#STA
SHRLEVEL CHANGE
INDEX(ALL KEYCARD)
REPORT YES UPDATE ALL
$/tstTut07/
$=/tstTut08Src/
$/tstTut08Src/
$=/tstTut08/
$/tstTut08/
*/
call sqlOIni
call sqlDisconnect '*'
call tstComp2 'tstTut01'
call tstComp2 'tstTut02'
call tstComp2 'tstTut03'
call tstComp2 'tstTut04'
call tstComp2 'tstTut05'
call tstComp2 'tstTut07'
call tstTotal
return
endProcedure tstTut0
/* copx tstComp end *************************************************/
/* copx tstBase begin **************************************************
test the basic classes
***********************************************************************/
tstBase: procedure expose m.
call tstTstSay
call oIni
call scanIni
call tstO
call tstM
call classIni
call tstMCat
call tstMap
call tstMapVia
call tstClass
call tstClass2
call tstOEins
call tstOGet
call jIni
call tstJSay
call tstJ
call tstJ2
call tstJCatSql
call catIni
call tstCat
call pipeIni
CALL TstEnv
CALL TstEnvCat
call tstPipe
call tstPipeS
call tstEnvVars
call tstEnvWith
call tstTotal
call tstPipeLazy
call tstEnvClass
call tstFile
call tstFileList
call tstF
call tstFTab
call tstFmt
call tstFmtUnits
call tstTotal
call tstSb
call tstSb2
call tstScan
call ScanReadIni
call tstScanRead
call tstScanUtilInto
call tstScanWin
call tstScanSQL
call tstTotal
return
endProcedure tstBase
/*--- test the tst Module, check the output visually ----------------*/
tstTstSay: procedure expose m.
call tstIni
oldErr = m.tst.err
oldNames = m.tst.errNames
say '+++ tstTstSay start with' oldErr 'totErrs and',
m.tst.tests 'tests'
/*
$=/tstTstSayEins/
### start tst tstTstSayEins #######################################
test eins einzige testZeile
$/tstTstSayEins/
$=/tstTstSayZwei/
### start tst tstTstSayZwei #######################################
zwei 1. testZeile
zwei 2. und letzte testZeile
$/tstTstSayZwei/
$=/tstTstSayDrei/
### start tst tstTstSayDrei #######################################
drei 1. testZeile vor empty Zeile
..
drei 3. testZeile vor 10 space
. .
drei 5. testZeile ziemlich lang 66 +
. 77 5 10 15++++++++++++++++++++
.+++++++++++++++++++++++++++++++++++++++++++.
$/tstTstSayDrei/
*/
call tst x, 'tstTstSayEins'
call tstOut x, "test eins einzige testZeile"
call tstEnd x, 'err 0'
call tst x, 'tstTstSayZwei'
call tstOut x, "zwei 1. testZeile"
call tstOut x, "zwei 2. und letzte testZeile"
call tstEnd x, 'err 0'
call tst x, 'tstTstSayZwei'
call tstOut x, "zwei 1. testZeile " /* ein space zuviel */
call tstOut x, "zwei 2. und letzte testZeile"
call tstOut x, "zwei 3. zuviel"
call tstEnd x, 'err 3'
call tst y, 'tstTstSayDrei'
call tstOut y, 'drei 1. testZeile vor empty Zeile'
call tstOut y, ''
call tstOut y, 'drei 3. testZeile vor 10 space'
call tstOut y, left('', 10)
call tstOut y, 'drei 5. testZeile ziemlich lang',
left(66, 66) left('77 5 10 15', 77, '+')
call tstEnd y, 'err 0'
if m.y.err <> 0 then
call err '+++ tstTstSay errs' m.x.err 'expected' 0
if m.tst.err <> oldErr + 3 then
call err '+++ tstTstSay totErrs' m.tst.err 'expected' 3
say '+++ tstTstSay end Ok with' m.tst.err 'totErrs and' ,
m.tst.tests 'tests'
m.tst.err = oldErr
m.tst.errNames = oldNames
return
endProcedure tstTstSay
tstMark: procedure expose m.
parse arg m, msg
if symbol('m.m') == 'VAR' then
m.m = msg';' m.m
else
m.m = msg 'new'
return m
endProcedure tstMark
tstM: procedure expose m.
/*
$=/tstMa/
### start tst tstMa ###############################################
mNew() 1=newM1 2=newM2
mNew(tst...) 2=2 new 3=4; 3; 1 new 4=5 new
iter 4; 3; 1 new
iter 2 new
iter 5 new
$/tstMa/
*/
call tst t, 'tstMa'
m1 = mNew()
m2 = mNew()
m.m1 = 'newM1'
m.m2 = 'newM2'
call tstOut t, 'mNew() 1='m.m1 '2='m.m2
call mNewArea 'tst'm1
t1 = tstMark(mNew('tst'm1), '1')
t2 = tstMark(mNew('tst'm1), '2')
call mFree tstMark(t1, '3')
t3 = tstMark(mNew('tst'm1), '4')
t4 = tstMark(mNew('tst'm1), '5')
call tstOut t, 'mNew(tst...) 2='m.t2 '3='m.t3 '4='m.t4
i = mIterBegin('tst'm1)
do while assNN('i', mIter(i))
call tstOut t, 'iter' m.i
end
call tstEnd t
/*
$=/tstM/
### start tst tstM ################################################
symbol m.b LIT
symbol m.a LIT
mAdd a A.2
mAdd a A.3
m.a: 3: 1=eins 2=zwei 3=drei 4=M.A.4
m.c: 5: 1=c vorAddSt a 2=eins 3=zwei 4=drei 5=c nacAddSt a 6=M.C.6
$/tstM/ */
drop m.b m.a m.a.0 m.a.1 m.a.2
call tst t, 'tstM'
call tstOut t, 'symbol m.b' symbol('m.b')
m.b = 1
call tstOut t, 'symbol m.a' symbol('m.a')
call tstOut t, 'mAdd a' mAdd(mCut(a, 0), 'eins', 'zwei')
call tstOut t, 'mAdd a' mAdd(a, 'drei')
call tstOut t, 'm.a:' m.a.0': 1='m.a.1 '2='m.a.2 '3='m.a.3 '4='m.a.4
call mAdd mCut(c, 0), 'c vorAddSt a'
call mAddSt c, a
call mAdd c, 'c nacAddSt a'
call tstOut t, 'm.c:' m.c.0': 1='m.c.1 '2='m.c.2 '3='m.c.3,
'4='m.c.4 '5='m.c.5 '6='m.c.6
call tstEnd t
return
endProcedure tstM
tstMCat: procedure expose m.
/*
$=/tstMCat/
### start tst tstMCat #############################################
mCat(0, ) =;
mCat(0, %qn1%s) =;
mCat(0, %qn112222%s%qe%s11) =;
mCat(0, 1%s%qn231%s%qe%s2) =;
mCat(0, 1%s2@%s%qn33341%s2@%s%=;
mCat(0, 1%s2@%s3@%s%qn451%s2@%=;
mCat(1, ) =eins;
mCat(1, %qn1%s) =eins;
mCat(1, %qn112222%s%qe%s11) =eins11;
mCat(1, 1%s%qn231%s%qe%s2) =1eins2;
mCat(1, 1%s2@%s%qn33341%s2@%s%=1eins2eins333;
mCat(1, 1%s2@%s3@%s%qn451%s2@%=1eins2eins3eins4;
mCat(2, ) =einszwei;
mCat(2, %qn1%s) =eins1zwei;
mCat(2, %qn112222%s%qe%s11) =eins112222zwei11;
mCat(2, 1%s%qn231%s%qe%s2) =1eins231zwei2;
mCat(2, 1%s2@%s%qn33341%s2@%s%=1eins2eins33341zwei2zwei333;
mCat(2, 1%s2@%s3@%s%qn451%s2@%=1eins2eins3eins451zwei2zwei3zwei4;
mCat(3, ) =einszweidrei;
mCat(3, %qn1%s) =eins1zwei1drei;
mCat(3, %qn112222%s%qe%s11) =eins112222zwei112222drei11;
mCat(3, 1%s%qn231%s%qe%s2) =1eins231zwei231drei2;
mCat(3, 1%s2@%s%qn33341%s2@%s%=1eins2eins33341zwei2zwei33341drei2dr+
ei333;
mCat(3, 1%s2@%s3@%s%qn451%s2@%=1eins2eins3eins451zwei2zwei3zwei451d+
rei2drei3drei4;
$/tstMCat/ */
call mIni
call tst t, "tstMCat"
m.qq.1 = "eins"
m.qq.2 = "zwei"
m.qq.3 = "drei"
do qx = 0 to 3
m.qq.0 = qx
call tstMCat1 qx
call tstMCat1 qx, '%qn1%s'
call tstMCat1 qx, '%qn112222%s%qe%s11'
call tstMCat1 qx, '1%s%qn231%s%qe%s2'
call tstMCat1 qx, '1%s2@%s%qn33341%s2@%s%qe333'
call tstMCat1 qx, '1%s2@%s3@%s%qn451%s2@%s3@%s%qe4'
end
call tstEnd t
return
endProcedure tstMCat
tstMCat1: procedure expose m.
parse arg m.qq.0, fmt
call out left("mCat("m.qq.0"," fmt")", 30)"="mCat(qq, fmt)";"
return
endProcedure tstMCat1
tstMap: procedure expose m.
/*
$=/tstMap/
### start tst tstMap ##############################################
mapNew m keys m-keys 0
map m zwei --> 2
map m Zwei is not defined
map stem m-keys 4
map m eins --> 1
map m zwei --> 2
map m drei --> 3
map m vier --> 4
*** err: duplicate key eins in map m
map m zwei is not defined
q 2 zw dr
map stem Q 2
map Q zw --> 2Q
map Q dr --> 3Q
map stem m 3
map m eins --> 1
map m zwei --> 2PUT
map m vier --> 4PUT
*** err: duplicate key zwei in map m
tstMapLong eins keys 3
tstMapLong zweiMal keys 48
tstMapLong dreiMal keys 93
tstMapLong vier keys 138
tstMapLong <fuenf> keys 188
tstMap clear keys 0
inline1 3
inline1 1 == inline1 eins==
inline1 2 ====
inline1 3 == inline1 drei==
inline2 1 1 == inline2 eins==
inline3 ?
$/tstMap/ */
/*
$=/tstMapInline1/
inline1 eins
inline1 drei
$/tstMapInline1/ */
/*
$=/tstMapInline2/
inline2 eins
$/tstMapInline2/ */
call tst t, 'tstMap'
m = mapNew('K')
ky = mapKeys(m)
call mAdd t'.TRANS', m 'm', ky 'm-keys'
call tstOut t, 'mapNew' m 'keys' ky m.ky.0
call mapAdd m, 'eins', 1
call mapAdd m, 'zwei', 2
call mapAdd m, 'drei', 3
call mapAdd m, 'vier', 4
call tstMapShow m, 'zwei'
call tstMapShow m, 'Zwei'
call tstMapShowSt m, mapKeys(m)
call mapAdd m, 'eins', 1
call mapReset m, '='
call tstMapShow m, 'zwei'
call mapAdd m, 'eins', 1
call mapAdd m, 'zwei', 2
call mapPut m, 'zwei', 2Put
call mapPut m, 'vier', 4Put
call mapReset q, '='
call mapAdd q, 'zw', 2q
call mapAdd q, 'dr', 3q
call tstOut t, 'q' m.q.0 m.q.1 m.q.2
call tstMapShowSt q, mapKeys(q)
call tstMapShowSt m, mapKeys(m)
call mapAdd m, 'zwei', 2addDup
call tstMapLong m, 'eins' ,201, 2000, -2, 2
call tstMapLong m, 'zweiMal' ,201, 2000, -2, 2
call tstMapLong m, 'dreiMal' ,201, 2000, 2,-2
call tstMapLong m, 'vier ' ,2010, 201, -2, 2
call tstMapLong m, '<fuenf>' ,2010, 201, 2,-2
call mapClear m
keys = mapKeys(m)
call tstOut t, 'tstMap clear keys' m.keys.0
i = mapInline('tstMapInline1')
call tstOut t, 'inline1' m.i.0
do x=1 to m.i.0
call tstOut t, 'inline1' x '=='m.i.x'=='
end
i = mapInline('tstMapInline2')
call tstOut t, 'inline2' m.i.0 '1 =='m.i.1'=='
call tstOut t, 'inline3' mapInline('tstMapInline3', 'r')'?'
call tstEnd t
return
endProcedure tstMap
tstMapLong: procedure expose m.
parse arg m, w, f1, t1, f2, t2
if f1 < t1 then
b1 = 201
else
b1 = -201
if f2 < t2 then
b2 = 1
else
b2 = -1
lo = copies(w, 2100 % length(w))
keys = mapKeys(m)
keyCn = m.keys.0
call tstOut t, 'tstMapLong' w 'keys' keyCn
do x = f1 by b1 to t1
do y = x+f2 by b2 to x+t2
k = left(lo, y)
if mapHasKey(m, k) then
call err 'mapLong hasKey before' w y
call mapAdd m, k, w y
if \ mapHasKey(m, k) then
call err 'mapLong \ hasKey after' w y
if mapGet(m, k) \== w y then
call err 'mapLong \ get <> ' w y
keys = mapKeys(m)
if keyCn + 1 \= m.keys.0 then
call err 'mapLong keys .0 <> ' w y
keyCn = m.keys.0
if k \== m.keys.keyCn then
call err 'mapLong keys . ' keyCn '<>' w y
end
end
return
endProcedure tstMapLong
tstMapVia: procedure expose m.
/*
$=/tstMapVia/
### start tst tstMapVia ###########################################
map M K --> A
mapVia(m, K) A
*** err: missing m.A at 3 in mapVia(M, K|)
mapVia(m, K|) M.A
mapVia(m, K|) valAt m.a
mapVia(m, K|) valAt m.a
*** err: missing m.A.aB at 5 in mapVia(M, K|aB)
mapVia(m, K|aB) M.A.aB
mapVia(m, K|aB) valAt m.A.aB
*** err: missing m.valAt m.a at 4 in mapVia(M, K||)
mapVia(m, K||) M.valAt m.a
mapVia(m, K||) valAt m.valAt m.a
mapVia(m, K||F) valAt m.valAt m.a.F
$/tstMapVia/ */
call tst t, 'tstMapVia'
u = 'A.aB'
v = 'valAt m.a'
drop m.a m.u m.v m.v.f
call mapReset m, 'K'
call mapAdd m, k, a
call tstMapShow m, k
call tstOut t, 'mapVia(m, K) ' mapVia(m, 'K')
call tstOut t, 'mapVia(m, K|) ' mapVia(m, 'K|')
m.a = v
call tstOut t, 'mapVia(m, K|) ' mapVia(m, 'K|')
call tstOut t, 'mapVia(m, K|) ' mapVia(m, 'K|')
call tstOut t, 'mapVia(m, K|aB) ' mapVia(m, 'K|aB')
m.u = 'valAt m.'u
call tstOut t, 'mapVia(m, K|aB) ' mapVia(m, 'K|aB')
call tstOut t, 'mapVia(m, K||) ' mapVia(m, 'K||')
v = m.a
m.v = 'valAt m.'v
m.v.f = 'valAt m.'v'.F'
call tstOut t, 'mapVia(m, K||) ' mapVia(m, 'K||')
call tstOut t, 'mapVia(m, K||F) ' mapVia(m, 'K||F')
call tstEnd t
return
endProcedure tstMapVia
tstMapShow: procedure expose m.
parse arg a, key
if mapHasKey(a, key) then
call tstOut t, 'map' a key '-->' mapGet(a, key)
else
call tstOut t, 'map' a key 'is not defined'
return
endProcedure tstMapShow
tstMapShowSt: procedure expose m.
parse arg a, st
call tstOut t, 'map stem' st m.st.0
do wx=1 to m.st.0
call tstMapShow a, m.st.wx
end
return
endProcedure tstMapShow
tstClass2: procedure expose m.
/*
$=/tstClass2o2/
### start tst tstClass2 ###########################################
@CLASS.5 isA :class = u
. choice u union
. .NAME = class
. stem 7
. .1 refTo @CLASS.1 :class = u
. choice v union
. choice c union
. .NAME = u
. .CLASS refTo @CLASS.15 :class = s
. choice s .CLASS refTo @CLASS.12 done :class @CLASS.12
. .2 refTo @CLASS.6 :class = c
. choice c union
. .NAME = v
. .CLASS refTo @CLASS.7 :class = u
. choice u stem 0
. .3 refTo @CLASS.8 :class = c
. choice c union
. .NAME = w
. .CLASS refTo @CLASS.7 done :class @CLASS.7
. .4 refTo @CLASS.9 :class = c
. choice c union
. .NAME = o
. .CLASS refTo @CLASS.7 done :class @CLASS.7
. .5 refTo @CLASS.10 :class = c
. choice c union
. .NAME = s
. .CLASS refTo @CLASS.11 :class = f
. choice f union
. .NAME = CLASS
. .CLASS refTo @CLASS.12 :class = r
. choice r .CLASS refTo @CLASS.5 done :class @CLASS.5
. .6 refTo @CLASS.13 :class = c
. choice c union
. .NAME = r
. .CLASS refTo @CLASS.11 done :class @CLASS.11
. .7 refTo @CLASS.14 :class = c
. choice c union
. .NAME = u
. .CLASS refTo @CLASS.15 :class = s
. choice s .CLASS refTo @CLASS.12 done :class @CLASS.12
. .8 refTo @CLASS.16 :class = c
. choice c union
. .NAME = n
. .CLASS refTo @CLASS.17 :class = u
. choice u stem 2
. .1 refTo @CLASS.18 :class = f
. choice f union
. .NAME = NAME
. .CLASS refTo @CLASS.1 done :class @CLASS.1
. .2 refTo @CLASS.15 done :class @CLASS.15
. .9 refTo @CLASS.19 :class = c
. choice c union
. .NAME = f
. .CLASS refTo @CLASS.20 :class = u
. choice u stem 2
. .1 refTo @CLASS.18 done :class @CLASS.18
. .2 refTo @CLASS.11 done :class @CLASS.11
. .10 refTo @CLASS.21 :class = c
. choice c union
. .NAME = c
. .CLASS refTo @CLASS.20 done :class @CLASS.20
. .11 refTo @CLASS.22 :class = c
. choice c union
. .NAME = m
. .CLASS refTo @CLASS.23 :class = u
. choice u stem 2
. .1 refTo @CLASS.18 done :class @CLASS.18
. .2 refTo @CLASS.24 :class = f
. choice f union
. .NAME = MET
. .CLASS refTo @CLASS.1 done :class @CLASS.1
$/tstClass2o2/
$=/tstClass2/
### start tst tstClass2 ###########################################
@CLASS.4 isA :class = u
. choice u union
. .NAME = class
. stem 7
. .1 refTo @CLASS.1 :class = u
. choice u union
. .NAME = v
. stem 2
. .1 refTo @CLASS.20 :class = m
. choice m union
. .NAME = o2String
. .MET = return m.m
. .2 refTo @CLASS.108 :class = m
. choice m union
. .NAME = o2File
. .MET = return file(m.m)
. .2 refTo @CLASS.5 :class = c
. choice c union
. .NAME = u
. .CLASS refTo @CLASS.6 :class = u
. choice u union
. .NAME = .
. stem 2
. .1 refTo @CLASS.7 :class = f
. choice f union
. .NAME = NAME
. .CLASS refTo @CLASS.1 done :class @CLASS.1
. .2 refTo @CLASS.8 :class = s
. choice s .CLASS refTo @CLASS.9 :class = r
. choice r .CLASS refTo @CLASS.4 done :class @CLASS.4
. .3 refTo @CLASS.10 :class = c
. choice c union
. .NAME = f
. .CLASS refTo @CLASS.11 :class = u
. choice u union
. .NAME = .
. stem 2
. .1 refTo @CLASS.7 done :class @CLASS.7
. .2 refTo @CLASS.12 :class = f
. choice f union
. .NAME = CLASS
. .CLASS refTo @CLASS.9 done :class @CLASS.9
. .4 refTo @CLASS.13 :class = c
. choice c union
. .NAME = s
. .CLASS refTo @CLASS.12 done :class @CLASS.12
. .5 refTo @CLASS.14 :class = c
. choice c union
. .NAME = c
. .CLASS refTo @CLASS.11 done :class @CLASS.11
. .6 refTo @CLASS.15 :class = c
. choice c union
. .NAME = m
. .CLASS refTo @CLASS.16 :class = u
. choice u union
. .NAME = .
. stem 2
. .1 refTo @CLASS.7 done :class @CLASS.7
. .2 refTo @CLASS.17 :class = f
. choice f union
. .NAME = MET
. .CLASS refTo @CLASS.1 done :class @CLASS.1
. .7 refTo @CLASS.18 :class = c
. choice c union
. .NAME = r
. .CLASS refTo @CLASS.12 done :class @CLASS.12
$/tstClass2/ */
call classIni
call tst t, 'tstClass2'
call classOut , m.class.class
call tstEnd t
return
endProcedure tstClass2
tstClass: procedure expose m.
/*
$=/tstClass/
### start tst tstClass ############################################
Q u =className= tstClassTf12
Q.eins.zwei v ==> M.Q.eins.zwei
*** err: bad type v: classNew(v tstClassTf12)
*** err: bad type v: classBasicNew(v, tstClassTf12, )
R u =className= uststClassTf12
R u =className= uststClassTf12in
R u =className= tstClassTf12
R.eins.zwei v ==> M.R.eins.zwei
R s =stem.0= 2
R.1 r ==> M.R.1 :CLASS.3
R.1 u =className= tstClassTf12
R.1.eins.zwei v ==> M.R.1.eins.zwei
R.2 r ==> M.R.2 :CLASS.3
R.2 u =className= tstClassTf12
R.2.eins.zwei v ==> M.R.2.eins.zwei
S u =className= TstClass7
S s =stem.0= 2
S.1 u =className= TstClass7s
S.1.eins v ==> M.S.1.eins
S.1 m =met-metA--> say "metA"
S.1 m =met-metB--> say "metB"
S.2 u =className= TstClass7s
S.2.zwei v ==> M.S.2.zwei
S.2 m =met-metA--> say "metA"
S.2 m =met-metB--> say "metB"
class of mutate qq tstClassTf12
$/tstClass/ */
f = 'eins.zwei'
e = 'eins'
z = 'zwei'
drop m.q.f m.r.f m.r.0 m.r.1 m.r.1.f m.r.2 m.r.2.f
drop m.s.0 m.s.1 m.s.1.e m.s.2 m.s.2.z
call classIni
call tst t, 'tstClass'
t1 = classNew('n? tstClassTf12 u f eins f zwei v')
call tstClassOut t, t1, q
z = m.class.0
if class4name('tstClassB', '') == '' then do
t2 = classNew('n tstClassB u n tstClassC u tstClassTf12,',
's u v tstClassTf12')
end
else do /* the second time we would get a duplicate error */
call tstOut t, '*** err: bad type v: classNew(v tstClassTf12)'
call tstOut t, '*** err: bad type v:' ,
'classBasicNew(v, tstClassTf12, )'
end
t2 = classNew('n? uststClassTf12 u' ,
'n? uststClassTf12in u tstClassTf12',
, classNew('s u r, tstClassTf12'))
m.r.0 = 2
call tstClassOut t, t2, r
t3 = classNew('n? TstClass7 u s',
classNew('n? TstClass7s u c 1 f eins v, c 2 f zwei v',
,'m', 'metA say "metA"', 'metB say "metB"'))
m.s.0 = 2
m.s.1 = 1
m.s.2 = 2
call tstClassOut t, t3, s
call oMutatName qq, 'tstClassTf12'
tt = objClass(qq)
call tstOut t, 'class of mutate qq' className(tt)
call tstEnd t
return
endProcedure tstClass
tstClassOut: procedure expose m.
parse arg o, t, a
if wordPos(t, m.class.classV m.class.classW m.class.classO) > 0 then
return tstOut(o, a m.t.name '==>' m.a)
if m.t == 'r' then
return tstOut(o, a m.t '==>' m.a ':'m.t.class)
if m.t == 'u' & m.t.name \== '' then
call tstOut o, a m.t '=className=' m.t.name
if m.t == 'f' then
return tstClassOut(o, m.t.class, a'.'m.t.name)
if m.t = 'u' then do
do ux=1 to m.t.0
call tstClassOut o, m.t.ux, a
end
return 0
end
if m.t = 's' then do
call tstOut o, a m.t '=stem.0=' m.a.0
do ux=1 to m.a.0
call tstClassOut o, m.t.class, a'.'ux
end
return 0
end
if m.t = 'c' then do
if m.t.name = m.a then
call tstClassOut o, m.t.class, a
return 0
end
if m.t = 'm' then
return tstOut(o, a m.t '=met-'m.t.name'-->' m.t.met)
call err 'bad class type' m.t
endProcedure tstClassOut
tstO: procedure expose m.
/*
$=/tstO/
### start tst tstO ################################################
oIsCla(TstOCla1) 0
TstOCla1 -
oIsCla(TstOCla1) 1
TstOCla1 -
oIsCla(TstOCla1) 1
TstOCla1 contents of met1
TstOCla1.met2 -
TstOCla2.met1 contents of met1
TstOCla2.met2 contents of met2
TstOCla1.TstOMet3 -
TstOCla1.TstOMet3 generated met TstOCla1:TstOMet3 code...;
TstOCla2.TstOMet3 generated met TstOCla2:TstOMet3 code...;
tstOObj1.met1 -
tstOObj1.met1 contents of met1
$/tstO/
*/
call mIni
call tst t, 'tstO'
call oIni
c1 = 'TstOCla1'
c2 = 'TstOCla2'
m1 = 'met1'
m2 = 'met2'
m3 = 'TstOMet3'
lg = m.o.lazyGen
call tstOut t, 'oIsCla('c1')' oIsCla(c1)
call tstOut t, c1 oClaMet(c1, 'met1', '-')
call oAddCla c1
call tstOut t, 'oIsCla('c1')' oIsCla(c1)
call tstOut t, c1 oClaMet(c1, 'met1', '-')
call oAddMet c1, m1, 'contents of met1'
call tstOut t, 'oIsCla('c1')' oIsCla(c1)
call tstOut t, c1 oClaMet(c1, m1, '-')
call oAddCla c2, c1
call oAddMet c2, 'met2', 'contents of met2'
call tstOut t, c1'.met2' oClaMet(c1, 'met2', '-')
call tstOut t, c2'.'m1 oClaMet(c2, m1, '-')
call tstOut t, c2'.met2' oClaMet(c2, 'met2', '-')
call tstOut t, c1'.'m3 oClaMet(c1, m3, '-')
call oAddMet lg, m3,
, "return 'generated met' cl':'me 'code...;'"
call tstOut t, c1'.'m3 oClaMet(c1, m3, '-')
call tstOut t, c2'.'m3 oClaMet(c2, m3, '-')
o1 = 'tstOObj1'
o2 = 'tstOObj2'
call tstOut t, o1'.met1' objMet(o1, 'met1', '-')
call oMutate o1, c1
call tstOut t, o1'.met1' objMet(o1, 'met1', '-')
call tstEnd t
drop m.o.cParent.c1 m.o.cMet.c1.m1 m.o.cMet.c1.m2 m.o.cMet.c1.m3
drop m.o.cParent.c2 m.o.cMet.c2.m1 m.o.cMet.c2.m2 m.o.cMet.c2.m3
drop m.o.o2c.o1 m.o.cMet.lg.m3
return
endProcedure tstO
tstOEins: procedure expose m.
/*
$=/tstOEins/
### start tst tstOEins ############################################
class method calls of TstOEins
. met Eins.eins M
FLDS of <obj e of TstOEins> .FEINS, .FZWEI
methodcalls of object e of TstOEins
. met Eins.eins <obj e of TstOEins>
. met Eins.zwei <obj e2 of TstOEins>
*** err: no method nein in class TstOEins of object <obj e+
. of TstOEins>
*** err: no class found for object noObj
class method calls of TstOEins
. met Elf.zwei M
FLDS of <obj f of TstOElf> .FEINS, .FZWEI, .FELF
methodcalls of object f of TstOElf
. met Eins.eins <obj f of TstOElf>
. met Elf.zwei <obj f of TstOElf>
. met Elf.drei <obj f of TstOElf>
oCopy c1 of class TstOEins, c2
C1 u =className= TstOEins
C1.FEINS v ==> M.C1.FEINS
C1.FZWEI v ==> M.C1.FZWEI
C1 m =met-eins--> call tstOut t, " met Eins.eins" m
C1 m =met-zwei--> call tstOut t, " met Eins.zwei" m
C2 u =className= TstOEins
C2.FEINS v ==> M.C1.FEINS
C2.FZWEI v ==> M.C1.FZWEI
C2 m =met-eins--> call tstOut t, " met Eins.eins" m
C2 m =met-zwei--> call tstOut t, " met Eins.zwei" m
oCopy c3 of class TstOElf, c4
C4 u =className= TstOElf
C4 u =className= TstOEins
C4.FEINS v ==> M.C3.FEINS
C4.FZWEI v ==> M.C3.FZWEI
C4 m =met-eins--> call tstOut t, " met Eins.eins" m
C4 m =met-zwei--> call tstOut t, " met Eins.zwei" m
C4.FELF r ==> M.C3.FELF :CLASS.3
C4 m =met-zwei--> call tstOut t, " met Elf.zwei" m
C4 m =met-drei--> call tstOut t, " met Elf.drei" m
tEinsDop <class TstOEins>
oRun 7*3 21
oRun 12*12 144
$/tstOEins/ */
call classIni
call tst t, 'tstOEins'
tEins = classNew('n? TstOEins u f FEINS v,f FZWEI v', 'm',
, 'eins call tstOut t, " met Eins.eins" m',
, 'zwei call tstOut t, " met Eins.zwei" m')
call mAdd t.trans, tEins '<class TstOEins>'
call tstOut t, 'class method calls of TstOEins'
interpret oClaMet('TstOEins', 'eins')
e = oNew('TstOEins')
e2 = oNew('TstOEins')
call mAdd t.trans, e '<obj e of TstOEins>'
call mAdd t.trans, e2 '<obj e2 of TstOEins>'
call tstOut t, 'FLDS of' e mCat(oFlds(e), '%qn, %s')
call tstOut t, 'methodcalls of object e of TstOEins'
call tstOmet e, 'eins'
call tstOmet e2, 'zwei'
call tstOmet e, 'nein'
call tstOmet 'noObj', 'nein'
tElf = classNew('n? TstOElf u TstOEins, f FELF r', 'm',
, 'zwei call tstOut t, " met Elf.zwei" m',
, 'drei call tstOut t, " met Elf.drei" m')
call tstOut t, 'class method calls of TstOEins'
interpret oClaMet('TstOElf', 'zwei')
f = oNew('TstOElf')
call mAdd t.trans, f '<obj f of TstOElf>'
call tstOut t, 'FLDS of' f mCat(oFlds(f), '%qn, %s')
call tstOut t, 'methodcalls of object f of TstOElf'
call tstOmet f, 'eins'
call tstOmet f, 'zwei'
call tstOmet f, 'drei'
/* call tstOut t, 'methodcalls of object f cast To TstOEins'
call tstOmet oCast(f, 'TstOEins'), 'eins'
call tstOmet oCast(f, 'TstOEins'), 'zwei'
call tstOut t, 'FLDS of <cast(f, TstOEins)>',
mCat(oFlds(oCast(f, 'TstOEins')), '%qn, %s')
*/
call oMutatName c1, 'TstOEins'
call tstOut t, 'oCopy c1 of class TstOEins, c2'
call tstClassOut t, tEins, c1
call oCopy c1, c2
call tstClassOut t, tEins, c2
call tstOut t, 'oCopy c3 of class TstOElf, c4'
call oMutatName c3, 'TstOElf'
call oCopy c3, c4
call tstClassOut t, tElf, c4
/* tEinsDop = classNew('n TstOEins u f FEINS v,f FZWEI v', 'm',
, 'eins call tstOut t, " met Eins.eins" m',
, 'zwei call tstOut t, " met Eins.zwei" m')
*/ tEinsDop = tEins
call tstOut t, 'tEinsDop' tEinsDop
e3 = oNew('TstOEins')
if e3 <<= e | e3 <<= e2 then
call err 'doppelt reinitialised objects'
rr = oRunner('return 7 * 3')
call tstOut t, 'oRun 7*3' oRun(rr)
r12 = oRunner('return 12 * 12')
call tstOut t, 'oRun 12*12' oRun(r12)
call tstEnd t
return
endProcedure tstOEins
tstOmet: procedure expose m.
parse arg m, met
interpret objMet(m, met)
return
endProcedure tstOmet
tstOGet: procedure expose m.
/*
$=/tstOGet/
### start tst tstOGet #############################################
class.NAME= class
class.NAME= class : w
class| = u
*** err: bad stem index 91>7 @ CLASS.4 class class in oGet(CLASS.4,+
. 91)
class.91 = 0
class.1 = CLASS.1 |= u
class.2 = CLASS.5 |= c
$/tstOGet/ */
call oIni
call tst t, 'tstOGet'
cc = m.class.class
call tstOut t, 'class.NAME=' oGet(cc, 'NAME')
o = oGetO(cc, 'NAME')
call tstOut t, 'class.NAME=' o2String(o) ':' className(objClass(o))
call tstOut t, 'class| =' oGet(cc, '|')
call tstOut t, 'class.91 =' className(oGet(cc, 91))
call tstOut t, 'class.1 =' oGetO(cc, '1') '|=' oGet(cc, '1||')
call tstOut t, 'class.2 =' className(oGetO(cc, '2')) ,
'|=' oGet(cc, '2||')
call tstEnd t
/*
$=/tstOGet2/
### start tst tstOGet2 ############################################
tstOGet1 get1 w
tstOGet1.f1 get1.f1 v
tstOGet1.f2 get1.f2 w
tstOGet1.F3| get1.f3 v
tstOGet1.f3.fEins get1.f3.fEins v
tstOGet1.f3.fZwei get1.f3.fZwei w
tstOGet1.f3%fDrei !get1.f3.fDrei w
tstOGet1.f3.fDrei get1.f3.fDrei w
tstOGet1.f3%1 get1.f3.fDrei.1 w
tstOGet1.f3.2 TSTOGET1
tstOGet1.f3.2|f1 get1.f1 v
tstOGet1.f3.2|f3.2|f2 get1.f2 w
*** err: bad stem index 4>3 @ TSTOGET1.F3 class TstOGet0 in oGet(TS+
TOGET1, F3.4)
tstOGet1.f3.4 0
tstOGet1.f3.3 get1.f3.fDrei.3 w
*** err: bad stem index 3>3A @ TSTOGET1.F3 class TstOGet0 in oGet(T+
STOGET1, F3.3)
tstOGet1.f3.2 0
$/tstOGet2/
*/
c0 = classNew('n? TstOGet0 u f FEINS v,f FZWEI w,f FDREI r,v,' ,
's r TstOGet0')
cl = classNew('n? TstOGet u r, f F1 v, f F2 r, f F3 TstOGet0')
call oMutate tstOGet1, cl
m.tstOGet1 = s2o('get1 w')
m.tstOGet1.f1 = 'get1.f1 v'
m.tstOGet1.f2 = s2o('get1.f2 w')
m.tstOGet1.f3 = 'get1.f3 v'
m.tstOGet1.f3.fEins = 'get1.f3.fEins v'
m.tstOGet1.f3.fZwei = s2o('get1.f3.fZwei w')
m.tstOGet1.f3.fDrei = s2o('get1.f3.fDrei w')
m.tstOGet1.f3.0 = 3
m.tstOGet1.f3.1 = s2o('get1.f3.fDrei.1 w')
m.tstOGet1.f3.2 = tstOGet1
m.tstOGet1.f3.3 = s2o('get1.f3.fDrei.3 w')
call tst t, 'tstOGet2'
call tstOut t, 'tstOGet1 ' oGet(tstOGet1, )
call tstOut t, 'tstOGet1.f1 ' oGet(tstOGet1, f1)
call tstOut t, 'tstOGet1.f2 ' oGet(tstOGet1, f2)
call tstOut t, 'tstOGet1.F3| ' oGet(tstOGet1, 'F3|')
call tstOut t, 'tstOGet1.f3.fEins ' oGet(tstOGet1, f3.fEins)
call tstOut t, 'tstOGet1.f3.fZwei ' oGet(tstOGet1, f3.fZwei)
call tstOut t, 'tstOGet1.f3%fDrei ' oGetO(tstOGet1, 'F3%FDREI')
call tstOut t, 'tstOGet1.f3.fDrei ' oGet(tstOGet1, f3.fDrei)
call tstOut t, 'tstOGet1.f3%1 ' oGet(tstOGet1, 'F3%1')
call tstOut t, 'tstOGet1.f3.2 ' oGetO(tstOGet1, 'F3.2')
call tstOut t, 'tstOGet1.f3.2|f1 ' oGet(tstOGet1, 'F3.2|F1')
call tstOut t, 'tstOGet1.f3.2|f3.2|f2' ,
oGet(tstOGet1, 'F3.2|F3.2|F2')
call tstOut t, 'tstOGet1.f3.4 ' oGet(tstOGet1, 'F3.4')
call tstOut t, 'tstOGet1.f3.3 ' oGet(tstOGet1, 'F3.3')
m.tstOGet1.f3.0 = 3a
call tstOut t, 'tstOGet1.f3.2 ' oGet(tstOGet1, 'F3.3')
call tstEnd t
/*
$=/tstOPut3/
### start tst tstOPut3 ############################################
tstOGet1.f1 get1.f1 v
tstOGet1.f1 aPut1 f1.put1
tstOGet1.f2 aPut2 f2.put2
tstOGet1.f3.fEins p3 f3.fEins,p3
tstOGet1.f3%0 3A
tstOGet1.f3%0 =4 4
tstOGet1.f3.4.feins val f3.4|feins
$/tstOPut3/
*/
call tst t, 'tstOPut3'
call tstOut t, 'tstOGet1.f1 ' oGet(tstOGet1, f1)
call oPut tstOget1, f1, 'f1.put1'
call tstOut t, 'tstOGet1.f1 aPut1' oGet(tstOGet1, f1)
call oPut tstOget1, f2, 'f2.put2'
call tstOut t, 'tstOGet1.f2 aPut2' oGet(tstOGet1, f2)
call oPut tstOget1, f3.fEins, 'f3.fEins,p3'
call tstOut t, 'tstOGet1.f3.fEins p3' oGet(tstOGet1, f3.fEins)
call tstOut t, 'tstOGet1.f3%0 ' oGet(tstOGet1, 'F3%0')
call oPut tstOget1, f3.0, 4
call tstOut t, 'tstOGet1.f3%0 =4' oGet(tstOGet1, 'F3%0')
call oPutO tstOget1, 'F3.4', ''
call oPut tstOget1, 'F3.4|FEINS', 'val f3.4|feins'
call tstOut t, 'tstOGet1.f3.4.feins' ,
oGet(tstOGet1, 'F3.4|FEINS')
call tstEnd t
return
endProcedure tstOGet
tstJSay: procedure expose m.
/*
$=/tstJSay/
### start tst tstJSay #############################################
*** err: bad option openArg in jOpen(<obj j of JRW>, openArg)
*** err: jWrite(<obj j of JRW>, writeArg) but not opened w
*** err: can only write JSay.jOpen(<obj s of JSay>, <)
*** err: jWrite(<obj s of JSay>, write s vor open) but not opened+
. w
*** err: can only read JRWEof.jOpen(<obj e of JRWEof>, >)
*** err: jRead(<obj e of JRWEof>, XX) but not opened r
read e vor open 0 m.xx valueBefore
read e nach open 0 m.xx M.XX
out eins
#jIn 1# tst in line 1 eins ,
out zwei in 1 vv=readAdrVV
#jIn 2# tst in line 2 zwei ; .
out drei in 1 vv=readAdrVV Schluss
$/tstJSay/ */
call jIni
call tst t, 'tstJSay'
jrw = oNew('JRW')
call mAdd t'.TRANS', jrw '<obj j of JRW>'
call jOpen jrw, 'openArg'
call jWrite jrw, 'writeArg'
s = oNew('JSay')
call mAdd t'.TRANS', s '<obj s of JSay>'
call jOpen s, m.j.cRead
s = oNew('JSay')
call mAdd t'.TRANS', s '<obj s of JSay>'
call jWrite s, 'write s vor open'
call jOpen s, '>'
call jWrite s, 'write s nach open'
e = oNew('JRWEof')
call mAdd t'.TRANS', e '<obj e of JRWEof>'
call jOpen e, '>'
e = oNew('JRWEof')
call mAdd t'.TRANS', e '<obj e of JRWEof>'
m.xx = 'valueBefore'
call tstOut t, 'read e vor open' jRead(e, xx) 'm.xx' m.xx
call jOpen e, m.j.cRead
call tstOut t, 'read e nach open' jRead(e, xx) 'm.xx' m.xx
call out 'out eins'
vv = 'readAdrVV'
m.vv = 'readAdrVVValueBefore'
call out 'out zwei in' in(vv) 'vv='vv
m.vv = 'readAdrVVValueBefore'
call out 'out drei in' in(vv) 'vv='vv 'Schluss'
call tstEnd t
return
endProcedure tstJSay
tstJ: procedure expose m.
/*
$=/tstJ/
### start tst tstJ ################################################
out eins
#jIn 1# tst in line 1 eins ,
1 in() tst in line 1 eins ,
#jIn 2# tst in line 2 zwei ; .
2 in() tst in line 2 zwei ; .
#jIn 3# tst in line 3 drei .schluss..
3 in() tst in line 3 drei .schluss..
#jIn eof 4#
in() 3 reads vv VV
line buf line one
line buf line two
line buf line three
line buf line four
*** err: jWrite(<buf b>, buf line five while reading) but not opene+
d w
$/tstJ/ */
call jIni
call tst t, "tstJ"
b = jOpen(jBuf(), '>')
call mAdd t'.TRANS', b '<buf b>'
call out 'out eins'
do lx=1 by 1 while in(var)
call out lx 'in()' m.var
end
call out 'in()' (lx-1) 'reads vv' vv
call jOpen b, '>'
call jWrite b, 'buf line one'
call jClose b
call mAdd m.b.stem, 'buf line two', 'buf line three'
call jWrite b, 'buf line four'
call jClose b
call jOpen b, m.j.cRead
do while (jRead(b, line))
call out 'line' m.line
end
call jWrite b, 'buf line five while reading'
call jClose b
call tstEnd t
return
endProcedure tstJ
tstJ2: procedure expose m.
/*
$=/tstJ2/
### start tst tstJ2 ###############################################
class1 <Tst?1 class> <Tst?1 name>
class2 <Tst?1 class> <Tst?1 name>
class3 <Tst?1 class> <Tst?1 name>
b read EINS feld eins, ZWEI feld zwei, DREI feld drei
b read EINS feld eins, ZWEI feld zwei 2, DREI feld drei
c read EINS feld eins, ZWEI feld zwei, DREI drei cat 1
tstR: @tstWriteoV3 isA :<Tst?1 name>
tstR: .EINS = feld eins
tstR: .ZWEI = feld zwei
tstR: .DREI = drei cat 1
c read EINS feld eins, ZWEI feld zwei 2, DREI drei cat 2
tstR: @tstWriteoV4 isA :<Tst?1 name>
tstR: .EINS = feld eins
tstR: .ZWEI = feld zwei 2
tstR: .DREI = drei cat 2
$/tstJ2/ */
call tst t, "tstJ2"
ty = classNew('n* Tst u f EINS v, f ZWEI v, f DREI v')
call mAdd t'.TRANS', ty '<Tst?1 class>'
call mAdd t'.TRANS', m.ty.name '<Tst?1 name>'
call tstOut t, 'class1' ty m.ty.name
ty = classNew('n* Tst u f EINS v, f ZWEI v, f DREI v')
call tstOut t, 'class2' ty m.ty.name
ty = classNew('n* Tst u f EINS v, f ZWEI v, f DREI v')
call tstOut t, 'class3' ty m.ty.name
call oMutate qq, ty
m.qq.eins = 'feld eins'
m.qq.zwei = 'feld zwei'
m.qq.drei = 'feld drei'
b = jBuf()
call jOpen b, '>'
call jWriteO b, oCopy(qq)
m.qq.zwei = 'feld zwei 2'
call jWriteO b, qq
call jOpen jClose(b), m.j.cRead
c = jOpen(jBuf(), '>')
do xx=1 while assNN('res', jReadO(b))
call out 'b read EINS' m.res.eins', ZWEI' m.res.zwei,
|| ', DREI' m.res.drei
m.res.drei = 'drei cat' xx
call jWriteO c, res
end
call jOpen jClose(c), m.j.cRead
do while assNN('ccc', jReadO(c))
call out 'c read EINS' m.ccc.eins', ZWEI' m.ccc.zwei,
|| ', DREI' m.ccc.drei
call outO ccc
end
call tstEnd t
return
endProcedure tstJ2
tstCat: procedure expose m.
/*
$=/tstCat/
### start tst tstCat ##############################################
catRead 1 line 1
catRead 2 line 2
catRead 3 line 3
appRead 1 line 1
appRead 2 line 2
appRead 3 line 3
appRead 4 append 4
appRead 5 append 5
$/tstCat/ */
call catIni
call tst t, "tstCat"
i = cat(jBuf('line 1', 'line 2'), jBuf('line 3'))
call jOpen i, m.j.cRead
do lx=1 by 1 while jRead(i, v)
call tstOut t, 'catRead' lx m.v
end
call jOpen jClose(i), m.j.cApp
call jWrite i, 'append 4'
call jWrite i, 'append 5'
call jOpen jClose(i), m.j.cRead
do lx=1 by 1 while jRead(i, v)
call tstOut t, 'appRead' lx m.v
end
call tstEnd t
return
endProcedure tstCat
tstEnv: procedure expose m.
call pipeIni
/*
$=/tstEnv/
### start tst tstEnv ##############################################
before pipeBeLa
after pipeEnd
*** err: jWrite(<jBuf c>, write nach pop) but not opened w
#jIn 1# tst in line 1 eins ,
#jIn 2# tst in line 2 zwei ; .
#jIn 3# tst in line 3 drei .schluss..
#jIn eof 4#
before writeNow 2 c --> std
before writeNow 1 b --> c
b line eins
b zwei |
nach writeNow 1 b --> c
add nach pop
after push c only
tst in line 1 eins ,
tst in line 2 zwei ; .
tst in line 3 drei .schluss..
nach writeNow 2 c --> std
*** err: jWrite(<jBuf c>, ) but not opened w
$/tstEnv/ */
call tst t, "tstEnv"
c = jBuf()
call mAdd t'.TRANS', c '<jBuf c>'
call out 'before pipeBeLa'
b = jBuf("b line eins", "b zwei |")
call pipe '+Ff', c, b
call out 'before writeNow 1 b --> c'
call pipeWriteNow
call out 'nach writeNow 1 b --> c'
call pipe '-'
call out 'after pipeEnd'
call jWrite c, 'write nach pop'
call mAdd c'.BUF', 'add nach pop'
call pipe '+A', c
call out 'after push c only'
call pipeWriteNow
call pipe '-'
call pipe '+f', , c
call out 'before writeNow 2 c --> std'
call pipeWriteNow
call out 'nach writeNow 2 c --> std'
call pipe '-'
call jWrite c
call tstEnd t
return
endProcedure tstEnv
tstEnvCat: procedure expose m.
call pipeIni
/*
$=/tstEnvCat/
### start tst tstEnvCat ###########################################
c1 contents
c1 line eins |
before writeNow 1 b* --> c*
b1 line eins|
b2 line eins
b2 zwei |
c2 line eins |
after writeNow 1 b* --> c*
c2 contents
c2 line eins |
$/tstEnvCat/ */
call tst t, "tstEnvCat"
b0= jBuf()
b0= jBuf()
b1= jBuf("b1 line eins|")
b2 = jBuf("b2 line eins", "b2 zwei |")
c1 = jBuf("c1 line eins |")
c2 = jBuf("c2 line eins |")
call pipe '+Af', c1, b0, b1, b2, c2
call out 'before writeNow 1 b* --> c*'
call pipeWriteNow
call out 'after writeNow 1 b* --> c*'
call pipe '-'
call out 'c1 contents'
call pipe '+f' , , c1
call pipeWriteNow
call pipe '-'
call pipe '+f' , , c2
call out 'c2 contents'
call pipeWriteNow
call pipe '-'
call tstEnd t
return
endProcedure tstEnvCat
tstPipe: procedure expose m.
call pipeIni
/*
$=/tstPipe/
### start tst tstPipe #############################################
.+0 vor pipeBegin
#jIn 1# tst in line 1 eins ,
#jIn 2# tst in line 2 zwei ; .
#jIn 3# tst in line 3 drei .schluss..
#jIn eof 4#
.+7 nach pipeLast
¢7 +6 nach pipe 7!
¢7 +2 nach pipe 7!
¢7 +4 nach nested pipeLast 7!
¢7 (4 +3 nach nested pipeBegin 4) 7!
¢7 (4 (3 +1 nach pipeBegin 3) 4) 7!
¢7 (4 (3 tst in line 1 eins , 3) 4) 7!
¢7 (4 (3 tst in line 2 zwei ; 3) 4) 7!
¢7 (4 (3 tst in line 3 drei .schluss. 3) 4) 7!
¢7 (4 (3 +1 nach writeNow vor pipe 3) 4) 7!
¢7 (4 +3 nach preSuf vor nested pipeLast 4) 7!
¢7 +4 nach preSuf vor nested pipeEnd 7!
¢7 +5 nach nested pipeEnd vor pipe 7!
¢7 +6 nach writeNow vor pipeLast 7!
.+7 nach writeNow vor pipeEnd
.+8 nach pipeEnd
$/tstPipe/ */
say 'x0' m.pipe.0
call tst t, 'tstPipe'
call out '+0 vor pipeBegin'
say 'x1' m.pipe.0
call pipe '+N'
call out '+1 nach pipeBegin'
call pipeWriteNow
call out '+1 nach writeNow vor pipe'
call pipe 'N|'
call out '+2 nach pipe'
call pipe '+N'
call out '+3 nach nested pipeBegin'
call pipePreSuf '(3 ', ' 3)'
call out '+3 nach preSuf vor nested pipeLast'
call pipe 'P|'
call out '+4 nach nested pipeLast'
call pipePreSuf '(4 ', ' 4)'
call out '+4 nach preSuf vor nested pipeEnd'
call pipe '-'
call out '+5 nach nested pipeEnd vor pipe'
call pipe 'N|'
call out '+6 nach pipe'
call pipeWriteNow
say 'out +6 nach writeNow vor pipeLast'
call out '+6 nach writeNow vor pipeLast'
call pipe 'P|'
call out '+7 nach pipeLast'
call pipePreSuf '¢7 ', ' 7!'
call out '+7 nach writeNow vor pipeEnd'
call pipe '-'
call out '+8 nach pipeEnd'
say 'xx' m.pipe.0
call tstEnd t
return
endProcedure tstPipe
tstPipeS: procedure expose m.
/*
$=/tstPipeS/
### start tst tstPipeS ############################################
eine einzige zeile
nach all einzige Zeile
select strip(creator) cr, strip(name) tb,
(row_number()over())*(row_number()over()) rr
from sysibm.sysTables
$/tstPipeS/
*/
call tst t, "tstPipeS"
call pipe '+s',, 'eine einzige zeile'
call pipeWriteAll
call out 'nach all einzige Zeile'
call pipe 's',,
, "select strip(creator) cr, strip(name) tb," ,
, "(row_number()over())*(row_number()over()) rr" ,
, "from sysibm.sysTables"
call pipeWriteAll
call pipe '-'
call tstEnd t
return
endProcedure tstPipeS
tstEnvVars: procedure expose m.
call pipeIni
/*
$=/tstEnvVars/
### start tst tstEnvVars ##########################################
put v1 value eins
v1 hasKey 1 get value eins
v2 hasKey 0
one to theBur
two to theBuf
$/tstEnvVars/ */
call tst t, "tstEnvVars"
call envRemove 'v2'
m.tst.adr1 = 'value eins'
put1 = envPutO('v1', oMutate(tst'.'adr1, m.class.classV))
call tstOut t, 'put v1' m.put1
call tstOut t, 'v1 hasKey' envHasKey('v1') 'get' envGet('v1')
call tstOut t, 'v2 hasKey' envHasKey('v2')
if 0 then
call tstOut t, 'v2 get' envGet('v2')
call pipe '+F' , envGetO('theBuf', '-b')
call out 'one to theBur'
call out 'two to theBuf'
call pipe '-'
call pipe '+f',, envGetO('theBuf')
call pipeWriteNow
call pipe '-'
call tstEnd t
return
endProcedure tstEnvVars
tstEnvWith: procedure expose m.
/*
$=/tstEW2/
### start tst tstEW2 ##############################################
tstK1| get1 w
tstK1%f1 get1.f1 v
tstK1.f2 get1.f2 w
tstK1%F3 get1.f3 v
ttstK1.F3.FEINS get1.f3.fEins v
tstK1%F3%FZWEI get1.f3.fZwei w
tstK1.F3.FDREI !get1.f3.fDrei w
tstK1%F3%FDREI| get1.f3.fDrei w
tstK1.F3.1 get1.f3.1 w
tstK1%F3%2 TSTEW1
tstK1.F3.2|F1 get1.f1 v
tstK1%F3%2|F3.2|F2 get1.f2 w
*** err: undefined variable F1 in envGet(F1)
F1 0
F1 get1.f1 v
f2 get1.f2 w
F3 get1.f3 v
F3.FEINS get1.f3.fEins v
F3.FZWEI get1.f3.fZwei w
F3%FDREI !get1.f3.fDrei w
F3%FDREI| get1.f3.fDrei w
F3%1 get1.f3.1 w
pu1 F1 get1.f1 v
pu2 F1 get2.f1 v
po-2 F1 get1.f1 v
*** err: undefined variable F1 in envGet(F1)
po-1 F1 0
$/tstEW2/ */
call pipeIni
c0 = classNew('n? TstEW0 u f FEINS v,f FZWEI w, f FDREI r,v,s r')
cl = classNew('n? TstEW u r TstEW0, f F1 v, f F2 r, f F3 TstEW0')
call oMutate tstEW1, cl
m.tstEW1 = s2o('get1 w')
m.tstEW1.f1 = 'get1.f1 v'
m.tstEW1.f2 = s2o('get1.f2 w')
m.tstEW1.f3 = 'get1.f3 v'
m.tstEW1.f3.fEins = 'get1.f3.fEins v'
m.tstEW1.f3.fZwei = s2o('get1.f3.fZwei w')
m.tstEW1.f3.fDrei = s2o('get1.f3.fDrei w')
m.tstEW1.f3.0 = 3
m.tstEW1.f3.1 = s2o('get1.f3.1 w')
m.tstEW1.f3.2 = tstEW1
m.tstEW1.f3.3 = s2o('get1.f3.3 w')
call oMutate tstEW2, cl
m.tstEW2 = s2o('get2 w')
m.tstEW2.f1 = 'get2.f1 v'
m.tstEW2.f2 = s2o('get2.f2 w')
call envPutO 'tstK1', tstEW1
call tst t, 'tstEW2'
call tstOut t, 'tstK1| ' envGet('tstK1|')
call tstOut t, 'tstK1%f1 ' envGet('tstK1%F1')
call tstOut t, 'tstK1.f2 ' envGet('tstK1.F2')
call tstOut t, 'tstK1%F3 ' envGet('tstK1%F3|')
call tstOut t, 'ttstK1.F3.FEINS ' envGet('tstK1.F3.FEINS')
call tstOut t, 'tstK1%F3%FZWEI ' envGet('tstK1%F3%FZWEI')
call tstOut t, 'tstK1.F3.FDREI ' envGetO('tstK1.F3.FDREI')
call tstOut t, 'tstK1%F3%FDREI| ' envGet('tstK1%F3%FDREI')
call tstOut t, 'tstK1.F3.1 ' envGet('tstK1.F3.1')
call tstOut t, 'tstK1%F3%2 ' envGetO('tstK1%F3%2')
call tstOut t, 'tstK1.F3.2|F1 ' envGet('tstK1.F3.2|F1')
call tstOut t, 'tstK1%F3%2|F3.2|F2' ,
envGet('tstK1%F3%2|F3%2|F2')
call tstOut t, 'F1 ' envGet('F1')
call envPushWith tstEW1
call tstOut t, 'F1 ' envGet('F1')
call tstOut t, 'f2 ' envGet('F2')
call tstOut t, 'F3 ' envGet('F3|')
call tstOut t, 'F3.FEINS ' envGet('F3.FEINS')
call tstOut t, 'F3.FZWEI ' envGet('F3.FZWEI')
call tstOut t, 'F3%FDREI ' envGetO('F3%FDREI')
call tstOut t, 'F3%FDREI| ' envGet('F3%FDREI|')
call tstOut t, 'F3%1 ' envGet('F3%1')
call tstOut t, 'pu1 F1 ' envGet('F1')
call envPushWith tstEW2
call tstOut t, 'pu2 F1 ' envGet('F1')
call envPopWith
call tstOut t, 'po-2 F1 ' envGet('F1')
call envPopWith
call tstOut t, 'po-1 F1 ' envGet('F1')
call tstEnd t
/*
$=/tstEW3/
### start tst tstEW3 ##############################################
. s c3.F1 = v(c3.f1)
*** err: no reference @ <c3>.F1 class CLASS.1 in envGet(c3.F1.FEINS+
)
. s c3.F1.FEINS = 0
. s c3.F3.FEINS = .
. s c3.F3.FEINS = val(c3.F3.FEINS)
*** err: no field FEINS @ <c3> class TstEW in envGet(c3.FEINS)
. s c3.FEINS = 0
*** err: null @ <c3> class TstEW in envGet(c3|FEINS)
. s c3|FEINS = 0
aft Put s c3|FEINS = val(c3|FEINS)
Push c3 s F3.FEINS = val(c3.F3.FEINS)
*** err: no field FEINS aftPuP= pushPut(F3 @ <c3>.F3 class TstEW0 i+
n envGet(F3.FEINS aftPuP= pushPut(F3.FEINS))
. s F3.FEINS aftPuP= 0
push c4 s F1 = v(c4.f1)
put f2 s F2 = put(f2)
*** err: no field F222 in class TstEW in EnvPut(F222, f222 stopped,+
. 1)
put .. s F3.FEINS = put(f3.fEins)
popW c4 s F1 = v(c3.f1)
*** err: undefined variable F1 in envGet(F1)
popW c3 s F1 = 0
. s F222 = f222 pop stop
$/tstEW3/
*/
call tst t, 'tstEW3'
c3 = oNew('TstEW')
call mAdd t.trans, c3 '<c3>'
m.c3.f1 = 'v(c3.f1)'
call envPutO 'c3', c3
call tstEnvSG , 'c3.F1'
call tstEnvSG , 'c3.F1.FEINS'
call tstEnvSG , 'c3.F3.FEINS'
call envPut 'c3.F3.FEINS', 'val(c3.F3.FEINS)'
call tstEnvSG , 'c3.F3.FEINS'
call tstEnvSG , 'c3.FEINS'
call tstEnvSG , 'c3|FEINS'
call envPut 'c3|FEINS', 'val(c3|FEINS)'
call tstEnvSG 'aft Put', 'c3|FEINS'
call envPushWith c3
call tstEnvSG 'Push c3', 'F3.FEINS'
call envPut 'F3.FEINS', 'pushPut(F3.FEINS)'
call tstEnvSG , 'F3.FEINS aftPuP=' envGet('F3.FEINS')
c4 = oNew('TstEW')
call mAdd t.trans, c4 '<c4>'
m.c4.f1 = 'v(c4.f1)'
call envPut f222, 'f222 no stop'
call envPushWith c4
call tstEnvSG 'push c4', f1
call envPut f2, 'put(f2)'
call tstEnvSG 'put f2', f2
call envPut f222, 'f222 stopped', 1
call envPut f3.fEins, 'put(f3.fEins)'
call tstEnvSG 'put .. ', f3.fEins
call envPopWith
call tstEnvSG 'popW c4', f1
call envPopWith
call envPut f222, 'f222 pop stop'
call tstEnvSG 'popW c3', f1
call tstEnvSG , f222
call tstEnd t
/*
$=/tstEW4/
### start tst tstEW4 ##############################################
tstO4 S.0 0 R.0 0 class TstEW4
*** err: no field FZWEI in class in EnvPut(FZWEI, v 1.fZwei, 1)
1 fEins s FEINS = v 1.fEins
1 fZwei s FZWEI = .
2 fEins s FEINS = .
2 fZwei s FZWEI = v 2.fZwei
v 1.fEins .# 1 vor
v 1.fEins .# 2 nach withNext e
*** err: undefined variable FEINS in envGet(FEINS)
? fEins s FEINS = 0
1 fEins s FEINS = v 1|fEins
1 fZwei s FZWEI = .
2 fEins s FEINS = .
2 fZwei s FZWEI = v 2.fZwei
v 1|fEins .# 2
$/tstEW4/
*/
c4 = classNew('n? TstEW4 u f S s TstEW0, f R s r TstEW0')
o4 = oClear(oMutate('tstO4', c4))
call tst t, 'tstEW4'
call tstout t, o4 'S.0' m.o4.s.0 'R.0' m.o4.r.0 ,
'class' className(objClass(o4))
call envPushWith o4'.S', m.c4.f2c.s, 'asM'
call envPut fZwei, 'v 1.fZwei', 1
call envWithNext 'b'
call envPut feins, 'v 1.fEins', 1
call tstEnvSG '1 fEins ', fEins
call tstEnvSG '1 fZwei ', fZwei
m.o4.s.2.feins = 'vorher'
m.o4.s.2.fZwei = s2o('vorher')
call envWithNext
call envPut fZwei, 'v 2.fZwei', 1
call tstEnvSG '2 fEins ', fEins
call tstEnvSG '2 fZwei ', fZwei
call tstOut t, m.o4.s.1.fEins '.#' m.o4.s.0 'vor'
call envWithNext 'e'
call tstOut t, m.o4.s.1.fEins '.#' m.o4.s.0 'nach withNext e'
call envPopWith
call tstEnvSG '? fEins ', fEins
call envPushWith o4'.R', m.c4.f2c.r, 'asM'
call envWithNext 'b'
call envPut fEins, 'v 1|fEins', 1
call tstEnvSG '1 fEins ', fEins
call tstEnvSG '1 fZwei ', fZwei
call envWithNext
call envPut fZwei, 'v 2.fZwei', 1
call tstEnvSG '2 fEins ', fEins
call tstEnvSG '2 fZwei ', fZwei
call envWithNext 'e'
call envPopWith
o41r = m.o4.r.1
call tstOut t, m.o41r.fEins '.#' m.o4.r.0
call tstEnd t
return
endProcedure tstEnvWith
tstEnvSG: procedure expose m. t
parse arg txt, nm
call tstOut t, left(txt,10)'s' left(nm, 15)'=' envGet(nm)
return
tstPipeLazy: procedure expose m.
call pipeIni
/*
$=/tstPipeLazy/
### start tst tstPipeLazy #########################################
a1 vor pipeBegin loop lazy 0 writeNow *** <class TstPipeLazyBuf>
bufOpen <
bufClose
#jIn 2# tst in line 2 zwei ; .
#jIn 3# tst in line 3 drei .schluss..
#jIn eof 4#
a5 vor 2 writeNow in inIx 4
a2 vor writeNow jBuf
jBuf line 1
jBuf line 2
a3 vor writeNow in inIx 1
tst in line 2 zwei ; .
tst in line 3 drei .schluss..
a4 vor barLast inIx 4
a6 vor barEnd inIx 4
a7 nach barEnd lazy 0 writeNow ***
b1 vor barBegin lazy 0 writeNow *** <class TstPipeLazyRdr>
RdrOpen <
#jIn 3# tst in line 3 drei .schluss..
#jIn eof 4#
rdrClose
b4 vor writeNow
b2 vor writeNow rdr inIx 2
jRead lazyRdr
tst in line 3 drei .schluss..
jRead lazyRdr
b3 vor barLast inIx 4
b5 vor barEnd inIx 4
b6 nach barEnd lazy 0 writeNow ***
a1 vor pipeBegin loop lazy 1 writeAll *** +
.<class TstPipeLazyBuf>
a5 vor 2 writeAll in inIx 0
a2 vor writeAll jBuf
bufOpen <
jBuf line 1
jBuf line 2
bufClose
a3 vor writeAll in inIx 0
#jIn 1# tst in line 1 eins ,
tst in line 1 eins ,
#jIn 2# tst in line 2 zwei ; .
tst in line 2 zwei ; .
#jIn 3# tst in line 3 drei .schluss..
tst in line 3 drei .schluss..
#jIn eof 4#
a4 vor barLast inIx 0
a6 vor barEnd inIx 4
a7 nach barEnd lazy 1 writeAll ***
b1 vor barBegin lazy 1 writeAll *** <class TstPipeLazyRdr>
b4 vor writeAll
b2 vor writeAll rdr inIx 1
RdrOpen <
jRead lazyRdr
#jIn 2# tst in line 2 zwei ; .
tst in line 2 zwei ; .
jRead lazyRdr
#jIn 3# tst in line 3 drei .schluss..
tst in line 3 drei .schluss..
jRead lazyRdr
#jIn eof 4#
rdrClose
b3 vor barLast inIx 1
b5 vor barEnd inIx 4
b6 nach barEnd lazy 1 writeAll ***
$/tstPipeLazy/ */
call tst t, "tstPipeLazy"
do lz=0 to 1
if lz then
w = 'writeAll'
else
w = 'writeNow'
m.t.inIx = 1-lz
ty = class4Name('TstPipeLazyBuf', '')
if ty == '' then do
ty = classNew('n TstPipeLazyBuf u JRWDeleg', 'm',
, 'jOpen call tstOut "T", "bufOpen" opt;',
'call jOpen m.m.deleg, opt',
, 'jClose call tstOut "T", "bufClose";',
'call jClose m.m.deleg')
end
if \ lz then
call mAdd t'.TRANS', ty '<class TstPipeLazyBuf>'
call out 'a1 vor pipeBegin loop lazy' lz w '***' ty
call pipe '+N'
call out 'a2 vor' w 'jBuf'
b = oNew('TstPipeLazyBuf', jBuf('jBuf line 1','jBuf line 2'))
interpret 'call pipe'w 'b'
call out 'a3 vor' w 'in inIx' m.t.inIx
interpret 'call pipe'w
call out 'a4 vor barLast inIx' m.t.inIx
call pipe 'P|'
call out 'a5 vor 2' w 'in inIx' m.t.inIx
interpret 'call pipe'w
call out 'a6 vor barEnd inIx' m.t.inIx
call pipe '-'
call out 'a7 nach barEnd lazy' lz w '***'
ty = class4Name('TstPipeLazyRdr', '')
if ty == '' then
ty = classNew('n TstPipeLazyRdr u JRW', 'm',
, 'jOpen call tstOut "T", "RdrOpen" opt',
, 'jRead call out "jRead lazyRdr";' ,
'return jRead(m.m.rdr, var);',
, 'jClose call tstOut "T", "rdrClose";')
if \ lz then
call mAdd t'.TRANS', ty '<class TstPipeLazyRdr>'
r = oNew('TstPipeLazyRdr')
m.r.rdr = m.j.in
if lz then
call mAdd t'.TRANS', r '<lazyRdr>'
m.t.inIx = 2-lz
call out 'b1 vor barBegin lazy' lz w '***' ty
call pipe '+N'
call out 'b2 vor' w 'rdr inIx' m.t.inIx
interpret 'call pipe'w 'r'
call out 'b3 vor barLast inIx' m.t.inIx
call pipe 'P|'
call out 'b4 vor' w
interpret 'call pipe'w
call out 'b5 vor barEnd inIx' m.t.inIx
call pipe '-'
call out 'b6 nach barEnd lazy' lz w '***'
end
call tstEnd t
return
endProcedure tstPipeLazy
tstEnvClass: procedure expose m.
call pipeIni
/*
$=/tstEnvClass/
### start tst tstEnvClass #########################################
a0 vor pipeBegin loop lazy 0 writeNow *** TY
#jIn 2# tst in line 2 zwei ; .
#jIn 3# tst in line 3 drei .schluss..
#jIn eof 4#
a5 vor writeNow
a1 vor jBuf()
a2 vor writeNow b
tstR: @<o20 of TstEnvClass10> isA :TstEnvClass10
tstR: .f11 = .
tstR: .F12 = value F12 of o1 <o20 of TstEnvClass10>
tstR: .f13 = .
WriteO o2
tstR: @<oc0 of TstEnvClass20> isA :TstEnvClass20 = valueO2Lazy0
tstR: .f24 = .
tstR: .F25 = value F25 of o20 <o20 of TstEnvClass20>
a3 vor writeNow
tst in line 2 zwei ; .
tst in line 3 drei .schluss..
a4 vor barLast inIx 4
a6 vor barEnd
a7 nach barEnd lazy 0 writeNow ***
a0 vor pipeBegin loop lazy 1 writeAll *** TY
a5 vor writeAll
a1 vor jBuf()
a2 vor writeAll b
tstR: @<o21 of TstEnvClass10> isA :TstEnvClass10
tstR: .f11 = .
tstR: .F12 = value F12 of o1 <o21 of TstEnvClass10>
tstR: .f13 = .
WriteO o2
tstR: @<oc1 of TstEnvClass20> isA :TstEnvClass20 = valueO2Lazy1
tstR: .f24 = .
tstR: .F25 = value F25 of o21 <o21 of TstEnvClass20>
a3 vor writeAll
#jIn 1# tst in line 1 eins ,
tst in line 1 eins ,
#jIn 2# tst in line 2 zwei ; .
tst in line 2 zwei ; .
#jIn 3# tst in line 3 drei .schluss..
tst in line 3 drei .schluss..
#jIn eof 4#
a4 vor barLast inIx 0
a6 vor barEnd
a7 nach barEnd lazy 1 writeAll ***
$/tstEnvClass/ */
call tst t, "tstEnvClass"
t10 = classNew('n? TstEnvClass10 u f f11 v, f F12 v, f f13 v')
t20 = classNew('n? TstEnvClass20 u v, f f24 v, f F25 v')
do lz=0 to 1
if lz then
w = 'writeAll'
else
w = 'writeNow'
m.t.inIx = 1-lz
call out 'a0 vor pipeBegin loop lazy' lz w '***' ty
call pipe '+N'
call out 'a1 vor jBuf()'
b = jOpen(jBuf(), m.j.cWri)
o1 = oNew('TstEnvClass10')
m.o1.F12 = 'value F12 of o1' o1
call mAdd t'.TRANS', o1 '<o2'lz 'of TstEnvClass10>'
call jWriteO b, o1
call jWrite b, 'WriteO o2'
o2 = oNew('TstEnvClass20')
m.o2 = 'valueO2Lazy'lz
m.o2.F25 = 'value F25 of o2'lz o2
oc = oCopy(oCopy(o2))
call mAdd t'.TRANS', o2 '<o2'lz 'of TstEnvClass20>'
call mAdd t'.TRANS', oc '<oc'lz 'of TstEnvClass20>'
call jWriteO b, oc
call out 'a2 vor' w 'b'
interpret 'call pipe'w jClose(b)
call out 'a3 vor' w
interpret 'call pipe'w
call out 'a4 vor barLast inIx' m.t.inIx
call pipe 'P|'
call out 'a5 vor' w
interpret 'call pipe'w
call out 'a6 vor barEnd'
call pipe '-'
call out 'a7 nach barEnd lazy' lz w '***'
end
call tstEnd t
m.t.trans.0 = 0
return
endProcedure tstEnvClass
tstFile: procedure expose m.
call catIni
/*
$=/tstFile/
### start tst tstFile #############################################
write read 0 last 10 vor anfang
write read 1 last 80 links1 1 und rechts | ..
write read 2 last 80 liinks2 2 und rechts | ..
write read 5 last 80 links5 5 rechts5
write read 99 last 80 links99 99 rechts
write read 100 last 80 links100 100 rechts
write read 101 last 80 links101 101 rechts
write read 999 last 80 links999 999 rechts
write read 1000 last 80 links1000 1000 rechts
write read 1001 last 80 links1001 1001 rechts
write read 2109 last 80 links2109 2109 rechts
out > eins 1 +
. .
out > eins 2 schluss. +
. .
buf eins
buf zwei
buf drei
out > zwei mit einer einzigen Zeile +
. .
. links1 1 und rechts | . +
. .
$/tstFile/ */
call tst t, "tstFile"
pds = tstFilename('lib', 'r')
call tstFileWr pds, 0, ' links0', ' und rechts | . '
call tstFileWr pds, 1, ' links1', ' und rechts | . '
call tstFileWr pds, 2, 'liinks2', ' und rechts | . '
call tstFileWr pds, 5, 'links5', 'rechts5'
call tstFileWr pds, 99, 'links99', 'rechts'
call tstFileWr pds, 100, 'links100', 'rechts'
call tstFileWr pds, 101, 'links101', 'rechts'
call tstFileWr pds, 999, 'links999', 'rechts'
call tstFileWr pds, 1000, 'links1000', 'rechts'
call tstFileWr pds, 1001, 'links1001', 'rechts'
call tstFileWr pds, 2109, 'links2109', 'rechts'
pd2 = tstFilename('li2', 'r')
call pipeIni
call pipe '+F', s2o(tstPdsMbr(pd2, 'eins'))
call out tstFB('out > eins 1') /* simulate fixBlock on linux */
call out tstFB('out > eins 2 schluss.')
call pipe '-'
call pipe '+F', s2o(tstPdsMbr(pd2, 'zwei'))
call out tstFB('out > zwei mit einer einzigen Zeile')
call pipe '-'
b = jBuf("buf eins", "buf zwei", "buf drei")
call pipe '+f', , s2o(tstPdsMbr(pd2, 'eins')), b,
,jBuf(),
,s2o(tstPdsMbr(pd2, 'zwei')),
,s2o(tstPdsMbr(pds, 'wr0')),
,s2o(tstPdsMbr(pds, 'wr1'))
call pipeWriteNow
call pipe '-'
call tstEnd t
return
endProcedure tstFile
/*--- simulate fixBlock 80 on linux ---------------------------------*/
tstFB: procedure expose m.
parse arg line, recL
if m.err.os \== 'LINUX' then
return line
else if recL == '' then
return left(line, 80)
else
return left(line, recL)
endProcedure tstFB
tstPdsMbr: procedure expose m.
parse arg pds, mbr
if m.err.os = 'TSO' then
return pds'('mbr') ::F'
if m.err.os = 'LINUX' then
return pds'.'mbr
call err 'tstPdsMbr implement os' m.err.os
endProcedure tstPdsMbr
tstFileWR: procedure expose m.
parse arg dsn, num, le, ri
io = file(tstPdsMbr(dsn, 'wr'num))
call jOpen io, m.j.cWri
do x = 1 to num /* simulate fixBlock 80 on LINUX*/
call jWrite io, tstFB(le x ri)
end
call jClose io
if num > 100 then
call jReset io, tstPdsMbr(dsn, 'wr'num)
call jOpen io, m.j.cRead
m.vv = 'vor anfang'
do x = 1 to num
if \ jRead(io, vv) then
call err x 'not jRead'
else if m.vv <> le x ri then
call err x 'read mismatch' m.vv
end
if jRead(io, vv) then
call err x 'jRead but should be eof 1'
if jRead(io, vv) then
call err x'+1 jjRead but should be eof 2'
call jClose io
call tstOut t, 'write read' num 'last' length(m.vv) strip(m.vv,'t')
return
endProcedure tstFileRW
tstFileList: procedure expose m.
call catIni
/*
$=/tstFileList/
### start tst tstFileList #########################################
empty dir
filled dir
<<pref 2 List>>eins
<<pref 2 List>>zwei
<<pref 2 List>>drei
<<pref 2 List>>vier
filled dir recursive
<<pref 2 List>>eins
<<pref 2 List>>zwei
<<pref 2 List>>drei
<<pref 2 List>>vier
<<pref 1 vier>>eins
<<pref 1 vier>>zwei
<<pref 1 vier>>drei
$/tstFileList/ */
/*
$=/tstFileListTSO/
### start tst tstFileListTSO ######################################
empty dir
filled dir
<<pref 2 LIST>>DREI
<<pref 2 LIST>>EINS
<<pref 2 LIST>>ZWEI
filled dir recursive
<<pref 2 LIST>>DREI
<<pref 2 LIST>>EINS
<<pref 1 VIER>>DREI
<<pref 1 VIER>>EINS
<<pref 1 VIER>>ZWEI
<<pref 2 LIST>>ZWEI
$/tstFileListTSO/ */
if m.err.os = 'TSO' then
call tst t, "tstFileListTSO"
else
call tst t, "tstFileList"
fi = file(tstFileName('FileList', 'r'))
call fileMkDir fi
fl = fileList(fi)
call tstOut t, 'empty dir'
call jWriteNow t, fl
call tstFileListMake t, fi, 2
call tstOut t, 'filled dir'
call jWriteNow t, fl
call tstOut t, 'filled dir recursive'
call jWriteNow t, fileList(fi, 'r')
call tstEnd t
return
endProcedure tstFileList
tstFileListMake: procedure expose m.
parse arg t, fi, lev
if \ fileIsDir(fi) then
call fileMkDir fi
call mAdd t'.TRANS', filePath(fi) || m.file.sep ,
'<<pref' lev right(filePath(fi),4)'>>'
call jCat fileChild(fi, 'eins','::F'),jBuf('zeile eins','eins' lev)
call jCat fileChild(fi, 'zwei','::F'),jBuf('zeile zwei','zwei' lev)
call jCat fileChild(fi, 'drei','::F'),jBuf('zeile drei','drei' lev)
if lev > 1 then
call tstFileListMake t, fileChild(fi, 'vier'), lev-1
return
endProcedure tstFileListMake
tstF: procedure expose m.
/*
$=/tstF/
### start tst tstF ################################################
f(1\s23%s345%s67\%8, eins, zwei ) =1 23eins345 zwei 67%8;
f(1\S23%s345%S67\%8, eins, zwei ) =1\S23eins345zwei67%8;
f(1\s23%s345%s67\%8, eins, zwei ) =1 23eins345 zwei 67%8;
f(1\s23%s345%S67\%8, eins, zwei ) =1 23eins345zwei67%8;
f(1%S2%s3@2%S4@%s5, eins, zwei ) =1eins2 zwei 3zwei4 zwei 5;
f(1%-2C2%3C3@2%3.2C4, eins, zwei ) =1ei2ei 3zwe4;
f(1@F1%s2@f2%s3@F3%s4, eins, zwei ) =1fEins2fZwei3fDrei4;
tstF2 _ %-9C @%5i @%8i @%+8i @%-8i -----
_ 0 0 0 +0 0 .
_ -1.2 -1 -1 -1 -1 .
_ 2.34 2 2 +2 2 .
_ -34.8765 -35 -35 -35 -35 .
_ 567.91234 568 568 +568 568 .
_ -8901 -8901 -8901 -8901 -8901 .
_ 23456 23456 23456 +23456 23456 .
_ -789012 ***** -789012 -789012 -789012 .
_ 34e6 ***** 34000000 ******** 34000000
_ -56e7 ***** ******** ******** ********
_ 89e8 ***** ******** ******** ********
_ txtli txtli txtli txtli txtli .
_ undEinLan Text? gerText? gerText? undEinLa
tstF2 _ %-9C @%5.2i @%12.2i @%+12.2i @%-12.2i -----
_ 0 0.00 0.00 +0.00 0.00 .
_ -1.2 -1.20 -1.20 -1.20 -1.20 .
_ 2.34 2.34 2.34 +2.34 2.34 .
_ -34.8765 ***** -34.88 -34.88 -34.88 .
_ 567.91234 ***** 567.91 +567.91 567.91 .
_ -8901 ***** -8901.00 -8901.00 -8901.00 .
_ 23456 ***** 23456.00 +23456.00 23456.00 .
_ -789012 ***** -789012.00 -789012.00 -789012.00 .
_ 34e6 ***** 34000000.00 +34000000.00 34000000.00 .
_ -56e7 ***** ************ ************ ************
_ 89e8 ***** ************ ************ ************
_ txtli txtli txtli txtli txtli .
_ undEinLan Text? nLangerText? nLangerText? undEinLanger
tstF2 _ %-9C @%7e @%8E @%9.2e @%11.3E -----
_ 0 0.00e00 0.00E00 0.00e+00 0.000E+000
_ -1.2 -1.2e00 -1.20E00 -1.20e+00 -1.200E+000
_ 2.34 2.34e00 2.34E00 2.34e+00 2.340E+000
_ -34.8765 -3.5e01 -3.49E01 -3.49e+01 -3.488E+001
_ 567.91234 5.68e02 5.68E02 5.68e+02 5.679E+002
_ -8901 -8.9e03 -8.90E03 -8.90e+03 -8.901E+003
_ 23456 2.35e04 2.35E04 2.35e+04 2.346E+004
_ -789012 -7.9e05 -7.89E05 -7.89e+05 -7.890E+005
_ 34e6 3.40e07 3.40E07 3.40e+07 3.400E+007
_ -56e7 -5.6e08 -5.60E08 -5.60e+08 -5.600E+008
_ 89e8 8.90e09 8.90E09 8.90e+09 8.900E+009
_ txtli txtli txtli txtli txtli .
_ undEinLan undEinL undEinLa undEinLan undEinLange
_ 8.76e-07 8.76e-7 8.76E-7 8.76e-07 8.760E-007
_ 5.43e-11 0.05e-9 0.05E-9 5.43e-11 5.430E-011
_ -8.76e-07 -8.8e-7 -8.76E-7 -8.76e-07 -8.760E-007
_ -5.43e-11 -0.1e-9 -0.05E-9 -5.43e-11 -5.430E-011
$/tstF/ */
call tst t, 'tstF'
call tstF1 '1\s23%s345%s67\%8'
call tstF1 '1\S23%s345%S67\%8'
call tstF1 '1\s23%s345%s67\%8'
call tstF1 '1\s23%s345%S67\%8'
call tstF1 '1%S2%s3@2%S4@%s5'
call tstF1 '1%-2C2%3C3@2%3.2C4'
call tstF1 '1@F1%s2@f2%s3@F3%s4'
nums = '0 -1.2 2.34 -34.8765 567.91234 -8901 23456' ,
'-789012 34e6 -56e7 89e8 txtli undEinLangerText?'
call tstF2 '_ %-9C @%5i @%8i @%+8i @%-8i', nums
call tstF2 '_ %-9C @%5.2i @%12.2i @%+12.2i @%-12.2i', nums
num2 = ' 8.76e-07 5.43e-11 -8.76e-07 -5.43e-11'
call tstF2 '_ %-9C @%7e @%8E @%9.2e @%11.3E', nums num2
call tstEnd t
return
endProcedure tstF
tstF1: procedure expose m.
parse arg fmt
e='eins'
z=' zwei '
f2 = 'f2'
m.e.f1 = 'fEins'
m.e.f2 = 'fZwei'
m.e.f3 = 'fDrei'
call out "f("fmt"," e"," z") ="f(fmt, e, z)";"
return
endProcedure tstF1
tstF2: procedure expose m.
parse arg fmt, vals
call out 'tstF2' fmt '-----'
do vx=1 to words(vals)
call out f(fmt, word(vals, vx))
end
return
endProcedure tstF2
tstFmt: procedure expose m.
call pipeIni
/*
$=/tstFmt/
### start tst tstFmt ##############################################
= a2i b3b d4 fl5 ex6
-11 -11 b3 d4-11+d4++++ -111.1000000 -1.11000E-12
-1 -10 b d4-10+d4+++ null1 null3
- -9 b3b-9 d4-9+d4+++ -11.0000000 -1.11900E-10
-8+ -8 b3b- d4-8+d4++ -18.0000000 -1.18000E010
-7 -7 b3b d4-7+d4+ -7.0000000 -1.70000E-07
- -6 b3 d4-6+d4 -0.1111160 -6.00000E006
-5+ -5 b d4-5+d null2 null2
-4 -4 b3b-4 d4-4+ -11114.0000000 -1.11140E008
- -3 b3b- d4-3 -0.1130000 -1.13000E-04
-2+ -2 b3b d4- -0.1200000 -1.20000E001
-1 -1 b3 d4 -0.1000000 -1.00000E-02
0 0 b d null1 null1
1+ 1 b3 d4 0.1000000 1.00000E-02
2++ 2 b3b d42 0.1200000 1.20000E001
3 3 b3b3 d43+ 0.1130000 1.13000E-04
4+ 4 b3b4+ d44+d 11114.0000000 1.11140E008
5++ 5 b d45+d4 null2 null2
6 6 b3 d46+d4+ 0.1111160 1.11116E005
7+ 7 b3b d47+d4++ 0.1111117 7.00000E-08
8++ 8 b3b8 d48+d4+++ 8.0000000 1.80000E009
9 9 b3b9+ d49+d4++++ 0.9000000 1.19000E-08
10 10 b d410+d4++++ null1 null3
11+ 11 b3 d411+d4+++++ 0.1110000 1.00000E-12
1 12 b3b d412+d4++++++ 11112.0000000 2.00000E012
13 13 b3b1 d 1111.3000000 1.13000E-12
14+ 14 b3b14 d4 111111.0000000 1.40000E013
1 15 b d41 null2 null1
16 16 b3 d416 6.0000000 1.16000E003
17+ 17 b3b d417+ 0.7000000 1.11170E-03
1 18 b3b1 d418+d 11.0000000 1.11800E003
19 19 b3b19 d419+d4 0.1190000 9.00000E-05
20+ 20 b d420+d4+ null1 null2
2 21 b3 d421+d4++ 11.1210000 1.11000E-05
22 22 b3b d422+d4+++ 11111.2000000 2.00000E007
23+ 23 b3b2 d423+d4++++ 0.1111123 1.11230E-09
c3L a2i drei d4 fl5 ex6
-11 -1.10E01 b3 d4-11+d -111.1000000 -1.11000E-12
-1 -1.00E01 b d4-10+d null1 null3
- -9.00E00 b3b-9 d4-9+d4 -11.0000000 -1.11900E-10
-8+ -8.00E00 b3b- d4-8+d4 -18.0000000 -1.18000E010
-7 -7.00E00 b3b d4-7+d4 -7.0000000 -1.70000E-07
- -6.00E00 b3 d4-6+d4 -0.1111160 -6.00000E006
-5+ -5.00E00 b d4-5+d null2 null2
-4 -4.00E00 b3b-4 d4-4+ -11114.0000000 -1.11140E008
- -3.00E00 b3b- d4-3 -0.1130000 -1.13000E-04
-2+ -2.00E00 b3b d4- -0.1200000 -1.20000E001
-1 -1.00E00 b3 d4 -0.1000000 -1.00000E-02
0 0.00E00 b d null1 null1
1+ 1.00E00 b3 d4 0.1000000 1.00000E-02
2++ 2.00E00 b3b d42 0.1200000 1.20000E001
3 3.00E00 b3b3 d43+ 0.1130000 1.13000E-04
4+ 4.00E00 b3b4+ d44+d 11114.0000000 1.11140E008
5++ 5.00E00 b d45+d4 null2 null2
6 6.00E00 b3 d46+d4+ 0.1111160 1.11116E005
7+ 7.00E00 b3b d47+d4+ 0.1111117 7.00000E-08
8++ 8.00E00 b3b8 d48+d4+ 8.0000000 1.80000E009
9 9.00E00 b3b9+ d49+d4+ 0.9000000 1.19000E-08
10 1.00E01 b d410+d4 null1 null3
11+ 1.10E01 b3 d411+d4 0.1110000 1.00000E-12
1 1.20E01 b3b d412+d4 11112.0000000 2.00000E012
13 1.30E01 b3b1 d 1111.3000000 1.13000E-12
14+ 1.40E01 b3b14 d4 111111.0000000 1.40000E013
1 1.50E01 b d41 null2 null1
16 1.60E01 b3 d416 6.0000000 1.16000E003
17+ 1.70E01 b3b d417+ 0.7000000 1.11170E-03
1 1.80E01 b3b1 d418+d 11.0000000 1.11800E003
19 1.90E01 b3b19 d419+d4 0.1190000 9.00000E-05
20+ 2.00E01 b d420+d4 null1 null2
2 2.10E01 b3 d421+d4 11.1210000 1.11000E-05
22 2.20E01 b3b d422+d4 11111.2000000 2.00000E007
23+ 2.30E01 b3b2 d423+d4 0.1111123 1.11230E-09
$/tstFmt/ */
call tst t, "tstFmt"
b = jBuf()
st = b'.BUF'
call pipe '+F', b
call tstDataClassOut '. c3 a2i i b3b c5 d4 c13 fl5 f8n2 ex6 e9n3',
, -11, + 23
call pipe '-'
call fmtFTab abc, b
call fmtFAddFlds fmtFReset(abc), oFlds(m.st.1)
m.abc.1.tit = 'c3L'
m.abc.2.fmt = 'e'
m.abc.3.tit = 'drei'
m.abc.4.fmt = 'l7'
call fmtFWriteSt abc, b'.BUF'
call tstEnd t
return
endProcedure tstFmt
tstFTab: procedure expose m.
call pipeIni
/*
$=/tstFTab/
### start tst tstFTab #############################################
testData begin
..---------a2i-b3b------------------d4------fl5-ex6-------
-11 -11 b3 -11+d4++++ -111.100 0.00e-9
-1 -10 b 4-10+d4+++ null1 null3 .
- -9 b3b-9 d4-9+d4+++ -11.000 -0.1e-9
-8+ -8 b3b- d4-8+d4++ -18.000 -1.2e10
-7 -7 b3b d4-7+d4+ -7.000 -1.7e-7
- -6 b3 d4-6+d4 -0.111 -6.0e06
-5+ -5 b d4-5+d null2 null2 .
-4 -4 b3b-4 d4-4+ ******** -1.1e08
- -3 b3b- d4-3 -0.113 -1.1e-4
-2+ -2 b3b d4- -0.120 -1.2e01
-1 -1 b3 d4 -0.100 -1.0e-2
0 0 b d null1 null1 .
1+ 1 b3 d4 0.100 1.00e-2
2++ 2 b3b d42 0.120 1.20e01
3 3 b3b3 d43+ 0.113 1.13e-4
4+ 4 b3b4+ d44+d ******** 1.11e08
5++ 5 b d45+d4 null2 null2 .
6 6 b3 d46+d4+ 0.111 1.11e05
7+ 7 b3b d47+d4++ 0.111 7.00e-8
8++ 8 b3b8 d48+d4+++ 8.000 1.80e09
9 9 b3b9+ d49+d4++++ 0.900 1.19e-8
10 10 b 410+d4++++ null1 null3 .
11+ 11 b3 11+d4+++++ 0.111 0.00e-9
1 12 b3b 2+d4++++++ ******** 2.00e12
13 13 b3b1 d 1111.300 0.00e-9
14+ 14 b3b14 d4 ******** 1.40e13
1 15 b d41 null2 null1 .
16 16 b3 d416 6.000 1.16e03
17+ 17 b3b d417+ 0.700 1.11e-3
1 18 b3b1 d418+d 11.000 1.12e03
19 19 b3b19 d419+d4 0.119 9.00e-5
20+ 20 b d420+d4+ null1 null2 .
2 21 b3 d421+d4++ 11.121 1.11e-5
22 22 b3b d422+d4+++ ******** 2.00e07
23+ 23 b3b2 423+d4++++ 0.111 1.11e-9
..---------a2i-b3b------------------d4------fl5-ex6-------
testData end
$/tstFTab/ */
call tst t, "tstFTab"
b = jBuf()
st = b'.BUF'
call pipe '+F', b
call tstDataClassOut '. c3 a2i i b3b c5 d4 c13 fl5 f8n2 ex6 e9n3',
, -11, + 23
call pipe 'P|'
call fTabReset ft, 2 1, 1 3
call fTabAdd ft, '.' , '%-6C' , '.', 'testData begin',
, 'testData end'
call fTabAdd ft, 'a2i' , ' %6i'
call fTabAdd ft, 'b3b' , ' %-12C'
call fTabAdd ft, 'd4' , ' %10C'
call fTabAdd ft, 'fl5' , ' %8.3i'
call fTabAdd ft, 'ex6' , ' %7e'
call fTab ft
call pipe '-'
call tstEnd t
return
endProcedure tstFTab
tstfmtUnits: procedure
/*
$=/tstFmtUnits/
### start tst tstFmtUnits #########################################
. .3 ==> 0s30 ++> 0s30 -+> -0s30 --> -0s30
. .8 ==> 0s80 ++> 0s80 -+> -0s80 --> -0s80
. 1 ==> 1s00 ++> 1s00 -+> -1s00 --> -1s00
. 1.2 ==> 1s20 ++> 1s20 -+> -1s20 --> -1s20
. 59 ==> 59s00 ++> 59s00 -+> -59s0 --> -59s00
. 59.07 ==> 59s07 ++> 59s07 -+> -59s0 --> -59s07
. 59.997 ==> 1m00 ++> 1m00 -+> -1m00 --> -1m00
. 60 ==> 1m00 ++> 1m00 -+> -1m00 --> -1m00
. 60.1 ==> 1m00 ++> 1m00 -+> -1m00 --> -1m00
. 611 ==> 10m11 ++> 10m11 -+> -10m1 --> -10m11
. 3599.4 ==> 59m59 ++> 59m59 -+> -59m5 --> -59m59
. 3599.5 ==> 1h00 ++> 1h00 -+> -1h00 --> -1h00
. 3661 ==> 1h01 ++> 1h01 -+> -1h01 --> -1h01
. 83400 ==> 23h10 ++> 23h10 -+> -23h1 --> -23h10
. 84700 ==> 23h32 ++> 23h32 -+> -23h3 --> -23h32
. 86400 ==> 1d00 ++> 1d00 -+> -1d00 --> -1d00
. 89900 ==> 1d01 ++> 1d01 -+> -1d01 --> -1d01
. 8467200 ==> 98d00 ++> 98d00 -+> -98d0 --> -98d00
. 8595936.00 ==> 99d12 ++> 99d12 -+> -99d1 --> -99d12
. 8638704.00 ==> 100d ++> 100d -+> -100d --> -100d
. 8640000 ==> 100d ++> 100d -+> -100d --> -100d
. 863913600 ==> 9999d ++> 9999d -+> ----d --> -9999d
. 863965440 ==> ++++d ++> 10000d -+> ----d --> -----d
. 8.6400E+9 ==> ++++d ++> +++++d -+> ----d --> -----d
. .3 ==> 0.300 ++> 0.300 -+> -0.300 --> -0.300
. .8 ==> 0.800 ++> 0.800 -+> -0.800 --> -0.800
. 1 ==> 1.000 ++> 1.000 -+> -1.000 --> -1.000
. 1.2 ==> 1.200 ++> 1.200 -+> -1.200 --> -1.200
. 59 ==> 59.000 ++> 59.000 -+> -59.000 --> -59.000
. 59.07 ==> 59.070 ++> 59.070 -+> -59.070 --> -59.070
. 59.997 ==> 59.997 ++> 59.997 -+> -59.997 --> -59.997
. 60 ==> 60.000 ++> 60.000 -+> -60.000 --> -60.000
. 60.1 ==> 60.100 ++> 60.100 -+> -60.100 --> -60.100
. 611 ==> 611.000 ++> 611.000 -+> -611.00 --> -611.000
. 3599.4 ==> 3k599 ++> 3k599 -+> -3k599 --> -3k599
. 3599.5 ==> 3k600 ++> 3k600 -+> -3k600 --> -3k600
. 3661 ==> 3k661 ++> 3k661 -+> -3k661 --> -3k661
. 83400 ==> 83k400 ++> 83k400 -+> -83k400 --> -83k400
. 999999.44 ==> 999k999 ++> 999k999 -+> -999k99 --> -999k999
. 999999.5 ==> 1M000 ++> 1M000 -+> -1M000 --> -1M000
. 567.6543E6 ==> 567M654 ++> 567M654 -+> -567M65 --> -567M654
. .9999991E9 ==> 999M999 ++> 999M999 -+> -999M99 --> -999M999
. .9999996E9 ==> 1G000 ++> 1G000 -+> -1G000 --> -1G000
. .9999991E12 ==> 999G999 ++> 999G999 -+> -999G99 --> -999G999
. .9999996E12 ==> 1T000 ++> 1T000 -+> -1T000 --> -1T000
. 567.6543E12 ==> 567T654 ++> 567T654 -+> -567T65 --> -567T654
. .9999991E15 ==> 999T999 ++> 999T999 -+> -999T99 --> -999T999
. .9999996E15 ==> 1P000 ++> 1P000 -+> -1P000 --> -1P000
. .9999991E18 ==> 999P999 ++> 999P999 -+> -999P99 --> -999P999
. .9999996E18 ==> 1E000 ++> 1E000 -+> -1E000 --> -1E000
. 567.6543E18 ==> 567E654 ++> 567E654 -+> -567E65 --> -567E654
. .9999991E21 ==> 999E999 ++> 999E999 -+> -999E99 --> -999E999
. .9999996E21 ==> 1000E ++> 1000E -+> -1000E --> -1000E
. .9999992E24 ==> 999999E ++> 999999E -+> ------E --> -999999E
. .9999995E24 ==> ++++++E ++> 1000000E -+> ------E --> -------E
. 10.6543E24 ==> ++++++E ++> +++++++E -+> ------E --> -------E
$/tstFmtUnits/ */
call jIni
call tst t, "tstFmtUnits"
d = 86400
lst = .3 .8 1 1.2 59 59.07 59.997 60 60.1 611 ,
3599.4 3599.5 3661 d-3000 d-1700 d d+3500 ,
d * 98 d * 99.49 d * 99.985 d*100 d * 9999 d * 9999.6 ,
d * 1e5
do wx=1 to words(lst)
call tstOut t, right(word(lst, wx), 14) ,
'==>' fmtTime( word(lst, wx) ) ,
'++>' fmtTime( word(lst, wx), 1),
'-+>' fmtTime('-'word(lst, wx), ),
'-->' fmtTime('-'word(lst, wx), 1)
end
lst = subword(lst, 1, 14) 999999.44 999999.5,
567.6543e6 .9999991e9 .9999996e9 .9999991e12 .9999996e12 ,
567.6543e12 .9999991e15 .9999996e15 .9999991e18 .9999996e18 ,
567.6543e18 .9999991e21 .9999996e21 .9999992e24 .9999995e24 ,
10.6543e24
do wx=1 to words(lst)
call tstOut t, right(word(lst, wx), 14) ,
'==>' fmtDec( word(lst, wx) ) ,
'++>' fmtDec( word(lst, wx), 1),
'-+>' fmtDec('-'word(lst, wx), ),
'-->' fmtDec('-'word(lst, wx), 1)
end
call tstEnd t
return
endProcedure tstfmtUnits
tstSb: procedure expose m.
/*
$=/tstSb/
### start tst tstSb ###############################################
end : 0
char 3 : 1 abc
lit d? : 0 .
lit de : 1 de
lit de ? fg fgh: 1 fg
while HIJ : 0 .
end : 0
while Jih : 1 hi
while ? klj: 1 jklkl ?
end : 1
while ? klj: 0 .
char 3 : 0 .
lit : 0 .
until cba : 0 .
until ?qd : 1 abc
until ?qr : 1 defdef .
until ?qr : 0 .
strEnd ? : 1 ?
strEnd ? : 0 .
strEnd ? : 1 ab??cd????gh?
strEnd ") ": 1 ab) .
strEnd ") ": 1 cd) ) gh) .
$/tstSb/ */
call tst t, 'tstSb'
call scanSBSrc s, 'abcdefghijklkl ?'
call out 'end :' scanSBEnd(s)
call out 'char 3 :' scanChar(s, 3) m.s.tok
call out 'lit d? :' scanLit(s, 'd?') m.s.tok
call out 'lit de :' scanLit(s, 'de') m.s.tok
call out 'lit de ? fg fgh:',
scanLit(s, 'de', '?', 'fg', 'fgh') m.s.tok
call out 'while HIJ :' scanWhile(s, 'HIJ') m.s.tok
call out 'end :' scanSBEnd(s)
call out 'while Jih :' scanWhile(s, 'Jih') m.s.tok
call out 'while ? klj:' scanWhile(s, '? klj') m.s.tok
call out 'end :' scanSBEnd(s)
call out 'while ? klj:' scanWhile(s, '? klj') m.s.tok
call out 'char 3 :' scanChar(s, 3) m.s.tok
call out 'lit :' scanLit(s) m.s.tok
call scanSBSrc s, 'abcdefdef ?'
call out 'until cba :' scanUntil(s, 'cba') m.s.tok
call out 'until ?qd :' scanUntil(s, '?qd') m.s.tok
call out 'until ?qr :' scanUntil(s, '?qr') m.s.tok
call out 'until ?qr :' scanUntil(s, '?qr') m.s.tok
call out 'strEnd ? :' scanStrEnd(s, '?') m.s.tok
call out 'strEnd ? :' scanStrEnd(s, '?') m.s.tok
call scanSBSrc s, 'ab??cd????gh?ijk'
call out 'strEnd ? :' scanStrEnd(s, '?') m.s.tok
call scanSBSrc s, 'ab) cd) ) gh) jk) )'
call out 'strEnd ") ":' scanStrEnd(s, ') ') m.s.tok
call out 'strEnd ") ":' scanStrEnd(s, ') ') m.s.tok
call tstEnd t
return
endProcedure tstSb
tstSb2: procedure expose m.
/*
$=/tstSb2/
### start tst tstSb2 ##############################################
end : 0
char 3 : 1 abc
lit d? : 0 .
lit de : 1 de
lit de ? fg fgh: 1 fg
while HIJ : 0 .
end : 0
while Jih : 1 hi
while ? klj: 1 jklkl ?
end : 1
while ? klj: 0 .
char 3 : 0 .
lit : 0 .
until cba : 0 .
until ?qd : 1 abc
until ?qr : 1 defdef .
until ?qr : 0 .
strEnd ? : 1 ?
strEnd ? : 0 .
strEnd ? : 1 ab??cd????gh?
strEnd ") ": 1 ab) .
strEnd ") ": 1 cd) ) gh) .
$/tstSb2/ */
call tst t, 'tstSb2'
call scanIni
call scanSrc s, 'abcdefghijklkl ?'
call out 'end :' scanEnd(s)
call out 'char 3 :' scanChar(s, 3) m.s.tok
call out 'lit d? :' scanLit(s, 'd?') m.s.tok
call out 'lit de :' scanLit(s, 'de') m.s.tok
call out 'lit de ? fg fgh:',
scanLit(s, 'de', '?', 'fg', 'fgh') m.s.tok
call out 'while HIJ :' scanWhile(s, 'HIJ') m.s.tok
call out 'end :' scanEnd(s)
call out 'while Jih :' scanWhile(s, 'Jih') m.s.tok
call out 'while ? klj:' scanWhile(s, '? klj') m.s.tok
call out 'end :' scanEnd(s)
call out 'while ? klj:' scanWhile(s, '? klj') m.s.tok
call out 'char 3 :' scanChar(s, 3) m.s.tok
call out 'lit :' scanLit(s) m.s.tok
call scanSrc s, 'abcdefdef ?'
call out 'until cba :' scanUntil(s, 'cba') m.s.tok
call out 'until ?qd :' scanUntil(s, '?qd') m.s.tok
call out 'until ?qr :' scanUntil(s, '?qr') m.s.tok
call out 'until ?qr :' scanUntil(s, '?qr') m.s.tok
call out 'strEnd ? :' scanStrEnd(s, '?') m.s.tok
call out 'strEnd ? :' scanStrEnd(s, '?') m.s.tok
call scanSrc s, 'ab??cd????gh?ijk'
call out 'strEnd ? :' scanStrEnd(s, '?') m.s.tok
call scanSrc s, 'ab) cd) ) gh) jk) )'
call out 'strEnd ") ":' scanStrEnd(s, ') ') m.s.tok
call out 'strEnd ") ":' scanStrEnd(s, ') ') m.s.tok
call tstEnd t
return
endProcedure tstSb2
tstScan: procedure expose m.
/*
$=/tstScan.1/
### start tst tstScan.1 ###########################################
scan src a034,Und hr123sdfER"st1" 'str2''mit''apo''s' .
scan n tok 4: a034 key val .
scan , tok 1: , key val .
scan n tok 3: Und key val .
scan v tok 1: key val .
scan n tok 10: hr123sdfER key val .
scan q tok 5: "st1" key val st1
scan v tok 1: key val st1
scan a tok 19: 'str2''mit''apo''s' key val str2'mit'apo's
scan v tok 1: key val str2'mit'apo's
$/tstScan.1/ */
call scanIni
call tst t, 'tstScan.1'
call tstScan1 ,'l"litEins"l"litZwei"ndv" "aq1' ,
,"a034,Und hr123sdfER""st1"" 'str2''mit''apo''s' "
call tstEnd t
/*
$=/tstScan.2/
### start tst tstScan.2 ###########################################
scan src a034,Und hr123sdfER"st1" 'str2''mit''apo''s' .
scan n tok 4: a034 key val .
scan , tok 1: , key val .
scan n tok 3: Und key val .
scan b tok 1: key val .
scan n tok 10: hr123sdfER key val .
scan " tok 5: "st1" key val st1
scan b tok 1: key val st1
scan ' tok 19: 'str2''mit''apo''s' key val str2'mit'apo's
scan b tok 1: key val str2'mit'apo's
$/tstScan.2/ */
call tst t, 'tstScan.2'
call tstScan1 , 'ndsb1' ,
,"a034,Und hr123sdfER""st1"" 'str2''mit''apo''s' "
call tstEnd t
/*
$=/tstScan.3/
### start tst tstScan.3 ###########################################
scan src a034,'wie 789abc
scan n tok 4: a034 key val .
scan , tok 1: , key val .
*** err: scanErr ending Apostroph(') missing
. e 1: last token scanPosition 'wie 789abc
. e 2: pos 6 in string a034,'wie 789abc
scan ' tok 1: ' key val .
scan n tok 3: wie key val .
scan s tok 1: key val .
*** err: scanErr illegal number end after 789
. e 1: last token 789 scanPosition abc
. e 2: pos 14 in string a034,'wie 789abc
scan d tok 3: 789 key val .
scan n tok 3: abc key val .
$/tstScan.3/ */
call tst t, 'tstScan.3'
call tstScan1 , 'nds1' ,
,"a034,'wie 789abc"
call tstEnd t
/*
$=/tstScan.4/
### start tst tstScan.4 ###########################################
scan src litEinsefr 23 sdfER'str1'litZwei "str2""mit quo"s .
scan l tok 7: litEins key val .
scan n tok 3: efr key val .
scan b tok 1: key val .
scan d tok 2: 23 key val .
scan b tok 1: key val .
scan n tok 5: sdfER key val .
scan a tok 6: 'str1' key val str1
scan l tok 7: litZwei key val str1
scan b tok 1: key val str1
scan q tok 15: "str2""mit quo" key val str2"mit quo
scan n tok 1: s key val str2"mit quo
scan b tok 1: key val str2"mit quo
$/tstScan.4/ */
call tst t, 'tstScan.4'
call tstScan1 , 'l"litEins"l"litZwei"ndbaq1' ,
,"litEinsefr 23 sdfER'str1'litZwei ""str2""""mit quo""s "
call tstEnd t
/*
$=/tstScan.5/
### start tst tstScan.5 ###########################################
scan src aha;+-=f ab=cdEf eF='strIng' .
scan b tok 1: key val .
scan k tok 4: no= key aha val def
scan ; tok 1: ; key aha val def
scan + tok 1: + key aha val def
scan - tok 1: - key aha val def
scan = tok 1: = key aha val def
scan k tok 4: no= key f val def
scan k tok 4: cdEf key ab val cdEf
scan b tok 1: key ab val cdEf
scan k tok 8: 'strIng' key eF val strIng
scan b tok 1: key eF val strIng
$/tstScan.5/ */
call tst t, 'tstScan.5'
call tstScan1 , 'bk1'," aha;+-=f ab=cdEf eF='strIng' "
call tstEnd t
return
endProcedure tstScan
tstScanRead: procedure expose m.
/*
$=/tstScanRead/
### start tst tstScanRead #########################################
name erste
space
name Zeile
space
nextLine
nextLine
space
name dritte
space
name Zeile
space
name schluss
space
$/tstScanRead/ */
call scanReadIni
call tst t, 'tstScanRead'
b = jBuf('erste Zeile ',,' dritte Zeile schluss ')
s = jOpen(scanRead(b), m.j.cRead)
do while \scanEnd(s)
if scanName(s) then call tstOut t, 'name' m.s.tok
else if scanVerify(s, ' ') then call tstOut t, 'space'
else if scanReadNL(s) then call tstOut t, 'nextLine'
else if \scanEnd(s) then call scanErr s, 'cannot scan'
end
call jClose s
call tstEnd t
/*
$=/tstScanReadMitSpaceLn/
### start tst tstScanReadMitSpaceLn ###############################
name erste
spaceLn
name Zeile
spaceLn
name dritte
spaceLn
name Zeile
spaceLn
name schluss
spaceLn
$/tstScanReadMitSpaceLn/ */
call tst t, 'tstScanReadMitSpaceLn'
s = scanOpen(scanRead(b))
do forever
if scanName(s) then call out 'name' m.s.tok
else if scanSpace(s) then call out 'spaceLn'
else if \scanEnd(s) then call scanErr s, 'cannot scan'
else leave
end
call scanClose s
call tstEnd t
/*
$=/tstScanJRead/
### start tst tstScanJRead ########################################
1 jRead n tok erste val .
2 jRead s tok val .
3 jRead n tok Zeile val .
4 jRead s tok val .
5 jRead n tok dritte val .
6 jRead s tok val .
7 jRead n tok Zeile val .
8 jRead s tok val .
9 jRead n tok schluss val .
10 jRead s tok val .
11 jRead 0 tok 1 val 1
12 jRead s tok val 1
13 jRead + tok + val 1
14 jRead s tok val 1
15 jRead 0 tok 2. val 2..
16 jRead s tok val 2..
17 jRead + tok + val 2..
18 jRead . tok . val 2..
19 jRead s tok val 2..
20 jRead 0 tok +.3 val +.3
21 jRead 0 tok -45e-3 val -45E-3
22 jRead s tok val -45E-3
23 jRead " tok "a""b" val a"b
24 jRead s tok val a"b
25 jRead ' tok 'c''d' val c'd
className 1: ScanRes 18: ScanRes
$/tstScanJRead/ */
call tst t, 'tstScanJRead'
call jWrite jOpen(b,'>>'), '1 + 2. +. +.3-45e-3 "a""b"' "'c''d'"
s = jOpen(scanRead(jClose(b)), '<')
do x=1 while ass('v', jReadO(s)) \== ''
call out x 'jRead' m.v.type 'tok' m.v.tok 'val' m.v.val
v.x = v
end
call jClose s
call out 'className 1:' className(objClass(v.1)),
'18:' className(objClass(v.18))
call tstEnd t
return
endProcedure tstScanRead
tstScanUtilInto: procedure expose m.
/*
$=/tstScanUtilIntoL/
TEMPLATE P3
DSN('DBAF.DA540769.A802A.P00003.BV5I3NRN.REC')
DISP(OLD,KEEP,KEEP)
TEMPLATE P4
DSN('DBAF.DA540769.A802A.P00004.BV5I3NTK.REC')
DISP(OLD,KEEP,KEEP)
LOAD DATA LOG NO RESUME NO REPLACE COPYDDN(TCOPYD)
STATISTICS INDEX(ALL) REPORT NO UPDATE ALL
EBCDIC CCSID(00500,00000,00000)
SORTKEYS
-- ENFORCE NO
SORTDEVT DISK
SORTNUM 160
WORKDDN(TSYUTD,TSOUTD)
INTO TABLE OA1P.TWB981 PART 1 INDDN TREC134
WORKDDN(TSYUTS,TSOUTS)
INTO TABLE "A540769"
."TWK802A1"
PART 00001 INDDN P0
WHEN(00001:00002) = X'0041'
( "DE1"
POSITION( 00003:00010) DECIMAL
, "CH2"
POSITION( 00011:00015) CHAR(00005)
, "TS3"
POSITION( 00016:00041) TIMESTAMP EXTERNAL
, "TI4"
POSITION( 00042:00049) TIME EXTERNAL
, "DA5"
POSITION( 00050:00059) DATE EXTERNAL
, "IN6"
POSITION( 00060:00063) INTEGER
, "RE7"
POSITION( 00064:00067) FLOAT(21)
)
INTO TABLE "A540769"."TWK802A1"
PART 00002 INDDN P0
WHEN(00001:00002) = X'0041'
( "DE1"
POSITION( 00003:00010) DECIMAL
, "CH2"
POSITION( 00011:00015) CHAR(00005)
)
dobido
$/tstScanUtilIntoL/
$=/tstScanUtilInto/
### start tst tstScanUtilInto #####################################
-- 1 scanUtilInto
. ( "DE1"
. POSITION( 00003:00010) DECIMAL
. , "CH2"
. POSITION( 00011:00015) CHAR(00005)
. , "TS3"
. POSITION( 00016:00041) TIMESTAMP EXTERNAL
. , "TI4"
. POSITION( 00042:00049) TIME EXTERNAL
. , "DA5"
. POSITION( 00050:00059) DATE EXTERNAL
. , "IN6"
. POSITION( 00060:00063) INTEGER
. , "RE7"
. POSITION( 00064:00067) FLOAT(21)
. ) .
. -- table OA1P.TWB981 part 00001
-- 2 scanUtilInto
. ( "DE1"
. POSITION( 00003:00010) DECIMAL
. , "CH2"
. POSITION( 00011:00015) CHAR(00005)
. ) .
. -- table A540769.TWK802A1 part 00002
-- 3 scanUtilInto
$/tstScanUtilInto/ */
call scanReadIni
b = jBuf()
call mAddst b'.BUF', mapInline('tstScanUtilIntoL')
call tst t, 'tstScanUtilInto'
s = jOpen(scanUtilReset(ScanRead(b)), '<')
do ix=1
call out '--' ix 'scanUtilInto'
if \ scanUtilInto(s) then
leave
call out ' -- table' m.s.tb 'part' m.s.part
end
call tstEnd t
return
endProcedure tstSCanUtilInto
tstScanWin: procedure expose m.
/*
$=/tstScanWin/
### start tst tstScanWin ##########################################
info 0: last token scanPosition erste Zeile dr+
itteZe\npos 1 in line 1: erste Zeile
name erste
spaceNL
name Zeile
spaceNL
name dritteZeeeile
info 5: last token dritteZeeeile scanPosition zeile4 +
. fuenfueberSechs\npos 1 in line 4: zeile4
spaceNL
name zeile4
spaceNL
name fuenfueberSechsUnddSiebenUNDundUndUAcht
spaceNL
info 10: last token scanPosition undZehnueberElfundNochWeiterZwoe+
lfundim1\npos 9 in line 10: undZehn
name undZehnueberElfundNochWeiterZwoelfundim13
spaceNL
name Punkt
infoE 14: last token Punkt scanPosition \natEnd after line 13: im13+
. Punkt
$/tstScanWin/ */
call scanWinIni
call tst t, 'tstScanWin'
b = jBuf('?erste Zeile?',,'? dritteZeeeile?', '? zeile4 ',
,'? fuenf?', '?ueberSechsUnddS?', '?iebenUNDundUndU?',
,'?Acht ?', '? ?', '? undZehn?',
,'?ueberElfundNoch?', '?WeiterZwoelfund?', '?im13 Punkt?')
s = jOpen(scanWin(b, , , 2, 15), m.j.cRead)
call tstOut t, 'info 0:' scanInfo(s)
do sx=1 while \scanEnd(s)
if scanName(s) then call tstOut t, 'name' m.s.tok
else if scanSpace(s) then call tstOut t, 'spaceNL'
else if \scanEnd(s) then call scanErr s, 'cannot scan'
if sx // 5 = 0 then
call tstOut t, 'info' sx':' scanInfo(s)
end
call tstOut t, 'infoE' sx':' scanInfo(s)
call tstEnd t
/*
$=/tstScanWinRead/
### start tst tstScanWinRead ######################################
info 0: last token scanPosition erste Zeile z3 +
com Ze\npos 1 in line 1: erste Zeile
name erste
spaceNL
name Zeile
spaceNL
name z3
info 5: last token z3 scanPosition com Zeeeile z4 come4 f+
uenf\npos 4 in line 3: z3 com Zeeeile
spaceNL
name z4
spaceNL
name fuenf
spaceNL
info 10: last token scanPosition com Sechs com sieben comA+
cht com\npos 15 in line 5: fuenf c
name com
spaceNL
$/tstScanWinRead/ */
call tst t, 'tstScanWinRead'
call mAdd t.cmp,
, "name Sechs",
, "spaceNL",
, "name com",
, "info 15: last token com scanPosition sieben comAcht c",
|| "om com com\npos 2 in line 7: m sieben com" ,
, "spaceNL",
, "name sieben",
, "spaceNL",
, "name Acht",
, "spaceNL",
, "info 20: last token scanPosition ueberElfundNochWeit com ",
|| "elfundim13\npos 1 in line 11: ueberElfundNoch",
, "name ueberElfundNochWeit",
, "spaceNL",
, "name im13",
, "spaceNL",
, "name Punkt",
, "info 25: last token Punkt scanPosition \natEnd after line ",
|| "13: im13 Punkt",
, "infoE 26: last token Punkt scanPosition \natEnd after line",
|| " 13: im13 Punkt"
b = jBuf('?erste Zeile?',,'? z3 com Zeeeile?', '? z4 come4 ',
,'? fuenf c?', '?om Sechs co?', '?m sieben com?',
,'?Acht com com ?', '? com ?', '? com undZehn?',
,'?ueberElfundNoch?', '?Weit com elfund?', '?im13 Punkt?')
s = scanWin(b, , , 2, 15)
call scanOpts s, , , 'com'
call tstOut t, 'info 0:' scanInfo(jOpen(s, m.j.cRead))
do sx=1 while \scanEnd(s)
if scanName(s) then call tstOut t, 'name' m.s.tok
else if scanSpace(s) then call tstOut t, 'spaceNL'
else if \scanEnd(s) then call scanErr s, 'cannot scan'
if sx // 5 = 0 then
call tstOut t, 'info' sx':' scanInfo(s)
end
call tstOut t, 'infoE' sx':' scanInfo(s)
call tstEnd t
return
endProcedure tstScanWin
tstjCatSql: procedure expose m.
/*
$=/tstJCatSql/
### start tst tstJCatSql ##########################################
cmd1 select current time stamp from s.1
cmd2 update ";--""'/*"
cmd3 delete '*/''"' / 3 - 1
cmd4 .
$/tstJCatSql/ */
call tst t, 'tstJCatSql'
b = jBuf('select -- /* c1', ' /* c1 */ current/* c2 " '' ',
,'c3"', ' c4 */time', 'stamp-- c5', 'from s.1; /* c6 */ ;' ,
,';update ";--""''/*";; del123',
, 'ete ''*/''''"'' / 3 - 1 -- c7', '/*c8 */ ')
call jCatSqlReset tstJCat, , jOpen(b, '<'), 30
do sx=1 until nx = ''
nx = jCatSqlNext(tstJCat, ';')
call tstOut t, 'cmd'sx nx
end
call jClose b
call tstEnd t
return
endProcedure tstJCatSql
tstScanSql: procedure expose m.
call scanWinIni
/*
$=/tstScanSqlId/
### start tst tstScanSqlId ########################################
sqlId ABC
spaceNL
sqlId AB__345EF
spaceNL
$/tstScanSqlId/ */
call tst t, 'tstScanSqlId'
b = jBuf('abc -- kommentar', right('ab_', 72), '_345ef-- kom')
s = jOpen(scanSql(b), m.j.cRead)
do sx=1 while \scanEnd(s)
if scanSqlID(s) then call tstOut t, 'sqlId' m.s.val
else if scanSpace(s) then call tstOut t, 'spaceNL'
else call scanErr s, 'cannot scan'
end
call tstEnd t
/*
$=/tstScanSqlDelimited/
### start tst tstScanSqlDelimited #################################
sqlDeId ABC
spaceNL
sqlDeId AB_3F
spaceNL
sqlDeId abc
spaceNL
sqlDeId ab_Ef
spaceNL
$/tstScanSqlDelimited/ */
call tst t, 'tstScanSqlDelimited'
b = jBuf('abc -- kommentar',,' -- ',,right('ab_', 72),'3F-- kom',
, '"abc" -- ko', ' -- ',,right('"ab_', 72),'Ef"-- kom')
s = jOpen(scanSql(b), m.j.cRead)
do sx=1 while \scanEnd(s)
if scanSqlDeID(s) then call tstOut t, 'sqlDeId' m.s.val
else if scanSpace(s) then call tstOut t, 'spaceNL'
else call scanErr s, 'cannot scan'
end
call tstEnd t
/*
$=/tstScanSqlQualified/
### start tst tstScanSqlQualified #################################
sqlQuId ABC 1 ABC
sqlQuId AB_3F 1 AB_3F
sqlQuId abc 1 abc
sqlQuId ab_Ef 1 ab_Ef
sqlQuId EINS.Zwei.DREI 3 EINS
sqlQuId vi er.fu enf 2 vi er
$/tstScanSqlQualified/ */
call tst t, 'tstScanSqlQualified'
b = jBuf('abc -- kommentar',,' -- ',,right('ab_', 72),'3F-- kom',
, '"abc" -- ko', ' -- ',right('"ab_', 72),'Ef"-- kom',
, 'eins."Zwei', '" -- com', ' . -- com', ' -- com',
, 'drei -- ko', '"vi er"."fu enf " -- co')
s = jOpen(scanSql(b), m.j.cRead)
do sx=1 while \scanEnd(s)
if scanSqlQuID(s) then
call tstOut t, 'sqlQuId' m.s.val m.s.val.0 m.s.val.1
else if scanSpace(s) then call tstOut t, 'spaceNL'
else call scanErr s, 'cannot scan'
end
call tstEnd t
/*
$=/tstScanSqlNum/
### start tst tstScanSqlNum #######################################
sqlNum 1
spaceNL
sqlNum 2..
spaceNL
sqlNum .3
spaceNL
sqlNum 4.5
spaceNL
sqlNum +6
spaceNL
sqlNum +7.03
spaceNL
sqlNum -8
spaceNL
sqlNum -.9
spaceNL
sqlNum 1E2
spaceNL
sqlNum -2.E-2
spaceNL
sqlNum +.3E+3
spaceNL
$/tstScanSqlNum/ */
call tst t, 'tstScanSqlNum'
b = jBuf('1 2. .3 4.5 +6 + --kom', , ' -- com ', , ' 7.03 -8 - .9',
'1e2 - 2.e-2 + .3e+3')
s = jOpen(scanSql(b), m.j.cRead)
do sx=1 while \scanEnd(s)
if scanSqlNum(s) then
call tstOut t, 'sqlNum' m.s.val
else if scanSpace(s) then call tstOut t, 'spaceNL'
else call scanErr s, 'cannot scan'
end
call tstEnd t
/*
$=/tstScanSqlNumUnit/
### start tst tstScanSqlNumUnit ###################################
sqlNumUnit 1 KB
spaceNL
sqlNumUnit .3 MB
sqlNumUnit .5
sqlNumUnit +6.E-5 B
spaceNL
sqlNumUnit -7
char *
spaceNL
sqlNumUnit -.8
char T
char B
spaceNL
*** err: scanErr scanSqlNumUnit after +9. bad unit TB
. e 1: last token Tb scanPosition .
. e 2: pos 41 in line 1: 1 kb .3mB.5 + 6.e-5B -7* -.8 TB + 9.T+
b
sqlNumUnit +9..
spaceNL
$/tstScanSqlNumUnit/ */
call tst t, 'tstScanSqlNumUnit'
b = jBuf('1 kb .3mB.5 + 6.e-5B -7* -.8 TB + 9.Tb')
s = jOpen(scanSql(b), m.j.cRead)
do sx=1 while \scanEnd(s)
if scanSqlNumUnit(s, 0, 'B KB MB') then
call tstOut t, 'sqlNumUnit' m.s.val
else if scanSpace(s) then call tstOut t, 'spaceNL'
else if scanChar(s ,1) then call tstOut t, 'char' m.s.tok
else call scanErr s, 'cannot scan'
end
call tstEnd t
return
endProcedure tstScanSql
/*--- one single test scan with lines to scan in stem ln -------------*/
tstScan1:
parse arg sc, classs, ln
if sc == '' then do
call tstOut t, 'scan src' ln
call scanSrc scanOpts(s), ln
end
else do
call tstOut t, 'scan scanner' sc
s = sc
end
m.s.key = ''
m.s.val = ''
do forever
x = tstScanType(s, classs)
if x == '' then
leave
call tstOut t, 'scan' x 'tok' length(m.s.tok)':' m.s.tok ,
'key' m.s.key 'val' m.s.val
end
return
endProcedure tstScan1
tstScanType: procedure expose m.
parse arg s, opt
cx = 1
a2 = ''
res = 0
do while cx <= length(opt)
f = substr(opt, cx, 1)
cx = cx + 1
if pos(substr(opt, cx, 1), "'""") > 0 then do
m.tstScanType.src = opt
m.tstScanType.pos = cx
call scanString tstScanType
a2 = m.tstScanType.val
cx = m.tstScanType.pos
end
if f == 'a' then
res = scanString(s, "'")
else if f == 'b' then
res = scanSpace(s)
else if f == 'c' then
res = scanChar(s, a2)
else if f == 'd' then
res = scanNat(s, a2)
else if f == 'k' then
res = scanKeyValue(s, 'def')
else if f == 'l' then
res = scanLit(s, a2)
else if f == 'q' then
res = scanString(s, '"')
else if f == 'v' then
res = scanVerify(s, a2)
else if f == 'w' then
res = scanWord(s)
else if f == 'y' then
res = scanVerify(s, a2, 'm')
if res then
return f
end
return scanType(s)
endProcedure tstScanType
/* copx tstBase end *************************************************/
/* copx tst begin ****************************************************
test infrastructure
***********************************************************************/
/*--- migrate all compares to new ones:
tstCI input compare
tstCO ouput migrated compares
tstCIO input and output -------------------------------------*/
tstCI: procedure expose m.
parse arg m, nm
m.m.CIO = 0
signal tstCIwork
tstCIO: procedure expose m.
parse arg m, nm
m.m.CIO = 1
tstCIwork:
m.m.name = nm
m.m.cmp.1 = left('### start tst' nm '', 67, '#')
do ix=2 to arg()-1
m.m.cmp.ix = arg(ix+1)
end
m.m.cmp.0 = ix-1
if m.m.CIO then
call tstCO m
return
tstCO: procedure expose m.
parse arg m
call tst2dpSay m.m.name, m'.CMP', 68
return
/*--- initialise m as tester with name nm
use inline input nm as compare lines -----------------------*/
tstReset: procedure expose m.
parse arg m, nm
call tstIni
m.m.name = nm
m.m.inIx = 0
m.m.out.0 = 0
m.m.err = 0
m.m.errHand = 0
m.tst.act = m
if \ datatype(m.m.trans.0, 'n') then
m.m.trans.0 = 0
m.m.trans.old = m.m.trans.0
return
endProcedure tstReset
tst: procedure expose m.
parse arg m, nm, cmpSt
call tstReset m, nm
m.tst.tests = m.tst.tests+1
if cmpSt == '' then do
cmpSt = mCut(t'.CMP', 0)
call tst4dp cmpSt, mapInline(nm)
end
m.m.cmp = cmpSt
m.m.moreOutOk = 0
call mAdd mCut(m'.IN', 0), 'tst in line 1 eins ,' ,
, 'tst in line 2 zwei ; ' ,
, 'tst in line 3 drei .schluss.'
call tstOut m, left('### start tst' nm '', 67, '#')
call errReset 'h', 'return tstErrHandler(ggTxt)'
m.m.errCleanup = m.err.cleanup
if m.tst.ini.j \== 1 then do
/* call err implement outDest 'i', 'call tstOut' quote(m)', msg'
*/ end
else do
call oMutatName m, 'Tst'
call oMutatName m'.IN', 'Tst'
m.m.jReading = 1
m.m.jWriting = 1
m.m.jUsers = 0
m.m.in.jReading = 1
m.m.in.jWriting = 1
m.m.in.jUsers = 0
if m.tst.ini.e \== 1 then do
m.m.oldJin = m.j.in
m.m.oldOut = m.j.out
m.j.in = m
m.j.out = m
end
else do
if m.pipe.0 <> 2 then
call tstErr m, 'm.pipe.0' m.pipe.0 '<> 2'
call pipe '+Ff', m , m'.IN'
end
end
return m
endProcedure tst
tstEnd: procedure expose m.
parse arg m, opt opt2
cmp = m.m.cmp
m.m.jReading = 0
m.m.jWriting = 0
if m.tst.ini.j == 1 then do
m.m.jReading = 0
m.m.jWriting = 0
if m.tst.ini.e \== 1 then do
m.j.in = m.m.oldJin
m.j.out = m.m.oldOut
end
else do
if m.j.in \== m'.IN' | m.j.out \== m then
call tstErr m, m.j.in '\==' m '|' m.j.out '\==' m
call pipe '-'
if m.pipe.0 <> 2 then
call tstErr m, 'm.pipe.0' m.pipe.0 '<> 2'
end
end
if m.m.err = 0 then
if m.m.errCleanup \= m.err.cleanup then
call tstErr m, 'err.Cleanup' m.err.cleanup '<> old',
m.m.errCleanup
if m.m.out.0 \= m.cmp.0 & \ (m.m.moreOutOk,
& m.m.out.0 > m.cmp.0) then do
call tstErr m, 'old' m.cmp.0 'lines \= new' m.m.out.0
do nx = m.m.out.0 + 1 to min(m.m.out.0+10, m.cmp.0)
say 'old - ' m.cmp.nx
end
end
call errReset 'h'
m.tst.act = ''
soll = 0
if opt = 'err' then do
soll = opt2
if m.m.err \= soll then
call err soll 'errors expected, but got' m.m.err
end
if m.m.err \= soll then do
say 'new lines:' (m.m.out.0 - 1)
call tst2dpSay m.m.name, m'.OUT', 68
end
say left('###' m.m.name 'end with' m.m.err 'errors ', 67, '#')
if 1 & m.m.err \= soll then
call err 'dying because of' m.m.err 'errors'
m.m.trans.0 = m.m.trans.old
return
endProcedure tstEnd
tst2dp: procedure expose m.
parse arg st, dp, ml
dx = m.dp.0
do sx=1 to m.st.0
li = m.st.sx
cx = 1
do until cx > length(li)
c = substr(li, cx, 1)
ou = left('.', strip(c) == '' | pos(c, '.+') > 0)
ex = min(length(li),cx+ml-length(ou)-2)
ou = ou || substr(li, cx, ex+1-cx)
dx = dx + 1
c = right(ou, 1)
if ex < length(li) then
m.dp.dx = ou || '+'
else if strip(c) == '' | pos(c, '.+') > 0 then
m.dp.dx = ou || '.'
else
m.dp.dx = ou
cx = ex +1
end
end
m.dp.0 = dx
return
endProcedure tst2dp
tst2dpSay: procedure expose m.
parse arg name, st, ml
say '$=/'name'/'
call tst2dp st, mCut('TST.TMP', 0), 68
do nx=1 to m.tst.tmp.0
say ' ' m.tst.tmp.nx
end
say '$/'name'/'
return tst2dpSay
tst4dp: procedure expose m.
parse arg st, dp
sx = m.st.0
inData = 0
data = ''
do dx=1 to m.dp.0
li = strip(m.dp.dx)
if pos(left(li, 1), '.+') > 0 then
li = substr(li, 2)
if right(li, 1) == '+' then do
inData = 1
data = data || left(li, length(li)-1)
iterate
end
if right(li, 1) == '.' then
li = left(li, length(li)-1)
sx = sx + 1
m.st.sx = repAll(data || li, '$ä', '/*', '$ö', '*/')
inData = 0
data = ''
end
m.st.0 = sx
if inData then
call err 'end inData'
return
endProcedure tst4dp
/*--- write to test: say lines and compare them ----------------------*/
tstWrite: procedure expose m.
parse arg m, arg
call tstOut m, 'out:' arg
return
endProcedure tstWrite
tstOut: procedure expose m.
parse arg m, arg
do tx=m.m.trans.0 by -1 to 1
arg = repAll(arg, word(m.m.trans.tx, 1),
, subword(m.m.trans.tx, 2))
end
call mAdd m'.OUT', arg
nx = m.m.out.0
cmp = m.m.cmp
c = m.cmp.nx
if nx > m.cmp.0 then do
if nx = m.cmp.0+1 & \ m.m.moreOutOK then
call tstErr m, 'more new Lines' nx
end
else if c \== arg then do
do cx=1 to min(length(c), length(arg)) ,
while substr(c, cx, 1) == substr(arg, cx, 1)
end
msg = 'old line' nx '<> new overnext, firstDiff' cx',',
'len old' length(c)', new' length(arg)
if cx > 10 then
msg = overlay('|', msg, cx-10)
call tstErr m, msg
say c
end
say arg
return 0
endProcedure tstOut
tstWriteO: procedure expose m.
parse arg m, var
cl = objClass(var, '')
if cl == '' then do
if var == '' then
call tstOut t, 'tstR: @ obj null'
else
call tstOut t, 'no class for' var 'in tstWriteO|'
end
else if abbrev(var, m.o.escW) then do
call tstOut t, o2String(var)
end
else if cl == m.class.classV then do
call tstOut t, m.var
end
else if oKindOf(var, 'JRW') then do
call tstOut t, 'tstWriteO kindOf JRW jWriteNow begin <<<'
call jWriteNow m, var
call tstOut t, 'tstWriteO kindOf JRW jWriteNow end >>>'
end
else if oKindOf(var, 'ORun') then do
call tstOut t, 'tstWriteO kindOf ORun oRun begin <<<'
call oRun var
call tstOut t, 'tstWriteO kindOf ORun oRun end >>>'
end
else do
do tx=m.m.trans.0 by -1 to 1 ,
while word(m.m.trans.tx, 1) \== var
end
if tx < 1 then
call mAdd M'.TRANS', var 'tstWriteoV' || (m.m.trans.0+1)
call classOut , var, 'tstR: '
end
return
endProcedure tstWriteO
tstReadO: procedure expose m.
parse arg m, arg
if right(m, 3) == '.IN' then
m = left(m, length(m)-3)
else
call err 'tstReadO bad m' m
ix = m.m.inIx + 1
m.m.inIx = ix
if ix <= m.m.in.0 then do
call tstOut m, '#jIn' ix'#' m.m.in.ix
return s2o(m.m.in.ix)
end
call tstOut m, '#jIn eof' ix'#'
return ''
endProcedure tstReadO
tstFilename: procedure expose m.
parse arg suf, opt
if m.err.os == 'TSO' then do
dsn = dsn2jcl('~tmp.tst.'suf)
if opt = 'r' then do
if sysDsn("'"dsn"'") \== 'DATASET NOT FOUND' then
call adrTso "delete '"dsn"'"
call csiOpen 'TST.CSI', dsn'.**'
do while csiNext('TST.CSI', 'TST.FINA')
say 'deleting csiNext' m.tst.fina
call adrTso "delete '"m.tst.fina"'"
end
end
return dsn
end
else if m.err.os == 'LINUX' then do
if abbrev(suf, '/') then
fn = suf
else
fn = .Stream%%new('~/tmp/tst/'suf)%%qualify /* full path */
cx = lastPos('/', fn)
if cx > 0 then do
dir = left(fn, cx-1)
if \sysIsFileDirectory(dir) then
call adrSh "mkdir -p" dir
if \sysIsFileDirectory(dir) then
call err 'tstFileName could not create dir' dir
end
if opt \= 'r' then
nop
else if sysIsFile(fn) then
call sysFileDelete fn
else if sysIsFileDirectory(fn) then
call adrSh 'rm -r' fn
return fn
end
else
call err 'tstFilename does not implement os' m.err.os
endProcedure tstFilename
/*--- say total errors and fail if not zero --------------------------*/
tstTotal: procedure expose m.
say '######'
say '######'
say '######' m.tst.tests 'tests with' ,
m.tst.err 'errors in' m.tst.errNames
say '######'
say '######'
if m.tst.err \== 0 then
call err m.tst.err 'errors total'
return
endProcedure tstTotal
/*--- test err: message, count it and continue -----------------------*/
tstErr: procedure expose m.
parse arg m, msg
say '### error' msg
m.m.err = m.m.err + 1
m.tst.err = m.tst.err + 1
nm = m.m.name
if wordPos(nm, m.tst.errNames) < 1 then
m.tst.errNames = m.tst.errNames nm
return 0
endProcedure tstErr
/*--- tstErrHandler: intercept errors --------------------------------*/
tstErrHandler: procedure expose m.
parse arg ggTxt
m = m.tst.act
if m == '' then
call err ggTxt
m.m.errHand = m.m.errHand + 1
call errMsg ' }'ggTxt
call tstOut m.tst.act, '*** err:' m.err.1
do x=2 to m.err.0
call tstOut m, ' e' (x-1)':' m.err.x
end
return 0
endSubroutine tstErrHandler
tstTrc: procedure expose m.
parse arg msg
m.tst.trc = m.tst.trc + 1
say 'tstTrc' m.tst.trc msg
return m.tst.trc
endProcedure tstTrc
/*--- tstIni: global initialization ----------------------------------*/
tstIni: procedure expose m.
if m.tst.ini \== 1 then do
m.tst.ini = 1
call mapIni
m.tst.err = 0
m.tst.trc = 0
m.tst.errNames = ''
m.tst.tests = 0
m.tst.act = ''
end
if m.tst.ini.j \== 1 & m.j.ini == 1 then do
m.tst.ini.j = 1
call classNew 'n Tst u JRWO', 'm',
, "jReadO return tstReadO(m)",
, "jWrite call tstOut m, line",
, "jWriteO call tstWriteO m, var"
end
if m.tst.ini.e \== 1 & m.pipe.ini == 1 then do
m.tst.ini.e = 1
end
return
endProcedure tstIni
/* copx tst end **************************************************/
/* copx tstData begin *************************************************/
tstData: procedure expose m.
parse arg ty 2 le 'n' nu, l, r, num
abs = abs(num)
if nu \== '' then do
if abs // 5 = 0 then
return 'null' || (abs % 5 // nu + 1)
end
if ty = 'c' then do
if le = '' then
le = 8
le = abs // le + 1
if r = '' then
r = '+'
return left(l || num || r, le, right(r, 1))
end
if pos(ty, 'ief') < 1 then
call err 'bad type' ty
nn = abs
if abbrev(num, '-') | abbrev(num, '+') then
parse var num si 2 nn
else
si = ''
if ty == 'e' then
ex = 'e' || left('-', abs // 2) || (abs // 15)
else
ex = ''
if le \== '' then
nn = right(nn, abs // max(1, le - length(si||ex)) + 1, 1)
if ty \== 'i' & (abs // 4) \= 0 & length(nn) > 1 then
nn = overlay('.', nn, length(nn) - abs // length(nn))
return si || nn || ex
endProcedure tstData
tstDataClassFo: procedure expose m.
parse arg flds
ty = ''
do fx=1 by 2 to words(flds)
if word(flds, fx) = '.' then
ty = ty', v'
else
ty = ty', f' word(flds, fx) 'v'
end
t = classNew('n* tstData u' substr(ty, 2))
fo = oNew(m.t.name)
fs = oFlds(fo)
do fx=1 to m.fs.0
f = fo || m.fs.fx
m.f = word(flds, 2*fx)
end
return fo
endProcedure tstDataClassFo
tstDataClassOut: procedure expose m.
parse arg flds, f, t
fo = tstDataClassFo(flds)
fs = oFlds(fo)
do x=f to t
o = oCopy(fo)
do fx=1 to m.fs.0
na = substr(m.fs.fx, 2)
f = o || m.fs.fx
m.f = tstData(m.f, na, '+'na'+', x)
end
call outO o
end
return
endProcedure tstDataClassOut
/* copx tstData end ***************************************************/
/* copy tstAll end **************************************************/
/* copy time begin -----------------------------------------------------
11.05.23 wk: numeric digits transparent: in jeder Procedure drin
time2jul, tst externalisiert
----------------------------------------------------------------------*/
/*--- read timeZoneOffset and leapSeconds registers
and set variables for uniq ----------------------------------*/
timeReadCvt: procedure expose m.
parse arg debug
numeric digits 15
/* offsets documented in z/OS Data Areas Vol.1 */
cvtOH = '00000010' /* cvt control block Address */
cvtext2O = x2d('00000560') /* offset to extension 2 */
cvtldtoO = x2d('00000038') /* offset to timezone */
cvtlsoO = x2d('00000050') /* offset to leapSeconds */
/* CVT CB address + extention2 */
cvtExt2A = C2D(STORAGE(cvtOH,4)) + cvtext2O
/* cvtLdto timeZone address +offset */
m.timeZone = c2d(STORAGE(d2x(cvtext2A+cvtldtoO, 8), 8))
m.timeStckUnit = 1e-6 / 256 / 16
/* cvtLso LeapSecs address +offset */
m.timeLeap = C2D(STORAGE(d2x(cvtext2A+cvtlsoO, 8), 8))
m.timeUQDigits = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ012345678'
/* find lrsn of day 0 */
m.timeUQZero = timeGmt2Lrsn('2004-12-31-00.00.22.000000')
/* 0 out last 6 bits */
m.timeUQZero = b2x(overlay('000000', x2b(m.timeUQZero), 43))
if debug == 1 then do
say 'stckUnit =' m.timeStckUnit
say 'timeLeap =' d2x(m.timeLeap,16) '=' m.timeLeap ,
'=' format(m.timeLeap * m.timeStckUnit, 9,3) 'secs'
say 'timeZone =' d2x(m.timeZone,16) '=' m.timeZone,
'=' format(m.timeZone * m.timeStckUnit, 6,3) 'secs'
say "cvtext2_adr =" d2x(cvtExt2A, 8)
say 'timeUQZero =' m.timeUQZero
say 'timeUQDigis =' ,
length(m.timeUQDigits) 'digits' m.timeUQDigits
end
m.timeReadCvt = 1
return
endSubroutine timeReadCvt
timestampParse:
parse arg yyyy'-'mo'-'dd'-'hh'.'mm'.'ss'.'ffffff
return
/*--- GMT timestamp yyyy-mm.... -> stck value char(8)
BLSUXTID is described in z/OS V1R7.0 MVS IPCS Customization
BLSUXTID format : mo/dd/yyyy hh:mm:ss.ffffff ---------------*/
timeGmt2Stck: procedure expose m.
parse arg tst
call timestampParse tst
tDate = mo'/'dd'/'yyyy' 'hh':'mm':'ss'.'ffffff
ACC=left('', 8, '00'x)
ADDRESS LINKPGM "BLSUXTID TDATE ACC"
RETURN acc
endProcedure timeGmt2Stck
/*--- GMT timestamp yyyy-mm.... -> stck value in hex(16) ------------*/
timeGmt2LRSN: procedure expose m.
return c2x(left(timeGmt2Stck(arg(1)), 6))
endProcedure timeGmt2LRSN
/*--- LZT (Locale Zurich Tst -> stck value in hex(16) ---------------*/
timeLZT2LRSN: procedure expose m.
parse arg tst
numeric digits 23
if m.timeReadCvt \== 1 then
call timeReadCvt
return left(d2x(c2d(timeGmt2Stck(tst)) ,
- m.timeZone + m.timeLeap, 16), 12)
endProcedure timeLZT2LRSN
/*--- conversion from Stck Clock Value to GMT Timestamp
BLSUXTOD is described in z/OS V1R7.0 MVS IPCS Customization
input -> + leapseconds -> output ----------------------------*/
timeStck2Gmt: PROCEDURE expose m.
parse arg stck
stck = left(stck, 8, '00'x)
TDATE = COPIES('0' , 26)
ADDRESS LINKPGM "BLSUXTOD stck TDATE"
/* return format : mo/dd/yyyy hh:mm:ss.ffffff */
/* Timestamp format: yyyy-mm-dd-hh.mm.ss.ffffff */
parse var TDATE mo '/' dd '/' yyyy hh ':' mm ':' ss '.' ffffff
RETURN yyyy'-'mo'-'dd'-'hh'.'mm'.'ss'.'ffffff
endProcedure timeStck2Gmt
/*--- conversion from Lrsn Clock Value to GMT Timestamp -------------*/
timeLrsn2Gmt:
return timeStck2Gmt(x2c(arg(1)))
endProcedure timeLrsn2Gmt
/*--- conversion from Lrsn Clock Value to LZT Local Zurich Time -----*/
timeLrsn2LZT: procedure expose m.
parse arg lrsn
numeric digits 23
if m.timeReadCvt \== 1 then
call timeReadCvt
return timeStck2Gmt(d2c(x2d(left(lrsn, 16, 0)) ,
+ m.timeZone-m.timeLeap))
endProcedure timeLrsn2LZT
/*--- timestamp to julian --------------------------------------------*/
time2jul: procedure expose m.
parse arg yyyy '-' mm '-' dd '-'
/* date function cannot convert to julian, only from julian
==> guess a julian <= the correct and
try the next values
*/
j = trunc((mm-1) * 29.5) + dd
yy = right(yyyy, 2)
do j=j by 1
j = right(j, 3, 0)
d = date('s', yy || j, 'j')
if substr(d, 3) = yy || mm || dd then
return yy || j
end
return
endProcedure time2jul
/* copy time end -----------------------------------------------------*/
/* copy fmt begin **************************************************/
/*--- format the first arg by the format in the second ---------------*/
fmt: procedure
parse arg v, f 2 l
if abbrev('-', f) then
return v
else if f == 'l' then
return left(v, l)
else if f == 'r' then
return right(v, l)
else if f == 'f' then do
parse value l'.0.0.' with b '.' a '.' e '.'
return format(v, b, a, e, 0)
end
else if f == 'e' then do
parse var l b '.' a '.' e '.'
if b == '' then b = 2
if a == '' then a = 2
if e == '' then e = 2
res = format(v, b, a, e, 0)
y = length(res)-e-1
if substr(res, y) = '' then
return left(res, y-1)left('E', e+1, 0)
else if substr(res, y+1, 1) == '+' then
return left(res, y)substr(res, y+2)
else if substr(res, y+2, 1) == '0' then
return left(res, y+1)substr(res, y+3)
else
call err 'formatoverflow' f || l 'for' v '-->' res
end
else if f = 's' then
if l == '' then
return strip(v, 't')
else
return strip(v, l)
else if f == 'w' then do
parse var l st ',' le
return substr(v, st, le)
end
else
call err 'bad format' f l 'for' v
endProcedure fmt
/*--- format special (title, null Value also for numbers) ------------*/
fmtS: procedure expose m.
parse arg v, ty 2 l
if ty == 'f' then do
if \ dataType(v, 'n') then do
parse value l'.0.0.' with b '.' a '.' e '.'
return right(v, b + a + (a \== 0) + e + 2 * (e > 0))
end
end
else if ty == 'e' then do
if \ dataType(v, 'n') then do
parse var l b '.' a '.' e '.'
if b == '' then b = 2
if a == '' then a = 2
if e == '' then e = 2
return right(v, b + a + (a \== 0) + e + (e > 0))
end
end
return fmt(v, ty || l)
endProcedure fmtS
fmtTime: procedure expose m.
parse arg s, signed
return fmtUnits(s, 't', signed==1)
endProcedure fmtTime
fmtDec: procedure expose m.
parse arg s, signed
return fmtUnits(s, 'd', signed==1)
endProcedure fmtDec
fmtUnits: procedure expose m.
parse arg s, scale, signed
if s >= 0 then
res = fmtUnitsNN(s, scale, wi)
else
res = '-'fmtUnitsNN(abs(s), scale, wi)
len = m.fmt.units.scale.f.length + signed
if length(res) <= len then
return right(res, len)
if \ abbrev(res, '-') then
return right(right(res, 1), len, '+')
if length(res) = len+1 & datatype(right(res, 1), 'n') then
return left(res, len)
return right(right(res, 1), len, '-')
endProcedure fmtUnits
fmtUnitsNN: procedure expose m.
parse arg s, scale
sf = 'FMT.UNITS.'scale'.F'
sp = 'FMT.UNITS.'scale'.P'
if m.sf \== 1 then do
call fmtIni
if m.sf \== 1 then
call err 'fmtUnitsNN bad scale' scale
end
do q=3 to m.sp.0 while s >= m.sp.q
end
do forever
qb = q-2
qu = q-1
r = format(s / m.sp.qb, ,0)
if q > m.sf.0 then
return r || substr(m.sf.units, qb, 1)
if r < m.sf.q * m.sf.qu then
return (r % m.sf.qu) || substr(m.sf.units, qu, 1) ,
|| right(r //m.sf.qu, m.sf.width, 0)
/* overflow because of rounding, thus 1u000: loop back */
q = q + 1
end
endProcedure fmtUnitsNN
fmtIni: procedure expose m.
if m.fmt.ini == 1 then
return
m.fmt.ini = 1
call fmtIniUnits 't', '?smhd', 0 100 60 60 24 100, 0.01, 2
call fmtIniUnits 'd', '?.kMGTPE', 0 copies('1000 ',8), 0.001, 3
return
endProcedure fmtIni
fmtIniUnits: procedure expose m.
parse arg sc, us, fact, prod, wi
sf = 'FMT.UNITS.'sc'.F'
sp = 'FMT.UNITS.'sc'.P'
m.sf.0 = words(fact)
if length(us) + 1 <> m.sf.0 then
call err 'fmtIniUnits mismatch' us '<==>' fact
m.sf.1 = word(fact, 1)
m.sp.1 = prod
do wx=2 to m.sf.0
wx1 = wx-1
m.sf.wx = word(fact, wx)
m.sp.wx = m.sp.wx1 * m.sf.wx
end
m.sp.0 = m.sf.0
m.sf.units = us
m.sf.width = wi
m.sf.length= 2 * wi + 1
m.sf = 1
return
endProcedure fmtIniUnits
/* copy fmt end **************************************************/
/* copy fmtF begin **************************************************/
fmtFCsvAll: procedure expose m.
parse arg fSep
if fSep = '' then
fSep = ','
if \ inO(i) then
return
f = oFlds(i)
li = ''
do fx=1 to m.f.0
li = li',' substr(m.f.fx, 2)
end
call out substr(li, 3)
do until \ inO(i)
li = ''
do fx=1 to m.f.0
if m.f.fx = '' then do
li = li',' m.i
end
else do
fld = substr(m.f.fx, 2)
li = li',' m.i.fld
end
end
call out substr(li, 3)
end
return
endProcedure fmtFCsvAll
fmtFAdd: procedure expose m.
parse arg m
fx = m.m.0
do ax=2 to arg()
fx = fx + 1
parse value arg(ax) with m.m.fx.fld m.m.fx.fmt m.m.fx.tit
end
m.m.0 = fx
return m
endProcedure fmtFAdd
fmtFAddFlds: procedure expose m.
parse arg m, st
fx = m.m.0
do sx=1 to m.st.0
fx = fx + 1
parse value m.st.sx with m.m.fx.fld m.m.fx.fmt m.m.fx.tit
end
m.m.0 = fx
return m
endProcedure fmtFAddFlds
fmtF: procedure expose m.
parse arg m, st
if arg() >= 3 then
mid = arg(3)
else
mid = ' '
li = ''
do fx=1 to m.m.0
f = st || m.m.fx.fld
li = li || mid || fmtS(m.f, m.m.fx.fmt)
end
return substr(li, 1 + length(mid))
endProcedure fmtF
fmtFTab: procedure expose m.
parse arg m, rdr, wiTi
if m == '' then
m = 'FMTF.F'
return fmtFWriteSt(fmtFReset('FMTF.F'), j2Buf(rdr)'.BUF', wiTi)
endProcedure fmtFTab
fmtFReset: procedure expose m.
parse arg m
m.m.0 = 0
return m
endProcedure fmtFReset
fmtFWriteSt: procedure expose m. ?????????
parse arg m, st, wiTi
if m.st.0 < 1 then
return 0
if m.m.0 < 1 then
call fmtFAddFlds m, oFlds(m.st.1)
call fmtFDetect m, st
if wiTi \== 0 then
call out fmtFTitle(m)
do sx=1 to m.st.0
call out fmtF(m, m.st.sx)
end
return st.0
fmtFWriteSt
fmtFTitle: procedure expose m.
parse arg m
if arg() >= 2 then
mid = arg(2)
else
mid = ' '
li = ''
do fx=1 to m.m.0
if m.m.fx.tit \= '' then
t = m.m.fx.tit
else if m.m.fx.fld = '' then
t = '='
else
t = substr(m.m.fx.fld, 1+abbrev(m.m.fx.fld, '.'))
li = li || mid || fmtS(t, m.m.fx.fmt)
end
return substr(li, 1 + length(mid))
res = ''
fs = m.form.FLDS
do ix=1 to m.fs.0
res = res fmtS(m.fs.ix, m.form.ix)
end
return substr(res, 2)
endProcedure fmtFldTitle
fmtFldTitle: procedure expose m.
parse arg form
res = ''
fs = m.form.FLDS
do ix=1 to m.fs.0
res = res fmtS(m.fs.ix, m.form.ix)
end
return substr(res, 2)
endProcedure fmtFldTitle
fmtFld: procedure expose m.
parse arg form, st
res = ''
fs = m.form.FLDS
do ix=1 to m.fs.0
f = m.fs.ix
res = res fmt(m.st.f, m.form.ix)
end
return substr(res, 2)
endProcedure fmtData
fmtFldSquash: procedure expose m.
parse arg newFo, class, src
fs = oFlds(class)
do fx = 1 to m.fs.0
fd = m.fs.fx
lMi = 9e9
lMa = 0
rMi = 9e9
rMa = 0
len = 0
do sx = 1 to m.src.0
x = verify(m.src.sx.fd, ' ', 'n')
if x < 1 then
iterate
lMi = min(lMi, x)
lMa = max(lMa, x)
x = length(strip(m.src.sx.fd, 't'))
rMi = min(rMi, x)
rMa = max(rMa, x)
end
if rMa = 0 then
m.newFo.fx = 'w1,1'len
else
m.newFo.fx = 'w'lMi',' || (rMa+1-lMi)
end
m.newFo.0 = m.fs.0
m.newFo.flds = fs
return newFo
endProcedure fmtFldSquash
fmtFDetect: procedure expose m.
parse arg m, st
do fx=1 to m.m.0
if m.m.fx.fmt = '' then
m.m.fx.fmt = fmtFDetect1(st, m.m.fx.fld)
end
return m
endProcedure fmtDetect
fmtFDetect1: procedure expose m.
parse arg st, suf
aMa = -1
aCnt = 0
aDiv = 0
nCnt = 0
nMi = ''
nMa = ''
nDi = -1
nBe = -1
nAf = -1
eMi = ''
eMa = ''
do sx=1 to m.st.0
f = m.st.sx || suf
v = m.f
aMa = max(aMa, length(v))
if \ dataType(v, 'n') then do
aCnt = aCnt + 1
if length(v) > 100 then
aDiv = 99
else if aDiv <=3 then
if aDiv.v \== 1 then do
aDiv.v = 1
aDiv = aDiv + 1
end
iterate
end
nCnt = nCnt + 1
if nMi == '' then
nMi = v
else
nMi = min(nMi, v)
if nMa == '' then
nMa = v
else
nMa = max(nMa, v)
parse upper var v man 'E' exp
if exp \== '' then do
en = substr(format(v, 2, 2, 9, 0), 7)
if en = '' then
en = exp
if eMi == '' then
eMi = en
else
eMi = min(eMi, en)
if eMa == '' then
eMa = en
else
eMa = max(eMa, en)
end
parse upper var man be '.' af
nBe = max(nBe, length(be))
nAf = max(nAf, length(af))
nDi = max(nDi, length(be || af))
end
/* say 'suf' suf aCnt 'a len' aMa 'div' aDiv
say ' ' nCnt 'n' nMi'-'nMa 'be' nBe 'af' nAf,
'di' nDi 'ex' eMi'-'eMa */
if nCnt = 0 | aDiv > 3 then
newFo = 'l'max(0, aMa)
else if eMi \== '' then do
f1 = substr(format(nMa, 2, 2, 9, 0), 7)
if f1 \= '' then
eMa = max(eMa, f1)
newFo = 'e' || (1+(eMi < 0)) || '.' || (max(0, nDi-1))'.' ,
|| max(length(eMa+0), length(eMi+0))
end
else if nAf > 0 then
newFo ='f'nBe'.'nAf
else
newFo ='f'nBe'.0'
/* say ' ' newFo */
return newFo
endProcedure fmtFDetect1
fmtFldRW: procedure expose m.
parse arg fo
ty = oGetClassPara(m.j.in)
call assert 'oFlds(ty) == m.fo.flds', 'fo different flds than class'
call out fmtFldTitle(fo)
do while in(ii)
call out fmtFld(fo, ii)
end
return
endProcedure fmtClassRW
fmtFldSquashRW: procedure expose m.
parse arg in, opCl
if in = '' then
in = m.j.in
if opCl == 'opCl' then
call jOpen in, 'r'
ty = oGetClassPara(in)
flds = oFlds(ty)
st = 'FMT.CLASSAD'
do ix=1 while jRead(in, st'.'ix)
end
m.st.0 = ix - 1
fo = fmtFldSquash(sqFo, ty, st)
call out fmtFldTitle(fo)
do ix = 1 to m.st.0
call out fmtFld(fo, st'.'ix)
end
if opCl == 'opCl' then
call jClose in
return
endProcedure fmtFldSquashRW
/* copy fmtF end * **************************************************/
/* copy sort begin ****************************************************/
sort: procedure expose m.
parse arg i, o, cmp
if cmp == '' then
m.sort.comparator = "cmp = m.l.l0 <<= m.r.r0"
else if length(cmp) < 6 then
m.sort.comparator = "cmp = m.l.l0" cmp "m.r.r0"
else if pos(';', cmp) < 1 then
m.sort.comparator = "aLe = l'.'l0; aRi = r'.'r0; cmp =" cmp
else
m.sort.comparator = "aLe = l'.'l0; aRi = r'.'r0;" cmp
call sort1 i, 1, m.i.0, o, 1, sort.work, 1
m.o.0 = m.i.0
return
endProcedure sort
sort1: procedure expose m.
parse arg i, i0, le, o, o0, w, w0
if le <= 3 then do
if le = 3 then do
call sortMerge i, i0, i0+1, i, i0+1, i0+2, w, w0
call sortMerge i, i0+2, i0+3, w, w0, w0+2, o, o0
end
else if le = 2 then
call sortMerge i, i0, i0+1, i, i0+1, i0+2, o, o0
else if le = 1 then
m.o.o0 = m.i.i0
return
end
h = (le + 1) % 2
call sort1 i, i0, h, o, o0+le-h, w, w0
call sort1 i, i0+h, le-h, w, w0, o, o0
call sortMerge o, o0+le-h, o0+le, w, w0, w0+le-h, o, o0
return
endProcedure sort1
sortMerge: procedure expose m.
parse arg l, l0, le, r, r0, re, o, o0
do while l0 < le & r0 < re
interpret m.sort.comparator
if cmp then do
m.o.o0 = m.l.l0
l0 = l0 + 1
end
else do
m.o.o0 = m.r.r0
r0 = r0 + 1
end
o0 = o0 + 1
end
do while l0 < le
m.o.o0 = m.l.l0
l0 = l0 + 1
o0 = o0 + 1
end
do while r0 < re
m.o.o0 = m.r.r0
r0 = r0 + 1
o0 = o0 + 1
end
return
endProcedure sortMerge
/* copy sort end ****************************************************/
/* copy match begin ***************************************************/
/************************************* begin copy match ******/
/*--- wildCard matching with the following wildchars:
* 0-n chars
? 1 char
fill matched expressions instem st if st is non empty
return 1 if mask matches wert ----------------------------------*/
match: procedure expose m.
parse arg wert, mask, st
if st == '' then
return matchRO(wert, mask)
m.st.0 = -9
return matchSt(wert, mask, st, 0)
endProcedure match
/*--- return the fixed prefix of maskt -------------------------------*/
matchPref: procedure
arg mask, suff
ix = verify(mask, '*?', 'm')
if ix = 0 then
return mask
else
return left(mask, ix-1)suff
endProcedure matchPref
/*--- return true if mask matches wert -------------------------------*/
matchRO: procedure
arg wert, mask
ix = verify(mask, '*?', 'm')
if ix < 1 then return (mask == wert)
if length(wert) < ix-1 then return 0
if left(mask, ix-1) \== left(wert, ix-1) then return 0
if substr(mask, ix, 1) == '?' then do
if length(wert) < ix then return 0
return matchRO(substr(wert, ix+1), substr(mask, ix+1))
end
mask = substr(mask, ix+1) /* * 0 - n Chars */
do ex = 1+length(wert) to ix by -1
if matchRO(substr(wert, ex), mask) then return 1
end
return 0
endProcedure matchRO
/*--- wildCard matching: fill matched expressions instem st
return 1 if mask matches wert ----------------------------------*/
matchSt: procedure expose m.
parse arg wert, mask, st, sx
ix = verify(mask, '*?', 'm')
if ix < 1 then do
if mask \== wert then
return 0
m.st.0 = sx
return 1
end
if \ abbrev(wert, left(mask, ix-1)) then
return 0
reMa = substr(mask, ix+1)
sx = sx + 1
if substr(mask, ix, 1) == '?' then do /* ? 1 Character */
if length(wert) < ix then
return 0
m.st.sx = substr(wert, ix, 1)
return matchSt(substr(wert, ix+1), reMa, st, sx)
end
do lx = 1+length(wert) to ix by -1 /* greedy: from all to empty */
if matchSt(substr(wert, lx), reMa, st, sx) then do
m.st.sx = substr(wert, ix, lx-ix)
return 1
end
end
return 0
endProcedure matchSt
matchTrans: procedure expose m.
parse arg mask, st
r = ''
ox = 1
sx = 0
ix = verify(mask, '*?', 'm')
do sx=1 to m.st.0 while ix > 0
if sx > m.st.0 then
call err 'matchTrans('mask',' st') has only' ,
m.st.0 'variables'
r = r || substr(mask, ox, ix-ox)m.st.sx
ox = ix+1
ix = verify(mask, '*?', 'm', ox)
end
if ix > 0 then
call err 'matchTrans('mask',' st') has only' ,
m.st.0 'variables'
return r || substr(mask, ox)
endProcedure matchTrans
/* copy match end *****************************************************/
/* copy comp begin *****************************************************
the shell compiler
syntax and semantics of the shell language see javaDoc
***********************************************************************/
/***** initialisation *************************************************/
/*--- module initialisation ------------------------------------------*/
compIni: procedure expose m.
if m.compIni = 1 then
return
m.compIni = 1
call pipeIni
call scanReadIni
cc = classNew('n Compiler u')
call mNewArea 'COMP.AST', '='
m.comp.stem.0 = 0
m.comp.idChars = m.ut.alfNum'@_'
call compIniKI '=', "skeleton", "expression or block"
call compIniKI '.', "object", "expression or block"
call compIniKI '-', "string", "expression or block"
call compIniKI '@', "shell", "pipe or $;"
call compIniKI ':', "assignAttributes", "assignment or statement"
call compIniKI '|', "assignTable", "header, sfmt or expr"
call compIniKI '#', "text", "literal data"
return
endProcedure compIni
compReset: procedure expose m.
parse arg m
m.m.scan = scanRead(,,'|0123456789')
m.m.chDol = '$'
m.m.chSpa = ' ' || x2c('09')
m.m.chNotBlock = '${}='
m.m.chNotWord = m.m.chNotBlock || m.m.chSpa
m.m.chKind = '.-=#@:|'
m.m.chKin2 = '.-=#;:|'
m.m.chKinC = '.-=@'
m.m.chOp = '.-<@|?'
m.m.chOpNoFi = '.-@|?'
return m
endProcedure compReset
compIniKI: procedure expose m.
parse arg ki, m.comp.kind.ki.name, m.comp.kind.ki.expec
return
/*--- constructor of Compiler ----------------------------------------*/
comp: procedure expose m.
parse arg src
nn = oNew('Compiler')
if src \== '' then
m.nn.cmpRdr = o2File(src)
else
m.nn.cmpRdr = ''
return nn
endProcedure comp
/**** user interface **************************************************/
/*--- compile and run ------------------------------------------------*/
compRun: procedure expose m.
parse arg spec, inO, ouO, infoA
cmp = comp(inO)
r = compile(cmp, spec)
if infoA \== '' then
m.infoA = 'run'
if ouO \== '' then
call pipe '+F', ouO
call oRun r
if ouO \== '' then
call pipe '-'
return 0
endProcedure compRun
/*--- compile the source and return an oRunner with the code ---------*/
compile: procedure expose m.
parse arg m, spec
call compReset m
kind = '@'
spec = strip(spec)
do while pos(left(spec, 1), m.m.chKind) > 0
kind = left(spec, 1)
spec = strip(substr(spec, 2))
end
call scanSrc m.m.scan, spec
m.m.compSpec = 1
res = compCUnit(m, kind, 1)
do while abbrev(m.m.dir, '$#')
call envPutO substr(m.m.dir, 3, length(m.m.dir)-4),
, compCUnit(m, right(m.m.dir, 1))
end
if \ m.m.compSpec then
call jClose m.m.scan
return res
endProcedure compile
/*--- cUnit = compilation Unit = separate compilations
no nesting| --------------------------------------------*/
compCUnit: procedure expose m.
parse arg m, ki, isFirst
s = m.m.scan
code = ''
do forever
m.m.dir = ''
src = compUnit(m, ki, '$#')
if \ compDirective(m) then
return scanErr(s, m.comp.kind.ki.expec "expected: compile",
m.comp.kind.ki.name "stopped before end of input")
if \ compIsEmpty(m, src) then do
/*wkTst??? allow assTb in separatly compiled units */
if isFirst == 1 & m.src.type == ':' ,
& pos(' ', src) < 1 & abbrev(src, 'COMP.AST.') then
call mAdd src, '', ''
code = code || ';'compAst2code(m, src, ';')
end
if m.m.dir == 'eof' then do
if \ m.m.compSpec | m.m.cmpRdr == '' then
return oRunner(code)
call scanReadReset s, m.m.cmpRdr
call jOpen s, m.j.cRead
m.m.compSpec = 0
end
else if length(m.m.dir) == 3 then
ki = substr(m.m.dir, 3, 1)
else
return oRunner(code)
end
endProcedure compCUnit
/*--- directives divide cUnits ---------------------------------------*/
compDirective: procedure expose m.
parse arg m
m.m.dir = ''
s = m.m.scan
lk = scanLook(s)
cx = pos('#', lk, 3)
if \ abbrev(lk, '$#') then do
if \ scanEnd(m.m.scan) then
return 0
m.m.dir = 'eof'
return 1
end
else if scanLit(s, '$#end' , '$#out') then do
m.m.dir = 'eof'
return 1
end
else if pos(substr(lk, 3, 1), m.m.chKinD) > 0 then do
m.m.dirKind = substr(lk, 3, 1)
m.m.dir = left(lk, 3)
end
else if cx > 3 & pos(substr(lk, cx+1, 1), m.m.chKinD) > 0 then do
m.m.dirKind = substr(lk, 3, 1)
m.m.dir = left(lk, cx+1)
end
else
call scanErr s, 'bad directive:' word(lk, 1)
if \ scanLit(s, m.m.dir) then
call scanErr m.m.scan, 'directive mismatch' m.m.dir
return 1
endProcedure compDirective
/**** parse the whole syntax *******************************************
currently, with the old code generation,
parsing and code generation is intermixec
migrating to AST should will separate these tasks
***********************************************************************/
compUnit: procedure expose m.
parse arg m, kind, stopper
s = m.m.scan
if pos(kind, m.m.chKind';') < 1 then
return scanErr(s, 'bad kind' kind 'in compUnit(...'stopper')')
if stopper == '}' then do
if kind \== '#' then do
one = compExpr(m, 'b', translate(kind, ';', '@'))
if compisEmpty(m, one) then
return compAST(m, 'block')
else
return compAST(m, 'block', one)
end
tx = '= '
cb = 1
do forever /* scan nested { ... } pairs */
call scanVerify s, '{}', 'm'
tx = tx || m.s.tok
if scanLit(s, '{') then
cb = cb + 1
else if scanLook(s, 1) \== '}' then
call scanErr s, 'closing } expected'
else if cb <= 1 then
leave
else if scanLit(s, '}') then
cb = cb - 1
else
call scanErr s, 'closing } programming error'
tx = tx || m.s.tok
end
return compAst(m, 'block', tx)
end
else if pos(kind, '.-=') > 0 then do
return compData(m, kind)
end
else if pos(kind, '@;') > 0 then do
call compSpNlComment m
return compShell(m)
end
else if kind == '|' | kind == ':' then do
if kind == '|' then
res = compAssTab(m)
else
res = compAssAtt(m)
if abbrev(res, '#') then
return compAst(m, ':', substr(res, 3))
else
return compAst(m, ';', substr(res, 3))
end
else if kind == '#' then do
res = compAST(m, 'block')
call compSpComment m
if \ scanNL(s) then
call scanErr s,
, 'space nl expected in heredata until' stopper
do while \ abbrev(m.s.src, stopper)
call mAdd res, '=' strip(m.s.src, 't')
if \ scanNL(s, 1) then do
if stopper = '$#' then
leave
call scanErr s, 'eof in heredata until' stopper
end
end
return res
end
endProcedure compUnit
/*--- compile data lines return stmts or expr ------------------------*/
compData: procedure expose m.
parse arg m, ki
s = m.m.scan
lines = compAST(m, 'block')
do forever
state = 'f'
do forever
l = compExpr(m, 'd', ki)
if \ scanNL(s) then
state = 'l'
if \ compIsEmpty(m, l) | (state=='' &\abbrev(l, 'c')) then
call mAdd lines, l
if state == 'l' then
leave
call compComment m
state = ''
end
one = compStmt(m)
if one == '' then
leave
call mAdd lines, one
call compComment m
end
return lines
endProcedure compData
/*--- compile shell and return code ----------------------------------*/
compShell: procedure expose m.
parse arg m
a = compAst(m, ';')
m.a.text = ''
do forever
one = compPipe(m)
if one \== '' then
m.a.text = m.a.text || one
if \ scanLit(m.m.scan, '$;') then
return a
call compSpNlComment m
end
endProcedure compShell
/*--- compile an expression, type d=data, b=block w=word, s=strip ---*/
compExpr: procedure expose m.
parse arg m, type, ki
s = m.m.scan
if length(type) \== 1 | pos(type, 'dsbw') < 1 then
call scanErr s, 'bad type' type 'in compExpr(,' type','ki ')'
if length(ki) \== 1 | pos(ki, m.m.chKind';') < 1 then
call scanErr s, 'bad kind' ki 'in compExpr(,' type','ki ')'
charsNot = if(type=='b', m.m.chNotBlock,
, if(type=='w', m.m.chNotWord,m.m.chDol))
laTx = 9e9
st = compNewStem(m)
gotCom = 0
if pos(type, 'sb') > 0 then do
call compSpComment m
gotCom = gotCom | m.m.gotComment
end
ki2 = if(ki=='=', '-=', ki)
do forever
if scanVerify(s, charsNot, 'm') then do
call mAdd st, ki2 m.s.tok
laTx = min(laTx, m.st.0)
end
else do
pr = compPrimary(m, ki, 1)
if pr = '' then
leave
call mAdd st, pr
laTx = 9e9
end
gotCom = gotCom | compComment(m)
end
do rx = m.st.0 by -1 to laTx while m.st.rx = ki2
end
if pos(type, 'bs') > 0 then do
if rx >= laTx then
m.st.rx = strip(m.st.rx, 't')
m.st.0 = rx
end
if ki == '=' then
if m.st.0 < 1 then
return 'e='
else
ki = '-'
return substr('ce', 2-gotCom, rx < 1)ki'0*' st
endProcedure compExpr
/*--- compile a primary and return code ------------------------------*/
compPrimary: procedure expose m.
parse arg m, ki, withChain
s = m.m.scan
if \ scanLit(s, '$') then
return ''
if scanString(s) then /*wkTst??? brauchts beides? */
return translate(ki, '.--', '@;=')'=' m.s.val
if withChain then do
if scanLit(s, '.', '-') then do
op = m.s.tok
return op'('compCheckNN(m, compObj(m, op),
, 'objRef expected after $'op)
end
end
if pos(ki, '.<') >= 1 then
f = '. envGetO'
else
f = '- envGet'
if scanLit(s, '{') then do
if scanLit(s, '?') then
f = '- envIsDefined'
else if scanLit(s, '>') then
f = '- envReadO'
res = compCheckNE(m, compExpr(m, 'b', '='), 'var name')
if \scanLit(s, '}') then
call scanErr s, 'closing } missing after ${'
return f'(' || comp2Code(m, '-'res)')'
end
if scanName(s) then
return f"('"m.s.tok"')"
call scanBack s, '$'
return ''
endProcedure compPrimary
compObj: procedure expose m.
parse arg m, ki
s = m.m.scan
pk = compOpKi(m, '?')
one = compBlock(m, ki pk)
if one \== '' then
return compAstAddOp(m, one, ki)
pp = ''
if pk \== '' then do
ki = right(pk, 1)
pp = left(pk, length(pk)-1)
end
one = compPrimary(m, translate(ki, '.', '@'), 0)
if one \== '' then
return pp || one
if ki == '.' then do
if scanLit(s, 'compile') then do
if pos(scanLook(s, 1), m.m.chKinC) < 1 then
call scanErr s, 'compile kind expected'
call scanChar s, 1
return pp'. compile(comp(j2Buf()), "'m.s.tok'")'
end
end
call scanBack s, pk
return ''
endProcedure compObj
compFile: procedure expose m.
parse arg m
res = compCheckNE(m, compExprBlock(m, '='),
, 'block or expr expected for file')
if \ abbrev(res, '.') then do
end
else if substr(res, verify(res, '.', n), 3) == '0* ' then do
st = word(res, 2)
if m.st.0 = 1 & abbrev(m.st.1, '. envGetO(') then
/* if undefined variable use new jbuf */
if pos(')', m.st.1) == length(m.st.1) then
m.st.1 = left(m.st.1, length(m.st.1)-1) ,
|| ", '-b')"
end
return compASTAddOp(m, res, '<')
endProcedure compFile
/*--- scan an operator chain and a kind ------------------------------*/
compOpKi: procedure expose m.
parse arg m, opt
s = m.m.scan
op = ''
if opt == '<' then do
call scanVerify s, m.m.chOpNoFi
op = m.s.tok
if scanLit(s, '<') then
return op'<'
end
call scanVerify s, m.m.chOp
op = op || m.s.tok
k1 = scanLook(s, 1)
if k1 \== '' & pos(k1, m.m.chKind) > 0 then do
call scanLit s, k1
return op || k1
end
if opt == '?' | op == '' | pos(right(op, 1), m.m.chKind) > 0 then
return op
call scanErr s, 'no kind after ops' op
endProcedure compOpKi
/*--- block or expression --------------------------------------------*/
compExprBlock: procedure expose m.
parse arg m, ki
s = m.m.scan
pk = compOpKi(m, '<')
if right(pk, 1) == '<' then
return compAstAddOp(m, compFile(m), pk)
res = compBlock(m, ki pk)
if res \== '' then
return res
if pk \== '' then
lk = right(pk, 1)
else
lk = translate(ki, '.', '@')
res = compExpr(m, 's', lk)
if res \== '' then
return compASTAddOp(m, res, pk)
call scanBack s, pk
return res
endProcedure compExprBlock
/*--- compile a pipe and return code ---------------------------------*/
compPipe: procedure expose m.
parse arg m
s = m.m.scan
inp = ''
out = ''
stmts = ''
sBef = ''
do forever
if scanLit(s, '$<') then
inp = inp',' comp2Code(m, compFile(m))
else if scanLit(s, '$>>', '$>') then
if out <> '' then
call scanErr s, 'duplicate output'
else
out = substr('?FA', length(m.s.tok), 1) ,
comp2Code(m, compFile(m))
else if scanLit(s, '$|') then do
if stmts == '' then
call scanErr s, 'stmts expected before $|'
sBef = sBef"; call pipe 'N|'" || stmts
stmts = ''
end
else do
one = comp2code(m, ';'compStmts(m))
if one == '' then
leave
stmts = stmts';' one
end
call compSpNlComment m
end
if sBef == '' then do
if inp == '' & out == '' then
return stmts
if stmts == '' then do
call scanErr s,'no statemtents in pipe'
stmts = '; call pipeWriteAll'
end
end
else if stmts == '' then
call scanErr s, 'stmts expected after $|'
inO = left('f', inp \== '')
inp = substr(inp, 3)
parse var out ouO out
if sBef == '' then
return "; call pipe '+"ouO || strip(inO"',"out","inp, "T", ","),
|| stmts"; call pipe '-'"
else
return "; call pipe '+N" || strip(inO"',,"inp, "T", ",") ,
|| substr(sBef, 17),
|| "; call pipe '"left(ouO'P', 1)"|'" ,
strip(","out,"T", ",") || stmts"; call pipe '-'"
endProcedure compPipe
/*--- compile stmts (stmt or java) -----------------------------------*/
compStmts: procedure expose m.
parse arg m
lst = compNewStem(m)
do forever
one = compStmt(m)
if one == '' then do
do forever
la = compExpr(m, 's', ';')
if compIsEmpty(m, la) then
leave
la = strip(comp2code(m, ';'la))
if right(la, 1) \== ',' then do
one = one la
leave
end
one = one strip(left(la, length(la)-1))
call compSpNlComment m
end
if one = '' then
return 'l*' lst
one = ';' one
end
call mAdd lst, one
call compSpNlComment m
end
endProcedure compStmts
/*--- compile a single statement -------------------------------------*/
compStmt: procedure expose m.
parse arg m
s = m.m.scan
if scanLit(s, "$=") then do
res = compAss(m)
if res == '' then
call scanErr s, 'assignment expected after $='
return res
end
if scanLit(s, '$@') then do
if \ scanName(s) then
return 'l;' comp2Code(m,
, '@'compCheckNE(m, compExprBlock(m, '@'),
, "block or expr expected after $@"))
fu = m.s.tok
if fu == 'for' | fu == 'with' | fu == 'forWith' then do
v = comp2Code(m, '-'compCheckNE(m, compExpr(m, 'b', '='),
, "variable name after $@for"))
call compSpComment m
st = comp2Code(m, ';'compCheckNN(m, compStmt(m, 'with'),
, "statement after $@for" v))
if fu == 'forWith' then
st = 'call envSetWith envGetO('v');' st
if abbrev(fu, 'for') then
st = 'do while envReadO('v');' st'; end'
if fu == 'forWith' then
st = 'call envPushWith "";' st '; call envPopWith'
else if fu == 'with' then
st = 'call envPushName' v';' st '; call envPopWith'
return ';' st
end
if fu == 'do' then do
call compSpComment m
var = if(scanName(s), m.s.tok, '')
pre = var
call compSpComment m
if scanLook(s, 1) \== '=' then
var = ''
call compSpComment m
suf = compExpr(m, 's', ';')
if \ compIsEmpty(m, suf) then
suf = comp2Code(m, ':'suf)
else if var \== '' then
call scanErr s, "$@do control construct expected"
else
suf = ''
call compSpComment m
st = comp2Code(m, ";"compCheckNN(m, compStmt(m),
, "$@do statement"))
return "; do" pre suf";",
if(var \== "", "call envPut '"var"'," var";") st"; end"
end
if fu == 'ct' then do
call compSpComment m
call compInter(comp2Code(m, ';'compCheckNN(m, compStmt(m),
, 'ct statement')));
return '; '
end
if fu == 'proc' then do
nm = compCheckNE(m, compExpr(m, 'b', '='), "proc name")
call compSpComment m
st = oRunner(comp2Code(m, ';'compCheckNN(m, compStmt(m),
, 'proc statement')));
call envPutO compInter('return' comp2Code(m, '-'nm)), st
return '; '
end
if scanLit(s, '(') then do
call compSpComment m
if \ scanLit(s, ')') then
call scanErr s, 'closing ) expected after $@'fu'('
return '; call oRun envGetO("'fu'")'
end
if scanLit(s, '{', '.{', '-{', '={') then do
br = m.s.tok
a = compExpr(m, 'b', if(br == '{', '-', left(br, 1)))
if \ scanLit(s, '}') then
call scanErr s, 'closing } expected after $@'fu || br
res = '; call oRun envGetO("'fu'")'
if pos(left(a, 1), 'ec') < 1 then
res = res',' comp2code(m, a)
return res
end
call scanErr s, 'procCall, for, do, ct, proc' ,
'or objRef expected after $@'
end
if scanLit(s, '$$') then
return compCheckNN(m, compExprBlock(m, '='),
, 'block or expression expected after $$')
return ''
endProcedure compStmt
compAss: procedure expose m.
parse arg m, aExt
s = m.m.scan
sla = scanLook(s)
slx = verify(sla, m.m.chKind'/'m.m.chOp, 'n')
if slx > 0 then
sla = left(sla, slx-1)
sla = pos('/', sla) > 0
nm = ''
if \ sla then do
nm = compExpr(m, 'b', '=')
if compIsEmpty(m, nm) then
return ''
nm = comp2Code(m, '-'nm)
if \ scanLit(s, "=") then
return scanErr(s, '= expected after $=' nm)
end
m.m.bName = ''
vl = compCheckNE(m, compExprBlock(m, '='),
, 'block or expression after $=' nm '=')
if sla then
if m.m.bName == '' then
call scanErr s, 'missing blockName'
else
nm = "'"m.m.bName"'"
va = compAstAftOp(m, vl)
if va \== '' & m.va.type == ':' then do
pu = "call envPushName" nm
if abbrev(m.m.astOps, '<') then
call mAdd va, pu ", 'asM'", "call envPopWith"
else if abbrev(m.m.astOps, '<<') then
call mAdd va, pu ", 'asM'", "call envPopWith"
else
call mAdd va, pu ", 'as1'", "call envPopWith"
return va
end
if compAstKind(m, vl) == '-' then
return '; call envPut' nm',' comp2Code(m, vl)aExt
else
return '; call envPutO' nm',' comp2Code(m, '.'vl)aExt
endProcedure compAss
/*--- block deals with the correct kind and operators
the content is parsed by compUnit ------------------------------*/
compBlock: procedure expose m.
parse arg m, dKi ops
s = m.m.scan
if \ scanLit(s, '{', '¢', '/') then
return ''
start = m.s.tok
if (ops \== '' & pos(right(ops, 1), m.m.chKind) < 1) ,
| pos(dKi, m.m.chKind) < 1 then
return scanErr(s, 'bad kind' ops 'for block (def' dKi')')
if ops == '' then do
ki = dKi
end
else do
ki = right(ops, 1)
ops = left(ops, length(ops)-1)
end
starter = start
if start == '{' then
stopper = '}'
else if start == '¢' then
stopper = '$!'
else do
call scanVerify s, '/', 'm'
starter = '/'m.s.tok'/'
stopper = '$'starter
if \scanLit(s, '/') then
call scanErr s, 'ending / after stopper' stopper 'expected'
end
res = compUnit(m, ki, stopper)
if \ scanLit(s, stopper) then do
if pos(ki, ':|') < 1 | \ abbrev(stopper, '$') then
call scanErr s, 'ending' stopper 'expected after' starter
else if \ scanLit(s, substr(stopper, 2)) then
call scanErr s, 'ending' stopper 'or' substr(stopper, 2),
'expected after' starter
end
if abbrev(starter, '/') then
m.m.bName = substr(starter, 2, length(starter)-2)
else
m.m.bName = ''
if m.res.text == '' then
m.res.text = ' '
return compAstAddOp(m, res, ops)
endProcedure compBlock
compAssAtt: procedure expose m. aClass
parse arg m
res = ''
aClass = ''
s = m.m.scan
last = ''
do forever
if compSpNlComment(m, '*') then do
end
else if pos(scanLook(s, 1), '/!}') > 0 then do
leave
end
else if scanLit(s, ';', '$;') then do
if last = ';' then
res = res'; call envWithNext'
last = ';'
end
else do
s1 = compAss(m, ", 1")
if s1 == '' then do
s1 = compStmt(m)
if s1 == '' then
leave
end
else do
if last == ';' then
res = res'; call envWithNext'
last = 'a'
end
res = res';' comp2code(m, ';'s1)
end
if res == '' then
res = ';'
end
if last == '' then
return res
else
return '# call envWithNext "b";' res ,
'; call envWithNext "e";'
endProcedure compAssAtt
compAssTab: procedure expose m. aClass
parse arg m
s = m.m.scan
call compSpNlComment m, '*'
hy = 0
tab = ''
do forever
bx = m.s.pos
if \ scanName(s) then
leave
hx = hy + 1
h.hx.beg = bx
if hx > 1 & bx <= h.hy.end then
call scanErr s, 'header overlap' m.s.tok 'pos' bx
h.hx = m.s.tok
tab = tab', f' m.s.tok 'v'
h.hx.end = m.s.pos
hy = hx
call compSpComment m, '*'
end
if tab \== '' then
aClass = classNew('n* Ass u' substr(tab, 3))
res = ''
isFirst = 1
do while scanNL(s)
do forever
call compSpNlComment m, '*'
s1 = compStmt(m)
if s1 == '' then
leave
res = res';' comp2code(m, ';'s1)
last = 's'
end
if pos(scanLook(s, 1), '/!}') > 0 then
leave
do qx=1
bx = m.s.pos
s1 = compExpr(m, 'w', '=')
if compIsEmpty(m, s1) then
leave
ex = m.s.pos
if ex <= bx then
return scanErr(s, 'colExpr backward')
do hy=1 to hx while bx >= h.hy.end
end
hz = hy+1
if hz <= hx & ex > h.hz.beg then
call scanErr s, 'value on hdr' h.hy 'overlaps' h.hz
else if hy > hx | bx >= h.hy.end | ex <= h.hy.beg then
call scanErr s, 'value from' bx 'to' ex ,
'no overlap with header' h.hy
if qx > 1 then
nop
else if isFirst then do
res = res"; call envWithNext 'b', '"aClass"'"
isFirst = 0
end
else
res = res"; call envWithNext"
res = res"; call envPut '"h.hy"'," comp2Code(m, "-"s1)", 1"
call compSpComment m, '*'
end
end
if isFirst then
return res
else
return '#' res"; call envWithNext 'e'"
endProcedure compassTab
/**** lexicals ********************************************************/
/*--- skip a comment. return 0 if there is none ----------------------*/
compComment: procedure expose m.
parse arg m
s = m.m.scan
res = 0
do forever
if scanLit(s, '$**') then
m.s.pos = 1 + length(m.s.src) /* before next nl */
else if scanLit(s, '$*+') then
call scanNL s, 1
else if scanLit(s, '$*(') then do
do forever
if scanVerify(s, m.m.chDol, 'm') then iterate
if scanNL(s) then iterate
if compComment(m) then iterate
if \ scanLit(s, '$') then
call scanErr s, 'source end in comment'
if scanLit(s, '*)') then
return 1
if scanLit(s, '$') then iterate
if scanString(s) then iterate
end
end
else
return res
res = 1
end
endProcedure compComment
/*--- skip spaces and comments ---------------------------------------*/
compSpComment: procedure expose m.
parse arg m, xtra
s = m.m.scan
sp = 0
co = 0
do forever
if scanVerify(s, m.m.chSpa) then
sp = 1
else if compComment(m) then
co = 1
else if xtra == '' then
leave
else if \ scanLit(s, xtra) then
leave
else do
co = 1
m.s.pos = 1+length(m.s.src)
end
end
m.m.gotComment = co
return co | sp
endProcedure compSpComment
/*--- skip spaces, NLs and comments ----------------------------------*/
compSpNlComment: procedure expose m.
parse arg m, xtra
found = 0
do forever
if compSpComment(m, xtra) then
found = 1
else if scanNL(m.m.scan) then
found = 1
else
return found
end
endProcedure compSpComment
/**** small helper routines ******************************************/
compInter: procedure expose m.
interpret arg(1)
return
endProcedure compInter
/*--- if va == null then issue an error with msg --------------------*/
compCheckNN: procedure expose m.
parse arg m, va, msg
if va == '' then
call scanErr m.m.scan, msg 'expected'
return va
endProcedure compCheckNN
/*--- return true iff expression is empty ---------------------------*/
compIsEmpty: procedure expose m.
parse arg m, ex
if pos(' ', ex) < 1 & pos('COMP.AST.', ex) > 0 then do
a = substr(ex, pos('COMP.AST.', ex))
a = compAstAftOp(m, a)
if m.a.type = 'block' then
return 0 /* m.a.0 == 0 */
else
return m.a.text == ''
end
e1 = word(ex, 1)
return ex = '' | verify(e1, 'ec', 'm') > 0
endProcedure compIsEmpty
/*--- if va == null or empty then issue an error with msg -----------*/
compCheckNE: procedure expose m.
parse arg m, ex, msg
e1 = left(ex, 1)
if compIsEmpty(m, ex) then
call scanErr m.m.scan, msg 'expected'
return ex
endProcedure compCheckNE
/**** AST = Astract Syntax Graph ***************************************
goal is to migrate to migrate to old codeGenerator to AST
***********************************************************************/
/*--- create a new AST -----------------------------------------------*/
compAST: procedure expose m.
parse arg m, tp
n = mNew('COMP.AST')
m.n.type = tp
if wordPos(tp, 'block') > 0 then do
do cx=1 to arg()-2
m.n.cx = arg(cx+2)
end
m.n.0 = cx-1
end
else do
m.n.text = arg(3)
m.n.0 = 0
end
m.a.isAnnotated = 1
return n
endProcedure compAST
/*--- add operandands to an AST -------------------------------------*/
compASTAddOp: procedure expose m.
parse arg m, a, ops
if ops == '' then
return a
if pos('COMP.AST.', a) < 1 then
return ops || a
if m.a.type = 'ops' then do
m.a.text = ops || m.a.text
return a
end
n = compAst(m, 'ops', ops)
call mAdd n, a
return n
endProcedure compAstAddOp
/*--- return the first AST after the operand chain
put the operands into m.m.astOps ---------------------------*/
compASTaftOp: procedure expose m.
parse arg m, a
m.m.astOps = ''
if \ abbrev(a, 'COMP.AST.') then
return ''
do while m.a.type == 'ops'
m.m.astOps = m.a.text || m.m.astOps
a = m.a.1
end
return a
endProcedure compASTAftOpType
/*--- return the kind of an AST --------------------------------------*/
compASTKind: procedure expose m.
parse arg m, a
m.m.astOps = ''
if \ abbrev(a, 'COMP.AST.') then
return left(a, 1)
c = a
do while m.c.type == 'ops'
if m.c.text \== '' then
return left(m.c.text, 1)
c = m.c.1
end
if a == c then
return '?'
return compAstKind(m, c)
endProcedure compASTKind
/*--- return the code for an AST with operand chain trg --------------*/
compAst2Code: procedure expose m.
parse arg m, a, aTrg
if pos(' ', a) > 0 | \ abbrev(a, 'COMP.AST.') then
return comp2Code(m, aTrg || a)
if \ abbrev(a, 'COMP.AST.') then
call err 'bad ast' a
do while m.a.type == 'ops'
aTrg = aTrg || m.a.text
a = m.a.1
end
trg = compAstOpsReduce(m, aTrg)
if m.a.type == translate(right(trg, 1), ';', '@') then do
if length(trg) == 1 then do
if pos(trg, ';@') > 0 then
return 'do;' m.a.text ';end'
else
return m.a.text
end
else
return compAST2Code(m, a, left(trg, length(trg)-1))
end
if m.a.type == 'block' then do
op = right(trg, 1)
tLe = left(trg, length(trg)-1)
call compASTAnnBlock m, a
if pos(m.a.maxKind, '.-<') > 0 & pos(op, '.-|?') > 0 then do
if m.a.0 = 1 then do
o1 = if(op=='-', '-', '.')
r = compAst2Code(m, m.a.1, o1)
r = compC2C(m, o1, compAstOpsReduce(m, tLe||o1), r)
if pos(op, '.-<') > 0 then
return '('r')'
else
return r
end
if m.a.0 = 0 & op == '?' then
return compC2C(m, '.', compAstOpsReduce(m, tLe'.'))
if op == '-' then do
cd = ''
do cx = 1 to m.a.0
cd = cd '('compAst2Code(m, m.a.cx, '-')')'
end
return compC2C(m, '-', trg, substr(cd, 2))
end
call scanErr m.m.scan, 'bad block cardinality' aTrg
end
cd = ''
do cx = 1 to m.a.0
cd = cd';' compAst2Code(m, m.a.cx, ';')
end
if right(trg, 1) == '@' then
trg = overlay(';', trg, length(trg))
return compC2C(m, ';', trg, 'do;' cd'; end')
end
else if m.a.type == ';' then do
return compC2C(m, ';', trg, m.a.text)
if right(trg, 1) == '-' then
return compAst2Code(m, "- o2String('"oRunner(m.a.text)"')",
, trg)
if right(trg, 1) == '<' then
return compAst2Code(m, "< o2File('"oRunner(m.a.text)"')",
, trg)
end
else if m.a.type == ':' then do
if m.a.0 = 0 then
call mAdd a, 'call envPushWith', 'call envPopWith'
return compC2C(m, ';', trg,
, 'do;' m.a.1';' m.a.text';' m.a.2'; end')
end
call scanErr m.m.scan, 'implement type' m.a.type 'for' a 'trg' trg
endProcedure compAst2Code
/*--- do a chain of code transformations
from code of kind fr by opList
op as from kind operand
= constant -
- rexx string Expr cast to string/ concat file/output
. rexx object Expr cast to object
< rexx file Expr cast to file
; rexx Statements execute, write obj, Str
@ - cast to ORun, run an obj, write file
| - extract exactlyOne
? - extract OneOrNull
----------------------------------------------------------------------*/
compC2C: procedure expose m.
parse arg m, fr, opList, code
oldCode = fr':' code '==>' opList '==>'
do tx=length(opList) by -1 to 1
to = substr(opList, tx, 1)
if fr == to then
iterate
nn = '||||'
if to == '-' then do
if fr == '=' then
nn = quote(code)
else if abbrev(fr code, '. envGetO(') then
nn = 'envGet(' || substr(code, 9)
else if fr == ';' then
nn = "o2String('"oRunner(code)"')"
else if pos(fr, '.<') > 0 then
nn = "o2String("code")"
end
else if to == '.' then do
if fr == '=' then
nn = quote(s2o(code))
else if abbrev(fr expr, '- envGet(') then
nn = 'envGetO('substr(expr, 8)
else if fr == '-' then
nn = 's2o('code')'
else if fr == '<' then
nn = code
else if fr == ';' then
nn = quote(oRunner(code))
end
else if to == '@' then do
if fr == '.' then
nn = 'call oRun' code
else if fr == '<' then
nn = 'call pipeWriteAll' code
else if fr == ';' then
nn = code
to = ';'
end
else if to == ';' then do
if fr == '=' then
nn = 'call out' quote(code)
else if fr == '-' then
nn = 'call out' code
else if fr == '.' | fr == '<' then
nn = 'call outO' code
end
else if to == ':' then do
if fr == '=' then
nn = quote(code)
else
nn = code
to = ';'
end
else if to == '<' then do
if fr == '-' then
nn = 'file('code')'
else if fr == '=' then
nn = "file("quote(code)")"
else if fr == '.' then
nn = 'o2File('code')'
else if fr == ';' then
nn = 'o2File('oRunner(code)')'
end
else if to == '|' | to == '?' then do
if fr == '<' | fr == '.' then
nn = 'fileSingle('code if(to == '|','', ", ''")')'
else if fr == '@' | fr == ';' then
/* ???wkTst optimize: do it directly */
nn = compC2C(m, fr, to'<', code)
to = '.'
end
if nn == '||||' then
return scanErr(m.m.scan,
,'compC2C bad fr' fr 'to' to 'list' opList)
fr = to
code = nn
end
return code
endProcedure compC2C
/*--- reduce a chain of operands -------------------------------------*/
eliminate duplicates and identity transformations ----------*/
compAstOpsReduce: procedure expose m.
parse arg m, ops
ki = ops
ki = space(translate(ops, ' ', 'e('), 0)
fr = ';<; <;< -.- <@<'
to = '; < - < '
fr = fr '== -- .. << ;; @@ @('
to = to '= - . < ; @ (@'
wc = words(fr)
do until ki = oldKi
oldKi = ki
do wx=1 to wc
do forever
wf = word(fr, wx)
cx = pos(wf, ki)
if cx < 1 then
leave
ki = left(ki, cx-1) || word(to, wx) ,
|| substr(ki, cx+length(wf))
end
end
end
return ki
endProcedure compASTOpsReduce
/*--- annotate a block if necessary ----------------------------------*/
compASTAnnBlock: procedure expose m.
parse arg m, a
if m.a.isAnnotated == 1 then
return
mk = ''
do cx=1 to m.a.0
c = m.a.cx
if pos(' ', c) > 0 | \ abbrev(c, 'COMP.AST.') then
ki = left(c, 1)
else if \ abbrev(c, 'COMP.AST.') then
return scanErr(m.m.scan, 'bad ast' c 'parent' a) /0
else
call scanErr m.m.scan, 'implement kind of' c 'type' m.c.type
if pos(ki, '=-.<;@:|') < 1 then do
if pos(ki, 'el0') < 1 then
call err 'bad kind' ki
end
else if mk == '' | pos(ki, '=-.<;@:|') > pos(mk, '=-.<;@:|') then
mk = ki
end
m.a.maxKind = mk
m.a.isAnnotated = 1
return
endProcedrue compASTAnnBlock
/**** old code generator ***********************************************
plan is to replace it with AST ******************************/
/*--- transform abstract syntax tree to code ------------------------
wkTst??? codeTree besser dokumentieren
optimizer an/und/abschaltbar machen
(test sollte laufen, allenfalls gehen rexx variabeln
verloren)
syntax tree is simple, only where
* a transformation is needed from several places or
* must be deferred for possible optimizations
sn = ops* syntax node op or syntax function
( '=' constant none
| '-' rexxExpr yielding string cast to string
| '.' rexxExpr yielding object cast to object
| '<' rexxExpr yielding file cast to file
| ';' rexxStmts execute, write obj, Str
| '*' stem yielding multiple sn none
)
ops = '@' cast to ORun
| '|' single
| 'e' empty = space only
| 'c' empty = including a comment
| '0' cat expression parts
| 'l' cat lines
| '(' add ( ... ) or do ... end
---------------------------------------------------------------------*/
comp2Code: procedure expose m.
parse arg m, ki expr
if expr == '' & pos(' ', ki) < 1 & pos('COMP.AST.', ki) > 0 then do
cx = pos('COMP.AST.', ki)
return compAst2Code(m, substr(ki, cx), left(ki, cx-1))
end
/* wkTst??? optimize: use stem with code and interpret */
if expr = '' & pos(right(ki, 1), '@;=') < 1 then
return scanErr(m.m.scan, 'comp2Code empty expr' ki expr)
do forever
ki = comp2CodeKind(m, ki)
if length(ki) <= 1 then
if pos(ki, m.m.chKind';<') > 0 then
return expr
else
call err 'comp2Code bad return' ki expr
fr = right(ki, 1)
to = substr(ki, length(ki)-1, 1)
opt = ''
if pos(to, 'l0') > 0 | (to == '*' & fr == '*') then do
opt = to
to = substr(ki, length(ki)-2, 1)
end
toBef = to
nn = '||||'
if fr == '*' then do
if opt == '' then
call scanErr m.m.scan, 'no sOp for * kind' ki expr
cat = comp2CodeCat(m, expr, opt, to)
parse var cat to nn
end
else if to == '-' then do
if fr == '=' then
nn = quote(expr)
else if abbrev(fr expr, '. envGetO(') then
nn = 'envGet(' || substr(expr, 9)
else if fr == ';' then
nn = "o2String('"oRunner(expr)"')"
else if pos(fr, '.<') > 0 then
nn = "o2String("expr")"
end
else if to == '.' then do
if fr == '=' then
nn = quote(s2o(expr))
else if abbrev(fr expr, '- envGet(') then
nn = 'envGetO('substr(expr, 8)
else if fr == '-' then
nn = 's2o('expr')'
else if fr == '<' then
nn = expr
else if fr == ';' then
nn = quote(oRunner(expr))
end
else if to == '@' then do
if fr == '.' then
nn = 'call oRun' expr
else if fr == '<' then
nn = 'call pipeWriteAll' expr
else if fr == ';' then
nn = expr
to = ';'
end
else if to == ';' then do
if fr == '=' then
nn = 'call out' quote(expr)
else if fr == '-' then
nn = 'call out' expr
else if fr == '.' | fr == '<' then
nn = 'call outO' expr
else if fr == '#' then
nn = 'call envPushWith ;'expr'; call envPopWith'
end
else if to == ':' then do
if fr == '=' then
nn = quote(expr)
else
nn = expr
to = ';'
end
else if to == '<' then do
if fr == '-' then
nn = 'file('expr')'
else if fr == '=' then
nn = "file("quote(expr)")"
else if fr == '.' then
nn = 'o2File('expr')'
else if fr == ';' then
nn = 'o2File('oRunner(expr)')'
end
else if to == '(' then do
nn = compAddBracks(m, fr, expr)
to = fr
end
else if to == '|' | to == '?' then do
if fr == '<' | fr == '.' then do
nn = 'fileSingle('expr if(to == '|','', ", ''")')'
to = '.'
end
else if fr == '@' | fr == ';' then do
to = to'<'fr
nn = expr
end
end
if nn == '||||' then
return scanErr(m.m.scan,
,'comp2code bad fr' fr 'to' toBef 'for' ki expr)
ki = left(ki, length(ki)-2-length(opt))to
expr = nn
end
endProcedure comp2Code
/*--- optimize operands: eliminate duplicates and
identity transformations -------------------*/
comp2CodeKind: procedure expose m.
parse arg m, ki
ki = '$'space(translate(ki, ' ', 'ce'), 0)
fr.2 = '== -- .. << ;; (( -( .( ;( (< @; @@ ;@ @( $l $0 @#'
to.2 = '= - . < ; ( (- (. (; < ; @ @ (@ $ $ ;#'
fr.3 = ';0; ;l; -.- -;- .-. .;. ;<; ;<( <(; @(- @(l |(l ?(l'
to.3 = ' 0; l; - - . . ; ;< <; ;(- ;(l (|l (?l'
do until ki = oldKi
oldKi = ki
do le=3 by-1 to 2
do cx=1 while cx <= length(ki)+1-le
wx = wordPos(substr(ki, cx, le), fr.le)
if wx > 0 then
ki = left(ki, cx-1) || ,
word(to.le, wx) || substr(ki, cx+le)
end
end
end
return substr(ki, 2)
endProcedure comp2CodeKind
/*--- generate one codeString for one stem -------------------------*/
comp2CodeCat: procedure expose m.
parse arg m, st, sOp, trgt
toCode = trgt == '@' | trgt == ';'
if m.st.0 < 1 & trgt \== '<' then
return trgt
tr1 = trgt
if \ toCode then do
/* check wether we need to evaluate statements
and cast the outptut to an object */
maxTy = 0
do x=1 to m.st.0
maxTy = max(maxTy, pos(left(m.st.x, 1), '=-.<;@'))
end
if trgt \== '<' then do
if maxTy >= 5 then do
tr1 = ';'
toCode = 1
end
end
else do /* handle files */
if maxTy > 1 then do /* not constant */
res = ';'
do sx=1 to m.st.0
res = res';' comp2Code(m, ';'m.st.sx)
end
return '<'res
end
/* constant file write to jBuf */
buf = jOpen(jBuf(), m.j.cWri)
do sx=1 to m.st.0
call jWrite buf, substr(m.st.sx, 3)
end
return '<' quote(jClose(buf))
end
end
if m.st.0 = 1 then do
if trgt == '|' | trgt == '?' then
return left(m.st.1, 1) comp2Code(m, m.st.1)
else if trgt \== '<' then
return trgt comp2Code(m, trgt || m.st.1)
end
tr2 = tr1
if toCode then do
mc = '; '
if sOp == 0 then do
mc = ''
tr2 = ':'
end
end
else if sOp == '0' then
mc = if(tr1 == '.' | tr1 == '-', '', ' || ')
else if sOp == 'l' then
mc = ' '
else
call scanErr m.m.scan, 'bad sOp' sOp ,
'in comp2CodeCat('m',' st',' sOp',' trgt')'
if symbol('m.st.1') \== 'VAR' then
return err("bad m."st'.1')
sep = if(tr1 == '.' | tr1 == '-' | tr1 == '=', ' || ', ' ')
sep = if(sOp = 0, ' || ', ' ')
tr3 = left(tr2, sOp \== 0)
res = comp2Code(m, tr3 || m.st.1)
do sx = 2 to m.st.0
if (tr2 == '.' | tr2 == '-') ,
& (m.st.sx = '-' | m.st.sx = '.') then do
/* empty expr is simply a rexx syntax space */
if right(res, 1) \== ' ' then
res = res' '
end
else do
act = comp2Code(m, tr3 || m.st.sx)
res = compCatRexx(res, act, mc, sep)
end
end
return copies(trgt || sOp, tr1 \== trgt)tr1 res
endProcedure comp2CodeCat
/*--- add expression brackets if necessary --------------------------*/
compAddBracks: procedure expose m.
parse arg m, ki, ex
if ki == ';' then
return 'do;' ex || left(';', ex \= '') 'end'
if \ (ki == '.' | ki == '-') then
return ex
ex = strip(ex)
e1 = left(ex, 1)
if e1 == '(' & pos('(', ex, 2) = 0 & pos(')', ex) = length(ex) then
return ex
if pos(e1, '"''') > 0 & pos(e1, ex, 2) = length(ex) then
return ex
return '('ex')'
endProcedure compAddBracks
/*--- cat two rexx parts, avoid strange effects--------------------*/
compCatRexx: procedure expose m.
parse arg le, ri, mi, sep
if mi \== '' then
return le || mi || ri
lr = right(le, 1)
rl = left(ri, 1)
if (lr == "'" | lr == '"') then do
if rl == lr then /* "a","b" -> "ab" */
return left(le, length(le)-1) || substr(ri, 2)
else if rl == '(' then /* "a",( -> "a" || ( */
return le||sep||ri /* avoid function call */
end
else if pos(lr, m.comp.idChars) > 0 then
if pos(rl, m.comp.idChars'(') > 0 then
return le || sep || ri /* a,b -> a || b */
return le || mi || ri
endProcedure compCatRexx
/*--- push an empty stem on the stack --------------------------------*/
compNewStem: procedure expose m.
parse arg m
st = mAdd('COMP.STEM', '')
do ix=1 to arg()-1
m.st.ix = arg(ix+1)
end
m.st.0 = ix-1
return st
endProcedure compNewStem
/* copy comp end ******************************************************/
/* copy scanSB begin ***************************************************
Achtung: inc generiert SB aus scanSB, Aenderungen nur in scanSB|
ScanSB: basic scan
scanLook(m,len) : returns next len chars, pos is not moved
scanChar(m,len) : scans next len chars
scanString(m,q): scan a String with quote q. (with doubble = 1)
scanVerify(m,c,o): verify(...,c,o,...)
scanWord(m,u) : scan a space delimited word or a string,
if u=1 then uppercase non-strings
variable interface
scanSrc(m, source) starts scanning a single line
scanEnd(m) : returns whether we reached end of input
scanErr(m, txt): error with current scan location
m is an address, to store our state
if a scan function succeeds, the scan posititon is moved
returns: true if scanned, false otherwise
m.m.tok ==> last token
m.m.val ==> last value for scanString/Word
m.m.pos ==> scan position
m.m.src ==> scan source
***********************************************************************/
/*--- return the next len characters until end of src ----------------*/
scanLook: procedure expose m.
parse arg m, len
if len == '' then
return substr(m.m.src, m.m.pos)
else
return substr(m.m.src, m.m.pos,
, min(len, 1 + length(m.m.src) - m.m.pos))
endProcedure scanLook
/*--- scan len chararcters, atmost to end of src ---------------------*/
scanChar: procedure expose m.
parse arg m, len
m.m.tok = scanLook(m, len)
m.m.pos = m.m.pos + length(m.m.tok)
return m.m.tok \== ''
endProcedure scanChar
/*--- scan the literal lit ------------------------------------------*/
scanLit: procedure expose m.
parse arg m
do ax=2 to arg()
if abbrev(substr(m.m.src, m.m.pos), arg(ax)) then do
m.m.tok = arg(ax)
m.m.pos = m.m.pos + length(arg(ax))
return 1
end
end
m.m.tok = ''
return 0
endProcedure scanLit
/*--- scan with verify, vOpt is passed to verify ---------------------*/
scanVerify: procedure expose m.
parse arg m, alpha, vOpt, onlyIfMatch
if arg() > 3 then
call err 'deimplement onlyIfMatch???'
if vOpt == '' then /* empty string does not take default */
nx = verify(m.m.src, alpha, , m.m.pos)
else
nx = verify(m.m.src, alpha, vOpt, m.m.pos)
if nx = 0 then
if onlyIfMatch == 1 then
nx = m.m.pos
else
nx = length(m.m.src) + 1
m.m.tok = substr(m.m.src, m.m.pos, nx - m.m.pos)
m.m.pos = nx
return m.m.tok \== ''
endProcedure scanVerify
/*--- scan while in charset ------------------------------------------*/
scanWhile: procedure expose m.
parse arg m, chSet
return scanVerify(m, chSet, 'n')
/*--- scan until in charset ------------------------------------------*/
scanUntil: procedure expose m.
parse arg m, chSet
return scanVerify(m, chSet, 'm')
/*--- scan until (and over) string End -------------------------------*/
scanStrEnd: procedure expose m.
parse arg m, sep
px = m.m.pos
do forever
px = pos(sep, m.m.src, px)
if px = 0 then do
m.m.tok = ''
return 0
end
px = px + length(sep)
if \ abbrev(substr(m.m.src, px), sep) then do
m.m.tok = substr(m.m.src, m.m.pos, px-m.m.pos)
m.m.pos = px
return 1
end
px = px + length(sep)
end
endProcedure scanStrEnd
/*--- scan a string with quote char qu -------------------------------*/
scanString: procedure expose m.
parse arg m, prefs
if prefs = '' then do
call scanLit m, "'", '"'
end
else do
do px=1 to words(prefs) until scanLit(m, word(prefs, px))
end
end
if m.m.tok == '' then
return 0
t1 = m.m.tok
qu = right(t1, 1)
if \ scanStrEnd(m, qu) then do
m.m.pos = m.m.pos - length(t1)
return scanErr(m, 'ending Apostroph('qu') missing')
end
m.m.val = repAll(left(m.m.tok, length(m.m.tok)-1), qu||qu, qu)
m.m.tok = t1 || m.m.tok
return 1
endProcedure scanString
/*--- scan a word and put value into *.val
a word is either delimited by space or stopper
or a string (with single or double quotes -------*/
scanWord: procedure expose m.
parse arg m, stopper, ucWord
if scanString(m) then
return 1
if stopper == '' then
stopper = ' '
if \scanUntil(m, stopper) then
return 0
m.m.val = m.m.tok
if ucWord == 1 then
upper m.m.val
return 1
endProcedure scanWord
/*--- skip, scan and return next word --------------------------------*/
scanSkWord: procedure expose m.
parse arg m, stopper, ucWord, eMsg
if scanWord(scanSkip(m), stopper, ucWord) then
return m.m.val
else if eMsg == '' then
return ''
else
call scanErr m, eMsg 'expected'
endProcedure scanSkWord
/*--- go back the current token --------------------------------------*/
scanBack: procedure expose m.
parse arg m, tok
if m.m.pos <= length(tok) then
call scanErr sc, 'cannot back "'tok'" length'
cx = m.m.pos - length(tok)
if substr(m.m.src, cx, length(tok)) \== tok then
call scanErr sc, 'cannot back "'tok'" value'
m.m.pos = cx
return
endProcedure scanBack
/*--- set new src - allow scanning without open ----------------------*/
scanSBSrc: procedure expose m.
parse arg m, m.m.src
return scanSBOpen(m)
endProcedure scanSBSrc
/*--- start scanning with a new single src ---------------------------*/
scanSBOpen: procedure expose m.
parse arg m
m.m.pos = 1
m.m.tok = ''
return m
endProcedure scanSBOpen
/*--- start scanning with a new single src ---------------------------*/
scanSBClose: procedure expose m.
parse arg m
m.m.pos = length(m.m.src) + 1
m.m.tok = '--- closed ---'
return m
endProcedure scanSBClose
scanSBSpace: procedure expose m.
parse arg m
nx = verify(m.m.src, ' ', , m.m.pos)
if nx = 0 then
nx = length(m.m.src) + 1
res = nx <> m.m.pos
m.m.tok = left(' ', res)
m.m.pos = nx
return res
endProcedure scanSBSpace
/*--- skip over space, nl and comments and return m -----------------*/
scanSkip: procedure expose m.
parse arg m
call scanSpace m
return m
endProcedure scanSkip
scanErr: procedure expose m.
parse arg m, txt
return err('s}'txt'\n'scanInfo(m))
endProcedure scanErr
scanSBInfo: procedure expose m.
parse arg m
return 'last token' m.m.tok 'scanPosition' ,
strip(substr(m.m.src, m.m.pos, 40), 't') ,
|| '\npos' m.m.Pos 'in string' strip(m.m.src, 't')
endProcedure scanSBInfo
/*--- return position in simple format -------------------------------*/
scanSBPos: procedure expose m.
parse arg m
return if(m.m.pos > length(m.m.src), 'E', 'singleSrc' m.m.pos)
/*--- return true if at end of src -----------------------------------*/
scanSBEnd: procedure expose m.
parse arg m
return m.m.pos > length(m.m.src)
/* copy scanSB end ****************************************************/
/* copy scan begin ****************************************************
Scan: scan an input: with multiple lines
==> all of scanSB
scanEnd(m) : returns whether we reached end of input
scanLit(m,lit) : scan Literal lit if present or return 0
scanChar(m,n) : scan next n characters
scanName(m) : scan a name
ScanNat(m) : scan a natural number (without sign)
scanString(m,q): scan a String with quote q. (with doubble = 1)
scanVerify(m,c,o): verify(...,c,o,...)
scanKeyValue(m): scan a key = value clause (with spaces)
scanWord(m,u) : scan a space delimited word or a string,
if u=1 then uppercase non-strings
scanErr(m, txt): error with current scan location
m is an address, to store our state
if a scan function succeeds, the scan posititon is moved
returns: true if scanned, false otherwise
m.m.tok ==> last token
m.m.val ==> last value for scanString/Word/KeyValue
m.key ==> key for scanKeyValue
m.m.pos ==> scan position
m.m.src ==> scan source
***********************************************************************/
scanIni: procedure expose m.
if m.scan.ini = 1 then
return
m.scan.ini = 1
call jIni
ts = classNew('n ScanRes u f TOK v, f VAL v, f KEY v, f TYPE v')
call classNew 'n ScanSB u JRWO', 'm',
, 'scanEnd return 1',
, 'scanNL m.m.tok = ""; return 0',
, 'scanCom m.m.tok = ""; return 0',
, 'scanInfo return scanSBInfo(m)' ,
, 'jReset call scanSbSrc m, arg;' ,
'call scanOpts m, arg2, arg3, arg(4)',
, "jOpen call scanSBOpen scanOC(m, opt, 'ScanSBR')" ,
, "jClose call scanSBClose scanOC(m, , 'ScanSB')",
, 'scanPos scanSBPos(m)'
call classNew 'n ScanSBR u ScanSB', 'm',
, "jReadO if scanType(m) == '' then return '';" ,
" else return oClaCopy('"ts"', m, '')"
return
endProcedure scanIni
/*--- check open opt is read and mutate ------------------------------*/
scanOC: procedure expose m.
parse arg m, opt, cla
if \ abbrev(m.j.cRead, opt) then
call err 'scanOpen opt must be' m.j.cRead 'not' opt
return oMutatName(m, cla)
endProcedure scanOC
/*--- start scanning with a new single src ---------------------------*/
scanSrc: procedure expose m.
parse arg m, src
return scanSbSrc(oMutatName(m, 'ScanSB'), src)
scanOpen: procedure expose m.
parse arg m
opt = ''
interpret objMet(m, 'jOpen')
return m
endProcedure scanOpen
scanClose: procedure expose m.
parse arg m
interpret objMet(m, 'jClose')
return m
endProcedure scanOpen
scanInfo: procedure expose m.
parse arg m
interpret objMet(m, 'scanInfo')
/*--- return true if at end of src -----------------------------------*/
scanEnd: procedure expose m.
parse arg m
if m.m.pos <= length(m.m.src) then
return 0
interpret objMet(m, 'scanEnd')
/*--- scan over white space, nl, comments ...-------------------------*/
scanSpace: procedure expose m.
parse arg m
fnd = 0
do while scanSBSpace(m) | scanCom(m) | scanNl(m)
fnd = 1
end
m.m.tok = left(' ', fnd)
return fnd
endProcedure scanSpace
/*--- scan next line -------------------------------------------------*/
scanNL: procedure expose m.
parse arg m, unCond
interpret objMet(m, 'scanNL')
/*--- scan one comment -----------------------------------------------*/
scanCom: procedure expose m.
parse arg m
interpret objMet(m, 'scanCom')
scanPos: procedure expose m.
parse arg m
interpret 'return' objMet(m, 'scanPos')
endProcedure scanPos
scanOpts: procedure expose m.
parse arg m, m.m.scanName1, namePlus, m.m.scanComment
if m.m.scanName1 == '' then
m.m.scanName1 = m.ut.alfa
if namePlus == '' then
m.m.scanNameR = m.m.scanName1 || '0123456789'
else
m.m.scanNameR = m.m.scanName1 || namePlus
return m
endProcedure scanOpts
/*--- begin scanning a single line -----------------------------------*/
scanSrc: procedure expose m.
parse arg m, m.m.src
return scanOpen(m)
endProcedure scanSrc
/*--- scan a Name, first char in *.scanName1, rest in *.scanNameR ----*/
scanName: procedure expose m.
parse arg m
if pos(substr(m.m.src, m.m.pos, 1),
, m.m.scanName1) <= 0 then do
m.m.tok = ''
return 0
end
return scanVerify(m, m.m.scanNameR)
endProcedure scanName
/*--- scan a natural number (no sign, decpoint ...) ------------------*/
scanNat: procedure expose m.
parse arg m, chEn
if \ scanVerify(m, '0123456789') then
return 0
if chEn \== 0 then
if pos(scanLook(m , 1), m.m.scanNameR) > 0 then
call scanErr m, 'illegal number end after' m.m.tok
return 1
endProcedure ScanNat
/*--- scan an integer (optional sign, no decpoint ...) ---------------*/
scanInt: procedure expose m.
parse arg m, chEn
call scanLit m, '+', '-'
si = m.m.tok
if \ scanNat(m, chEn) then do
m.m.pos = m.m.pos - si
return 0
end
m.m.tok = si || m.m.tok
return 1
endProcedure scanInt
/*--- scan a number (optional sign, decpoint, exponent) ------------*/
scanNum: procedure expose m.
parse arg m, chEn
sx = m.m.pos
call scanLit m, '+', '-'
po = scanLit(m, '.')
if \ scanNat(m, 0) then do
m.m.pos = sx
return 0
end
if \ po then
if scanLit(m, '.') then
call scanNat m, 0
if scanLit(m, 'e', 'E') then
if \ scanInt(m, 0) then
call scanErr m, 'exponent expected after' ,
substr(m.m.src, sx, m.m.pos-sx)
m.m.tok = substr(m.m.src, sx, m.m.pos-sx)
m.m.val = translate(m.m.tok)
if chEn \== 0 then
if pos(scanLook(m , 1), m.m.scanNameR) > 0 then
call scanErr m, 'illegal number end after' m.m.tok
return 1
endProcedure scanNum
scanType: procedure expose m.
parse arg m, opt
m.m.tok = ''
if scanName(m) then
m.m.type = 'n'
else if scanNum(m) then
m.m.type = 0
else if scanString(m) then
m.m.type = left(m.m.tok, 1)
else if scanSpace(m) then
m.m.type = 's'
else do
call scanChar m, 1
m.m.type = m.m.tok
end
return m.m.type
endProcedure scanType
/*--- scan a key = word phrase
put key into m.key and word into m.m.val -------*/
scanKeyValue: procedure expose m.
parse arg m, def
if \ scanName(m) then
return 0
m.m.key = m.m.tok
if \ scanLit(scanSkip(m), '=') then do
m.m.val = def
m.m.tok = ' no='
end
else if \scanWord(scanSkip(m)) then
return scanErr(m, 'word expected after' m.m.key '=')
return 1
endProcedure scanKeyValue
/*--- emit an error with current scan pos ----------------------------*/
/* copy scan end ****************************************************/
/* copy scanRead begin ************************************************/
scanReadIni: procedure expose m.
if m.scanRead.ini = 1 then
return
m.scanRead.ini = 1
call scanIni
/* ts = classNew('n Scan u f TOK v, f VAL v, f KEY v, f TYPE v') */
call classNew 'n ScanRead u ScanSB', 'm',
, 'scanEnd return m.m.atEnd' ,
, 'scanNL return scanReadNL(m, unCond)',
, 'scanCom return scanReadCom(m)',
, 'scanInfo return scanReadInfo(m)',
, 'scanPos return scanReadPos(m)',
, "jOpen call scanReadOpen scanOC(m, opt, 'ScanReadR')",
, "jClose call scanReadClose scanOc(m, , 'ScanRead')"
call classNew 'n ScanReadR u ScanRead', 'm',
, 'jReadO' oClaMet(class4Name('ScanSBR'), 'jReadO')
call classNew "n EditRead u JRW", "m",
, "jRead return editRead(m, var)",
, "jOpen" ,
, "jReset m.m.linex = arg - 1"
return
endProcedure scanReadIni
/*--- begin scanning the lines of a reader ---------------------------*/
scanRead: procedure expose m.
parse arg rdr, n1, np, co
return scanReadReset(oNew('ScanRead'), rdr, n1, np, co)
scanReadReset: procedure expose m.
parse arg m, m.m.rdr, n1, np, co
call oMutatName m, 'ScanRead'
call scanOpts m, n1, np, co
return m
endProcedure scanReadReset
scanReadOpen: procedure expose m.
parse arg m
m.m.atEnd = 0
m.m.lineX = 0
m.m.val = ''
m.m.key = ''
call jOpen m.m.rdr, '<'
call scanReadNL m, 1
return m
endProcedure scanReadOpen
scanReadClose: procedure expose m.
parse arg m
call jClose m.m.rdr
m.m.atEnd = 'closed'
return scanSBClose(m)
endProcedure scanReadClose
/*--- scan over next newLine
if unCond \== 1 only if we are already at endOfLine
return true if we scanned a NL ------------------------------*/
scanReadNL: procedure expose m.
parse arg m, unCond
if unCond \== 1 then
if m.m.pos <= length(m.m.src) then
return 0
if m.m.atEnd then
return 0
m.m.atEnd = \ jRead(m.m.rdr, m'.SRC')
if m.m.atEnd then do
m.m.pos = 1 + length(m.m.src)
return 0
end
m.m.pos = 1
m.m.lineX = m.m.lineX + 1
return 1
endProcedure scanReadNl
scanReadCom: procedure expose m.
parse arg m
m.m.tok = ''
if m.m.scanComment == '' then
return 0
if \ abbrev(substr(m.m.src, m.m.pos), m.m.scanComment) then
return 0
m.m.pos = 1 + length(m.m.src)
m.m.tok = ' '
return 1
endProcedure scanReadCom
scanReadPos: procedure expose m.
parse arg m, msg
if scanEnd(m) then
return 'E'
else
return m.m.lineX m.m.pos
endProcedure scanReadPos
scanReadInfo: procedure expose m.
parse arg m
msg = 'last token' m.m.tok 'scanPosition' ,
strip(substr(m.m.src, m.m.pos, 40), 't')
if scanEnd(m) then
msg = msg'\natEnd after'
else
msg = msg'\npos' m.m.pos 'in'
return msg 'line' m.m.lineX':' strip(m.m.src, 't')
endProcedure scanReadInfo
/*--- use scan sqlEdit macro --> temporarily here --------------------*/
/*--- read next line from edit data ----------------------------------*/
editRead: procedure expose m.
parse arg m, var
m.m.lineX = m.m.lineX + 1
if adrEdit('(ll) = line' m.m.lineX, 12) ^= 0 then
return 0
m.var = ll
return 1
endProcedure editRead
/*--- search loop in edit macro --------------------------------------*/
scanSqlSeekId: procedure expose m.
parse arg m, lx, cmd, opts
if opts = '' then
opts = word
/* line 1 col 0, otherwise first word is skipped*/
if adrEdit("cursor =" max(trunc(lx), 1) 0, 12) = 12 then
return -1
do while adrEdit("seek" cmd opts, 4) = 0 /* find each command*/
call adrEdit "(fx) = cursor"
if m.debug then do
call adrEdit "(LI) = LINE" fx
call debug 'scanSqlSeekId after' lx 'found' cmd 'at' fx li
end
call jReset m.m.rdr, fx
call jOpen m, '<'
m.m.lineX = fx
do while word(scanPos(m), 1) <= fx & scanSqlClass(m)
if m.m.sqlClass = 'i' & m.m.val == cmd then
return fx
end
call jClose m
end
return -1
endProcedure scanSqlSeekId
/* copy scanRead end **************************************************/
/* copy scanWin begin *************************************************
scan the the concatenation of the lines of a reader
any token my be split over several line
except the end-of-line-comment-token
***********************************************************************/
scanWinIni: procedure expose m.
if m.scanWin.ini = 1 then
return
m.scanWin.ini = 1
call scanReadIni
call classNew 'n ScanWin u ScanSB', 'm',
, 'jReset call scanWinReset m, arg, arg2, arg3',
, "jOpen call scanWinOpen scanOC(m, opt, 'ScanWinR'), arg(3)",
, "jClose call scanReadClose scanOC(m, , 'ScanWin')",
, 'scanNL return scanWinNl(m, unCond)',
, 'scanCom return scanWinCom(m)',
, 'scanInfo return scanWinInfo(m)',
, 'scanPos return scanWinPos(m)'
call classNew 'n ScanWinR u ScanWin', 'm',
, 'jReadO' oClaMet(class4Name('ScanSBR'), 'jReadO')
return
endProcedure scanWinIni
/*--- instanciate a new window scanner, open rdr ---------------------*/
scanWin: procedure expose m.
parse arg rdr, wiSz, wiBa, cuPo, cuLe
return scanWinOpts(oNew('ScanWin', rdr), wiSz, wiBa, cuPo, cuLe)
/*--- set the reader and attributes of window scanner m -------------*/
scanWinReset: procedure expose m.
parse arg m, m.m.rdr, wiSz, wiGa, cuPo, cuLe
m.m.atEnd = 'closed after reset'
return scanWinOpts(scanOpts(m), wiSz, wiGa, cuPo, cuLe)
endProcedure scanWinReset
/*--- set the attributes of window scanner m ------------------------*/
scanWinOpts: procedure expose m.
parse arg m, wiSz, wiGa, cuPo, cuLe
wiSz = word(wiSz 5, 1)
wiGa = word(wiGa 1, 1)
m.m.cutPos = word(cuPo 1, 1)
m.m.cutLen = word(cuLe 72, 1)
m.m.winTot = (wiSz * 2 + wiGa) * m.m.cutLen
m.m.posLim = (wiSz + wiGa) * m.m.cutLen
m.m.posOff = wiGa * m.m.cutLen
return m
endProcedure scanWinOpts
/*--- open reader and start scanning --------------------------------*/
scanWinOpen: procedure expose m.
parse arg m, lx
m.m.atEnd = 0
if lx = '' then
m.m.lineX = 1
else
m.m.lineX = lx
call scanSBOpen m
m.m.val = ''
m.m.key = ''
m.m.pos = 1
m.m.src = ''
call jOpen m.m.rdr, m.j.cRead
call scanWinRead m
return m
endProcedure scanWinOpen
/*--- move the source window: cut left side and append at right side
return number of characters cut at left ------------------------*/
scanWinRead: procedure expose m.
parse arg m
dlt = 0
if m.m.atEnd then
return 0
if m.m.pos >= m.m.posLim then do /* cut left side */
dlt = m.m.pos - (m.m.pos // m.m.cutLen + m.m.posOff)
m.m.src = substr(m.m.src, dlt+1)
m.m.pos = m.m.pos - dlt
m.m.lineX = m.m.lineX + dlt % m.m.cutLen
end
do while length(m.m.src) < m.m.winTot /* read and fill to len */
if \ jRead(m.m.rdr, m'.'one) then do
m.m.atEnd = 1
return dlt
end
m.m.src = m.m.src || substr(m.m.one, m.m.cutPos, m.m.cutLen)
end
call assert 'length(m.m.src) = m.m.winTot'
return dlt
endProcedure scanWinRead
/*--- return position of next line start -----------------------------*/
scanWinNLPos: procedure expose m.
parse arg m
return m.m.pos + m.m.cutLen - ((m.m.pos - 1) // m.m.cutLen)
/*--- scan comment ---------------------------------------------------*/
scanWinCom: procedure expose m.
parse arg m
call scanWinRead m
if scanLit(m, '/*') then do
ex = pos('*/', m.m.src, m.m.pos+2)
if ex <= m.m.pos then
return scanErr(m, '*/ missing after /*')
m.m.pos = ex+2
call scanWinRead m
end
else do
cl = length(m.m.scanComment)
np = scanWinNlPos(m)
if \ ( cl>0 & m.m.pos+cl <= np & m.m.scanComment ,
== substr(m.m.src, m.m.pos, cl)) then do
m.m.tok = ''
return 0
end
m.m.pos = np
end
m.m.tok = ' '
return 1
endProcedure scanWinCom
/*--- scan nl --------------------------------------------------------*/
scanWinNL: procedure expose m.
parse arg m, unCond
call scanWinRead m
if unCond \== 1 then
return 0
np = scanWinNLPos(m)
if np \= m.m.pos then
return 0
m.m.pos = np
return 1
endProcedure scanWinNl
/*--- return current position in input ------------------------------*/
scanWinPos: procedure expose m.
parse arg m
if scanEnd(m) then
return 'E'
ps = m.m.pos - 1
return (m.m.lineX + (ps % m.m.cutLen)) (ps // m.m.cutLen + 1)
endProcedure scanWinPos
/*--- return a description of the current scan position --------------*/
scanWinInfo: procedure expose m.
parse arg m
p = scanWinPos(m)
if p == 'E' then do
res = 'atEnd after'
p = m.m.lineX - 1 + length(m.m.src) % m.m.cutLen
end
else do
res = 'pos' word(p, 2) 'in'
p = word(p, 1)
end
return 'last token' m.m.tok 'scanPosition' ,
strip(left(substr(m.m.src, m.m.pos), 40), 't') ,
|| '\n'res 'line' p':' strip(substr(m.m.src,
, 1 + (p - m.m.lineX) * m.m.cutLen, m.m.cutLen), 't')
endProcedure scanWinInfo
/* copy scanWin end *************************************************/
/* copy scanSql begin *************************************************/
/*--- initialize with reader inRdr ----------------------------------*/
scanSql: procedure expose m.
parse arg inRdr
return scanSqlReset(scanWin(inRdr), inRdr)
scanSqlReset: procedure expose m.
parse arg m, r, scanWin
if scanWin \== 0 then
call scanWinOpts m, 5, 2, 1, 72
m.m.rdr = r
return scanOpts(m, , '0123456789_' , '--')
endProcedure scanSqlReset
/*--- scan a sql token put class in m.sqlclass:
'i': ordinary identifier e.g. Name
'd': delimited identifier e.g. "Delimited"
'q': qualified identifier e.g. abc."efg"
'u': integer units e.g. 8G
'n': number e.g. -234 or .2e3
's': string e.g. 'abc''ef'
'' : at end
: any other character e.g. ;
----------------------------------------------------------------*/
scanSqlClass: procedure expose m.
parse arg m, retSpace
m.m.val = ''
if scanSpace(m) & retSpace = 1 then do
m.m.sqlClass = 'b'
return 1
end
c2 = scanLook(m ,2)
if scanString(m, "' x' X'") then do
m.m.sqlClass = 's'
if \abbrev(m.m.tok, "'") then
m.m.val = x2c(m.m.val)
end
else if scanSqlQuId(m) then do
if m.m.val.0 > 1 then
m.m.sqlClass = 'q'
else if abbrev(m.m.tok, '"') then
m.m.sqlClass = 'd'
else
m.m.sqlClass = 'i'
end
else if scanSqlNum(m, 0) then
m.m.sqlClass = 'n'
else if scanChar(m, 1) then
m.m.sqlClass = m.m.tok
else if scanEnd(m) then do
m.m.sqlClass = ''
return 0
end
else
call scanErr m, 'cannot scan sql'
return 1
endProcedure scanSqlClass
scanSqlSkipBrackets: procedure expose m.
parse arg m, br
if br \== '' then
nop
else if scanLit(m, '(') then
br = 1
else
return 0
do while scanSqlClass(m) & m.m.sqlClass \== ';'
if m.m.sqlClass = '(' then br = br + 1
else if m.m.sqlClass \== ')' then iterate
else if br > 1 then br = br - 1
else return 1
end
call scanErr m, '; or eof, but' br 'closing ) expected'
endProcedure skipBrackets
/*--- scan an ordinary sql identifier e.g. abc, ef_12 ----------------*/
scanSqlId: procedure expose m.
parse arg m
if \ scanName(m) then
return 0
m.m.val = translate(m.m.tok)
return 1
endProcedure scanSqlId
/*--- scan a delimited or ordinay sql identifier ---------------------*/
scanSqlDeId: procedure expose m.
parse arg m
if scanSqlId(m) then
return 1
if \ scanString(m, '"') then
return 0
m.m.val = strip(m.m.val, 't')
return 1
endProcedure scanSqlDeId
/*--- scan a qualified sql identifier --------------------------------*/
scanSqlQuId: procedure expose m.
parse arg m
res = ''
rto = ''
do qx=1
if \ scanSqlDeId(m) then do
if qx <> 1 then
call scanErr m, 'id expected after .'
return 0
end
m.m.val.qx = m.m.val
res = res'.'m.m.val
rto = rto'.'m.m.tok
if \ scanLit(scanSkip(m), '.') then
leave
call scanSpace m
end
m.m.val.0 = qx
m.m.val = substr(res, 2)
m.m.tok = substr(rto, 2)
return 1
endProcedure scanSqlQuId
/*--- scan a sql number ----------------------------------------------*/
scanSqlNum: procedure expose m.
parse arg m, checkEnd, noSp
si = ''
if noSp == 1 then
call err 'deimplement noSp, use scanNum instead'
if scanLit(m, '+', '-') then do
si = m.m.tok
call scanSpace m
ch = scanLook(m, 2)
if left(ch, 1) == '.' then
ch = substr(ch, 2)
if pos(left(ch, 1), '0123456789') < 1 then do
call scanBack m, si
m.m.val = ''
return 0
end
end
res = scanNum(m, checkEnd)
m.m.val = si || m.m.val
return res
endProcedure scanSqlNum
/*--- scan a sql number with a unit which may follow without space ---*/
scanSqlNumUnit: procedure expose m.
parse arg m, both, units
if \ scanSqlNum(m, 0) then
return 0
nu = m.m.val
sp = scanSpace(m)
if scanSqlId(m) then do
if units == '' | wordpos(m.m.val, units) > 0 then
nu = nu m.m.val
else if both | \ sp then
call scanErr m, 'scanSqlNumUnit after' nu 'bad unit' m.m.val
else
call scanBack m, m.m.tok
end
else if both then
call scanErr m, 'scanSqlNumUnit no unit after' nu
else if \sp & pos(scanLook(m, 1), m.m.scanNameR) > 0 then
call scanErr m, 'scanSqlNumUnit bad number end after' nu
m.m.val = nu
return 1
endProcedure scanSqlNumUnit
scan2Trgs: procedure expose m.
parse arg m, t1, t2
cx = m.m.pos - 1
do forever
cx = verify(m.m.src, t1 || t2, 'm', cx + 1)
if cx = 0 then do
m.m.pos = length(m.m.src) + 1
return ''
end
if pos(substr(m.m.src, cx, 1), t1) > 0 then do
m.m.pos = cx
return substr(m.m.src, cx, 1)
end
do ax=4 to arg()
if arg(ax) == substr(m.m.src, cx, length(arg(ax))) then do
m.m.pos = cx
return arg(ax)
end
end
end
endProcedure scan2Trgs
scanSql2Stop: procedure expose m.
parse arg m, sta, stop
sta = substr(sta, 2)
c1 = left(sta, 1)
if c1 == 't' then do
bx = m.m.pos
c1 = scan2Trgs(m, '"'''stop, '-/', '--', '/*')
if bx < m.m.pos then
return 't'sta
m.m.pos = m.m.pos + length(c1)
c1 = left(c1, 1)
sta = c1 || sta
end
if c1 == '/' then do
bx = m.m.pos
c1 = scan2Trgs(m, '"''', '-*', '--', '*/')
if bx < m.m.pos then
return '+'sta
m.m.pos = m.m.pos + length(c1)
if c1 == '*/' then
return sta
c1 = left(c1, 1)
sta = c1 || sta
end
if abbrev(sta, "'") | abbrev(sta, '"') then do
if scanStrEnd(m, c1) then
return sta
m.m.pos = 1 + length(m.m.src)
return '+'sta
end
if pos(c1, '-'stop) > 0 then do
if c1 == '-' then
m.m.pos = length(m.m.src) + 1
return sta
end
if \ abbrev(sta, '/') then
call err 'bad sta2' sta 'for scanSql2Stop'
call err implement
res = res || substr(m.m.src, bx, m.m.pos-bx)' '
do forever
px = pos('*/', m.m.src, m.m.pos)
if px > 0 then
leave
if \ jCatSqlNL(m) then
return res
end
bx = px+2
m.m.pos = bx
end
endProcedure scanSql2Stop
/* copy scanSql end *************************************************/
/* copy scanUtil begin *************************************************
scan db2 utility input statements using scan and a reader
**********************************************************************/
/*--- initialize with reader inRdr ----------------------------------*/
scanUtilReader: procedure expose m.
parse arg m, inRdr
call scanReader m, inRdr
call scanOptions sc, , , '--'
call scanUtilReset m
return m
endProcedure scanUtilReader
scanUtilSql: procedure expose m.
parse arg inRdr
m = scanSql(inRdr)
call scanUtilReset m
return m
endProcedure scanUtilReader
scanUtilReset: procedure expose m.
parse arg m
m.m.utilBrackets = 0
m.scanUtil = 'BACKUP CATENFM CATMAINT CHECK' ,
'COPY COPYTOCOPY DIAGNOSE EXEC LISTDEF LOAD' ,
'MERGECOPY MODIFY OPTIONS QUIESCE REBUILD' ,
'RECOVER REORG REPAIR REPORT RESTORE' ,
'RUNSTATS STOSPACE TEMPLATE UNLOAD'
return m
endProcedure scanUtilReset
/*--- scan next token and put its class in m.sc.utilClass:
'u' a utility name
'n' a name
'"' a quoted name
"'" an apostroph'd string
'.' a .
',' a ,
'v' a value
'' at end
---------------------------------------------------------------*/
scanUtil: procedure expose m.
parse arg sc
m.sc.utilSpace = scanSpace(sc)
ty = '?'
if scanLit(sc, '(') then do
m.sc.utilBrackets = m.sc.utilBrackets + 1
end
else if scanLIT(sc, ')') then do
m.sc.utilBrackets = m.sc.utilBrackets - 1
if m.sc.utilBrackets < 0 then
call scanErr sc, 'unmatched closing bracket )'
end
else if scanLit(sc, ',') then do
end
else if scanLit(sc, '.') then do
end
else if scanString(sc, "'") then do
end
else if scanString(sc, '"') then do
end
else if scanName(sc) then do
m.sc.val = translate(m.sc.tok)
if m.sc.utilBrackets > 0 then
ty = 'n'
else if 0 < wordPos(m.sc.val, m.scanUtil) then
ty = 'u'
else
ty = 'n'
end
else if scanVerify(sc, ' (),''"', 'm') then do
ty = 'v'
m.sc.val = translate(m.sc.tok)
end
else if \scanEnd(sc) then do
call scanErr sc, 'scanUtil stopped before end'
end
else do
ty = ''
m.sc.val = ''
end
if ty == '?' then
m.sc.utilClass = left(m.sc.tok, 1)
else
m.sc.utilClass = ty
return m.sc.utilClass
endProcedure scanUtil
/*--- scan a value or a bracketed list of values ---------------------*/
scanUtilValue: procedure expose m.
parse arg sc, remApo, nl
if remApo = '' | rempApo = 0 then
remApo = "nv"
else if rempApo = 1 then
remApo = "nv'"
if '(' \== scanUtil(sc) then
return scanUtilValueOne(sc, remApo)
v = ''
brx = m.sc.utilBrackets
oLine = word(scanPos(sc), 1)
do forever
call scanUtil sc
one = scanUtilValueOne(sc, remApo)
if one == '' then
call scanErr sc, 'eof in brackets'
else if brx > m.sc.utilBrackets then
return v
nLine = word(scanPos(sc), 1)
if \ m.sc.utilSpace then
v = v || one
else if nl \== '' & oLine <> nLine then
v = v || nl || one
else
v = v' 'one
oLine = nLine
end
endProcedure scanUtilValue
scanUtilValueOne: procedure expose m.
parse arg sc, valTy
if m.sc.utilClass == '' then
return ''
else if m.sc.utilClass == 'u' then
call scanErr sc, 'util in scanUtilValueOne'
if pos(m.sc.utilClass, valTy) > 0 then
return m.sc.val
else
return m.sc.tok
endProcedure scanUtilValueOne
/*--- skip over nested brackets --------------------------------------*/
scanUtilSkipBrackets: procedure expose m.
parse arg m, br, doCat
if br \== '' then
lim = m.m.utilBrackets - br
else if scanLit(m, '(') then do
lim = m.m.utilBrackets
m.m.utilBrackets = lim + 1
end
else
return 0
doCat = doCat == 1
res = ''
do while scanUtil(m) \== ''
if m.m.utilBrackets <= lim then do
if doCat then
m.m.val = res
return 1
end
if doCat then
res = res m.m.tok
end
return scanErr(m, 'eof with' m.m.utilBrackets 'open (')
endProcedure skipBrackets
/*--- analyze a punch file write intoField to stdOut -----------------*/
scanUtilInto: procedure expose m.
parse arg m
if m.m.utilBrackets \== 0 then
call scanErr m, 'scanUtilInto with brackets' m.m.utilBrackets
/*sc = scanUtilReader(m.j.in)
call jOpen sc, 'r'
*/ do forever
cl = scanUtil(m)
if cl == '' then
return 0
if cl = 'n' & m.m.tok == 'INTO' then
leave
end
if scanUtil(m) \== 'n' | m.m.tok \== 'TABLE' then
call scanErr m, 'bad into table '
if \ scanSqlQuId(scanSkip(m)) then
call scanErr m, 'table name expected'
if m.m.utilBrackets \== 0 then
call scanErr m, 'into table in brackets' m.m.utilBrackets
m.m.tb = m.m.val
m.m.part = ''
m.m.when = ''
do forever
cl = scanUtil(m)
if cl == '' then
call scanErr m, 'eof after into'
if cl == 'n' & m.m.tok == 'PART' then do
if scanUtil(m) == 'v' then
m.m.part = m.m.val
else
call scanErr m, 'bad part'
end
else if cl == 'n' & wordPos(m.m.val, 'WHEN WORKDDN') > 0 then do
call scanUtilSkipBrackets m
end
else if cl == '(' then do
leave
end
end
oX = m.m.lineX
oL = overlay('', m.m.src, 1, m.m.pos-2)
do while m.m.utilBrackets > 0
call scanUtil m
if oX \== m.m.lineX then do
call out strip(oL, 't')
oX = m.m.lineX
oL = m.m.src
end
end
call out left(oL, m.m.pos)
/* call jClose sc
*/ return 1
endProcedure scanUtilInto
/* copy scanUtil end **************************************************/
/* copy pipe begin *****************************************************
***********************************************************************/
pipeIni: procedure expose m.
if m.pipe.ini == 1 then
return
m.pipe.ini = 1
call catIni
call mapReset env.vars
m.env.with.0 = 0
call mapReset env.c2w
call mNewArea 'ENV.WICO', '='
m.pipe.0 = 1
m.pipe.1.in = jOpen(oNew('JRWEof'), '<')
m.pipe.1.out = jOpen(oNew('JSay'), '>')
call pipe '+'
return
endProcedure pipeIni
/*-------------------------------
+- push pop frame
PYNFA ouput Parent saY Newcat File, Appendtofile
psf| parent string file oldOut
old --> new
pipeBegin --> pipe '+N'
pipeBeLa f --> pipe '+F'
pipeLast --> pipe 'P|'
pipeLast f --> pipe 'F|', f
pipeEnd --> pipe '-'
--------------------------------*/
pipe: procedure expose m.
parse arg opts, aO, aI
ox = 1; oc = substr(opts, ox, 1)
ax = m.pipe.0
px = ax -1
if oc == '-' then do
if px < 2 then
call err 'pipe pop empty'
call jClose m.pipe.ax.out
call jClose m.pipe.ax.in
ax = px
m.pipe.0 = ax
px = ax-1
ox = ox+1; oc = substr(opts, ox, 1)
end
if oc == '+' then do
px = ax
ax = ax+ 1
m.pipe.0 = ax
m.pipe.ax.in = jOpen(m.pipe.px.in, '<')
m.pipe.ax.out = jOpen(m.pipe.px.out, '>')
ox = ox+1; oc = substr(opts, ox, 1)
end
oOut = m.pipe.ax.out
if pos(oc, 'NYPFA') > 0 then do
call jClose oOut
if oc == 'Y' then
m.pipe.ax.out = jOpen(m.pipe.1.out, '>')
else if oc == 'P' then
m.pipe.ax.out = jOpen(m.pipe.px.out, '>')
else if oc == 'N' then
m.pipe.ax.out = jOpen(Cat(), '>')
else if oc == 'F' then
m.pipe.ax.out = jOpen(o2file(aO), '>')
else if oc == 'A' then
m.pipe.ax.out = jOpen(o2file(aO), '>>')
ox = ox+1; oc = substr(opts, ox, 1)
end
if pos(oc, 's|fp') > 0 then do
call jClose m.pipe.ax.in
if oc == 'p' then
m.pipe.ax.in = jOpen(m.pipe.px.in, '<')
else if oc == '|' then
m.pipe.ax.in = jOpen(oOut, '<')
else if oc == 'f' then do
if arg() <= 3 then
m.pipe.ax.in = jOpen(o2file(aI), '<')
else do
ct = jOpen(Cat(), '>')
do lx = 3 to arg()
call jWriteAll ct, arg(lx)
end
m.pipe.ax.in = jOpen(jclose(ct), '<')
end
end
else if arg() <= 3 then
m.pipe.ax.in = jOpen(jBuf(aI), '<')
else do
bu = jOpen(jBuf(), '>')
do lx = 3 to arg()
call jWrite bu, arg(lx)
end
m.pipe.ax.in = jOpen(jclose(bu), '<')
end
ox = ox+1; oc = substr(opts, ox, 1)
end
if oc \== ' ' then
call err 'implement' substr(opts, ox) 'in pipe' opts
m.j.in = m.pipe.ax.in
m.j.out = m.pipe.ax.out
return
endProcedure pipe
/*--- write all from rdr (rsp in) to out, not lazy ----------------*/
pipeWriteNow: procedure expose m.
parse arg rdr
call jWriteNow m.j.out, if(rdr == '', m.j.in, rdr)
return
endProcedure pipeWriteNow
/*--- write all from rdr (rsp in) to out, possibly lazy -----------*/
pipeWriteAll: procedure expose m.
parse arg rdr
call jWriteAll m.j.out, if(rdr == '', m.j.in, rdr)
return
endProcedure pipeWriteAll
pipePreSuf: procedure expose m.
parse arg le, ri
do while in(v)
call out le || m.v || ri
end
return
endProcedure pipePreSuf
envIsDefined: procedure expose m.
parse arg na
return '' \== mapValAdr(env.vars, na)
endProcedure envIsDefined
envPushWith: procedure expose m.
parse arg obj, cl, fn, elCl
tos = m.env.with.0 + 1
m.env.with.0 = tos
m.env.with.tos.fun = fn
m.env.with.tos.muElCl = ''
if fn == '' then do
call envSetWith obj, cl
return
end
if cl == '' then
cl = objClass(obj)
if fn == 'as1' then do
call envSetWith obj, cl
m.env.with.tos.muElRef = m.cl.valueCl \== '',
& m.cl.valueCl \== m.class.classV
if m.env.with.tos.muElRef then
m.env.with.tos.muElCl = m.cl.valueCl
else
m.env.with.tos.muElCl = cl
return
end
else if fn \== 'asM' then
call err 'bad fun' fn
ff = oClaMet(cl, 'oFlds') /*just be sure it's initialised */
if m.cl.stemCl == '' then
call err 'class' className(cl) 'not stem'
cc = m.cl.stemCl
isRef = m.cc == 'r'
m.env.with.tos.muElRef = isRef
if m.cc \== 'r' then
m.env.with.tos.muElCl = cc
else if elCl \== '' then
m.env.with.tos.muElCl = elCl
else if m.cc.class == '' then
call err 'elCl null for envPushWith('obj ','cl ','multi', ...)'
else
m.env.with.tos.muElCl = m.cc.class
m.env.with.tos.class = ''
m.env.with.tos.muCla = cl
m.env.with.tos.muObj = obj
return
endProcedure envPushWith
envSetWith: procedure expose m.
parse arg obj, cl
if cl == '' & obj \== '' then
cl = objClass(obj)
tos = m.env.with.0
m.env.with.tos = obj
m.env.with.tos.class = cl
return
endProcedure envSetWith
envWithObj: procedure expose m.
tos = m.env.with.0
if tos < 1 then
call err 'no with in envWithObj'
return m.env.with.tos
endProcedure envWithObj
envAccPath: procedure expose m. m cl
parse arg pa, stop, nllNw
nullNew = nllNw == 1
dx = verify(pa, m.class.cPath, 'm')
if dx = 0 then do
n1 = pa
p2 = ''
end
else do
n1 = left(pa, dx-1)
p2 = substr(pa, dx)
end
wCla = ''
do wx = m.env.with.0 by -1 to if(stop==1, m.env.with.0, 1)
wCla = m.env.with.wx.class
if symbol('m.wCla.f2c.n1') == 'VAR' then
return oAccPath(m.env.with.wx, pa, m.env.with.wx.class)
end
if stop == 1 then
return 'no field' n1 'in class' className(wCla)
vv = mapValAdr(env.vars, n1)
if vv \== '' then
if p2 == '' then
return oAccPath(vv, '', m.class.classR)
else
return oAccPath(vv, '|'p2, m.class.classR)
else if nullNew & p2 == '' then
return oAccPath(mapValAdr(env.vars, n1,'a'), p2,m.class.classR)
else
return 'undefined variable' pa
endProcedure envAccPath
envWithNext: procedure expose m.
parse arg beEn, defCl, obj
tos = m.env.with.0
if tos < 1 then
call err 'envWithNext with.0' tos
st = m.env.with.tos.muObj
if beEn == 'b' then do
if m.env.with.tos.fun == 'asM' then
m.st.0 = 0
if m.env.with.tos.muElCl == '' then
m.env.with.tos.muElCl = defCl
end
else if m.env.with.tos.fun == 'asM' then
m.st.0 = m.st.0 + 1
else if m.env.with.tos.fun == '' then
call outO m.env.with.tos
else if beEn = '' then
call err 'no multi allowed'
if beEn == 'e' then
return
if m.env.with.tos.fun == 'as1' then do
if m.env.with.tos == '' then
call err 'implement withNext null'
return
end
/* if obj \== '' then do
if \ m.env.with.tos.muElRef then
call err 'obj but not ref'
m.nn = obj
call envSetWith obj
end
*/
if m.env.with.tos.fun == '' then do
call envSetWith oNew(m.env.with.tos.muElCl)
return
end
nn = st'.' || (m.st.0 + 1)
if m.env.with.tos.muElRef then do
m.nn = oNew(m.env.with.tos.muElCl)
call envSetWith m.nn
end
else do
call oClear oMutate(nn, m.env.with.tos.muElCl)
call envSetWith nn
end
return
endProcedure envWithNext
envPushName: procedure expose m.
parse arg nm, multi, elCl
res = envAccPath(nm, , 1)
if res \== 1 then
return err(res 'in envPushName('nm',' multi')')
do while m.cl == 'r'
if m.m == '' then do
res = oRefSetNew(m, cl)
if res \== 1 then
call err res 'in envPushName('nm',' multi')'
end
m = m.m
cl = objClass(m)
end
call envPushWith m, cl, multi, elCl
return
endProcedure envPushName
envNewWiCo: procedure expose m.
parse arg co, cl
k1 = strip(co cl)
n = mapGet('ENV.C2W', k1, '')
if n \== '' then
return n
k2 = k1
if co \== '' then do
k2 = strip(m.co.classes cl)
n = mapGet('ENV.C2W', k2, '')
end
k3 = k2
if n == '' then do
cx = wordPos(cl, m.co.classes)
if cx > 0 then do
k3 = space(subWord(m.co.classes, 1, cx-1),
subWord(m.co.classes, cx+1) cl, 1)
n = mapGet('ENV.C2W', k3, '')
end
end
if n == '' then
n = envNewWico2(co, k3)
call mapAdd 'ENV.C2W', k1, n
if k2 \== k1 then
call mapPut 'ENV.C2W', k2, n
if k3 \== k2 & k3 \== k1 then
call mapPut 'ENV.C2W', k3, n
return n
endProcedure envNewWiCo
envNewWiCo2: procedure expose m.
parse arg co, clLi
n = mNew('ENV.WICO')
if co == '' then
m.n.level = 1
else
m.n.level = m.co.level + 1
m.n.classes = clLi
na = ''
do cx = 1 to words(clLi)
c1 = word(clLi, cx)
na = na className(c1)
do qx=1 to 2
ff = c1 || word('.FLDS .STMS', qx)
do fx = 1 to m.ff.0
fn = m.ff.fx
if fn == '' then
iterate
fn = substr(fn, 2)
m.n.f2c.fn = cx
end
end
end
m.n.classNames = space(na, 1)
return n
endProcedure envNewWiCo2
envPopWith:procedure expose m.
tos = m.env.with.0
m.env.with.0 = tos - 1
return
endProcedure envPopWith
envGet: procedure expose m.
parse arg na
res = envAccPath(na)
if res == 1 then
res = oAccStr(m, cl)
if res == 1 then
return str
return err(res 'in envGet('na')')
endProcedure envGet
envGetO: procedure expose m.
parse arg na, opt
res = envAccPath(na, , opt == '-b')
if res == 1 then
res = oAccO(m, cl, opt)
if res == 1 then
return ref
return err(res 'in envGetO('na')')
endProcedure envGetO
envPutO: procedure expose m.
parse arg na, ref, stop
res = envAccPath(na, stop, 1)
if res == 1 then
res = ocPutO(m, cl, ref)
if res = 1 then
return ref
return err(res 'in envPutO('na',' ref',' stop')')
endProcedure envPutO
envPut: procedure expose m.
parse arg na, va, stop
res = envAccPath(na, stop , 1)
if res == 1 then
res = ocPut(m, cl, va)
if res == 1 then
return va
return err(res 'in EnvPut('na',' va',' stop')')
endProcedure envPut
envRead: procedure expose m.
parse arg na
return in("ENV.VARS."na)
envReadO: procedure expose m.
parse arg na
res = inO()
if res == '' then
return 0
call envPutO na, res
return 1
endProcedure envReadO
envHasKey: procedure expose m.
parse arg na
return mapHasKey(env.vars, na)
envRemove: procedure expose m.
parse arg na
return mapRemove(env.vars, na)
/* copy pipe end ******************************************************/
/* copy cat begin ****************************************************
***********************************************************************/
/*--- create a new cat -----------------------------------------------*/
cat: procedure expose m.
m = oNew('Cat') /* calls catReset */
do ax=1 to arg()
call catWriteAll m, arg(ax)
end
return m
endProcedure cat
catReset: procedure expose m.
parse arg m
m.m.RWs.0 = 0
m.m.catWr = ''
m.m.catRd = ''
m.m.catIx = -9e9
m.m.catKeepOpen = ''
return m
endProcedure catReset
catClose: procedure expose m.
parse arg m
if m.m.catWr \== '' then do
call jClose m.m.catWr
call mAdd m'.RWS', m.m.catWr
m.m.catWr = ''
end
if m.m.catRd \== '' then do
call jClose m.m.catRd
m.m.catRd = ''
end
m.m.catIx = -9e9
return m
endProcedure catClose
catOpen: procedure expose m.
parse arg m, oo
if oo == m.j.cRead then do
m.m.catIx = 0
call catNextRdr m
m.m.jReading = 1
end
else if oo == m.j.cWri | oo == m.j.cApp then do
if oo == m.j.cWri then
m.m.RWs.0 = 0
m.m.catIx = -9e9
m.m.jWriting = 1
end
else do
call err 'catOpen('m',' oo') bad opt'
end
return m
endProcedure catOpen
/*--- return and open next reader ------------------------------------*/
catNextRdr: procedure expose m.
parse arg m
if m.m.catRd \== '' then
call jClose m.m.catRd
cx = m.m.catIx + 1
m.m.catIx = cx
if cx > m.m.RWs.0 then do
m.m.catRd = ''
return 0
end
m.m.catRd = m.m.RWs.cx
if cx = word(m.m.catKeepOpen, 1) then
m.m.catKeepOpen = subWord(m.catKeepOpen, 2)
else
call jOpen m.m.catRd , m.j.cRead
return 1
endProcedure catNextRdr
catReadO: procedure expose m.
parse arg m
do while m.m.catRd \== ''
res = jReadO(m.m.catRd)
if res \== '' then
return res
call catNextRdr m
end
return ''
endProcedure catReadO
catWrite: procedure expose m.
parse arg m, line
if m.m.catWr == '' then
m.m.catWr = jOpen(jBuf(), m.j.cWri)
call jWrite m.m.catWr, line
return
endProcedure catWrite
catWriteO: procedure expose m.
parse arg m, var
if m.m.catWr == '' then
m.m.catWr = jOpen(jBuf(), m.j.cWri)
call jWriteO m.m.catWr, var
return
endProcedure catWriteO
/*--- write contents of a reader to cat
or keep it for later reading -------------------------------*/
catWriteAll: procedure expose m.
parse arg m
if m.m.catWr \== '' then do
call mAdd m'.RWS', jClose(m.m.catWr)
m.m.catWr = ''
end
do ax=2 by 1 to arg()
r = o2File(arg(ax))
call mAdd m'.RWS', r
if m.r.jReading then do
m.m.catKeepOpen = m.m.rws.0 m.m.catKeepOpen
call jOpen r, m.j.cRead
end
end
return
endProcedure catWriteAll
/*--- create a reader/WriteO for an external file --------------------*/
file: procedure expose m.
parse arg str
return oNew('File', str)
endProcedure file
fileChild: procedure expose m.
parse arg m, name, opt
interpret objMet(m, 'fileChild')
endProcedure fileChild
fileRm: procedure expose m.
parse arg m
interpret objMet(m, 'fileRm')
return
endProcedure fileRm
filePath: procedure expose m.
parse arg m
interpret objMet(m, 'filePath')
endProcedure filePath
fileIsFile: procedure expose m.
parse arg m
interpret objMet(m, 'fileIsFile')
endProcedure fileIsFile
fileIsDir: procedure expose m.
parse arg m
interpret objMet(m, 'fileIsDir')
endProcedure fileIsDir
fileMkDir: procedure expose m.
parse arg m, opt
interpret objMet(m, 'fileMkDir')
return
endProcedure fileRm
fileRmDir: procedure expose m.
parse arg m, opt
interpret objMet(m, 'fileRmDir')
return
endProcedure fileRm
/*--- create a reader/WriteO for the filelist of a directory----------*/
fileList: procedure expose m.
parse arg m, opt
str = oIfStr(m, '')
if str == '' then
return oNew('FileList', filePath(m), opt)
else
return oNew('FileList', dsn2Jcl(str), opt)
endProcedure fileList
fileSingle: procedure expose m.
parse arg m
call jOpen m, '<'
res = jReadO(m)
two = jReadO(m)
call jClose m
if res == '' then
if arg() < 2 then
call err 'empty file in fileSingle('m')'
else
res = arg(2)
if two \== '' then
call err '2 or more recs in fileSingle('m')'
return res
endProcedure fileSingle
catIni: procedure expose m.
if m.cat.ini == 1 then
return
m.cat.ini = 1
call jIni
call classNew "n Cat u JRWO", "m",
, "jOpen call catOpen m, opt",
, "jReset call catReset m, arg",
, "jClose call catClose m",
, "jReadO return catReadO(m)",
, "jWrite call catWrite m, line; return",
, "jWriteO call catWriteO m, var; return",
, "jWriteAll call catWriteAll m, rdr; return"
call classAddMet m.class.classV, 'o2File return file(m.m)'
call classAddMet m.class.classW, 'o2File return file(substr(m,2))'
if m.err.os == 'TSO' then
call fileTsoIni
else if m.err.os == 'LINUX' then
call fileLinuxIni
else
call err 'file not implemented for os' m.err.os
return
endProcedure catIni
/* copy cat end ****************************************************/
/* copy fiLinux begin *************************************************/
/*--- send ggShCmd to shell bash,
fail if rc <> 0 or not listed in ggRet -----------------------*/
adrSh: procedure expose m. /* really no need for variables???? */
parse arg ggShCmd, ggRet
address 'bash' ggShCmd
if rc == 0 then return 0
else if ggRet == '*' then return rc
else if wordPos(rc, ggRet) > 0 then return rc
else
call err 'adrSh rc' rc 'for' ggShCmd
endProcedure adrSh
fileLinuxReset: procedure expose m.
parse arg m, nm
m.m.spec = nm
if abbrev(nm, '&') then do
if nm == '&in' then do
m.m.stream = .input
m.m.jReading = 1
end
else if nm == '&out' then do
m.m.stream = .output
m.m.jWriting = 1
end
else do
call err 'bad spec' nm
end
end
else do
m.m.stream = .Stream%%new(nm)
m.m.stream%%init(m.m.stream%%qualify)
end
return m
endProcedure fileLinuxReset
fileLinuxOpen: procedure expose m.
parse arg m, opt
if opt == m.j.cRead then do
res = m.m.stream%%open(read shareread)
m.m.jReading = 1
end
else do
if opt == m.j.cApp then
res = m.m.stream%%open(write append)
else if opt == m.j.cWri then
res = m.m.stream%%open(write replace)
else
call err 'fileLinuxOpen('m',' opt') with bad opt'
m.m.jWriting = 1
end
if res \== 'READY:' then
call err 'fileLinuxOpen fails' res':' opt ,
"'"m.m.stream%%qualify"'"
return m
endProcedure fileLinuxOpen
fileLinuxClose:
parse arg m
res = m.m.stream%%close
if res \== 'READY:' then
call err 'fileLinuxClose' res':' m.m.stream%%qualify
return m
endProcedure fileLinuxClose
fileLinuxRead: procedure expose m.
parse arg m, var
res = m.m.stream%%lineIn
if res == '' then
if m.m.stream%%state \== 'READY' then
return 0
m.var = res
m.o.o2c.var = m.class.classV
return 1
endProcedure fileLinuxRead
fileLinuxWrite: procedure expose m.
parse arg m, line
if m.m.stream%%lineOut(line) then
call err 'fileLinuxWrite'
return
endProcedure fileLinuxWrite
fileLinuxRmDir: procedure expose m.
parse arg m, opt
if opt == '' then
return adrSh('rmdir' m.m.spec)
else if opt == '-r' then
return adrSh('rm -r' m.m.spec)
else
call err 'bad opt' opt 'in fileLinuxRmDir'
endProcedure fileLInuxRmDir
fileLinuxListReset: procedure expose m.
parse arg m, m.m.spec, o
if o == 'r' then
m.m.opt = 'S'
else if o == '' then
m.m.opt = ''
else
call err 'bad opt' o 'in fileLinuxListReset'
m.m.rx = 'closed'
return m
endProcedure fileLinuxListReset
fileLinuxListOpen: procedure expose m.
parse arg m
if m \== translate(m) then
call err 'bad m for fileLinuxList:' m
if m.m.opt == '' then
rc = sysFileTree(m.m.spec'/*', 'm.'m'.LIST')
else
rc = sysFileTree(m.m.spec'/*', 'm.'m'.LIST', m.m.opt)
if rc \== 0 then
call err 'rc' rc 'in sysFileTree('m.m.spec', m.'m'.LIST)'
m.m.rx = 0
m.m.jReading = 1
return m
endProcedure fileLinuxListOpen
fileLinuxListRead: procedure expose m.
parse arg m, var
x = m.m.rx + 1
if x > m.m.list.0 then
return 0
m.var = substr(m.m.list.x, 43)
m.m.rx = x
call oMutate var, m.class.classV
return 1
endProcedure fileLinuxListRead
fileLinuxIni: procedure expose m.
if m.fileLinux.ini == 1 then
return
m.fileLinux.ini = 1
m.file.sep = '/'
call jIni
call classNew "n File u JRW", "m",
, "jReset call fileLinuxReset m, arg",
, "jOpen call fileLinuxOpen m, opt",
, "jClose call fileLinuxClose m",
, "jRead return fileLinuxRead(m, var)",
, "jWrite call fileLinuxWrite m, line",
, "jWriteO call jWrite m, o2String(var)",
, "filePath return m.m.stream%%qualify",
, "fileIsFile return sysIsFile(m.m.stream%%qualify)" ,
, "fileIsDir return sysIsFileDirectory(m.m.stream%%qualify)" ,
, "fileChild return file(m.m.stream%%qualify'/'name)",
, "fileRm return adrSh(m.m.spec)",
, "fileMkDir return adrSh('mkdir' m.m.stream%%qualify)" ,
, "fileRmDir return fileLinuxRmDir(m, opt)"
call classNew "n FileList u JRW", "m",
, "jReset call fileLinuxListReset m, arg, arg2",
, "jOpen call fileLinuxListOpen m, opt",
, "jClose m.m.rx = 'closed'",
, "jRead return fileLinuxListRead(m, var)"
return
endProcedure fileLinuxIni
/* copy fiLinux end *************************************************/
/* copy fileTso begin *************************************************/
fileTsoReset: procedure expose m.
parse arg m, sp
m.m.readIx = 'c'
if symbol('m.m.defDD') \== 'VAR' then do
m.m.defDD = 'CAT*'
m.fileTso.buf = m.fileTso.buf + 1
m.m.buf = 'FILETSO.BUF'm.fileTso.buf
m.m.spec = sp
end
if sp \== '' then do
m.m.spec = dsnSpec(sp)
rr = translate(subword(m.m.spec, 4))
m.m.stripT = \ (pos(':V', rr) > 0 | pos('RECFM(V', rr) > 0)
end
return m
endProcedure fileTsoReset
fileTsoOpen: procedure expose m.
parse arg m, opt
buf = m.m.buf
if opt == m.j.cRead then do
aa = dsnAlloc(m.m.spec, 'SHR', m.m.defDD)
if m.dsnAlloc.dsn <> '' then
if sysDsn("'"m.dsnAlloc.dsn"'") <> 'OK' then
call err 'cannot read' m.dsnAlloc.dsn':',
sysDsn("'"m.dsnAlloc.dsn"'")
call tsoOpen word(aa, 1), 'R'
m.m.jReading = 1
m.buf.0 = -1
m.m.readIx = 0
end
else do
if opt == m.j.cApp then
aa = dsnAlloc(m.m.spec, 'MOD', m.m.defDD)
else if opt == m.j.cWri then
aa = dsnAlloc(m.m.spec, 'OLD', m.m.defDD)
else
call err 'fileTsoOpen('m',' opt') with bad opt'
call tsoOpen word(aa, 1), 'W'
m.m.jWriting = 1
m.buf.0 = 0
m.m.readIx = 'w'
end
parse var aa m.m.dd m.m.free
m.m.dsn = m.dsnAlloc.dsn
return m
endProcedure fileTsoOpen
fileTsoClose: procedure expose m.
parse arg m
buf = m.m.buf
if m.m.readIx \== 'c' then do
if m.m.readIx == 'w' & m.buf.0 > 0 then
call writeDD m.m.dd, 'M.'BUF'.'
call tsoClose m.m.dd
call tsoFree m.m.free
end
m.buf.0 = 'closed'
m.m.readIx = 'c'
m.m.free = ''
m.m.dd = ''
return m
endProcedure fileTsoClose
fileTsoRead: procedure expose m.
parse arg m, var
ix = m.m.readIx + 1
buf = m.m.buf
if ix > m.buf.0 then do
res = readDD(m.m.dd, 'M.'buf'.')
if \ res then
return 0
ix = 1
end
m.m.readIx = ix
m.var = m.buf.ix
call oMutate var, m.class.classV
return 1
endProcedure fileTsoRead
fileTsoWrite: procedure expose m.
parse arg m, var
buf = m.m.buf
ix = m.buf.0 + 1
m.buf.0 = ix
if m.m.stripT then
m.buf.ix = strip(var, 't')
else
m.buf.ix = var
if ix > 99 then do
call writeDD m.m.dd, 'M.'buf'.'
m.buf.0 = 0
end
return
endProcedure fileTsoWrite
fileTsoWriteO: procedure expose m.
parse arg m, var
if objClass(var, m.class.classV) == m.class.classV then do
call fileTsoWrite m, m.var
return
end
call err 'fileTsoWriteO('m',' var') cannot write objects of class',
objClass(var)
endProcedure fileTsoWriteO
fSub: procedure expose m.
return file('.sysout(T) writer(intRdr)')
endProcedure fSub
fEdit: procedure expose m.
parse arg spec, vw
if spec == '' then
spec = 'new ::f'
else if abbrev(spec, '::') then
spec = 'new' spec
else if abbrev(spec, ':') then
spec = 'new' ':'spec
f = oNew('FileEdit', spec)
m.f.editType = if(abbrev(translate(vw), 'V'), 'view', 'edit')
return f
endProcedure fEdit
fileTsoEditClose: procedure expose m.
parse arg m
dsn = m.m.dsn
if dsn \== '' then do
call fileTsoClose m
call adrIsp m.m.editType "dataset('"dsn"')", 4
return
end
fr = m.m.free
dd = m.m.dd
m.m.free = ''
call fileTsoClose m
call adrIsp "LMINIT DATAID(lmmId) ddName("dd") ENQ(SHRW)"
eRc = adrIsp(m.m.editType "dataid("lmmId")", '*')
lRc = adrIsp("LMFree DATAID("lmmId")", '*')
interpret fr
if (eRc \== 0 & eRc \== 4) | lRc \== 0 then
call err m.m.editType 'rc' eRc', lmFree rc' lRc
return
endProcedure fileTsoEditClose
fileTsoIni: procedure expose m.
if m.fileTso.ini == 1 then
return
m.fileTso.ini = 1
m.file.sep = '.'
m.fileTso.buf = 0
call jIni
um = "call err 'for tso undefined method'"
call classNew "n File u JRW", "m",
, "jOpen call fileTsoOpen m, opt",
, "jReset call fileTsoReset m, arg",
, "jClose call fileTsoClose m",
, "jRead return fileTsoRead(m, var)",
, "jWrite call fileTsoWrite m, line",
, "jWriteO call fileTsoWriteO m, var",
, "filePath return word(m.m.spec, 1)" ,
, "fileIsFile" um "'fileIsFile'" ,
, "fileIsDir return 1" ,
, "fileChild return file(word(m.m.spec, 1)'.'name opt)",
, "fileRm" um "'fileRm'" ,
, "fileMkDir" ,
, "fileRmDir" um "'fileRmDir'"
/* , "filePath return m.m.stream%%qualify",
, "fileIsFile return sysIsFile(m.m.stream%%qualify)" ,
, "fileIsDir return sysIsFileDirectory(m.m.stream%%qualify)" ,
, "fileChild return file(m.m.stream%%qualify'/'name)",
, "fileRm return adrSh(m.m.spec)",
, "fileMkDir return adrSh('mkdir' m.m.stream%%qualify)" ,
, "fileRmDir return fileLinuxRmDir(m, opt)" */
call classNew "n FileList u JRW", "m",
, "jReset if arg2 == 'r' then m.m.dsnMask=arg'.**';",
"else m.m.dsnMask=arg'.*';",
, "jOpen call csiOpen m, m.m.dsnMask",
, "jClose" ,
, "jRead return csiNext(m, var)"
call classNew "n FileEdit u File", "m",
, "jClose call fileTsoEditClose m"
return
endProcedure fileTsoIni
/* copy fileTso end *************************************************/
/* copy sqlDiv begin **************************************************/
/*--- generate the format m for a sql cx as specified in sp
use the information from the sqlDa -------------------------*/
sqlFTabReset: procedure expose m.
parse arg ff, cx, tBef, tAft, m.ff.maxChar, m.ff.blobMax, m.ff.maxDec
if m.ff.maxChar == '' then
m.ff.maxChar == 32
if m.ff.blobMax == '' then
m.ff.blobMax = 200
bf = '%-'max(m.ff.blobMax, 4)'C'
m.ff.flds = ''
m.ff.sqlX = cx
call fTabReset ff, tBef, tAft
m.ff.sql2fmt.384 = '%-10C' /* date */
m.ff.sql2fmt.388 = '%-8C' /* time */
m.ff.sql2fmt.392 = '%-26C' /* timestamp */
m.ff.sql2fmt.400 = 'c' /* graphic string */
m.ff.sql2fmt.404 = bf /* BLOB */
m.ff.sql2fmt.408 = bf /* CLOB */
m.ff.sql2fmt.412 = bf /* DBCLOB */
m.ff.sql2fmt.448 = 'c' /* varchar */
m.ff.sql2fmt.452 = 'c' /* char */
m.ff.sql2fmt.452 = 'c' /* long varchar */
m.ff.sql2fmt.460 = 'c' /* null term. string */
m.ff.sql2fmt.464 = 'c' /* graphic varchar */
m.ff.sql2fmt.468 = 'c' /* graphic char */
m.ff.sql2fmt.472 = 'c' /* long graphic varchar */
m.ff.sql2fmt.480 = '%7e' /* float */
m.ff.sql2fmt.484 = 'd' /* packed decimal */
m.ff.sql2fmt.492 = '%20i' /* bigInt */
m.ff.sql2fmt.496 = '%11i' /* int */
m.ff.sql2fmt.500 = '%6i' /* smallInt */
m.ff.sql2fmt.904 = '%-34H' /* rowID 17 Byte Binary */
return
endProcedure sqlFTabReset
/*--- set a defaultFormat for type tx in fTab ff ---------------------*/
sqlFTabDef: procedure expose m.
parse arg ff, tx, m.ff.sql2fmt.tx
return ff
sqlFTabAdd: procedure expose m.
parse arg m, c1 aDone, f1, l1
if symbol('m.m.set.c1') == 'VAR' then do
sx = m.m.set.c1
if word(m.m.set.sx, 1) == c1 & sx <= m.m.set.0 then do
parse var m.m.set.sx c1 aDone
f1 = m.m.set.sx.fmt
l1 = m.m.set.sx.label
end
end
cx = m.m.sqlX
kx = sqlCol2kx(cx, c1)
if kx == '' then
call err 'colName not found' c1
do tx=2 to arg()-3
if arg(tx+3) \== '' then
call fTabAddTit m, tx, arg(tx+3)
end
if f1 \== '' then do
if right(f1, 1) \== ' ' then
f1 = f1' '
return fTabAdd(m, c1 aDone, f1, l1)
end
ty = m.sql.cx.d.kx.sqlType
le = m.sql.cx.d.kx.sqlLen
withNulls = ty // 2
ty = ty - withNulls
if symbol('m.m.sql2fmt.ty') <> 'VAR' then
call err 'sqlType' ty 'col' c1 'not supported'
f2 = m.m.sql2fmt.ty
if f2 == 'c' then
f2 = '%-'min(le, m.m.maxChar)'C'
else if f2 == 'd' then do
trace ?r
pr = le % 256
de = le // 256
f2 = '%'pr'.'de'i'
end
if \ abbrev(f2, '%') then
call err 'sqlType' ty 'col' c1 'bad format' f2
return fTabAdd(m, c1 aDone, f2' ', l1)
endProcedure sqlFTabAdd
sqlFTabOthers: procedure expose m.
parse arg m, doNot
cx = m.m.sqlX
call sqlRxFetchVars cx
do kx=1 to m.sql.cx.d.sqlD
c1 = m.sql.cx.col.kx
wx = wordPos(c1, m.m.cols)
if (wx < 1 | m.m.wx.done \== 1) & wordPos(c1, doNot) < 1 then
call sqlFTabAdd m, m.sql.cx.col.kx
end
return
endProcedure sqlFTabOthers
sqlFTab: procedure expose m.
parse arg m
call fTabBegin m
do while sqlRxFetch(m.m.sqlX, 'sqlFTab')
call out f(m.m.fmt, 'sqlFTab')
end
return fTabEnd(m)
endProcedure sqlFTab
sqlFTabCol: procedure expose m.
parse arg m
do rx=1 while sqlRxFetch(m.m.sqlX, 'sqlFTab')
call out left('--- row' rx '', 100, '-')
call fTabCol m, 'sqlFTab'
end
call out left('--- end of' (rx-1) 'rows ', 100, '-')
return
endProcedure sqlFTabCol
/*--- generate the format ff for a sql cx as specified in sp
use the information from the sqlDa -------------------------*/
deleteSqlGenFmt: procedure expose m.
parse arg ff, cx, sp
if abbrev(sp, '=') then
return substr(sp, 2)
if sp = '' then
sp = '*st'
m.ff.0 = m.sql.cx.d.sqlD
m.ff.flds = oFlds(sqlType(cx))
if abbrev(sp, '*') then do
do ix=1 to m.ff.0
m.ff.ix = substr(sp, 2)
end
return ff
end
if abbrev(fmts, '=') then
m.Sql.cx.FMT = substr(fmts, 2)
defs = 'ir7 fr9 sl12 Tl26' sp
do wx = 1 to words(defs)
parse value word(defs, wx) with ty 2 fo
select
when ty = 'd' then t.384 = fo
when ty = 'f' then t.480 = fo'/f'
when ty = 'i' then t.496 = fo'/i'
when ty = 'n' then t.484 = fo'/n'
when ty = 's' then t.448 = fo
when ty = 't' then t.388 = fo
when ty = 'T' then t.392 = fo
otherwise call err 'bad type' ty 'for format' fo
end
end
if symbol('t.496') == 'VAR' then
t.500 = t.496
if symbol('t.448') == 'VAR' then do
t.452 = t.448
t.456 = t.448
t.464 = t.448
end
do wx = 1 to m.ff.0
ty = m.sql.cx.d.wx.sqlType
le = m.sql.cx.d.wx.sqlLen
withNulls = ty // 2
ty = ty - withNulls
if symbol('t.ty') <> 'VAR' then
call err 'sqlType' ty 'not supported'
parse var t.ty fo 2 fl '/' op
if op = 'i' then
if le = 2 then le = 6
else le = 12
else if op <> '' then
call err 'length for sqlType' ty 'op' op 'not implemented'
if fl = '=' then
fl = le
else if abbrev(fl, '<') then
fl = min(le, substr(fl, 2))
m.ff.wx = fo || fl
end
return ff
endProcedure sqlGenFmt
tstCatTb:
/*
$=/tstCatTb/
### start tst tstCatTb ############################################
..
select * from sysibm.SYSDUMMY1 .
IBMREQD
I .
Y .
I .
IBMREQD
$/tstCatTb/
*/
call sqlConnect
call tst t, 'tstCatTb'
call sqlCatTb 'sysDummy1'
call sqlCatTb 'SYSTableSpaceStats',
, "name = 'A403A1' and dbName = 'DA540769'"
call tstEnd t
return
endProcedure tstCatTb
sqlCatTb: procedure expose m.
parse arg ty gOnly, wh, ord, fTab, paPlus
tb = tkrTable(, ty)
if gOnly == 1 then
edFun = ''
else
edFun = tkrTable(, ty, 'e')
cx = 1
ft = 'ft'm.tb.alias
call sqlFTabReset ft, cx, 'c 1', '1 c', 12, if(fTab, , 2000)
call sqlFTabDef ft, 492, '%7e'
call FTabSet ft, 'CONTOKEN' , '%-16H'
call FTabSet ft, 'DBNAME' , '%-8C', 'db'
call FTabSet ft, 'DSNAME' , '%-44C'
call FTabSet ft, 'DSNUM' , '%5i'
call FTabSet ft, 'PARTITION' ,'%5i' , 'part'
call FTabSet ft, 'PIT_RBA' , '%-12H'
call FTabSet ft, 'RBA1' , '%-12H'
call FTabSet ft, 'RBA2' , '%-12H'
call FTabSet ft, 'START_RBA' ,'%-12H'
call FTabSet ft, 'TSNAME' , '%-8C', 'ts'
call FTabSet ft, 'VERSION' , '%-28C'
if edFun \== '' then do
interpret 'sq =' edFun'(ft, tb, wh, ord)'
end
else do
cl = sqlColList(m.tb.table, m.ft.blobMax)
sq = 'select' cl tkrTable( , tb, 'f') wh ,
'order by' if(ord=='', m.tb.order, ord)
call sqlPreOpen cx, sq
call sqlFTabOthers ft
end
if fTab then
call sqlFTab ft
else
call sqlFTabCol ft
call sqlRxClose cx
call sqlCatTbTrailer space(m.TKR.path paPlus, 1), sq
return 0
endProcedure sqlCatTb
sqlCatTbTrailer: procedure expose m.
parse arg pa, sq
ox = lastPos(' order by ', sq)
if ox < 1 then
call err 'order by not found in' sq
ord = substr(sq, ox+10)
sq = left(sq, ox-1)
sqUp = translate(sq)
call out ''
call out 'dbSys:' m.sql.conDbSys
call out 'path:' pa
int = ''
iNx = ' '
br = ''
cx = 1
stops = '(select from where'
do while cx < length(sq)
nx = -1
do sx=1 to words(stops)
n2 = pos(word(stops, sx), sq, cx+1)
if n2 > cx & (nx < 1 | n2 < nx) then
nx = n2
end
if nx < 0 then
leave
call out int || substr(sq, cx, nx-cx)
int = iNx
if substr(sq, nx, 3) = '(se' then do
iNx = iNx' '
br = left(br, length(int))')'
end
cx = nx
end
ll = strip(substr(sq, cx))
bq = strip(br)
do while bq <> ''
if right(bq, 1) \== ')' | right(ll, 1) \== ')' then
call err 'missing ) bq:' bq', ll:' ll
ll = strip(left(ll, length(ll) - 1))
bq = strip(left(bq, length(bq) - 1))
end
call out int || ll
if br <> '' then
call out br
if ord <> '' then
call out ' order by' ord
return
endProcedure sqlCatTbTrailer
sqlCatIxKeys: procedure expose m.
parse arg ft, tb, wh, ord
sq = 'select ikK.colSeq, ikK.colName, ikK.ordering, ikK.period' ,
', ik.creator, ik.name, ik.tbCreator, ik.tbName, ikC.*' ,
tkrTable(, tb ,'f') wh,
'order by' if(ord == '', m.tb.order, ord)
call sqlPreOpen m.ft.sqlX, sq
call sqlFTabAdd ft, CREATOR, '%-8C', 'creator'
call sqlFTabAdd ft, NAME , '%-16C','index'
call sqlFTabAdd ft, colSeq , '%5i', 'coSeq'
call sqlFTabAdd ft, colName, '%-16C', 'column'
call sqlFTabAdd ft, ordering
call sqlFTabAdd ft, period
call sqlFTabAdd ft, COLNO
call sqlFTabAdd ft, COLTYPE
call sqlFTabAdd ft, LENGTH
call sqlFTabAdd ft, SCALE
call sqlFTabAdd ft, NULLS
call sqlFTabOthers ft, 'COL9 COL10 COL11 COL47'
return sq
endProcedure sqlCatIxKeys
sqlCatIXStats: procedure expose m.
parse arg ft, tb, wh, ord
sq = 'select *' tkrTable( , tb, 'f') wh ,
'order by' if(ord == '', m.tb.order, ord)
call sqlPreOpen m.ft.sqlX, sq
call sqlFTabAdd ft, CREATOR, '%-8C', 'creator'
call sqlFTabAdd ft, NAME , , 'index'
call sqlFTabAdd ft, INSTANCE , '%1i' , 'i'
call sqlFTabAdd ft, PARTITION , , 'part'
call sqlFTabOthers ft
return sq
endProcedure sqlCatIXStats
sqlCatTables: procedure expose m.
parse arg ft, tb, wh, ord
al = m.tb.alias
sq = 'select' al'.*, tsX.type tsType, tsX.partitions',
', tsX.pgSize, tsX.dsSize' ,
', timestamp(rba1 || x''0000'') rba1Tst' ,
', timestamp(rba2 || x''0000'') rba2Tst' ,
'from' m.tb.table 'left join sysibm.sysTablespace tsX',
'on' al'.dbName = tsx.dbName and' al'.tsName = tsX.name',
'where' m.tb.cond wh ,
'order by' if(ord == '', m.tb.order, ord)
call sqlPreOpen m.ft.sqlX, sq
call sqlFTabAdd ft, creator , '%-8C', 'creator'
call sqlFTabAdd ft, NAME , '%-16C', 'table'
call sqlFTabAdd ft, type
call sqlFTabAdd ft, dbNAME , '%-8C', 'db'
call sqlFTabAdd ft, tsNAME , '%-8C', 'ts'
call sqlFTabAdd ft, tsType
call sqlFTabAdd ft, partitions, , 'parts'
call sqlFTabAdd ft, pgSize
call sqlFTabAdd ft, dsSize
call sqlFTabOthers ft, 'RBA1 RBA1TST RBA2 RBA2TST'
call sqlFTabAdd ft, rba1 , '%-12H'
call sqlFTabAdd ft, rba1Tst , , 'rba1Timestamp:GMT'
call sqlFTabAdd ft, rba2 , '%-12H'
call sqlFTabAdd ft, rba2Tst , , 'rba2Timestamp:GMT'
return sq
endProcedure sqlCatTables
sqlCatTSStats: procedure expose m.
parse arg ft, tb, wh, ord
sq = 'select' m.tb.alias'.*' ,
tkrTable( , tb, 'f') wh ,
'order by' if(ord == '', m.tb.order , ord)
call sqlPreOpen m.ft.sqlX, sq
call sqlFTabAdd ft, DBNAME, '%-8C', 'db'
call sqlFTabAdd ft, NAME , '%-8C', 'ts'
call sqlFTabAdd ft, INSTANCE , '%1i' , 'i'
call sqlFTabAdd ft, PARTITION , , 'part'
call sqlFTabAdd ft, NACTIVE , , 'nActive'
call sqlFTabAdd ft, NPAGES , , 'nPages'
call sqlFTabAdd ft, SPACE , , 'spaceKB'
call sqlFTabAdd ft, TOTALROWS , , 'totRows'
call sqlFTabAdd ft, DATASIZE , , 'dataSz'
call sqlFTabAdd ft, LOADRLASTTIME , , 'loadRLasttime'
call sqlFTabAdd ft, REORGLASTTIME , , 'reorgLasttime'
call sqlFTabAdd ft, REORGINSERTS , , 'inserts'
call sqlFTabAdd ft, REORGDELETES , , 'deletes'
call sqlFTabAdd ft, REORGUPDATES , , 'updates'
call sqlFTabAdd ft, REORGUNCLUSTINS , , 'unClIns'
call sqlFTabAdd ft, REORGDISORGLOB , , 'disorgL'
call sqlFTabAdd ft, REORGMASSDELETE , , 'massDel'
call sqlFTabAdd ft, REORGNEARINDREF , , 'nearInd'
call sqlFTabAdd ft, REORGFARINDREF , , 'farInd'
call sqlFTabAdd ft, REORGCLUSTERSENS , , 'cluSens'
call sqlFTabAdd ft, REORGSCANACCESS , , 'scanAcc'
call sqlFTabAdd ft, REORGHASHACCESS , , 'hashAcc'
call sqlFTabAdd ft, STATSLASTTIME , , 'statsLasttime'
call sqlFTabAdd ft, STATSINSERTS , , 'inserts'
call sqlFTabAdd ft, STATSDELETES , , 'deletes'
call sqlFTabAdd ft, STATSUPDATES , , 'updates'
call sqlFTabAdd ft, STATSMASSDELETE , , 'massDel'
call sqlFTabAdd ft, COPYLASTTIME , , 'copyLasttime'
call sqlFTabAdd ft, COPYUPDATETIME , , 'copyUpdatetime'
call sqlFTabAdd ft, COPYUPDATELRSN , '%-12H', 'updateLRSN'
call sqlFTabAdd ft, COPYUPDATEDPAGES , , 'updaPgs'
call sqlFTabAdd ft, COPYCHANGES , , 'changes'
call sqlFTabOthers ft
return sq
endProcedure sqlCatTSStats
sql4obj: procedure expose m.
parse arg m, tb
call out 'insert into' tb '--' className(objClass(m))
line = ''
ff = oFlds(m)
pr = ' ('
do fx=1 to m.ff.0
call sql4ObjOut substr(m.ff.fx, 2)
end
call sql4ObjOut , 1
call out ' ) values '
pr = ' ('
do fx=1 to m.ff.0
f1 = substr(m.ff.fx, 2)
v = m.m.f1
if dataType(v, n) then
call sql4ObjOut v
else do qx=1 until v == ''
vx = verify(v, m.ut.alfPrint)
if vx = 0 then do
l1 = min(60, length(v))
w = quote(left(v, l1), "'")
end
else if vx > 29 | vx = 0 then do
l1 = min(60, vx)
w = quote(left(v, l1), "'")
end
else do
l1 = min(29, length(v))
w = 'x'quote(c2x(left(v, l1)), "'")
end
if qx == 1 then
call sql4ObjOut w
else do
if qx = 2 then
call sql4ObjOut , 1
call out ' ||' w
end
v = substr(v, l1+1)
end
end
call sql4ObjOut , 1
call out ' ) ; '
return
endProcedure
sql4objOut:
parse arg t1, force
if (force == 1 & line \== '') | length(line t1) > 65 then do
call out pr substr(line, 3)
pr = ' ,'
line = ''
end
if force \== 1 then
line = line',' t1
return
endProcedure sql4objOut
/* copy sqlDiv end **************************************************/
/* copy db2Cat begin **************************************************/
catTbLastCol: procedure expose m.
parse upper arg cr, tb
return sql2one( ,
"select strip(char(colcount)) || ' ' || strip(c.name) one" ,
"from sysibm.sysTables t left join sysibm.sysColumns c" ,
"on c.tbCreator = t.creator and c.tbName = t.name" ,
"and c.colNo = t.colCount" ,
"where t.creator = '"cr"' and t.name = '"tb"'", ,'')
endProcedure catTbLastCol
catTbCols: procedure expose m.
parse upper arg cr, tb
if sql2St("select strip(name) name " ,
"from sysibm.sysColumns " ,
"where tbcreator = '"cr"' and tbname='"tb"'",
"order by colNo", ggSt) < 1 then
return ''
res = m.ggst.1.name
do cx=2 to m.ggst.0
res = res m.ggst.cx.name
end
return res
endProcedure catTbCols
catTbColsTrunc: procedure expose m.
parse upper arg cr, tb, maxL
if sql2St("select strip(name) name, colType, length, length2" ,
"from sysibm.sysColumns " ,
"where tbcreator = '"cr"' and tbname='"tb"'",
"order by colNo", ggSt) < 1 then
return ''
res = ''
do cx=1 to m.ggst.0
ty = m.ggSt.cx.colType
if pos('LOB', ty) > 0 then
res = res', substr('m.ggSt.cx.name', 1,' ,
min(maxL, m.ggSt.cx.length2)') 'm.ggSt.cx.name
else if pos('CHAR', ty) > 0 & m.ggSt.cx.length > maxL then
res = res', substr('m.ggSt.cx.name', 1,' maxL')',
m.ggSt.cx.name
else
res = res',' m.ggSt.cx.name
end
return substr(res, 3)
endProcedure catTbColsTrunc
catIxKeys: procedure expose m.
parse upper arg cr, ix
sql = "select colSeq, colName, ordering" ,
"from sysibm.sysKeys" ,
"where ixCreator = '"cr"' and ixName = '"ix"'" ,
"order by colSeq"
call sqlPreOpen 1, sql
res = ''
do kx=1 while sqlFetchInto(1, ':sq, :col, :ord')
if sq \= kx then
call err 'expected' kx 'but got colSeq' sq ,
'in index' cr'.'ix'.'col
res = res || strip(col) || translate(ord, '<>?', 'ADR')
end
call sqlClose 1
return res
endProcedure catIxKeys
catColCom: procedure expose m.
parse upper arg fCr, fTb, tCr, tTb
sql = "select t.name, t.colType, t.nulls, t.""DEFAULT""" ,
", coalesce(f.nulls, 'new')" ,
"from sysibm.sysColumns t" ,
"left join sysibm.sysColumns f" ,
"on f.tbCreator = '"fCr"' and f.tbName = '"fTb"'" ,
"and f.name = t.name" ,
"where t.tbCreator = '"tCr"' and t.tbName = '"tTb"'" ,
"order by t.colNo"
call sqlPreOpen 1, sql
pr = ' '
do kx=1 while sqlFetchInto(1, ':na, :ty, :nu, :de, :nn')
/* say kx na ty nu de 'nn' nn */
if pos('CHAR', ty) > 0 then
dv = "''"
else if pos('INT' ,ty) > 0 | wordPos(ty, 'REAL FLOAT') > 0 then
dv = 0
else if ty == 'TIMESTMP' then
dv = '0001-01-01-00.00.00'
else if pos('LOB', ty) > 0 then
dv = ty"('')"
else
dv = '???'
if nu = 'Y' then
dv = 'case when 1=0 then' dv 'else null end'
r = '???'
if ty = 'ROWID' then do
r = '--'
end
else if nn == 'new' then do
if de = 'Y' then
r = '--'
else if nu == 'N' then
r = dv
else
r = 'case when 1=0 then' dv 'else null end'
end
else do
if nu = 'Y' | (nu = nn) then
r = ''
else
r = 'coalesce('na',' dv')'
end
if abbrev(r, '--') then do
r = ' ' r
end
else do
r = pr r
pr = ','
end
if pos('???', r) > 0 then
call err 'no default for type' ty 'in' tCr'.'tTb'.'na
call out r na
end
call sqlClose 1
return
endProcedure catColCom
/* copy db2Cat end **************************************************/
/* copy sqlO begin ***************************************************
sql interface mit o und j Anbindung
***********************************************************************/
sqlOini: procedure expose m.
if m.sqlO.ini == 1 then
return
call sqlIni
m.sqlO.ini = 1
call jIni
m.sqlO.cursors = left('', 200)
call classNew 'n SqlResultRdr u JRWO', 'm',
, "jReset m.m.cursor = arg; m.m.type = arg2;",
, "jOpen call sqlResultRdrOpen m, opt",
, "jClose call sqlClose m.m.cursor",
, "jReadO return sqlSelReadO(m)"
call classNew 'n SqlSel u JRWO', 'm',
, "jReset m.m.src = arg; m.m.type = arg2;",
, "jOpen call sqlSelOpen m, opt",
, "jClose call sqlSelClose m",
, "jReadO return sqlSelReadO(m)"
call classNew 'n SqlDRS u SqlSel', 'm',
, "jReset m.m.loc = arg; m.m.type = arg2;",
, "jOpen call sqlDRSOpen m, opt",
, "jClose call sqlSelClose m",
, "jReadO return sqlSelReadO(m)"
call classNew 'n SqlRxConnection u', 'm',
, "sqlQuery return sqlRxQuery(cx, src, retOk, resTy)",
, "sqlFetch return sqlRxFetch(cx, dst, retOk)",
, "sqlClose return sqlRxClose(cx, retOk)",
, "sqlUpdate return sqlRxUpdate(cx, src, retOk)",
, "sqlCall call err 'implement sqlRxCall"
call classNew 'n SqlRxStatement u', 'm',
, "sqlQuery return sqlRxQuery(m.cx.cursor, src, retOk,resTy)",
, "sqlFetch return sqlRxFetch(m.cx.cursor, dst, retOk)",
, "sqlClose return sqlRxClose(m.cx.cursor, retOk)",
, "sqlUpdate return sqlRxUpdate(m.cx.cursor, src, retOk)",
, "sqlCall call err 'implement sqlRxCall"
call classNew 'n SqlCsmConnection u', 'm',
, "sqlQuery return sqlCsmQuery(cx, src, retOk, resTy)",
, "sqlFetch return sqlCsmFetch(cx, dst)",
, "sqlClose return 0",
, "sqlUpdate call err 'implement sqlCsmUpdate'" ,
, "sqlCall call err 'implement sqlCsmCall'"
call classNew 'n SqlCsmStatement u', 'm',
, "sqlQuery return sqlCsmQuery(m.cx.cursor, src, retOk,resTy)",
, "sqlFetch return sqlCsmFetch(m.cx.cursor, dst)",
, "sqlClose return 0",
, "sqlUpdate call err 'implement sqlCsmUpdate'" ,
, "sqlCall call err 'implement sqlCsmCall'"
return 0
endProcedure sqlOini
/*--- connect and/or disconnect to DB2 -------------------------------*/
sqlConnect: procedure expose m.
parse upper arg sys, retOk
call sqlOIni
if pos('/', sys) > 0 then do
parse value space(sys, 0) with hst '/' sys
cTy = 'Csm'
end
else do
hst = ''
cTy = 'Rx'
end
if m.sql.conType==cTy & m.sqlHost==hst & m.sqlconDbSYs == sys then
return 0
if m.sql.conType \== '' then
call sqlDisconnect
res = 0
if cTy = 'Rx' then
res = sqlRxConnect(sys, retOk)
else
m.sql.conDbSys = sys
if res < 0 then
return res
m.sql.conType = cTy
m.sql.conhost = hst
m.sql.connection = oNew('Sql'cTy'Connection')
return res
endProcedure sqlConnect
sqlDisconnect: procedure expose m.
parse arg retOk
if m.sql.conType == 'Rx' then
call sqlRxDisconnect
m.sql.conType = ''
m.sql.conDbSys = ''
return 0
endProcedure sqlDisonnect
/*--- execute a query from sql, with one resultset -------------------*/
sqlQuery: procedure expose m.
parse arg cx, src, retOk, resTy
if datatype(cx, 'n') then
interpret objMet(m.sql.connection, 'sqlQuery')
else
interpret objMet(cx, 'sqlQuery')
/*--- fetch next row to m.dst.* at end return false ------------------*/
sqlFetch: procedure expose m.
parse arg cx, dst, retOk
if datatype(cx, 'n') then
interpret objMet(m.sql.connection, 'sqlFetch')
else
interpret objMet(cx, 'sqlFetch')
/*--- close cursor 'c'cx ---------------------------------------------*/
sqlClose: procedure expose m.
parse arg cx, retOk
if datatype(cx, 'n') then
interpret objMet(m.sql.connection, 'sqlClose')
else
interpret objMet(cx, 'sqlClose')
return 0
/*-- execute an sql with no resultset, but possibly outParms ---------*/
sqlUpdate: procedure expose m.
parse arg cx, src, retOk
if cx == '' | datatype(cx, 'n') then
interpret objMet(m.sql.connection, 'sqlUpdate')
else
interpret objMet(cx, 'sqlUpdate')
endProcedue sqlUpdate
/*-- execute an sql call with outParms and multiple resultSets -------*/
sqlCall: procedure expose m.
parse arg cx, src, retOk
if cx == '' | datatype(cx, 'n') then
interpret objMet(m.sql.connection, 'sqlCall')
else
interpret objMet(cx, 'sqlCall')
endProcedure sqlCall
sqlSel: procedure expose m.
parse arg src, type
s = oNew('SqlSel', inp2str(src, '-sql'), type)
call pipeWriteAll s
return m.s.rowCount
endProcedure sqlSel
/*--- return a free cursor -------------------------------------------*/
sqlGetCursor: procedure expose m.
parse arg rng
if rng == '' then
return sqlGetCursorRng(rng, 10, 48)
else if rng == 'h' then
return sqlGetCursorRng(rng, 60, 99)
else if rng == 'a' then
return sqlGetCursorRng(rng, 110, 199)
else
call err 'bad cursor range' rng
endProcedure sqlGetCursor
sqlGetCursorRng: procedure expose m.
parse arg rng, fr, to
cx = pos(' ', m.sqlO.cursors, fr)
if cx < fr & cx > to then
call err "no more '"rng"' cursors between" fr "and" to,
":"m.sqlO.cursors
m.sqlO.cursors = overlay('u', m.sqlO.cursors, cx)
return cx
endProcedure sqlGetCursorRNG
/*--- mark a cursor as closed ----------------------------------------*/
sqlFreeCursor: procedure expose m.
parse arg cx
if substr(m.sqlO.cursors, cx, 1) \== 'u' then
call err 'sqlFreeCursor('cx') not in use :'m.sqlO.cursors
m.sqlO.cursors = overlay(' ', m.sqlO.cursors, cx)
return
endProcedure sqlFreeCursor
sqlStmtsOpt: procedure expose m.
parse arg src, opts
upper opts
sub = ''
o = ''
retOk = ''
do wx=1 to words(opts)
w = word(opts, wx)
if abbrev(w, '-SQL') then
o = o'-sql'substr(w, 5)
else if w == '-O' | w == 'O' then
o = o'-o'
else if w = '*' | datatype(w, 'n') then
retOk = retOk w
else if length(w) == 4 then
sub = w
else
call err 'bad opt' w 'in opts' opts 'not -sql? -o or subsys'
end
call sqlOIni
if (sub == '' & m.sql.conDbSys== '') ,
| (sub \== '' & m.sql.conDbSys \== sub) then
call sqlConnect sub
return sqlStmts(src, strip(retOk), strip(o))
endProcedure sqlStmtsOpt
/*** execute sql's in a stream (separated by ;)
opt: 'o' ==> write objects, otherwise fmtFTab
'sql72' ==> spufi formatting (window 72) else linebreaks */
sqlStmts: procedure expose m.
parse arg sqlSrc, retOk, opt
dlm = ';'
isStr = oStrOrObj(sqlSrc, m.j.in)
fLen = ''
if pos('sql', opt) > 0 then
fLen = word(substr(opt, pos('sql', opt)+3), 1)
if isStr then do
m.sqlStmts.rdr = ''
call scanSrc sqlStmts, ggStr
end
else do
fi = jOpen(o2File(ggObj), '<')
call jCatSqlReset sqlStmts, , fi, fLen
end
do forever
s1 = jCatSqlNext(sqlStmts, dlm)
if s1 = '' then
leave
if translate(left(s1, 10)) == 'TERMINATOR' then do
dlm = strip(substr(s1, 11))
if length(dlm) \== 1 then
call scanErr sqlStmts, 'bad terminator' dlm
iterate
end
call outSt(splitNl(sqlTmp, sqlStmt(s1, retOk, opt)))
end
if \ isStr then
call jClose fi
return 0
endProcedure sqlStmts
sqlStmt: procedure expose m.
parse arg src, retOk, opt
cx = sqlGetCursor()
r1 = sqlExecute(cx, src, retOK)
res = m.sql.sqlHaHi || sqlMsgLine(r1, m.sql.cx.updateCount, src)
if m.sql.cx.resultSet \== '' then do
rdr = sqlResultRdr(cx)
if pos('o', opt) > 0 then
call pipeWriteAll rdr
else
call fmtFTab sqlStmtFmt, rdr
res = sqlMsgLine(m.rdr.rowCount 'rows fetched', , src)
end
call sqlFreeCursor cx
return res
endProcedure sqlStmt
/*--- execute the given sql plus a commit
until no more rows are updated -----------------------------*/
sqlUpdComLoop: procedure expose m.
parse arg src, retOk, opt
src = inp2Str(src)
crs = sqlGetCursor()
upds = 0
if retOk == '' then
retOk = 100
do coms=0
cd = sqlExecute(crs, src, retOk)
if m.sql.crs.updateCount < 1 then
return sqlMsgLine( , upds, src, coms 'commits')
upds = upds + m.sql.crs.updateCount
call sqlCommit
if coms // 20 = 19 then
say sqlMsgLine(time(), upds, src, (coms+1) 'commits')
end
endProcedure sqlUpdComLoop
removeSqlStmt: procedure expose m.
parse arg src, ggRet, opt
bx = verify(src, '( ')
if bx < 1 then
return ''
fun = translate(word(substr(src, bx), 1))
w2 = translate(word(substr(src, bx), 2))
res = ''
if fun == 'SELECT' | fun = 'WITH' then do
s = oNew('SqlSel', inp2str(src, '%S%+Q\s'))
if pos('o', opt) > 0 then
call pipeWriteAll s
else
call fmtFTab sqlStmtFmt, s
res = m.s.rowCount 'rows fetched'
end
else if fun = 'SET' & abbrev(w2, ':') then do
ex = pos('=', w2)
if ex > 2 then
var = strip(substr(w2, 2, ex-2))
else
var = strip(substr(w2, 2))
if var = '' then
var = 'varUnbekannt'
call sqlExec src, ggRet
res = 'sqlCode' sqlCode var'='value(var)
end
else if fun = 'SET' | (fun = 'DECLARE' & w2 = 'GLOBAL') then do
call sqlExImm src, ggRet
res = 'sqlCode' sqlCode
end
else if fun = 'CALL' then do
res = sqlStmtCall(src, ggRet, opt)
end
else do
call sqlExec src, ggRet
res = 'sqlCode' sqlCode
if wordPos(fun, 'DELETE INSERT UPDATE') > 0 THEN
res = res',' sqlErrd.3 'rows' ut2Lc(fun)'d'
end
aa = strip(src)
ll = 75 - length(res)
if length(aa) > ll then
aa = space(aa, 1)
if length(aa) > ll then
aa = left(aa, ll-3)'...'
return res':' aa
endProcedure removeSqlStmt
sqlStmtCall: procedure expose m.
parse arg src, retOk, opt
s = scanSrc(scanSqlReset(sqlstmtcall, ,0), src)
if \ scanSqlId(scanSkip(s)) | m.s.val \== 'CALL' then
call scanErr s, 'not a call'
if \ scanSqlQuId(scanSkip(s)) then
call scanErr s, 'qualified id missing after call'
loc = ''
if m.s.val.0 = 1 then
wh = 'name =' quote(m.s.val.1, "'")
else if m.s.val.0 = 2 then
wh = "schema = '"strip(m.s.val.1)"'" ,
"and name = '"strip(m.s.val.2)"'"
else if m.s.val.0 = 3 then do
loc = m.s.val.1
wh = "schema = '"strip(m.s.val.2)"'" ,
"and name = '"strip(m.s.val.3)"'"
end
else
call scanErr s, 'storedProcedureName' m.s.val ,
'has' m.s.val.0 'parts, should have 1, 2 or 3'
pn = m.s.val
da = sqlStmtCallDa(sqlStmtCall, loc, wh)
if \ scanLit(scanSkip(s), '(') then
call scanErr s, '( expected after call' pn
varChars = f
do ax=1
m.da.ax.varName = ''
isEmpty = 0
if scanLit(scanSkip(s), ':') then do
if \ scanVerify(scanSkip(s), m.ut.alfDot) then
call scanErr s, 'variable expected after : in call' pn
m.da.ax.varName = m.s.tok
if m.da.ax.io == 'i' | m.da.ax.io == 'b' then
m.da.ax.sqlData = envGet(m.da.ax.varName)
end
else if scanString(s) then
m.da.ax.sqlData = m.s.val
else if scanVerify(s, ',):;', 'm') then
m.da.ax.sqlData = strip(m.s.tok)
else
isEmpty = 1
if scanLit(scanSkip(s), ')') then
leave
if \ scanLit(s, ',') then
call scanErr s, if(isEmpty, 'value, var, ') ,
|| "',' or ')' expected"
end
if ax \= m.da.sqlD then
if \ (ax=1 & m.da.sqlD = 0 & isEmpty) then
call scanErr s, 'call with' ax 'parms but' ,
pn 'needs' m.da.sqld
caCo = sqlExec('call' pn 'using descriptor :M.'da, 466)
call out '--- called' pn', sqlCode' caCo
do ax=1 to m.da.sqlD
call Out ' parm' ax m.da.ax.io m.da.ax.parmName,
|| if(m.da.ax.varName \== '',' $'m.da.ax.varName),
'=' m.da.ax.sqlData
if m.da.ax.varName \== '' then
call envPut m.da.ax.varName, m.da.ax.sqlData
end
if caCo = 466 then do
drop sqlDP
call sqlExec 'describe procedure :pn into :m.sqlDp'
if m.sqldp.sqlD < 1 then
call err 'bad sqldp sqlD='m.sqldp.sqlD 'for sqlCode' caCo
do dx=1 to m.sqldp.sqlD
call out ' dynamic result set' dx m.sqldp.dx.sqlName ,
'locator='m.sqldp.dx.sqlLocator
end
do dx=1 to m.sqldp.sqlD
drs = 'dynamic result set' dx'='m.sqldp.dx.sqlName 'of' pn
call out '--- begin of' drs
rdr = sqlDRS(m.sqldp.dx.sqlLocator)
if pos('o', opt) > 0 then
call pipeWriteAll rdr
else
call fmtFTab sqlStmtFmt, rdr
call out '---' m.rdr.rowCount 'rows fetched from' drs
end
end
return 'sqlCode' caCo
endProcedure sqlStmtCall
sqlStmtCallDa: procedure expose m.
parse arg da, loc, wh
cr = if(loc=='',,loc'.')'sysIbm'
sql = "select 'SCHEMA=''' || strip(schema) || ''''",
"|| ' and name=''' || strip(name ) || ''''",
"|| ' and specificName=''' || strip(specificName) || ''''",
"|| ' and routineType =''' || strip(routineType ) || ''''",
"|| ' and VERSION =''' || strip(VERSION ) || ''''",
"from" cr".SysRoutines ",
"where" wh "and active = 'Y'"
if sqlpreAllCl(49, sql, rou, ':m.rou') <> 1 then
call err m.rou.0 'routines found for' wh
rdr = jOpen(sqlRdr('select * from' cr'.sysParms where' m.rou,
'order by ordinal'), '<')
do ix=1 while assNN('A', jReadO(rdr))
if m.a.ordinal <> ix then
call err 'ix' ix 'mismatch ordinal' m.a.ordinal
ty = m.a.dataTypeId
m.da.ix.sqlType = ty
m.da.ix.sqlLen = m.a.length
m.da.ix.sqlLen.sqlPrecision = m.a.length
m.da.ix.sqlLen.sqlScale = m.a.scale
if wordPos(ty, 384 385) > 0 then /* date */
m.da.ix.sqlLen = 10
else if wordPos(ty, 388 389) > 0 then /* time */
m.da.ix.sqlLen = 8
else if wordPos(ty, 392 393) > 0 then /* timestamp */
m.da.ix.sqlLen = 26
m.da.ix.sqlData = ''
m.da.ix.parmName= m.a.parmName
m.da.ix.io = translate(m.a.rowType, 'iob', 'POB')
m.da.ix.sqlInd = 1
end
m.da.sqlD = ix - 1
return da
endProcedure sqlStmtCallDa
sqlResultRdr: procedure expose m.
parse arg cx, type
return oNew('SqlResultRdr', cx, type)
endProcedure sqlRdr
sqlRdr: procedure expose m.
parse arg src, type
return oNew('SqlSel', inp2str(src, '%S%qn %S'), type)
endProcedure sqlRdr
sqlResultRdrOpen: procedure expose m.
parse arg m, opt
if opt\== m.j.cRead then
call err 'opt not' m.j.cRead 'sqlResultRdrOpen('m',' opt')'
m.m.jReading = 1
m.m.rowCount = 0
return m
endProcedure sqlResultRdrOpen
/*--- prepare and open cursor
generate type and fetchList ------------------------------------*/
sqlSelOpen: procedure expose m.
parse arg m, opt
m.m.cursor = sqlGetCursor()
call sqlQuery m.m.cursor, m.m.src, ,m.m.type /* ????? */
return sqlResultRdrOpen(m, opt)
endProcedure sqlOpen
/*--- dynamic result sets --------------------------------------------*/
sqlDRS: procedure expose m.
parse arg loc, type
return oNew('SqlDRS', loc, type)
endProcedure sqlDRS
sqlDRSOpen: procedure expose m.
parse arg m, opt
if opt\== m.j.cRead then
call err 'opt not' m.j.cRead 'sqlDRSOpen('m',' opt')'
crs = sqlGetCursor('a')
crN = 'C'crs
m.m.cursor = crs
call sqlReset crs
call sqlexec 'allocate C'crs 'cursor for result set :m.m.loc'
call sqlExec 'describe cursor c'crs 'into :m.sql.'crs'.D'
m.m.jReading = 1
m.m.rowCount = 0
return m
endProcedure sqlDRSOpen
/*--- create the type, fetch vars etc. from the sqlDA ---------------*/
sqlFetchClass: procedure expose m.
parse arg cx
if m.sql.cx.type = '' then do
ff = mCat('SQL.'cx'.COL', '%qn v, f %s')
m.sql.cx.type = classNew('n* SQL u f' ff 'v')
end
return m.sql.cx.type
endProcedure sqlFetchClass
/*--- fetch cursor for this sqlSel -----------------------------------*/
sqlSelReadO: procedure expose m.
parse arg m
cx = m.m.cursor
v = oNew(sqlFetchClass(cx))
if \ sqlFetch(cx, v) then
return ''
m.m.rowCount = m.m.rowCount + 1
return v
endProcedure sqlSelReadO
/*--- close sql Cursor -----------------------------------------------*/
sqlSelClose: procedure expose m.
parse arg m, v
call sqlClose m.m.cursor
call sqlFreeCursor m.m.cursor
m.m.cursor = ''
return m
endProcedure sqlSelClose
/* copy sqlO end **************************************************/
/* copy sqlC begin ***************************************************
sql interface Compatibility mode
***********************************************************************/
/*--- prepare and declare 'c'cx from sql src -------------------------*/
sqlPreDeclare: procedure expose m.
parse arg cx, src, ggRetOk, descOut
m.sql.cx.type = ''
res = sqlPrepare(cx, src, ggRetOk, descOut)
if res >= 0 then
return sqlExec('declare c'cx 'cursor for s'cx)
return res
endProcedure sqlPreDeclare
/*--- prepare, declare and open 'c'cx from sql src -------------------*/
sqlPreOpen: procedure expose m.
parse arg cx, src, descOut, descInp
res = sqlPreDeclare(cx, src, descOut, descInp)
if res >= 0 then
return sqlOpen(cx)
return res
endProcedure sqlPreOpen
/*--- fetch cursor 'c'cx into variables ggVars -----------------------*/
sqlFetchInto:
parse arg ggCx, ggVars
if ggVars == '' then
ggVars = 'descriptor :M.SQL.'ggCX'.D'
/* accept sqlCodes > 0 except 100 */
ggRes = sqlExec('fetch c'ggCx 'into' ggVars, 100)
if ggRes == 0 then
return 1
if ggRes == 100 then
return 0
return ggRes
endProcedure sqlFetchInto
/*--- return sql variable list for stem st and fields the word in vars
if withInd == 1 then with sqlIndicator variables
sqlVars('S', 'A B') --> ':S.A, :S.B'
sqlVars('S', 'A B', 1) --> ':S.A :S.A.SQLIND, :S.B :S.B.SQLIND'
----------------------------------------------------------------------*/
sqlVars: procedure expose m.
parse arg st, vars, withInd
res = ''
if st ^== '' then
st = st'.'
do ix=1 to words(vars)
res = res', :'st || word(vars, ix)
if withInd == 1 then
res = res ':'st || word(vars, ix)'.sqlInd'
end
return substr(res, 3)
endProcedure sqlVars
/*--- open cursor 'c'cx fetch all into variables vars and close
st = passed stem, sx = row number
return number of rows fetched ----------------------------------*/
sqlOpAllCl:
parse arg ggCx, st, ggVars
if arg() >= 4 then do
call sqlDescribeInput ggCx
do ggAx=4 to arg()
call sqlDASet ggCx, 'I', ggAx-3, arg(ggAx)
end
ggRes = sqlOpen(ggCx use)
end
else do
ggRes = sqlOpen(ggCx)
end
if ggRes < 0 then
return ggRes
do sx = 1 until ggRes \== 1
ggRes = sqlFetchInto(ggCx, ggVars)
end
m.st.0 = sx - 1
call sqlRxClose ggCx
if ggRes == 0 then
return m.st.0
return ggRes
endProcedure sqlOpAllCl
/*--- prepare, declare open cursor 'c'cx, fetch all and close
return number of rows fetched ----------------------------------*/
sqlPreAllCl:
parse arg ggCx, ggSrc, st, ggVars
ggRes = sqlPreDeclare(ggCx, ggSrc)
if ggRes >= 0 then
return sqlOpAllCl(ggCx, st, ggVars)
return ggRes
endProcedure sqlPreAllCl
/*--- execute statement 's'cx using arguments arg(2), arg(3)... ------*/
sqlExecStmt:
parse arg ggCx ggRetOk /* no , for ggRetOk, arg(2) is used already| */
if ggAx > 1 then
call sqlDescribeInput ggCx
do ggAx=2 to arg()
call sqlDASet ggCx, 'I', ggAx-1, arg(ggAx)
end
return sqlExec('execute s'ggCx 'using descriptor :M.SQL.'ggCx'.I',
, ggRetOk)
endProcedure execStmt
/*--- execute immediate the sql src ----------------------------------*/
/* copy sqlC end **************************************************/
/* copy sqlCsm begin **************************************************/
/*--- send an sql to csm an handle sqlCode ---------------------------*/
sqlCsmExe:
parse arg cx, ggSqlStmt, ggRetOk
sql_HOST = m.sql.conHost
SQL_DB2SSID = m.sql.conDbSys
sql_query = ggSqlStmt
address tso "CSMAPPC START PGM(CSMASQL)"
if \ (rc = 0 | rc = 4) then
call err 'csmappc rc' rc
if sqlCode = 0 then
return 0
else if pos('*', ggRetOk) > 0 | wordPos(sqlCode, ggRetOk) > 0 ,
then do
if sqlCode < 0 & pos('say', ggRetOk) > 0 then
call errSay ' }'sqlmsg(sqlCA2Rx(sqlCa))
return sqlCode
end
else if sqlCode < 0 then
call err sqlmsg(sqlCA2rx(sqlCa))
else if pos('w', ggRetOk) < 1 then
if sqlCode = 100 then
call errSay ' }sqlCode +100 row not found\nsql =' ggSqlStmt
else
call errSay 'w}'sqlMsg(sqlCA2rx(sqlCa))
return sqlCode
endProcedure sqlCsmExe
/*--- execute a query from sql, with one resultset -------------------*/
sqlCsmQuery: procedure expose m.
parse arg cx, sqlSrc, retOk, resTy, src
res = sqlCsmExe(cx, sqlSrc, 100 retOk)
if res < 0 then
return res
if src == '' then
src = 'SQL.'cx'.DATA'
m.sql.cx.data = src
f = ''
if resTy \== '' then do
f = oClaMet(class4Name(resTy), 'oFlds')
if m.f.0 < sqlD then
call err 'not enough fields in type'
end
do kx=1 to sqlD
rxNa = SQLDA_REXXNAME.kx
cn = sqlVarName(f, kx, sqlDa_name.kx)
m.sql.cx.col.kx = cn
do rx=1 to sqlRow#
if substr(sqlIndicator.rx, kx ,1) == 'ff'x then
m.src.rx.cn = m.sqlNull
else
m.src.rx.cn = value(rxNa'.'rx)
end
end
m.src.0 = sqlRow#
m.sql.cx.col.0 = sqlD
m.sql.cx.daIx = 0
return 0
endProcedure sqlCsmQuery
sqlCsmFetch: procedure expose m.
parse arg cx, dst
src = m.sql.cx.data
rx = m.sql.cx.daIx + 1
if rx > m.sql.cx.data.0 then
return 0
m.sql.cx.daIx = rx
do kx = 1 to m.sql.cx.col.0
c = m.sql.cx.col.kx
m.dst.c = m.src.rx.c
end
return 1
endProcedure sqlCsmFetch
/* copy sqlCsm end **************************************************/
/* copy sqlRx begin ***************************************************
Achtung: inc generiert sql aus sqlRx, Aenderungen nur in sqlRx|
sql interface
***********************************************************************/
/*--- initialize sqlRx -----------------------------------------------*/
sqlIni: procedure expose m.
if m.sql.ini == 1 then
return
m.sqlNull = '---'
m.sqlInd = 'sqlInd'
m.sql.defCurs= 49
m.sqlCAMsg = 0
m.sqlSuMsg = 2
m.sql.ini = 1
m.sql.conType = ''
m.sql.conDbSys = ''
m.sql.conhost = ''
isInProd = wordPos(sysvar(sysNode), 'RZ2 RZ4') > 0
m.sqlRetOK = 'dne' copies('rod', \ isInProd)
return 0
endProcedure sqlIni
/*--- connect to the db2 subsystem sys -----------------------------*/
sqlRxConnect: procedure expose m.
parse upper arg sys, ggRetOk
call sqlIni
address tso "SUBCOM DSNREXX"
if rc <> 0 then do
sRc = RXSUBCOM('ADD','DSNREXX','DSNREXX') /* ADD HOST CMD ENV */
if sRc <> 0 then
call err 'rc' sRc 'from RXSUBCOM(ADD, DSNREXX, DSNREXX)'
end
if sys = '-' then
return 0
if sys \== '' then
nop
else if sysvar(sysnode) == 'RZ1' then
sys = 'DBAF'
/* else if sysvar(sysnode) == 'RZ4' then
sys = 'DP4G'
*/ else
call err 'no default subsys for' sysvar(sysnode)
m.sql.conDbSys = sys
ggSqlStmt = 'connect' sys
address dsnRexx ggSqlStmt
if rc = 0 then
return 0
interpret sqlErrorHandler(rc, ggRetOk, ggSqlStmt)
endProcedure sqlRxConnect
/*--- diconnect from db2 ---------------------------------------------*/
sqlRxDisconnect: procedure expose m.
parse arg retOk
ggSqlStmt = 'disconnect'
m.sql.conDbSys = ''
address dsnRexx ggSqlStmt
if rc = 0 then
return 0
interpret sqlErrorHandler(rc, ggRetOk, ggSqlStmt)
endProcedure sqlDisconnect
/*--- execute a query from sql, with one resultset -------------------*/
sqlRxQuery: procedure expose m.
parse arg cx, src, retOk, resTy
res = sqlPrepare(cx, src, retOk, 1)
if res < 0 then
return res
if resTy \== '' then
m.sql.cx.type = class4Name(resTy)
res = sqlExec('declare c'cx 'cursor for s'cx, retOk)
if res < 0 then
return res
res = sqlExec('open c'cx, retOk)
if res < 0 then
return res
call sqlRxFetchVars cx
m.sql.cx.updateCount = sqlErrd.3
m.sql.cx.resultSet = cx
return res
endProcedure sqlRxQuery
/*--- fetch next row to m.dst.* at end return false ------------------*/
sqlRxFetch: procedure expose m.
parse arg cx, dst, retOk
fetCode = sqlExec('fetch c'cx 'into' sqlRxFetchVars(cx), 100 retOk)
if fetCode == 100 then
return 0
if fetCode < 0 then
return fetCode
call sqlSetNull cx, dst
return 1
endProcedure sqlRxFetch
/*--- close cursor 'c'cx ---------------------------------------------*/
sqlRxClose: procedure expose m.
parse arg cx, retOk
return sqlExec('close c'cx, retOk)
endProcedure sqlRxClose
/*-- execute an sql with no resultset, but possibly outParms ---------*/
sqlRxUpdate: procedure expose m.
parse arg cx, src, retOk
m.sql.cx.updateCount = ''
m.sql.cx.resultSet = ''
bx = verify(src, '( ')
if bx > 0 then
fun = translate(word(substr(src, bx), 1))
if fun = 'SET' then do
w2 = translate(word(substr(src, bx), 2))
if \ abbrev(w2, ':') then
return sqlExImm(src, retOk)
trace ?r
ex = pos('=', w2)
if ex = 0 then
ex = length(w2)+1
var = strip(substr(w2, 2, ex-2))
if var = '' then
call err 'bad hostVar in' src
m.sql.outVar = var
src2 = 'set :M.sql.out.'var substr(w, ex) subword(src, 3)
return sqlExec(src2, retOk)
end
if fun == 'DECLARE' then do
if 'GLOBAL' == translate(word(substr(src, bx), 2)) then
return sqlExImm(src, retOk)
end
res = sqlExec(src, retOk)
if wordPos(fun, 'DELETE INSERT UPDATE') > 0 then
m.sql.cx.updateCount = sqlErrd.3
return res
endProcedure sqlRxUpdate
/*-- execute a query, update or call ---------------------------------*/
sqlExecute: procedure expose m.
parse arg cx, src, retOk
src = inp2Str(src, '-sql')
f = translate(word(substr(src, max(verify(src, '( '), 1)), 1))
m.sql.cx.fun = f
if f == 'SELECT' | f == 'WITH' then
return sqlQuery(cx, src, retOk)
else if f == 'CALL' then
call err 'implement sql call for:' src
else
return sqlUpdate(cx, src, retOk)
endProcedure sqlExecute
/*-- execute a query, copy result to stem ----------------------------*/
sql2St: procedure expose m.
parse arg src, dst, retOk, type
cx = m.sql.defCurs
res = sqlQuery(cx, src, retOk, type)
if res >= 0 then do
do sx=1 while sqlFetch(cx, dst'.'sx)
end
res = sx-1
end
m.dst.0 = res
call sqlRxClose cx
return res
endProcedure sql2St
/*-- execute a query and return value of the first column
if > 1 row fail, if 0 rows return arg(3) or fail ----------*/
sql2One: procedure expose m.
parse arg src, dst
cx = m.sql.defCurs
call sqlQuery cx, src
if \ sqlFetch(cx, dst) then
if arg() > 2 then
return arg(3)
else
call err 'no row returned for:' src
if sqlFetch(cx, dst.2) then
call err '2 or more rows for' src
c1 = m.sql.cx.col.1
res = m.dst.c1
call sqlRxClose cx
return res
endProcedure sql2One
/*--- reset sql cursor 'c'cx fields ----------------------------------*/
sqlReset: procedure expose m.
parse arg cx
m.sql.cx.updateCount = ''
m.sql.cx.resultSet = ''
m.sql.cx.needDesc = 1
m.sql.cx.d.sqlD = 'noSqlDA'
m.sql.cx.i.sqlD = 'noDescInp'
m.sql.cx.fetchVars = ''
m.sql.cx.type = ''
m.sql.cx.col.0 = ''
m.sql.cx.into = ''
return
endProcedue sqlReset
/*--- prepare statement 's'cx from sql src into descriptor desc ------*/
sqlPrepare: procedure expose m.
parse arg cx, src, retOk, descOut
src = inp2str(src, '%qn%s ')
s = ''
if descOut == 1 then
s = 'into :M.SQL.'cx'.D'
call sqlReset cx
return sqlExec('prepare s'cx s 'from :src', retOk)
endProcedure sqlPrepare
/*--- open cursor 'c'cx using arguments arg(2), arg(3)... ------------*/
sqlOpen: procedure expose m.
parse arg cx us
if us == '' then do
if arg() <= 1 then
return sqlExec('open c'cx)
call sqlDescribeInput cx
do ix=1 to arg()-1
call sqlDASet cx , 'I', ix, arg(ix+1)
end
end
return sqlExec('open c'cx 'using descriptor :M.SQL.'cx'.I')
endProcedure sqlOpen
/*--- execute a prepared statement with arg(2), arg(3)... ------------*/
sqlExePreSt: procedure expose m.
parse arg cx retOk
if arg() <= 1 then
return sqlExec('execute s'cx, retOk)
call sqlDescribeInput cx
do ix=1 to arg()-1
call sqlDASet cx , 'I', ix, arg(ix+1)
end
return sqlExec('execute s'cx 'using descriptor :M.SQL.'cx'.I',
, retOk)
endProcedure sqlExePreSt
/*--- describe output (if not already done)
and return size of sqlDa ------------------------------------*/
sqlDescribeOutput: procedure expose m.
parse arg cx, force
if force == 1 | \ datatype(m.sql.cx.d.sqlD, 'n') then
call sqlExec 'describe s'cx 'into :M.SQL.'cx'.D', 0
return m.sql.cx.d.sqlD
endProcedure sqlDescribeOutput
/*--- describe input (if not already done)
and return size of input sqlDA ------------------------------*/
sqlDescribeInput: procedure expose m.
parse arg cx, force
if force == 1 | \ datatype(m.sql.cx.i.sqlD, 'n') then
call sqlExec 'describe input s'cx 'into :M.SQL.'cx'.I'
return m.sql.cx.i.sqlD
endProcedure sqlDescribeInput
/*--- describe table and return sqlDA --------------------------------*/
sqlDescribeTable: procedure expose m.
parse upper arg tb, force
if force == 1 | \ datatype(m.sql.table.tb.sqlD, 'n') then
call sqlExec 'describe table :tb into :M.SQL.TABLE.'tb
return 'SQL.TABLE.'tb
endProcedure sqlDescribeTable
/*--- return select column list for table tb
omit Blobs (blobMax < 0) or substr(blob, 1, blobMax) ----------*/
sqlColList: procedure expose m.
parse arg tb al, blobMax
sd = sqlDescribeTable(tb)
bs = ''
lst = ''
if al \== '' & right(al, 1) \== '.' then
al = al'.'
do sx=1 to m.sd.sqld
if wordPos(m.sd.sx.sqlType, '404 405 408 409 412 413') < 1 then
lst = lst',' al || m.sd.sx.sqlName
else do
bs = bs m.sd.sx.sqlName
if blobMax >= 0 then
lst = lst', length('al || m.sd.sx.sqlName')' ,
m.sd.sx.sqlName'Len' ,
|| ', substr('al || m.sd.sx.sqlName ,
|| ', 1,' blobMax')' m.sd.sx.sqlName
end
end
m.sd.colList = substr(lst, 3)
m.sd.blobs = strip(bs)
return substr(lst, 3)
endProcedure sqlColList
/*--- put sqlNull in all vars where indicator says so ---------------*/
sqlSetNull: procedure expose m.
parse arg cx, dst
do nx=1 to m.sql.cx.sqlNull.0
col = m.sql.cx.sqlNull.nx
if m.dst.col.sqlInd < 0 then
m.dst.col = m.sqlNull
end
return
endProcedure sqlSetNull
/*--- use describe output to generate column names,
fetchVariables and sqlNull names ---------------------*/
sqlRxFetchVars: procedure expose m.
parse arg cx
if m.sql.cx.fetchVars \== '' then
return m.sql.cx.fetchVars
call sqlDescribeOutput cx
f = m.sql.cx.type
if f \== '' then do
f = oClaMet(f, 'oFlds')
if m.f.0 < m.sql.cx.d.sqlD then
call err 'not enough column names'
end
m.sql.cx.col.0 = m.sql.cx.d.sqlD
nx = 0
vars = ''
do kx=1 to m.sql.cx.d.sqlD
cn = sqlVarName(f, kx, m.sql.cx.d.kx.sqlName)
m.sql.cx.col.kx = cn
m.sql.cx.col2kx.cn = kx
vars = vars', :m.dst.'cn
if m.sql.cx.d.kx.sqlType // 2 = 1 then do
vars = vars' :m.dst.'cn'.sqlInd'
nx = nx + 1
m.sql.cx.sqlNull.nx = cn
end
end
m.sql.cx.sqlNull.0 = nx
m.sql.cx.fetchVars = substr(vars, 3)
return m.sql.cx.fetchVars
endProcedure sqlRxFetchVars
sqlCol2kx: procedure expose m.
parse arg cx, nm
call sqlRxFetchVars cx
if symbol('M.SQL.CX.COL2KX.NM') \== 'VAR' then
return ''
kx = m.sql.cx.col2kx.nm
if m.sql.cx.col.kx == nm then
return kx
drop m.sql.cx.col.kx
return ''
endProcedure sqlCol2kx
sqlVarName: procedure expose m. sqlVarName.
parse arg f, kx, sNa
if f == '' then do
cx = verifId(sNa)
if cx > 0 then /* avoid bad characters for classNew| */
sNa = left(sNa, cx-1)
upper sNa
if sNa == '' | symbol('sqlVarName.sNa') == 'VAR' then
sNa = 'COL'kx
sqlVarName.sNa = 1
return sNa
end
else do
if m.f.kx == '' then
call err 'implement empty varName'
return substr(m.f.kx, 2)
end
endProcedure sqlVarName
/*--- set one value in a DA, handle nulls ----------------------------*/
sqlDASet: procedure expose m.
parse arg cx, da, ix, val
m.sql.cx.da.ix.sqlData = val
m.sql.cx.da.ix.sqlInd = - (val == m.sqlNull)
/* data types schienen einmal nicht zu funktionieren .......
if wordPos(m.da.ix.sqlType, '384 385 388 389 392 393') > 0 then
m.da.ix.sqlType = 448 + (m.da.ix.sqlType // 2) */
return
endProcedure sqlDASet
sqlExImm:
parse arg ggSrc, ggRetOk
return sqlExec('execute immediate :ggSrc', ggRetOk)
endProcedure sqlExImm
sqlCommit: procedure expose m.
parse arg src
return sqlExec('commit')
endProcedure sqlCommit
/*--- execute sql thru the dsnRexx interface -------------------------*/
sqlExec: /* no procedure, to keep variables sql... */
parse arg ggSqlStmt, ggRetOk
m.sql.sqlHaHi = ''
address dsnRexx 'execSql' ggSqlStmt
/* say 'sqlCode' sqlCode 'rc' rc 'for' ggSqlStmt ggNo */
if rc = 0 then
return 0
interpret sqlErrorHandler(rc, ggRetOk, ggSqlStmt)
endProcedure sqlExec
sqlErrorHandler: procedure expose m. ,
sqlCode sqlErrMc sqlErrP sqlErrD. sqlWarn. sqlState
parse arg drC, retOk, verb rest
if drC == 0 then
return 'return 0'
if wordPos(drC, '1 -1') < 0 then
return "call err 'dsnRexx rc" drC"' sqlmsg()"
if pos('-', retOK) < 1 then
retOK = retOk m.sqlRetOk
if pos('*', retOK) > 0 | wordPos(sqlCode, retOK) > 0 then do
if sqlCode < 0 & pos('say', retOK) > 0 then
return "call outSt errMsg(' }'sqlMsg()); return" sqlCode
else
return "return" sqlCode
end
upper verb
if verb == 'DROP' then do
if sqlCode == -204 & wordPos('dne', retok) > 0 then
return 'return' sqlCode
if sqlCode = -672 & verb=='DROP' ,
& wordPos('rod', retok) > 1 then do
hahi = m.sql.sqlHaHi ,
|| sqlMsgLine(sqlCode, 'tb='sqlErrMc ,verb rest)'\n'
call sqlExec 'alter table' SqlErrMc ,
'drop restrict on drop'
hahi = hahi || m.sql.sqlHaHi ,
|| sqlMsgLine(sqlCode, , ggSqlStmt)'\n'
call sqlExec verb rest
m.sql.sqlHaHi = hahi
return 'return' sqlCode
end
end
if drC < 0 then
return "call err sqlmsg(); return" sqlCode
if (sqlCode <> 0 | sqlWarn.0 ^==' ') & pos('w',retOK) < 1 then
return "call outSt errMsg(' }'sqlMsg()); return" sqlCode
return 'return' sqlCode
endProcedure sqlErrorHandler
sqlMsgLine: procedure expose m. sqlErrD.
parse arg res, cnt, src, plus
verb = translate(word(src, 1))
if datatype(res, 'n') then
res = 'sqlCode' res
if cnt \== '' then do
res = res',' cnt
vx = wordPos(translate(word(src,1)), 'DELETE INSERT UPDATE')
if datatype(cnt, 'n') then
if vx > 0 then
res = res 'rows' word('deleted inserted updated', vx)
else if cnt <> 0 then
res = res 'rows updated'
end
if plus \== '' then
res = res',' plus
if abbrev(res, ', ') then
res = substr(res, 3)
if src \== '' then do
ll = 75 - length(res)
aa = strip(src)
if length(aa) > ll then
aa = space(aa, 1)
if length(aa) > ll then
aa = left(aa, ll-3)'...'
res = res':' aa
end
return res
endProcedure sqlMsgLine
/*--- send a command to db2 through the TSO dsn processor ------------*/
sqlDsn: procedure expose m.
parse arg st, sys, cmd, rcOk
x = outtrap('M.'st'.')
push 'END'
push cmd
address tso 'DSN SYSTEM('sys')'
rr = rc
x = outtrap(off)
if rr = 0 | rcOk = '*' | wordPos(rr, rcOk) > 0 then
return rr
fl = max(1, m.st.0 - 10)
em = 'rc' rr 'for DSN SYSTEM('sys') cmd' cmd,
'\nOuputlines' fl '-' m.st.0':'
do lx=fl to m.st.0
em = em '\n' strip(m.st.lx, 't')
end
call err em
endProcedure sqlDsn
/*--- issue an sql error message -------------------------------------*/
sqlMsg: /* no procedure, to keep variables sql... */
if \ dataType(sqlCode, 'n') then do
ggRes = 'sqlCode' sqlCode 'not numeric\n'sqlCaMsg()
end
else do
ggRes = sqlDsntiar(sqlRx2CA())
ggWa = sqlMsgWarn()
if ggWa \= '' then
ggRes = ggRes'\nwarnings' ggWa
if m.sqlCAMsg == 1 then
ggRes = ggRes'\n'sqlCaMsg()'\n'sqlCaMsg(sqlCa2Rx(sqlCa))
end
ggSt = 'SQL.HOST'
ggVa = 'SQL.HOST.VAR'
ggBe = 'SQL.HOST.BEF'
call sqlHostVars ggSqlStmt, 12, ggSt
ggFrom = 'ggSqlStmt'
ggW1 = translate(word(ggSqlStmt, 1))
ggW2 = translate(word(ggSqlStmt, 2))
if ggW1 == 'PREPARE' then
ggFrom = sqlHostVarFind(ggSt, 'FROM')
else if ggW1 ggW2 == 'EXECUTE IMMEDIATE' then
ggFrom = sqlHostVarFind(ggSt, 1)
ggPos = 0
if datatype(sqlErrd.5, 'n') & sqlErrd.5 > 0 then do
ggPos = sqlErrd.5
ggRes = ggRes || sqlMsgSrcPos(value(ggFrom), sqlErrd.5)
end
if ggFrom == 'ggSqlStmt' then do
ggRes = ggRes'\nsql =' sqlShorten(ggSqlStmt, 2000, ggPos)
end
else do
ggRes = ggRes'\nsql =' sqlShorten(value(ggFrom), 2000, ggPos)
ggRes = ggRes'\nstmt =' sqlShorten(ggSqlStmt, 2000)
end
ggPref = '\nwith'
do ggXX=1 to m.ggSt.0
if ggFrom = m.ggVa.ggXX then
iterate
ggRes = ggRes || ggPref m.ggBe.ggXX ':'m.ggVa.ggXX ,
'=' sqlShorten(value(m.ggVa.ggXX), 210)
ggPref = '\n '
end
if m.sqlSuMsg == 1 | (m.sqlSuMsg == 2 & m.sql.conHost \== '') then
ggRes = ggRes'\nsubsys =' m.sql.conDbSys ,
|| ', host =' m.sql.conHost', interfaceType' m.sql.conType
return ggRes
endSubroutine sqlMsg
sqlShorten: procedure expose m.
parse arg txt, maxL, pos
if length(txt) <= maxL then
return txt
if \ datatype(pos, 'n') | pos < 1 then
pos = 1
ex = pos + min(60, maxL%7)
if ex <= maxL - 4 then
return left(txt, maxL-4) '...'
if ex >= length(txt) then
return left(txt, 67) '...\n'substr(txt, length(txt)-maxL+72)
else
return left(txt, 67) '...\n'substr(txt, ex-maxL+76, maxL-75) ,
'...'
endProcedure sqlShorten
/*--- use dsnTiar to translate sql Info to error text ----------------*/
sqlDsnTiar: procedure expose m.
parse arg ca
if -438 = sqlCa2Rx(ca) then
return '\nSQLCODE = -438:',
'APPLICATION RAISED ERROR WITH sqlState' sqlState ,
'and DIAGNOSTIC TEXT:' sqlErrMc
liLe = 78
msLe = liLe * 10
msg = d2c(msLe,2) || left('', msLe)
len = d2c(liLe, 4)
ADDRESS LINKPGM "DSNTIAR ca msg len"
if rc = 0 then nop
else if rc = 4 then say 'warn linkPgm dsnTiar rc' rc 'sqlCa' ca
else call err 'linkPgm dsnTiar rc' rc 'sqlCa' ca
res = strip(substr(msg, 13, liLe-10))
cx = pos(', ERROR: ', res)
if cx > 0 then
res = left(res, cx-1)':' strip(substr(res, cx+9))
do c=3+liLe by liLe to msLe while substr(msg, c, 10) = ''
res = res'\n 'strip(substr(msg, c+10, liLe-10))
end
return res
endProcedure sqlDsnTiar
/*--- format all rexx sqlCa fields into a message --------------------*/
sqlCaMsg:
return 'sqlCode' sqlCode 'sqlState='sqlState ,
'\n errMC='translate(sqlErrMc, ',', 'ff'x) ,
'\n warnings='sqlWarnCat('+') 'erP='sqlErrP ,
'\n errD.1='sqlErrD.1 '2='sqlErrD.2 '3='sqlErrD.3 ,
'\n errD.4='sqlErrD.4 '5='sqlErrD.5 '6='sqlErrD.6
endProcedure sqlCaMsg
/*--- format the sqlCA into the dsnTiar SQLCA ------------------------*/
sqlRx2Ca: procedure expose m. ,
sqlCode sqlErrMc sqlErrP sqlErrD. sqlWarn. sqlState
if \ (datatype(sqlcode, 'n') & datatype(sqlErrD.1, 'n') ,
& datatype(sqlErrD.3, 'n')) then
return err('sqlCode etc. not numeric\nsqlCa =' sqlCaMsg())
if digits() < 10 then
numeric digits 10
sqlCa = 'SQLCA ' || d2c(136, 4) || d2c(sqlCode, 4) ,
|| d2c(min(70, length(sqlErrMc)), 2)left(sqlErrMc, 70) ,
|| left(sqlErrP, 8) ,
|| d2c(sqlErrD.1, 4)d2c(sqlErrD.2, 4)d2c(sqlErrD.3, 4) ,
|| d2c(sqlErrD.4, 4)d2c(sqlErrD.5, 4)d2c(sqlErrD.6, 4) ,
|| sqlWarnCat() || sqlState
if length(sqlCa) <> 136 then
call err 'sqlCa length' length(sqlCa) 'not 136' ,
'\n'sqlCaMsg() '==>' ca', hex='c2x(ca)
return sqlCa
endProcedure sqlRx2Ca
/*--- extract the fields from the SqlCA and put it to rexx vars ------*/
sqlCA2Rx: procedure expose m. ,
sqlCode sqlErrMc sqlErrP sqlErrD. sqlWarn. sqlState
parse arg ca
numeric digits 10
if length(ca) < 136 | c2d(substr(ca, 9, 4), 4) <> 136 then
call err 'bad sqlCa len' length(ca) 'not 136:' ca', hex='c2x(ca)
sqlCode = c2d(substr(ca, 13 ,4), 4)
sqlErrMC = substr(ca, 19, c2d(substr(ca, 17, 2), 2))
sqlErrP = substr(ca, 89, 8)
do ix=1 to 6
sqlErrD.ix = c2d(substr(ca, 93 + 4 * ix, 4), 4)
end
do ix=0 to 10
sqlWarn.ix = substr(ca, 121 + ix, 1)
end
sqlState = substr(ca, 132, 5)
return sqlCode
endProcedure sqlCA2Rx
/*--- concat the sql warnings with Separator sep --------------------*/
sqlWarnCat: procedure expose m. sqlWarn.
parse arg sep
return sqlWarn.0 || sep,
|| sqlWarn.1||sqlWarn.2||sqlWarn.3||sqlWarn.4||sqlWarn.5||sep ,
|| sqlWarn.6||sqlWarn.7||sqlWarn.8||sqlWarn.9||sqlWarn.10||sep
endProcedure sqlWarnCat
/*--- make the text for sqlWarnings ----------------------------------*/
sqlMsgWarn: procedure expose m. sqlWarn.
r = ''
text =' 1=W var truncated, 1=S scrollable, 1=N nonScrollable,' ,
'2=W nulls in aggregate,' ,
'3=W more cols than vars,' ,
'3=Z more result sets than locators,' ,
'4=W no where, 4=D sensitive dynamic, 4=I insensitive,' ,
'4=S sensitive static,' ,
'5=W not valid sql, 5=1 readOnly, 5=2 readDelete,' ,
'5=3 readDeleteUpdate,' ,
'6=W day changed to month range,' ,
'7=W dec digits truncated,' ,
'8=W char substituted,' ,
'9=W arith excep in count, 9=Z multipe result sets,' ,
'10=W char conversion err in ca,'
do wx = 1 to 10
w = sqlWarn.wx
if w = ' ' then
iterate
t = wx'='w
cx = pos(' 'wx'='w' ', text)
ex = pos(',' , text, cx + 1)
if cx > 0 & ex > cx then
r = r substr(text, cx+1, ex-cx)
else
r = r wx'='w '?,'
end
r = strip(r, 't', ',')
if r = '' & sqlwarn.0 <> '' then
call err 'sqlWarn.0='sqlWarn.0 'but all warns empty'
return r
endProcedure sqlMsgWarn
/*--- show in the source src the point pos (where error occured)
a few lines from src around pos and arrow to pos ----------*/
sqlMsgSrcPos: procedure expose m.
parse arg src, pos
liLe = 68
liCn = 3
afLe = 25
t1 = space(left(src, pos), 1)
t2 = left(' ', substr(src, pos, 1) == ' ' ,
| substr(src, pos+1, 1) == ' ') ,
|| space(substr(src, pos+1), 1)
afLe = min(afLe, length(t2))
if length(t1) + afLe > liLe * liCn then
t1 = '...'right(t1, liLe * liCn - afLe -3)
else if length(t1)+length(t2) > liLe then
t1 = left(' ', (liCn * liLe - length(t1) -afLe) // liLe)||t1
pL = length(t1) // liLe
if length(t2) <= liLe-pL then
tx = t1 || t2
else
tx = t1 || left(t2, liLe-pL-3)'...'
res = '\nsrc' strip(substr(tx, 1, liLe), 't')
do cx=1+liLe by liLe to length(tx)
res = res || '\n +' strip(substr(tx, cx, liLe), 't')
end
loc = 'pos' pos 'of' length(src)
if length(loc)+6 < pL then
return res'\n >' right('>>>'loc'>>>', pL)
else
return res'\n >' left('', pL-1)'<<<'loc'<<<'
endProcdedure sqlMsgSrcPos
/*--- get the hostVars in the sql in src and the word before ---------*/
sqlHostVars: procedure expose m.
parse arg src, cnt, st
cx = 1
sx = 1
do cnt
cx = pos(':', src, cx) + 1
if cx < 2 then
leave
if pos(substr(src, cx, 1), m.ut.alfRexN1) > 0 then
iterate
ex = verify(src, m.ut.alfRex, 'n', cx)
if ex < 1 then
m.st.var.sx = substr(src, cx)
else
m.st.var.sx = substr(src, cx, ex - cx)
if m.st.var.sx == '' | length(m.st.var.sx) > 100 then
iterate
/* search word before */
do bE = cx-2 by -1 to 1 ,
while substr(src, bE, 1) == ' '
end
do bB = bE by -1 to max(1, bE-20),
while pos(substr(src, bB, 1), m.ut.alfa) > 0
end
if bB < bE & bB >= 0 then
m.st.bef.sx = substr(src, bB+1, bE-bB)
else
m.st.bef.sx = ''
sx = sx + 1
end
m.st.0 = sx-1
return sx
endProcedure sqlHostVars
/*--- find the name of hostvar, by index or by before ----------------*/
sqlHostVarFind: procedure expose m.
parse arg st, fnd
if datatype(fnd, 'n') & fnd <= m.st.0 then
return m.st.var.fnd
do ix=1 to m.st.0
if translate(m.st.bef.ix) = fnd then
return m.st.var.ix
end
return ''
endSubroutine sqlHostVarFind
/* copy sqlRx end **************************************************/
/* copy csi begin ***************************************************
csi interface: see dfs managing catalogs appendix c
returncode/reason see message IDC3009I
**********************************************************************/
/*--- specify dsn mask and fields to start a csi catalog search --------
arguments:
m objectPointer
dsnMask specifies the dsns with wildcards:
% 1 character
* 0 - n character in one level
** 0 - n levels
fields a (space separated) list of field names -------------*/
csiOpen: procedure expose m.
parse arg m, dsnMask, fields
m.m.fld.0 = words(fields)
ffix = d2c(m.m.fld.0, 2)
do x=1 to m.m.fld.0
m.m.fld.x = translate(word(fields, x))
ffix = ffix || left(m.m.fld.x, 8)
end
if dsnMask \== '' & pos('*', dsnMask) < 1 then
dsnMask = dsnMask'.**'
m.m.filt = left(dsnMask, 149) ,
|| left('Y', 3) , /* resume offset 149 */
|| ffix /* csiNumEn offset 152 */
WORKLEN = 1024 * 64
m.m.work = D2C(WORKLEN,4) || COPIES('00'X,WORKLEN-4)
m.m.pos = workLen + 1
return
endProcedure csiOpen
/*--- put the next dsn into m.o and m.o.* (for other fields)
return 1 if next dsn exists 0 otherwise ------------------------*/
csiNext: procedure expose m.
parse arg m, o
usedL = C2D(SUBSTR(m.m.work,9,4)) /* GET AMOUNT OF WORK AREA USED */
px = m.m.pos
do forever
if px > usedL then do
if substr(m.m.filt, 150, 1) \== 'Y' then do
m.m.pos = px
m.o = ''
return 0
end
reason = left('', 4)
ADDRESS LINKPGM 'IGGCSI00 reason m.'m'.filt m.'m'.work'
if rc == 0 & substr(reason, 3, 2) == '0000'x then
nop
else if rc == 4 & substr(reason, 3, 2) == '0464'x then
say 'data set entry with error'
else
call err 'call csi returns' rc,
'rc' c2d(substr(reason, 4,1)),
'reason' c2d(substr(reason, 3,1)),
'module' substr(reason, 1,2)
usedL = C2D(SUBSTR(m.m.work,9,4)) /* GET WORK AREA USED */
numFD = C2D(SUBSTR(m.m.work,13,2)) /* no flds + 1 */
if numFd <> m.m.fld.0 + 1 then
call err 'csiNumFd' numFd 'not' m.m.fld.0 '+' 1
px = 15
iterate
end
eType = substr(m.m.work, px+1, 1)
m.o = strip(substr(m.m.work, px+2, 44), 't')
flag = substr(m.m.work, px, 1)
/* say 'eType' eType m.o 'flag' c2x(flag) */
if eType == '0' then do
if flag \== '00'x & flag \== '40'x then
call err 'flag' c2x(flag) 'for catalog' m.o
px = px + 50 /* length of catalog entry */
iterate
end
else do
if \ abbrev(x2b(c2x(flag)), '101') then
call err 'call csi entry flag' x2b(c2x(flag)),
'rc' c2d(substr(m.m.work, px+49,1)),
'reason' c2d(substr(m.m.work, px+48,1)),
'module' substr(m.m.work, px+46, 2),
'for entry' m.o,
'see qw IDC3009I'
py = px + 46
tl = c2d(substr(m.m.work, py, 2))
pl = py + 4
pf = py + m.m.fld.0 * 2 + 4
do fx = 1 to m.m.fld.0
fi = m.m.fld.fx
fl = c2d(substr(m.m.work, pl, 2))
m.o.fi = substr(m.m.work, pf, fl)
if fi = 'MGMTCLAS' then
m.o.fi = substr(m.o.fi, 3, c2d(left(m.o.fi ,2)))
else if wordPos(fi, 'COMUDSIZ NOBYTTRK') > 0 then
m.o.fi = c2d(m.o.fi)
pf = pf + fl
pl = pl + 2
end
if py + tl <> pf then
call err 'length mismatch for entry' m.o
m.m.pos = pf
return 1
end
end
endProcedure csiNext
/*--- if dsn is arcived return 'arcive'
if dsn is tape return 'tape'
otherwise return managment class ------------------------------*/
csiArcTape: procedure expose m.
parse arg vo, cl, dt, dsn
if vo = '' then
say err '||| no volume for dsn' dsn
else if vo = 'ARCIVE' then
res = 'arcive'
else if cl <> '' then
res = cl
else if abbrev(vo, 'SHR') then
res = 'SHR'
else
res = 'tape'
if res = 'arcive' then
return res
/*if abbrev(res, 'ar') \= abbrev(dt, '00'x) , */
if abbrev(res, 'ta') \= abbrev(c2x(left(dt, 1)), '7') ,
| (left(res, 1) >= 'A') \= abbrev(dt, '30'x) then
say '||| mismatch cl' cl 'vo' vo 'dt' c2x(dt) 'dsn' dsn
return res
endProcedure csiArcTape
/* copy csi end ******************************************************/
/* copy csm begin ******************************************************
interface to csm,
it is integrate with adrTso, eg. dsnAlloc , 'RZ3/..' uses csm
***********************************************************************/
adrCsm:
return adrTso('csmExec' arg(1), arg(2))
endProcedure adrCsm
csmCopy: procedure expose m.
parse arg csnFr, csnTo, retOk
if dsnGetMbr(csnTo) \= '' ,
& dsnGetMbr(csnFr) <> dsnGetMbr(csnTo) then
call err 'member rename' csnFr 'to' csnTo
parse value csmSysDsn(csnFr) with sysFr '/' dsnFr
parse value csmSysDsn(csnTo) with sysTo '/' dsnTo
if sysTo = '*' then do
old = sysDsn("'"dsnTo"'")
end
else if sysFr = '*' then do
pdsTo = dsnSetMbr(dsnTo)
al = "SYSTEM("sysTo") DDNAME(COPYTo)",
"DATASET('"pdsTo"') DISP(SHR)"
alRes = dsnAlloc(systo'/'pdsTo, ,'COPYTO', '*')
if datatype(alRes, 'n') then do
/* wir müssen es selbst allozieren csmxUtil
vergisst management class ||||| */
say 'could not allocate' al
say 'trying to create'
rc = listDsi("'"dsnSetMbr(dsnFr)"' SMSINFO")
if rc = 0 then
mv = ''
else if rc = 4 & sysReason = 19 then do
mv = 'UNITCNT(30)'
say 'multi volume' mv
end
else if rc \= 0 then
call err 'listDsi rc' rc 'reason' sysReason,
sysMsgLvl1 sysMsgLvl2
al = left(al, length(al)-4)'CAT)'
if right(sysDsSms, 7) == 'LIBRARY' ,
| abbrev(sysDsSms, 'PDS') then
al = al 'DSNTYPE(LIBRARY)'
if sysUnits = 'TRACK' then
sysUnits = 'TRACKS'
al = al "DSORG("sysDSorg") MGMTCLAS("sysMgmtClass")",
"RECFM("sysREcFM") LRECL("SYSLRECL")",
"blksize("sysBLkSIZE")",
"SPACE("sysPrimary"," sysSeconds")" sysUnits mv
call adrCsm "allocate" al
end
call tsoFree word(alRes, 2)
end
c = "'COPY" sysFr"/''"dsnFr"'' TO" ,
sysTo"/''"dsnSetMbr(dsnTo)"'' REPLACE'"
csmRc = adrTso("exec 'CSM.RZ1.P0.EXEC(CSRXUTIL)'" c , retOk)
if sysTo = '*' & old <> 'OK' then do
/* csm normally does not set mgmtclass - avoid delete | */
call adrTso "ALTER '"dsnTo"' mgmtclas(COM#A091)"
end
return csmRc
endProcedure csmCopy
csmAlloc: procedure expose m.
parse arg dsn dd disp rest ':' nn, retRc
sys = ''
a2 = ''
parse value csmSysDsn(dsn) with sys '/' dsn
if disp = '' then
disp = 'shr'
al = "SYSTEM("sys") DDNAME("dd")"
if dsn <> '' then do
a2 = "DATASET('"dsnSetMbr(dsn)"')"
mbr = dsnGetMbr(dsn)
if mbr <> '' then
a2 = a2 'MEMBER('mbr')'
end
if abbrev(disp, 'SYSOUT(') then
a2 = a2 disp
else
a2 = a2 "DISP("disp")"
if disp = 'NEW' and nn \== '' then
a2 = a2 dsnCreateAtts( , nn, 1)
if retRc <> '' | nn = '' then
return adrCsm('allocate' al a2 rest, retRc)
do retry=0 by 1
alRc = adrCsm('allocate' al a2 rest, '*')
if alRc = 0 then
return 0
if retry > 0 | nn = '' | wordPos(disp, 'OLD SHR') < 1 then
return err('cmsAlloc rc' alRc 'for' al rest)
say 'csmAlloc rc' alRc 'for' al a2 rest '...trying to create'
nn = al 'disp(cat)' dsnCreateAtts(dsn, nn, 1)
call adrCsm 'allocate' nn
call adrTso 'free dd('dd')'
end
endProcedure csmAlloc
csmSysDsn: procedure expose m.
parse upper arg dsn, withStar
if pos('/', dsn) < 1 then
sys = '*'
else
parse var dsn sys '/' dsn
if sys <> '' & sys <> '*' & sys <> sysvar(sysnode) then
return sys'/'dsn
else if withStar == 0 then
return dsn
else
return '*/'dsn
endProcedure csmSysDsn
/*--- execute a rexx (under tso) in another rz
here we use rexx TPSYSIKJ which was written for
jcl procedure RM@IKJ01
arguments
rz which rz to run rexx
proc the (remote) procedure library to use
opt options
cmd the tso command to execute
----------------------------------------------------------------------*/
/*--- execute a rexx (under tso) in another rz
directly (without TPSYSIKJ) --------------------------------*/
csmExRx: procedure expose m.
parse arg rz, proc, opt, cmd
do cx=1 to (length(cmd)-1) % 68
cmd.cx = substr(cmd, 68*cx-67,68)'-'
end
cmd.cx = substr(cmd, 68*cx-67)
cmd.0 = cx
timeout = 111
if 0 then do
call adrTso 'free ed(rmtSys)' ,'*'
call tsoFree tsoDD(rmtsPrt, 'a')
call adrTso 'free dd(rmtsIn)','*'
call adrTso 'free dd(sysproc)' ,'*'
end
call dsnAlloc rz"/"proc "dd(rmSyPro) rmtDDn(sysProc)"
call dsnAlloc rz"/tmp.tsin new dd(rmTsIn) rmtDdn(sysTsIn) ::f "
call tsoOpen rmTsIn, 'w'
call writeDD rmTsIn, cmd.
call tsoClose rmtsin
call dsnAlloc rz"/tmp.prt new dd(rmtsprt) rmtDdn(sysTsPrt)",
"::f133"
call dsnAlloc rz"/tmp.rmt new dd(rmtSys) timeout("timeout")"
say '??? cmsappc start' timeout
call adrtso "csmappc start pgm(csmexec)" ,
"parm('select tsocmd(''csmappc allocate plu(*.rmtSys)" ,
"tpname(sysikj) dealloc '')')",
"timeout("timeOut")", '*'
if rc <> 0 | appc_rc <> 0 then do
ee = 'csm tso exec rc='rc 'appc_rc='appc_rc
say ee
say ' rexx rz='rz 'proc='proc 'opt=opt'
say ' cmd='cmd
call csmappcRcSay ggTsoCmd
call readDD 'rmTsPrt', p.
call tsoClose rmtsPrt
say p.0 'tso output lines'
do px=1 to p.0
say ' ' strip(p.px, 't')
end
call err ee
end
call tsoFree rmSyPro rmtsPrt rmtSys rmtsIn
return
/*--- sys the re and result variables from csmAppcRc -----------------*/
csmappcRcSay: procedure expose appc_rc appc_reason appc_msg. ,
appc_state_c appc_state_f
parse arg cmd
say 'rc='appc_rc 'reason='appc_reason ,
'state_c='appc_state_c appc_state_f
say ' for' cmd
do ix=1 to appc_msg.0
say ' ' appc_msg.ix
end
return appc_rc
endProcedure csmappcRcSay
/* copy csm end *******************************************************/
/* copy adrIsp begin *************************************************/
/**********************************************************************
lmd: catalog read
call sequence: lmdBegin, lmdNext*, lmdEnd
mit lmd service (mit save in file und read,
weil list zu langsam und listcat abstürzt)
1. arg (grp) als group dataset für lmd save
und dd name für file read
***********************************************************************/
lmdBegin: procedure expose m.
parse arg grp, lev
call adrIsp 'lmdinit listid(lmdId) level('lev')'
res = adrIsp('lmdlist listid(&lmdId) option(save) group('grp')', 4)
call adrIsp 'lmdfree listid(&lmdId)'
if res = 0 then do
call trc timing() 'lmdlist save' grp lev
call adrTso 'alloc dd('grp') shr dsn('grp'.datasets)'
end
else do
call trc 'no datasets found' timing() 'lmdlist save' grp lev
call adrTso 'alloc dd('grp') dummy'
end
call tsoOpen grp, 'R'
return /* end lmdBegin */
lmdNext:
parse arg ggGrp, ggSt, withVolume
if \ readDD(ggGrp, ggSt) then
return 0
if withVolume \== 1 then
do ggIx=1 to value(ggSt'0')
x = value(ggSt || ggIx, word(value(ggSt || ggIx), 1))
end
return 1
endSubroutin lmdNext
lmdEnd: procedure expose m.
parse arg grp
call tsoClose grp
call adrTso 'free dd('grp')'
return /* end lmdEnd */
lmd: procedure expose m.
parse arg lev, withVol
call lmdBegin gg1, lev
do while lmdNext(gg1, q., withVol)
do x=1 to q.0
call out q.x
end
end
call lmdEnd gg1
return
endProcedure lmd
/**********************************************************************
member list of a pds:
call sequence x=lmmBegin(dsn) lmmNext(x) * lmmEnd(x)
***********************************************************************/
lmm: procedure expose m.
parse arg dsn
id = lmmBegin(dsn)
do ix=1 by 1
m = lmmNext(id)
if m = '' then
leave
call out m
end
call lmmEnd id
return
endProcedure lmm
lmmBegin: procedure expose m.
parse arg dsn
mbr = dsnGetMbr(dsn)
pds = dsnSetMbr(dsn, )
call adrIsp "LMINIT DATAID(lmmId) DATASET('"pds"') ENQ(SHRW)"
call adrIsp "LMOPEN DATAID("lmmId") OPTION(INPUT) "
res = lmmId
if mbr <> '' then
res = res 'pattern('mbr')'
return res
endProcedure lmmBegin
lmmEnd: procedure expose m.
parse arg lmmId opt
call adrIsp "LMMLIST DATAID("lmmId") option(free)", 8
call adrIsp "LMCLOSE DATAID("lmmId")"
call adrIsp "LMFREE DATAID("lmmId")"
return
endProcedure lmmEnd
lmmNext: procedure expose m.
parse arg lmmId opt
if adrIsp("LMMLIST DATAID("lmmid")" ,
"OPTION(LIST) MEMBER(Mbr)" opt, 4 8) = 0 then
return strip(mbr)
else
return ''
endProcedure lmmNext
lmmRm: procedure expose m.
parse arg dsn, mbrs
mbrs = dsnGetMbr(dsn) mbrs
pds = dsnSetMbr(dsn, )
call adrIsp "LMINIT DATAID(lmmId) DATASET("pds") ENQ(SHRW)"
call adrIsp "LMOPEN DATAID("lmmId") OPTION(OUTPUT) "
err = ''
do wx=1 to words(mbrs)
m1 = word(mbrs, wx)
rr = adrIsp("lmmDel dataid("lmmId") member("m1")", 0 8 12)
if rc = 0 then
say 'removed' m1 'from' pds
else if rc = 8 then
say 'not found' m1 'in' pds
else do
err = 'error deleting' m1 'in' pds 'rc' rr strip(zerrlm)
say err
leave
end
end
call adrIsp "LMCLOSE DATAID("lmmId")"
call adrIsp "LMFREE DATAID("lmmId")"
if err <> '' then
call err err
return
endProcedure lmmRm
/*--- address ispf with error checking -------------------------------*/
adrIsp:
parse arg ggIspCmd, ggRet
address ispexec ggIspCmd
if rc = 0 then return 0
else if ggRet == '*' then return rc
else if wordPOS(rc, ggRet) > 0 then return rc
else
call err 'adr ispExec rc' rc 'in' ggIspCmd':' strip(zerrlm)
endSubroutine adrIsp
/*--- address editor with error checking -----------------------------*/
adrEdit:
parse arg ggEditCmd, ggRet
address isrEdit ggEditCmd
if rc = 0 then return 0
else if ggRet == '*' then return rc
else if wordPOS(rc, ggRet) > 0 then return rc
else
call err 'adr isrEdit rc' rc 'for' ggEditCmd
endSubroutine adrEdit
/* copy adrIsp end *************************************************/
/* copy adrTso begin *************************************************/
/*--- send ggTsoCmd to tso, fail if rc <> 0 or not listed in ggRet ---*/
adrTso:
parse arg ggTsoCmd, ggRet
address tso ggTsoCmd
if rc == 0 then return 0
else if ggRet == '*' then return rc
else if wordPos(rc, ggRet) > 0 then return rc
else
call err 'adrTso rc' rc 'for' ggTsoCmd
return /* end adrTso */
/*--- format dsn from tso format to jcl format -----------------------*/
dsn2jcl: procedure expose m.
parse upper arg dsn ., addPrefix
if left(dsn,1) = "'" then
return strip(dsn, 'b', "'")
sp = sysvar('SYSPREF')
if sp == '' then
sp = userid()
cx = pos('~', dsn)
if cx < 1 & addPrefix == 1 then
return sp'.'dsn
do while cx \== 0
le = left(dsn, cx-1)
ri = substr(dsn, cx+1)
if right(le, 1) == '.' | left(ri, 1) == '.' then
dsn = le || sp || ri
else
dsn = le || left('.', le \== '') || sp ,
|| left('.', ri \== '') || ri
cx = pos('~', spec, cx)
end
return dsn
endProcedure dsn2Jcl
/*--- format dsn from jcl format to tso format -----------------------*/
jcl2dsn: procedure expose m.
parse arg dsn .
return "'"dsn"'"
endProcedure jcl2dsn
dsnSetMbr: procedure expose m.
parse arg dsn, mbr
bx = pos('(', dsn)
if bx > 0 then
dsn = strip(left(dsn, bx-1))
if mbr <> '' then
dsn = dsn'('strip(mbr)')'
return dsn
endProcedure dsnSetMbr
dsnGetMbr: procedure expose m.
parse arg dsn
lx = pos('(', dsn)
rx = pos(')', dsn, lx+1)
if lx < 1 then
return ''
else if lx < rx then
return substr(dsn, lx+1, rx-lx-1)
else
return strip(substr(dsn,lx+1))
endProcedure dsnGetMbr
/**********************************************************************
io: read or write a dataset with the following callsequences:
read: tsoOpen...'R', readDD*, tsoClose
write: tsoOpen...'W', writeDD*, tsoClose
readDD returns true if data read, false at eof
do not forget that open is mandatory to write empty file|
***********************************************************************/
/*--- open dd for read (rw='R') or write (rw='W') --------------------*/
tsoOpen: procedure expose m.
parse upper arg dd, rw
return adrTso('execio' 0 'disk'RW tsoDD(dd, 'o') '(open)')
return /* end tsoOpen */
/*--- close dd -----------------------------------------------------*/
tsoClose: procedure expose m.
parse upper arg dd
return adrTso('execio 0 diskW' dd '(finis)')
endProcedure tsoClose
/*--- read from DD ggDD into ggSt, return false at eof ---------------*/
readDD:
parse arg ggDD, ggSt, ggCnt
if ggCnt = '' then
ggCnt = 100
call adrTso 'execio' ggCnt 'diskR' ggDD '(stem' ggSt')', 2
return (value(ggSt'0') > 0)
return /* end readDD */
/*--- write to gg ggDD from stem ggSt, ggCnt records -----------------*/
writeDD:
parse arg ggDD, ggSt, ggCnt
if ggCnt == '' then
ggCnt = value(ggst'0')
call adrTso 'execio' ggCnt 'diskW' ggDD '(stem' ggSt')'
return
endSubroutine writeDD
/*--- readNx: read next line, using buffer ---------------------------*/
/*--- begin: allocate dsnSpec and ini ------------------------ -------*/
readNxBegin: procedure expose m.
parse arg m, m.m.dsn, m.m.dd, m.m.Cnt
if m.m.dd = '' then
m.m.dd = 'DDNX*'
if m.m.cnt = '' then
m.m.cnt = 1000
m.m.cx = m.m.cnt + 999
m.m.buf0x = 0
m.m.0 = 0
parse value dsnAlloc('dd('m.m.dd')' m.m.dsn) with m.m.dd m.m.free
call tsoOpen m.m.dd, 'R'
return m
endProcedure readDDNxBegin
/*--- return the stem of the next line, or '' at end -----------------*/
readNx: procedure expose m.
parse arg m
m.m.cx = m.m.cx + 1
if m.m.cx <= m.m.0 then
return m'.'m.m.cx
m.m.buf0x = m.m.buf0x + m.m.0
if \ readDD(m.m.dd, 'M.'m'.', m.m.cnt)then
return ''
m.m.cx = 1
return m'.1'
endProcedure readDDNx
/*--- return the stem of the curr line, '' at end --------------------*/
readNxCur: procedure expose m.
parse arg m
if m.m.cx <= m.m.0 then
return m'.'m.m.cx
else
return ''
endProcedure readNxCur
/*--- return the position (line number) of reader
plus le characters of the current line (default 50) ------*/
readnxPos: procedure expose m.
parse arg m, le
li = m'.'m.m.cx
li = strip(m.li, 't')
if arg() < 2 then
le = 50
if le < 1 then
li = ''
else if length(li) <= le then
li = ':' li
else
li = ':' left(li, le-3)'...'
return 'line' (m.m.buf0x + m.m.cx)li
endProcedure readnxPos
/*--- close and deallocate ------------------------------------------*/
readNxEnd: procedure expose m.
parse arg m
call tsoClose m.m.dd
call tsoFree m.m.free
return
endProcedure readDDNxEnd
/*--- standardise a dsn spec
word1 dsName or -
word2 dd or -
word3 disp or -
word4 to first : attributes in tso format
after first : attributes for new allocation
----------------------------------------------------------------------*/
dsnSpec: procedure expose m.
parse upper arg spec
rr = '' /* put leading - in separate words */
do sx=1 while words(rr) < 3 & wx \= ''
wx = word(spec, sx)
do while abbrev(wx, '-') & words(rr) < 3
wx = substr(wx, 2)
rr = rr '-'
end
rr = rr wx
end
spec = rr subWord(spec, sx)
na = ''
dd = ''
di = ''
if left(spec, 1) = '&' then /* external spec is handled ok */
spec = strip(substr(spec, 2))
do wx=1 by 1
w = word(spec, wx)
if w = '' | abbrev(w, '.') | abbrev(w, ':') then
leave
else if wordPos(w, 'OLD SHR MOD NEW')>0 | abbrev(w, 'SYSO') then
di = w
else if w = 'CATALOG' then
di = di w
else if abbrev(w, 'DD(') then
dd = substr(w, 4, length(w)-4)
else if abbrev(w, 'DSN(') then
na = strip(substr(w, 5, length(w)-5))
else if na == '' then
na = dsn2jcl(w)
else if pos('(', w) > 0 then
leave
else if dd == '' then
dd = w
else if di == '' then
di = w
else
leave
end
if na == '' then
na = '-'
else if abbrev(na, "'") then
na = substr(na, 2, length(na)-2)
if dd == '' then dd = '-'
if di == '' then di = '-'
re = subword(spec, wx)
if abbrev(re, '.') then
re = substr(re, 2)
return na dd di re
endProcedure dsnSpec
/*--- alloc a dsn with dsnAlloc
if the dsn is inuse wait and retry
until either the allocation is successfull
or the timeout occurs --------------------------------------*/
dsnAllocWait: procedure expose m.
parse upper arg spec, pDi, pDD, timeOut
x = max(1, arg() - 1)
do rt=0
m.adrTsoAl.1 = ''
m.adrTsoAl.2 = ''
m.adrTsoAl.3 = ''
call outtrap m.adrTsoAl.
res = dsnAlloc(spec, pDi, pDD, '*')
call outtrap off
if \ datatype(res, 'n') then
return res
msg = m.adrTsoAl.1'\n'm.adrTsoAl.2'\n'm.adrTsoAl.3
if rt > timeOut & timeOut \== '' then
return err('timeout allocating' spec time() '\n'msg)
if pos('DATA SET IS ALLOCATED TO ANOTHER', msg) < 1 then
return err('allocating' spec'\n'msg)
say time() 'sleep and retry alloc' spec
call sleep 1, 0
end
endProcedure dsnAllocWait
/*--- alloc a dsn or a dd
spec '-'<ddName>
datasetName? disposition? '.'? attributes? (':' newAtts)?
disp default disposition
dd default dd name
retRc erlaubte ReturnCodes (leer = 0)
returns if ok then ddName <rexx for free> otherwise rc -----*/
dsnAlloc: procedure expose m.
parse upper arg spec, pDi, pDD, retRc
parse value dsnSpec(spec) with na dd di rest
if na = '-' then
m.dsnAlloc.dsn = ''
else
m.dsnAlloc.dsn = na
if dd == '-' & pDD \== '' then
dd = pDD
if dd == '-' then
dd = 'DD*'
dd = tsoDD(dd, 'a')
if na == '-' & di == '-' & rest = '' then
return dd
if di = '-' then
if pDi == '' then
di = 'SHR'
else
di = pDi
if pos('(', na) < 1 then
nop
else if di = 'MOD' then
call err 'disp mod for' na
else
di = 'SHR'
if pos('/', na) > 0 then
rx = csmAlloc(na dd di rest, retRc)
else
rx = tsoAlloc(na dd di rest, retRc)
if rx = 0 then
return dd dd
else
return rx
endProcedure dsnAlloc
/*--- find a free dd with prefix dd ----------------------------------*/
tsoDD: procedure expose m.
parse arg dd, f
if symbol('m.tso.ddAlloc') \== 'VAR' then do
call errIni
m.tso.ddAlloc = ''
m.tso.ddOpen = ''
end
if m.err.ispf then
address ispExec 'vget wshTsoDD shared'
else
wshTsoDD = m.tso.ddAlloc
if f == '-' then do
ax = wordPos(dd, m.tso.ddAlloc)
if ax > 0 then
m.tso.ddAlloc = delWord(m.tso.ddAlloc, ax, 1)
ox = wordPos(dd, m.tso.ddOpen)
if ox > 0 then
m.tso.ddOpen = delWord(m.tso.ddOpen , ox, 1)
if ax < 1 & ox < 1 then
call err 'tsoDD dd' dd 'not used' m.tso.ddAlloc m.tso.ddOpen
sx = wordPos(dd, wshTsoDD)
if sx > 0 then
wshTsoDD = delWord(wshTsoDD , sx, 1)
end
else if f == 'o' then do
if wordPos(dd, m.tso.ddOpen m.tso.ddAlloc) < 1 then
m.tso.ddOpen = strip(m.tso.ddOpen dd)
end
else if f <> 'a' then do
call err 'tsoDD bad fun' f
end
else do
if right(dd, 1) = '*' then do
dd = left(dd, length(dd)-1) || m.err.screen
cx = lastPos(' 'dd, ' 'm.tso.ddAlloc)
if cx > 0 then do
old = word(substr(m.tso.ddAlloc, cx), 1)
if old = dd then
dd = dd'1'
else if datatype(substr(old, length(dd)+1), 'n') then
dd = dd || (substr(old, length(dd)+1) + 1)
else
call err 'tsoDD old' old 'suffix not numeric dd' dd
end
end
if wordPos(dd, m.tso.ddAlloc) < 1 then
m.tso.ddAlloc = strip(m.tso.ddAlloc dd)
if wordPos(dd, wshTsoDD) < 1 then
wshTsoDD = strip(wshTsoDD dd)
end
if m.err.ispf then
address ispExec 'vPut wshTsoDD shared'
return dd
endProcedure tsoDD
tsoAlloc: procedure expose m.
parse arg na dd disp rest ':' nn, retRc
c = 'alloc dd('dd')' disp
if na \== '-' then
c = c "DSN('"na"')"
else if disp = 'NEW' and nn \== '' then
c = c dsnCreateAtts(,nn)
call outtrap m.adrTsoAl.
alRc = adrTso(c rest, '*')
call outtrap off
if alRc = 0 then
return 0
if nn \= '' & wordPos(disp, 'OLD SHR') > 0 ,
& sysDsn("'"m.dsnAlloc.dsn"'") == 'DATASET NOT FOUND' then do
say 'tsoAlloc creating' c rest ':'nn
call adrTso 'alloc dd('dd') new catalog' dsnCreateAtts(na, nn)
call adrTso 'free dd('dd')'
return tsoAlloc(na dd disp rest, retRc)
end
say 'rc='alRc 'for' c rest
call saySt adrTsoal
if retRc = '*' | wordPos(alRc, retRc) > 0 then
return alRc
call err 'tsoAlloc rc' alRc 'for' c rest
endProcedure tsoAlloc
tsoAtts: procedure expose m.
parse arg dsn
rc = listDsi("'"dsn"' SMSINFO")
if rc = 0 then
mv = ''
else if rc = 4 & sysReason = 19 then do
mv = 'UNITCNT(30)'
say 'multi volume' mv
end
else if rc ^= 0 then
call err 'listDsi rc' rc 'reason' sysReason,
sysMsgLvl1 sysMsgLvl2
al = 'CAT'
al = ''
if right(sysDsSms, 7) == 'LIBRARY' ,
| abbrev(sysDsSms, 'PDS') then
al = al 'DSNTYPE(LIBRARY)'
if sysUnits = 'TRACK' then
sysUnits = 'TRACKS'
return al "DSORG("sysDSorg") MGMTCLAS("sysMgmtClass")",
"DATACLAS("sysDataClass")" ,
"RECFM("translate('1 2 3', ' 'sysREcFM, ' 123')")",
"LRECL("SYSLRECL")",
"SPACE("sysPrimary"," sysSeconds")" sysUnits mv
/* "blksize("sysBLkSIZE")" removed 3.4.13: let sms do the magic */
endProcedure tsoAtts
tsoFree: procedure expose m.
parse arg ddList, ggRet
do dx=1 to words(ddList)
dd = word(ddList, dx)
call adrTso 'free dd('dd')', ggRet
call tsoDD dd, '-'
end
return
endProcedure tsoFree
tsoFreeAll: procedure expose m.
all = m.tso.ddAlloc m.tso.ddOpen
do ax = 1 to words(all)
call adrTso 'execio 0 diskW' word(all, ax) '(finis)', '*'
end
m.tso.ddOpen = ''
call tsoFree m.tso.ddAlloc, '*'
return
endProcedure tsoFreeAll
dsnCreateAtts: procedure expose m.
parse arg dsn, atts, forCsm
forCsm = forCsm == 1
aU = ' 'translate(atts)
res = ''
if dsn \== '' then
res = "dataset('"dsnSetMbr(dsn)"')"
if abbrev(atts, '~') then
return res tsoAtts(substr(atts, 2))
if abbrev(atts, ':') then do
parse var atts a1 atts
rl = substr(a1, 3)
if abbrev(a1, ':F') then do
if rl = '' then
rl = 80
recfm='f b'
end
else do
if rl = '' then
rl = 32756
recfm = substr(a1, 2, 1) 'b'
end
res = res "recfm("space(recfm, 1-forCsm)") lrecl("rl")"
end
if pos('(', dsn) > 0 & pos(' DSNTYPE(', aU) < 1 ,
& pos(' DSORG(', aU) < 1 then
res = res 'dsntype(library) dsorg(po)'
if pos(' MGMTCLAS(', aU) < 1 then
res = res 'mgmtclas(COM#A091)'
if pos(' SPACE(', aU) < 1 then
res = res 'space(10, 1000) cyl' || copies('inder', forCsm)
return res atts
endProcedure dsnCreateAtts
/*--- check if a dataset is archive ------------------------------------
returns 'ok' if dataset on disk
'not' if dataset is not catalogued
'arc' if dataset archived
listDsi errorMsg otherwise ------------------*/
dsnArc: procedure expose m.
parse upper arg dsn
lc = listDsi("'"strip(dsn)"' noRecall")
if lc = 0 then
return 'ok'
else if lc=4 & sysReason = 19 then /* multiple volumes */
return 'ok'
else if lc=16 & sysReason = 5 then
return 'notCat'
else if lc=16 & sysReason = 9 then
return 'arc'
else
return 'listDsi cc='lc', sysReason='sysReason ,
'm2='sysMsgLvl2', m1='sysMsgLvl1
endProcedure dsnArc
/*--- read the dataset specified in ggDsnSpec to stem ggSt -----------*/
readDSN:
parse arg ggDsnSpec, ggSt
ggAlloc = dsnAlloc(ggDsnSpec, 'SHR', 'readDsN')
call adrTso 'execio * diskr' word(ggAlloc, 1) '(stem' ggSt' finis)'
call tsoFree word(ggAlloc, 2)
return
endSubroutine readDsn
/*--- write the dataset specified in ggDsnSpec from stem ggSt
write ggCnt records if not empty otherwise ggst0
if ggSay 1 then say ... records written to ... -------------*/
writeDSN:
parse arg ggDsnSpec, ggSt, ggCnt, ggSay
if ggCnt == '' then
ggCnt = value(ggst'0')
ggAlloc = dsnAlloc(ggDsnSpec, 'OLD', 'readDsN')
call adrTso 'execio' ggCnt 'diskw' word(ggAlloc, 1) ,
'(stem' ggSt 'open finis)'
call tsoFree word(ggAlloc, 2)
if ggSay == 1 | m.debug == 1 then
say ggCnt 'records written to' ggDsnSpec
return
endSubroutine writeDsn
copyDSN: procedure expose m.
parse arg frSpec, toSpec, ggSay
parse value dsnAlloc(frSpec, 'SHR', 'FRDD') with frDD frFr
parse value dsnAlloc(toSpec, 'OLD', 'TODD') with toDD toFr
call tsoOpen frDD, 'R'
call tsoOpen toDD, 'W'
cnt = 0
do while readDD(frDD, r.)
call writeDD toDD, r.
cnt = cnt + r.0
end
call tsoClose frDD
call tsoClose toDD
call tsoFree frFr toFr
if ggSay == 1 | m.debug == 1 then
say cnt 'records copied from' frSpec 'to' to toSpec
return
endSubroutine writeDsn
/* copy adrTso end ****************************************************/
/* copy csv begin *****************************************************/
csvIni: procedure expose m.
if m.csv.ini == 1 then
return
m.csv.ini = 1
call jIni
call classNew "n CsvRdr u JRWO, f RDR r", "m",
, "jReset m.m.rdr = arg",
, "jOpen call csvRdrOpen m, opt",
, "jClose call jClose m.m.rdr; call oMutatName m, 'CsvRdr'"
call classNew "n CsvRdrR u CsvRdr", "m",
, "jReadO return csvRdrReadO(m)"
call classNew "n CsvWrt u JRW, f RDR r", "m",
, "jReset m.m.rdr = arg",
, "jOpen call csvWrtOpen m, opt",
, "jClose call jClose m.m.rdr; call oMutatName m, 'CsvWrt'"
call classNew "n CsvWrtR u CsvWrt", "m",
, "jRead return csvWrtRead(m, var)"
return
endProcedure csvIni
/*--- create a new csvRdr --------------------------------------------*/
csvRdr: procedure expose m.
parse arg rdr
return jReset(oNew('CsvRdr'), rdr)
endProcedure csvRdr
/*--- open csvRdr: read first line and create dataClass --------------*/
csvRdrOpen: procedure expose m.
parse arg m
call jOpen m.m.rdr, '<'
if jRead(m.m.rdr, m'.LINE') then do
ff = 'f' repAll(m.m.line, ',', ' v, f ') 'v'
m.m.class = classNew("n* CsvF u" ff)
end
call oMutatName m, 'CsvRdrR'
return
endProcedure csvRdrOpen
/*--- read next line and return derived object -----------------------*/
csvRdrReadO: procedure expose m.
parse arg m
do until m.m.line <> ''
if \ jRead(m.m.rdr, m'.LINE') then
return ''
end
var = oNew(m.m.class)
ff = oClaMet(m.m.class, 'oFlds')
s = m'.SCAN'
call scanSrc s, m.m.line
do fx=1
f1 = substr(m.ff.fx, 2)
if scanString(s, '"') then
m.var.f1 = m.s.val
else do
call scanUntil s, ','
m.var.f1 = m.s.tok
end
if scanEnd(s) then
leave
if \ scanLit(s, ',') then
call scanErr s, ',' expected
end
if fx <> m.ff.0 then
call scanerr s, 'csv cla' m.ff.0 'fields but' cx 'in line'
return var
endProcedure csvRdrReadO
/*--- create a new csvRdr --------------------------------------------*/
csvWrt: procedure expose m.
parse arg rdr
return jReset(oNew('CsvWrt'), rdr)
endProcedure csvWrt
/*--- open csvRdr: read first line and create dataClass --------------*/
csvWrtOpen: procedure expose m.
parse arg m
call jOpen m.m.rdr, '<'
m.m.class = ''
m.m.o1 = ''
call oMutatName m, 'CsvWrtR'
return
endProcedure csvWrtOpen
/*--- read next line and return derived object -----------------------*/
csvWrtRead: procedure expose m.
parse arg m, var
if m.m.o1 == '' then
i1 = jReadO(m.m.rdr)
else do
i1 = m.m.o1
m.m.o1 = ''
end
if i1 == '' then
return 0
if m.m.class == '' then do
m.m.class = objClass(i1)
m.m.o1 = i1
t = ''
ff = oFlds(i1)
do fx=1 to m.ff.0
t = t','substr(m.ff.fx, 2)
end
m.var = substr(t, 2)
return 1
end
else do
t = ''
ff = oFlds(i1)
do fx=1 to m.ff.0
f1 = i1 || m.ff.fx
val = m.f1
if pos(',', val) > 0 | pos('"', val) > 0 then
t = t','quote(val, '"')
else
t = t','val
end
m.var = substr(t, 2)
return 1
end
endProcedure csvWrtRead
/* copy csv end *****************************************************/
/* copy j begin *******************************************************
the j framework
jReset
jOpen
jClose
jRead
jWrite
***********************************************************************/
jRead: procedure expose m.
parse arg m, var
met = objMet(m, 'jRead')
if m.m.jReading then
interpret met
else
return err('jRead('m',' var') but not opened r')
endProcedure jRead
jReadO: procedure expose m.
parse arg m
if arg() > 1 then call err '??? old interface'
met = objMet(m, 'jReadO')
if m.m.jReading then
interpret met
else
return err('jReadO('m',' var') but not opened r')
endProcedure jReadO
jWrite: procedure expose m.
parse arg m, line
met = objMet(m, 'jWrite')
if \ m.m.jWriting then
return err('jWrite('m',' line') but not opened w')
interpret met
return
endProcedure jWrite
jWriteO: procedure expose m.
parse arg m, var
met = objMet(m, 'jWriteO')
if \ m.m.jWriting then
return err('jWriteO('m',' var') but not opened w')
interpret met
return
endProcedure jWriteO
jWriteAll: procedure expose m.
parse arg m, rdr
rdr = o2file(rdr)
met = objMet(m, 'jWriteAll')
if \ m.m.jWriting then
return err('jWriteAll('m',' rdr') but not opened w')
interpret met
return
endProcedure jWriteAll
jWriteNow: procedure expose m.
parse arg m, rdr
rdr = o2file(rdr)
interpret objMet(m, 'jWriteNow')
return
endProcedure jWriteNow
jCat: procedure expose m.
parse arg opt m
if m = '' then do
m = opt
opt = m.j.cWri
end
call jOpen m, opt
do ax=2 to arg()
call jWriteAll m, arg(ax)
end
call jClose m
return m
endProcedure jCat
jWriteNowImpl: procedure expose m.
parse arg m, rdr
call jOpen rdr, m.j.cRead
do while jRead(rdr, line)
call jWrite m, m.line
end
call jClose rdr
return
endProcedure jWriteNow
jWriteNowImplO: procedure expose m.
parse arg m, rdr
call jOpen rdr, m.j.cRead
do while assNN('li', jReadO(rdr))
call jWriteO m, li
end
call jClose rdr
return
endProcedure jWriteNow
/*--- reset JRW: fail if open, initialise ---------------------------*/
jReset: procedure expose m.
parse arg m, arg, arg2, arg3
if m.m.jReading == 1 | m.m.jWriting == 1 then
return err('still open jReset('m',' arg2')')
m.m.jReading = 0
m.m.jWriting = 0
m.m.jUsers = 0
interpret objMet(m, 'jReset')
return m
endProcedure jReset
jOpen: procedure expose m.
parse arg m, opt
met = objMet(m, 'jOpen')
oUsers = m.m.jUsers
if opt = m.j.cRead then do
if m.m.jReading then
nop
else if m.m.jWriting then
return err('already opened for writing jOpen('m',' opt')')
else do
interpret met
m.m.jReading = 1
end
end
else if \ abbrev('>>', opt, 1) then do
return err('bad option' opt 'in jOpen('m',' opt')')
end
else do
if m.m.jWriting then
nop
else if m.m.jReading then
return err('already opened for reading jOpen('m',' opt')')
else do
interpret met
m.m.jWriting = 1
end
end
m.m.jUsers = oUsers + 1
return m
endProcedure jOpen
jClose: procedure expose m.
parse arg m
met = objMet(m, 'jClose')
oUsers = m.m.jUsers
if oUsers = 1 then do
interpret met
m.m.jReading = 0
m.m.jWriting = 0
end
else if oUsers < 1 then
call err 'jClose' m 'but already closed'
m.m.jUsers = oUsers - 1
return m
endProcedure jClose
/*--- cat the lines of the file together, with mid between lines,
fail if not all lines are strings -------------------*/
jCatLines: procedure expose m.
parse arg m, fmt
if abbrev(fmt, '-sql') then
return jCatSql(m, substr(fmt, 5))
else
fmt = '%s%qn %s%qe%q^'fmt
call jOpen m, m.j.cRead
if \ jRead(m, line) then do
call jClose m
return ''
end
res = f(fmt, m.line)
do while jRead(m, line)
res = res || f(fmt'%Qn', m.line)
end
call jClose m
return res || f(fmt'%Qe')
endProcedure jCatLines
/*--- cat the line of a file, using comments
fixline (with token wrapping) or separate lines -------*/
jCatSql: procedure expose m.
parse arg m, fLen
call jCatSqlReset m'.JCATSQL', , jOpen(m, '<'), fLen
res = jCatSqlNext(m'.JCATSQL')
call jClose m
return res
endProcedure jCatSql
jCatSqlReset: procedure expose m.
parse arg m, aSrc, m.m.rdr, m.m.fLen
call jCatSqlNL m, aSrc
return m
endProcedure jCatSqlReset
jCatSqlNL: procedure expose m.
parse arg m
if m.m.rdr \== '' then
if jRead(m.m.rdr, m'.SRC') then do
if m.m.fLen \== '' then
m.m.src = left(m.m.src, m.m.fLen)
else if m.m.src == '' then
m.m.src = ' '
else if substr(m.m.src, length(m.m.src), 1) \== ' ' then
m.m.src = m.m.src' '
m.m.pos = 1
return 1
end
m.m.pos = length(m.m.src)+1
return 0
endProcedure jCatSqlNl
jCatSqlNext: procedure expose m.
parse arg m, stop
sta = 'tt'
res = ''
do forever
do while scanSBEnd(m)
if \ jCatSqlNl(m) then
return strip(res)
end
bx = m.m.pos
sta = scanSql2Stop(m, sta, stop)
s1 = left(sta, 1)
if pos(s1, stop) > 0 then do
if res <> '' then
return strip(res)
end
else if s1 == '-' | s1 == '/' then
res = res' '
else if pos('/', sta) = 0 then
res = res || substr(m.m.src, bx, m.m.pos - bx)
end
/*-------- ?????????????????????
jCatSqlNext?: procedure expose m.
parse arg m, stop
res = ''
bx = m.m.pos
do forever
call scanUntil m, '"''-/'stop
if scanSBEnd(m) then do
res = res || substr(m.m.src, bx)
bx = 0
end
else if substr(m.m.src, m.m.pos, 2) = '--' then do
res = res || substr(m.m.src, bx, m.m.pos-bx)' '
bx = 0
end
else if substr(m.m.src, m.m.pos, 2) = '/*' then do
res = res || substr(m.m.src, bx, m.m.pos-bx)' '
do forever
px = pos('*/', m.m.src, m.m.pos)
if px > 0 then
leave
if \ jCatSqlNL(m) then
return res
end
bx = px+2
m.m.pos = bx
end
else if scanLit(m, "'", '"') then do
c1 = m.m.tok
do while \ scanStrEnd(m, c1)
res = res || substr(m.m.src, bx)
if m.m.fLen \== '' then
if jCatSqlNl(m) then do
bx = m.m.pos
iterate
end
call err 'unclosed' c1 'string:' m.m.src
end
end
else if pos(substr(m.m.src, m.m.pos, 1), stop) > 0 then do
res = strip(res||substr(m.m.src, bx, m.m.pos-bx), 't')
call scanChar m, 1
if res <> '' then
return strip(res)
bx = m.m.pos
end
else if \ scanLit(m, '-', '/') then do
call err 'bad char at' substr(m.m.src, m.m.pos) 'in' m.m.src
end
if bx = 0 then
if jCatSqlNl(m) then
bx = m.m.pos
else
return strip(res)
end
endProcedure jCatSqlNext
??????????????*/
jIni: procedure expose m.
if m.j.ini == 1 then
return
m.j.ini = 1
m.j.cRead = '<'
m.j.cWri = '>'
m.j.cApp = '>>'
call classIni
am = "call err 'call of abstract method"
c1 = classNew('n JRW u ORun, f JREADING v, f JWRITING v', 'm',
, "new return jReset("m.class.basicNew", arg, arg2, arg3)",
, "jRead" am "jRead('m',' var')'" ,
, "jReadO if \ jRead(m, 'J.GGVAR') then return '';",
"return s2o(m.j.ggVar)" ,
, "jWrite" am "jWrite('m',' line')'" ,
, "jWriteO call jWrite(m, o2string(var))" ,
, "jWriteAll call jWriteNowImpl m, rdr",
, "jWriteNow call jWriteNowImpl m, rdr",
, "jReset",
, "jOpen" am" jOpen('m',' opt')'" ,
, "jClose" ,
, "oRun call pipeWriteAll m",
, "o2String return jCatLines(m, fmt)",
, "o2File return m")
m.class.forceDown.c1 = c1'#new'
c2 = classNew('n JRWDeleg u JRW', 'm',
, "new return jReset("m.class.basicNew", arg)",
, "jRead return jRead(m.m.deleg, var)" ,
, "jReadO return jReadO(m.m.deleg)" ,
, "jWrite call jWrite(m.m.deleg, line)" ,
, "jWriteO call jWrite(m.m.deleg, var)" ,
, "jWriteAll call jWriteAll m.m.deleg, rdr",
, "jWriteNow call jWriteNow m.m.deleg, rdr",
, "jReset if arg \== '' then m.m.deleg = arg;",
"else call jReset m.m.deleg;",
, "jOpen call jOpen m.m.deleg,' opt; return m" ,
, "jClose call jClose m.m.deleg; return m" )
m.class.forceDown.c2 = c2'#new'
call classNew 'n JRWO u JRW', 'm',
, "jRead res = jReadO(m); if res == '' then return 0;" ,
"m.var = o2string(res); return 1" ,
, "jReadO" am "jReadO('m')'" ,
, "jWrite call jWriteO(m, s2o(var))" ,
, "jWriteO" am "jWriteO('m',' line')'",
, "jWriteAll call jWriteNowImplO m, rdr",
, "jWriteNow call jWriteNowImplO m, rdr",
am = "call err 'call errObject"
call classNew 'n JRWErr u JRW', 'm',
, "jWriteAll" er "jWriteAll 'm', rdr'",
, "jWriteNow" er "jWriteNow 'm', 'rdr'",
, "jClose" er "jClose 'm'"
call classNew 'n JSay u JRW', 'm',
, "jWrite say line" ,
, "jWriteO call classOut , var, 'outO: '",
, "jOpen if \ abbrev(opt, m.j.cWri) then",
"call err 'can only write JSay.jOpen('m',' opt')';" ,
"else m.m.jWriting = 1"
call classNew 'n JStem u JSay', 'm',
, "jReset m.m.stem = arg;",
"if \ dataType(m.arg.0, 'n') then m.arg.0 = 0" ,
, "jWrite call mAdd m.m.stem, line"
call classNew 'n JRWEof u JRW', 'm',
, "jRead drop m.var; return 0",
, "jOpen if pos('>', opt) > 0 then",
"call err 'can only read JRWEof.jOpen('m',' opt')';" ,
"else m.m.jReading = 1"
m.j.in = jOpen(oNew('JRWEof'), m.j.cRead)
m.j.errRead = "return err('jRead('m',' var') but not opened r')"
m.j.errReadO = "return err('jReadO('m',' var') but not opened r')"
m.j.errWrite = "return err('jWrite('m',' line') but not opened w')"
m.j.errWriteO= "return err('jWriteO('m',' var') but not opened w')"
call classNew "n JBuf u JRWO, f BUF s r", "m",
, "jOpen call jBufOpen m, opt",
, "jClose call oMutatName m, 'JBuf'",
, "jReset call jBufReset m, arg",
, "jRead" m.j.errRead ,
, "jReadO" m.j.errReadO ,
, "jWrite" m.j.errWrite ,
, "jWriteO" m.j.errWriteO
call classNew "n JBufOR u JBuf", "m",
, "jRead return jBufORead(m, var)",
, "jReadO return jBufOReadO(m)"
call classNew "n JBufSR u JBuf", "m",
, "jRead return jBufSRead(m, var)",
, "jReadO return jBufSReadO(m)"
call classNew "n JBufOW u JBuf", "m",
, "jWrite call jBufOWrite m, line",
, "jWriteO call jBufOWriteO m, var"
call classNew "n JBufSW u JBuf", "m",
, "jWrite call jBufSWrite m, line",
, "jWriteO call jBufSWriteO m, var"
call classNew "n JBufTxt u JBuf, f MAXL v ", "m",
, "jReset call jBufReset m, arg; m.m.maxl = 80",
, "jWriteO call jBufWrite m, o2Text(var, m.m.maxl)"
return
endProcedure jIni
/*--- return a JRW from rdr or in ------------------------------------*/
j2Rdr: procedure expose m.
parse arg rdr
if oStrOrObj(rdr, m.j.in) then
return jBuf(ggStr)
else
return o2file(ggObj)
endProcedure j2Rdr
/* jstr is part of out interface --> inp2str */
inp2str: procedure expose m.
parse arg rdr, fmt
if oStrOrObj(rdr, m.j.in) then
return ggStr
else
return o2String(ggObj, fmt)
endProcedure inp2str
j2Buf: procedure expose m.
parse arg rdr
if oStrOrObj(rdr, m.j.in) then
return jBuf(ggStr)
if oClaInheritsOf(ggCla, 'JBuf') & m.ggObj.jUsers < 1 then
return ggObj
b = jOpen(jBuf(), m.j.cWri)
call jWriteNow b, o2File(ggObj)
return jClose(b)
endProcedure j2Buf
in: procedure expose m.
parse arg arg
return jRead(m.j.in, arg)
endProcedure in
inO: procedure expose m.
if arg() > 0 then call err '??? old interface'
return jReadO(m.j.in)
endProcedure in
out: procedure expose m.
parse arg line
call jWrite m.j.out, line
return 0
endProcedure out
outO: procedure expose m.
parse arg arg
call jWriteO m.j.out, arg
return
endProcedure outO
JRWDeleg: procedure expose m.
parse arg arg
return oNew('JRWDeleg', arg)
endProcedure JRWDeleg
/*--- jBuf: buffer read or write (supports datataypes) ---------------*/
jBuf: procedure expose m.
m = oNew('JBuf') /* calls jBufReset */
do ax=1 to arg()
m.m.buf.ax = arg(ax)
end
m.m.buf.0 = ax-1
m.m.allS = 1
return m
endProcedure jBuf
/*--- jBuf: buffer read or write (supports datataypes) ---------------*/
jBufTxt: procedure expose m.
m = oNew('JBufTxt') /* calls jBufReset */
do ax=1 to arg()
m.m.buf.ax = arg(ax)
end
m.m.buf.0 = ax-1
m.m.allS = 1
return m
endProcedure jBufTxt
jBufReset: procedure expose m.
parse arg m
m.m.stem = m'.BUF'
do ax=1 to arg() - 1
m.m.buf.ax = arg(ax+1)
end
m.m.buf.0 = ax-1
m.m.allS = 1
return m
endProcedure jBufReset
jBufOpen: procedure expose m.
parse arg m, opt
if opt == m.j.cRead then do
m.m.readIx = 0
if m.m.allS then
call oMutatName m, 'JBufSR'
else
call oMutatName m, 'JBufOR'
return m
end
if opt == m.j.cWri then do
m.m.buf.0 = 0
m.m.allS = 1
end
else if opt \== m.j.cApp then
call err 'jBufOpen('m',' opt') with bad opt'
if m.m.allS then
call oMutatName m, 'JBufSW'
else
call oMutatName m, 'JBufOW'
return m
endProcedure jBufOpen
jBufOWrite: procedure expose m.
parse arg m, line
call mAdd m'.BUF', s2o(line)
return
endProcedure jBufOWrite
jBufSWrite: procedure expose m.
parse arg m, line
call mAdd m'.BUF', line
return
endProcedure jBufWrite
jBufWriteStem: procedure expose m.
parse arg m, st
ax = m.m.buf.0
if m.m.allS then do
do sx=1 to m.st.0
ax = ax + 1
m.m.buf.ax = m.st.sx
end
end
else do
do sx=1 to m.st.0
ax = ax + 1
m.m.buf.ax = o2String(m.st.sx)
end
end
m.m.buf.0 = ax
return m
endProcedure jBufWrite
jBufOWriteO: procedure expose m.
parse arg m, ref
call mAdd m'.BUF', ref
return
endProcedure jBufOWriteO
jBufSWriteO: procedure expose m.
parse arg m, ref
cl = objClass(ref)
if cl = m.class.classV then do
call mAdd m'.BUF', m.ref
return
end
if cl == m.class.classW then do
call mAdd m'.BUF', substr(ref, 2)
return
end
do ax=1 to m.m.buf.0
m.m.buf.ax = s2o(m.m.buf.ax)
end
m.m.allS = 0
call oMutatName m, 'JBufOW'
call mAdd m'.BUF', ref
return
endProcedure jBufWriteO
jBufOReadO: procedure expose m.
parse arg m
nx = m.m.readIx + 1
if nx > m.m.buf.0 then
return ''
m.m.readIx = nx
return m.m.buf.nx
endProcedure jBufOReadO
jBufSReadO: procedure expose m.
parse arg m
nx = m.m.readIx + 1
if nx > m.m.buf.0 then
return ''
m.m.readIx = nx
return s2o(m.m.buf.nx)
endProcedure jBufSReadO
jBufORead: procedure expose m.
parse arg m, var
nx = m.m.readIx + 1
if nx > m.m.buf.0 then
return 0
m.m.readIx = nx
m.var = o2String(m'.BUF.'nx)
return 1
endProcedure jBufORead
jBufSRead: procedure expose m.
parse arg m, var
nx = m.m.readIx + 1
if nx > m.m.buf.0 then
return 0
m.m.readIx = nx
m.var = m.m.buf.nx
return 1
endProcedure jBufRead
jBufTxtWriteO: procedure expose m.
parse arg m, ref
if m.m.allS \== 1 then
call err '1 \== allS' m.m.allS 'in jBufTxtWriteO('m',' ref')'
cl = objClass(ref, '?')
if cl = m.class.classV then
call mAdd m'.BUF', m.ref
else if cl == m.class.classW then
call mAdd m'.BUF', substr(ref, 2)
else if ref == '' then
call mAdd m'.BUF', '@ null object'
else if cl == '?' then
call mAdd m'.BUF', '@'ref 'class=???'
else do
l = '@'ref 'class='className(cl)
ff = oFlds(ref)
do fx=1 to m.ff.0 while length(l) < m.m.maxl + 3
if m.ff.fx == '' then
l = l', .='m.ref
else do
f1 = substr(m.ff.fx, 2)
l = l',' f1'='m.ref.f1
end
end
if length(l) > m.m.maxl then
l = left(l, m.m.maxl-3)'...'
call mAdd m'.BUF', l
end
return
endProcedure jBufTxtWriteO
/* copy j end *********************************************************/
/* copy o begin ******************************************************
an object is register for a class in o2c
a class has a list of parents in cParent
a class has a methodTable cMet with lazy initialization
if the parent is class OLazyMet, a methof found there is
a method generator
otherwise an existing method is simply copied
***********************************************************************/
oIni: procedure expose m.
if m.o.ini == 1 then
return
m.o.ini = 1
call mIni
m.o.escW = '!'
m.o.lazyGen = 'OLazyMetGen' /* lazy method generator */
call oAddCla m.o.lazyGen
return
endProcedure oIni
/*--- return whether cl is a currently defined class ----------------*/
oIsCla: procedure expose m.
parse arg cl
return symbol('m.o.cParent.cl') == 'VAR'
endProcedure oIsCla
/*--- add class cl with the given parents ---------------------------*/
oAddCla: procedure expose m.
parse arg cl, parents
if verifId(cl, '.') > 0 | pos('.', cl) <> lastPos('.', cl) then
call err 'bad class name' cl 'in oAddCla('cl',' parents')'
if oIsCla(cl) then
call err 'duplicate class' cl 'in oAddCla('cl',' parents')'
do px=1 to words(parents)
if \ oIsCla(word(parents, px)) then
call err word(parents, px) 'is no class' ,
'in oAddCla('cl',' parents')'
end
m.o.cParent.cl = parents
return
endProcedure oAddCla
/*--- add to class cl method met ------------------------------------*/
oAddMet: procedure expose m.
parse arg cl, met, cont
if \ oIsCla(cl) then
call err 'undefined class' cl 'in oAddMet('cl',' met',' cont')'
if symbol('m.o.cMet.cl.met') == 'VAR' then
call err 'duplicate method' met 'in oAddMet('cl',' met',' cont')'
m.o.cMet.cl.met = cont
return
endProcedure oAddMet
/*--- create an an object of the class className
and call it's new method ------------------------------------*/
oNew: procedure expose m.
parse arg cl, arg, arg2, arg3
if symbol('m.o.cParent.cl') \== 'VAR' then
cl = class4name(cl)
interpret oClaMet(cl, 'new')
endProcedure oNew
/*--- return the class of object obj --------------------------------*/
objClass: procedure expose m.
parse arg m
if symbol('m.o.o2c.m') == 'VAR' then
return m.o.o2c.m
else if abbrev(m, m.o.escW) then
return m.class.classW
else if arg() >= 2 then
return arg(2)
else
return err('no class found for object' m)
endProcedure objClass
oKindOf: procedure expose m.
parse arg obj, sup
cl = objClass(obj, '')
if cl == '' then
return 0
return oClaInheritsOf(cl, sup)
endProcedure oKindOf
oClaInheritsOf: procedure expose m.
parse arg cl, sup /* wkTst optimierung in classAdded */
if symbol('m.o.cParent.cl') \== 'VAR' then
cl = class4name(cl)
if symbol('m.o.cParent.sup') \== 'VAR' then
sup = class4name(sup)
if cl == sup then
return 1
do sx=1 to words(m.o.cParent.cl)
if oClaInheritsOf(word(m.o.cParent.cl, sx), sup) then
return 1
end
return 0
endProcedure oClaInheritsOf
/*--- return the code of method me of object m
set m to the address and ggClass to the class ---------------*/
objMet: procedure expose m. m ggClass
parse arg m, me
if symbol('m.o.o2c.m') == 'VAR' then
ggClass = m.o.o2c.m
else if abbrev(m, m.o.escW) then
ggClass = "w"
else if arg() >= 3 then
return arg(3)
else
return err('no class found for object' m)
if symbol('m.o.cMet.ggClass.me') == 'VAR' then
return m.o.cMet.ggClass.me
code = oClaMet(ggClass, me, '---')
if code \== '---' then
return code
else if arg() >= 3 then
return arg(3)
return err('no method' me 'in class' className(ggClass) ,
'of object' m)
endProcedure objMet
oClaMet: procedure expose m.
parse arg cl, me
if symbol('m.o.cMet.cl.me') == 'VAR' then
return m.o.cMet.cl.me
if \ oIsCla(cl) then do
c2 = class4Name(cl, '')
if c2 \== '' & oIsCla(c2) then do
cl = c2
if symbol('m.o.cMet.cl.me') == 'VAR' then
return m.o.cMet.cl.me
end
else do
if arg() >= 3 then
return arg(3)
else
return err('no class' cl 'in oClaMet('cl',' me')')
end
end
code = oLazyMetGen(m.o.lazyGen, cl, me)
do px = 1 to words(m.o.cParent.cl) while code == '---'
code = oClaMet(word(m.o.cParent.cl, px), me, '---')
end
if code == '---' then do
if arg() >= 3 then
return arg(3)
else
return err('no met' me 'in class' cl)
end
m.o.cMet.cl.me = code
return code
endProcedure oClaMet
oLazyMetGen: procedure expose m.
parse arg lg, cl, me
if symbol('m.o.cMet.lg.me') \== 'VAR' then
return '---'
interpret m.o.cMet.lg.me
endProcedure oLazyMetGen
/*--- return the stem of fieldnames of object m ---------------------*/
oFlds: procedure expose m.
parse arg m
return objMet(m, 'oFlds')
endProcedure oFlds
oPrint: procedur expose m.
parse arg m
ff = oFlds(m)
t = ''
do fx=1 to m.ff.0
f1 = m || m.ff.fx
t = t',' substr(m.ff.fx, 2)'='m.f1
end
return m'='className(objClass(m))'('substr(t, 3)')'
endProcedure oPrint
/*--- return the contents of field f navigation along path ----*/
oGet: procedure expose m.
parse arg obj, path, clazz
nullNew = 0
ret = oAccPath(obj, path, clazz)
if ret == 1 then
ret = oAccStr(m, cl)
if ret == 1 then
return str
return err(ret 'in oGet('obj',' path')')
endProcedure oGet
oAccStr: procedure expose m. str
parse arg m, cl
if cl == m.class.classV then
str = m.m
else if m.cl.valueCl == '' then
return 'no value @' m 'class' className(cl)
else if m.m == '' then
return 'null @' m 'class' className(cl)
else if abbrev(m, m.o.escW) then
str = substr(m ,2)
else
str = o2String(m.m)
return 1
endProcedure oAccStr
oGetO: procedure expose m.
parse arg obj, path, opt, clazz
nullNew = pos('n', opt) > 0
ret = oAccPath(obj, path, clazz)
if ret == 1 then
ret = oAccO(m, cl, opt)
if ret == 1 then
return ref
else
return err(ret 'in oGetO('obj',' path')')
endProcedure oGetO
oAccO: procedure expose m. ref
parse arg m, cl, opt
if cl == m.class.classV then do
ref = s2o(m.m)
end
else if m.cl \== 'r' then do
ref = m
end
else if m.m == '' then do
if opt == '-b' then do
m.m = jBuf()
end
else if opt == '-n' then do
rsn = oRefSetNew(m, cl)
if rsn \==1 then
return rsn
end
ref = m.m
end
else if objClass(m.m, 0) \== 0 then do
ref = m.m
end
else do
return 'no class for' m.m '@' m 'class' cl
end
return 1
endProcedure oAccO
oPut: procedure expose m.
parse arg obj, path, str
nullNew = 1
res = oAccPath(obj, path)
if res == 1 then
res = ocPut(m, cl, str)
if res == 1 then
return str
return err(res 'in oPut('obj',' path',' str')')
endProceudre oPut
ocPut: procedure expose m.
parse arg m, cl, str
if m.cl.valueCl == m.class.classV then
m.m = str
else if m.cl.valueCl \== '' then
m.m = s2o(str)
else
return 'no value @' m 'class' className(cl)
return 1
endProcedure ocPut
oPutO: procedure expose m.
parse arg obj, path, ref
nullNew = 1
res = oAccPath(obj, path)
if res == 1 then
res = ocPutO(m, cl, ref)
if res == 1 then
return ref
return err(ret 'in oPut('obj',' path',' ref')')
endProcedure oPutO
ocPutO: procedure expose m.
parse arg m, cl, ref
if m.cl.valueCl == m.class.classV then
m.m = o2string(ref)
else if m.cl.valueCl \== '' then
m.m = ref
else if m.cl.stemCl \== '' then
return 'implement put to stem'
else
return 'no value @' m 'class' className(cl)
return 1
endProcedure ocPutO
oClear: procedure expose m.
parse arg m
interpret objMet(m, 'oClear')
return m
endProcedure oClear
oClaClear: procedure expose m.
parse arg cla, m
interpret "drop cla;" oClaMet(cla, 'oClear')
return m
endProcedure oClaClear
oAccPath: procedure expose m. m cl nullNew
parse arg m, pa, cl
if cl == '' & m \== '' then do
cl = objClass(m)
end
if pa == '' then
return 1
call oClaMet cl, 'oFlds'
if abbrev(pa, m.class.cRef) ,
| (\ m.cl.hasFlds & abbrev(pa, m.class.cNav)) then do
if pa == m.class.cRef & m.cl.valueCl == m.class.classV then do
cl = m.class.classV
return 1
end
if (m.cl.valueCl == '' | m.cl.valueCl == m.class.classV) ,
& m.cl \== 'r' then
return 'no reference @' m 'class' cl
if m.m = '' then do
if \ nullNew then
return 'null @' m 'class' className(cl)
rsn = oRefSetNew(m, cl)
if rsn \== 1 then
return rsn
end
return oAccPath(m.m, substr(pa, 2))
end
if pos(left(pa, 1), m.class.cPath) > 0 then
return oAccPath(m, substr(pa, 2), cl)
px = verify(pa, m.class.cPath, 'm')
if px < 1 then
px = length(pa)+1
fn = left(pa, px-1)
pa = substr(pa, px)
if symbol('m.cl.f2c.fn') == 'VAR' then
return oAccPath(m'.'fn, pa, m.cl.f2c.fn)
if m.cl.stemCl=='' | fn=='' | verify(fn, '0123456789','n')>0 then
return 'no field' fn '@' m 'class' className(cl)
if fn == 0 then
return oAccPath(m'.0', pa, m.class.classV)
if abbrev(fn, 0) | verify(m.m.0, '0123456789', 'n') > 0,
| fn > m.m.0 then
return 'bad stem index' fn'>'m.m.0 '@' m 'class' className(cl)
return oAccPath(m'.'fn, pa, m.cl.stemCl)
endProcedure oAccPath
oRefSetNew: procedure expose m.
parse arg m, cl
cr = m.cl.valueCl
if m.cr.class = '' then
return 'no class for null @' m 'class' className(cl)
if m.cr.class = m.class.classW then
m.m = o2s()
else if m.cr \== 'r' then
return 'class' className(cl) 'not ref'
else
m.m = oNew(m.cr.class)
return 1
endProcedure oRefSetNew
/*--- mutate object m to the class cl -------------------------------*/
oMutate: procedure expose m.
parse arg m, cl
m.o.o2c.m = cl
return m
endProcedure oMutate
/*--- mutate object m to the class named name -----------------------*/
oMutatName: procedure expose m.
parse arg m, nm
m.o.o2c.m = class4Name(nm)
return m
endProcedure oMutatName
/*--- copy object m of class cl to t --------------------------------*/
oClaCopy: procedure expose m.
parse arg cl, m, t
interpret "drop cl;" oClaMet(cl, 'oCopy')
endProcedure oClaCopy
/*--- copy object m to t / create a new object if t=='' -------------*/
oCopy: procedure expose m.
parse arg m, t
interpret objMet(m, 'oCopy')
endProcedure oCopy
/*--- return a new instance of a subclass of Run
with code code in method oRun -------------------------------*/
oRunner: procedure expose m.
if arg() >= 1 then
r = oNew(classNew('n* ORun u ORun, m oRun' arg(1)))
else
r = oNew(classNew('n| ORun u ORun'))
return r
endProcedure oRunner
/*--- set code for runner -------------------------------------------*/
oRunnerCode: procedure expose m.
parse arg r, code
call classSetMet objClass(r), 'oRun', code
return r
endProcedure oRunnerCode
/*--- run method oRun of object m -----------------------------------*/
oRun: procedure expose m.
parse arg m, arg, arg2, arg3
interpret objMet(m, 'oRun')
return
endProcedure oRun
/*--- run method oRun and return output in new JBuf ------------------*/
oRun2File: procedure expose m.
parse arg rn
b = jBuf()
call pipe '+F' , b
call oRun rn
call pipe '-'
return b
endProcedure oRun2File
/*--- cast the object to a file -------------------------------------*/
o2File: procedure expose m.
parse arg m
interpret objMet(m, 'o2File')
call err 'o2file did not return'
endProcedure o2File
/*--- cast the object to a String -----------------------------------*/
o2String: procedure expose m.
parse arg m, fmt
if opt == '' then
opt = '-b '
interpret objMet(m, 'o2String')
return err('o2String did not return')
endProcedure o2String
/*--- return true if object is kind of String------------------------*/
oStrOrObj: procedure expose m. ggStr ggObj ggCla
parse arg ggObj, def
if ggObj == '' then
ggObj = def
ggCla = objClass(ggObj, '')
if ggCla == '' then do
ggStr = ggObj
ggObj = ''
return 1
end
else if wordPos(ggCla, m.class.classV m.class.classW) > 0 then do
ggStr = o2String(ggObj)
ggObj = ''
return 1
end
else do
ggStr = ''
return 0
end
endProcedure oStrOrObj
/*--- return true if object is kind of String ----- ???? -------------*/
oStrOrFile: procedure expose m. ggStr ggObj ggCla
parse arg m, def
if oStrOrObj(m, def) then
return 1
ggObj = o2File(ggObj)
return 0
endProcedure oStrOrFile
/*--- return a short string representation of an object -------------*/
o2Text: procedure expose m.
parse arg m, maxL
if m == '' then
return '@ null object'
if maxL == '' then
maxL = 80
cl = objClass(m, '?')
if cl = m.class.classV then
l = m.m
else if cl == m.class.classW then
l = substr(m, 2)
else if cl == '?' then
l = '@'m 'class=???'
else do
l = '@'m 'class='className(cl)
ff = oFlds(m)
do fx=1 to m.ff.0 while length(l) < maxL + 3
if m.ff.fx == '' then
l = l', .='m.m
else do
f1 = substr(m.ff.fx, 2)
l = l',' f1'='m.m.f1
end
end
end
if length(l) <= maxL then
return l
return left(l, maxL-3)'...'
endProcedure o2Text
/*--- cast a String to an object -----------------------------------*/
s2o: procedure expose m.
parse arg str
return m.o.escW || str
return r
endProcedure s2o
oIfStr: procedure expose m.
parse arg m
if length(m) > 200 then
return m
cl = objClass(m, '')
if cl = '' then
return m
else if cl = m.class.classV then
return = m.m
else if cl == m.class.classW then
return = substr(m, 2)
else if arg() >= 2 then
return arg(2)
else
call err m 'of class' className(cl) 'not kind of string'
endProcedure oIfStr
/* copy o end *******************************************************/
/* copy class begin **************************************************
a class has fields and methods,
the class module handles only the metadata,
object handling (instanciation, methodcalls etc.) is in O
classes are represented by a metadata tree,
its nodes of class class have diffenrent types:
class subTypes (implemented as choices)
'u' = union: NAME -> name of class if <> '',
stem -> references component classes
'f' = field: NAME -> fieldName (x.name),
CLASSS -> reference to class of fieldValue
's' = stem: class -> ref to class at each stem element
'c' = choice: NAME -> selection value,
CLASS -> ref to class of choice
'm' = method: NAME -> methodName,
MET -> rexxCode
'r' = reference CLASS -> ref to type at reference
special classes
'v' = Value String Value
'w' = ValueAsA StringValue packed into an address (prefix escW)
'o' = AnyClass any class with dynamic classLookup on object
formal definition, see classIni
class expression (ce) allow the following syntax
ce = className | classAdr | 'n'('?','*','|')? name union | union
| 'f' name ce | 's' ce | 'c' name ce | 'm' name code | r ce?
union = 'u' (ce (',' ce)*)?
the modifiers of 'n' means
none: create new class, fail if name already defined
'?': create new class or return old of that name
'*': use an exisiting class of that definition
or create new class with a unique name
'|': create a new class with a unique name
'm' extends to then end of the ce (line)
'u' allows several components, in classNew also multiple args
Achtung, aber NICHT rekursiv|
***********************************************************************/
classIni: procedure expose m.
if m.class.ini == 1 then
return
m.class.ini = 1
m.class.in2 = 0
call oIni
call mapIni
call mNewArea 'CLASS', 'CLASS'
call mapReset 'CLASS.N2C' /* name to class */
m.class.classV = classBasicNew('u', 'v')
m.class.classW = classBasicNew('u', 'w')
m.class.classO = classBasicNew('u', 'o')
m.class.class = classNew('n class u v',
, 'c u u f NAME v, s r class',
, 'c f u f NAME v, f CLASS r class',
, 'c s f CLASS r class' ,
, 'c c u f NAME v, f CLASS r class',
, 'c m u f NAME v, f MET v' ,
, 'c r f CLASS r class' )
m.class.cNav = '.'
m.class.cRef = '|'
m.class.cDot = '%'
m.class.cPath = m.class.cNav || m.class.cRef || m.class.cDot
m.class.classR = classNew('r')
m.class.basicNew = "oMutate(mNew(cl), cl)"
call oAddMet m.o.lazyGen, 'new', "return classGenNew(cl, me)"
call oAddMet m.o.lazyGen,'oClear',"return classGenClear(cl, me)"
call oAddMet m.o.lazyGen,'oFlds',"return classGenFlds(cl, me)"
call oAddMet m.o.lazyGen, 'oCopy', "return classGenCopy(cl, me)"
cr = mIterBegin('CLASS')
do while assNN('cr', mIter(cr))
call classFinish cr
call oClaMet cr, 'oFlds' /* generate flds */
end
m.class.in2 = 1
call oAddMet m.class.classV, 'oCopy', "return oCopyV(m, t)"
call classAddMet m.class.classV, 'o2String return m.m'
call classAddMet m.class.classW, 'o2String return substr(m, 2)'
call classNew 'n ORun u',
, 'm oRun call err "call of abstract method oRun"',
, 'm o2File return oRun2File(m)',
, 'm o2String return jCatLines(oRun2File(m), fmt)'
return
endProcedure classIni
/*--- return the name of a class if it exists otherwise the class ---*/
className: procedure expose m.
parse arg cl
if m.cl = 'u' & m.cl.name \= '' then
return m.cl.name
else
return cl
endProcedure className
/*--- return class of given name or class ---------------------------*/
class4Name: procedure expose m.
parse arg nm
if symbol('m.class.n2c.nm') == 'VAR' then
return m.class.n2c.nm
if arg() > 1 then
return arg(2)
call err 'no class' nm
endProcedure class4Name
classBasicNew: procedure expose m.
parse arg ty, nm, cl, nmTy
n = mNew('CLASS')
m.n = ty
m.n.name = nm
m.n.nameComp = nm
if ty == 'u' & nm \== '' then do
if pos(nmTy, '*|') > 0 then do
m.n.name = nm || substr(n, 1+lastPos('.', n))
if nmTy == '*' then
m.n.nameComp = nm'*'
else
m.n.nameComp = m.n.name
end
call mapAdd class.n2c, m.n.name, n
end
call mapAdd class.n2c, n, n
m.n.class = ''
m.n.met = ''
m.n.0 = 0
if length(ty) \== 1 | pos(ty, 'ufscrm') < 1 then
call err 'bad type' ty': classBasicNew('ty',' nm',' cl')'
else if nm == '' & pos(ty, 'fm') > 0 then
call err 'empty name: classBasicNew('ty',' nm',' cl')'
else if nm \== '' & ty \== 'c' & verifId(nm) > 0 then
call err 'bad name' nm': classBasicNew('ty',' nm',' cl')'
else if nm \= '' & pos(ty, 'rs') > 0 then
call err 'name for type' ty': classBasicNew('ty',' nm',' cl')'
else if pos(ty, 'fcrs') > 0 then do
if cl \== '' then
m.n.class = mapGet(class.n2c, cl)
else if ty == 'r' then
m.n.class = m.class.classO
/* else say 'cl leer' ty nm nmTy ???????*/
end
else if ty == 'm' then
m.n.met = cl
else if cl \== '' then
call err 'class for type' ty': classBasicNew('ty',' nm',' cl')'
return n
endProcedure classBasicNew
classNew: procedure expose m.
parse arg clEx 1 ty rest
if abbrev(ty, 'n') then do
if wordPos(ty, 'n n? n* n|') < 1 then
call err 'bad type' ty': classNew('clEx')'
nmTy = right(ty, 1)
parse var rest nm ty rest
if ty \== 'u' then
call err 'class name' nm 'without u: classNew('clEx')'
if nmTy == 'n' then do
if mapHasKey(class.n2c, nm) then
call err 'class' nm 'already defined: classNew('clEx')'
end
else if nmTy == '?' then do
if mapHasKey(class.n2c, nm) then
return mapGet(class.n2c, nm)
end
else if nmTy == '*' then do
if arg() \== 1 then
call err 'arg()='arg() 'for n* : classNew('clEx')'
if mapHasKey(class.n2c, clEx) then
return mapGet(class.n2c, clEx)
end
n = classBasicNew('u', nm, , nmTy)
end
else do
nmTy = ''
if arg() \== 1 then
call err 'arg()='arg() 'without name: classNew('clEx')'
if mapHasKey(class.n2c, clEx) then
return mapGet(class.n2c, clEx)
if length(ty) <> 1 | pos(ty, 'ufscmr') < 1 then
call err 'bad type' ty': classNew('clEx')'
nm = ''
if pos(ty, 'usr') < 1 then
parse var rest nm rest
if ty = 'u' then do
n = classBasicNew(ty)
end
else if ty = 'm' then do
n = classBasicNew(ty, nm, rest)
rest = ''
end
else do
parse var rest t1 rest
if wordPos(t1, 'u f s c m r') > 0 then do
n = classBasicNew(ty, nm)
m.n.class = classNew(t1 rest)
rest = ''
end
else do
n = classBasicNew(ty, nm, t1)
end
end
end
if ty \== 'u' then do
if rest \== '' then
call err 'rest' rest 'but end of classExp expected:' clEx
end
else do
lx = 0
do while lx < length(rest)
cx = pos(',', rest, lx+1)
if cx <= lx | word(substr(rest, lx+1), 1) == 'm' then
cx = length(rest)+1
a = mAdd(n, classNew(strip(substr(rest, lx+1, cx-lx-1))))
lx=cx
end
pref = ''
do ax=2 to arg()
if length(arg(ax)) == 1 & arg(ax) \== ' ' then
pref = arg(ax)' '
else
call mAdd n, classNew(pref || arg(ax))
end
end
cr = mIterBegin('CLASS')
do while assNN('cr', mIter(cr)) & \ classEqual(n, cr)
end
isNew = cr == n
if \ isNew then do
if mapRemove(class.n2c, n) \== n then
call err 'mapRemove('n') mismatch'
if m.n == 'u' & m.n.name \== '' then
if mapRemove(class.n2c, m.n.name) \== n then
call err 'mapRemove('m.n.name') mismatch'
call mFree n
n = cr
end
if isNew & m.class.in2 then
call classFinish n
if nmTy == '' | nmTy == '*' then
call mapAdd class.n2c, clEx, n
return n
endProcedure classNew
/*--- to the finish for new class cl -------------------------------*/
classFinish: procedure expose m.
parse arg cl, force
call oMutate cl, m.class.class
/* find super and sub classes */
m.cl.sub = ''
sups = ''
do ux=1 to m.cl.0
u1 = m.cl.ux
if m.u1 \== 'u' then
iterate
if wordPos(u1, sups) > 0 then
call err u1 'already in sups' sups': classSuperSub('cl')'
sups = sups u1
if wordPos(m.cl.SUB, cl) > 0 | symbol('m.u1.sub') \== 'VAR' then
call err cl 'is already in' u1'.sub' u1.SUB ,
|| ': classSuperSub('cl')'
m.u1.sub = strip(m.u1.sub cl)
end
m.cl.super = sups
/* add class to o */
call oAddCla cl, sups
if pos(m.cl, 'mfrsv') < 1 then do
allMets = ''
forceMets = ''
do cx=1 to m.cl.0
ch = m.cl.cx
if m.ch == 'm' then do
call oAddMet cl, m.ch.name, m.ch.met
allMets = allMets m.ch.name
end
else if symbol('m.class.forceDown.ch') == 'VAR' then
forceMets = forceMets m.class.forceDown.ch
end
myForce = ''
do fx=1 to words(forceMets)
parse value word(forceMets, fx) with fCla '#' fMet
if wordPos(fMet, allMets) < 1 then do
call oAddMet cl, fMet, m.o.cMet.fCla.fMet
myForce = myForce cl'#'fMet
allMets = allMets fMet
end
end
if myForce \== '' then
m.class.forceDown.cl = strip(myForce)
end
if cl == m.class.class then
call mAlias 'CLASS', cl
else /* object addresses */
call mNewArea cl, 'O.'substr(cl,7)
if m.cl \== 'u' | m.cl.name == '' then
return
call mAlias cl, m.cl.name
return
endProcedure classFinish
classAddMet: procedure expose m.
parse arg clNm, met code
cl = class4Name(clNm)
if pos(m.cl, 'uvw') < 1 then
call err 'class not nvw but' m.cl,
'in classAdd1Method('clNm',' met code')'
call mAdd cl, classNew('m' met code)
call oAddMet cl, met, code
return cl
endProcedure classAddMet
/*--- return true iff the two classes are equal -------------------*/
classEqual: procedure expose m.
parse arg l, r
if m.l \== m.r | m.l.nameComp \== m.r.nameComp ,
| m.l.class \== m.r.class | m.l.0 \== m.r.0 then
return 0
if m.l.met \== m.r.met then
return 0
do sx=1 to m.l.0
if m.l.sx \== m.r.sx then
return 0
end
return 1
endProcedure classEqual
classGenNew: procedure expose m.
parse arg cl, met
return "m=" m.class.basicNew";" oClaMet(cl, 'oClear') ";" ,
"return m"
endProcedure classGenNew
classGenFlds: procedure expose m.
parse arg cl, met
m.cl.flds.0 = 0
m.cl.stms.0 = 0
m.cl.stemCl = ''
m.cl.valueCl = ''
call classGenFldsAdd cl, cl
m.cl.hasFlds = m.cl.flds.0 > 1 ,
| (m.cl.flds.0 == 1 & m.cl.flds.1 \== '') | m.cl.stms.0 > 0
return cl'.FLDS'
endProcedure classGenFlds
/*--- add the the fields of class cl to stem f ----------------------*/
classGenFldsAdd: procedure expose m.
parse arg f, cl, nm
n1 = substr(nm, 1+abbrev(nm, '.') )
if symbol('m.f.f2c.n1') \== 'VAR' then
m.f.f2c.n1 = cl
if cl == m.class.classV | cl == m.class.classW | m.cl=='r' then do
if nm == '' then do
if m.f.valueCl \== '' then
return err('value mistmatch')
m.f.valueCl = cl
end
if nm == '' then do
call mMove f'.FLDS', 1, 2
m.f.flds.1 = ''
end
else do
call mAdd f'.FLDS', nm
end
return 0
end
if m.cl = 's' then do
if m.cl.class == '' then
call err 'stem null class'
a1 = mAdd(f'.STMS', nm)
m.a1.class = m.cl.class
if nm == '' then
m.f.stemCl = m.cl.class
return 0
end
if m.cl = 'f' then
return classGenFldsAdd(f, m.cl.class, nm'.'m.cl.name)
if m.cl.class \== '' then
return classGenFldsAdd(f, m.cl.class, nm)
do tx=1 to m.cl.0
call classGenFldsAdd f, m.cl.tx, nm
end
return 0
endProcedure classGenFldsAdd
classGenClear: procedure expose m.
parse arg cl, met
r = ''
call oClaMet cl, 'oFlds'
do fx=1 to m.cl.flds.0
f1 = m.cl.flds.fx
if f1 == '' then
c1 = cl
else do
c1 = substr(f1, 2)
c1 = m.cl.f2c.c1
end
if c1 == m.class.classW then
r = r classGenStmt(f1, "m.m~ = '"m.o.escW"';")
else
r = r classGenStmt(f1, "m.m~ = '';")
end
do sx=1 to m.cl.stms.0
r = r classGenStmt(m.cl.stms.sx, "m.m~.0 = 0;")
end
return r
endProcedure classGenClear
classGenStmt: procedure expose m.
parse arg f, st, resWo
isNice = translate(f) == f
resWo = translate(resWo) 'GGFF M'
fDod = '.'f'.'
do wx=1 to words(resWo) while isNice
isNice = pos('.'word(resWo, wx)'.', fDot) < 1
end
if isNice then
return repAll(st, '~', f)
else
return "ggFF = '"substr(f, 2)"';" repAll(st, '~', '.ggFF')
endProceduer classGenAss
classGenCopy: procedure expose m.
parse arg cl, me
r = repAll("if t == '' then t =" m.class.basicNew ";" ,
"else call oMutate t, cl;", 'cl', "'"cl"'")
ff = oClaMet(cl, 'oFlds') /* build code for copy */
do fx=1 to m.cl.flds.0
r = r classGenStmt(m.cl.flds.fx, 'm.t~ = m.m~;', 't')
end
do fx=1 to m.cl.stms.0
nm = m.cl.stms.fx
sc = m.cl.stms.fx.class
if nm == '' then
st = ''
else do
r = r "st = '"substr(nm, 2)"';"
st = '.st'
end
r = r "m.t"st".0 = m.m"st".0;" ,
"do sx=1 to m.m"st".0;" ,
"call oClaCopy '"sc"', m"st".sx, t"st".sx; end;"
end
return r 'return t;'
endProcedure classGenCopy
/*--- oCopy for classW ----------------------------------------------*/
oCopyW: procedure expose m.
trace ?r
parse arg m, t
if t == '' then
return m
m.t = o2String(m)
return oMutate(t, m.class.classV)
endProcedure oCopyW
/*--- print object ---------------------------------------------------*/
objOut: procedure expose m.
parse arg m, pr, p1
c = objClass(m, '')
if c == '' then
call out p1 'no class for' m
else if c == m.class.classV then
call out p1 || m.m
else if c == m.class.classW then
call out p1 || o2String(m)
else
call classOutDone c, m, pr, p1
return
endProcedure objOut
/*--- recursively output (with out:) the object a with class t -------*/
classOut: procedure expose m.
parse arg t, a, pr, p1
return classOutDone(if(t=='',m.class.classO, t), a, pr, p1)
endProcedure classOut
/*--- ouput object a with class t and stopper done ------------------*/
classOutDone: procedure expose m. done.
parse arg t, a, pr, p1
if p1 == '' then
p1 = pr
if right(p1, 1) \== ' ' then
p1 = p1' '
if done.ini \== 1 then do
done.ini = 1
t = class4Name(t, t)
p1 = p1'@'a' '
end
if done.t.a == 1 then
return out(p1'done :'className(t) '@'a)
done.t.a = 1
if t = m.class.classO then do
if a == '' then
return out(p1'obj null')
t = objClass(a, '')
if t = '' then
return out(p1'obj has no class @'m.a)
else
return classOutDone(t, a, pr, p1'isA')
end
if t == m.class.classV then
return out(p1'=' m.a)
if t == m.class.classW == 'w' then
return out(p1'}' substr(a, 2))
if m.t == 'f' then
return classOutDone(m.t.class, a'.'m.t.name, pr, p1'.'m.t.name)
if m.t == 'r' then do
if m.a == '' then
return out(p1'refTo :'className(m.t.class) '@null@')
else
return classOutDone(m.t.class, m.a, pr,
, p1'refTo @'m.a)
end
if m.t = 'u' then do
t1 = m.t.1
vv = m.t.0 > 0 & m.t.1 == m.class.classV
call out p1 || if(m.t.name == '', 'union', ':'m.t.name) ,
|| copies(' =' m.a, vv)
do ux=1+vv to m.t.0
call classOutDone m.t.ux, a, pr' '
end
return 0
end
if m.t = 's' then do
call out p1'stem' m.a.0
do ux=1 to m.a.0
call classOutDone m.t.class, a'.'ux, pr' ', pr' .'ux
end
return 0
end
if m.t = 'c' then do
if m.t.name = m.a then
call classOutDone m.t.class, a, pr, p1'choice' m.a
return 0
end
if m.t = 'm' then
return 0
return err('bad class type' m.t)
endProcedure classOutDone
/* copy class end ***************************************************/
/* copy mapExp begin **************************************************/
mapVia: procedure expose m.
parse arg a, ky
sx = pos('|', ky)
if sx < 1 then
return mapGet(a, ky)
via = mapGet(a, left(ky, sx-1))
do while sx <= length(ky)
fx = sx+1
sx = pos('|', ky, fx)
if sx < 1 then
sx = length(ky) + 1
if sx = fx then do
if symbol('m.via') \== 'VAR' then
call err 'missing m.'via 'at' sx 'in mapVia('a',' ky')'
via = m.via
end
else do
f = substr(ky, fx, sx - fx)
if symbol('m.via.f') \== 'VAR' then
call err 'missing m.'via'.'f ,
'at' sx 'in mapVia('a',' ky')'
via = m.via.f
end
end
return via
endProcedure mapVia
mapExpAt: procedure expose m.
parse arg a, src, sx
m.map.ExpAt = 0
cx = pos('$', src, sx)
if cx < 1 then
return substr(src, sx)
res = substr(src, sx, cx-sx)
do forever
if substr(src, cx+1, 1) = '{' then do
ex = pos('}', src, cx+2)
if ex < 1 then
call err 'missing } after' substr(src, cx) 'in' src
res = res || mapVia(a, strip(substr(src, cx+2, ex-cx-2)))
ex = ex + 1
end
else do
ex = verify(src, m.ut.alfDot, 'n', cx+1)
if ex < 1 then
return res || mapVia(a, substr(src, cx+1))
if ex = cx+1 then do
m.map.ExpAt = cx
return res
end
res = res || mapVia(a, substr(src, cx+1, ex-cx-1))
end
cx = pos('$', src, ex)
if cx < 1 then
return res || substr(src, ex)
res = res || substr(src, ex, cx-ex)
end
endProcedure mapExpAt
mapExp: procedure expose m.
parse arg a, src
res = mapExpAt(a, src, 1)
if m.map.ExpAt \== 0 then
call err 'mapExp stopped at' substr(src, map.ExpAt) 'in' src
return res
endProcedure mapExp
mapExpAllAt: procedure expose m.
parse arg a, dst, src, sx, cx
do while sx <= m.src.0
li = mapExpAt(a, m.src.sx, cx)
dx = m.map.ExpAt
if (cx=1 & dx = 0) | li \= '' then
call mAdd dst, li
if dx = 0 then do
cx = 1
sx = sx+1
end
else do
return sx dx
end
end
return ''
endProcedure mapExpAllAt
mapExpAll: procedure expose m.
parse arg a, dst, src
sto = mapExpAllAt(a, dst, src, 1, 1)
if sto == '' then
return
lx = word(sto, 1)
call err 'mapExpAll stopped at' sto':' m.src.lx
endProcedure mapExpAll
/* copy mapExp end ****************************************************/
/* copy map begin ******************************************************
a map stores values at keys
it may also maintain a list of keys
the basic ideas are similar to the java Interface java.util.Map
contrary to stems we also handle keys longer then 250 bytes
***********************************************************************/
/*--- initialize the module ------------------------------------------*/
mapIni: procedure expose m.
if m.map.ini = 1 then
return
m.map.ini = 1
call mIni
m.map.0 = 0
m.map.inlineSearch = 1
call mapReset map.inlineName, map.inline
return
endProcedure mapIni
mapInline: procedure expose m.
parse arg pName, opt
if mapHasKey(map.inlineName, pName) then do
im = mapGet(map.inlineName, pName)
if pos('l', opt) < 1 & symbol('m.im.0') \== 'VAR' then do
m.im.0 = m.im.lEnd - m.im.lBegin - 1
do ix=1 to m.im.0
m.im.ix = strip(sourceline(ix+m.im.lBegin), 't')
end
end
return im
end
name = '/'
do lx = m.map.inlineSearch to sourceline()
if \ abbrev(sourceline(lx), '$') then
iterate
li = sourceline(lx)
s1 = pos('/', li)+ 1
if s1 < 3 | s1 > 4 then
iterate
s2 = pos('/', li, s1)
if s2 <= s1 then
iterate
if s1 == 3 then do
if name \== substr(li, s1, s2-s1) then
iterate
im = 'MAP.INLINE.' || (m.map.inline.0+1)
call mapAdd map.inlineName, name, im
m.im.lBegin = lBeg
m.im.lEnd = lx
m.im.mark = mrk
if name == pName then do
m.map.inlineSearch = lx+1
return mapInline(pName)
end
name = '/'
end
else if \ mapHasKey(map.inlineName,
, substr(li, s1, s2-s1)) then do
lBeg = lx
mrk = substr(li, 2, s1-3)
name = substr(li, s1, s2-s1)
end
else do
name = '/'
end
end
if pos('r', opt) > 0 then
return ''
return err('no inline data /'pName'/ found')
endProcedure mapInline
/*--- create a new map ----------------------------------------------*/
mapNew: procedure expose m.
parse arg opt
m.map.0 = m.map.0 + 1
return mapReset('MAP.'m.map.0 , opt)
endProcedure mapNew
/*--- make an empty map, if opt <> '' maintain stem of keys
('K' in map.keys, '=' in a else in opt) --------------*/
mapReset: procedure expose m.
parse arg a, opt
if symbol('m.map.keys.a') == 'VAR' then
call mapClear a
if opt = '=' then
st = a
else if translate(opt) = 'K' then
st = 'MAP.KEYS.'a
else
st = opt
m.map.keys.a = st
if st \== '' then
m.st.0 = 0
return a
endProcedure
/*--- add a new key value pair to the map ----------------------------*/
mapAdd: procedure expose m.
parse arg a, ky, val
vv = mapValAdr(a, ky, 'a')
m.vv = val
return val
endProcedure mapAdd
/*--- change the value at a key or add key value ---------------------*/
mapPut: procedure expose m.
parse arg a, ky, val
vv = mapValAdr(a, ky, 'p')
m.vv = val
return val
endProcedure mapPut
/*--- return 1 if key ky exists in map a, 0 otherwise ----------------*/
mapHasKey: procedure expose m.
parse arg a, ky
return mapValAdr(a, ky) \== ''
endProcedure mapHasKey
/*--- return the value of key ky in map a if it exists,
else if called with a third argument return third argument
else issue an error ----------------------------------------*/
mapGet: procedure expose m.
parse arg a, ky
vv = mapValAdr(a, ky)
if vv \== '' then
return m.vv
else if arg() > 2 then
return arg(3)
else
return err('missing key in mapGet('a',' ky')')
endProcedure mapGet
/*--- return a stem of all keys --------------------------------------*/
mapKeys: procedure expose m.
parse arg a
if m.map.keys.a == '' then
call err 'mapKeys('a') with no keys'
return m.map.keys.a
endProcedure mapKeys
/*--- remove a key from the map, do nothing if it is missing ---------*/
mapRemove: procedure expose m.
parse arg a, ky
vv = mapValAdr(a, ky)
if vv == '' then
return ''
if m.map.keys.a \== '' then do
trace ?R /* not tested yet ???wkTest */
k = m.map.keys.a
mx = m.k.0
do i=1 to mx
if m.k.i == ky then do
m.k.i = m.k.mx
m.k.0 = mx - 1
return
end
end
end
val = m.vv
drop m.a.ky
return val
endProcedure mapRemove
/*--- remove all entries ---------------------------------------------*/
mapClear: procedure expose m.
parse arg a
st = mapKeys(a)
liLe = 243 - length(a)
do kx=1 to m.st.0
ky = m.st.kx
drop m.st.kx
if length(ky) <= liLe then do
drop m.a.ky
end
else do
adr = mapValAdr(a, ky)
if adr \== '' then do
ha = left(adr, lastPos('.', adr) - 3)
do i = 1 to m.ha.k.0
drop m.ha.k.i m.ha.v.i
end
drop m.ha.k.0
end
end
end
m.st.0 = 0
return a
endProcedure mapClear
/*--- return the value pointer for a key, '' if non existing
with fun = 'a' add a key, with 'p' put a key ------------*/
mapValAdr: procedure expose m.
parse arg a, ky, fun
if length(ky) + length(a) <= 243 then do
res = a'.'ky
if symbol('m.res') == 'VAR' then do
if fun == 'a' then
call err 'duplicate key' ky 'in map' a
return res
end
else if fun == '' then
return ''
end
else do
len = 243 - length(a)
q = len % 4
ha = a'.'left(ky, len - 2 * q) || substr(ky,
, (length(ky)-len) % 2 + 2 * q, q) || right(ky, q)
if symbol('M.ha.k.0') == 'VAR' then do
do i=1 to m.ha.k.0
if m.ha.k.i == ky then do
if fun == 'a' then
call err 'duplicate key' ky ,
'map' a 'hash' ha'.K.'i
return ha'.V.'i
end
end
end
else do
i = 1
end
if fun == '' then
return ''
if i > 9 then
call err 'overflow long key' y 'in map' a 'hash' ha'.K.'i
m.ha.k.0 = i
m.ha.k.i = ky
res = ha'.V.'i
end
if m.map.keys.a \== '' then
call mAdd m.map.Keys.a, ky
m.res = ''
return res
endProcedure mapValAdr
/* copy map end *******************************************************/
/* copy m begin ********************************************************
we use variables as follows
m. stem m: all global data and object data that must survive
a procedure call (m for memory in Memoria of B5000)
m.<mbr>.** to avoid conflicts: every rexx Module (copy) should
only allocate addresses m.<mbr>.** with <mbr> the name of
the rexx module
we pass parameters around (e.g. a=address, m=memory, st=stem)
and the called function may use m.a or m.a.subField etc.
gg*: local variable in subroutines without procedure
everything else: temporary data within procedure
every subroutine is declared as procedure expose m.
(also if no m. variable is used, because e.g. of error handling)
the few subroutines that cannot use procedure, should use only
variables starting with gg
***********************************************************************/
/*---make an area -----*/
mNewArea: procedure expose m.
parse arg nm, adr
m.m.area.0 = m.m.area.0 + 1
a = 'M.AREA.'m.m.area.0
if adr == '=' then
adr = nm
else if adr == '' then
adr = 'M.'m.m.area.0
if symbol('m.m.n2a.adr') == 'VAR' then
call err 'adr' adr 'for area' nm 'already used'
m.m.n2a.adr = a
call mAlias adr, nm
m.m.p2a.adr = a
m.a.0 = 0
m.a.free.0 = 0
m.a.address = adr
return nm
endProcedure mNewArea
mAlias: procedure expose m.
parse arg oldNa, newNa
if symbol('m.m.n2a.oldNa') \== 'VAR' then
call err 'area' oldNa 'does not exist'
if oldNa == newNa then
return
if symbol('m.m.n2a.newNa') == 'VAR' then
call err 'newName' newNa 'for old' oldNa 'already used'
m.m.n2a.newNa = m.m.n2a.oldNa
return
endProcedure mAlias
mNew: procedure expose m. ggArea
parse arg name
if symbol('m.m.n2a.name') \== 'VAR' then
call err 'area' name 'does not exists'
ggArea = m.m.n2a.name
if m.ggArea.free.0 > 0 then do
fx = m.ggArea.free.0
m.ggArea.free.0 = fx-1
m = m.ggArea.free.fx
end
else do
m.ggArea.0 = m.ggArea.0 + 1
m = m.ggArea.address'.'m.ggArea.0
end
return m
endProcedure mNew
mFree: procedure expose m.
parse arg m
p = 'M.P2A.'left(m, lastPos('.', m)-1)
area = m.p
fx = m.area.free.0 + 1
m.area.free.0 = fx
m.area.free.fx = m
return
endProcedure mFree
/*--- iterate over all allocate elements of an area ------------------*/
mIterBegin: procedure expose m.
parse arg nm
a = m.m.n2a.nm
return m.a.address'.0'
endProcedure mIterBegin
mIter: procedure expose m.
parse arg cur
if cur == '' then
return ''
lx = lastPos('.', cur)
p = 'M.P2A.'left(cur, lx-1)
a = m.p
ix = substr(cur, lx+1)
do ix=ix+1 to m.a.0
n = m.a.address'.'ix
do fx=1 to m.a.free.0 while m.a.free \== n
end
if fx > m.a.free.0 then
return n
end
return ''
endProcedure mIter
/*--- get m.a --------------------------------------------------------*/
mGet: procedure expose m.
parse arg a
return m.a
endProcedure mGet
/*--- put value v into m.a -------------------------------------------*/
mPut: procedure expose m.
parse arg a, v
m.a = v
return
endProcedure mPut
/*--- cut stem a to length len ---------------------------------------*/
mCut: procedure expose m.
parse arg a, len
m.a.0 = len
return a
endProcedure mCut
/*--- add one or several arguments to stem m.a -----------------------*/
mAdd: procedure expose m.
parse arg a
ix = m.a.0
do ax = 2 to arg()
ix = ix + 1
m.a.ix = arg(ax)
end
m.a.0 = ix
return a'.'ix
endProcedure mAdd
/*--- pop last element from stem m.a ---------------------------------*/
mPop: procedure expose m.
parse arg a
ix = m.a.0
if ix < 1 then
call err 'pop from empty stem' a
m.a.0 = ix-1
return m.a.ix
endProcedure mPop
/*--- add to m.dst.* a (sub)sequence of m.src.* ----------------------*/
mAddSt: procedure expose m.
parse arg dst, src, fx , tx
dx = m.dst.0
if fx == '' then
fx = 1
if tx == '' then
tx = m.src.0
do sx = fx to tx
dx = dx + 1
m.dst.dx = m.src.sx
end
m.dst.0 = dx
return
endProcedure mAddSt
/*--- find position of first occurrence of ele in stem m,
return 0 if nonemove a part of a stem -----------------------*/
mPos: procedure expose m.
parse arg m, ele, sx
if sx == '' then
sx = 1
do x=sx to m.m.0
if m.m.x = ele then
return x
end
return 0
endProcedure mPos
/*--- move a part of a stem ------------------------------------------*/
mMove: procedure expose m.
parse arg m, sx, dx
if dx < sx then do
y = dx
do x=sx to m.m.0
m.m.y = m.m.x
y = y + 1
end
end
else if dx > sx then do
y = m.m.0 + dx - sx
do x=m.m.0 by -1 to sx
m.m.y = m.m.x
y = y - 1
end
end
m.m.0 = m.m.0 + dx - sx
return
endProcedure mMove
/*--- insert a stem into another ------------------------------------*/
mInsert: procedure expose m.
parse arg m, tx, st
call mMove m, tx, tx+m.st.0
do sx=1 to m.st.0
dx = tx-1+sx
m.m.dx = m.st.sx
end
return
endProcedure mInsert
/*--- strip all elements of a stem -----------------------------------*/
mStrip: procedure expose m.
parse arg st, opt
if opt == '' then
opt = 'b'
do x=1 to m.st.0
m.st.x = strip(m.st.x, opt)
end
return st
endProcedure mStrip
/* cat the lines of a stem, possibly repeated --------------------------
args: stem, fmt see fGen: -------------------------------------*/
mCat: procedure expose m.
parse arg st, fmt
return mCatFT(st, 1, m.st.0, fmt)
mCatFT: procedure expose m.
parse arg st, fx, tx, fmt
if tx < fx then
return ''
fmt = '%s%qn%s%qe%q^'fmt
res = f(fmt, m.st.fx)
do sx=fx+1 to tx
res = res || f(fmt'%Qn', m.st.sx)
end
return res || f(fmt'%Qe')
endProcedure mCatFT
mIni: procedure expose m.
if m.m.ini == 1 then
return
m.m.ini = 1
call utIni
m.mBase64 = m.ut.alfUC || m.ut.alfLc || m.ut.digits'+-'
m.m.area.0 = 0
call mNewArea
return
endProcedure mIni
/* copy m end *********************************************************/
/* copy fTab begin ****************************************************/
fTabReset: procedure expose m.
parse arg m, m.m.titBef, m.m.titAft
m.m.generated = ''
m.m.0 = 0
m.m.len = 0
m.m.cols = ''
m.m.tit.0 = words(m.m.titBef m.m.titAft) + 5
m.m.set.0 = 0
do tx=1 to m.m.tit.0
m.m.tit.tx = ''
end
return m
endProcedure fTabReset
/* add a piece to title tx at current pos */
fTabAddTit: procedure expose m.
parse arg m, tx, t1
m.m.generated = ''
m.m.tit.tx = left(m.m.tit.tx, m.m.len) || t1
return m
endProcedure fTabAddTit
/*--- set the infos for one column -----------------------------------*/
fTabSet: procedure expose m.
parse arg m, c1 aDone, f1, l1
sx = m.m.set.0 + 1
m.m.set.0 = sx
m.m.set.sx = c1 aDone
m.m.set.sx.fmt = f1
m.m.set.sx.label = l1
m.m.set.c1 = sx
return
endProcedure fTabSet
fTabAdd: procedure expose m.
parse arg m, c1 aDone, f1, l1
cx = m.m.0 + 1
m.m.generated = ''
m.m.0 = cx
m.m.cols = m.m.cols c1
if words(m.m.cols) <> cx then
call err 'mismatch of column number' cx 'col' c1
if length(aDone) > 1 | wordPos('<'aDone'>', '<> <0> <1>') < 1 then
call err 'bad done' length(aDone) '<'aDone'> after c1' c1
m.m.cx.col = c1
m.m.cx.done = aDone \== 0
if l1 == '' then
m.m.cx.label = c1
else
m.m.cx.label = l1
px = pos('%', f1)
ax = pos('@', f1)
if px < 1 | (ax > 0 & ax < px) then
m.m.cx.fmt = f1
else
m.m.cx.fmt = left(f1, px-1)'@'c1 || substr(f1, px)
m.fTabTst.c1 = m.m.cx.label
t1 = f(f1, m.m.cx.label)
if pos(strip(t1), m.m.cx.label) < 1 then
t1 = left(left('', max(0, verify(t1, ' ') -1))m.m.cx.label,
, length(t1))
m.m.cx.len = length(t1)
call fTabAddTit m, 1, t1
do tx=2 to arg()-3
if arg(tx+3) \== '' then
call fTabAddTit m, tx, arg(tx+3)
end
m.m.len = m.m.len + length(t1)
return m
endProcedure fTabAdd
fTabGenerate: procedure expose m.
parse arg m
f = ''
do kx=1 to m.m.0
f = f || m.m.kx.fmt
end
m.m.fmt = m'.fmtKey'
call fGen f, m.m.fmt
cSta = m.m.tit.0+3
do cEnd=cSta until kx > m.m.0
cycs = ''
do cx=cSta to cEnd
m.m.tit.cx = ''
cycs = cycs cx
end
cx = cSta
ll = 0
do kx=1 to m.m.0 while length(m.m.tit.cx) < max(ll,1)
m.m.tit.cx = left(m.m.tit.cx, ll)m.m.kx.col
cx = cx + 1
if cx > cEnd then
cx = cSta
ll = ll + m.m.kx.len
end
end
m.m.cycles = strip(cycs)
m.m.tit.1 = translate(lefPad(m.m.tit.1, m.m.len), '-', ' ')'---'
m.m.generated = m.m.generated't'
return
endProcedure fTabGenerate
fTabColGen: procedure expose m.
parse arg m
do kx=1 to m.m.0
l = if(m.m.kx.label == m.m.kx.col, , m.m.kx.label)
f = lefPad(l, 10) lefPad(m.m.kx.col, 18)
if length(f) > 29 then
if length(l || m.m.kx.col) < 29 then
f = l || left('', 29 - length(l||m.m.kx.col))m.m.kx.col
else
f = lefPad(strip(l m.m.kx.col), 29)
g = strip(m.m.kx.fmt)
o = right(g, 1)
if pos(o, 'dief') > 0 then
f = f '@'m.m.kx.col'%12e @'m.m.kx.col'%18c'
else if o = 'C' then
f = f left(g, length(g)-1)'c'
else
f = f g
m.m.kx.colFmt = f
end
m.m.generated = m.m.generated'c'
return
endProcedure fTabColGen
fTab: procedure expose m.
parse arg m
call fTabBegin m
do forever
i = inO()
if i == '' then
leave
call out f(m.m.fmt, i)
end
return fTabEnd(m)
endProcedure fTab
fTabCol: procedure expose m.
parse arg m, i
if pos('c', m.m.generated) < 1 then
call fTabColGen m
do cx=1 to m.m.0
call out f(m.m.cx.colFmt, i)
end
return 0
endProcedure fTabCol
fTabBegin: procedure expose m.
parse arg m
if pos('t', m.m.generated) < 1 then
call fTabGenerate m
return fTabTitles(m, m.m.titBef)
fTabEnd: procedure expose m.
parse arg m
return fTabTitles(m, m.m.titAft)
fTabTitles: procedure expose m.
parse arg m, list
list = repAll(list, 'c', m.m.cycles)
do tx=1 to words(list)
t1 = word(list, tx)
call out m.m.tit.t1
end
return m
endProcedure fTabTitles
/* copy fTab end ****************************************************/
/* copy f begin *******************************************************/
f: procedure expose m.
parse arg ggFmt, ggA1, ggA2
if symbol('M.f.fmt.ggFmt') == 'VAR' then
interpret M.f.fmt.ggFmt
else
interpret fGen(ggFmt)
endProcedure f
fAll: procedure expose m.
parse arg fmt
do forever
o = inO()
if o == '' then
return
call out f(fmt, o)
end
endProcedure f
/*--- format character2hex (if not sql null) -------------------------*/
fH: procedure expose m.
parse arg v, l
if v \== m.sqlNull then
v = c2x(v)
if l >= 0 then
return right(v, l)
else
return left(v, -l)
endProcedure fH
/*--- format integer or fixPoint Decimal -----------------------------*/
fI: procedure expose m.
parse arg v, l, d
if datatype(v, 'n') then do
if d == '' then
v = format(v, ,0,0)
else
v = format(v, ,d,0)
if abbrev(l, '+') then
if \ abbrev(v, '-') then
v = '+'v
if length(v) > abs(l) then
return right('', abs(l), '*')
end
if l >= 0 then
return right(v, l)
else
return left(v, -l)
endProcedure fI
/*--- format floating point in E notitaion ---------------------------*/
fE: procedure expose m.
parse arg v, l, d, eChar
if eChar == '' then
eChar = 'e'
if \ datatype(v, 'n') then
return left(v, l)
else if l = 7 then
return fEStrip(format(v, 2, 2, 2, 0), 0, 2, 0, 2, eChar)
else if l = 8 then
return fEStrip(format(v, 2, 2, 2, 0), 1, 2, 0, 2, eChar)
else if l < 7 then
call err 'bad width fE('v',' l',' d')'
else if d == '' then
return fEStrip(format(v, 2, l-6, 2, 0), 1, l-6, 0, 2, eChar)
else if l - d - 5 < 1 then
call err 'bad prec fE('v',' l',' d')'
else
return fEStrip(format(v, 2, d, l-d-5, 0), 1, d, 1, l-d-5, eChar)
endProcedure fE
fEStrip: procedure expose m.
parse arg v, mSi, de, eSi, ePr, eChar
parse var v ma 'E' ex
if ex == '' then do
ma = strip(ma, 't')
ex = '+'left('', ePr, 0)
end
if eSi == 0 then do
if abbrev(ex, '+') then
ex = substr(ex, 2)
else if abbrev(ex, '-0') then
ex = '-'substr(ex, 3)
else do
exO = ex
ex = left('-9', ePr, '9')
/* say 'format('ma '* (1E'exO') / (1E'ex'), 2,' de', 0)' */
ma = format(ma * ('1E'exO) / ('1E'ex), 2, de, 0)
end
end
if mSi == 0 then
if abbrev(ma, ' ') then
ma = substr(ma, 2)
else
ma = format(ma, 2, de-1)
r = ma || eChar || ex
if length(r) - length(eChar) <> 2 + mSi + de + eSi + ePr then
call err 'bad fEStrip('v',' mSi',' de',' eSi',' ePr',' eChar ,
|| ') ==>' r 'bad len' length(r)
return r
endProcedure fEStrip
/*--------------------------------------------------------------------
fGen: Format generator should be compatible with fPrint|
<<<< + extension of fPrint, - in fPrint but not implemented
+ \s a single space
+ \n a newLine
+ \% \@ \\ the escaped char
('@' argN? '.'? field)?'%' flags? width? ('.' precision)? specifier
specifier: is the most significant one and defines the type
- c Character a
- C Cut %-nC = left(v,n), %nC = right(v,n) %n.mC = substr(m, n)
- d or i Signed decimal integer
- e Scientific notation (mantissa/exponent) using e character 3.9265e+2
- E Scientific notation (mantissa/exponent) using E character 3.9265E+2
- f Decimal floating point
- g Use the shorter of %e or %f
- G Use the shorter of %E or %f
- h Characters in hex
- o Unsigned octal 610
- S Strip(..., both)
- u Unsigned decimal integer
- x Unsigned hexadecimal integer
- X Unsigned hexadecimal integer (capital letters)
- p Pointer address
- n Nothing printed. The argument must be a pointer to a signed int, wh
+ % A % followed by another % character will write % to stdout. %
+ Q for iterator first nxt end
Flags:
- - Left-justify within the given field width; Right justification is
- + Forces to precede the result with a plus or minus sign (+ or -)
- (space) If no sign is going to be written, a blank space is inserte
- # Used with o, x or X specifiers the value is preceeded with 0, 0x
force decimalpoint ...
- 0 Left-pads the number with zeroes (0) instead of spaces, where pad
+ = reuse previous input argument
length not implemented
----------------------------------------------------------------------*/
fGen: procedure expose m.
parse arg src, key
if key == '' then do
qSuf = right(src, 3)
if length(qSuf) == 3 & abbrev(qSuf, '%Q') then
s2 = left(src, length(src) - 3)
else
s2 = src
call fGen s2, s2
if symbol('m.f.fmt.src') == 'VAR' then
return m.f.fmt.src
call err fGen 'format' src 'still undefined'
end
call scanIni
cx = 1
ky = key
do forever
cy = pos('%q', src, cx)
if cy < 1 then do
m.f.fmt.ky = fGenCode(substr(src, cx), 'F.INFO.'ky)
leave
end
m.f.fmt.ky = fGenCode(substr(src, cx, cy-cx), 'F.INFO.'ky)
if substr(src, cy, 3) == '%q^' then do
if substr(src, cy, 5) == '%q^%q' then
cy = cy+3
else if length(src) = cy + 2 then
leave /* do not overrite existing fmt | */
end
if cy > length(src)-2 then
call err 'bad final %q in' src
if substr(src, cy, 3) == '%q^' then
ky = key
else
ky = key'%Q'substr(src, cy+2, 1)
m.f.tit.ky.0 = 0
cx = cy+3
end
if symbol('m.f.fmt.key') == 'VAR' then
return m.f.fmt.key
call scanErr fGen 'format' src 'still undefined'
endProcedure fGen
fGenCode: procedure expose m.
parse arg aS, jj
jx = 0
call scanSrc fGen, aS
call scanSrc fGen, aS
ax = 0
cd = ''
do forever
txt = fText()
if txt \== '' then
cd = cd '||' quote(txt, "'")
if scanEnd(fGen) then do
m.jj.0 = jx
if cd \== '' then
return "return" substr(cd, 4)
else
return "return ''"
end
an = ''
af = '-'
if \ scanLit(fGen, '@') then do
ax = ax + 1
end
else do
if scanWhile(fGen, '0123456789') then
ax = m.fGen.tok
else if ax < 1 then
ax = 1
if substr(m.fGen.src, m.fGen.pos, 1) \== '%' then do
call scanLit fGen, '.'
af = fText()
end
end
if \ scanLit(fGen, '%') then
call scanErr fGen, 'missing %'
call scanWhile fGen, '-+'
flags = m.fGen.tok
call scanWhile fGen, '0123456789'
len = m.fGen.tok
siL = len
if len \== '' & flags \== '' then
siL = left(flags, 1)len
prec = ''
if scanLit(fGen, '.') then do
if len == '' then
call scanErr fGen, 'empty len'
call scanWhile fGen, '0123456789'
prec = m.fGen.tok
end
call scanChar fGen, 1
sp = m.fGen.tok
if ax < 3 then
aa = 'ggA'ax
else
aa = 'arg(' || (ax+1) || ')'
if af \== '-' then do
if af \== '' then
af = '.'af
if abbrev(aa, 'ggA') & pos('.GG', af) < 1 ,
& translate(af) == af then
aa = 'm.'aa || af
else
aa = 'mGet('aa '||' quote(af, "'")')'
end
if sp = 'c' then do
pd = word('rigPad lefPad', (pos('-', flags) > 0)+1)
if prec \== '' then
cd = cd '||' pd'(substr('aa',' prec'),' len')'
else
cd = cd '||' pd'('aa',' len')'
end
else if sp = 'C' then do
if prec \== '' then
cd = cd '|| substr('aa',' prec',' len')'
else if pos('-', flags) > 0 then
cd = cd '|| left('aa',' len')'
else
cd = cd '|| right('aa',' len')'
end
else if sp == 'H' then
cd = cd "|| fH("aa", '"siL"')"
else if sp == 'h' then
cd = cd "|| translate(fH("aa", '"siL"'), 'abcdef','ABCDEF')"
else if sp == 'i' then do
cd = cd "|| fI("aa", '"siL"'"
if prec == '' then
cd = cd')'
else
cd = cd',' prec')'
end
else if sp == 'E' | sp == 'e' then
cd = cd "|| fE("aa"," len"," prec", '"sp"')"
else if sp == 's' then
cd = cd '||' aa
else if sp = 'S' then
cd = cd '|| strip('aa')'
else
call scanErr fGen, 'bad specifier' sp
jx = jx + 1
m.jj.jx.arg = ax
m.jj.jx.name = af
end
endProcedure fGenCode
fText: procedure expose m. ft.
res = ''
do forever
if scanUntil(fGen, '\@%') then
res = res || m.fGen.tok
if \ scanLit(fGen, '\') then
return res
call scanChar fGen, 1
if pos(m.fGen.tok, 's\@%') < 1 then
res = res'\' || m.fGen.tok
else
res = res || translate(m.fgen.tok, ' ', 's')
end
endProcedure fText
/* copy f end *******************************************************/
/* copy err begin *** errorhandling, messages, help ****************/
errIni: procedure expose m.
if m.err.ini == 1 then
return
m.err.ini = 1
m.err.handler = ''
m.err.cleanup = ';'
m.err.opt = ''
parse source m.err.os .
m.err.ispf = 0
m.err.screen = 0
if m.err.os \== 'LINUX' then
if sysVar('sysISPF') = 'ACTIVE' then do
m.err.ispf = 1
address ispExec 'vget zScreen shared'
m.err.screen = zScreen
end
return
endProcedure errIni
/* configure err -----------------------------------------------------*/
errReset: procedure expose m.
call errIni
parse arg m.err.opt, m.err.handler
if pos('I', translate(m.err.opt)) > 0 & m.err.ispf then
address ispExec 'control errors return'
return
endSubroutine errReset
/*--- error routine: abend with message ------------------------------*/
err:
parse arg ggTxt, ggOpt
call errIni
drop err handler cleanup opt call return
if ggOpt == '' & m.err.handler \== '' then
interpret m.err.handler
call errSay 'f}'ggTxt
call errCleanup
if ggOpt == '' then
ggOpt = m.err.opt
upper ggOpt
if pos('T', ggOpt) > 0 then do
trace ?r
say 'trace ?r in err'
end
if pos('H', ggOpt) > 0 & m.err.eCat == 'f' then do
call errSay ' }errorhandler exiting with divide by zero' ,
'to show stackHistory'
x = 1 / 0
end
call errSay ' }errorhandler exiting with exit(12)'
exit errSetRc(12)
endSubroutine err
/*--- set rc for ispf: -------------------------------------------------
if a cmd is run by ispStart, its RC is ignored,
but ISPF passes the value of the shared variable zIspfRc
back as return code
----------------------------------------------------------------------*/
errSetRc: procedure expose m.
parse arg zIspfRc
if m.err.ispf then
address ispExec vput 'zIspfRc' shared
return zIspfRc
endProcedure errSetRc
/*--- error routine: user message cleanup exit -----------------------*/
errAddCleanup: procedure expose m.
parse arg code
call errIni
/* concatenate backwards, then it is executed also backwards */
m.err.cleanup = ';'code || m.err.cleanup
return
endProcedure errAddCleanup
errRmCleanup: procedure expose m.
parse arg code
call errIni
cx = pos(';'code';', m.err.cleanup)
if cx > 0 then
m.err.cleanup = left(m.err.cleanup, cx) ,
|| substr(m.err.cleanup, cx + length(code)+2)
return
endProcedure errRmCleanup
errCleanup: procedure expose m.
call errIni
errCleanup = m.err.cleanup
if errCleanup <> ';' then do
m.err.cleanup = ';'
say 'err cleanup begin' errCleanup
interpret errCleanup
say 'err cleanup end' errCleanup
end
if symbol('m.tso.ddAlloc') == 'VAR' then
call tsoFreeAll
return
endProcedure errCleanup
/*--- say an errorMessage msg with pref and linesplits --------------*/
errSay: procedure expose m.
parse arg msg
return saySt(errMsg(msg))
/*--- prefix an errormessage with pref,
split it into lines at \n to stem m.err -------------------*/
errMsg: procedure expose m.
parse arg msg
m.err.eCat = 'f'
do while substr(msg, 2, 1) == '}'
parse var msg m.err.eCat '}' msg
end
res = msg
if m.err.eCat <> '' then do
pTxt = ',error,fatal error,input error,s-}scanErr,warning,'
/* pTxt = ',error,fatal error,input error,syntax error,warning,' */
px = pos(','m.err.eCat, pTxt)
if px < 1 then do
m.err.eCat = 'f'
px = pos(','m.err.eCat, pTxt)
end
res = substr(pTxt, px+1, pos(',', pTxt, px+2)-px-1)
if substr(res, 3, 1) == '}' then
parse var res 2 opt 3 br 4 res
if opt == '-' then
res = res msg
else do
parse source . . s3 . /* current rexx */
res = res 'in' s3':' msg
end
end
return splitNl(err, res) /* split lines at \n */
endProcedure errMsg
splitNL: procedure expose m.
parse arg st, msg
bx = 1
do lx=1 to 20
ex = pos('\n', msg, bx)
if ex < bx then
leave
m.st.lx = substr(msg, bx, ex-bx)
bx = ex+2
end
m.st.lx = substr(msg, bx)
m.st.0 = lx
return st
endProcedure splitNL
/*--- say (part of) the lines of a stem ----------------------------*/
saySt: procedure expose m.
parse arg st, fx, tx
do lx=word(fx 1, 1) to word(tx m.st.0, 1)
say m.st.lx
end
return st
endProcedure saySt
/*--- out (part of) the lines of a stem ----------------------------*/
outSt: procedure expose m.
parse arg st, fx, tx
do lx=word(fx 1, 1) to word(tx m.st.0, 1)
call out m.st.lx
end
return st
endProcedure outSt
/*--- say a trace message if m.trace is set --------------------------*/
debug: procedure expose m.
parse arg msg
if m.debug == 1 then
say 'debug:' msg
return
endProcedure debug
/*--- output a trace if m.trace is set -------------------------------*/
trc: procedure expose m.
parse arg msg
if m.trace == 1 then
call out 'trc:' msg
return
endProcedure trc
/*--- assert that the passed rexx expression evaluates to true -------*/
assert:
interpret 'assertRes =' arg(1)
if assertRes \==1 then
call err 'assert failed' arg(1) '==>' assertRes':' arg(2)
return
endProcedure assert
/*--- abend with Message after displaying help -----------------------*/
errHelp: procedure expose m.
parse arg msg
call errSay 'i}'msg
call help 0
call err 'i}'msg
endProcedure errHelp
/*--- display the first comment block of the source as help ----------*/
help: procedure expose m.
parse arg doClear
if doClear \== 0 then
address tso 'clear'
parse source . . s3 .
say right(' help for rexx' s3, 72, '*')
do lx=1 while pos('/*', sourceLine(lx)) < 1
if lx > 10 then
return err('initial commentblock not found for help')
end
doInc = 1
ho = m.err.helpOpt
do lx=lx+1 to sourceline() while pos('*/', sourceline(lx)) = 0
li = strip(sourceLine(lx), 't')
cx = lastPos('{', li)
if cx > 0 then do
if length(ho) = 1 then
doInc = cx = length(li) | pos(ho, li, cx+1) > 0
li = left(li, cx-1)
end
if doInc then
say li
end
say right(' end help for rexx' s3, 72, '*')
return 4
endProcedure help
/* copy err end *****************************************************/
/* copy ut begin *****************************************************/
utIni: procedure expose m.
if m.ut.ini == 1 then
return
m.ut.ini = 1
m.ut.digits = '0123456789'
m.ut.alfLC = 'abcdefghijklmnopqrstuvwxyz'
m.ut.alfUC = translate(m.ut.alfLc)
m.ut.Alfa = m.ut.alfLc || m.ut.alfUC
m.ut.alfNum = m.ut.alfa || m.ut.digits
m.ut.alfDot = m.ut.alfNum || '.'
m.ut.alfId = m.ut.alfNum'_' /* avoid rexx allowed @ # $ ¬ . | ? */
m.ut.alfIdN1 = m.ut.digits /* not as first character */
m.ut.alfRex = m.ut.Alfa'.0123456789@#$?' /* charset puff mit ¬*/
m.ut.alfRexN1= '.0123456789'
m.ut.alfPrint = m.ut.alfNum'+-*/=()¢!{}<> .:,;?|''"%&#@$£\_'
return
endProcedure utIni
/*--- if function warning all3 arguments get evaluated|
e.g if(x=0, 'infinity', 1/0) will fail| -----------*/
if: procedure expose m.
parse arg co, ifTrue, ifFalse
if co then
return ifTrue
else
return ifFalse
endProcedure if
/*--- embedded ASSignement:
assign the second argument to the variable with name in first arg
and return the value assigned ----------------------------------*/
ass:
call value arg(1), arg(2)
return arg(2)
/*--- embedded ASSignement return NotNull:
assign the second argument to the variable with name in first arg
and return 1 if value not null, 0 if null ----------------------*/
assNN:
call value arg(1), arg(2)
return arg(2) \== ''
/*--- return current time and cpu usage ------------------------------*/
utTime: procedure expose m.
return time() 'ela='time('E') 'cpu='sysvar('syscpu'),
'su='sysvar('syssrv')
tstUtTime: procedure expose m.
say 'begin' utTime() sysvar('sysnode')
do 3000000
end
say 'end ' utTime()
return
/*--- sleep several seconds ------------------------------------------*/
sleep: procedure expose m.
parse arg secs, sayIt
if sayit <> 0 then
say 'sleeping' secs 'secs' time()
CALL SYSCALLS 'ON'
ADDRESS SYSCALL "sleep" secs
CALL SYSCALLS 'OFF'
if sayit <> 0 then
say 'slept' secs 'secs' time()
return
endProcedure sleep
/*--- left without truncation ----------------------------------------*/
lefPad: procedure expose m
parse arg s, len
if length(s) >= len then
return s
return left(s, len)
endProcedure lefPad
/*--- right without truncation ---------------------------------------*/
rigPad: procedure expose m
parse arg s, len
if length(s) >= len then
return s
return right(s, len)
endProcedure rigPad
/*--- quote string txt using quoteChar qu ("" ==> ") -----------------*/
quote: procedure expose m.
parse arg txt, qu
if qu = '' then
qu = '"'
res = qu
ix = 1
do forever
qx = pos(qu, txt, ix)
if qx = 0 then
return res || substr(txt, ix) || qu
res = res || substr(txt, ix, qx-ix) || qu || qu
ix = qx + length(qu)
end
endProcedure quote
/*--- translate to lowercase -----------------------------------------*/
ut2lc: procedure expose m.
parse arg s
return translate(s, m.ut.alfLc, m.ut.alfUc)
/*--- verify an id ---------------------------------------------------*/
verifId: procedure expose m.
parse arg src, extra
if pos(left(src, 1), m.ut.alfIdN1) > 0 then
return 1
else
return verify(src, m.ut.alfId || extra, 'n')
/*--- return the count of occurrences of needle in heyStack ----------*/
posCount: procedure expose m.
parse arg needle, hayStack, start, fin
if start = '' then
start = 1
if fin = '' then
fin = length(hayStack) + 1 - length(needle)
do cnt = 0 by 1
start = pos(needle, haystack, start)
if start < 1 | start > fin then
return cnt
start = start + length(needle)
end
endProcedure posCount
repAll: procedure expose m.
parse arg src
do ax = 2 by 2 to arg()
src = repAl2(src, src, arg(ax), arg(ax+1))
end
return src
endProcedure repAll
repAl2: procedure expose m.
parse arg src, sPos, old, new
res = ''
cx = 1
do forever
nx = pos(old, sPos, cx)
if nx < 1 then
return res || substr(src, cx)
res = res || substr(src, cx, nx-cx) || new
cx = nx + length(old)
end
endProcedure repAl2
repAllWords: procedure expose m.
parse arg src, w, new
res = ''
wx = 0
cx = 1
do forever
wx = wordPos(w, src, wx+1)
if wx < 1 then
return res || substr(src, cx)
nx = wordindex(src, wx)
res = res || substr(src, cx, nx-cx) || new
cx = nx + length(w)
end
endProcedure repAllWords
/* 6opy ut end ********************************************************/
}¢--- A540769.WK.REXX.O13(DDLX) cre=2013-06-12 mod=2013-06-12-14.29.09 A540769 ---
/* rexx ****************************************************************
ddlx edit macro to exclude less important lines from ddlCheck report
argument: W for W-changes: show object to change or drop
C for C-changes: show objects to create or drop
--- history ------------------------------------------------------------
12. 6.13 walter neu
********/ /*** end of help ********************************************
***********************************************************************/
call errReset 'hI'
if adrEdit('macro (spec) PROCESS', '*') \== 0 then
exit err(' }not used as editmacro rc='rc )
sp = ut2lc(spec)
if sp == 'w' then
showNewOld = '=-'
else if sp == 'c' | spec == '' then
showNewOld = '+-'
else
call errHelp "s}bad macro argument '"spec"'"
call adrEdit 'reset'
call adrEdit '(ll) = lineNum .zl'
fnd = 0
do lx=ll by -1 to 4
call adrEdit '(li) = line' lx
cat = strip(substr(li, 5, 2))
if abbrev(cat, 's') then do
if cat == 's' & pos(left(li, 1), showNewOld) < 1 ,
& \ fnd then
call adrEdit 'xstatus' lx '= x'
fnd = 0
end
else if wordPos(strip(cat), 'o a') > 0 then
call adrEdit 'xstatus' lx '= x'
else
fnd = 1
end
exit
/* copy adrIsp begin *************************************************/
/**********************************************************************
lmd: catalog read
call sequence: lmdBegin, lmdNext*, lmdEnd
mit lmd service (mit save in file und read,
weil list zu langsam und listcat abstürzt)
1. arg (grp) als group dataset für lmd save
und dd name für file read
***********************************************************************/
lmdBegin: procedure expose m.
parse arg grp, lev
call adrIsp 'lmdinit listid(lmdId) level('lev')'
res = adrIsp('lmdlist listid(&lmdId) option(save) group('grp')', 4)
call adrIsp 'lmdfree listid(&lmdId)'
if res = 0 then do
call trc timing() 'lmdlist save' grp lev
call adrTso 'alloc dd('grp') shr dsn('grp'.datasets)'
end
else do
call trc 'no datasets found' timing() 'lmdlist save' grp lev
call adrTso 'alloc dd('grp') dummy'
end
call tsoOpen grp, 'R'
return /* end lmdBegin */
lmdNext:
parse arg ggGrp, ggSt, withVolume
if \ readDD(ggGrp, ggSt) then
return 0
if withVolume \== 1 then
do ggIx=1 to value(ggSt'0')
x = value(ggSt || ggIx, word(value(ggSt || ggIx), 1))
end
return 1
endSubroutin lmdNext
lmdEnd: procedure expose m.
parse arg grp
call tsoClose grp
call adrTso 'free dd('grp')'
return /* end lmdEnd */
lmd: procedure expose m.
parse arg lev, withVol
call lmdBegin gg1, lev
do while lmdNext(gg1, q., withVol)
do x=1 to q.0
call out q.x
end
end
call lmdEnd gg1
return
endProcedure lmd
/**********************************************************************
member list of a pds:
call sequence x=lmmBegin(dsn) lmmNext(x) * lmmEnd(x)
***********************************************************************/
lmm: procedure expose m.
parse arg dsn
id = lmmBegin(dsn)
do ix=1 by 1
m = lmmNext(id)
if m = '' then
leave
call out m
end
call lmmEnd id
return
endProcedure lmm
lmmBegin: procedure expose m.
parse arg dsn
mbr = dsnGetMbr(dsn)
pds = dsnSetMbr(dsn, )
call adrIsp "LMINIT DATAID(lmmId) DATASET('"pds"') ENQ(SHRW)"
call adrIsp "LMOPEN DATAID("lmmId") OPTION(INPUT) "
res = lmmId
if mbr <> '' then
res = res 'pattern('mbr')'
return res
endProcedure lmmBegin
lmmEnd: procedure expose m.
parse arg lmmId opt
call adrIsp "LMMLIST DATAID("lmmId") option(free)", 8
call adrIsp "LMCLOSE DATAID("lmmId")"
call adrIsp "LMFREE DATAID("lmmId")"
return
endProcedure lmmEnd
lmmNext: procedure expose m.
parse arg lmmId opt
if adrIsp("LMMLIST DATAID("lmmid")" ,
"OPTION(LIST) MEMBER(Mbr)" opt, 4 8) = 0 then
return strip(mbr)
else
return ''
endProcedure lmmNext
lmmRm: procedure expose m.
parse arg dsn, mbrs
mbrs = dsnGetMbr(dsn) mbrs
pds = dsnSetMbr(dsn, )
call adrIsp "LMINIT DATAID(lmmId) DATASET("pds") ENQ(SHRW)"
call adrIsp "LMOPEN DATAID("lmmId") OPTION(OUTPUT) "
err = ''
do wx=1 to words(mbrs)
m1 = word(mbrs, wx)
rr = adrIsp("lmmDel dataid("lmmId") member("m1")", 0 8 12)
if rc = 0 then
say 'removed' m1 'from' pds
else if rc = 8 then
say 'not found' m1 'in' pds
else do
err = 'error deleting' m1 'in' pds 'rc' rr strip(zerrlm)
say err
leave
end
end
call adrIsp "LMCLOSE DATAID("lmmId")"
call adrIsp "LMFREE DATAID("lmmId")"
if err <> '' then
call err err
return
endProcedure lmmRm
/*--- address ispf with error checking -------------------------------*/
adrIsp:
parse arg ggIspCmd, ggRet
address ispexec ggIspCmd
if rc = 0 then return 0
else if ggRet == '*' then return rc
else if wordPOS(rc, ggRet) > 0 then return rc
else
call err 'adr ispExec rc' rc 'in' ggIspCmd':' strip(zerrlm)
endSubroutine adrIsp
/*--- address editor with error checking -----------------------------*/
adrEdit:
parse arg ggEditCmd, ggRet
address isrEdit ggEditCmd
if rc = 0 then return 0
else if ggRet == '*' then return rc
else if wordPOS(rc, ggRet) > 0 then return rc
else
call err 'adr isrEdit rc' rc 'for' ggEditCmd
endSubroutine adrEdit
/* copy adrIsp end *************************************************/
/* copy adrTso begin *************************************************/
/*--- send ggTsoCmd to tso, fail if rc <> 0 or not listed in ggRet ---*/
adrTso:
parse arg ggTsoCmd, ggRet
address tso ggTsoCmd
if rc == 0 then return 0
else if ggRet == '*' then return rc
else if wordPos(rc, ggRet) > 0 then return rc
else
call err 'adrTso rc' rc 'for' ggTsoCmd
return /* end adrTso */
/*--- format dsn from tso format to jcl format -----------------------*/
dsn2jcl: procedure expose m.
parse upper arg dsn ., addPrefix
if left(dsn,1) = "'" then
return strip(dsn, 'b', "'")
sp = sysvar('SYSPREF')
if sp == '' then
sp = userid()
cx = pos('~', dsn)
if cx < 1 & addPrefix == 1 then
return sp'.'dsn
do while cx \== 0
le = left(dsn, cx-1)
ri = substr(dsn, cx+1)
if right(le, 1) == '.' | left(ri, 1) == '.' then
dsn = le || sp || ri
else
dsn = le || left('.', le \== '') || sp ,
|| left('.', ri \== '') || ri
cx = pos('~', spec, cx)
end
return dsn
endProcedure dsn2Jcl
/*--- format dsn from jcl format to tso format -----------------------*/
jcl2dsn: procedure expose m.
parse arg dsn .
return "'"dsn"'"
endProcedure jcl2dsn
dsnSetMbr: procedure expose m.
parse arg dsn, mbr
bx = pos('(', dsn)
if bx > 0 then
dsn = strip(left(dsn, bx-1))
if mbr <> '' then
dsn = dsn'('strip(mbr)')'
return dsn
endProcedure dsnSetMbr
dsnGetMbr: procedure expose m.
parse arg dsn
lx = pos('(', dsn)
rx = pos(')', dsn, lx+1)
if lx < 1 then
return ''
else if lx < rx then
return substr(dsn, lx+1, rx-lx-1)
else
return strip(substr(dsn,lx+1))
endProcedure dsnGetMbr
/**********************************************************************
io: read or write a dataset with the following callsequences:
read: tsoOpen...'R', readDD*, tsoClose
write: tsoOpen...'W', writeDD*, tsoClose
readDD returns true if data read, false at eof
do not forget that open is mandatory to write empty file|
***********************************************************************/
/*--- open dd for read (rw='R') or write (rw='W') --------------------*/
tsoOpen: procedure expose m.
parse upper arg dd, rw
return adrTso('execio' 0 'disk'RW tsoDD(dd, 'o') '(open)')
return /* end tsoOpen */
/*--- close dd -----------------------------------------------------*/
tsoClose: procedure expose m.
parse upper arg dd
return adrTso('execio 0 diskW' dd '(finis)')
endProcedure tsoClose
/*--- read from DD ggDD into ggSt, return false at eof ---------------*/
readDD:
parse arg ggDD, ggSt, ggCnt
if ggCnt = '' then
ggCnt = 100
call adrTso 'execio' ggCnt 'diskR' ggDD '(stem' ggSt')', 2
return (value(ggSt'0') > 0)
return /* end readDD */
/*--- write to gg ggDD from stem ggSt, ggCnt records -----------------*/
writeDD:
parse arg ggDD, ggSt, ggCnt
if ggCnt == '' then
ggCnt = value(ggst'0')
call adrTso 'execio' ggCnt 'diskW' ggDD '(stem' ggSt')'
return
endSubroutine writeDD
/*--- readNx: read next line, using buffer ---------------------------*/
/*--- begin: allocate dsnSpec and ini ------------------------ -------*/
readNxBegin: procedure expose m.
parse arg m, m.m.dsn, m.m.dd, m.m.Cnt
if m.m.dd = '' then
m.m.dd = 'DDNX*'
if m.m.cnt = '' then
m.m.cnt = 1000
m.m.cx = m.m.cnt + 999
m.m.buf0x = 0
m.m.0 = 0
parse value dsnAlloc('dd('m.m.dd')' m.m.dsn) with m.m.dd m.m.free
call tsoOpen m.m.dd, 'R'
return m
endProcedure readDDNxBegin
/*--- return the stem of the next line, or '' at end -----------------*/
readNx: procedure expose m.
parse arg m
m.m.cx = m.m.cx + 1
if m.m.cx <= m.m.0 then
return m'.'m.m.cx
m.m.buf0x = m.m.buf0x + m.m.0
if \ readDD(m.m.dd, 'M.'m'.', m.m.cnt)then
return ''
m.m.cx = 1
return m'.1'
endProcedure readDDNx
/*--- return the stem of the curr line, '' at end --------------------*/
readNxCur: procedure expose m.
parse arg m
if m.m.cx <= m.m.0 then
return m'.'m.m.cx
else
return ''
endProcedure readNxCur
/*--- return the position (line number) of reader
plus le characters of the current line (default 50) ------*/
readnxPos: procedure expose m.
parse arg m, le
li = m'.'m.m.cx
li = strip(m.li, 't')
if arg() < 2 then
le = 50
if le < 1 then
li = ''
else if length(li) <= le then
li = ':' li
else
li = ':' left(li, le-3)'...'
return 'line' (m.m.buf0x + m.m.cx)li
endProcedure readnxPos
/*--- close and deallocate ------------------------------------------*/
readNxEnd: procedure expose m.
parse arg m
call tsoClose m.m.dd
call tsoFree m.m.free
return
endProcedure readDDNxEnd
/*--- standardise a dsn spec
word1 dsName or -
word2 dd or -
word3 disp or -
word4 to first : attributes in tso format
after first : attributes for new allocation
----------------------------------------------------------------------*/
dsnSpec: procedure expose m.
parse upper arg spec
rr = '' /* put leading - in separate words */
do sx=1 while words(rr) < 3 & wx \= ''
wx = word(spec, sx)
do while abbrev(wx, '-') & words(rr) < 3
wx = substr(wx, 2)
rr = rr '-'
end
rr = rr wx
end
spec = rr subWord(spec, sx)
na = ''
dd = ''
di = ''
if left(spec, 1) = '&' then /* external spec is handled ok */
spec = strip(substr(spec, 2))
do wx=1 by 1
w = word(spec, wx)
if w = '' | abbrev(w, '.') | abbrev(w, ':') then
leave
else if wordPos(w, 'OLD SHR MOD NEW')>0 | abbrev(w, 'SYSO') then
di = w
else if w = 'CATALOG' then
di = di w
else if abbrev(w, 'DD(') then
dd = substr(w, 4, length(w)-4)
else if abbrev(w, 'DSN(') then
na = strip(substr(w, 5, length(w)-5))
else if na == '' then
na = dsn2jcl(w)
else if pos('(', w) > 0 then
leave
else if dd == '' then
dd = w
else if di == '' then
di = w
else
leave
end
if na == '' then
na = '-'
else if abbrev(na, "'") then
na = substr(na, 2, length(na)-2)
if dd == '' then dd = '-'
if di == '' then di = '-'
re = subword(spec, wx)
if abbrev(re, '.') then
re = substr(re, 2)
return na dd di re
endProcedure dsnSpec
/*--- alloc a dsn with dsnAlloc
if the dsn is inuse wait and retry
until either the allocation is successfull
or the timeout occurs --------------------------------------*/
dsnAllocWait: procedure expose m.
parse upper arg spec, pDi, pDD, timeOut
x = max(1, arg() - 1)
do rt=0
m.adrTsoAl.1 = ''
m.adrTsoAl.2 = ''
m.adrTsoAl.3 = ''
call outtrap m.adrTsoAl.
res = dsnAlloc(spec, pDi, pDD, '*')
call outtrap off
if \ datatype(res, 'n') then
return res
msg = m.adrTsoAl.1'\n'm.adrTsoAl.2'\n'm.adrTsoAl.3
if rt > timeOut & timeOut \== '' then
return err('timeout allocating' spec time() '\n'msg)
if pos('DATA SET IS ALLOCATED TO ANOTHER', msg) < 1 then
return err('allocating' spec'\n'msg)
say time() 'sleep and retry alloc' spec
call sleep 1, 0
end
endProcedure dsnAllocWait
/*--- alloc a dsn or a dd
spec '-'<ddName>
datasetName? disposition? '.'? attributes? (':' newAtts)?
disp default disposition
dd default dd name
retRc erlaubte ReturnCodes (leer = 0)
returns if ok then ddName <rexx for free> otherwise rc -----*/
dsnAlloc: procedure expose m.
parse upper arg spec, pDi, pDD, retRc
parse value dsnSpec(spec) with na dd di rest
if na = '-' then
m.dsnAlloc.dsn = ''
else
m.dsnAlloc.dsn = na
if dd == '-' & pDD \== '' then
dd = pDD
if dd == '-' then
dd = 'DD*'
dd = tsoDD(dd, 'a')
if na == '-' & di == '-' & rest = '' then
return dd
if di = '-' then
if pDi == '' then
di = 'SHR'
else
di = pDi
if pos('(', na) < 1 then
nop
else if di = 'MOD' then
call err 'disp mod for' na
else
di = 'SHR'
if pos('/', na) > 0 then
rx = csmAlloc(na dd di rest, retRc)
else
rx = tsoAlloc(na dd di rest, retRc)
if rx = 0 then
return dd dd
else
return rx
endProcedure dsnAlloc
/*--- find a free dd with prefix dd ----------------------------------*/
tsoDD: procedure expose m.
parse arg dd, f
if symbol('m.tso.ddAlloc') \== 'VAR' then do
call errIni
m.tso.ddAlloc = ''
m.tso.ddOpen = ''
end
if m.err.ispf then
address ispExec 'vget wshTsoDD shared'
else
wshTsoDD = m.tso.ddAlloc
if f == '-' then do
ax = wordPos(dd, m.tso.ddAlloc)
if ax > 0 then
m.tso.ddAlloc = delWord(m.tso.ddAlloc, ax, 1)
ox = wordPos(dd, m.tso.ddOpen)
if ox > 0 then
m.tso.ddOpen = delWord(m.tso.ddOpen , ox, 1)
if ax < 1 & ox < 1 then
call err 'tsoDD dd' dd 'not used' m.tso.ddAlloc m.tso.ddOpen
sx = wordPos(dd, wshTsoDD)
if sx > 0 then
wshTsoDD = delWord(wshTsoDD , sx, 1)
end
else if f == 'o' then do
if wordPos(dd, m.tso.ddOpen m.tso.ddAlloc) < 1 then
m.tso.ddOpen = strip(m.tso.ddOpen dd)
end
else if f <> 'a' then do
call err 'tsoDD bad fun' f
end
else do
if right(dd, 1) = '*' then do
dd = left(dd, length(dd)-1) || m.err.screen
cx = lastPos(' 'dd, ' 'm.tso.ddAlloc)
if cx > 0 then do
old = word(substr(m.tso.ddAlloc, cx), 1)
if old = dd then
dd = dd'1'
else if datatype(substr(old, length(dd)+1), 'n') then
dd = dd || (substr(old, length(dd)+1) + 1)
else
call err 'tsoDD old' old 'suffix not numeric dd' dd
end
end
if wordPos(dd, m.tso.ddAlloc) < 1 then
m.tso.ddAlloc = strip(m.tso.ddAlloc dd)
if wordPos(dd, wshTsoDD) < 1 then
wshTsoDD = strip(wshTsoDD dd)
end
if m.err.ispf then
address ispExec 'vPut wshTsoDD shared'
return dd
endProcedure tsoDD
tsoAlloc: procedure expose m.
parse arg na dd disp rest ':' nn, retRc
c = 'alloc dd('dd')' disp
if na \== '-' then
c = c "DSN('"na"')"
else if disp = 'NEW' and nn \== '' then
c = c dsnCreateAtts(,nn)
call outtrap m.adrTsoAl.
alRc = adrTso(c rest, '*')
call outtrap off
if alRc = 0 then
return 0
if nn \= '' & wordPos(disp, 'OLD SHR') > 0 ,
& sysDsn("'"m.dsnAlloc.dsn"'") == 'DATASET NOT FOUND' then do
say 'tsoAlloc creating' c rest ':'nn
call adrTso 'alloc dd('dd') new catalog' dsnCreateAtts(na, nn)
call adrTso 'free dd('dd')'
return tsoAlloc(na dd disp rest, retRc)
end
say 'rc='alRc 'for' c rest
call saySt adrTsoal
if retRc = '*' | wordPos(alRc, retRc) > 0 then
return alRc
call err 'tsoAlloc rc' alRc 'for' c rest
endProcedure tsoAlloc
tsoAtts: procedure expose m.
parse arg dsn
rc = listDsi("'"dsn"' SMSINFO")
if rc = 0 then
mv = ''
else if rc = 4 & sysReason = 19 then do
mv = 'UNITCNT(30)'
say 'multi volume' mv
end
else if rc ^= 0 then
call err 'listDsi rc' rc 'reason' sysReason,
sysMsgLvl1 sysMsgLvl2
al = 'CAT'
al = ''
if right(sysDsSms, 7) == 'LIBRARY' ,
| abbrev(sysDsSms, 'PDS') then
al = al 'DSNTYPE(LIBRARY)'
if sysUnits = 'TRACK' then
sysUnits = 'TRACKS'
return al "DSORG("sysDSorg") MGMTCLAS("sysMgmtClass")",
"DATACLAS("sysDataClass")" ,
"RECFM("translate('1 2 3', ' 'sysREcFM, ' 123')")",
"LRECL("SYSLRECL")",
"SPACE("sysPrimary"," sysSeconds")" sysUnits mv
/* "blksize("sysBLkSIZE")" removed 3.4.13: let sms do the magic */
endProcedure tsoAtts
tsoFree: procedure expose m.
parse arg ddList, ggRet
do dx=1 to words(ddList)
dd = word(ddList, dx)
call adrTso 'free dd('dd')', ggRet
call tsoDD dd, '-'
end
return
endProcedure tsoFree
tsoFreeAll: procedure expose m.
all = m.tso.ddAlloc m.tso.ddOpen
do ax = 1 to words(all)
call adrTso 'execio 0 diskW' word(all, ax) '(finis)', '*'
end
m.tso.ddOpen = ''
call tsoFree m.tso.ddAlloc, '*'
return
endProcedure tsoFreeAll
dsnCreateAtts: procedure expose m.
parse arg dsn, atts, forCsm
forCsm = forCsm == 1
aU = ' 'translate(atts)
res = ''
if dsn \== '' then
res = "dataset('"dsnSetMbr(dsn)"')"
if abbrev(atts, '~') then
return res tsoAtts(substr(atts, 2))
if abbrev(atts, ':') then do
parse var atts a1 atts
rl = substr(a1, 3)
if abbrev(a1, ':F') then do
if rl = '' then
rl = 80
recfm='f b'
end
else do
if rl = '' then
rl = 32756
recfm = substr(a1, 2, 1) 'b'
end
res = res "recfm("space(recfm, 1-forCsm)") lrecl("rl")"
end
if pos('(', dsn) > 0 & pos(' DSNTYPE(', aU) < 1 ,
& pos(' DSORG(', aU) < 1 then
res = res 'dsntype(library) dsorg(po)'
if pos(' MGMTCLAS(', aU) < 1 then
res = res 'mgmtclas(COM#A091)'
if pos(' SPACE(', aU) < 1 then
res = res 'space(10, 1000) cyl' || copies('inder', forCsm)
return res atts
endProcedure dsnCreateAtts
/*--- check if a dataset is archive ------------------------------------
returns 'ok' if dataset on disk
'not' if dataset is not catalogued
'arc' if dataset archived
listDsi errorMsg otherwise ------------------*/
dsnArc: procedure expose m.
parse upper arg dsn
lc = listDsi("'"strip(dsn)"' noRecall")
if lc = 0 then
return 'ok'
else if lc=4 & sysReason = 19 then /* multiple volumes */
return 'ok'
else if lc=16 & sysReason = 5 then
return 'notCat'
else if lc=16 & sysReason = 9 then
return 'arc'
else
return 'listDsi cc='lc', sysReason='sysReason ,
'm2='sysMsgLvl2', m1='sysMsgLvl1
endProcedure dsnArc
/*--- read the dataset specified in ggDsnSpec to stem ggSt -----------*/
readDSN:
parse arg ggDsnSpec, ggSt
ggAlloc = dsnAlloc(ggDsnSpec, 'SHR', 'readDsN')
call adrTso 'execio * diskr' word(ggAlloc, 1) '(stem' ggSt' finis)'
call tsoFree word(ggAlloc, 2)
return
endSubroutine readDsn
/*--- write the dataset specified in ggDsnSpec from stem ggSt
write ggCnt records if not empty otherwise ggst0
if ggSay 1 then say ... records written to ... -------------*/
writeDSN:
parse arg ggDsnSpec, ggSt, ggCnt, ggSay
if ggCnt == '' then
ggCnt = value(ggst'0')
ggAlloc = dsnAlloc(ggDsnSpec, 'OLD', 'readDsN')
call adrTso 'execio' ggCnt 'diskw' word(ggAlloc, 1) ,
'(stem' ggSt 'open finis)'
call tsoFree word(ggAlloc, 2)
if ggSay == 1 | m.debug == 1 then
say ggCnt 'records written to' ggDsnSpec
return
endSubroutine writeDsn
copyDSN: procedure expose m.
parse arg frSpec, toSpec, ggSay
parse value dsnAlloc(frSpec, 'SHR', 'FRDD') with frDD frFr
parse value dsnAlloc(toSpec, 'OLD', 'TODD') with toDD toFr
call tsoOpen frDD, 'R'
call tsoOpen toDD, 'W'
cnt = 0
do while readDD(frDD, r.)
call writeDD toDD, r.
cnt = cnt + r.0
end
call tsoClose frDD
call tsoClose toDD
call tsoFree frFr toFr
if ggSay == 1 | m.debug == 1 then
say cnt 'records copied from' frSpec 'to' to toSpec
return
endSubroutine writeDsn
/* copy adrTso end ****************************************************/
/* copy err begin *** errorhandling, messages, help ****************/
errIni: procedure expose m.
if m.err.ini == 1 then
return
call utIni
m.err.ini = 1
m.err.handler = ''
m.err.cleanup = ';'
m.err.opt = ''
parse source m.err.os .
m.err.ispf = 0
m.err.screen = 0
if m.err.os \== 'LINUX' then
if sysVar('sysISPF') = 'ACTIVE' then do
m.err.ispf = 1
address ispExec 'vget zScreen shared'
m.err.screen = zScreen
end
return
endProcedure errIni
/* configure err -----------------------------------------------------*/
errReset: procedure expose m.
call errIni
parse arg m.err.opt, m.err.handler
if pos('I', translate(m.err.opt)) > 0 & m.err.ispf then
address ispExec 'control errors return'
return
endSubroutine errReset
/*--- error routine: abend with message ------------------------------*/
err:
parse arg ggTxt, ggOpt
call errIni
drop err handler cleanup opt call return
if ggOpt == '' & m.err.handler \== '' then
interpret m.err.handler
call errSay 'f}'ggTxt
call errCleanup
if ggOpt == '' then
ggOpt = m.err.opt
upper ggOpt
if pos('T', ggOpt) > 0 then do
trace ?r
say 'trace ?r in err'
end
if pos('H', ggOpt) > 0 & m.err.eCat == 'f' then do
call errSay ' }errorhandler exiting with divide by zero' ,
'to show stackHistory'
x = 1 / 0
end
call errSay ' }errorhandler exiting with exit(12)'
exit errSetRc(12)
endSubroutine err
/*--- set rc for ispf: -------------------------------------------------
if a cmd is run by ispStart, its RC is ignored,
but ISPF passes the value of the shared variable zIspfRc
back as return code
----------------------------------------------------------------------*/
errSetRc: procedure expose m.
parse arg zIspfRc
if m.err.ispf then
address ispExec vput 'zIspfRc' shared
return zIspfRc
endProcedure errSetRc
/*--- error routine: user message cleanup exit -----------------------*/
errAddCleanup: procedure expose m.
parse arg code
call errIni
/* concatenate backwards, then it is executed also backwards */
m.err.cleanup = ';'code || m.err.cleanup
return
endProcedure errAddCleanup
errRmCleanup: procedure expose m.
parse arg code
call errIni
cx = pos(';'code';', m.err.cleanup)
if cx > 0 then
m.err.cleanup = left(m.err.cleanup, cx) ,
|| substr(m.err.cleanup, cx + length(code)+2)
return
endProcedure errRmCleanup
errCleanup: procedure expose m.
call errIni
errCleanup = m.err.cleanup
if errCleanup <> ';' then do
m.err.cleanup = ';'
say 'err cleanup begin' errCleanup
interpret errCleanup
say 'err cleanup end' errCleanup
end
if symbol('m.tso.ddAlloc') == 'VAR' then
call tsoFreeAll
return
endProcedure errCleanup
/*--- say an errorMessage msg with pref and linesplits --------------*/
errSay: procedure expose m.
parse arg msg
return saySt(errMsg(msg))
/*--- prefix an errormessage with pref,
split it into lines at \n to stem m.err -------------------*/
errMsg: procedure expose m.
parse arg msg
m.err.eCat = 'f'
do while substr(msg, 2, 1) == '}'
parse var msg m.err.eCat '}' msg
end
res = msg
if m.err.eCat <> '' then do
pTxt = ',error,fatal error,input error,syntax error,warning,'
px = pos(','m.err.eCat, pTxt)
if px < 1 then do
m.err.eCat = 'f'
px = pos(','m.err.eCat, pTxt)
end
res = substr(pTxt, px+1, pos(',', pTxt, px+2)-px-1)
if substr(res, 3, 1) == '}' then
parse var res 2 opt 3 br 4 res
if opt == '-' then
res = res msg
else do
parse source . . s3 . /* current rexx */
res = res 'in' s3':' msg
end
end
return splitNl(err, res) /* split lines at \n */
endProcedure errMsg
splitNL: procedure expose m.
parse arg st, msg
bx = 1
do lx=1 to 20
ex = pos('\n', msg, bx)
if ex < bx then
leave
m.st.lx = substr(msg, bx, ex-bx)
bx = ex+2
end
m.st.lx = substr(msg, bx)
m.st.0 = lx
return st
endProcedure splitNL
/*--- say (part of) the lines of a stem ----------------------------*/
saySt: procedure expose m.
parse arg st, fx, tx
do lx=word(fx 1, 1) to word(tx m.st.0, 1)
say m.st.lx
end
return st
endProcedure saySt
/*--- out (part of) the lines of a stem ----------------------------*/
outSt: procedure expose m.
parse arg st, fx, tx
do lx=word(fx 1, 1) to word(tx m.st.0, 1)
call out m.st.lx
end
return st
endProcedure outSt
/*--- say a trace message if m.trace is set --------------------------*/
debug: procedure expose m.
parse arg msg
if m.debug == 1 then
say 'debug:' msg
return
endProcedure debug
/*--- output a trace if m.trace is set -------------------------------*/
trc: procedure expose m.
parse arg msg
if m.trace == 1 then
call out 'trc:' msg
return
endProcedure trc
/*--- assert that the passed rexx expression evaluates to true -------*/
assert:
interpret 'assertRes =' arg(1)
if assertRes \==1 then
call err 'assert failed' arg(1) '==>' assertRes':' arg(2)
return
endProcedure assert
/*--- abend with Message after displaying help -----------------------*/
errHelp: procedure expose m.
parse arg msg
call errSay 'i}'msg
call help 0
call err 'i}'msg
endProcedure errHelp
/*--- display the first comment block of the source as help ----------*/
help: procedure expose m.
parse arg doClear
if doClear \== 0 then
address tso 'clear'
parse source . . s3 .
say right(' help for rexx' s3, 72, '*')
do lx=1 while pos('/*', sourceLine(lx)) < 1
if lx > 10 then
return err('initial commentblock not found for help')
end
doInc = 1
ho = m.err.helpOpt
do lx=lx+1 to sourceline() while pos('*/', sourceline(lx)) = 0
li = strip(sourceLine(lx), 't')
cx = lastPos('{', li)
if cx > 0 then do
if length(ho) = 1 then
doInc = cx = length(li) | pos(ho, li, cx+1) > 0
li = left(li, cx-1)
end
if doInc then
say li
end
say right(' end help for rexx' s3, 72, '*')
return 4
endProcedure help
/* copy err end *****************************************************/
/* copy ut begin *****************************************************/
utIni: procedure expose m.
if m.ut.ini == 1 then
return
m.ut.ini = 1
m.ut.digits = '0123456789'
m.ut.alfLC = 'abcdefghijklmnopqrstuvwxyz'
m.ut.alfUC = translate(m.ut.alfLc)
m.ut.Alfa = m.ut.alfLc || m.ut.alfUC
m.ut.alfNum = m.ut.alfa || m.ut.digits
m.ut.alfDot = m.ut.alfNum || '.'
m.ut.alfId = m.ut.alfNum'_' /* avoid rexx allowed @ # $ ¬ . | ? */
m.ut.alfIdN1 = m.ut.digits /* not as first character */
m.ut.alfRex = m.ut.Alfa'.0123456789@#$?' /* charset puff mit ¬*/
m.ut.alfRexN1= '.0123456789'
m.ut.alfPrint = m.ut.alfNum'+-*/=()¢!{}<> .:,;?|''"%&#@$£\_'
return
endProcedure utIni
/*--- if function warning all3 arguments get evaluated|
e.g if(x=0, 'infinity', 1/0) will fail| -----------*/
if: procedure expose m.
parse arg co, ifTrue, ifFalse
if co then
return ifTrue
else
return ifFalse
endProcedure if
/*--- embedded ASSignement:
assign the second argument to the variable with name in first arg
and return the value assigned ----------------------------------*/
ass:
call value arg(1), arg(2)
return arg(2)
/*--- embedded ASSignement return NotNull:
assign the second argument to the variable with name in first arg
and return 1 if value not null, 0 if null ----------------------*/
assNN:
call value arg(1), arg(2)
return arg(2) \== ''
/*--- return current time and cpu usage ------------------------------*/
utTime: procedure expose m.
return time() 'ela='time('E') 'cpu='sysvar('syscpu'),
'su='sysvar('syssrv')
tstUtTime: procedure expose m.
say 'begin' utTime() sysvar('sysnode')
do 3000000
end
say 'end ' utTime()
return
/*--- sleep several seconds ------------------------------------------*/
sleep: procedure expose m.
parse arg secs, sayIt
if sayit <> 0 then
say 'sleeping' secs 'secs' time()
CALL SYSCALLS 'ON'
ADDRESS SYSCALL "sleep" secs
CALL SYSCALLS 'OFF'
if sayit <> 0 then
say 'slept' secs 'secs' time()
return
endProcedure sleep
/*--- left without truncation ----------------------------------------*/
lefPad: procedure expose m
parse arg s, len
if length(s) >= len then
return s
return left(s, len)
endProcedure lefPad
/*--- right without truncation ---------------------------------------*/
rigPad: procedure expose m
parse arg s, len
if length(s) >= len then
return s
return right(s, len)
endProcedure rigPad
/*--- quote string txt using quoteChar qu ("" ==> ") -----------------*/
quote: procedure expose m.
parse arg txt, qu
if qu = '' then
qu = '"'
res = qu
ix = 1
do forever
qx = pos(qu, txt, ix)
if qx = 0 then
return res || substr(txt, ix) || qu
res = res || substr(txt, ix, qx-ix) || qu || qu
ix = qx + length(qu)
end
endProcedure quote
/*--- translate to lowercase -----------------------------------------*/
ut2lc: procedure expose m.
parse arg s
return translate(s, m.ut.alfLc, m.ut.alfUc)
/*--- verify an id ---------------------------------------------------*/
verifId: procedure expose m.
parse arg src, extra
if pos(left(src, 1), m.ut.alfIdN1) > 0 then
return 1
else
return verify(src, m.ut.alfId || extra, 'n')
/*--- return the count of occurrences of needle in heyStack ----------*/
posCount: procedure expose m.
parse arg needle, hayStack, start, fin
if start = '' then
start = 1
if fin = '' then
fin = length(hayStack) + 1 - length(needle)
do cnt = 0 by 1
start = pos(needle, haystack, start)
if start < 1 | start > fin then
return cnt
start = start + length(needle)
end
endProcedure posCount
repAll: procedure expose m.
parse arg src
do ax = 2 by 2 to arg()
src = repAl2(src, src, arg(ax), arg(ax+1))
end
return src
endProcedure repAll
repAl2: procedure expose m.
parse arg src, sPos, old, new
res = ''
cx = 1
do forever
nx = pos(old, sPos, cx)
if nx < 1 then
return res || substr(src, cx)
res = res || substr(src, cx, nx-cx) || new
cx = nx + length(old)
end
endProcedure repAl2
repAllWords: procedure expose m.
parse arg src, w, new
res = ''
wx = 0
cx = 1
do forever
wx = wordPos(w, src, wx+1)
if wx < 1 then
return res || substr(src, cx)
nx = wordindex(src, wx)
res = res || substr(src, cx, nx-cx) || new
cx = nx + length(w)
end
endProcedure repAllWords
/* copy ut end ********************************************************/
}¢--- A540769.WK.REXX.O13(DEL) cre=2011-09-27 mod=2011-09-27-15.40.01 A540769 ---
$#@
call sqlConnect dbaf
call sqlPreOpen 51, 'select i1, i2 from A540769.twk600a040'
do cx=1 while sqlFetchInto(51, ':i1, :i2')
say i1 i2
if cx // 2 = 0 then do
call sqlExec 'delete from A540769.twk600a040 where current of c51'
say 'deleted' sqlCode
end
if cx // 8 = 0 then do
call sqlcommit
say 'commited' sqlCode
end
end
$#out 20110927 15:37:45
*** run error ***
SQLCODE = -504: CURSOR NAME C51 IS NOT DECLARED
stmt = execSql fetch c51 into :i1, :i2
with i1 = I1
i2 = I2
$#out 20110927 15:30:02
*** run error ***
SQLCODE = -518: THE EXECUTE STATEMENT DOES NOT IDENTIFY A
VALID PREPARED STATEMENT
stmt = execSql fetch c1 into :i1, :i2
with i1 = 62
i2 = -194297
$#out 20110927 15:29:02
*** run error ***
SQLCODE = -518: THE EXECUTE STATEMENT DOES NOT IDENTIFY A
VALID PREPARED STATEMENT
stmt = execSql fetch c1 into :i1, :i2
with i1 = 54
i2 = 344185
$#out 20110927 15:24:50
*** run error ***
SQLCODE = -104: ILLEGAL SYMBOL "HOLD". SOME SYMBOLS THAT
MIGHT BE LEGAL ARE: RR, RS, CS, UR
src select i1, i2 from A540769.twk600a040 with hold
> >>>pos 44 of 47>>>
stmt = execSql prepare s1 from :src
with src = select i1, i2 from A540769.twk600a040 with hold
$#out 20110927 15:23:53
*** run error ***
SQLCODE = -104: ILLEGAL SYMBOL "HOLD". SOME SYMBOLS THAT
MIGHT BE LEGAL ARE: RR, RS, CS, UR
src select i1, i2 from A540769.twk600a040 with hold
> >>>pos 44 of 47>>>
stmt = execSql prepare s1 from :src
with src = select i1, i2 from A540769.twk600a040 with hold
$#out 20110927 15:22:30
}¢--- A540769.WK.REXX.O13(DIFF) cre= mod= --------------------------------------
/*REXX*****************************************************************
OMS.DIV.P0.STAT.RZ2.Y04M11
OMS.DIV.P0.STAT.RZ2.SOR.Y04M11
**********************************************************************/
parse arg left right
if left = '' then
left = "'OMS.DIV.P0.STAT.RZ1.Y04M12'"
/* left = 'POVDOKU.des.y04m09' */
if right = '' then
right = "'OMS.DIV.P0.STAT.RZ1.Y04M12.SV041218'"
/* right = 'POVDOKU.old.y04m09' */
call diffThree left, right
exit
call diffOne 'POVDOKU.lib(dif04X10)'
diffThree: procedure
parse arg left, right
sayCnt = 0
call adrTso "ALLOC DS("left") F(fiLe) REU SHR "
call adrTso "ALLOC DS("right") F(fiRi) REU SHR "
laDiff = ''
leFi = 1
leX = 0
leRc = leRead()
riX = 0
riRc = riRead()
toLeSk = 0
toRiSk = 0
to0 = 0
to10 = 0
toXX = 0
toSub = 0
toLeDay = 0
toRiDay = 0
laSay = ''
do while leRc = 0 & riRc = 0
if leKey <> riKey then do
diff = ''
call addDiff
leSk = 0
riSk = 0
do while leRc = 0 & riRc = 0
if leKey = riKey then
leave
else if leKey = riKey1 | leKey = riKey2 | leKey=riKey3 ,
| leKey = riKey4 then do
if leRead() = 0 then
leSk = leSk + 1
end
else if riKey = leKey1 | riKey = leKey2 | riKey=leKey4 ,
| riKey = leKey4 then do
if riRead() = 0 then
riSk = riSk + 1
end
else if left(reRi1, 8) = 'SUBFILE=' then do
call riRead
toSub = toSub + 1
end
else if left(leKey, 3) > left(riKey, 3) then do
if laLeDay <> left(leKey, 3) then do
say 'skip left begin day' left(leKey, 3)
laLEDay = left(LEKey, 3)
end
call LeRead
toLeDay = toLeDay + 1
end
else if left(leKey, 3) < left(riKey, 3) then do
if laRiDay <> left(riKey, 3) then do
say 'skip right begin day' left(riKey, 3)
laRiDay = left(riKey, 3)
end
call riRead
toRiDay = toRiDay + 1
end
else do
say 'key not found' leX riX 'key' leKey riKey
call leRead
leSk = leSk + 1
end
end
/* say 'skipped left' leSk 'to' leX 'right' riSk 'to' riX */
toLeSk = toLeSk + leSk
toRiSk = toRiSk + riSk
leFi = leX
end
if laSay <> left(leKey, 3) then do
say time() leX riX 'skip' toLeSk toRiSk 'sub' toSub ,
'day' toLeDay toRiDay 'after day' laSay
laSay = left(leKey, 3)
end
diff = diff(reLe1, reRi1)
if diff <> laDiff then
call addDiff
call leRead
call riRead
end
if leRc = 0 then
call addDiff 1
else do
leX = leX + 1
call addDiff
leX = leX - 1
end
say 'end left' leX 'rc' leRc 'right' riX 'rc' riRc
say 'tot = ' to0 ', <10' to10 ', >' toXX
say 'skip left ' toLeSk 'right' toRiSk ,
'sub' toSub 'day' toLeDay toRiDay
return /* diffThree */
addDiff:
parse arg sayIt
if leFi < leX & sayIt = '1' then do
say time() forRange(leFi, leX-1, 15) laDiff
sayCnt = sayCnt + 1
end
if length(laDiff) < 1 then
to0 = to0 + leX - leFi
else if length(laDiff) < 10 then
to10 = to10 + leX - leFi
else
toXX = toXX + leX - leFi
laDiff = diff
leFi = leX
return /* end addDiff */
diffTwo: procedure
parse arg left, right
sayCnt = 0
call adrTso "ALLOC DS("left") F(fiLe) REU SHR "
call adrTso "ALLOC DS("right") F(fiRi) REU SHR "
laDiff = ''
leFi = 1
leRc = adrTsoRc("EXECIO 1 DISKRU fiLe (STEM reLe)")
leX = 1
riRc = adrTsoRC("EXECIO 1 DISKRU fiRi (STEM reRi)")
riX = 1
toLeSk = 0
toRiSk = 0
to0 = 0
to10 = 0
toXX = 0
do while lx < 300000 & sayCnt < 300 & leRc = 0 & riRc = 0
diff = diff(reLe1, reRi1)
leRc = adrTsoRc("EXECIO 1 DISKRU fiLe (STEM reLe)")
riRc = adrTsoRC("EXECIO 1 DISKRU fiRi (STEM reRi)")
if diff <> laDiff then do
if laDiff <> '' then do
say time() forRange(leFi, leX-1, 15) laDiff
sayCnt = sayCnt + 1
if length(laDiff) < 10 then
to10 = to10 + leX - leFi
else
toXX = toXX + leX - leFi
end
else
to0 = to0 + leX - leFi
leKey = bitXor(substr(reLe1, 124, 3),,'ff'x) ,
|| substr(reLe1,5,44)
riKey = bitXor(substr(reRi1, 124, 3),,'ff'x) ,
|| substr(reRi1,5,44)
leSk = 0
riSk = 0
do while leRc = 0 & riRc = 0
if leKey < riKey then do
leRc = adrTsoRc("EXECIO 1 DISKRU fiLe (STEM reLe)")
leKey = bitXor(substr(reLe1, 124, 3),,'ff'x) ,
|| substr(reLe1,5,44)
leSK = leSk + 1
end
else if leKey > riKey then do
riRc = adrTsoRc("EXECIO 1 DISKRU fiRi (STEM reRi)")
riSk = riSk + 1
riKey = bitXor(substr(reRi1, 124, 3),,'ff'x) ,
|| substr(reRi1,5,44)
end
else
leave
end
leX = leX + leSk
toLeSk = toLeSk + leSk
riX = riX + riSk
toRiSk = toRiSk + riSk
if leSk = 0 & riSk = 0 then do
laDiff = diff
end
else do
say 'skipped left ' leSk 'to' (leX + 1) ,
'right ' riSk 'to' (riX + 1)
laDiff = diff(reLe1, reRi1)
end
leFi = leX
end
else if (leX-leFi) // 10000 = 0 then
say time() leX riX 'laDiff' laDiff
leX = leX + 1
riX = riX + 1
end
if leX > leFi then do
say time() forRange(leFi, leX-1, 15) laDiff
if length(laDiff) < 1 then
to0 = to0 + leX - leFi
else if length(laDiff) < 10 then
to10 = to10 + leX - leFi
else
toXX = toXX + leX - leFi
end
if leRc <> 0 then
leX = leX - 1
if riRc <> 0 then
riX = riX - 1
say 'end left' leX 'rc' leRc 'right' riX 'rc' riRc
say 'tot = ' to0 ', <10' to10 ', >' toXX
say 'skip left ' toLeSk 'right' toRiSk
return /* diffTwo */
leRead:
leRc = adrTsoRc("EXECIO 1 DISKRU fiLe (STEM reLe)")
if leRc <> 0 then
return leRc
leX = leX + 1
key = substr(reLe1, 124, 3)substr(reLe1,5,44)
if leKey <> key then do
leKey4 = leKey3
leKey3 = leKey2
leKey2 = leKey1
leKey1 = leKey
leKey = key
end
return 0; /* leRead */
riRead:
riRc = adrTsoRc("EXECIO 1 DISKRU fiRi (STEM reRi)")
if riRc <> 0 then
return riRc
riX = riX + 1
key = substr(reRi1, 124, 3)substr(reRi1,5,44)
if riKey <> key then do
riKey4 = riKey3
riKey3 = riKey2
riKey2 = riKey1
riKey1 = riKey
riKey = key
end
return 0; /* riRead */
diffOne: procedure
parse arg left
call adrTso "ALLOC DS("left") F(fiLe) REU SHR "
laDiff = ''
rf = 1
call adrTSO "EXECIO 1 DISKRU fiLe (STEM reLe)"
call adrTSO "EXECIO 1 DISKRU fiLe (STEM reRi)"
do rx=2 by 1 while (reRi0 = 1)
if (rx // 50000) < 20 | rx > 250000 then do
diff = diff(reLe1, reRi1)
if diff <> laDiff then do
if laDiff <> '' then
say time() forRange(rf, rx-1, 15) laDiff
laDiff = diff
rf = rx
end
reLe1 = reRi1
end
call adrTSO "EXECIO 1 DISKRU fiLe (STEM reRi)"
end
if laDiff <> '' then
say forRange(rf, rx-1, 15) laDiff
return /* diffTwo */
forRange: procedure
parse arg rf, rt, le
if rf = rt then
res = rf
else
res = rf'-'rt
if le = '' then
return res
if le <= length(res) then
return res
else
return left(res, le)
/* end forRange */
diff: procedure
parse arg le, ri
if length(le) < length(ri) then
cz = length(le)
else
cz = length(ri)
cx = 1
diff = ''
do while(cx <= cz)
cy = compare(substr(le, cx), substr(ri, cx))
if cy = 0 then
leave
cy = cx + cy - 1
do cx = cy + 1 to cz while substr(le, cx, 1)<>substr(ri, cx, 1)
end
diff = diff forRange(cy, cx-1)
end
if length(le) < length(ri) then
diff = diff "right" (length(le)+1) || '-' || length(ri)
else if length(le) > length(ri) then
diff = diff "left" (length(ri)+1) || '-' || length(le)
return diff /* end diff */
showtime:
parse arg showmsg
say time() sysvar('syscpu') sysvar('syssrv') showmsg
return 0
adrTsoRc:
parse arg adrCmd
address tso adrCmd
return rc /* end adrTsoRc */
adrTso:
parse arg adrCmd
address tso adrCmd
if rc <> 0 then
call err 'adrTso rc' rc 'for' adrCmd
return /* end adrTso */
adrIspRc:
parse arg adrCmd
address ispexec adrCmd
return rc /* end adrIspRc */
adrIsp:
parse arg adrCmd
address ispexec adrCmd
if rc <> 0 then
call err 'adrIsp rc' rc 'for' adrCmd
return /* end adrIsp */
adrEdit:
parse arg adrCmd, ret
address isrEdit adrCmd
if rc <> 0 then
call err 'adr isrEdit rc' rc 'for' adrCmd
return /* end adrEdit */
adrEditRc:
parse arg adrCmd
address isrEdit adrCmd
return rc /* end adrEditRc */
err:
parse arg txt
say 'fatal error in ??:' txt
exit 12
}¢--- A540769.WK.REXX.O13(DODREORG) cre= mod= ----------------------------------
/* rexx ****************************************************************
DodReorg Rexx for monthly ReorgJob for dod-log-Tabel tid150a1
********
Function:
generate 6 sysin files for db2 load jobs
to drop partitions (with old data) from dod-log-table tid150a1
the following partitions are selected:
* not empty and
* tid150tst older than 270 days and
* partition not used between yesterday and next 5 days
Input:
Arguments: none
dd partIn
an sql report (=> dod...parm(sqlPart)) generated by dsntiaul
the following columns are used (extracted with word(line,x))
xNam = 1 name of the table --+
xCre = 2 creator of the table +-- catalog info
xPar = 5 partition number --+
xMD = 6 tid150md --+
xCnt = 7 number of rows +-- table data
xTst1 = 11 minimum tid150tst ¨
xTst2 = 12 maximum tid150tst --+
Output:
return code:
0: ok, 1-6 partitions selected for drop
4: ok, 0 partitions selected for drop
>=8: error
dd ddUtil1, ddUtil2, ..., ddUtil6
each file contails
either input statements for DSNUTILB
to load on partition xPar of xCre.xNam
(with an empty inputfile this empties the partition|)
or an empty line (so DSNUTILB does nothing with rc=4)
dd SYSREC00: a copy of the sql report (dd partIn)
dd SYSPRT: some messages
History:
13.01.04 created Walter Keller, KPCO4
***********************************************************************/
say date('e') time() 'start rexx dodReorg'
call analysePartRep 'partIn', 'sysRec00', 'ddUtil'
say 'written' uCnt 'utilFile for delete of a partition'
u.1 = ''
do i=uCnt+1 to 6
call adrTso 'execio 1 diskW ddUtil'i '(stem u.)'
end
say date('e') time() 'end rexx dodReorg'
if uCnt = 0 then
exit 4
else
exit 0
exit
analysePartRep:
parse arg paIn, paOut, util
/*----------------------------------------------------------------------
analyse the sql partition report in dd paIn and copy it to dd paOut
write dd DSNUTILB statements to dd util'1', util'2' etc
----------------------------------------------------------------------*/
xNam = 1 /* report layout */
xCre = 2
xPar = 5
xMD = 6
xCnt = 7
xTst1 = 11
xTst2 = 12
call makeDates date('s') /* comput dates dKeep pKeepV pKeepB */
/* read an write partition report */
call adrTso 'execio * diskr' paIn '(stem pr.)'
say 'read' pr.0 'lines'
call adrTso 'execio' pr.0 'diskW' paOut '(stem pr.)'
uCnt = 0
do i=1 to pr.0 /* each line of the report */
pr.i = strip(pr.i, 't', '00'x) /* remove zeros */
md = word(pr.i, xMD)
r = ''
if pKeepV < pKeepB then do /* check partition limit */
if pKeepV <= md & pKeepB >= md then
r = '<md>'
end
else if pKeepV <= md | pKeepB >= md then
r = '>md<'
if word(pr.i, xCnt) = 0 then
say 'empty' r' partition' md,
word(pr.i, xCre)'.'word(pr.i, xNam)'.'word(pr.i, xPar)
else do
if word(pr.i, xTst2) > dKeep then
r = r 'tst2' /* data too young */
say r 'partition' md,
word(pr.i, xCre)'.'word(pr.i, xNam)'.'word(pr.i, xPar),
'cnt' word(pr.i, xCnt),
word(pr.i, xTst1) '-' word(pr.i, xTst2)
if r = '' then do /* delete partition */
uCnt = uCnt + 1
call writeUtil util || uCnt, ,
word(pr.i, xCre)'.'word(pr.i, xNam), ,
word(pr.i, xPar)
end
end
end
return /* end analysePartRep */
writeUtil: procedure
parse arg dd, table, part
/*----------------------------------------------------------------------
write to dd dd the statement to load part part of table table
----------------------------------------------------------------------*/
say '>>> write dd' dd 'for drop table' table 'partition' part
u.1 = 'LOAD DATA LOG YES'
u.2 = ' INTO TABLE' table 'PART' part
u.3 = ' INDDN SYSREC00 REPLACE'
call adrTso 'execio 3 diskW' dd '(stem u.)'
return /* end util */
makeDates:
parse arg dt
/*----------------------------------------------------------------------
compute the 3 dates
dKeep: keep date younger than this date, db2-timestamp format
pKeepV: yesterday in format mmdd
pKeepB: today+21 in format mmdd
----------------------------------------------------------------------*/
pKeepV = substr(dateAdd(dt, -1), 5, 4)
pKeepB = substr(dateAdd(dt, 21), 5, 4) /* ensure next partition| */
dKeep = dateAdd(dt, -270)
dKeep = left(dKeep, 4)'-'substr(dKeep, 5, 2)'-'right(dKeep,2)
say dKeep 'from' dt 'part' pKeepV '-' pKeepB
say 'criteria TST <=' dKeep ,
'and limit (MD) not between' pKeepV 'and' pKeepB
return /* end makeDates */
dateAdd: procedure
parse arg dt, nu
/*----------------------------------------------------------------------
add nu days to date dt in format yyyymmdd, nu may be negative
----------------------------------------------------------------------*/
return date('s', (date('b', dt, 's') + nu), 'b')
testDateAdd: procedure
parse arg d
say d '+1' dateAdd(d, 1) '+40' dateAdd(d, 40) '+70' dateAdd(d, 70) ,
'+365' dateAdd(d,365) '+366' dateAdd(d, 366)
say d '-1' dateAdd(d,-1) '-40' dateAdd(d,-40) '-70' dateAdd(d,-70) ,
'-365' dateAdd(d,-365) '-366' dateAdd(d,-366)
return
err: procedure expose m.
parse arg txt
say 'fatal error' txt
if m.pipe.errDump = '1' then
call pipeDump
say 'exiting rexx dodreorg'
exit 8
adrTsoRc:
parse arg tsoCmd
address tso tsoCmd
return rc /* end adrTsoRc */
adrTso:
parse arg tsoCmd
address tso tsoCmd
if rc <> 0 then
call err 'adrTso rc' rc 'for' tsoCmd
return /* end adrTso */
adrIspRc:
parse arg ispCmd
address ispexec ispCmd
return rc /* end adrIspRc */
}¢--- A540769.WK.REXX.O13(DOPWEG) cre=2010-02-15 mod=2010-02-15-17.35.36 A540769 ---
/* REXX *************************************************************
dopweg ¢f!¢s!
doppelte Zeilen löschen (falls direkt hintereindander)
use q or qq lineCommand to select part of the file
f do not delete only find first pair of equal lines
s squash: map mulitple space to one (space(line, 1))
***********************************************************************/
/**** Test Data *******************************************************
1 jcl = abx(jclm) * sdf
2 jcl = abx(2clm) * sdf
3
4 abc(jclm) * sdf
5 abc 6 abc 7 abc 8 abc 9 abc
10 abc
**********************************************************************/
call errReset hi
call adrEdit('macro (args) NOPROCESS')
squash = verify(args, 'sS', 'm') > 0
find = verify(args, 'fF', 'm') > 0
say 'macro args' args 'squash='squash 'find='find
parse var args delta fnd
if left(args, 1) = '?' | translate(left(args, 4)) = 'HELP' then
exit help()
call adrEdit 'process range Q R', 4
call adrEdit '(lf) = linenum .zfrange'
call adrEdit '(lT) = linenum .zLrange'
say 'dopWeg from line' lf 'to' lt
lStop = lT
call adrEdit "(laLi) = line" lf
lnx = lf + 1
cnt = 0
do while lnx <= lStop
call adrEdit "(nxLi) = line" lnx
if squash then
dop = space(laLi, 1) == space(nxLi, 1)
else
dop = laLi == nxLi
if dop then do
if find then do
say 'doppelte Zeilen' (lnx-1) lnx
call adrEdit 'locate' (lnx-1)
exit
end
else do
call adrEdit 'delete' lnx
lStop = lSTop - 1
cnt = cnt + 1
end
end
else do
lnx = lnx + 1
laLi = nxLi
end
end
say 'deleted' cnt 'duplicate lines'
exit
/* copy adrIsp begin *************************************************/
/**********************************************************************
lmd: catalog read
call sequence: lmdBegin, lmdNext*, lmdEnd
mit lmd service (mit save in file und read,
weil list zu langsam und listcat abstürzt)
1. arg (grp) als group dataset für lmd save
und dd name für file read
***********************************************************************/
lmdBegin: procedure
parse arg grp, lev
call adrIsp 'lmdinit listid(lmdId) level('lev')'
res = adrIsp('lmdlist listid(&lmdId) option(save) group('grp')', 4)
call adrIsp 'lmdfree listid(&lmdId)'
if res = 0 then do
call trc timing() 'lmdlist save' grp lev
call adrTso 'alloc dd('grp') shr dsn('grp'.datasets)'
end
else do
call trc 'no datasets found' timing() 'lmdlist save' grp lev
call adrTso 'alloc dd('grp') dummy'
end
call readDDBegin grp
return /* end lmdBegin */
lmdNext:
parse arg ggGrp, ggSt, withVolume
if ^ readDD(ggGrp, ggSt) then
return 0
if withVolume ^== 1 then
do ggIx=1 to value(ggSt'0')
x = value(ggSt || ggIx, word(value(ggSt || ggIx), 1))
end
return 1
endSubroutin lmdNext
lmdEnd: procedure
parse arg grp
call readDDEnd grp
call adrTso 'free dd('grp')'
return /* end lmdEnd */
lmd: procedure expose m.
parse arg lev, withVol
call lmdBegin gg1, lev
do while lmdNext(gg1, q., withVol)
do x=1 to q.0
call jOut q.x
end
end
call lmdEnd gg1
return
endProcedure lmd
/**********************************************************************
member list of a pds:
call sequence x=lmmBegin(dsn) lmmNext(x) * lmmEnd(x)
***********************************************************************/
lmm: procedure expose m.
parse arg dsn
id = lmmBegin(dsn)
do ix=1 by 1
m = lmmNext(id)
if m = '' then
leave
call jOut m
end
call lmmEnd id
return
endProcedure lmm
lmmBegin: procedure
parse arg dsn
mbr = dsnGetMbr(dsn)
pds = dsnSetMbr(dsn, )
call adrIsp "LMINIT DATAID(lmmId) DATASET('"pds"') ENQ(SHRW)"
call adrIsp "LMOPEN DATAID("lmmId") OPTION(INPUT) "
res = lmmId
if mbr <> '' then
res = res 'pattern('mbr')'
return res
endProcedure lmmBegin
lmmEnd: procedure
parse arg lmmId opt
call adrIsp "LMMLIST DATAID("lmmId") option(free)", 8
call adrIsp "LMCLOSE DATAID("lmmId")"
call adrIsp "LMFREE DATAID("lmmId")"
return
endProcedure lmmEnd
lmmNext: procedure
parse arg lmmId opt
if adrIsp("LMMLIST DATAID("lmmid")" ,
"OPTION(LIST) MEMBER(Mbr)" opt, 4 8) = 0 then
return strip(mbr)
else
return ''
endProcedure lmmNext
lmmRm: procedure
parse arg dsn, mbrs
mbrs = dsnGetMbr(dsn) mbrs
pds = dsnSetMbr(dsn, )
call adrIsp "LMINIT DATAID(lmmId) DATASET("pds") ENQ(SHRW)"
call adrIsp "LMOPEN DATAID("lmmId") OPTION(OUTPUT) "
err = ''
do wx=1 to words(mbrs)
m1 = word(mbrs, wx)
rr = adrIsp("lmmDel dataid("lmmId") member("m1")", 0 8 12)
if rc = 0 then
say 'removed' m1 'from' pds
else if rc = 8 then
say 'not found' m1 'in' pds
else do
err = 'error deleting' m1 'in' pds 'rc' rr strip(zerrlm)
say err
leave
end
end
call adrIsp "LMCLOSE DATAID("lmmId")"
call adrIsp "LMFREE DATAID("lmmId")"
if err <> '' then
call err err
return
endProcedure lmmRm
/*--- address ispf with error checking -------------------------------*/
adrIsp:
parse arg ggIspCmd, ggRet
address ispexec ggIspCmd
if rc = 0 then return 0
else if ggRet == '*' then return rc
else if wordPOS(rc, ggRet) > 0 then return rc
else
call err 'adr ispExec rc' rc 'in' ggIspCmd':' strip(zerrlm)
endSubroutine adrIsp
/*--- address editor with error checking -----------------------------*/
adrEdit:
parse arg ggEditCmd, ggRet
address isrEdit ggEditCmd
if rc = 0 then return 0
else if ggRet == '*' then return rc
else if wordPOS(rc, ggRet) > 0 then return rc
else
call err 'adr isrEdit rc' rc 'for' ggEditCmd
endSubroutine adrEdit
/* copy adrIsp end *************************************************/
/* copy err begin ******************************************************
messages, errorhandling,help
***********************************************************************/
/* configure err -----------------------------------------------------*/
errReset: procedure expose m.
parse arg oo, ha
if pos('I', translate(oo)) > 0 then
call adrIsp 'control errors return'
m.err.opt = translate(oo, 'h', 'H')
if ha == '' then
drop m.err.handler
else
m.err.handler = ha
return
endSubroutine errReset
/*--- error routine: abend with message ------------------------------*/
err:
parse arg ggTxt, ggStem, ggOpt
drop err handler opt
if ggOpt == '' & symbol('m.err.handler') == 'VAR' then
interpret m.err.handler
say 'fatal error:' ggTxt
if ggOpt == '' | ggOpt == '*' then
ggOpt = translate(value('m.err.opt'), 'ht', 'HT')
if ggStem ^== '' then do
do ggXX=1 to m.ggStem.0
say ' ' m.ggStem.ggXX
end
if ggXX > 3 then
say 'fatal error in' ggS3':' ggTxt
end
parse source . . ggS3 . /* current rexx */
if pos('h', ggOpt) > 0 then do
say 'fatal error in' ggS3': divide by zero to show stackHistory'
x = 1 / 0
end
say 'fatal error in' ggS3': exit(12)'
exit errSetRc(12)
endSubroutine err
/*--- abend with Message after displaying help -----------------------*/
errHelp: procedure expose m.
parse arg msg, st, op
say 'fatal error:' msg
call help
call err msg, st, op
endProcedure errHelp
/*--- set rc for ispf: -------------------------------------------------
if a cmd is run by ispStart, its RC is ignored,
but ISPF passes the value of the shared varible 3IspfRc
back as return code
----------------------------------------------------------------------*/
errSetRc: procedure
parse arg zIspfRc
if sysVar('sysISPF') = 'ACTIVE' then do
address ispExec vput 'zIspfRc' shared
end
return zIspfRc
endProcedure errSetRc
/*--- output a trace message if m.trace is set -----------------------*/
trc: procedure expose m.
parse arg msg
if m.trace == 1 then
say 'trc:' msg
return
endProcedure trc
/*--- quote string txt using quoteChar qu ("""" ==> ") ---------------*/
quote: procedure
parse arg txt, qu
if qu = '' then
qu = '"'
res = qu
ix = 1
do forever
qx = pos(qu, txt, ix)
if qx = 0 then
return res || substr(txt, ix) || qu
res = res || substr(txt, ix, qx-ix) || qu || qu
ix = qx + length(qu)
end
endProcedure quote
/*--- return current time and cpu usage ------------------------------*/
timing: procedure
return time() time('E') sysvar('syscpu') /* sysvar('syssrv') */
/--- display the first comment block of the source as help -----------*/
help: procedure
parse source . . s3 .
say right(' help for rexx' s3, 79, '*')
do lx=1 by 1
if pos('/*', sourceLine(lx)) > 0 then
leave
else if lx > 10 then do
say 'initial commentblock not found for help'
return
end
end
do lx=lx+1 by 1
li = strip(sourceLine(lx), 't', ' ')
if pos('*/', li) > 0 then
leave
say li
end
say right(' end help for rexx' s3, 79, '*')
return 4
endProcedure help
/* copy err end *****************************************************/
}¢--- A540769.WK.REXX.O13(DRDA) cre=2010-06-08 mod=2010-06-08-17.32.24 A540769 ---
$=fun=reb
$;
$<=¢
REBIND PACKAGE(TP.TP0920.(TP00000058));
REBIND PACKAGE(TP.TP0900.(TP00000058));
REBIND PACKAGE(TP.TP0910.(TP00000058));
REBIND PACKAGE(TP.TP0920.(TP00000055));
REBIND PACKAGE(TP.TP0910.(TP00000055));
REBIND PACKAGE(TP.TP0900.(TP00000055));
REBIND PACKAGE(TP.YTPFLAG.(TP000000555E1DA28A));
REBIND PACKAGE(TP.TP0900.(TP00000053));
REBIND PACKAGE(TP.TP0910.(TP00000053));
REBIND PACKAGE(TP.YTPFLAG.(TP000000535D8C94BA));
REBIND PACKAGE(TP.TP0900.(TP00000050));
REBIND PACKAGE(TP.TP0910.(TP00000050));
REBIND PACKAGE(TP.TP0900.(TP00000046));
REBIND PACKAGE(TP.YTPFLAG.(TP000000465C97A6D8));
REBIND PACKAGE(TP.TP0910.(TP00000046));
REBIND PACKAGE(TP.TP0900.(TP00000044));
REBIND PACKAGE(TP.TP0910.(TP00000044));
REBIND PACKAGE(TP.YTPFLAG.(TP000000445C404AE1));
REBIND PACKAGE(TP.TP0900.(TP00000034));
REBIND PACKAGE(TP.TP0910.(TP00000034));
REBIND PACKAGE(TP.TP0910.(TP00000041));
REBIND PACKAGE(TP.TP0900.(TP00000041));
REBIND PACKAGE(TP.TP0910.(TP00000040));
REBIND PACKAGE(TP.TP0900.(TP00000040));
REBIND PACKAGE(TP.TP0900.(TP00000038));
REBIND PACKAGE(TP.TP0900.(TP00000031));
REBIND PACKAGE(XXWKTST.TP0900.(TP00000031));
REBIND PACKAGE(TP.TP0910.(TP00000031));
REBIND PACKAGE(TP.YTPFLAG.(TP000000315B27B768MVS));
REBIND PACKAGE(TP.YTPFLAG.(TP000000315B27B768));
REBIND PACKAGE(TP.TP0900.(TP00000028));
REBIND PACKAGE(TP.TP0910.(TP00000028));
REBIND PACKAGE(TP.YTPFLAG.(TP000000285ABA2274MVS));
REBIND PACKAGE(TP.YTPFLAG.(TP000000285ABA2274));
REBIND PACKAGE(TP.TP0910.(A18Q002828));
REBIND PACKAGE(TP.TP0900.(A18Q002828));
REBIND PACKAGE(TP.TP0910.(TP00000026));
REBIND PACKAGE(TP.TP0900.(TP00000026));
REBIND PACKAGE(TP.YTPFLAG.(TP000000265A26AB1B));
REBIND PACKAGE(TP.TP0900.(TP00000023));
REBIND PACKAGE(TP.TP0910.(TP00000023));
REBIND PACKAGE(TP.TP0910.(TP00000020));
REBIND PACKAGE(TP.TP0900.(TP00000020));
REBIND PACKAGE(TP.YTPFLAG.(TP00000020594B8605));
REBIND PACKAGE(TP.TP0910.(DE00000073));
REBIND PACKAGE(TP.TP0910.(TP00000018));
REBIND PACKAGE(TP.TP0900.(TP00000018));
REBIND PACKAGE(TP.TP0900.(TP00000016));
REBIND PACKAGE(TP.TP0910.(TP00000016));
REBIND PACKAGE(TP.TP0900.(TP00000011));
REBIND PACKAGE(TP.TP0910.(TP00000011));
REBIND PACKAGE(TP.TP0900.(TP00000008));
REBIND PACKAGE(TP.TP0910.(TP00000008));
REBIND PACKAGE(TP.YTPFLAG.(TP000000025682A753));
$!
$@=¢
//A540769L JOB (CP00,KE50),
//* RESTART=STEPNAME, <== FOR RESTART REMOVE * AND ENTER STEP NAME
// MSGCLASS=T,TIME=1440,
// NOTIFY=&SYSUID
//*MAIN CLASS=LOG
//E01 EXEC PGM=IKJEFT01,DYNAMNBR=30
//SYSTSPRT DD SYSOUT=*
//SYSTSIN DD *
DSN S(DBOF)
$!
$@for li $@¢
parse value $li with rp '(' col '.' pkg '.(' vrs '));'
$=col =-col
$=pkg =-pkg
$=vrs =-vrs
say 'col' $col 'pkg' $pkg 'vrs' $vrs'|'
if $fun = 'cop' then $@=¢
BIND PACKAGE(CHSKA000DBOL.$col) -
copy($col.$pkg) -
copyver($vrs) -
DBPROTOCOL(DRDA) qualifier(OA1P) action(replace)
$!
else $@=¢
REBIND PACKAGE($col.$pkg.($vrs)) -
DBPROTOCOL(DRDA)
$!
$!
$#end
//A540769L JOB (CP00,KE50),
//* RESTART=STEPNAME, <== FOR RESTART REMOVE * AND ENTER STEP NAME
// MSGCLASS=T,TIME=1440,
// NOTIFY=&SYSUID
//*MAIN CLASS=LOG
//*
//*
//**********************************************************************
//*
//* DB2 BATCH MONITOR
//*
//* DB2 ADMIN GENERATED BATCH JOB.
//*
//************************************************************ADB2WL4**
//DB2B EXEC PGM=IKJEFT01,DYNAMNBR=100
//STEPLIB DD DISP=SHR,DSN=DB2@.RZ2.P0.DSNLOAD
// DD DISP=SHR,DSN=DSN.TOOLS.RZ2.P0.SADBLLIB
//SYSEXEC DD DISP=SHR,DSN=DSN.TOOLS.RZ2.C0.SADBEXEC
// DD DISP=SHR,DSN=DSN.TOOLS.RZ2.P0.SGOCEXEC
// DD DISP=SHR,DSN=DSN.TOOLS.RZ2.P0.SADBEXEC
//MSGLIB DD DISP=SHR,DSN=DSN.TOOLS.RZ2.C0.SADBLLIB
// DD DISP=SHR,DSN=DSN.TOOLS.RZ2.P0.SGOCLLIB
// DD DISP=SHR,DSN=DSN.TOOLS.RZ2.P0.SADBLLIB
//ADBALIB DD DISP=SHR,DSN=DSN.TOOLS.RZ2.P0.SADBLLIB
//DB2RLIB DD DISP=SHR,DSN=DB2@.RZ2.P0.DSNLOAD
// DD DISP=SHR,DSN=DSN.TOOLS.RZ2.P0.SADBLLIB
//SYSTSPRT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*,DCB=(LRECL=137,BLKSIZE=141)
//UTPRINT DD SYSOUT=*
//RNPRIN01 DD SYSOUT=*
//STPRIN01 DD DUMMY
//ADBDIAG DD SYSOUT=*
//ADBRPTSM DD SYSOUT=*
//SYSTSIN DD *
DSN SYSTEM(DBOF)
RUN PROGRAM(ADBTEP2) PLAN(ADB) -
LIB('DSN.TOOLS.RZ2.P0.SADBLLIB') -
PARMS('/WORKLIST(RBTBL1) SSID(DBOF) -
RESTART(YES),MAXE(-1)')
END
//ADBTEPIN DD *
BINDERROR='SAVE'
,AC='NO'
;
//SYSIN DD *
-- Created by A540769 on 2010/06/08 at 16:44 by REBIND Package;
REBIND PACKAGE(TP.TP0920.(TP00000058));
REBIND PACKAGE(TP.TP0900.(TP00000058));
REBIND PACKAGE(TP.TP0910.(TP00000058));
REBIND PACKAGE(TP.TP0920.(TP00000055));
REBIND PACKAGE(TP.TP0910.(TP00000055));
REBIND PACKAGE(TP.TP0900.(TP00000055));
REBIND PACKAGE(TP.YTPFLAG.(TP000000555E1DA28A));
REBIND PACKAGE(TP.TP0900.(TP00000053));
REBIND PACKAGE(TP.TP0910.(TP00000053));
REBIND PACKAGE(TP.YTPFLAG.(TP000000535D8C94BA));
REBIND PACKAGE(TP.TP0900.(TP00000050));
REBIND PACKAGE(TP.TP0910.(TP00000050));
REBIND PACKAGE(TP.TP0900.(TP00000046));
REBIND PACKAGE(TP.YTPFLAG.(TP000000465C97A6D8));
REBIND PACKAGE(TP.TP0910.(TP00000046));
REBIND PACKAGE(TP.TP0900.(TP00000044));
REBIND PACKAGE(TP.TP0910.(TP00000044));
REBIND PACKAGE(TP.YTPFLAG.(TP000000445C404AE1));
REBIND PACKAGE(TP.TP0900.(TP00000034));
REBIND PACKAGE(TP.TP0910.(TP00000034));
REBIND PACKAGE(TP.TP0910.(TP00000041));
REBIND PACKAGE(TP.TP0900.(TP00000041));
REBIND PACKAGE(TP.TP0910.(TP00000040));
REBIND PACKAGE(TP.TP0900.(TP00000040));
REBIND PACKAGE(TP.TP0900.(TP00000038));
REBIND PACKAGE(TP.TP0900.(TP00000031));
REBIND PACKAGE(XXWKTST.TP0900.(TP00000031));
REBIND PACKAGE(TP.TP0910.(TP00000031));
REBIND PACKAGE(TP.YTPFLAG.(TP000000315B27B768MVS));
REBIND PACKAGE(TP.YTPFLAG.(TP000000315B27B768));
REBIND PACKAGE(TP.TP0900.(TP00000028));
REBIND PACKAGE(TP.TP0910.(TP00000028));
REBIND PACKAGE(TP.YTPFLAG.(TP000000285ABA2274MVS));
REBIND PACKAGE(TP.YTPFLAG.(TP000000285ABA2274));
REBIND PACKAGE(TP.TP0910.(A18Q002828));
REBIND PACKAGE(TP.TP0900.(A18Q002828));
REBIND PACKAGE(TP.TP0910.(TP00000026));
REBIND PACKAGE(TP.TP0900.(TP00000026));
REBIND PACKAGE(TP.YTPFLAG.(TP000000265A26AB1B));
REBIND PACKAGE(TP.TP0900.(TP00000023));
REBIND PACKAGE(TP.TP0910.(TP00000023));
REBIND PACKAGE(TP.TP0910.(TP00000020));
REBIND PACKAGE(TP.TP0900.(TP00000020));
REBIND PACKAGE(TP.YTPFLAG.(TP00000020594B8605));
REBIND PACKAGE(TP.TP0910.(DE00000073));
REBIND PACKAGE(TP.TP0910.(TP00000018));
REBIND PACKAGE(TP.TP0900.(TP00000018));
REBIND PACKAGE(TP.TP0900.(TP00000016));
REBIND PACKAGE(TP.TP0910.(TP00000016));
REBIND PACKAGE(TP.TP0900.(TP00000011));
REBIND PACKAGE(TP.TP0910.(TP00000011));
REBIND PACKAGE(TP.TP0900.(TP00000008));
REBIND PACKAGE(TP.TP0910.(TP00000008));
REBIND PACKAGE(TP.YTPFLAG.(TP000000025682A753));
/*
//*
$#out 20100608 17:19:54
//A540769L JOB (CP00,KE50),
//* RESTART=STEPNAME, <== FOR RESTART REMOVE * AND ENTER STEP NAME
// MSGCLASS=T,TIME=1440,
// NOTIFY=&SYSUID
//*MAIN CLASS=LOG
//E01 EXEC PGM=IKJEFT01,DYNAMNBR=30
//SYSTSPRT DD SYSOUT=*
//SYSTSIN DD *
DSN S(DBOF)
REBIND PACKAGE(TP.TP0920.(TP00000058)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(TP.TP0900.(TP00000058)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(TP.TP0910.(TP00000058)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(TP.TP0920.(TP00000055)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(TP.TP0910.(TP00000055)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(TP.TP0900.(TP00000055)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(TP.YTPFLAG.(TP000000555E1DA28A)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(TP.TP0900.(TP00000053)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(TP.TP0910.(TP00000053)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(TP.YTPFLAG.(TP000000535D8C94BA)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(TP.TP0900.(TP00000050)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(TP.TP0910.(TP00000050)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(TP.TP0900.(TP00000046)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(TP.YTPFLAG.(TP000000465C97A6D8)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(TP.TP0910.(TP00000046)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(TP.TP0900.(TP00000044)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(TP.TP0910.(TP00000044)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(TP.YTPFLAG.(TP000000445C404AE1)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(TP.TP0900.(TP00000034)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(TP.TP0910.(TP00000034)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(TP.TP0910.(TP00000041)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(TP.TP0900.(TP00000041)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(TP.TP0910.(TP00000040)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(TP.TP0900.(TP00000040)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(TP.TP0900.(TP00000038)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(TP.TP0900.(TP00000031)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(XXWKTST.TP0900.(TP00000031)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(TP.TP0910.(TP00000031)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(TP.YTPFLAG.(TP000000315B27B768MVS)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(TP.YTPFLAG.(TP000000315B27B768)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(TP.TP0900.(TP00000028)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(TP.TP0910.(TP00000028)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(TP.YTPFLAG.(TP000000285ABA2274MVS)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(TP.YTPFLAG.(TP000000285ABA2274)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(TP.TP0910.(A18Q002828)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(TP.TP0900.(A18Q002828)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(TP.TP0910.(TP00000026)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(TP.TP0900.(TP00000026)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(TP.YTPFLAG.(TP000000265A26AB1B)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(TP.TP0900.(TP00000023)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(TP.TP0910.(TP00000023)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(TP.TP0910.(TP00000020)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(TP.TP0900.(TP00000020)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(TP.YTPFLAG.(TP00000020594B8605)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(TP.TP0910.(DE00000073)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(TP.TP0910.(TP00000018)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(TP.TP0900.(TP00000018)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(TP.TP0900.(TP00000016)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(TP.TP0910.(TP00000016)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(TP.TP0900.(TP00000011)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(TP.TP0910.(TP00000011)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(TP.TP0900.(TP00000008)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(TP.TP0910.(TP00000008)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(TP.YTPFLAG.(TP000000025682A753)) -
DBPROTOCOL(DRDA)
}¢--- A540769.WK.REXX.O13(DRDACOMP) cre=2010-06-21 mod=2010-08-01-12.04.45 A540769 ---
$@loadNew()
call sqlConnect DBOF
call sqlPreOpen 1, 'select collid, name, hex(contoken), version',
', valid || operative' ,
'from sysibm.sysPackage',
"where dbProtocol = 'P'" $** "and(valid<>'N' or operative<>'N')"
new = 0
old = 0
co = xx
do while sqlFetchInto(1, ':coll, :pkg, :co, :vers, :vo')
if symbol('m.co2last.co') == 'VAR' then do
new = new + 1
end
else do
old = old + 1
end
if 0 then do
p=' '
if strip(coll) ='HPS' then
p = p 'explain(n)'
$$ REBIND PACKAGE($-{strip(coll)'.'strip(pkg)'.(' $*+
|| strip(vers)})) -
$$ $-{p} DBPROTOCOL(DRDA)
end
$$- vo co strip(coll) strip(pkg) vers
if old // 1000 = 1 then
say 'new' new 'old' old
end
say 'new' new 'old' old
call sqlDisconnect
$@proc loadNew $@¢
st = 0
$;
$<A540769.WK.REXX(DRDALAST)
$@for li $@¢
if abbrev($li, $'$#out ') then do
if st=1 then
leave
st = 1
iterate
end
if st = 0 then
iterate
parse value $li with co 'pkg' pkg 'last' la .
co = strip(co)
pkg = strip(pkg)
m.co2pkg.co = pkg
m.co2last.co = la
$!
$!
$#out 20100801 12:00:52
NY 164DE2480C0C3FEF A1P CI8520 A12M001522
NY 164E114300A2F5AF A1P CI8520 A12M001531
NY 1655E97B1D4F063E A1P CI8520 A12M001797
NN 15C5EB241FB02C12 A1P KD0500 19970207084703S101702A061408AKD0500
NN 1615EEB7011D2F50 A1P KD0540 19980701134213S101702A073364AKD0540
NN 161878261BA05DF7 A1P KD0540 19980717170619S101702Z383268AKD0540
NN 161A571710CA3A50 A1P KD0540 CRMC000003
NY 168970141A69707D A1P KS5310 A13X000472
NY 16958203060813AF A1P KS5310 A13X000591
NY 169F460705B0D87F A1P KS5310 A13X000651
NY 16882B0B0AD331E7 A1P KS5320 A13X000532
NY 167AFE2009CED156 A1P KS5320 A13X000536
NY 169582050BAA22D4 A1P KS5320 A13X000591
NY 1687667206659803 A1P KS5330 A13X000546
NY 16BCF7E30CCDA0BA A1P KS5330 A13X000735
NY 16BE63EE1EE8EF03 A1P KS5330 A13X000740
NY 16BA31CF077C15DB A1P KS5780 A13X000732
NY 16BE63E31073D6CF A1P KS5780 A13X000740
NY 16C0A07C10EB4AFD A1P KS5780 A13X000746
NY 16BA31E4006FBFBF A1P KS5800 A13X000732
NY 16BE63E213025363 A1P KS5800 A13X000740
NY 16C0A0810A5B6988 A1P KS5800 A13X000746
NY 16A152110B9FF6A6 A1P PARTANA1 A18Q000804
NY 164516BC0D280818 A1P RR8420 CRMA000539
NY 1648353F07EC4E1F A1P RR8420 CRMA000574
NY 166D04F50F6980D8 A1P RR8420 CRMA001016
NY 165CB0F905C59250 A1P XP8600 CRME000264
NY 165D75940B31D4EC A1P XP8600 CRME000268
NY 165D8AE21837148F A1P XP8600 CRME000269
NY 1676EF371EFB3B51 A1P YCI009 A12M002427
NY 1676EF371BB2AF9C A1P YCI009A A12M002427
NN 15FF2F5A02CF9692 A1P YECGRI 19980206175312S101702A070225AYECGRI
NN 160041540F0188B0 A1P YECGRI 19980213132027S101702A070420AYECGRI
NN 1604875E13ACF042 A1P YECGRI 19980312175705S101702A070997AYECGRI
NN 15C5EB1509074F78 A1P YKD0500 19970207084459S101702A061408AYKD0500
NN 15C7FD8D1B047776 A1P YKD0500 19970220131055S101702A061859AYKD0500
NN 15CD85F103D59AAC A1P YKD0500 19970327180544S101702A062772AYKD0500
NN 15E37FE91C7B23D4 A1P YKD0500 19970814140402S101702M000800AYKD0500
NN 15E6CEF11FA4B640 A1P YKD0500 19970904152318S101702A066089AYKD0500
NN 15E88BA11939633E A1P YKD0500 19970915163933S101702A066826AYKD0500
NN 15E8FE3F13644320 A1P YKD0500 19970918130127S101702A066876AYKD0500
NN 15F2EEB91D073CD8 A1P YKD0500 19971120185108S101702M000818AYKD0500
NN 15F3646E1EA25C0A A1P YKD0500 19971123170525S101702Z346148AYKD0500
NN 15F3662E1D147D34 A1P YKD0500 19971123180702S101702Z346152AYKD0500
NN 15F369CE0D0F47CA A1P YKD0500 19971123194631S101702Z346164AYKD0500
NN 15F3AC9012C73DA2 A1P YKD0500 19971125120634S101702Z346700AYKD0500
NN 15F51AAE092A4BFA A1P YKD0500 19971204142946S101702Z348815AYKD0500
NN 15F5E973080E51E4 A1P YKD0500 19971209175158S101702Z349699AYKD0500
NN 15F603781AF2232E A1P YKD0500 19971210092215S101702Z349795AYKD0500
NN 15FBBA170A2A671E A1P YKD0500 19980115174941S101702M000856AYKD0500
NN 15FF2F5D15AE1F82 A1P YKD0500 19980206175332S101702A070225AYKD0500
NN 1600415710BDCF88 A1P YKD0500 19980213132025S101702A070420AYKD0500
NN 16048755010B03D8 A1P YKD0500 19980312175740S101702A070997AYKD0500
NN 1607F2CF0A1FA4F4 A1P YKD0500 19980403141032S101702A071472AYKD0500
NN 160A06261A472F65 A1P YKD0500 19980416190530S101702M000898AYKD0500
NN 1612E4F30FCA96DA A1P YKD0500 19980612054559S101702M000922AYKD0500
NN 161310A30C678722 A1P YKD0500 19980613074807S101702Z378634AYKD0500
NN 1613E4AC0B090F20 A1P YKD0500 19980618141748S101702A073266AYKD0500
NN 1615EAC01A922BBA A1P YKD0500 19980701111931S101702A073364AYKD0500
NN 1615EEA60F9DED86 A1P YKD0500 19980701133922S101702A073364AYKD0500
NN 16161DF5150335D8 A1P YKD0500 19980702175321S101702Z381719AYKD0500
NN 161731E90D5CB082 A1P YKD0500 19980709142935S101702A073757AYKD0500
NN 16187CA10D0C1682 A1P YKD0500 19980717194602S101702Z383292AYKD0500
NN 161D4EAD04459518 A1P YKD0500 CRMA000067
NN 162D33470952FFA6 A1P YKD0500 CRMA000128
NN 161B18A00CA11C64 A1P YKD0500 CRMC000003
NN 162D5C5A0908A3AD A1P YKD0500 CRMD000263
NN 162E4AD31D2BD121 A1P YKD0500 CRMD000281
NN 162E6FE715DC4FF4 A1P YKD0500 CRMD000283
NY 1613E56F1740210C A1P YKS0813 19980618144536S101702A073286AYKS0813
NY 163491EB01FDB20E A1P YKS0813 A13X000041
NY 1646550719DBBDAC A1P YKS0813 A13X000301
NY 165330C00D7AB867 A1P YKS0813 A13X000352
NY 16513271056C9880 A1P YKS0813 A13X000362
NY 166D9AB11FA33E50 A1P YKS0813 A13X000436
NY 1677859011B643E5 A1P YKS0813 A13X000508
NY 1676E88707F1D935 A1P YKS0813 A13X000530
NY 1695821F098DD6EA A1P YKS0813 A13X000591
NY 1630A9DA12572F56 A1P YKS5551 A13X000153
NY 1634B7A00A6AC118 A1P YKS5551 A13X000155
NY 163745B70B5F6610 A1P YKS5551 A13X000177
NY 163E846315E5EFF5 A1P YKS5551 A13X000194
NY 1640FE87029F28D2 A1P YKS5551 A13X000269
NY 164AE8141397EFC6 A1P YKS5551 A13X000321
NY 165243271B36AE1D A1P YKS5551 A13X000368
NY 16932BF11BF1D6FA A1P YKS5551 A13X000597
NY 1630A9DF1565AD62 A1P YKS5552 A13X000153
NY 1634B7A9147E2684 A1P YKS5552 A13X000155
NY 16932C9D020E69F9 A1P YKS5552 A13X000597
NY 1630A9E30D269CF6 A1P YKS5553 A13X000153
NY 1634B7A21AFC2256 A1P YKS5553 A13X000155
NY 163745CE170BF742 A1P YKS5553 A13X000177
NY 163AE0290CA67CFE A1P YKS5553 A13X000194
NY 1640DDA6001FB321 A1P YKS5553 A13X000249
NY 1643CD8D13A137CA A1P YKS5553 A13X000279
NY 16501614117EAAEE A1P YKS5553 A13X000339
NY 16932C4511DF1A14 A1P YKS5553 A13X000597
NY 164445390715E376 A1P YSAT058 A16M000359
NN 15F2EEB81F753348 A1P YYECGRI 19971120185114S101702M000818AYYECGRI
NN 15F369CC0439D86A A1P YYECGRI 19971123194631S101702Z346164AYYECGRI
NN 15F519F619C6885F A1P YYECGRI 19971204140411S101702Z348800AYYECGRI
NN 15FBB9F00F950012 A1P YYECGRI 19980115174545S101702M000856AYYECGRI
NY 164DE2480C0C3FEF A2P CI8520 A12M001522
NY 164E114300A2F5AF A2P CI8520 A12M001531
NY 1655E97B1D4F063E A2P CI8520 A12M001797
NN 15C467A81072B294 A2P FD0350 19970128173847S101702Z293371AFD0350
NN 15CFB3DA0DA10990 A2P FD0350 19970410145407S101702A062970AFD0350
NN 160041A1013AD3F8 A2P FD0350 19980213133248S101702A070466AFD0350
NN 15C5EB241FB02C12 A2P KD0500 19970207084703S101702A061408AKD0500
NN 1615EEB7011D2F50 A2P KD0540 19980701134213S101702A073364AKD0540
NN 161878261BA05DF7 A2P KD0540 19980717170619S101702Z383268AKD0540
NN 161A571710CA3A50 A2P KD0540 CRMC000003
NY 168970141A69707D A2P KS5310 A13X000472
NY 16958203060813AF A2P KS5310 A13X000591
NY 169F460705B0D87F A2P KS5310 A13X000651
NY 16882B0B0AD331E7 A2P KS5320 A13X000532
NY 167AFE2009CED156 A2P KS5320 A13X000536
NY 169582050BAA22D4 A2P KS5320 A13X000591
NY 1687667206659803 A2P KS5330 A13X000546
NY 16BCF7E30CCDA0BA A2P KS5330 A13X000735
NY 16BE63EE1EE8EF03 A2P KS5330 A13X000740
NY 16BA31CF077C15DB A2P KS5780 A13X000732
NY 16BE63E31073D6CF A2P KS5780 A13X000740
NY 16C0A07C10EB4AFD A2P KS5780 A13X000746
NY 16BA31E4006FBFBF A2P KS5800 A13X000732
NY 16BE63E213025363 A2P KS5800 A13X000740
NY 16C0A0810A5B6988 A2P KS5800 A13X000746
NY 164B053E00772199 A2P RR8270 CRMA000504
NY 166D04ED01A34479 A2P RR8270 CRMA001016
NY 164516BC0D280818 A2P RR8420 CRMA000539
NY 1648353F07EC4E1F A2P RR8420 CRMA000574
NY 166D04F50F6980D8 A2P RR8420 CRMA001016
NY 165CB0F905C59250 A2P XP8600 CRME000264
NY 165D75940B31D4EC A2P XP8600 CRME000268
NY 165D8AE21837148F A2P XP8600 CRME000269
NY 1676EF371EFB3B51 A2P YCI009 A12M002427
NY 1676EF371BB2AF9C A2P YCI009A A12M002427
NN 15FF2F5A02CF9692 A2P YECGRI 19980206175312S101702A070225AYECGRI
NN 160041540F0188B0 A2P YECGRI 19980213132027S101702A070420AYECGRI
NN 1604875E13ACF042 A2P YECGRI 19980312175705S101702A070997AYECGRI
NN 15C5EB1509074F78 A2P YKD0500 19970207084459S101702A061408AYKD0500
NN 15C7FD8D1B047776 A2P YKD0500 19970220131055S101702A061859AYKD0500
NN 15CD85F103D59AAC A2P YKD0500 19970327180544S101702A062772AYKD0500
NN 15E37FE91C7B23D4 A2P YKD0500 19970814140402S101702M000800AYKD0500
NN 15E6CEF11FA4B640 A2P YKD0500 19970904152318S101702A066089AYKD0500
NN 15E88BA11939633E A2P YKD0500 19970915163933S101702A066826AYKD0500
NN 15E8FE3F13644320 A2P YKD0500 19970918130127S101702A066876AYKD0500
NN 15F2EEB91D073CD8 A2P YKD0500 19971120185108S101702M000818AYKD0500
NN 15F3646E1EA25C0A A2P YKD0500 19971123170525S101702Z346148AYKD0500
NN 15F3662E1D147D34 A2P YKD0500 19971123180702S101702Z346152AYKD0500
NN 15F369CE0D0F47CA A2P YKD0500 19971123194631S101702Z346164AYKD0500
NN 15F3AC9012C73DA2 A2P YKD0500 19971125120634S101702Z346700AYKD0500
NN 15F51AAE092A4BFA A2P YKD0500 19971204142946S101702Z348815AYKD0500
NN 15F5E973080E51E4 A2P YKD0500 19971209175158S101702Z349699AYKD0500
NN 15F603781AF2232E A2P YKD0500 19971210092215S101702Z349795AYKD0500
NN 15FBBA170A2A671E A2P YKD0500 19980115174941S101702M000856AYKD0500
NN 15FF2F5D15AE1F82 A2P YKD0500 19980206175332S101702A070225AYKD0500
NN 1600415710BDCF88 A2P YKD0500 19980213132025S101702A070420AYKD0500
NN 16048755010B03D8 A2P YKD0500 19980312175740S101702A070997AYKD0500
NN 1607F2CF0A1FA4F4 A2P YKD0500 19980403141032S101702A071472AYKD0500
NN 160A06261A472F65 A2P YKD0500 19980416190530S101702M000898AYKD0500
NN 1612E4F30FCA96DA A2P YKD0500 19980612054559S101702M000922AYKD0500
NN 161310A30C678722 A2P YKD0500 19980613074807S101702Z378634AYKD0500
NN 1613E4AC0B090F20 A2P YKD0500 19980618141748S101702A073266AYKD0500
NN 1615EAC01A922BBA A2P YKD0500 19980701111931S101702A073364AYKD0500
NN 1615EEA60F9DED86 A2P YKD0500 19980701133922S101702A073364AYKD0500
NN 16161DF5150335D8 A2P YKD0500 19980702175321S101702Z381719AYKD0500
NN 161731E90D5CB082 A2P YKD0500 19980709142935S101702A073757AYKD0500
NN 16187CA10D0C1682 A2P YKD0500 19980717194602S101702Z383292AYKD0500
NN 161D4EAD04459518 A2P YKD0500 CRMA000067
NN 162D33470952FFA6 A2P YKD0500 CRMA000128
NN 161B18A00CA11C64 A2P YKD0500 CRMC000003
NN 162D5C5A0908A3AD A2P YKD0500 CRMD000263
NN 162E4AD31D2BD121 A2P YKD0500 CRMD000281
NN 162E6FE715DC4FF4 A2P YKD0500 CRMD000283
NY 16BA30A41C0F6F67 A2P YKS0801 A13X000702
NY 16C07605061FBB71 A2P YKS0801 A13X000736
NY 1613E56F1740210C A2P YKS0813 19980618144536S101702A073286AYKS0813
NY 163491EB01FDB20E A2P YKS0813 A13X000041
NY 1646550719DBBDAC A2P YKS0813 A13X000301
NY 165330C00D7AB867 A2P YKS0813 A13X000352
NY 16513271056C9880 A2P YKS0813 A13X000362
NY 166D9AB11FA33E50 A2P YKS0813 A13X000436
NY 1677859011B643E5 A2P YKS0813 A13X000508
NY 1676E88707F1D935 A2P YKS0813 A13X000530
NY 1695821F098DD6EA A2P YKS0813 A13X000591
NY 1630A9DA12572F56 A2P YKS5551 A13X000153
NY 1634B7A00A6AC118 A2P YKS5551 A13X000155
NY 163745B70B5F6610 A2P YKS5551 A13X000177
NY 163E846315E5EFF5 A2P YKS5551 A13X000194
NY 1640FE87029F28D2 A2P YKS5551 A13X000269
NY 164AE8141397EFC6 A2P YKS5551 A13X000321
NY 165243271B36AE1D A2P YKS5551 A13X000368
NY 16932BF11BF1D6FA A2P YKS5551 A13X000597
NY 1630A9DF1565AD62 A2P YKS5552 A13X000153
NY 1634B7A9147E2684 A2P YKS5552 A13X000155
NY 16932C9D020E69F9 A2P YKS5552 A13X000597
NY 1630A9E30D269CF6 A2P YKS5553 A13X000153
NY 1634B7A21AFC2256 A2P YKS5553 A13X000155
NY 163745CE170BF742 A2P YKS5553 A13X000177
NY 163AE0290CA67CFE A2P YKS5553 A13X000194
NY 1640DDA6001FB321 A2P YKS5553 A13X000249
NY 1643CD8D13A137CA A2P YKS5553 A13X000279
NY 16501614117EAAEE A2P YKS5553 A13X000339
NY 16932C4511DF1A14 A2P YKS5553 A13X000597
NY 164445390715E376 A2P YSAT058 A16M000359
NY 16435A6F11693957 A2P YSAT061 A16M000359
NN 15F2EEB81F753348 A2P YYECGRI 19971120185114S101702M000818AYYECGRI
NN 15F369CC0439D86A A2P YYECGRI 19971123194631S101702Z346164AYYECGRI
NN 15F519F619C6885F A2P YYECGRI 19971204140411S101702Z348800AYYECGRI
NN 15FBB9F00F950012 A2P YYECGRI 19980115174545S101702M000856AYYECGRI
NY 150316DB1D65BC0E AC YACM002
NY 1535B571062A8382 AC YACM002 19940804182728S101702A036204AYACM002
YY 176164B10AD93BB4 ADBL ADB2PRP
NY 15722F7818523CAA AL AL7501 19950824S101702A047042AAL7501
NY 1583CDBC12FD69C8 AL AL7501 19951214S101702A050076AAL7501
NY 17C52B9F140DD234 AN ANNA001 CIIN000149MVS
NY 17F26CEC1BAB8C79 AP YAPUTGK APEN00003558075175
NY 17EC9A750B3B4966 AP YAPUTGK APEN00003657D67A8A
NY 1800EB9C1E4F0DCB AP YAPUTGK APEN0000385880DAE5
NY 18027D7C14A3884A AP YAPUTGK APEN000039588E05DF
NY 18104EBD04339C10 AP YAPUTGK APEN0000405901FCB8
NY 1819175D1DF020AF AP YAPUTGK APEN000042594BAB6AMVS
NY 18139AF81D465774 AP YAPUTGK APEN000046591DA6B5
NY 1822D8CB0B3D7465 AP YAPUTGK APEN000048599D816AMVS
NY 182835EF138E560D AP YAPUTGK APEN00004959CA802BMVS
NY 18356347080AFC3C AP YAPUTGK APEN0000505A38FBC3MVS
NY 17E08BA80A27FC86 AS AS0050 KABG000038
NY 17C9C23B0EA9675A AS AS0100 KABG000030
NY 17D3559116861C28 AS AS0100 KABG000032
NY 17E1A51A17E0F50C AS AS0100 KABG000038
NY 17D3558A0C154045 AS AS0101I KABG0000325702815B
NY 17C9C23C12AF79BC AS AS0610 KABG000030
NY 17D3559519C2E6E1 AS AS0610 KABG000032
NY 17E1A52218671DC2 AS AS0610 KABG000038
NY 160E69CA19939C46 AS AS8992 19980514171537S101702M000860AAS8992
NY 161B932817CAEAAE AS AS8992 A15T000038
NY 1641EA5C07BD0976 AT AT0090 A12M001166
NY 16701F2E068440B8 AT AT0090 A20Y000239
NY 1684DF0C1CAAE6CA AT AT0090 A20Y000364
NY 17A5446209C50C0A AT AT0097 IMS0000013
NY 1780D2BC184B4289 AT AT0099 A20Y001519544E5A50
NY 1802F62718C20B26 AT AT0099 ACS00000115891FA54
NY 181A390E14673B05 AT AT0099 ACS0000015595529B8
NY 181E9EFE19152277 AT AT0099 ACS0000017597A0EC1
NY 169584351662C65F AT AT0100 A20Y000431
NY 178558EC0450FFF6 AT AT0620 A20Y001564
NN 161752A819909F4A AT AT7010 19980710095644S101702Z382648AAT7010
NN 1617536E04B0F3C2 AT AT7010 19980710102939S101702Z382654AAT7010
NN 159216F71F876EB6 AT AT7060 19960314140003S101702A052607AAT7060
NN 15967D67056F4424 AT AT7060 19960411135637S101702A053258AAT7060
NN 15B897D016771B92 AT AT7060 19961114135124S101702A058435AAT7060
NY 17867C0D14590A59 AT AT7110 A20Y001564
NN 15E497E61F0D4E14 AT AT7200 19970821130820S101702A065919AAT7200
NY 16804E200C818C3D AT AT7222 A20Y000328
NY 167052EB121BF030 AT AT7224 A20Y000111
NY 16804E280E27D697 AT AT7224 A20Y000328
NY 160E69CD130FE694 AT AT7225 19980514171958S101702A072293AAT7225
NY 16804E4C09EB407F AT AT7225 A20Y000328
NY 17DA424D068E89BE AT AT7500 ACS0000009
NY 1804098110C21912 AT AT7500 ACS0000011
NY 1644F3CA173A61B0 AT AT8100 A12M001144
NY 1648DBBC02AB08EC AT AT8100 A12M001366
NY 164F2A4B0F8D30EC AT AT8100 A12M001566
NY 1804D5561875E4E5 AT AT8500 ACS0000011
NY 1808E90A06AD4C3F AT AT8500 ACS0000012
NY 1808EEA306001923 AT AT8500 ACS0000013
NN 159F4AC31EED2BB6 AT AT9000 19960606140803S101702A054557AAT9000
NN 16124BD61907BF70 AT AT9000 19980608102520S101702Z377704AAT9000
NN 1612799103DC119E AT AT9000 19980609134214S101702Z377955AAT9000
NN 159F4AC41BD178A0 AT AT9002 19960606140805S101702A054557AAT9002
NN 159F4AC31F9F0C82 AT AT9010 19960606140801S101702A054557AAT9010
NY 157B028C0F2080C4 AT YAT7010 19951019S101702A047927AYAT7010
NY 157F16DF06FB2C46 AT YAT7010 19951114S101702Z218883AYAT7010
NY 15807BE3061C6BE0 AT YAT7010 19951123S101702A049711AYAT7010
NY 15AD972311C5029A AT YAT7010 19960905133829S101702A056753AYAT7010
NY 17D199770CEF0B1C AU YAU180D AURA00004356F3E622
NY 17ECA23A082F19C6 AU YAU180D AURA00005057D6BBB4
NY 17ECA23A0C6EB668 AU YAU180F AURA00005057D6BBB7
NY 17D199791F734558 AU YAU180I AURA00004356F3E638
NY 17ECA23B145216C9 AU YAU180I AURA00005057D6BBBE
NY 17D1997B138858E0 AU YAU180S AURA00004356F3E645
NY 17ECA23C00535FE4 AU YAU180S AURA00005057D6BBC2
NY 17ECA23B1FBFA9C1 AU YAU180U AURA00005057D6BBC5
NY 17D1998A1EF2250C AU YAU181D AURA00004356F3E6C6
NY 17ECA23E09A5EBC1 AU YAU181D AURA00005057D6BBD6
NY 17ECA23E0FABF3D8 AU YAU181F AURA00005057D6BBD9
NY 17D1998B1192E592 AU YAU181I AURA00004356F3E6CB
NY 17ECA23E1E25B2EE AU YAU181I AURA00005057D6BBDA
NY 17D1998B15F5960D AU YAU181S AURA00004356F3E6CC
NY 17ECA23F077FC922 AU YAU181S AURA00005057D6BBDE
NY 17ECA23F0E1D66B0 AU YAU181U AURA00005057D6BBE0
NY 17D19991066B9C34 AU YAU190D AURA00004356F3E6FA
NY 17ECA24500EBBB18 AU YAU190D AURA00005057D6BC08
NY 17ECA2450050B44A AU YAU190F AURA00005057D6BC0A
NY 17D19991196BE2D0 AU YAU190I AURA00004356F3E6FF
NY 17ECA2441E732C65 AU YAU190I AURA00005057D6BC0B
NY 17D199911CE79E0F AU YAU190S AURA00004356F3E700
NY 17ECA24502F699F4 AU YAU190S AURA00005057D6BC0C
NY 17ECA245060F76D6 AU YAU190U AURA00005057D6BC0D
NY 17D1999210CDFF4E AU YAU191D AURA00004356F3E705
NY 17ECA2461B9D32E9 AU YAU191D AURA00005057D6BC0E
NY 17ECA2470B09C3B9 AU YAU191F AURA00005057D6BC1D
NY 17D1999509B99A7E AU YAU191I AURA00004356F3E71C
NY 17ECA2471C332E9A AU YAU191I AURA00005057D6BC20
NY 17D1999509753F81 AU YAU191S AURA00004356F3E71C
NY 17ECA2471747FF5F AU YAU191S AURA00005057D6BC24
NY 17ECA2481CF2F5C5 AU YAU191U AURA00005057D6BC27
NY 17E569120F986D09 AV AV0150 PMRT000051
NY 17E569161C2E460C AV AV0160 PMRT000051
NY 17E6F1FE00388943 AV AV0170 PMRT000051
NY 17E80DCA144420F7 AV AV0180 PMRT000064
NY 17E6F34A1C542AD2 AV AV0190 PMRT000051
NY 17E5690601453DA4 AV AV0210 PMRT000051
NY 17E5691C1FEF8F43 AV AV0220 PMRT000051
NY 17E7261E11CED4EB AV AV0250 PMRT000051
NY 17E569221CB31606 AV AV0310 PMRT000051
NY 17E569290424F92E AV AV0410 PMRT000051
NY 181D086E1A4ECCC0 AV AV8710 PMRT000087
NY 17C9679213BF125F AV AV8730 PMRT000038
NY 17D3270F03D52A4A AV AV8730 PMRT000047
NY 17E0D3341267EA4F AV AV8730 PMRT000051
NY 17F01A1317E6CC4B AV AV8730 PMRT000061
NY 15AEB8D707346442 AV AV8760 19960912182612S101702M000659AAV8760
NY 15DE01241F8A2456 AV AV8780 19970710145440S101702M000721AAV8780
NY 160E86341A290D7D AV AV8780 19980515101750S101702M000839AAV8780
NN 16175AA10B3A7C03 AV AV8810 19980710144536S101702M000841AAV8810
NY 15F1CDA61F5655E8 AV PB7100 19971113142535S101702A068238APB7100
NY 160C09871F9001F2 AV PB7100 19980429143617S101702Z372375APB7100
NY 15FCCE141AF5E25E AV YAV0491 19980122142900S101702M000889AYAV0491
NY 16001B8F0EA53D76 AV YAV0491 19980212144909S101702M000834AYAV0491
NY 1600B3EE11290746 AV YAV0491 19980216094309S101702Z360000AYAV0491
NY 1600BF7D1404B85A AV YAV0491 19980216163702S101702Z360000AYAV0491
NY 1600CAFD18A258AA AV YAV0491 19980216232923S101702Z360000AYAV0491
NY 1600EBE8145E9F50 AV YAV0491 19980217190729S101702Z360614AYAV0491
NY 16010E541A175F54 AV YAV0491 19980218153923S101702Z360822AYAV0491
NY 16013C930285B008 AV YAV0491 19980219191321S101702A070586AYAV0491
NY 16024C24072CD91A AV YAV0491 19980226131304S101702A070685AYAV0491
NY 16036E7B169C9BD6 AV YAV0491 19980305182245S101702M000837AYAV0491
NY 160527120CD1FE62 AV YAV0491 19980316171545S101702Z365002AYAV0491
NY 16059D8E01DEE026 AV YAV0491 19980319155434S101702M000894AYAV0491
NY 1607CCAC09C7A50C AV YAV0491 19980402152529S101702A071451AYAV0491
NY 1607D0CE0B4721CA AV YAV0491 19980402174755S101702A071451AYAV0491
NY 160A0CBE1D77D87E AV YAV0491 19980416230442S101702M000838AYAV0491
NY 160A27690E1AAF44 AV YAV0491 19980417145713S101702M000838AYAV0491
NY 160F546B090D6BAA AV YAV0491 19980520132114S101702M000911AYAV0491
NY 1612CDA703B93646 AV YAV0491 19980611154441S101702M000840AYAV0491
NY 1613B369128241CA AV YAV0491 19980617085448S101702Z379436AYAV0491
NY 1613E6D00583D5FF AV YAV0491 19980618153333S101702A072820AYAV0491
NY 1613EA7F03A57AF7 AV YAV0491 19980618174545S101702A072820AYAV0491
NY 15FC7C8015088BF0 AV YAV0492 19980120134946S101702Z356212AYAV0492
NY 15FCCE141FD171CA AV YAV0492 19980122142900S101702M000889AYAV0492
NY 16001B8E18CF2BEC AV YAV0492 19980212144910S101702M000834AYAV0492
NY 1600B3EE109EBF4E AV YAV0492 19980216094354S101702Z360001AYAV0492
NY 1600EBED0F410816 AV YAV0492 19980217190815S101702Z360615AYAV0492
NY 16013C910AA3ADF6 AV YAV0492 19980219191324S101702A070586AYAV0492
NY 16024C2203916548 AV YAV0492 19980226131307S101702A070685AYAV0492
NY 16036EA9020D1582 AV YAV0492 19980305182323S101702M000837AYAV0492
NY 1605271C18775376 AV YAV0492 19980316171625S101702Z365003AYAV0492
NY 16059D8F01CA216B AV YAV0492 19980319155435S101702M000894AYAV0492
NY 1607CCAE0F0B319A AV YAV0492 19980402152532S101702A071451AYAV0492
NY 1607D0A60D2960CC AV YAV0492 19980402174757S101702A071451AYAV0492
NY 160A0CBF09C6F1B4 AV YAV0492 19980416230443S101702M000838AYAV0492
NY 160A2768153C9AC8 AV YAV0492 19980417145714S101702M000838AYAV0492
NY 160F546709B5FEF6 AV YAV0492 19980520132114S101702M000911AYAV0492
NY 17E065AB1E85A8D5 AV YAV1002 AIS0000095577015F3
NY 17DC47FA1390D6C0 AV YAVNV10 AIS0000095574D8EE1
NY 17EFCD88088B7283 AV YAVNV10 AIS000009757F15171
NY 17F8BFDF19563581 AV YAVNV10 AIS0000118583C5023
NY 17DC485E0B0B1C08 AV YAVNV50 AIS0000095574D922B
NY 17ECF5620CF828B7 AV YAVNV50 AIS000009757D9753E
NY 17F8BFE11B8CF802 AV YAVNV50 AIS0000118583C503B
NY 17A58E1516E5BA26 AV YAVTOTX AIS000002855827B69
NY 17E3CF6C11F54D9D AZ AZ0210 AWZA000036
NY 1805C70F119FB4AC AZ AZ0210 AWZA000052
NY 17F65B73080F54FE AZ AZ0210 AWZA000054
NY 17D2AD0107D064B9 AZ YAZ0906 AWZA00003556FCFB81
NN 15FCEA5A0A642344 BB BB0610 19980123072119S101702A069974ABB0610
NN 160367661777B7FA BB BB0610 19980305141209S101702A070764ABB0610
NN 160A031D0D9A1220 BB BB0610 19980416171757S101702M000874ABB0610
NN 14FEB040124F01EC BB BB0620
NN 1525374C1A6758F8 BB BB0620 19940421195008S101702A033635ABB0620
NN 157464C8115986E4 BB BB0630 19950907S101702A047247ABB0630
NN 15A06AB904A0B1A4 BB BB0630 19960613175401S101702A054931ABB0630
NN 15E38BA81ABEAD50 BB BB0630 19970814210720S101702A065981ABB0630
NN 1522AAC808CA5442 BB0610 BB0610 E
NY 170C7AEC1C51C551 BC BC0004 A20Y001119507E65B1
NY 170C7AEE09225240 BC BC0005 A20Y001119507E65BC
NY 150F4BA41E900E9A BF BF5200
NY 15C281291C65DA6C BF BF5210 19970116152548S101702A059717ABF5210
NY 15E7E5361957B936 BF BF5210 19970911132316S101702A066068ABF5210
NY 15EB32C21FF75BF7 BF BF5210 19971002134504S101702A067141ABF5210
NY 153902F6137C8A30 BF BF5220 19940825185414S101702A036438ABF5220
NY 15E7E5370F068ADE BF BF5220 19970911132317S101702A066068ABF5220
NY 15EB32C41C4B73B4 BF BF5220 19971002134518S101702A067141ABF5220
NY 153902F700814934 BF BF5230 19940825185417S101702A036438ABF5230
NY 15EB32BF04D1918E BF BF5230 19971002134524S101702A067141ABF5230
NN 15F635010D0A5D46 BF BF5800 19971211145411S101702A068424ABF5800
NN 15DE014E04577D2C BF BF5820 19970710145443S101702M000721ABF5820
NN 15F634FE137FA476 BF BF5820 19971211145412S101702A068424ABF5820
NY 159BAB9B0A182D28 BF BF6090 19960514130419S101702Z248334ABF6090
NY 159BAD8813D65D82 BF BF6090 19960514141319S101702Z248334ABF6090
NY 159BADE616475D14 BF BF6090 19960514142627S101702Z248334ABF6090
NY 155389391E7448C2 BF BF6093 19950210132753S101702Z176750ABF6093
NY 159DE1540BE5E038 BF BF6094 19960528143214S101702Z250204ABF6094
NY 159DE36206C41602 BF BF6094 19960528154545S101702Z250204ABF6094
NY 159E5A841F3B0042 BF BF6094 19960531144954S101702Z250854ABF6094
NY 17C9B91418F8CED6 BF BF7110 DBH0000054
NY 15D0F1D91905D620 BF BF7155 19970418123528S101702Z306908ABF7155
NY 169B32D400FC7E4F BF BF8651 A06M014649
NY 16A2BF941EFADE7F BF BF8651 A06M015279
NY 16C8F25E01CF6F97 BF BF8651 A06M018600
NY 167A09691326E76E BF BF8655 A06M010498
NY 169C55070A2B53F1 BF BF8655 A06M014649
NY 16C919050C1F9F1D BF BF8655 A06M018600
NY 1582B4CA08C9FFD8 BF YBF530A 19951207S101702M000634AYBF530A
NY 158ECF6214B03EEC BF YBF530A 19960222171024S101702A052072AYBF530A
NY 15902FD502A31894 BF YBF530A 19960302112542S101702Z236662AYBF530A
NY 1591002A01037F40 BF YBF530A 19960307154206S101702Z237597AYBF530A
NY 1596837113C0C91A BF YBF530A 19960411173314S101702A053271AYBF530A
NY 15B8AA8F02CE70A0 BF YBF530A 19961115010108S101702M000661AYBF530A
NY 15D0CE0D19C13B8A BF YBF530A 19970417151313S101702M000718AYBF530A
NY 15FBD3FB1547C6FC BF YBF530A 19980116091802S101702A069606AYBF530A
NY 160A0CBE0C8067EA BF YBF530A 19980416230450S101702M000838AYBF530A
NY 160A275B1FFBCE22 BF YBF530A 19980417145719S101702M000838AYBF530A
NY 160E6991020CE58A BF YBF530A 19980514170908S101702A072190AYBF530A
NY 1582B4CF107AF85A BF YBF530C 19951207S101702M000634AYBF530C
NY 158366D90A273776 BF YBF530C 19951212S101702Z224164AYBF530C
NY 158ECF62134EFED2 BF YBF530C 19960222171021S101702A052072AYBF530C
NY 15C70985032B4F18 BF YBF530C 19970214113528S101702M000716AYBF530C
NY 15D0CE3F180E9E6C BF YBF530C 19970417152008S101702M000718AYBF530C
NY 15D76735093AE61C BF YBF530C 19970529145110S101702M000773AYBF530C
NY 15DAB28210DBC286 BF YBF530C 19970619135415S101702A064827AYBF530C
NY 160A0CB0047FDAC8 BF YBF530C 19980416230451S101702M000838AYBF530C
NY 160A2758111F9E66 BF YBF530C 19980417145719S101702M000838AYBF530C
NY 160E699B00605186 BF YBF530C 19980514171120S101702A072190AYBF530C
NY 160A0FFB14698DD0 BG BG5030 19980417004708S101702M000838ABG5030
NY 160A2A331314C09A BG BG5030 19980417164021S101702M000838ABG5030
NY 160E86301107EC02 BG BG5030 19980515101751S101702M000839ABG5030
NY 15B8BADD12C21910 BG YBG0532 19961115104536S101702M000774AYBG0532
NY 15B9DACA017F6818 BG YBG0532 19961122143048S101702Z278945AYBG0532
NY 15BD06F402869D92 BG YBG0532 19961212185135S101702A059774AYBG0532
NY 15CA3899152E40AA BG YBG0532 19970306174909S101702A062187AYBG0532
NY 15CE9E49181FB8B2 BG YBG0532 19970403171955S101702A062906AYBG0532
NY 15B8BADD1AA85D42 BG YBG0533 19961115104534S101702M000774AYBG0533
NY 15B9DACB0CF401B4 BG YBG0533 19961122143047S101702Z278945AYBG0533
NY 15BD06E10C9D2BCA BG YBG0533 19961212184920S101702A059774AYBG0533
NY 15CA389910E791DC BG YBG0533 19970306174905S101702A062187AYBG0533
NY 15D0CE4A19DD3F2A BG YBG0533 19970417152106S101702M000718AYBG0533
NY 15D9C24213072E21 BG YBG0533 19970613143606S101702Z316345AYBG0533
NY 15DAB43604062EC2 BG YBG0533 19970619145541S101702A064697AYBG0533
NY 17F6AA560A34ED8A BP BP5020 BPST000045
NY 17C57B9F08EB0C71 BP BP5030 BPST000037
NY 1832DC7A18736311 BP BP5030 BPST000092
NY 17C57B9713F86E82 BP BP5060 BPST000037
NY 1506668818CF2372 BP BP5110
NY 1535B51614B1A26A BP BP5110 19940804181814S101702M000488ABP5110
NN 150666840082209C BP BP5300
NN 1577B0C60EBA90F4 BP BP5300 19950928S101702A048040ABP5300
NN 1515CB39102F3BAC BP BP6000
NN 14DEC9231A6F93D6 BP BP6020
NN 1515CB251704A156 BP BP6060
NN 15F633A91B86136E BP BP7000 19971211140642S101702A069088ABP7000
NN 15F657CF166B9186 BP BP7000 19971212114155S101702Z350210ABP7000
NN 15F721140F5090C2 BP BP7000 19971217114439S101702A069235ABP7000
NY 15A9318801F6F29C BP BP7030 19960808141137S101702A056223ABP7030
NY 15A955C60B512CE8 BP BP7030 19960809114839S101702Z261082ABP7030
NY 15AB64A015540528 BP BP7030 19960822140553S101702A056579ABP7030
NY 15A1A2D81FF23DC8 BP BP7040 19960621120626S101702Z254169ABP7040
NY 16B27B3C1630432F BP BP7042 A20Y000615
NN 148919C41FD6B1B4 BP BP7090
NN 1577B0C21280B95C BP BP7090 19950928S101702A048040ABP7090
NY 16675AC9070B1EC2 BP BP7090 A20Y000082
NY 16BA2AD11D9A7732 BP BP7120 A20Y000665
NY 16BE8CF60D490B16 BP BP7130 A20Y000665
NY 17C57B990CC74A69 BP BP7161 BPST000037
NY 17E9A6230C310A9D BP BP7161 BPST000055
NY 169B33C51657A5E1 BP BP7200 A20Y000403
NY 16B6B9F81C9E53D1 BP BP7200 A20Y000648
NY 17C57B9A18C275B0 BP BP9060 BPST000037
NY 17F6ABEC0FBFB769 BP BP9060 BPST000045
NY 17E9A64007AB96E0 BP BP9060 BPST000055
NY 1825FD9200278E86 BP BP9060 BPST000082
NY 1577B01A0ACA6D00 BP YBP01NS 19950928S101702A048005AYBP01NS
NY 157C19F315459D6C BP YBP01NS 19951026S101702Z214855AYBP01NS
NY 157C3E731202D132 BP YBP01NS 19951027S101702Z214995AYBP01NS
NY 157D30D41ECCE710 BP YBP01NS 19951102S101702A049016AYBP01NS
NY 15A066B51EF1FB26 BP YBP04NS 19960613153121S101702A055005AYBP04NS
NY 147660C41FD5D044 BP YBP7020
NY 1577B0B810DBF3CC BP YBP7020 19950928S101702A048040AYBP7020
NY 175BDAEA05D32FD9 BP YBPACF2 A12M0061025318300D
NY 1774905A02E83F85 BP YBPALTR A12M00647953E783C0
NY 15DAB24A0AF3AA74 BP YBPCRM 19970619134703S101702A064764AYBPCRM
NY 1800DF8F18D4B675 BP YBPMUT BPST000045588075D1
NY 17DD994215DF226A BP YBPMUT BPST00004857589C3C
NY 17F35E23093D0893 BP YBPMUT BPST000055580F38EA
NY 17E8843C18AB4C98 BP YBPMUT BPST00005757B43238
NY 1818F6591AC16718 BP YBPMUT BPST000079594A969E
NY 1818F65E1627C6B5 BP YBPMUT BPST000079594A969EMVS
NY 1814AE571004BA08 BP YBPMUT BPST0000805926ACAC
NY 1823001E039F38F8 BP YBPMUT BPST000087599ECB6F
NY 182300220D81C015 BP YBPMUT BPST000087599ECB6FMVS
NY 18282A1B12DD2641 BP YBPMUT BPST00008859CA1D14
NY 18282A20053408CF BP YBPMUT BPST00008859CA1D14MVS
NY 182F99880EDCE9B7 BP YBPMUT BPST0000925A086E14
NY 182F998D0987CB8B BP YBPMUT BPST0000925A086E14MVS
NY 150316DC04471502 BP YBPPID
NY 1535B5A51890624A BP YBPPID 19940804183036S101702A036204AYBPPID
NY 147692731D721634 BP YBPSHBP
NY 1795979C1E29E8A6 BP YBPSTAM BPST00002254FC858F
NY 177490BA1DC67F1D BP YBPSUCH A12M00647953E786E4
NY 177490BB13FA02E9 BP YBPSUCH A12M00647953E786E4CICS
NY 17E55ED20DFB6A26 BS BS5030 BUT0000006
NY 1503143A0A6B5CA0 BS BS7630
NY 14F6FE851244A2C6 BW YBWAAGE
NY 1598B165187DA214 BW YBWAAGE 19960425142305S101702A053631AYBWAAGE
NY 15BF591E03C77C20 BW YBWAAGE 19961227131948S101702A060345AYBWAAGE
NY 151167350EB77844 BW YBWAAGF
NY 151B218309B9B006 BW YBWAAGF 19940216154925S101702A031665A
NY 1598B167127A6A6E BW YBWAAGF 19960425142315S101702A053631AYBWAAGF
NY 15AA4B5C1E0F52D4 BW YBWAAGF 19960815141412S101702A056402AYBWAAGF
NY 15BF591F068580AC BW YBWAAGF 19961227131949S101702A060345AYBWAAGF
NY 153032E512219A9E BW YBWAAJ2 19940630170742S101702A035238AYBWAAJ2
NY 15769BEC05314EBA BW YBWAAJ2 19950921172723S101702A047654AYBWAAJ2
NY 153032E91F1F1E52 BW YBWAAJ8 19940630170744S101702A035238AYBWAAJ8
NY 1536D7310C0BC814 BW YBWAAJ8 19940811231714S101702A036260AYBWAAJ8
NY 15769BEC0CDAD2FC BW YBWAAJ8 19950921172725S101702A047654AYBWAAJ8
NY 153032EE08F705A6 BW YBWAAJ9 19940630170745S101702A035238AYBWAAJ9
NY 15769BEC14901608 BW YBWAAJ9 19950921172726S101702A047654AYBWAAJ9
NY 153032E317CD9C54 BW YBWAAJT 19940630170740S101702A035238AYBWAAJT
NY 15769BEA0C918E30 BW YBWAAJT 19950921172720S101702A047654AYBWAAJT
NY 1516E59F12C865DE BW YBWAE0H
NY 155017A01D39050E BW YBWAE3X 19950119153151S101702A041437AYBWAE3X
NY 15979A8F18623C0A BW YBWAE3X 19960418160311S101702A053532AYBWAE3X
NY 159AEDBB1049E920 BW YBWAE3X 19960509194859S101702A053995AYBWAE3X
NY 15A5E21D16F89B16 BW YBWAE3X 19960718124102S101702A056012AYBWAE3X
NY 15A6817902D78222 BW YBWAE3X 19960722114427S101702A056037AYBWAE3X
NY 15C01FBA0A72BD02 BW YBWAE3X 19970101115057S101702A060424AYBWAE3X
NN 1516E57012F552A4 BW YBWAELC
NY 155CF1350B725110 BW YBWAEW1 19950411095234S101702A043641AYBWAEW1
NY 159747811F1E9FA0 BW YBWAEW1 19960416143108S101702Z243792AYBWAEW1
NY 15976F3814F7499E BW YBWAEW1 19960417141232S101702A053473AYBWAEW1
NY 1597700603AB6250 BW YBWAEW1 19960417144123S101702A053473AYBWAEW1
NY 159AEDB910F31422 BW YBWAEW1 19960509194856S101702A053995AYBWAEW1
NY 15A5E21D193721F0 BW YBWAEW1 19960718124100S101702A056012AYBWAEW1
NY 15A68179001193D2 BW YBWAEW1 19960722114425S101702A056037AYBWAEW1
NY 15C01FB316DFC146 BW YBWAEW1 19970101115052S101702A060424AYBWAEW1
NY 15C285FD06034432 BW YBWAEW1 19970116181901S101702A060940AYBWAEW1
NY 14E5629B1F1F866E BW YBWAEW2
NY 15264E7F016424EC BW YBWAEW2 19940428182558S101702A033825AYBWAEW2
NY 159AEDBA1E955F56 BW YBWAEW2 19960509194857S101702A053995AYBWAEW2
NY 15C01FB91A932516 BW YBWAEW2 19970101115053S101702A060424AYBWAEW2
NY 14E5629F0B642836 BW YBWAEW6
NY 15264E6515A07DBA BW YBWAEW6 19940428182212S101702A033825AYBWAEW6
NY 159AEDBB02A632D0 BW YBWAEW6 19960509194857S101702A053995AYBWAEW6
NY 15C01FBA00CC09A0 BW YBWAEW6 19970101115054S101702A060424AYBWAEW6
NY 1550179903F4E224 BW YBWAEW9 19950119153157S101702A041437AYBWAEW9
NY 15979A8F07D8714A BW YBWAEW9 19960418160310S101702A053532AYBWAEW9
NY 159AEDBB0E0852FC BW YBWAEW9 19960509194858S101702A053995AYBWAEW9
NY 15A5E21C06FFD6FA BW YBWAEW9 19960718124101S101702A056012AYBWAEW9
NY 15A68179062805FA BW YBWAEW9 19960722114426S101702A056037AYBWAEW9
NY 15C01FBA07885BD4 BW YBWAEW9 19970101115056S101702A060424AYBWAEW9
NY 14E5628207E87EB4 BW YBWAEWG
NY 15264E7D1743FECA BW YBWAEWG 19940428182459S101702A033825AYBWAEWG
NY 15285AB30043DA0E BW YBWAEWG 19940511190624S101702A034204AYBWAEWG
NY 154869550BD27064 BW YBWAEWG 19941201183642S101702A040024AYBWAEWG
NY 159AEDC61C14E3D0 BW YBWAEWG 19960509194901S101702A053995AYBWAEWG
NY 15264E7402CCD4DA BW YBWAEWJ 19940428182507S101702A033825AYBWAEWJ
NY 15C01FB204A6F0BA BW YBWAEWJ 19970101115100S101702A060424AYBWAEWJ
NY 15CC6B541DF61FD8 BW YBWAEWJ 19970320173113S101702A062607AYBWAEWJ
NY 155017A00C33F4C4 BW YBWAEWL 19950119153152S101702A041437AYBWAEWL
NY 15979A9004882B82 BW YBWAEWL 19960418160303S101702A053532AYBWAEWL
NY 159AEDC509CE74BC BW YBWAEWL 19960509194902S101702A053995AYBWAEWL
NY 15A5E21D11DAD092 BW YBWAEWL 19960718124102S101702A056012AYBWAEWL
NY 15A681781DD12494 BW YBWAEWL 19960722114428S101702A056037AYBWAEWL
NY 15C01FB307AE7E58 BW YBWAEWL 19970101115101S101702A060424AYBWAEWL
NY 1550179F10DDCEF0 BW YBWAEWM 19950119153154S101702A041437AYBWAEWM
NY 15979A8F03A3DFDC BW YBWAEWM 19960418160307S101702A053532AYBWAEWM
NY 159AEDC5105C830E BW YBWAEWM 19960509194903S101702A053995AYBWAEWM
NY 15A5E21D1491CEE0 BW YBWAEWM 19960718124103S101702A056012AYBWAEWM
NY 15A681781B943B82 BW YBWAEWM 19960722114429S101702A056037AYBWAEWM
NY 15C01FB3142ED2E6 BW YBWAEWM 19970101115101S101702A060424AYBWAEWM
NY 14E562940BE19ABA BW YBWAEWN
NY 15264E720403AA7E BW YBWAEWN 19940428182543S101702A033825AYBWAEWN
NY 159AEDC50D42395C BW YBWAEWN 19960509194904S101702A053995AYBWAEWN
NY 15C01FB9140339D6 BW YBWAEWN 19970101115051S101702A060424AYBWAEWN
NY 1521B8FD15680B22 BW YBWAFI0 19940330142436S101702A032858AYBWAFI0
NY 155C2FF915283E98 BW YBWAFI0 19950406143555S101702A043513AYBWAFI0
NY 1598B1651EEB8A26 BW YBWAFI0 19960425142303S101702A053631AYBWAFI0
NY 15BF5914191E3E26 BW YBWAFI0 19961227132017S101702A060345AYBWAFI0
NY 1521B8F50DC19804 BW YBWAFI1 19940330142442S101702A032858AYBWAFI1
NY 1558E08C0887E942 BW YBWAFI1 19950316130445S101702A042903AYBWAFI1
NY 155C2FF91F11439A BW YBWAFI1 19950406143559S101702A043513AYBWAFI1
NY 1598B166063D52C8 BW YBWAFI1 19960425142304S101702A053631AYBWAFI1
NY 15BF59150CA67CE0 BW YBWAFI1 19961227132018S101702A060345AYBWAFI1
NY 1521B8FE0A17A64C BW YBWAFI2 19940330142450S101702A032858AYBWAFI2
NY 1598B1651BF11CE2 BW YBWAFI2 19960425142305S101702A053631AYBWAFI2
NY 15BF5913049FE184 BW YBWAFI2 19961227132018S101702A060345AYBWAFI2
NY 1521B8F61DAC2DC2 BW YBWAFIW 19940330142500S101702A032858AYBWAFIW
NY 1598B15B052AFE12 BW YBWAFIW 19960425142258S101702A053631AYBWAFIW
NY 15BF59141287EB16 BW YBWAFIW 19961227132013S101702A060345AYBWAFIW
NY 1521B8FE1F864D24 BW YBWAFIX 19940330142508S101702A032858AYBWAFIX
NY 1598B1641BD08E54 BW YBWAFIX 19960425142301S101702A053631AYBWAFIX
NY 15BF59161F9AD290 BW YBWAFIX 19961227132014S101702A060345AYBWAFIX
NY 1521B8FA1650FBA8 BW YBWAFIY 19940330142400S101702A032858AYBWAFIY
NY 1598B163133B9970 BW YBWAFIY 19960425142302S101702A053631AYBWAFIY
NY 15BF5914081F89C2 BW YBWAFIY 19961227132014S101702A060345AYBWAFIY
NY 1521B8FC087A0EF8 BW YBWAFIZ 19940330142416S101702A032858AYBWAFIZ
NY 1598B165105A5288 BW YBWAFIZ 19960425142302S101702A053631AYBWAFIZ
NY 15BF591708584444 BW YBWAFIZ 19961227132016S101702A060345AYBWAFIZ
NY 1511676B126756D6 BW YBWAH56
NY 151B2186118141C4 BW YBWAH56 19940216154927S101702A031665A
NY 1598B16602F6C07A BW YBWAH56 19960425142306S101702A053631AYBWAH56
NY 15AA4B58030FFDF6 BW YBWAH56 19960815141413S101702A056402AYBWAH56
NY 15BF5919053C23EE BW YBWAH56 19961227132029S101702A060345AYBWAH56
NY 14F6FEE40DDBF7D0 BW YBWAH57
NY 1598B16609D15584 BW YBWAH57 19960425142307S101702A053631AYBWAH57
NY 15BF591703F9FF84 BW YBWAH57 19961227132030S101702A060345AYBWAH57
NY 14E562FD03599EA6 BW YBWAHD4
NY 15264E7907D18426 BW YBWAHD4 19940428182421S101702A033825AYBWAHD4
NY 159AEDC61FBF7C90 BW YBWAHD4 19960509194900S101702A053995AYBWAHD4
NY 15C01FB91D5255E8 BW YBWAHD4 19970101115058S101702A060424AYBWAHD4
NY 14E563410BC15EDC BW YBWAO3W
NY 15264E7B164F3C72 BW YBWAO3W 19940428182442S101702A033825AYBWAO3W
NY 159AEDC61DFDA230 BW YBWAO3W 19960509194901S101702A053995AYBWAO3W
NY 15C01FB20734FB6C BW YBWAO3W 19970101115059S101702A060424AYBWAO3W
NY 1511678007403006 BW YBWAPVY
NY 151B21860905A464 BW YBWAPVY 19940216154930S101702A031665A
NY 1598B1660C022D8E BW YBWAPVY 19960425142311S101702A053631AYBWAPVY
NY 15AA4B571D5BBA10 BW YBWAPVY 19960815141415S101702A056402AYBWAPVY
NY 15BF591808145EDA BW YBWAPVY 19961227132031S101702A060345AYBWAPVY
NY 151167A918CC2004 BW YBWAPVZ
NY 151B218318AA6790 BW YBWAPVZ 19940216154932S101702A031665A
NY 1598B1670DBD0A2E BW YBWAPVZ 19960425142311S101702A053631AYBWAPVZ
NY 15AA4B581162478C BW YBWAPVZ 19960815141410S101702A056402AYBWAPVZ
NY 15BF591908E8C6B4 BW YBWAPVZ 19961227132032S101702A060345AYBWAPVZ
NY 151167B01D57144E BW YBWAXLQ
NY 151B21831318EFE2 BW YBWAXLQ 19940216154937S101702A031665A
NY 1598B167191D450E BW YBWAXLQ 19960425142313S101702A053631AYBWAXLQ
NY 15AA4B580AE003AE BW YBWAXLQ 19960815141411S101702A056402AYBWAXLQ
NY 15BF591F16BCCFC8 BW YBWAXLQ 19961227132033S101702A060345AYBWAXLQ
NN 14DDB433139A8DCC BX BX0330
NN 1524171A15C1F372 BX BX0330 19940414155938S101702A033405ABX0330
NN 15A938F0027489B2 BX BX0330 19960808183517S101702A056200ABX0330
NN 15E030ED03C2ED60 BX BX5100 19970724125214S101702A065494ABX5100
NN 14EAE56D0E216AAC BX BX5200
NN 154A9D950574CA9A BX BX5200 19941215191359S101702A040134ABX5200
NN 15B0E7CC19E4F582 BX BX5200 19960926155311S101702A057383ABX5200
NN 15DF17CE10E3F8E8 BX BX6400 19970717131027S101702A065289ABX6400
NN 1543FD0E0F7E84A6 BX BX6410 19941103151044S101702A038911ABX6410
NN 15B0E7D20E740CF8 BX BX6410 19960926155312S101702A057383ABX6410
NN 15BCFDB81BE1E830 BX BX6410 19961212132749S101702A059703ABX6410
NN 15A8E25E05D16382 BX BX6500 19960806145757S101702Z260717ABX6500
NN 15AFCB4B05BD16DE BX BX6500 19960919140931S101702A057271ABX6500
NN 15BCFDB30A119D48 BX BX6500 19961212132750S101702A059703ABX6500
NN 15AB6A8E1828D382 BX BX6550 19960822173742S101702Z262853ABX6550
NN 15AFCB4C074093F0 BX BX6550 19960919140932S101702A057273ABX6550
NN 15BCFDC10B7D7C14 BX BX6550 19961212132745S101702A059703ABX6550
NN 15AC0710003145C8 BX BX6560 19960826145905S101702Z263181ABX6560
NN 15AFCB4C03BF4D84 BX BX6560 19960919140932S101702A057273ABX6560
NN 15BCFDC31FB936F2 BX BX6560 19961212132746S101702A059703ABX6560
NN 15AEAB4215CC4452 BX BX6570 19960912102108S101702Z265961ABX6570
NN 15AFCB4C04085138 BX BX6570 19960919140933S101702A057273ABX6570
NN 15BCFDC311D7C1C4 BX BX6570 19961212132746S101702A059703ABX6570
NN 15EB32C617030990 BX BX6700 19971002134658S101702A067077ABX6700
NN 1611B0D41D5CB5AE BX BX6700 19980604135634S101702A072837ABX6700
NN 15D3F46103C1645C BX BX6750 19970507161423S101702Z310325ABX6750
NN 15D7638C0B0BA518 BX BX6750 19970529124001S101702A064140ABX6750
NN 1611B0D3162F8C6E BX BX6750 19980604135635S101702A072837ABX6750
NN 15486934015A2970 BX BX7150 19941201183328S101702A039829ABX7150
NN 15609512113BC514 BX BX7150 19950504S101702A044162ABX7150
NN 15B0E7CC1F685528 BX BX7150 19960926155302S101702A057383ABX7150
NN 14EB001A1851033E BX BX7200
NN 14EAFFFB1A72D1FA BX BX7400
NN 14EB000B1CEB7EE0 BX BX7410
NN 150665481D304842 BX BX7620
NN 153F94601E5A8978 BX BX7620 19941006135422S101702A037791ABX7620
NN 15B0E7CE03D083CC BX BX7620 19960926155305S101702A057383ABX7620
NN 14C8C88F1232C564 BX BX7900
NN 15EB32D00CA588A2 BX BX8000 19971002134658S101702A067077ABX8000
NN 16173BB6085000B0 BX BX8000 19980709201829S101702A073668ABX8000
NN 1617503911A3AAAD BX BX8000 19980710083334S101702A073668ABX8000
NN 156B92E51CDFF42C BX BX8100 19950713S101702Z199809ABX8100
NN 156B93B41230F73A BX BX8100 19950713S101702Z199813ABX8100
NN 15B0E7D1090EA204 BX BX8100 19960926155310S101702A057383ABX8100
NN 15BCFDB90A440BF0 BX BX8110 19961212132748S101702A059703ABX8110
NN 1611B0D51958A307 BX BX8110 19980604135636S101702A072837ABX8110
NY 17E449311286AF10 BX BX8280 CLOS000125
NN 153F9DD401823670 BX YBX0121 19941006193229S101702A037591AYBX0121
NN 155D26370DF7E3B4 BX YBX0121 19950412S101702A043533AYBX0121
NN 157D3328100B4204 BX YBX0121 19951102S101702A048803AYBX0121
NN 1596811916897804 BX YBX0121 19960411160906S101702A053228AYBX0121
NN 159682C60968F844 BX YBX0121 19960411170949S101702A053228AYBX0121
NN 15A938CA1F752144 BX YBX0121 19960808183126S101702A056200AYBX0121
NN 15B2001C089B4AAC BX YBX0121 19961003150558S101702A057489AYBX0121
NN 15B20298016DEE2C BX YBX0121 19961003163437S101702A057489AYBX0121
NN 15BD048619B26D8C BX YBX0121 19961212173258S101702A059679AYBX0121
NN 15CFB33D0A70748C BX YBX0121 19970410143059S101702A063036AYBX0121
NN 15D8853008179396 BX YBX0121 19970605172720S101702A064221AYBX0121
NN 15DCE9521D0702E4 BX YBX0121 19970703160016S101702A064922AYBX0121
NN 15DF17F107130182 BX YBX0121 19970717131555S101702A065362AYBX0121
NN 15DF18610ECD5B8C BX YBX0121 19970717133108S101702A065362AYBX0121
NN 15EF9948056B3B58 BX YBX0121 19971030134551S101702A067836AYBX0121
NN 1517FBEA1EB63092 BX YBX0311
NN 151B47C60BD65A5E BX YBX0311 19940217143350S101702A031502A
NN 153264DD01428E8A BX YBX0311 19940714161915S101702A034979AYBX0311
NN 1535ADFE06D1EBB8 BX YBX0311 19940804140337S101702A036030AYBX0311
NN 153F9DD204C38F38 BX YBX0311 19941006193204S101702A037591AYBX0311
NN 1540AEA40F98C7D2 BX YBX0311 19941013141432S101702A038234AYBX0311
NN 155D263E1A28B2F2 BX YBX0311 19950412S101702A043533AYBX0311
NN 155E1710155D711E BX YBX0311 19950418S101702Z185893AYBX0311
NN 155E80A60D44FFA0 BX YBX0311 19950421S101702Z186279AYBX0311
NN 15609509084E36C4 BX YBX0311 19950504S101702A044162AYBX0311
NN 1560C001172F0450 BX YBX0311 19950505S101702Z188373AYBX0311
NN 15617FC50D017534 BX YBX0311 19950510S101702Z189043AYBX0311
NN 1561B0C71A8B2706 BX YBX0311 19950511S101702A044343AYBX0311
NN 157D332D0550BDB2 BX YBX0311 19951102S101702A048803AYBX0311
NN 15941BBC05159502 BX YBX0311 19960327101616S101702Z240638AYBX0311
NN 159681200895446C BX YBX0311 19960411160908S101702A053228AYBX0311
NN 159682CC1D267992 BX YBX0311 19960411170950S101702A053228AYBX0311
NN 15971ECB1DA3822C BX YBX0311 19960415141359S101702Z243570AYBX0311
NN 159722F91585F2FE BX YBX0311 19960415164333S101702Z243618AYBX0311
NN 1597252E09386C10 BX YBX0311 19960415180232S101702Z243633AYBX0311
NN 15972745155833D2 BX YBX0311 19960415191722S101702Z243644AYBX0311
NN 159748B81003BA9E BX YBX0311 19960416151429S101702Z243806AYBX0311
NN 15976D991D7CDA82 BX YBX0311 19960417131431S101702Z244080AYBX0311
NN 1597903017420BBE BX YBX0311 19960418095238S101702Z244223AYBX0311
NN 159831BA0D5EE4DC BX YBX0311 19960422101406S101702Z244648AYBX0311
NN 1598332E1C29CC10 BX YBX0311 19960422110638S101702Z244671AYBX0311
NN 1599CBB81AE369D0 BX YBX0311 19960502144753S101702A053763AYBX0311
NN 15A1335E1F997436 BX YBX0311 19960618173627S101702Z253574AYBX0311
NN 15A179A51E86CDC2 BX YBX0311 19960620113120S101702Z253964AYBX0311
NN 15A3B56317BBB064 BX YBX0311 19960704163425S101702A055219AYBX0311
NN 15A4CA4A0322036E BX YBX0311 19960711134555S101702A055749AYBX0311
NN 15A7C1460378D528 BX YBX0311 19960730103037S101702Z259993AYBX0311
NN 15A7C6CC1C6A438A BX YBX0311 19960730134827S101702Z259993AYBX0311
NN 15A938CD172EC0B0 BX YBX0311 19960808183112S101702A056200AYBX0311
NN 15B200200B80CF70 BX YBX0311 19961003150552S101702A057489AYBX0311
NN 15B2029D0C7CFC30 BX YBX0311 19961003163431S101702A057489AYBX0311
NN 15B2EF2A1ED07B58 BX YBX0311 19961009134202S101702Z269958AYBX0311
NN 15B54BB705E80C82 BX YBX0311 19961024141922S101702A057873AYBX0311
NN 15BD048D164A21A0 BX YBX0311 19961212173254S101702A059679AYBX0311
NN 15CFB346118B6B8C BX YBX0311 19970410143100S101702A063036AYBX0311
NN 15D0CBB917158A90 BX YBX0311 19970417134902S101702A063207AYBX0311
NN 15D0CCBB06F0E2EA BX YBX0311 19970417142628S101702A063207AYBX0311
NN 15D8853D1F056A3A BX YBX0311 19970605172721S101702A064221AYBX0311
NN 15DCE95D18BB4012 BX YBX0311 19970703160008S101702A064922AYBX0311
NN 15DE1C6210BDD89C BX YBX0311 19970711071158S101702Z320845AYBX0311
NN 15DF180005AF0A52 BX YBX0311 19970717131546S101702A065362AYBX0311
NN 15DF185A1F941BE4 BX YBX0311 19970717133054S101702A065362AYBX0311
NN 15E002C71642A4E4 BX YBX0311 19970723092030S101702Z323871AYBX0311
NN 15E030DC18E09A2C BX YBX0311 19970724124832S101702A065494AYBX0311
NN 15E6CB4016FAA2EC BX YBX0311 19970904130822S101702A066492AYBX0311
NN 15E6CE9801253748 BX YBX0311 19970904151111S101702A066492AYBX0311
NN 1517FBD607FD5CC8 BX YBX0312
NN 153264EE08043EBE BX YBX0312 19940714161917S101702A034979AYBX0312
NN 153F9DD108F4D7C4 BX YBX0312 19941006193205S101702A037591AYBX0312
NN 1540AEA618EB03C6 BX YBX0312 19941013141433S101702A038234AYBX0312
NN 155D263E150A5D2C BX YBX0312 19950412S101702A043533AYBX0312
NN 155E622604D35082 BX YBX0312 19950420S101702A043759AYBX0312
NN 157D332B0A0B7E30 BX YBX0312 19951102S101702A048803AYBX0312
NN 15941BBB0BF5B9D6 BX YBX0312 19960327101618S101702Z240638AYBX0312
NN 1596811F09BF9F52 BX YBX0312 19960411160910S101702A053228AYBX0312
NN 159682CB0B2DF134 BX YBX0312 19960411170951S101702A053228AYBX0312
NN 1599CBBC015EEAE0 BX YBX0312 19960502144754S101702A053763AYBX0312
NN 15A179A51B20272C BX YBX0312 19960620113121S101702Z253964AYBX0312
NN 15A3B5630AF705BA BX YBX0312 19960704163425S101702A055219AYBX0312
NN 15A4CA510C99DEFE BX YBX0312 19960711134559S101702A055749AYBX0312
NN 15A7C1451DC36FD8 BX YBX0312 19960730103038S101702Z259993AYBX0312
NN 15A7C6CC16A54468 BX YBX0312 19960730134828S101702Z259993AYBX0312
NN 15A938D01CEA5422 BX YBX0312 19960808183113S101702A056200AYBX0312
NN 15B2001F0F5C32C2 BX YBX0312 19961003150554S101702A057489AYBX0312
NN 15B2029D033D3538 BX YBX0312 19961003163432S101702A057489AYBX0312
NN 15C28557101E932E BX YBX0312 19970116175259S101702A060891AYBX0312
NN 15CFB33B0B681EE6 BX YBX0312 19970410143101S101702A063036AYBX0312
NN 15D0CBB81D354FFA BX YBX0312 19970417134903S101702A063207AYBX0312
NN 15D0CCBD1491C23A BX YBX0312 19970417142629S101702A063207AYBX0312
NN 15D8853D064FD986 BX YBX0312 19970605172722S101702A064221AYBX0312
NN 15D9983E03755D82 BX YBX0312 19970612132948S101702A064570AYBX0312
NN 15DCE95A1C555F2A BX YBX0312 19970703160008S101702A064922AYBX0312
NN 15DDA34A1971DA6E BX YBX0312 19970708065743S101702Z320108AYBX0312
NN 15DDFE000D06E702 BX YBX0312 19970710130348S101702A065203AYBX0312
NN 15DF17FF01855A46 BX YBX0312 19970717131547S101702A065362AYBX0312
NN 15DF185C07C25A74 BX YBX0312 19970717133055S101702A065362AYBX0312
NN 15E002C71946719A BX YBX0312 19970723092031S101702Z323871AYBX0312
NN 15E030D51FF9926A BX YBX0312 19970724124835S101702A065494AYBX0312
NN 1516E62916E6DCBC BX YBX0313
NN 153264EC18C3BC18 BX YBX0313 19940714161918S101702A034979AYBX0313
NN 153F9DCF12275A92 BX YBX0313 19941006193206S101702A037591AYBX0313
NN 1540AEA70B5A92B4 BX YBX0313 19941013141434S101702A038234AYBX0313
NN 155D263D1BB91C1E BX YBX0313 19950412S101702A043533AYBX0313
NN 157D33291FDAFD5C BX YBX0313 19951102S101702A048803AYBX0313
NN 1582314E009C9376 BX YBX0313 19951204S101702Z222592AYBX0313
NN 1582B64D0AF8ABF8 BX YBX0313 19951207S101702A050132AYBX0313
NN 15941BBB02F08FC2 BX YBX0313 19960327101619S101702Z240638AYBX0313
NN 1596811E13F50B5C BX YBX0313 19960411160913S101702A053228AYBX0313
NN 159682CB0D6E49BE BX YBX0313 19960411170951S101702A053228AYBX0313
NN 15A4CA4F184F10C2 BX YBX0313 19960711134603S101702A055749AYBX0313
NN 15A7C1450E3FF328 BX YBX0313 19960730103039S101702Z259993AYBX0313
NN 15A7C6CC0CAD717A BX YBX0313 19960730134829S101702Z259993AYBX0313
NN 15A938CC16BE299E BX YBX0313 19960808183114S101702A056200AYBX0313
NN 15B2001F0323D070 BX YBX0313 19961003150554S101702A057489AYBX0313
NN 15B2029C1292CB4A BX YBX0313 19961003163433S101702A057489AYBX0313
NN 15CFB34314D5BFF0 BX YBX0313 19970410143102S101702A063036AYBX0313
NN 15D0CBB70926EE64 BX YBX0313 19970417134905S101702A063207AYBX0313
NN 15D0CCBC1F143758 BX YBX0313 19970417142630S101702A063207AYBX0313
NN 15D8853C122DD322 BX YBX0313 19970605172723S101702A064221AYBX0313
NN 15DCE95B0CCF5F5A BX YBX0313 19970703160009S101702A064922AYBX0313
NN 15DF17FD0DC03A52 BX YBX0313 19970717131547S101702A065362AYBX0313
NN 15DF185B19886000 BX YBX0313 19970717133056S101702A065362AYBX0313
NN 15E002C711B32726 BX YBX0313 19970723092031S101702Z323871AYBX0313
NN 15E030DB1C9062E2 BX YBX0313 19970724124837S101702A065494AYBX0313
NN 15EB32B410F0C588 BX YBX0313 19971002134434S101702A067077AYBX0313
NN 160F56EE071F7EDA BX YBX0313 19980520145159S101702A072692AYBX0313
NN 15B2002000B550CE BX YBX0320 19961003150555S101702A057489AYBX0320
NN 15B2029D0345B242 BX YBX0320 19961003163434S101702A057489AYBX0320
NN 15C285560E4FEF82 BX YBX0320 19970116175300S101702A060891AYBX0320
NN 15CFB35107DA49EC BX YBX0320 19970410143103S101702A063036AYBX0320
NN 15D8853800DAC4EA BX YBX0320 19970605172724S101702A064221AYBX0320
NN 15DCE95D0B47FDE2 BX YBX0320 19970703160010S101702A064922AYBX0320
NN 15DDA4B911D2643C BX YBX0320 19970708074923S101702Z320111AYBX0320
NN 15DDA6051ECDC0F6 BX YBX0320 19970708083532S101702Z320122AYBX0320
NN 15DDA6A517E6EA46 BX YBX0320 19970708085756S101702Z320122AYBX0320
NN 15DDA77B0568987A BX YBX0320 19970708092727S101702Z320133AYBX0320
NN 15DDFE071D0A49CE BX YBX0320 19970710130345S101702A065203AYBX0320
NN 15DF17FF112F1BE0 BX YBX0320 19970717131548S101702A065362AYBX0320
NN 15DF185B0C43B52F BX YBX0320 19970717133057S101702A065362AYBX0320
NN 15E002CF0F2B1003 BX YBX0320 19970723092127S101702Z323872AYBX0320
NN 15E030D601AD678C BX YBX0320 19970724124839S101702A065494AYBX0320
NN 1516E62C137D5C3A BX YBX0321
NN 153264EC0AA30052 BX YBX0321 19940714161919S101702A034979AYBX0321
NN 153F9DD01CA9EE92 BX YBX0321 19941006193207S101702A037591AYBX0321
NN 1540AEA716201D84 BX YBX0321 19941013141435S101702A038234AYBX0321
NN 155D263E1244FDDC BX YBX0321 19950412S101702A043533AYBX0321
NN 157D332A085A6C04 BX YBX0321 19951102S101702A048803AYBX0321
NN 1594229317A53EF6 BX YBX0321 19960327142142S101702Z240756AYBX0321
NN 1596811E0DE1D5D2 BX YBX0321 19960411160914S101702A053228AYBX0321
NN 159682CB04B3976A BX YBX0321 19960411170952S101702A053228AYBX0321
NN 1596CD6A1F32CB0C BX YBX0321 19960413134150S101702Z243379AYBX0321
NN 1596D2641F8A642E BX YBX0321 19960413163905S101702Z243384AYBX0321
NN 1599CBC411156162 BX YBX0321 19960502144748S101702A053763AYBX0321
NN 15A0662C05DCE642 BX YBX0321 19960613151234S101702A054925AYBX0321
NN 15A080C10A9A4BAC BX YBX0321 19960614070338S101702Z252740AYBX0321
NN 15A0811E1115DF82 BX YBX0321 19960614071636S101702Z252742AYBX0321
NN 15A3B55F01EC0ED2 BX YBX0321 19960704163427S101702A055219AYBX0321
NN 15A4CA480F1C4FF0 BX YBX0321 19960711134539S101702A055749AYBX0321
NN 15A7C1A2045F6494 BX YBX0321 19960730104336S101702Z259999AYBX0321
NN 15A7C6F10DBAC6B4 BX YBX0321 19960730135345S101702Z260055AYBX0321
NN 15AA50F2045D52C4 BX YBX0321 19960815173129S101702A056350AYBX0321
NN 15B2001B1AD70544 BX YBX0321 19961003150555S101702A057489AYBX0321
NN 15B2029A154E50C2 BX YBX0321 19961003163434S101702A057489AYBX0321
NN 15CFB3450ED969AC BX YBX0321 19970410143104S101702A063036AYBX0321
NN 15D0CBB80FAD6102 BX YBX0321 19970417134905S101702A063207AYBX0321
NN 15D0CCBA04FF6F9C BX YBX0321 19970417142631S101702A063207AYBX0321
NN 15D885321E817402 BX YBX0321 19970605172725S101702A064221AYBX0321
NN 15DCE95B0404DD6C BX YBX0321 19970703160011S101702A064922AYBX0321
NN 15DDA4B911C4600E BX YBX0321 19970708074924S101702Z320111AYBX0321
NN 15DDA6040C4E5E70 BX YBX0321 19970708083532S101702Z320122AYBX0321
NN 15DDA6A512ADDB70 BX YBX0321 19970708085757S101702Z320122AYBX0321
NN 15DDA77B023A932A BX YBX0321 19970708092728S101702Z320133AYBX0321
NN 15DDFE0713FD52F0 BX YBX0321 19970710130346S101702A065203AYBX0321
NN 15DF17F6166F71AF BX YBX0321 19970717131549S101702A065362AYBX0321
NN 15DF185B1E67D71A BX YBX0321 19970717133058S101702A065362AYBX0321
NN 15E002CE0290DF54 BX YBX0321 19970723092128S101702Z323872AYBX0321
NN 15E030D7095E96AF BX YBX0321 19970724124827S101702A065494AYBX0321
NN 1516E64C0425C854 BX YBX0322
NN 153264ED162856B6 BX YBX0322 19940714161906S101702A034979AYBX0322
NN 153F9DD21A270844 BX YBX0322 19941006193208S101702A037591AYBX0322
NN 1540AEA40F3B6112 BX YBX0322 19941013141416S101702A038234AYBX0322
NN 155D263F0256AA00 BX YBX0322 19950412S101702A043533AYBX0322
NN 155E622604C3A1C6 BX YBX0322 19950420S101702A043759AYBX0322
NN 157D332B13FE5C94 BX YBX0322 19951102S101702A048803AYBX0322
NN 1594226F03985B38 BX YBX0322 19960327141624S101702Z240750AYBX0322
NN 1596811F044C267E BX YBX0322 19960411160917S101702A053228AYBX0322
NN 159682C916255372 BX YBX0322 19960411170953S101702A053228AYBX0322
NN 1596CD6B0BF18AE4 BX YBX0322 19960413134151S101702Z243379AYBX0322
NN 1599CBC41E4A5392 BX YBX0322 19960502144750S101702A053763AYBX0322
NN 15A0662E03528420 BX YBX0322 19960613151235S101702A054925AYBX0322
NN 15A080C10701BF28 BX YBX0322 19960614070339S101702Z252740AYBX0322
NN 15A0811119DA5484 BX YBX0322 19960614071450S101702Z252741AYBX0322
NN 15A3B5650251D4C0 BX YBX0322 19960704163429S101702A055219AYBX0322
NN 15A4CA4811445A0E BX YBX0322 19960711134542S101702A055749AYBX0322
NN 15A7C1A208FF7610 BX YBX0322 19960730104336S101702Z259999AYBX0322
NN 15A7C6E106F235C2 BX YBX0322 19960730135122S101702Z260054AYBX0322
NN 15A938D019271ACC BX YBX0322 19960808183124S101702A056200AYBX0322
NN 1516E6481F5112F8 BX YBX0323
NN 153264EB1CB75F7E BX YBX0323 19940714161908S101702A034979AYBX0323
NN 153F9DD00CED9794 BX YBX0323 19941006193209S101702A037591AYBX0323
NN 1540AE9D08925546 BX YBX0323 19941013141420S101702A038234AYBX0323
NN 155D263D13F05A5C BX YBX0323 19950412S101702A043533AYBX0323
NN 157D332A063DC782 BX YBX0323 19951102S101702A048803AYBX0323
NN 159422991D21EB22 BX YBX0323 19960327142214S101702Z240758AYBX0323
NN 1596811C1BFEA9A8 BX YBX0323 19960411160918S101702A053228AYBX0323
NN 159682CA10363E50 BX YBX0323 19960411170953S101702A053228AYBX0323
NN 1596CD6A1B0448C6 BX YBX0323 19960413134151S101702Z243379AYBX0323
NN 1599CBBA1BEBF8CA BX YBX0323 19960502144751S101702A053763AYBX0323
NN 15A0662C06291CC2 BX YBX0323 19960613151236S101702A054925AYBX0323
NN 15A080C214C15398 BX YBX0323 19960614070339S101702Z252740AYBX0323
NN 15A0811E111DEFF2 BX YBX0323 19960614071637S101702Z252742AYBX0323
NN 15A3B5621E047D64 BX YBX0323 19960704163416S101702A055219AYBX0323
NN 15A4CA491DD17A24 BX YBX0323 19960711134551S101702A055749AYBX0323
NN 15A7C1A2007B8B2C BX YBX0323 19960730104336S101702Z259999AYBX0323
NN 15A7C6F10B10C57A BX YBX0323 19960730135346S101702Z260055AYBX0323
NN 15AA50D313BAACC8 BX YBX0323 19960815173146S101702A056350AYBX0323
NN 15B2001C0BCBC75E BX YBX0323 19961003150556S101702A057489AYBX0323
NN 15B202990AE69FD4 BX YBX0323 19961003163435S101702A057489AYBX0323
NN 15CFB33A0A9B41A8 BX YBX0323 19970410143107S101702A063036AYBX0323
NN 15D88538130A01B6 BX YBX0323 19970605172726S101702A064221AYBX0323
NN 15DCE94C10359FEE BX YBX0323 19970703160012S101702A064922AYBX0323
NN 15DF17F51C4D0118 BX YBX0323 19970717131550S101702A065362AYBX0323
NN 15DF186409B3ACAC BX YBX0323 19970717133101S101702A065362AYBX0323
NN 15E002CD1DA6D38E BX YBX0323 19970723092129S101702Z323872AYBX0323
NN 15E030DB0890851C BX YBX0323 19970724124829S101702A065494AYBX0323
NN 15EB32B4148D7FCF BX YBX0323 19971002134435S101702A067077AYBX0323
NN 160F56EA11499522 BX YBX0323 19980520145201S101702A072692AYBX0323
NN 1524170C0EFD27C2 BX YBX0341 19940414155510S101702A033405AYBX0341
NN 1527643A1C7926E6 BX YBX0341 19940505160752S101702A033611AYBX0341
NN 153F9DD504C0AC28 BX YBX0341 19941006193211S101702A037591AYBX0341
NN 155D263D15F90954 BX YBX0341 19950412S101702A043533AYBX0341
NN 155FA55E0D51C342 BX YBX0341 19950428S101702Z187241AYBX0341
NN 15609508105B9CF8 BX YBX0341 19950504S101702A044162AYBX0341
NN 15A938D0146A0122 BX YBX0341 19960808183116S101702A056200AYBX0341
NN 152416F61F5DDD16 BX YBX0342 19940414155516S101702A033405AYBX0342
NN 1527643A1702559A BX YBX0342 19940505160753S101702A033611AYBX0342
NN 153F9DD306D678DE BX YBX0342 19941006193213S101702A037591AYBX0342
NN 155D263D108760DC BX YBX0342 19950412S101702A043533AYBX0342
NN 15A938CC00667982 BX YBX0342 19960808183116S101702A056200AYBX0342
NN 152417031461C6F2 BX YBX0343 19940414155517S101702A033405AYBX0343
NN 153F9DD10CA45788 BX YBX0343 19941006193214S101702A037591AYBX0343
NN 155D263C149C5570 BX YBX0343 19950412S101702A043533AYBX0343
NN 15A938CC1579D790 BX YBX0343 19960808183117S101702A056200AYBX0343
NN 1516E6321D4DD2A8 BX YBX0361
NN 153F9DD40F45E0FE BX YBX0361 19941006193216S101702A037591AYBX0361
NN 155D263D1C5CD71E BX YBX0361 19950412S101702A043533AYBX0361
NN 157D332817D7CE46 BX YBX0361 19951102S101702A048803AYBX0361
NN 1596811C0257426A BX YBX0361 19960411160919S101702A053228AYBX0361
NN 159682C71D836602 BX YBX0361 19960411170954S101702A053228AYBX0361
NN 15A1786F08528712 BX YBX0361 19960620104731S101702Z253936AYBX0361
NN 15A3B55E1F0385B0 BX YBX0361 19960704163417S101702A055219AYBX0361
NN 15A938CE14708904 BX YBX0361 19960808183119S101702A056200AYBX0361
NN 1515CC090B9D52AC BX YBX0362
NN 153F9DD0057E2130 BX YBX0362 19941006193218S101702A037591AYBX0362
NN 155D263C1DA479CE BX YBX0362 19950412S101702A043533AYBX0362
NN 157D332819D4E5DE BX YBX0362 19951102S101702A048803AYBX0362
NN 1596811814BBA5A6 BX YBX0362 19960411160920S101702A053228AYBX0362
NN 159682C910E9890A BX YBX0362 19960411170954S101702A053228AYBX0362
NN 15A1786F07B82056 BX YBX0362 19960620104732S101702Z253936AYBX0362
NN 15A3B562165676B2 BX YBX0362 19960704163419S101702A055219AYBX0362
NN 15A938D0009B6514 BX YBX0362 19960808183120S101702A056200AYBX0362
NN 1515CC08163BC306 BX YBX0363
NN 153F9DD017F9257E BX YBX0363 19941006193219S101702A037591AYBX0363
NN 155D263E009C9196 BX YBX0363 19950412S101702A043533AYBX0363
NN 157D33231CD9725A BX YBX0363 19951102S101702A048803AYBX0363
NN 1596811B0926CAE6 BX YBX0363 19960411160921S101702A053228AYBX0363
NN 159682C90FA3739A BX YBX0363 19960411170955S101702A053228AYBX0363
NN 15A1786F07ADAD66 BX YBX0363 19960620104733S101702Z253936AYBX0363
NN 15A3B55E1EDCD382 BX YBX0363 19960704163424S101702A055219AYBX0363
NN 15A938CE11DBCD08 BX YBX0363 19960808183121S101702A056200AYBX0363
NN 1516E63609520A58 BX YBX0381
NN 153264EC014C1AD0 BX YBX0381 19940714161912S101702A034979AYBX0381
NN 153F9DD510104A74 BX YBX0381 19941006193220S101702A037591AYBX0381
NN 1540AE9D05DBC006 BX YBX0381 19941013141427S101702A038234AYBX0381
NN 155D263F06EDF958 BX YBX0381 19950412S101702A043533AYBX0381
NN 157D332B0E36B73A BX YBX0381 19951102S101702A048803AYBX0381
NN 15941D1A1D252970 BX YBX0381 19960327110524S101702Z240662AYBX0381
NN 1596811F08577916 BX YBX0381 19960411160922S101702A053228AYBX0381
NN 159682CB0E6350B6 BX YBX0381 19960411170955S101702A053228AYBX0381
NN 15A938D000ABCED8 BX YBX0381 19960808183121S101702A056200AYBX0381
NN 15CFB33A1E6D8108 BX YBX0381 19970410143108S101702A063036AYBX0381
NN 15D8853A1C0E90A4 BX YBX0381 19970605172728S101702A064221AYBX0381
NN 15DCE95B04C616B4 BX YBX0381 19970703160012S101702A064922AYBX0381
NN 15DF17F41751D58E BX YBX0381 19970717131551S101702A065362AYBX0381
NN 15DF1862019374D8 BX YBX0381 19970717133103S101702A065362AYBX0381
NN 1516E6440D80E304 BX YBX0382
NN 151B47D002F8C64A BX YBX0382 19940217143416S101702A031502A
NN 151FAFB2178CABE6 BX YBX0382 19940317152239S101702A032458AYBX0382
NN 153264D21FC2586C BX YBX0382 19940714161913S101702A034979AYBX0382
NN 153F9DD5190A965C BX YBX0382 19941006193223S101702A037591AYBX0382
NN 1540AE9D0FE4A544 BX YBX0382 19941013141428S101702A038234AYBX0382
NN 155D263F0C849DE0 BX YBX0382 19950412S101702A043533AYBX0382
NN 155E6224079BF6F8 BX YBX0382 19950420S101702A043759AYBX0382
NN 157D332B1B1D0434 BX YBX0382 19951102S101702A048803AYBX0382
NN 15941D1A1C21EDD8 BX YBX0382 19960327110525S101702Z240662AYBX0382
NN 1596811E1D9F7546 BX YBX0382 19960411160923S101702A053228AYBX0382
NN 159682C91FBEB76E BX YBX0382 19960411170956S101702A053228AYBX0382
NN 1599CBB7047028D8 BX YBX0382 19960502144752S101702A053763AYBX0382
NN 15A938D00AFBECBE BX YBX0382 19960808183122S101702A056200AYBX0382
NN 15B2001F1BFA00D6 BX YBX0382 19961003150556S101702A057489AYBX0382
NN 15B2029C05524AC2 BX YBX0382 19961003163435S101702A057489AYBX0382
NN 15C28556133EC9B8 BX YBX0382 19970116175301S101702A060891AYBX0382
NN 15CFB3450E9DAF24 BX YBX0382 19970410143109S101702A063036AYBX0382
NN 15D8853C1B6DF5B6 BX YBX0382 19970605172730S101702A064221AYBX0382
NN 15DCE94E1744EEAC BX YBX0382 19970703160012S101702A064922AYBX0382
NN 15DF17F50CF6D250 BX YBX0382 19970717131552S101702A065362AYBX0382
NN 15DF18641CBF3C6A BX YBX0382 19970717133104S101702A065362AYBX0382
NN 1516E65801A2C496 BX YBX0383
NN 153264EA03C2BE8C BX YBX0383 19940714161914S101702A034979AYBX0383
NN 153F9DD5098442D2 BX YBX0383 19941006193225S101702A037591AYBX0383
NN 1540AE9C12F0F080 BX YBX0383 19941013141431S101702A038234AYBX0383
NN 155D263B02222BD6 BX YBX0383 19950412S101702A043533AYBX0383
NN 157D33261FE0BCEC BX YBX0383 19951102S101702A048803AYBX0383
NN 15941D1A084E4444 BX YBX0383 19960327110526S101702Z240662AYBX0383
NN 1596811C0CBC01B2 BX YBX0383 19960411160927S101702A053228AYBX0383
NN 159682C50C3D2D6A BX YBX0383 19960411170956S101702A053228AYBX0383
NN 15A938CF0E5EA55C BX YBX0383 19960808183123S101702A056200AYBX0383
NN 15CFB34B19BCF5C2 BX YBX0383 19970410143110S101702A063036AYBX0383
NN 15D8853905F17870 BX YBX0383 19970605172732S101702A064221AYBX0383
NN 15DCE94C13ACAC67 BX YBX0383 19970703160013S101702A064922AYBX0383
NN 15DF17F31C504EAE BX YBX0383 19970717131553S101702A065362AYBX0383
NN 15DF18630EA3E700 BX YBX0383 19970717133105S101702A065362AYBX0383
NN 15EB32B80159F40A BX YBX0383 19971002134435S101702A067077AYBX0383
NY 17DA15530B435F0E BX YBXADBR CLOS000090573B1F04
NY 180548BF0E099B59 BX YBXADBR CLOS00014958A5761B
NY 1819DE9518757CCC BX YBXADBR CLOS0001705952328DMVS
NY 18207C8E03B40E04 BX YBXADBR CLOS0001805989B493MVS
NY 183301791923BC7D BX YBXADBR CLOS0001835A25007A
NY 1833017D0F9CD871 BX YBXADBR CLOS0001835A25007AMVS
NN 1515CC1B1AA08BAC BX YBXBI01
NN 152442BE014C38E6 BX YBXBI01 19940415175222S101702A033466AYBXBI01
NN 152497B30A4C17CA BX YBXBI01 19940417194441S101702A033466AYBXBI01
NN 152764351069AADE BX YBXBI01 19940505160733S101702A033572AYBXBI01
NN 152856A412790D32 BX YBXBI01 19940511164541S101702A034201AYBXBI01
NN 152996220CA98AFA BX YBXBI01 19940519151914S101702A034386AYBXBI01
NN 153266DA1B805386 BX YBXBI01 19940714172642S101702A035771AYBXBI01
NN 153F9DD60B8A0A02 BX YBXBI01 19941006193210S101702A037591AYBXBI01
NN 155D263C097BBD46 BX YBXBI01 19950412S101702A043533AYBXBI01
NN 157D332E09B660B6 BX YBXBI01 19951102S101702A048803AYBXBI01
NN 1596812016DBA0C8 BX YBXBI01 19960411160928S101702A053228AYBXBI01
NN 159682CC01CDCC68 BX YBXBI01 19960411170957S101702A053228AYBXBI01
NN 1599CBBB03D51896 BX YBXBI01 19960502144752S101702A053763AYBXBI01
NN 159F500F07FA42C2 BX YBXBI01 19960606171752S101702A054723AYBXBI01
NN 15A938D10D219114 BX YBXBI01 19960808183118S101702A056200AYBXBI01
NN 15B2001B1C9286C2 BX YBXBI01 19961003150557S101702A057489AYBXBI01
NN 15B2029D0BDACE34 BX YBXBI01 19961003163436S101702A057489AYBXBI01
NN 15BD048D073F608C BX YBXBI01 19961212173255S101702A059679AYBXBI01
NN 15CFB35405DFBF5A BX YBXBI01 19970410143057S101702A063036AYBXBI01
NN 15D885391779C6FB BX YBXBI01 19970605172716S101702A064221AYBXBI01
NN 15DCE95E0156E8B0 BX YBXBI01 19970703160014S101702A064922AYBXBI01
NN 15DF17F710332F76 BX YBXBI01 19970717131551S101702A065362AYBXBI01
NN 15DF186511E6C2C8 BX YBXBI01 19970717133102S101702A065362AYBXBI01
NN 15F80E06112DB78A BX YBXBI01 19971223090545S101702Z352321AYBXBI01
NN 15FBB2F7122E46C8 BX YBXBI01 19980115133559S101702A069359AYBXBI01
NN 16173B98043FD920 BX YBXBI01 19980709201647S101702A073668AYBXBI01
NN 1617501718E9DDFA BX YBXBI01 19980710082952S101702A073668AYBXBI01
NY 1515CC14146AF5C4 BX YBXBI02
NY 153266CC06950520 BX YBXBI02 19940714172643S101702A035771AYBXBI02
NY 153F9DCF159A5A4A BX YBXBI02 19941006193226S101702A037591AYBXBI02
NY 155D263A1BE3E226 BX YBXBI02 19950412S101702A043533AYBXBI02
NY 157D3321049912F8 BX YBXBI02 19951102S101702A048803AYBXBI02
NY 1596811E0E952A20 BX YBXBI02 19960411160932S101702A053228AYBXBI02
NY 159682CA15F0B836 BX YBXBI02 19960411170957S101702A053228AYBXBI02
NY 15976C0F0BF07EB4 BX YBXBI02 19960417121909S101702Z244065AYBXBI02
NY 1599CBC303481EC6 BX YBXBI02 19960502144753S101702A053763AYBXBI02
NY 159AE3411AACAFBC BX YBXBI02 19960509133250S101702A054054AYBXBI02
NY 159FE3750F03EAA2 BX YBXBI02 19960610091341S101702Z251974AYBXBI02
NY 15A065A211473E46 BX YBXBI02 19960613145220S101702A054888AYBXBI02
NY 15A938CD19801C72 BX YBXBI02 19960808183124S101702A056200AYBXBI02
NN 15B2001A082C1E72 BX YBXBI02 19961003150557S101702A057489AYBXBI02
NN 15B2029B193C9E98 BX YBXBI02 19961003163436S101702A057489AYBXBI02
NN 15BD048A0AC623A8 BX YBXBI02 19961212173256S101702A059679AYBXBI02
NN 15CFB33B1E6D46A0 BX YBXBI02 19970410143058S101702A063036AYBXBI02
NN 15D8853C0CCE4658 BX YBXBI02 19970605172718S101702A064221AYBXBI02
NN 15DCE95A166E6354 BX YBXBI02 19970703160014S101702A064922AYBXBI02
NN 15DF17FF0B5BC3B0 BX YBXBI02 19970717131554S101702A065362AYBXBI02
NN 15DF18630359F1BA BX YBXBI02 19970717133106S101702A065362AYBXBI02
NN 15F1CD80042EC1D0 BX YBXBI02 19971113142012S101702A068187AYBXBI02
NN 16173B960230D682 BX YBXBI02 19980709201648S101702A073668AYBXBI02
NN 1617502115928024 BX YBXBI02 19980710082953S101702A073668AYBXBI02
NN 1515CC161CFB69BC BX YBXBI03
NN 153266D112454074 BX YBXBI03 19940714172644S101702A035771AYBXBI03
NN 153F9DD30AA1AE10 BX YBXBI03 19941006193227S101702A037591AYBXBI03
NN 155D2638146ED044 BX YBXBI03 19950412S101702A043533AYBXBI03
NN 157D332715BEAC82 BX YBXBI03 19951102S101702A048803AYBXBI03
NN 1596811E1CE8D736 BX YBXBI03 19960411160937S101702A053228AYBXBI03
NN 159682CA0817474A BX YBXBI03 19960411170957S101702A053228AYBXBI03
NN 15A938CF0B61F9A8 BX YBXBI03 19960808183125S101702A056200AYBXBI03
NN 15B2001908A2BEF2 BX YBXBI03 19961003150558S101702A057489AYBXBI03
NN 15B202991591C6E2 BX YBXBI03 19961003163436S101702A057489AYBXBI03
NN 15BD04871D1AAE42 BX YBXBI03 19961212173257S101702A059679AYBXBI03
NN 15CFB33513CD2048 BX YBXBI03 19970410143058S101702A063036AYBXBI03
NN 15D88535191DE38F BX YBXBI03 19970605172719S101702A064221AYBXBI03
NN 15DCE95503E123A4 BX YBXBI03 19970703160015S101702A064922AYBXBI03
NN 15DF17FA13612488 BX YBXBI03 19970717131555S101702A065362AYBXBI03
NN 15DF186406354B8E BX YBXBI03 19970717133107S101702A065362AYBXBI03
NN 15EF99491675D14D BX YBXBI03 19971030134549S101702A067836AYBXBI03
NY 16D27F481B54E74C CBRHCAUD CBRHCAUD 2001-10-13-07.26.46.301597
NY 175E0A8A1FBEA5F5 CBRHCAUD CBRHCAUD 2004-03-19-05.11.59.464087
NY 168751910186F7D0 CBRHCAUD CBRHCAUD UW71236HDZ11F0
NY 16D27F490D11FA4A CBRHCLDL CBRHCLDL 2001-10-13-07.26.50.951657
NY 175E0A8B0C9C2749 CBRHCLDL CBRHCLDL 2004-03-19-05.12.02.836637
NY 168751920A386B30 CBRHCLDL CBRHCLDL UW71236HDZ11F0
NY 16D27F481B7E1A9D CBRHCLLU CBRHCLLU 2001-10-13-07.26.46.343786
NY 175E0A8C1B88A0CC CBRHCLLU CBRHCLLU 2004-03-19-05.12.15.137411
NY 16875193133CA944 CBRHCLLU CBRHCLLU UW71236HDZ11F0
NY 16D27F4A1D9CBEA0 CBRHCLMK CBRHCLMK 2001-10-13-07.27.03.676666
NY 175E0A8D0AFC4313 CBRHCLMK CBRHCLMK 2004-03-19-05.12.19.187980
NY 168751941DE271C8 CBRHCLMK CBRHCLMK UW71236HDZ11F0
NY 16D27F4B1150FE60 CBRHCLSG CBRHCLSG 2001-10-13-07.27.08.841977
NY 175E0A900636073F CBRHCLSG CBRHCLSG 2004-03-19-05.12.43.102236
NY 1687519609210A50 CBRHCLSG CBRHCLSG UW71236HDZ11F0
NY 16D27FBC15DE355A CBRHTBSV CBRHTBSV 2001-10-13-07.42.57.947861
NY 175E0AC312892ED3 CBRHTBSV CBRHTBSV 2004-03-19-05.19.54.152123
NY 168751990A0FFBF0 CBRHTBSV CBRHTBSV UW71236HDZ11F0
NY 16D27FFE1791DFB1 CBRKCMD CBRKCMD 2001-10-13-07.52.12.042110
NY 175E0AE316B8AB51 CBRKCMD CBRKCMD 2004-03-19-05.24.23.684781
NY 1687519C0D8BBF84 CBRKCMD CBRKCMD UW71236HDZ11F0
NY 16D27FFD1ED3C060 CBRKCME CBRKCME 2001-10-13-07.52.05.555969
NY 175E0AE401B3DC9A CBRKCME CBRKCME 2004-03-19-05.24.26.563442
NY 1687519E0C2D38C0 CBRKCME CBRKCME UW71236HDZ11F0
NY 16D27FFD1720EAF2 CBRKCMF CBRKCMF 2001-10-13-07.52.03.537835
NY 175E0AE31F83014F CBRKCMF CBRKCMF 2004-03-19-05.24.25.989125
NY 1687519F1B2CB520 CBRKCMF CBRKCMF UW71236HDZ11F0
NY 16D27FFD1CC97878 CBRKCMI CBRKCMI 2001-10-13-07.52.05.021153
NY 175E0AE400DA8001 CBRKCMI CBRKCMI 2004-03-19-05.24.26.340864
NY 168751A10E0673A8 CBRKCMI CBRKCMI UW71236HDZ11F0
NY 16D27FFE05A081C2 CBRKCMR CBRKCMR 2001-10-13-07.52.07.338503
NY 1772BC8E068E4349 CBRKCMR CBRKCMR UA12772HDZ11J0
NY 168751A30435DE34 CBRKCMR CBRKCMR UW71236HDZ11F0
NY 16862E761A2ED30C CBRKCMT CBRKCMT 439276300377892470
NY 16D27FFC1D9C3C4C CBRKCMT CBRKCMT 496778316382894076
NY 1772BC951EE6DC09 CBRKCMT CBRKCMT 518446089393395349
NY 16D27FFD14006BF9 CBRKISQL CBRKISQL 2001-10-13-07.52.02.718127
NY 175E0AE9193B5A99 CBRKISQL CBRKISQL 2004-03-19-05.25.14.674538
NY 168751A4197A2A6C CBRKISQL CBRKISQL UW71236HDZ11F0
NY 15BCFF9211D7D5F2 CC CC5160 19961212143434S101702A058962ACC5160
NY 17E0A83E08EB47EA CD CD2590 UPDS000031
NY 17EED333033177A6 CD CD2590 UPDS000033
NY 1802ECC90F8821AF CD CD2590 UPDS000037
NY 180FFE061346227D CD CD2590 UPDS000043
NY 1819121500D1EA9B CD CD2590 UPDS000044
NY 14BBBCEB10562DAC CD CD7060
NY 1607CC87009377F2 CD CD7360 19980402152138S101702A071420ACD7360
NY 1607D0CE1E40D76C CD CD7360 19980402174642S101702A071420ACD7360
NY 160E69CA02CA2E04 CD CD7360 19980514170508S101702M000860ACD7360
NN 1579EA0719E61C64 CD CD7400 19951012S101702A048447ACD7400
NY 15EA18DF00A0C786 CD CD8070 19970925133611S101702A066943ACD8070
NY 182056D1196487E7 CD CD8130 CIFS000202
NY 1828525B107FE520 CD CD8130 CIFS000210
NN 159F6A5202352D98 CD FC0100 19960607085733S101702A054822AFC0100
NN 15F74CAA04C50F62 CD FC0100 19971218134434S101702A069142AFC0100
NY 15B104390214625A CD KD0600 19960927085001S101702Z268024AKD0600
NY 15B1FEA60B8D931A CD KD0600 19961003141208S101702A057537AKD0600
NY 15DAB25E0DF199C4 CD KD0600 19970619134842S101702A064764AKD0600
NN 15077C791908E980 CD YCD0020
NN 151FB5DB02B76488 CD YCD0020 19940317190318S101702A032467AYCD0020
NN 15305500137FDB66 CD YCD0020 19940701132652S101702A035214AYCD0020
NN 1530F1710F009558 CD YCD0020 19940705104246S101702A035214AYCD0020
NN 1530F70614D77016 CD YCD0020 19940705140411S101702A035214AYCD0020
NN 1530F7A51AC00442 CD YCD0020 19940705142646S101702A035214AYCD0020
NN 156734E0079F570E CD YCD0020 19950615S101702A045345AYCD0020
NN 156967FE0AEFA1D0 CD YCD0020 19950629S101702A045492AYCD0020
NN 157F6A4E085AAA98 CD YCD0020 19951116S101702A049627AYCD0020
NN 158B83D1176585EC CD YCD0020 19960201S101702A051689AYCD0020
NN 159450A90E30F3E8 CD YCD0020 19960328175022S101702A053067AYCD0020
NN 15A3B5BA1726FE08 CD YCD0020 19960704164722S101702A055520AYCD0020
NN 15A3B6F901A7DD12 CD YCD0020 19960704173143S101702A055520AYCD0020
NN 15A3CF05023D424A CD YCD0020 19960705075225S101702A055520AYCD0020
NN 15AD97B41E3F7E22 CD YCD0020 19960905135843S101702A056819AYCD0020
NY 15FF00181D660876 CD YCD110 19980205134459S101702A070170AYCD110
NN 1540AE5C1A55C162 CD YCDCIFD 19941013140654S101702A038159AYCDCIFD
NN 1556AEC90FAD7926 CD YCDCIFD 19950302135905S101702A042467AYCDCIFD
NN 1568502611151630 CD YCDCIFD 19950622S101702M000590AYCDCIFD
NN 156FFEBB0A81C644 CD YCDCIFD 19950810S101702A046728AYCDCIFD
NN 15921ACF14E4FCE8 CD YCDCIFD 19960314161808S101702M000666AYCDCIFD
NN 15967DA613BB57BC CD YCDCIFD 19960411140629S101702A053344AYCDCIFD
NN 1597995A15E7FACA CD YCDCIFD 19960418152009S101702M000680AYCDCIFD
NN 159BD63C1139329C CD YCDCIFD 19960515142952S101702A054064AYCDCIFD
NN 159BD6FD14A669EE CD YCDCIFD 19960515145654S101702A054064AYCDCIFD
NN 15AD9A581B4F93A6 CD YCDCIFD 19960905153115S101702M000711AYCDCIFD
NN 15B899580C8E1338 CD YCDCIFD 19961114144241S101702M000743AYCDCIFD
NN 15B89EB512A292AE CD YCDCIFD 19961114175616S101702M000743AYCDCIFD
NN 15B8A1D910952E1A CD YCDCIFD 19961114194635S101702M000743AYCDCIFD
NN 15BBE8AC12C0D3EA CD YCDCIFD 19961205161342S101702A059523AYCDCIFD
NN 15C91AA00277CADC CD YCDCIFD 19970227151435S101702A061867AYCDCIFD
NN 15CC68351522E6DA CD YCDCIFD 19970320153542S101702M000778AYCDCIFD
NN 15E3800816237E30 CD YCDCIFD 19970814141023S101702M000800AYCDCIFD
NN 15F2E5D6066FBD54 CD YCDCIFD 19971120133445S101702A068246AYCDCIFD
NN 15FBBA17119631CA CD YCDCIFD 19980115174306S101702M000856AYCDCIFD
NY 17C52B9D06384F83 CD YCDCL01 CIIN000149
NN 1514B70C12D99AC6 CD YCDGETJ
NY 151FB0AC01F220D4 CD YCDGETJ 19940317160328S101702A032553AYCDGETJ
NY 153054EE18466F2E CD YCDGETJ 19940701132442S101702A035214AYCDGETJ
NY 1530F1490653D362 CD YCDGETJ 19940705103237S101702A035214AYCDGETJ
NY 1530F6DF06087278 CD YCDGETJ 19940705140220S101702A035214AYCDGETJ
NY 1530F7891CBA21E2 CD YCDGETJ 19940705142430S101702A035214AYCDGETJ
NY 1501FC62060A9EE0 CD YCDGETP
NN 1501FC601768D118 CD YCDGETV
NN 151FB0A70E8B697C CD YCDGETV 19940317160338S101702A032553AYCDGETV
NN 153054EE141462B6 CD YCDGETV 19940701132444S101702A035214AYCDGETV
NN 1530F14B1B482D88 CD YCDGETV 19940705103237S101702A035214AYCDGETV
NN 1530F6DF0AA29580 CD YCDGETV 19940705140221S101702A035214AYCDGETV
NN 1530F78910EB04BA CD YCDGETV 19940705142431S101702A035214AYCDGETV
NY 17B3DCA20DA4EC97 CD YCDOGEC KUBE000026
NY 17B3DCB7047D6973 CD YCDOGEM KUBE000026
NY 1587169C1C253D90 CD YCDT10 19960104S101702A050732AYCDT10
NY 158831A10E76C474 CD YCDT10 19960111S101702A050979AYCDT10
NY 159797650F79D1D2 CD YCDT10 19960418140935S101702A053432AYCDT10
NY 15A066AD1C558870 CD YCDT10 19960613152928S101702A054996AYCDT10
NY 17980CDD145D7361 CD YCDT115 UPDS000006
NY 1530F15801C41E26 CD YCDUP08 19940705103248S101702A035214AYCDUP08
NY 1530F6EB0732D234 CD YCDUP08 19940705140233S101702A035214AYCDUP08
NY 1530F7941949B6D8 CD YCDUP08 19940705142445S101702A035214AYCDUP08
NN 1501FC6F0E68F5F8 CD YCDUP10
NN 1520C9941AA56AE6 CD YCDUP10 19940324153717S101702A032715AYCDUP10
NN 1520CF8C0430E5D4 CD YCDUP10 19940324191112S101702A032715AYCDUP10
NN 1520D16C0A4DF29E CD YCDUP10 19940324201829S101702A032715AYCDUP10
NN 153054F71D673956 CD YCDUP10 19940701132538S101702A035214AYCDUP10
NN 1530F15A1892E6A2 CD YCDUP10 19940705103250S101702A035214AYCDUP10
NN 1530F6F6000FEAD4 CD YCDUP10 19940705140235S101702A035214AYCDUP10
NN 1530F78816A1F872 CD YCDUP10 19940705142447S101702A035214AYCDUP10
NN 15921ADC03986FE2 CD YCDUP10 19960314161929S101702M000666AYCDUP10
NY 15AD9A5E11A26544 CD YCDUP10 19960905153351S101702M000711AYCDUP10
NY 15B6669C1A565FA0 CD YCDUP10 19961031150558S101702M000738AYCDUP10
NY 15B8994607BDC728 CD YCDUP10 19961114144211S101702M000743AYCDUP10
NY 15B89EB501B46BC4 CD YCDUP10 19961114175618S101702M000743AYCDUP10
NY 15B8A1C010F53106 CD YCDUP10 19961114194602S101702M000743AYCDUP10
NN 1520C9B40B86C616 CD YCDUP14 19940324153826S101702A032715AYCDUP14
NN 1520CF8D13D1E3B4 CD YCDUP14 19940324191114S101702A032715AYCDUP14
NN 1520D16711261DC8 CD YCDUP14 19940324201833S101702A032715AYCDUP14
NN 153054FB064D3EEE CD YCDUP14 19940701132551S101702A035214AYCDUP14
NN 1530F15D1D69D956 CD YCDUP14 19940705103255S101702A035214AYCDUP14
NN 1530F6F81E751416 CD YCDUP14 19940705140239S101702A035214AYCDUP14
NN 1530F79D1AFD0B1A CD YCDUP14 19940705142451S101702A035214AYCDUP14
NN 15921ADE0FA3CF08 CD YCDUP14 19960314161951S101702M000666AYCDUP14
NN 15AD9A321DB80298 CD YCDUP14 19960905152821S101702M000711AYCDUP14
NN 15B666A81CF5C154 CD YCDUP14 19961031150600S101702M000738AYCDUP14
NN 15B899461C768258 CD YCDUP14 19961114144213S101702M000743AYCDUP14
NN 15B89EAC0CC4C672 CD YCDUP14 19961114175620S101702M000743AYCDUP14
NN 15B8A1C310FEE20E CD YCDUP14 19961114194605S101702M000743AYCDUP14
NY 153054ED02FB5328 CD YCDUP27 19940701132626S101702A035214AYCDUP27
NY 1530F1631F6D1C68 CD YCDUP27 19940705104208S101702A035214AYCDUP27
NY 1530F6FE0EAFF784 CD YCDUP27 19940705140313S101702A035214AYCDUP27
NY 1530F7A00F4E651A CD YCDUP27 19940705142545S101702A035214AYCDUP27
NY 1819E38913230775 CD YCDUPH0 UPDS000044
NN 15997B3D1157CD8E CD YKDX81 19960430144759S101702Z245908AYKDX81
NN 15997B6A10193FCA CD YKDX81 19960430145417S101702Z245908AYKDX81
NN 1599CDF318B0CD4E CD YKDX81 19960502160759S101702A053827AYKDX81
NN 159BD7E901D3785E CD YKDX81 19960515152931S101702M000684AYKDX81
NY 17E4F02D0B0BDEC0 CE CE0100 COPE000029
NY 17EA6663105473D3 CE CE5200 COPE000034
NY 17F29A9C0DA1F58D CE CE5200 COPE000042
NY 17F912FA1F7D6DEA CE CE5200 COPE000046
NY 17E8116E15E7B590 CE CE5230 COPE000040
NY 17F12C92081F6E58 CE CE5230 COPE000042
NY 17F6F9321A03B063 CE CE5230 COPE000046
NY 17E99EAE1F049772 CE CE5300 COPE000034
NY 17F7EFB61BA34704 CE CE5300 COPE000046
NY 17FEB0B71F27112C CE CE5300 COPE000052
NY 17F5FB170D75B342 CE CE5300 NOST000271
NY 17F68B54022CF1B7 CE CE5300 NOST000275
NY 17FAC2BA18C6C01B CE CE5300 NOST000288
NY 17E67FF71A9282F7 CE CE5730 COPE000029
NY 17F7751D0624AAC3 CE CE5730 COPE000046
NY 17EA65930A17DB5D CE CE8200 COPE000034
NY 17F4CBF21ED618C9 CE CE8200 COPE000042
NY 17F7EFB80D9351DC CE CE8200 COPE000046
NY 17FAC3ED1EF0D350 CE CE8200 COPE000049
NY 17FEB0BD0A575EE8 CE CE8200 COPE000052
NY 17EA66700BC5BF20 CE CE8440 COPE000034
NY 17F0362D18F23091 CE CE8440 COPE000042
NY 17F6F93B008FC687 CE CE8440 COPE000046
NY 17F12ABB16626554 CE CE8460 COPS000019
NY 17EA667514C0A152 CE CE8500 COPE000034
NY 17F12C9A14C6A418 CE CE8500 COPE000042
NY 17F6D5200701892E CE CE8500 COPE000046
NN 1597995A15E7FACA CE YCDCIFD 19960418152009S101702M000680AYCDCIFD
NY 17E4EFD60CB31A1E CE YCE1000 COPE00002957962ADA
NY 17EFE68C0CD2062B CE YCE1000 COPE00004257F22347
NY 17F9089E096B6A7A CE YCE1000 COPE000046583EB25C
NY 17E67FDA16C4F939 CE YCEWIAP COPE00002957A34674
NY 17F24C5E1877D4A5 CE YCEWIAP COPE0000425806405E
NY 17F9087C079722E1 CE YCEWIAP COPE000046583EB13F
NY 17E682110D59FF03 CI CI0070 KUGE000031
NY 17E6821109F016E7 CI CI0080 KUGE000031
NY 17E0A7F118E5C775 CI CI0090 GEGE000015
NY 17EF2D6F17A7C964 CI CI0090 GEGE000019
NY 17E064B005AE0F7A CI CI0100 GEGE000017
NY 17EF2D710279EDE8 CI CI0100 GEGE000019
NN 14ED14B302817AC6 CI YCI009
NN 151FB5B81F5D3A2C CI YCI009 19940317190314S101702A032565AYCI009
NN 153054DD0BE4164A CI YCI009 19940701132426S101702A035214AYCI009
NN 1530F13F0C86A2CA CI YCI009 19940705103230S101702A035214AYCI009
NN 1530F6DB02EB253A CI YCI009 19940705140212S101702A035214AYCI009
NN 1530F7790C6C3940 CI YCI009 19940705142422S101702A035214AYCI009
NY 15D0CB8004E979FE CI YCI009 19970417134326S101702A063176AYCI009
NY 15D0CC9915DD70C2 CI YCI009 19970417142223S101702A063176AYCI009
NY 15D0CD6B0DF09770 CI YCI009 19970417145207S101702A063176AYCI009
NY 160E68E812A6A060 CI YCI009 19980514165332S101702M000860AYCI009
NN 14ED14B70AC4C416 CI YCI009A
NN 151FB5E613026890 CI YCI009A 19940317190359S101702A032565AYCI009A
NN 153054DD11E8AA18 CI YCI009A 19940701132427S101702A035214AYCI009A
NN 1530F13C1951842C CI YCI009A 19940705103231S101702A035214AYCI009A
NN 1530F6DA1CF9EFDC CI YCI009A 19940705140214S101702A035214AYCI009A
NN 1530F77910DB11E8 CI YCI009A 19940705142423S101702A035214AYCI009A
NN 15921AC00EE448B4 CI YCI009A 19960314161448S101702M000666AYCI009A
NY 15D0CB8004A38E08 CI YCI009A 19970417134327S101702A063176AYCI009A
NY 15D0CC9A1FE21D84 CI YCI009A 19970417142225S101702A063176AYCI009A
NY 15D0CD6B08B0F534 CI YCI009A 19970417145208S101702A063176AYCI009A
NY 160E68FB06CB88F5 CI YCI009A 19980514165332S101702M000860AYCI009A
NY 17D4BE6119F0C03B CK CK8560 DCA0000087
NY 183634291D0D29A6 CK YCKE020 DCA0000188
NY 1836342F07F0041E CK YCKE025 DCA0000188
NY 17C7850F18022182 CK YCKMABB DCA0000079569F57BF
NY 17C7850F0E39A64E CK YCKMABC DCA0000079569F57C5
NY 176112D90A8C7BBC CK YCKMABU A12M005710534404B9
NY 17C785100E37D10D CK YCKMABU DCA0000079569F5810
NY 17C785A4143B13AB CK YCKMAPL DCA0000079
NY 17C785181484066B CK YCKMASD DCA0000079569F5827
NY 17C7851206FDAB95 CK YCKMASG DCA0000079569F57E1
NY 17C7850F0E23E03B CK YCKMASI DCA0000079569F57AA
NY 17C7851A05E79EB0 CK YCKMASL DCA0000079569F582F
NY 17B728E407CB878E CK YCKT020 DCA0000026
NY 183634371527F710 CK YCKT020 DCA0000188
NY 17B728F71778E3D9 CK YCKT025 DCA0000026
NY 180AA5EA10AA4719 CK YCKT025 DCA0000157
NY 1836343A01FC406E CK YCKT025 DCA0000188
NN 15547BB204297AD4 CO CO0020 19950216140329S101702A041670ACO0020
NN 1558E09416CC4790 CO CO0020 19950316125817S101702A042779ACO0020
NN 1561AFE40FB3FD46 CO CO0020 19950511142640S101702A044204ACO0020
NN 14DEC79F0F44B9EA CO CO0030
NN 15547BB003A9BF52 CO CO0030 19950216140330S101702A041670ACO0030
NY 14DDAE47110134CE CO CO0040
NN 15547BB10979E092 CO CO0040 19950216140333S101702A041670ACO0040
NN 1501FD0B1A94F29E CO CO0050
NN 15547BB20BB06736 CO CO0050 19950216140336S101702A041670ACO0050
NY 14C9E4321B25BBB2 CO CO5000
NN 15547BA211B83AC2 CO CO5000 19950216140316S101702A041670ACO5000
NN 14DDAE4309588CF6 CO CO8000
NN 15547BA312BE4728 CO CO8000 19950216140319S101702A041670ACO8000
NN 1516E5C215391FD0 CO CO8100
NN 15547BA61C4CC03C CO CO8100 19950216140321S101702A041670ACO8100
NN 1516E5C3182E5E5C CO CO8200
NN 15547BA610A13436 CO CO8200 19950216140324S101702A041670ACO8200
NN 16B3997B03D87FD3 CONVERT ASUCONV V6102
NN 150BE6781CFED35E CR CR5000
NN 155481450ACD38F6 CR CR5000 19950216172233S101702A042017ACR5000
NN 15C5CB77129611DE CR CR5000 19970206135312S101702A061341ACR5000
NN 152442BE014C38E6 CR YBXBI01 19940415175222S101702A033466AYBXBI01
NN 14DDB3DE0606977A CR YCRAN01
NN 152CE1E5112F22D0 CR YCRAN01 19940609143524S101702A034846AYCRAN01
NN 15A938DC1311D5A6 CR YCRAN01 19960808183350S101702A056200AYCRAN01
NN 14DDB4541BF70BE6 CR YCRAN02
NN 155D23331D1F648A CR YCRAN02 19950412S101702A043707AYCRAN02
NN 15A938EC05F068FA CR YCRAN02 19960808183522S101702A056200AYCRAN02
NY 1556900E0BBC5E4C CT CT8500 19950301194008S101702Z179440ACT8500
NY 155690511D77C482 CT CT8500 19950301194935S101702Z179441ACT8500
NY 1556AD0313EEBBA4 CT CT8500 19950302125634S101702Z179508ACT8500
NY 151FB1121C7706C8 CU CU8320 19940317161809S101702A032590ACU8320
NN 15497B6012F722AC CU CU8322 19941208140545S101702A040093ACU8322
NY 17E0ABED063F3F48 CU CU9000 CIFS000122
NY 17EED5550BC342B6 CU CU9000 CIFS000142
NY 17E684531080852A CZ CZ5150 KLOM000049
NY 17F26AFC0335606C CZ CZ5150 KLOM000054
NY 180435D91235201F CZ CZ5150 KLOM000057
NY 18116381121C24EB CZ CZ5150 KLOM000061
NY 181B2C1D0C24CE09 CZ CZ5150 KLOM000062
NY 18297691054C03D3 CZ CZ5150 KLOM000067
NY 183B2FA41E17E9A9 CZ CZ5150 KLOM000069
NY 17E85BF10F4354BC CZ CZ5190 GSER000131
NY 17F00FC210D73D05 CZ CZ5190 LOMN000025
NY 180438390F07B769 CZ CZ5190 LOMN000028
NY 1811639413083DBA CZ CZ5190 LOMN000029
NY 181FABF912C2C020 CZ CZ5190 LOMN000030
NY 182E80C112E8A2B7 CZ CZ5190 LOMN000034
NY 1839F73E1C54AB27 CZ CZ5190 LOMN000038
NY 177B502013162434 CZ CZ5200 CRMA004099
NY 17DF3EC70D75E7E9 CZ CZ5270 KLOM000049
NY 17DE79340EAF6A94 CZ CZ5280 KLOM000049
NY 17EF505D1BEC0B6C CZ CZ5280 KLOM000050
NY 1802EEA7090C9C93 CZ CZ5280 KLOM000057
NY 1810504417885C86 CZ CZ5280 KLOM000061
NY 181B2C0D175D944C CZ CZ5280 KLOM000062
NY 18287D610DBEB1F3 CZ CZ5280 KLOM000067
NY 1838691005B5F612 CZ CZ5280 KLOM000069
NY 17E64F65073B6FF1 CZ CZ5400 PIG0000008
NY 1802EFBD1392C624 CZ CZ5494 ACP0000084
NY 17F8B5C10C55D456 CZ CZ5494 ACP0000090
NY 181051A216390E05 CZ CZ5494 ACP0000098
NY 181B2B8D1D522BB4 CZ CZ5494 ACP0000103
NY 181435171840D2E8 CZ CZ5494 ACP0000107
NY 1817818400929666 CZ CZ5494 ACP0000111
NY 182C67910C6217F2 CZ CZ5494 ACP0000112
NY 182154840C727F99 CZ CZ5494 ACP0000114
NY 183538721B3EE313 CZ CZ5494 ACP0000115
NY 177D7F491C6F5900 CZ CZ5600 CRMA003972
NY 18253AD6115AE19A CZ CZ5991 GSER000191
NY 18271DFE052F9964 CZ CZ5991 GSER000200
NY 16187CF101BACF70 CZ CZ6014 19980717195822S101702Z383277ACZ6014
NY 16187E7D02A03B02 CZ CZ6014 19980717205332S101702Z383277ACZ6014
NY 1618973B014362AA CZ CZ6014 19980718113921S101702Z383299ACZ6014
NY 17EEAA7419A01AFD CZ CZ6020 LOFT000035
NY 17C93DC904E706E9 CZ CZ6030 KINF000006
NY 16D9741B01942356 CZ CZ6060 CRME000713
NY 17EADF081B9393D9 CZ CZ6300 GSER000128
NY 17FAC73809E5021C CZ CZ6300 GSER000156
NY 17F178200DCA8399 CZ CZ6300 KLOM000050
NY 180437F41774EF8E CZ CZ6300 KLOM000057
NY 17F8B9221DEAFF7E CZ CZ6300 KLOM000058
NY 180FFACB094AC581 CZ CZ6300 KLOM000061
NY 181B2BFC1ACCE4BB CZ CZ6300 KLOM000062
NY 182977D2058AE45A CZ CZ6300 KLOM000067
NY 183A1A8A1EB0E8FA CZ CZ6300 KLOM000069
NY 17F81E6003180D69 CZ CZ6400 GSER000039
NY 17E2E4E706CE7607 CZ CZ6400 GSER000112
NY 17F24A720D89D939 CZ CZ6400 GSER000123
NY 1802F33505B93D63 CZ CZ6400 GSER000152
NY 17FC82B107AD2F3A CZ CZ6400 GSER000157
NY 1810511C0834D82C CZ CZ6400 GSER000162
NY 181B2B8C007D300F CZ CZ6400 GSER000177
NY 18287BF1185A5D4A CZ CZ6400 GSER000187
NY 183A1A5F0B347825 CZ CZ6400 GSER000206
NY 183DE0621C7377DE CZ CZ6400 GSER000219
NY 17F68B1A102E6076 CZ CZ6500 GSER000039
NY 17F03B2802067F9D CZ CZ6500 GSER000109
NY 17E2E4EB17BDC9E7 CZ CZ6500 GSER000112
NY 1805C4B1046B91AD CZ CZ6500 GSER000152
NY 18105125038E7432 CZ CZ6500 GSER000162
NY 181C37BF09F26776 CZ CZ6500 GSER000177
NY 182827800307233C CZ CZ6500 GSER000187
NY 183A1A6308A8BE9E CZ CZ6500 GSER000206
NY 17A8DE0702CFD820 CZ CZ7000 IPRI000007
NY 17AFA2E61E170B30 CZ CZ7021 KUAN000023
NY 17A899A00007E47D CZ CZ7030 APEN000014
NY 17D5CEE8094CE9C8 CZ CZ7270 HOT0000018
NY 17DD6191102FC877 CZ CZ7270 HOT0000021
NY 17EFEC59032FAAB7 CZ CZ7270 HOT0000023
NY 17E519721192463B CZ CZ7270 HOT0000024
NY 17E630DD0B59F1F0 CZ CZ7270 HOT0000025
NY 17EF45B00C497A34 CZ CZ7510 APEN000035
NY 17ECC87707071F08 CZ CZ7510 APEN000036
NY 1810233B08719560 CZ CZ7510 APEN000040
NY 181B28940F777E49 CZ CZ7510 APEN000042
NY 18139AF51B561945 CZ CZ7510 APEN000046
NY 1817D4B802F927FD CZ CZ7510 APEN000047
NY 17C93DF7180711C4 CZ CZ7740 KINF000006
NY 17C18B6710085915 CZ CZ7740 KUAN000028
NY 17BEE43413AC55ED CZ CZ7740 KUAN000029
NY 17D6A53C06959321 CZ CZ7740 KUAN000033
NY 17E19C341A570461 CZ CZ8010 APEN000032
NY 17F26D6716D4FB4E CZ CZ8010 APEN000035
NY 1802EFCE0982FC5E CZ CZ8010 APEN000039
NY 181050291C2291AA CZ CZ8010 APEN000040
NY 181B289E0294210A CZ CZ8010 APEN000042
NY 1814369112862BD4 CZ CZ8010 APEN000044
NY 1828369001964AD0 CZ CZ8010 APEN000049
NY 18385E4E05B9ADD9 CZ CZ8010 APEN000050
NY 17E19C3D1A135A83 CZ CZ8020 APEN000032
NY 1810239E183B99DB CZ CZ8020 APEN000040
NY 181B28A60DE2A5A0 CZ CZ8020 APEN000042
NY 1828369105151BC7 CZ CZ8020 APEN000049
NY 18385DCE04E3A030 CZ CZ8020 APEN000050
NY 183215730FA6261A CZ CZ8980 GSER000211
NY 17E684571B5726F0 CZ CZ8980 KLOM000049
NY 17F1F4BE14B36626 CZ CZ8980 KLOM000050
NY 180436F401135C57 CZ CZ8980 KLOM000057
NY 18116383053015E9 CZ CZ8980 KLOM000061
NY 181B2C1D19AE3B15 CZ CZ8980 KLOM000062
NY 1829769B1ACCA6BA CZ CZ8980 KLOM000067
NY 1839F73D1787CCD8 CZ CZ8980 KLOM000069
NY 17AB171A0EEBDBA5 CZ CZ9991 KUAN000019
NY 17D6C4DE09142BBE CZ YCZBCAL ACP0000063571F51A9
NY 1797EDCC0351F1E8 CZ YCZGETP KUAN00001255101F7D
NY 17E0D90B0E57AC88 CZ YCZGETP KUAN0000375773DDC4
NY 17B5CCB80F3946D1 CZ YCZJ323 GSER000027560AC099
NY 17E88CAE1C1C2F51 CZ YCZJ323 GSER00010957B4790C
NY 180B4A640B9CA6FA CZ YCZJ323 GSER00017058D7E6D6
NY 180B4A66188C5FFC CZ YCZJ323 GSER00017058D7E6D6MVS
NY 17F136DA044949ED CZ YCZJ431 GSER00012257FD2866
NY 180B4A7105CC60FF CZ YCZJ431 GSER00017058D7E73D
NY 180B4A721A8A1DC9 CZ YCZJ431 GSER00017058D7E73DMVS
NY 17F3B0D708AC85EC CZ YCZJABW GSER0001095811EEAB
NY 17E2E6531E6AED59 CZ YCZJABW GSER0001115785141E
NY 17F65C6C0117D7F6 CZ YCZJABW GSER000148582846ED
NY 17F703BA0D743197 CZ YCZJABW GSER000151582DC263
NY 1802EC30120399DE CZ YCZJABW GSER0001525891A6AF
NY 181D01071EFF58FD CZ YCZJABW GSER000170596C7E08MVS
NY 1817664512385C07 CZ YCZJABW GSER000181593D7A96
NY 181C658B0CC5BF0F CZ YCZJABW GSER000185596765E3
NY 183451190FA513AF CZ YCZJABW GSER0001995A2FFFC5MVS
NY 1841363C1F8BE2C9 CZ YCZJABW GSER0002225A9C2BE5
NY 1841363F16B0BB0D CZ YCZJABW GSER0002225A9C2BE5MVS
NY 17B5D153039BCE65 CZ YCZM025 LOFT000019560AE739
NY 1822AB751B567188 CZ YCZM025 LOFT000049599C053FMVS
NY 17C85BA315EFD9AA CZ YCZM113 KINF00000656A66022
NY 17B5C73D09DFF5D0 CZ YCZM435 BEWI000004560A9276
NY 17F156F61AABFF9E CZ YCZM435 BEWI00001057FE35BE
NY 180C666B0959B4D9 CZ YCZM435 BEWI00002658E13572MVS
NY 180644230405DD09 CZ YCZMLIM KLOM00005758ADB2E7
NY 180A78E3046E08F6 CZ YCZMLIM KLOM00006158D0FB62
NY 180EB6DA09C279F4 CZ YCZMLIM KLOM00006458F49F2E
NY 182A6672101B375A CZ YCZMLIM KLOM00006759DCDE22MVS
NY 183385D71146B2C2 CZ YCZMLIM KLOM0000695A2956D9
NY 183385DA07529CD1 CZ YCZMLIM KLOM0000695A2956D9MVS
NY 17F706BE186E58BA CZ YCZPABW ACP0000086582DDBB5
NY 17EC00D70A7D8134 CZ YCZPABW BEWI00001957D171E9
NY 17EF53491427E028 CZ YCZPABW GSER00010957ED4FDC
NY 17F774BF0BB91FD7 CZ YCZPABW GSER00015158317679
NY 1802A00E191EC8DF CZ YCZPABW GSER000152588F2812
NY 17FD508B0E9EE593 CZ YCZPABW GSER00015758629BAC
NY 1817AC0B1DFF03BA CZ YCZPABW GSER000181593FC3E5
NY 1835405102269BF4 CZ YCZPABW GSER0001995A37D687MVS
NY 183F29560FF0C30D CZ YCZPABW VEFO0000455A8AF898MVS
NY 17B5CD5D07BD94DC CZ YCZT235 GSER000027560AC600
NY 180AC95716739B6D CZ YCZT235 GSER00017058D39E3D
NY 180AC959164C30CC CZ YCZT235 GSER00017058D39E3DMVS
NY 17C94C330333FA66 CZ YCZT328 GSER00009056AE4211
NY 180AC97C03C4EFC5 CZ YCZT328 GSER00017058D39F5F
NY 180AC97D1FFC807B CZ YCZT328 GSER00017058D39F5FMVS
NY 17D2417F030A32B6 CZ YCZT385 GSER00004756F975B2
NY 180AC9A004539D41 CZ YCZT385 GSER00017058D3A09C
NY 180AC9A1159B56A3 CZ YCZT385 GSER00017058D3A09CMVS
NY 17B5CC800C26CAFC CZ YCZT397 GSER000027560ABEC3
NY 180AC9B218F633C3 CZ YCZT397 GSER00017058D3A132
NY 180AC9B409BB30BC CZ YCZT397 GSER00017058D3A132MVS
NY 178BF8DA14E2F115 CZ YCZT421 GSER00001454ABD271
NY 17B5C73C10EAABBA CZ YCZT435 BEWI000004560A927D
NY 180C6654079144F5 CZ YCZT435 BEWI00002658E1347CMVS
NY 17E083F71D377199 CZ YCZT724 ACP000005657711403
NY 17E1F71912E5D9B1 CZ YCZT726 ACP0000056577D3D5C
NY 17D4C00C16D32BD1 CZ YCZTPRT BEWI000009570E6247
NY 17EC77A611F0D4B7 CZ YCZTPRT BEWI00001057D55677
NY 1699CF290AFBC42A DAA400_D_MAIN PSEBN12 V3201
NY 16B5591E07CB67B9 DAA400_D_MAIN PSEBN13 V3201
NY 1700981E0C5A22E0 DAA400_D_MAIN PSSCSQL V4000
NY 1742296C07BC9A55 DAA400_D_MAIN PSSCSQL V4100
NY 16FB8F3D0D70F824 DAA400_D_MAIN PSSHSQL V4000
NY 16F72C5202566B34 DAA400_D_MAIN PSSIMPC V4000
NY 16E6B6EC07448B74 DAA400_D_MAIN PSSRULE V3401
NY 175559D31D3385AB DAA420_D_MAIN PSSCSQL V4100
NY 1765B19A01245409 DAA420_D_MAIN PSSHSQL V4200
NY 1719479B126B4F0A DAA420_D_MAIN PSSRULE V4100
NY 176E00470E492FF4 DAA420_D_MAIN PSSXSQL V4200
NY 16CFB2AE19427F3B DB DB2REORG PROD
NY 17F9FC981BA98ADD DE DE0030 AITR000030
NY 17EA719B19389B69 DE DE0030 DE00000029
NY 17F3896418E9A100 DE DE0030 DE00000038
NY 1805C0D902D50A6A DE DE0030 DE00000043
NY 17F77ACC1DE8C19B DE DE0030 DE00000049
NY 17F664BF091393F6 DE DE0030 DE00000052
NY 17F7CC8912CEB84F DE DE0030 DE00000058
NY 1811639F1D102779 DE DE0030 DE00000061
NY 18169048009D5496 DE DE0030 DE00000063
NY 180AD3EB1A255478 DE DE0030 DE00000065
NY 181C394C1972BD5E DE DE0030 DE00000066
NY 182C9BAF10EA9250 DE DE0030 DE00000070
NY 1839EF7A1C50FC95 DE DE0030 DE00000077
NY 17EA719D1F583B5B DE DE0050 DE00000029
NY 17F1F0FD18B677B4 DE DE0050 DE00000038
NY 180430EA05006D30 DE DE0050 DE00000043
NY 17F774C7026C9EC2 DE DE0050 DE00000049
NY 181052D20CD33C51 DE DE0050 DE00000061
NY 180AD3EC1F37B12B DE DE0050 DE00000065
NY 181C38F31CA180DE DE DE0050 DE00000066
NY 182C73A519221274 DE DE0050 DE00000070
NY 183864320138C12E DE DE0050 DE00000077
NY 17E6370E14B5306D DE DE0060 DE00000033
NY 1802C8EE1F02D5BC DE DE0060 DE00000043
NY 181052B715DA14A3 DE DE0060 DE00000061
NY 181C39181DE41A89 DE DE0060 DE00000066
NY 182885EE0D9D91EB DE DE0060 DE00000070
NY 1838642B166A28FA DE DE0060 DE00000077
NY 17EA71A00103538E DE DE0090 DE00000029
NY 17F1F1000193D3BC DE DE0090 DE00000038
NY 180430EA12DC4D65 DE DE0090 DE00000043
NY 17F774C71DE4EEC3 DE DE0090 DE00000049
NY 181052D01D4BF7E0 DE DE0090 DE00000061
NY 180AD3EE0DE04B17 DE DE0090 DE00000065
NY 181C38F4084364F1 DE DE0090 DE00000066
NY 182C73AE12B1663A DE DE0090 DE00000070
NY 1838642A0B36C2FB DE DE0090 DE00000077
NY 17E6371005641EB7 DE DE0100 DE00000033
NY 1802C8E30C5EBDA2 DE DE0100 DE00000043
NY 181052B901F834DD DE DE0100 DE00000061
NY 181C39251EE20C6C DE DE0100 DE00000066
NY 182885F10797D735 DE DE0100 DE00000070
NY 1838642B1E52B078 DE DE0100 DE00000077
NY 17F3AB42022F0794 DE DE0190 DE00000038
NY 180430EA1949EB61 DE DE0190 DE00000043
NY 181052B70C357965 DE DE0190 DE00000061
NY 17E198870884B534 DE DE0400 DE00000033
NY 17EEF4D6002657B2 DE DE0400 DE00000038
NY 1802C8E40D246A84 DE DE0400 DE00000043
NY 181052C21779B1FE DE DE0400 DE00000061
NY 181C39331FFB717F DE DE0400 DE00000066
NY 182885F619AD723D DE DE0400 DE00000070
NY 183864321E43A749 DE DE0400 DE00000077
NY 17E53CC303741DDE DE DE0410 DE00000033
NY 17F011370D4D6B12 DE DE0410 DE00000038
NY 180430F204FD1AB4 DE DE0410 DE00000043
NY 17F664E2143E4C5C DE DE0410 DE00000053
NY 181052BC0C347337 DE DE0410 DE00000061
NY 181C393012C460B2 DE DE0410 DE00000066
NY 182885E600E60682 DE DE0410 DE00000070
NY 1838641D010CFA4C DE DE0410 DE00000077
NY 17F9FC9C0D8F9C14 DE DE0420 AITR000030
NY 17EA675D0A488D66 DE DE0420 DE00000029
NY 17F3896719061DE2 DE DE0420 DE00000038
NY 180430F207D9CB91 DE DE0420 DE00000043
NY 17F77B560EBFAE0B DE DE0420 DE00000049
NY 17F7CC900438FDD7 DE DE0420 DE00000058
NY 181052CB0F5FACDF DE DE0420 DE00000061
NY 1816904D1E1B6D94 DE DE0420 DE00000063
NY 180AD3F21908F9F5 DE DE0420 DE00000065
NY 181C39170A436491 DE DE0420 DE00000066
NY 182C9880013FCB5D DE DE0420 DE00000070
NY 1838641C013BB903 DE DE0420 DE00000077
NY 17E510E210B6BE25 DE DE0430 DE00000033
NY 17F0110507EE9A1D DE DE0430 DE00000038
NY 180430F215545EA6 DE DE0430 DE00000043
NY 181052B0019A4DF3 DE DE0430 DE00000061
NY 180AD3F406BFBEEE DE DE0430 DE00000065
NY 181C39050B0FD372 DE DE0430 DE00000066
NY 182885EE0928090D DE DE0430 DE00000070
NY 1838643816D05AE9 DE DE0430 DE00000077
NY 17E6822315495B6D DE DE0440 DE00000033
NY 17F1F1010DF85629 DE DE0440 DE00000038
NY 180430F20CFB6530 DE DE0440 DE00000043
NY 181052B01FA15BBC DE DE0440 DE00000061
NY 180AD3F605C47579 DE DE0440 DE00000065
NY 181C393F05B0E5A2 DE DE0440 DE00000066
NY 182885DC1456E513 DE DE0440 DE00000070
NY 1838644419C0AD4A DE DE0440 DE00000077
NY 17E19889042812F8 DE DE0490 DE00000033
NY 17EEF5B5053EEDC1 DE DE0490 DE00000038
NY 1802C8E6155FC2C3 DE DE0490 DE00000043
NY 181052BB1CFC5B79 DE DE0490 DE00000061
NY 181C39440D10F7A5 DE DE0490 DE00000066
NY 1838643615DB5DBB DE DE0490 DE00000077
NY 17F9FC9D1AFD9C55 DE DE0810 AITR000030
NY 17E6371A134F6470 DE DE0810 DE00000033
NY 17F596E01F4C525E DE DE0810 DE00000038
NY 180430F40E919E8E DE DE0810 DE00000043
NY 17F77B160DFE5E9A DE DE0810 DE00000049
NY 17F7CC920A05967B DE DE0810 DE00000058
NY 181052C5090F1E5B DE DE0810 DE00000061
NY 1816714404901F14 DE DE0810 DE00000063
NY 180AD3F70738015C DE DE0810 DE00000065
NY 181C39140CFAD8BB DE DE0810 DE00000066
NY 182C98791F3F0A34 DE DE0810 DE00000070
NY 1838641B024C4353 DE DE0810 DE00000077
NY 17EA71AC1017D74E DE DE0820 DE00000029
NY 17F3876E11C76B47 DE DE0820 DE00000038
NY 1805C0D90EDEB490 DE DE0820 DE00000043
NY 17F7795D17C451E7 DE DE0820 DE00000049
NY 17F664C504C266FE DE DE0820 DE00000052
NY 1811639F1915DC41 DE DE0820 DE00000061
NY 1815A1B41C2FF8DF DE DE0820 DE00000063
NY 180AD3F902AE1980 DE DE0820 DE00000065
NY 181C393C018307F3 DE DE0820 DE00000066
NY 182E05A0123133A9 DE DE0820 DE00000070
NY 182FBD31072FA1A1 DE DE0820 DE00000075
NY 1839EF800EAF6C4E DE DE0820 DE00000077
NY 182FEABA1F43CE80 DE DE0820 DE00000080
NY 17E19896115A1003 DE DE0830 DE00000033
NY 17F0115904984FE6 DE DE0830 DE00000038
NY 180430F51C57199F DE DE0830 DE00000043
NY 181052BB05F166D0 DE DE0830 DE00000061
NY 181C395509B589B4 DE DE0830 DE00000066
NY 182885E91FAA32D5 DE DE0830 DE00000070
NY 1838643E1A236A4F DE DE0830 DE00000077
NY 17D3C42E0C130034 DE DE0860 DE00000028
NY 181052C1121CDA6F DE DE0860 DE00000061
NY 181C38F010E7075D DE DE0860 DE00000066
NY 1829956D1501CA8D DE DE0860 DE00000070
NY 1839798C1BA8ADA8 DE DE0860 DE00000077
NY 17E1A4A109FAD59B DE DE0940 DE00000033
NY 18072F571E3CA8C9 DE DE0940 DE00000043
NY 181052C00E02499E DE DE0940 DE00000061
NY 181C39421EBF7C9C DE DE0940 DE00000066
NY 182885D91296A296 DE DE0940 DE00000070
NY 1838643603D96F33 DE DE0940 DE00000077
NY 181B2AEA04F96F90 DE DE5031 DE00000066
NY 1806494F024CADC4 DE DE5080 DE00000043
NY 1810528F0FB655C8 DE DE5080 DE00000061
NY 17E637281C6B55B5 DE DE5130 DE00000033
NY 17EFC406017DE232 DE DE5130 DE00000038
NY 180430FB13000E0D DE DE5130 DE00000043
NY 181052801526D7CE DE DE5130 DE00000061
NY 181B2AE00FD10CF5 DE DE5130 DE00000066
NY 182885C01476B147 DE DE5130 DE00000070
NY 17E3071B15992B26 DE DE5600 DE00000033
NY 17F011F31C902743 DE DE5600 DE00000038
NY 18043101039A2862 DE DE5600 DE00000043
NY 1810528008E6E8F6 DE DE5600 DE00000061
NY 181B2AE31C62940C DE DE5600 DE00000066
NY 182885C100894FE3 DE DE5600 DE00000070
NY 18386400124A13EB DE DE5600 DE00000077
NN 1511620504EC1CFE DE DE5630
NY 17E1986B019F16D9 DE DE5690 DE00000033
NY 17EFE86D13A1660A DE DE5690 DE00000038
NY 1802C8BE0D044217 DE DE5690 DE00000043
NY 181052860C2D5F16 DE DE5690 DE00000061
NY 181B2AD7040534AF DE DE5690 DE00000066
NY 183863E610EC6DBD DE DE5690 DE00000077
NY 1804310001822ED7 DE DE5900 DE00000043
NY 17CAB21417364395 DE DE7120 DE00000023
NY 17F6DA2B0AC3303D DE DE7120 DE00000030
NY 17EF1F1E165DD21C DE DE7120 DE00000038
NY 181052820F2583C1 DE DE7120 DE00000061
NY 17FF7F9F045A9FA2 DE DE7120 DE00000064
NY 181B2AF305874F6A DE DE7120 DE00000066
NY 182885BD11A7674C DE DE7120 DE00000070
NY 17E427B114DC7F76 DE DE7800 DE00000033
NY 17E19867142425A9 DE DE9992 DE00000033
NY 1802C8CF128E0800 DE DE9992 DE00000043
NY 1810529400FA47BC DE DE9992 DE00000061
NY 181B2AF7052B00F4 DE DE9992 DE00000066
NY 1839EFDC13261162 DE DE9992 DE00000077
NY 17E63702090A08C1 DE YDE0021 DE0000003357A0E330
NY 17EDDE56054FA08D DE YDE0021 DE0000003857E11728
NY 18015E540200D86F DE YDE0021 DE0000004358849D3C
NY 180B6BEC02BE25F8 DE YDE0021 DE0000006158D9002C
NY 181C38D600A7F2B4 DE YDE0021 DE000000665965EE7CMVS
NY 182E03DA01A9B86B DE YDE0021 DE0000007059FB22DBMVS
NY 183885BB12DD75FC DE YDE0021 DE000000775A53475E
NY 183885BD0A967610 DE YDE0021 DE000000775A53475EMVS
NY 155F7C6C1E180AE2 DE YDE0860 19950427S101702A044022AYDE0860
NY 1561A8500A42762E DE YDE0860 19950511S101702Z189239AYDE0860
NY 1562D01111457CC8 DE YDE0860 19950518S101702A044277AYDE0860
NY 156366B61CF57B20 DE YDE0860 19950522S101702Z190760AYDE0860
NY 15650056151C9842 DE YDE0860 19950601S101702A044799AYDE0860
NY 1566199E198DE23C DE YDE0860 19950608S101702A045100AYDE0860
NY 1567330710B49F86 DE YDE0860 19950615S101702M000591AYDE0860
NY 1568502C1F47F1A0 DE YDE0860 19950622S101702M000590AYDE0860
NY 156A83DA12D66C94 DE YDE0860 19950706S101702A045780AYDE0860
NY 156B9C8A0BCE2502 DE YDE0860 19950713S101702A046130AYDE0860
NY 156EE6770E9F8DF6 DE YDE0860 19950803S101702A046600AYDE0860
NY 15769C3D10BF06C4 DE YDE0860 19950921S101702A047786AYDE0860
NY 1579E34600FDC800 DE YDE0860 19951012S101702M000615AYDE0860
NY 17E089C91A038550 DE YDELSTO DE00000033577144E4
NY 17EDB50F19BC5143 DE YDELSTO DE0000003857DFBD27
NY 18015E5309A69D67 DE YDELSTO DE0000004358849D33
NY 1819138A0AC1B2B8 DE YDELSTO DE00000066594B8B81
NY 181AFA9508EE4408 DG YDGPORT DEPG000064
NY 15054CF11B1A0B6C DG YDGT011
NN 14F5E37B1C8D4C66 DG YDGT031
NY 17E9A480173C8D29 DI DI5200 DI00000046
NY 17EDE1540DD0C99D DI DI5200 DI00000047
NY 18199BE40A236E0E DI DI5200 DI00000064
NY 17EDB918009CA8AE DI DI7510 DI00000045
NY 17FB67501F8BE779 DI DI7510 DI00000054
NY 180BEB971B99C254 DI DI7510 DI00000058
NY 17D3C4750C448953 DI DI8290 DI00000034
NY 17D3C4770B2D72AC DI YDIDB2 DI00000034570623C3
NY 17D6BE7C089B67B1 DI YDIT015 DI00000042571F1C16
NY 17D6BE7C11CC2785 DI YDIT015 DI00000042571F1C16CICS
NY 18198C8304C23945 DI YDIT015 DI00000068594F823D
NY 18198C8507892155 DI YDIT015 DI00000068594F823DCICSMVS
NY 18198C841D3619BA DI YDIT015 DI00000068594F823DMVS
NY 17DAE088170B1DD9 DI YDITBTB DI000000425741C710
NY 18198C381FD89BCF DI YDITBTB DI00000068594F7FC8
NY 18198C3A1D3FE898 DI YDITBTB DI00000068594F7FC8CICSMVS
NY 18198C3A137B3E7F DI YDITBTB DI00000068594F7FC8MVS
NY 1775F5C9116FA845 DI YDIU015 A06M02710553F33A22
NY 181A026818EC369B DI YDIU015 DI0000006459535F3EMVS
NY 1827DF0B02EABE6E DI YDIU015 DI0000007059C7A76B
NY 1827DF0C1186792A DI YDIU015 DI0000007059C7A76BMVS
NY 1775F5CA1C99D48D DI YDIU016 A06M02710553F33A2E
NY 181A027C072235D5 DI YDIU016 DI0000006459535FDDMVS
NY 1827DF141AD8064A DI YDIU016 DI0000007059C7A7B9
NY 1827DF161093B4F8 DI YDIU016 DI0000007059C7A7B9MVS
NY 1576B79804B3E908 DN DN8020 19950922S101702Z209425ADN8020
NY 17F91940005F9BF6 DP DP0320 DI00000057
NY 1802F6590437496E DP DP0320 DP00000059
NY 180DF65010137638 DP DP0320 DP00000065
NY 181E1C5606776690 DP DP0320 DP00000067
NY 182DD5810A5D5CED DP DP0320 DP00000071
NY 182260FC0F0ECDD1 DP DP0320 DP00000072
NY 182DB2C01A4395B9 DP DP0320 DP00000076
NY 17E2E55203C7547C DP DP0920 DP00000043
NY 17EE06BF09975F2D DP DP0920 DP00000050
NY 1802F6F208AAEE2B DP DP0920 DP00000059
NY 17CFD8FC028C0581 DP DP7010 DP00000041
NY 17EB5ED91BBD159F DP DP7010 DP00000050
NY 160019B41D02BD2E DU DU7070 19980212134113S101702A070276ADU7070
NY 152995530C6787B4 DX DX0100 19940519144614S101702A034343ADX0100
NY 152F14DD070D004A DX DX0100 19940623142418S101702A035172ADX0100
NY 159796A512C93048 DX DX0100 19960418134338S101702M000672ADX0100
NY 15299A1D113F3DD4 DX DX5100 19940519174204S101702A034366ADX5100
NY 1530338B0769824C DX DX5100 19940630173128S101702A035317ADX5100
NY 1516E56C0BE01E84 DX DX5300
NY 15299A190482F6DA DX DX5300 19940519174211S101702A034369ADX5300
NN 152537051F0FFE2A DX DX5400 19940421194557S101702A033552ADX5400
NN 15D0CA270B156F6C DX DX5400 19970417125527S101702A063250ADX5400
NN 152537120A71395C DX DX5410 19940421194631S101702A033552ADX5410
NN 15D0CA28121AA544 DX DX5410 19970417125528S101702A063250ADX5410
NN 1517FD751514FA70 EA YEA0001
NN 15337F06124853A6 EA YEA0001 19940721163813S101702M000430AYEA0001
NN 15462E13037918F4 EA YEA0001 19941117135202S101702M000510AYEA0001
NN 154A9E690B82CCDC EA YEA0001 19941215193956S101702M000522AYEA0001
NN 156A81DD1473F742 EA YEA0001 19950706S101702M000589AYEA0001
NN 1572335409F1DA52 EA YEA0001 19950824S101702M000598AYEA0001
NN 1581B8DD06D68B9A EA YEA0001 19951201S101702A049916AYEA0001
NN 158B83251513C29A EA YEA0001 19960201S101702A051573AYEA0001
NN 158ECB291091D9D8 EA YEA0001 19960222143902S101702A052199AYEA0001
NN 1599CA591992D64E EA YEA0001 19960502135830S101702A053286AYEA0001
NN 159B89AA04BBEFA8 EA YEA0001 19960513164908S101702Z248111AYEA0001
NN 159BD7ED11EE1660 EA YEA0001 19960515152936S101702M000684AYEA0001
NN 159CC6371E2C7964 EA YEA0001 19960521133901S101702Z249308AYEA0001
NN 159D18E30AFB83D6 EA YEA0001 19960523145633S101702A054318AYEA0001
NN 15A7F086162D4D0C EA YEA0001 19960731143941S101702A056130AYEA0001
NN 15AEBE9D15F33A68 EA YEA0001 19960912215250S101702M000710AYEA0001
NN 15BD047B01912116 EA YEA0001 19961212173052S101702A059672AYEA0001
NN 15BF58D41079A2D0 EA YEA0001 19961227131336S101702A060313AYEA0001
NN 15BF5E0017DFF52A EA YEA0001 19961227161942S101702A060313AYEA0001
NN 15C5CEC41E1B2A90 EA YEA0001 19970206155025S101702M000764AYEA0001
NN 15E38BB20573593B EA YEA0001 19970814210804S101702A065956AYEA0001
NN 160A06290BCC9706 EA YEA0001 19980416190745S101702M000898AYEA0001
NN 16173AC21148A7DA EA YEA0001 19980709194601S101702M000923AYEA0001
NN 1617527B0AF87D0C EA YEA0001 19980710093842S101702M000923AYEA0001
NN 15BF58D609596784 EA YEA0010 19961227131338S101702A060313AYEA0010
NN 15BF5E040E491842 EA YEA0010 19961227161943S101702A060313AYEA0010
NN 15C141DE0C350344 EA YEA0010 19970108165717S101702Z289119AYEA0010
NN 15C3983016D1F88C EA YEA0010 19970123135233S101702A061046AYEA0010
NN 15C5CECA033765D4 EA YEA0010 19970206155028S101702M000764AYEA0010
NN 15CC64A311C97686 EA YEA0010 19970320132759S101702A062550AYEA0010
NN 15CE49A71ED235A6 EA YEA0010 19970401145030S101702Z304098AYEA0010
NN 15D0CFBD11B65C6C EA YEA0010 19970417154119S101702A063297AYEA0010
NN 15D1698617CD912A EA YEA0010 19970421115820S101702Z307341AYEA0010
NN 15D16BFE136277A6 EA YEA0010 19970421132703S101702Z307341AYEA0010
NN 15D1E41110045C64 EA YEA0010 19970424130254S101702A063459AYEA0010
NN 15DF1806085C11CC EA YEA0010 19970717131720S101702A065360AYEA0010
NN 15E38BB51B10836F EA YEA0010 19970814210808S101702A065956AYEA0010
NN 15E6CF6917BFF48A EA YEA0010 19970904153951S101702A066529AYEA0010
NN 15F1CEBE0774381C EA YEA0010 19971113150405S101702A068044AYEA0010
NN 15FA9CA40C77607C EA YEA0010 19980108153347S101702M000886AYEA0010
NN 15FF02A81B8BDC78 EA YEA0010 19980205151554S101702A070151AYEA0010
NN 16001B6906823AE0 EA YEA0010 19980212144146S101702M000834AYEA0010
NN 160A062B111DAC8A EA YEA0010 19980416190746S101702M000898AYEA0010
NN 160E67361D9AB912 EA YEA0010 19980514155250S101702M000913AYEA0010
NN 1612E4FE00148DF8 EA YEA0010 19980612054603S101702M000922AYEA0010
NN 16173ABD1E4AD1F6 EA YEA0010 19980709194554S101702M000923AYEA0010
NN 161752420B5511C2 EA YEA0010 19980710093614S101702M000923AYEA0010
NN 15BF58D4128C7AE8 EA YEA0011 19961227131340S101702A060313AYEA0011
NN 15BF5E020D42049A EA YEA0011 19961227161943S101702A060313AYEA0011
NN 15C141DC1A13AE6E EA YEA0011 19970108165718S101702Z289119AYEA0011
NN 15C3982E0E026572 EA YEA0011 19970123135233S101702A061046AYEA0011
NN 15C5CEC502A3D5C8 EA YEA0011 19970206155016S101702M000764AYEA0011
NN 15DF17FF001DA882 EA YEA0011 19970717131722S101702A065360AYEA0011
NN 15E38BB719377B7C EA YEA0011 19970814210813S101702A065956AYEA0011
NN 16001B65158B5B5C EA YEA0011 19980212144147S101702M000834AYEA0011
NN 160A063103FDDA9E EA YEA0011 19980416190755S101702M000898AYEA0011
NN 1612E4FC061B9217 EA YEA0011 19980612054603S101702M000922AYEA0011
NN 16173ABF00107CA0 EA YEA0011 19980709194555S101702M000923AYEA0011
NN 1617523017C7E3F2 EA YEA0011 19980710093659S101702M000923AYEA0011
NY 150200EA16D66220 EB EB5150
NY 154861AB06B76EA8 EB EB5150 19941201140340S101702A039621AEB5150
NY 17F225D31E8E6C06 EB EB6480 EXPN000051
NY 17ECF7F01BF209E4 EB EB6480 EXPN000054
NY 17F701880CC8CD9A EB EB6480 EXPN000058
NY 17C9C4A81DF216A5 EB EB8374 KLOM000043
NY 17F15B030959FF3E EB EB8374 KLOM000054
NY 17DD87DB14BB4DB9 EB EB8375 KLOM000049
NY 17F15B041BA8B699 EB EB8375 KLOM000054
NY 15E7E3D614E929D4 EB EB9000 19970911123324S101702A066672AEB9000
NN 15F32B6F18A72244 EC EC5099 19971122070527S101702Z346068AEC5099
NN 15F363BB0B30A920 EC EC5099 19971123164056S101702Z346149AEC5099
NN 15FCCEB10C9D55EE EC EC5099 19980122145046S101702A069866AEC5099
NY 17E6FD7A174794F4 EC EC5130 KLOM000049
NY 17F1F4E816485060 EC EC5130 KLOM000050
NY 180438D91C64FFB9 EC EC5130 KLOM000057
NY 180BEBC21B6D68D2 EC EC5130 KLOM000061
NY 181B2C221E63ACDA EC EC5130 KLOM000062
NY 1828F7A41A86614A EC EC5130 KLOM000067
NY 1838690B1B609F65 EC EC5130 KLOM000069
NN 15ED681E09A24E46 EC EC7103 19971016150142S101702A067558AEC7103
NN 15F3119B186B71AC EC EC7103 19971121154032S101702A068485AEC7103
NY 17C2CDA903AEEDFD EC EC7204 DLGR000022
NY 180C5B4A17C399BC EC EC7204 DLGR000039
NY 17C2CDD40B5308A3 EC EC7206 DLGR000022
NY 180C5B4D1348A5CC EC EC7206 DLGR000039
NY 17D233BB160F6221 EC EC7420 KAUS000011
NY 1614868703298A1A EC EC8062 19980622145120S101702Z380281AEC8062
NY 1614AE6D069F4589 EC EC8062 19980623143853S101702Z380537AEC8062
NY 1614CFEC18313F0C EC EC8062 19980624103834S101702Z380638AEC8062
NY 1614868E1B2D9E84 EC EC8063 19980622145205S101702Z380283AEC8063
NY 1614AE6C0563C024 EC EC8063 19980623143831S101702Z380538AEC8063
NY 1614CFF814886764 EC EC8063 19980624103859S101702Z380639AEC8063
NN 16059B1917DAB9F4 EC EC8067 19980319142758S101702A071130AEC8067
NY 1607D0BC0053FFC6 EC EC8140 19980402174847S101702A071444AEC8140
NY 160C31381514C7A2 EC EC8140 19980430141651S101702A072032AEC8140
NN 1607F23A0D2D8D08 EC EC8698 19980403135200S101702A071490AEC8698
NN 15F0B830135F9E5C EC YECAV 19971106165427S101702A068113AYECAV
NN 15F0D48B1F4427D2 EC YECAV 19971107094915S101702A068113AYECAV
NN 15F545B30A0C7088 EC YECAV 19971205161051S101702A068771AYECAV
NN 15FBBA0E07F43A00 EC YECAV 19980115174314S101702M000856AYECAV
NN 15FF2F3B1A2C9016 EC YECAV 19980206175259S101702A070225AYECAV
NN 16004156009EBBC6 EC YECAV 19980213132027S101702A070420AYECAV
NN 160484CF1FE9F394 EC YECAV 19980312162542S101702A070997AYECAV
NN 160487610B1F3D9E EC YECAV 19980312175718S101702A070997AYECAV
NN 1607F2C7192E8D04 EC YECAV 19980403141043S101702A071472AYECAV
NN 160A061B116002BC EC YECAV 19980416190501S101702M000898AYECAV
NY 15F0B76E05CF8658 EC YECAVKY 19971106162740S101702A067704AYECAVKY
NY 15FBBA000FC923D2 EC YECAVKY 19980115174842S101702M000856AYECAVKY
NY 160484BA031BAB26 EC YECAVKY 19980312162557S101702A070997AYECAVKY
NY 16048752153D688E EC YECAVKY 19980312175734S101702A070997AYECAVKY
NY 1607F2C615750B60 EC YECAVKY 19980403141026S101702A071472AYECAVKY
NY 16187C430C3C3C2C EC YECAVKY 19980717193302S101702Z383289AYECAVKY
NY 16187C9515EBB6E4 EC YECAVKY 19980717194554S101702Z383292AYECAVKY
NN 15F0B82D01D418AC EC YECCL 19971106165431S101702A068113AYECCL
NN 15F0D48C07A3F0A0 EC YECCL 19971107094920S101702A068113AYECCL
NN 15F545C1006F6182 EC YECCL 19971205161052S101702A068771AYECCL
NN 15FBB9E8013285E2 EC YECCL 19980115174315S101702M000856AYECCL
NN 15FF2F5C08CEC51E EC YECCL 19980206175302S101702A070225AYECCL
NN 160484CB09405DA6 EC YECCL 19980312162548S101702A070997AYECCL
NN 160487651199F533 EC YECCL 19980312175726S101702A070997AYECCL
NN 1607F2E713849224 EC YECCL 19980403141044S101702A071472AYECCL
NN 160A06221E744414 EC YECCL 19980416190801S101702M000898AYECCL
NN 1611DC2817134B14 EC YECCL 19980605154804S101702A072938AYECCL
NN 1616421401679618 EC YECCL 19980703152436S101702A073255AYECCL
NN 15F0B82E094D8612 EC YECCLAR 19971106165420S101702A068113AYECCLAR
NN 15F0D48B1181760E EC YECCLAR 19971107094906S101702A068113AYECCLAR
NN 15F545BA054E1286 EC YECCLAR 19971205161053S101702A068771AYECCLAR
NN 15FBBA06123E0AD2 EC YECCLAR 19980115174315S101702M000856AYECCLAR
NN 15FF2F4A016A922E EC YECCLAR 19980206175303S101702A070225AYECCLAR
NN 1607F2C41EA50197 EC YECCLAR 19980403141045S101702A071472AYECCLAR
NN 160A061805DF2698 EC YECCLAR 19980416190501S101702M000898AYECCLAR
NN 15F0B830153EB424 EC YECCLC 19971106165420S101702A068113AYECCLC
NN 15F0D48B1CA47328 EC YECCLC 19971107094907S101702A068113AYECCLC
NN 15F545BB0E124242 EC YECCLC 19971205161054S101702A068771AYECCLC
NN 15FF2F5A0246B50E EC YECCLC 19980206175303S101702A070225AYECCLC
NN 1607F2C70D40CC2E EC YECCLC 19980403141046S101702A071472AYECCLC
NN 160A060C03D40B44 EC YECCLC 19980416190502S101702M000898AYECCLC
NN 15F0B82F045E008E EC YECCLV 19971106165421S101702A068113AYECCLV
NN 15F0D48B18A41362 EC YECCLV 19971107094908S101702A068113AYECCLV
NN 15F545B80366C636 EC YECCLV 19971205161054S101702A068771AYECCLV
NN 15FF2F510865C1D4 EC YECCLV 19980206175304S101702A070225AYECCLV
NN 1607F2C607AE3242 EC YECCLV 19980403141033S101702A071472AYECCLV
NN 160A061B069AA6AE EC YECCLV 19980416190502S101702M000898AYECCLV
NN 15F0B83106C6764E EC YECCR 19971106165421S101702A068113AYECCR
NN 15F0D48A14858024 EC YECCR 19971107094908S101702A068113AYECCR
NN 15F545C100A253DE EC YECCR 19971205161055S101702A068771AYECCR
NN 15F71EFE0E9B63C2 EC YECCR 19971217103059S101702Z351294AYECCR
NN 15F7E7CA0BB619B0 EC YECCR 19971222101649S101702Z352108AYECCR
NN 15F956E80B940962 EC YECCR 19971231131652S101702Z353056AYECCR
NN 15FBB9DE1D7488C4 EC YECCR 19980115174315S101702M000856AYECCR
NN 15FF2F5D03F13F8C EC YECCR 19980206175304S101702A070225AYECCR
NN 160484D7173C5432 EC YECCR 19980312162559S101702A070997AYECCR
NN 1604875C12E9E7DC EC YECCR 19980312175737S101702A070997AYECCR
NN 16059B090567D7A6 EC YECCR 19980319142423S101702A071130AYECCR
NN 160640260A2A9EBE EC YECCR 19980323165535S101702A071245AYECCR
NN 1607F2E81A55C2E6 EC YECCR 19980403141046S101702A071472AYECCR
NN 160A062C1452E3E8 EC YECCR 19980416190503S101702M000898AYECCR
NN 1610972C0E9C23AC EC YECCR 19980528135617S101702A072724AYECCR
NN 1616420F068A6102 EC YECCR 19980703152441S101702A073255AYECCR
NY 17BB4C56179393A6 EC YECCRAC SYNC0000085638D27E
NY 1802CEB1139525E8 EC YECCRAC SYNC0000205890AF4C
NY 180B93601DBD3F83 EC YECCRAC SYNC00002558DA4B2A
NY 1819BDE801C16516 EC YECCRAC SYNC000028595120A9
NY 182DD6451B9CC616 EC YECCRAC SYNC00003059F9A49E
NY 183420040F747796 EC YECCRAC SYNC0000325A2E6436
NN 15F0B82F1F49F366 EC YECCRAR 19971106165422S101702A068113AYECCRAR
NN 15F0D48A00CA61E2 EC YECCRAR 19971107094909S101702A068113AYECCRAR
NN 15F545B409D26B5C EC YECCRAR 19971205161056S101702A068771AYECCRAR
NN 15FF2F551FB7E5EE EC YECCRAR 19980206175305S101702A070225AYECCRAR
NN 1607F2C608B1D4A2 EC YECCRAR 19980403141048S101702A071472AYECCRAR
NN 160A060906D81AD8 EC YECCRAR 19980416190504S101702M000898AYECCRAR
NN 15F0B82F12EAD36A EC YECCRC 19971106165423S101702A068113AYECCRC
NN 15F0D48A144CE4AC EC YECCRC 19971107094910S101702A068113AYECCRC
NN 15F545BA0AF8B628 EC YECCRC 19971205161056S101702A068771AYECCRC
NN 15FF2F570F10E654 EC YECCRC 19980206175306S101702A070225AYECCRC
NN 160484CF1A9BEEBA EC YECCRC 19980312162645S101702A070997AYECCRC
NN 160487510980BD14 EC YECCRC 19980312175740S101702A070997AYECCRC
NN 1607F2C608BE25AC EC YECCRC 19980403141048S101702A071472AYECCRC
NN 160A060D16C49E12 EC YECCRC 19980416190505S101702M000898AYECCRC
NN 15F0B8301141ED4C EC YECCRCR 19971106165423S101702A068113AYECCRCR
NN 15F0D48A12AEF7FA EC YECCRCR 19971107094911S101702A068113AYECCRCR
NN 15F545B71862DA86 EC YECCRCR 19971205161057S101702A068771AYECCRCR
NN 15FBB9DE0A10A518 EC YECCRCR 19980115174316S101702M000856AYECCRCR
NN 15FF2F5B09F0782E EC YECCRCR 19980206175307S101702A070225AYECCRCR
NN 1607F2C316838156 EC YECCRCR 19980403141049S101702A071472AYECCRCR
NN 160A061415820813 EC YECCRCR 19980416190505S101702M000898AYECCRCR
NN 1616421015998925 EC YECCRCR 19980703152444S101702A073255AYECCRCR
NN 15F0B83007DF8FC4 EC YECCRL 19971106165424S101702A068113AYECCRL
NN 15F0D48A07D29C26 EC YECCRL 19971107094912S101702A068113AYECCRL
NN 15F545B919345596 EC YECCRL 19971205161057S101702A068771AYECCRL
NN 15F6D603188DDDC2 EC YECCRL 19971215145836S101702Z350817AYECCRL
NN 15F956B9029215A2 EC YECCRL 19971231130928S101702Z353046AYECCRL
NN 15FBB9F819707B6D EC YECCRL 19980115174316S101702M000856AYECCRL
NN 15FF2F521788B1CC EC YECCRL 19980206175308S101702A070225AYECCRL
NN 160484CE0F9D314B EC YECCRL 19980312162647S101702A070997AYECCRL
NN 1604875F13D0FBCB EC YECCRL 19980312175741S101702A070997AYECCRL
NN 1607F2C213A6DF6E EC YECCRL 19980403141049S101702A071472AYECCRL
NN 160A06131A415106 EC YECCRL 19980416190507S101702M000898AYECCRL
NN 1616420D065CE312 EC YECCRL 19980703152444S101702A073255AYECCRL
NN 15F0B8300D5ED954 EC YECCRV 19971106165424S101702A068113AYECCRV
NN 15F0D4881021850A EC YECCRV 19971107094912S101702A068113AYECCRV
NN 15F545BA0B5DB7A2 EC YECCRV 19971205161058S101702A068771AYECCRV
NN 15FF2F581FFD9074 EC YECCRV 19980206175309S101702A070225AYECCRV
NN 160484C403CA55C4 EC YECCRV 19980312162532S101702A070997AYECCRV
NN 1604875901460CBE EC YECCRV 19980312175704S101702A070997AYECCRV
NN 1607F2C1176F4294 EC YECCRV 19980403141050S101702A071472AYECCRV
NN 160A060E18B95F84 EC YECCRV 19980416190508S101702M000898AYECCRV
NN 15F0B8300D7C7056 EC YECDCI 19971106165425S101702A068113AYECDCI
NN 15F0D48B136FDD42 EC YECDCI 19971107094913S101702A068113AYECDCI
NN 15F545BD0A1D1B02 EC YECDCI 19971205161058S101702A068771AYECDCI
NN 15FF2F5B09ED90EC EC YECDCI 19980206175310S101702A070225AYECDCI
NN 160484C60554B842 EC YECDCI 19980312162533S101702A070997AYECDCI
NN 1604875A091438D8 EC YECDCI 19980312175704S101702A070997AYECDCI
NN 1607F2CB07EA886E EC YECDCI 19980403141051S101702A071472AYECDCI
NN 160A06170BD33D3A EC YECDCI 19980416190509S101702M000898AYECDCI
NN 160A96500BAC1586 EC YECDCI 19980420091008S101702A071906AYECDCI
NN 160BBB7A05EF4EA4 EC YECDCI 19980427160238S101702A072040AYECDCI
NY 17C8A99219A4B2B0 EC YECDMAE SYNC00001056A8EDE4
NY 17C8A993064683A1 EC YECDMAE SYNC00001056A8EDE4CICS
NY 17EEF6801E478A10 EC YECDMAE SYNC00001957EA4559
NY 17EEF6810A7BE081 EC YECDMAE SYNC00001957EA4559CICS
NY 17C96ABA10AE6176 EC YECDMAU SYNC00001056AF4229
NN 160018711CE7C5AE EC YECGR2 19980212125839CGS101702A069923AYECGR2
NN 1600187000F79F58 EC YECGR2 19980212125839S101702A069923AYECGR2
NN 1600BFE91492DA18 EC YECGR2 19980216165226CGS101702A070496AYECGR2
NN 1600BFE7162F1488 EC YECGR2 19980216165226S101702A070496AYECGR2
NN 15FF2F5A02CF9692 EC YECGRI 19980206175312S101702A070225AYECGRI
NN 160041540F0188B0 EC YECGRI 19980213132027S101702A070420AYECGRI
NN 160484C40DB4FBC4 EC YECGRI 19980312162534S101702A070997AYECGRI
NN 1604875E13ACF042 EC YECGRI 19980312175705S101702A070997AYECGRI
NN 15F0B82E10911A5A EC YECIN 19971106165426S101702A068113AYECIN
NN 15F0D48B0FFBB328 EC YECIN 19971107094915S101702A068113AYECIN
NN 15F545BD0D1AF412 EC YECIN 19971205161103S101702A068771AYECIN
NN 15FF2F490C6FF92A EC YECIN 19980206175315S101702A070225AYECIN
NN 160484CB1E18039A EC YECIN 19980312162534S101702A070997AYECIN
NN 1604875C0C3A341C EC YECIN 19980312175705S101702A070997AYECIN
NN 1607F2DC09F82C28 EC YECIN 19980403141052S101702A071472AYECIN
NN 160A06171232C8CE EC YECIN 19980416190510S101702M000898AYECIN
NY 177E97CB097ACD0A EC YECLOK CRMA003976543BA4EF
NY 177E97CC012AE745 EC YECLOK CRMA003976543BA4EFCICS
NN 15F2EF330D950AE4 EC YECMUPD 19971120190914S101702M000855AYECMUPD
NN 15F387000255D614 EC YECMUPD 19971124134218S101702Z346407AYECMUPD
NN 15F3B4610C099D6C EC YECMUPD 19971125164536S101702A068569AYECMUPD
NN 15F3D3BB0BB4D45C EC YECMUPD 19971126112833S101702A068620AYECMUPD
NN 15F3D5D401BFFED8 EC YECMUPD 19971126124340S101702Z347060AYECMUPD
NN 15F545B70FB66FDC EC YECMUPD 19971205161051S101702A068771AYECMUPD
NN 15FBB9E31019A47F EC YECMUPD 19980115174318S101702M000856AYECMUPD
NN 15FF2F49181AFB64 EC YECMUPD 19980206175318S101702A070225AYECMUPD
NN 1600415403E607FA EC YECMUPD 19980213132028S101702A070420AYECMUPD
NN 161642111D850403 EC YECMUPD 19980703152435S101702A073255AYECMUPD
NN 15F0B82F152B51B2 EC YECRP 19971106165427S101702A068113AYECRP
NN 15F0D48B11FC3302 EC YECRP 19971107094916S101702A068113AYECRP
NN 15F545C01225D6AA EC YECRP 19971205161104S101702A068771AYECRP
NN 15FF2F49062A0CF8 EC YECRP 19980206175319S101702A070225AYECRP
NN 160484C41CDD0F82 EC YECRP 19980312162535S101702A070997AYECRP
NN 1604875E11025398 EC YECRP 19980312175706S101702A070997AYECRP
NN 1607F2DD0724DE18 EC YECRP 19980403141052S101702A071472AYECRP
NN 160A061612B29FE8 EC YECRP 19980416190511S101702M000898AYECRP
NN 1610972B18CC52C4 EC YECRP 19980528135618S101702A072724AYECRP
NN 15F0B82E04423B7A EC YECRPA 19971106165428S101702A068113AYECRPA
NN 15F0D48A1D480570 EC YECRPA 19971107094916S101702A068113AYECRPA
NN 15F545BB15A94788 EC YECRPA 19971205161104S101702A068771AYECRPA
NN 15FF2F4C007B2C5C EC YECRPA 19980206175319S101702A070225AYECRPA
NN 160484C3174DAEC4 EC YECRPA 19980312162535S101702A070997AYECRPA
NN 1604875B0FD6041D EC YECRPA 19980312175706S101702A070997AYECRPA
NN 1607F2DC1F8EBB30 EC YECRPA 19980403141052S101702A071472AYECRPA
NN 1609AC82002786F4 EC YECRPA 19980414134151S101702A071717AYECRPA
NN 160A060B1ED165E8 EC YECRPA 19980416190512S101702M000898AYECRPA
NN 15F0B82E04E9C92E EC YECRPAV 19971106165428S101702A068113AYECRPAV
NN 15F0D48B12E16B50 EC YECRPAV 19971107094917S101702A068113AYECRPAV
NN 15F545C0121A79C6 EC YECRPAV 19971205161105S101702A068771AYECRPAV
NN 15FF2F4C1F88B18C EC YECRPAV 19980206175320S101702A070225AYECRPAV
NN 160484CC0635351C EC YECRPAV 19980312162536S101702A070997AYECRPAV
NN 160487550C717D57 EC YECRPAV 19980312175707S101702A070997AYECRPAV
NN 1607F2CA16F8C5E6 EC YECRPAV 19980403141053S101702A071472AYECRPAV
NN 160A060C00394802 EC YECRPAV 19980416190513S101702M000898AYECRPAV
NN 1607F2CB032AD41C EC YECRPV 19980403141036S101702A071472AYECRPV
NN 1609AC820035CA36 EC YECRPV 19980414134152S101702A071717AYECRPV
NN 160A060A1E0929E8 EC YECRPV 19980416190513S101702M000898AYECRPV
NN 15F0B82E0BF34610 EC YECRT 19971106165428S101702A068113AYECRT
NN 15F0D48B0467727C EC YECRT 19971107094917S101702A068113AYECRT
NN 15F545BD0B9C052C EC YECRT 19971205161105S101702A068771AYECRT
NN 15FF2F590391F820 EC YECRT 19980206175322S101702A070225AYECRT
NN 160484C403D12582 EC YECRT 19980312162537S101702A070997AYECRT
NN 1604875F00B82508 EC YECRT 19980312175708S101702A070997AYECRT
NN 1607F2DC0A208E66 EC YECRT 19980403141054S101702A071472AYECRT
NN 160A060A034547EE EC YECRT 19980416190514S101702M000898AYECRT
NN 161642111C8054A1 EC YECRT 19980703152433S101702A073255AYECRT
NN 15F0B82D15233B98 EC YECRTV 19971106165429S101702A068113AYECRTV
NN 15F0D48A070F484A EC YECRTV 19971107094918S101702A068113AYECRTV
NN 15F545BC08DAF174 EC YECRTV 19971205161106S101702A068771AYECRTV
NN 15FF2F5A037AE4C6 EC YECRTV 19980206175323S101702A070225AYECRTV
NN 160484C40DE31684 EC YECRTV 19980312162537S101702A070997AYECRTV
NN 1604875F1A3BF29A EC YECRTV 19980312175708S101702A070997AYECRTV
NN 1607F2CB17A2D227 EC YECRTV 19980403141054S101702A071472AYECRTV
NN 160A060A1E0A437C EC YECRTV 19980416190514S101702M000898AYECRTV
NN 15FF2F490A9CA6E4 EC YECSAN 19980206175323S101702A070225AYECSAN
NN 1600415017B31312 EC YECSAN 19980213132028S101702A070420AYECSAN
NN 160484C313321A88 EC YECSAN 19980312162538S101702A070997AYECSAN
NN 160487570783DF34 EC YECSAN 19980312175709S101702A070997AYECSAN
NN 1616420E0CE0CFBF EC YECSAN 19980703152435S101702A073255AYECSAN
NN 15FF2F4C16BF00A4 EC YECSAS 19980206175324S101702A070225AYECSAS
NN 160041540F3D2242 EC YECSAS 19980213132029S101702A070420AYECSAS
NN 160484C51A2027F0 EC YECSAS 19980312162539S101702A070997AYECSAS
NN 1604875B02B0189E EC YECSAS 19980312175709S101702A070997AYECSAS
NN 16164212086E9087 EC YECSAS 19980703152436S101702A073255AYECSAS
NN 15FF2F470F39A554 EC YECSBR 19980206175325S101702A070225AYECSBR
NN 160041501368CE0A EC YECSBR 19980213132030S101702A070420AYECSBR
NN 160484C30329E5AE EC YECSBR 19980312162539S101702A070997AYECSBR
NN 160487521B312888 EC YECSBR 19980312175714S101702A070997AYECSBR
NN 15FF2F461700EBBA EC YECSDH 19980206175326S101702A070225AYECSDH
NN 16004151048CF610 EC YECSDH 19980213132030S101702A070420AYECSDH
NN 160484C81DE619D4 EC YECSDH 19980312162540S101702A070997AYECSDH
NN 160487570B55B50E EC YECSDH 19980312175716S101702A070997AYECSDH
NN 1616420E04FE214A EC YECSDH 19980703152437S101702A073255AYECSDH
NN 15FF2F5917BA309C EC YECSDOC 19980206175327S101702A070225AYECSDOC
NN 160041531948C7A2 EC YECSDOC 19980213132031S101702A070420AYECSDOC
NN 160484CD1A8B157A EC YECSDOC 19980312162536S101702A070997AYECSDOC
NN 16048756100F02D3 EC YECSDOC 19980312175707S101702A070997AYECSDOC
NN 16152AB40D046814 EC YECSDOC 19980626164741S101702A073406AYECSDOC
NN 1616421115748287 EC YECSDOC 19980703152437S101702A073255AYECSDOC
NN 15FF2F4F1510811A EC YECSDS 19980206175327S101702A070225AYECSDS
NN 160041560954D5F4 EC YECSDS 19980213132031S101702A070420AYECSDS
NN 160484C415E8CB7E EC YECSDS 19980312162540S101702A070997AYECSDS
NN 160487620F1F3ECA EC YECSDS 19980312175716S101702A070997AYECSDS
NN 1616420D04A1C21C EC YECSDS 19980703152438S101702A073255AYECSDS
NN 15FF2F5B198212D6 EC YECSEG 19980206175328S101702A070225AYECSEG
NN 1600415605BF38C8 EC YECSEG 19980213132031S101702A070420AYECSEG
NN 160484C90E7AFB84 EC YECSEG 19980312162541S101702A070997AYECSEG
NN 160487611AC4970E EC YECSEG 19980312175717S101702A070997AYECSEG
NN 1616421304F698FF EC YECSEG 19980703152438S101702A073255AYECSEG
NN 15FF2F5C11BB925C EC YECSES 19980206175329S101702A070225AYECSES
NN 1600414A1DE1C5D6 EC YECSES 19980213132036S101702A070420AYECSES
NN 160484D71DC306BC EC YECSES 19980312162542S101702A070997AYECSES
NN 16048762158B978E EC YECSES 19980312175717S101702A070997AYECSES
NN 16152AB51BABDC72 EC YECSES 19980626164741S101702A073406AYECSES
NN 161642131DB961A4 EC YECSES 19980703152438S101702A073255AYECSES
NN 15FF2F57082A662B EC YECSEX 19980206175329S101702A070225AYECSEX
NN 1600415600DF16DE EC YECSEX 19980213132037S101702A070420AYECSEX
NN 160484D608E3E36C EC YECSEX 19980312162543S101702A070997AYECSEX
NN 1604876415134F29 EC YECSEX 19980312175719S101702A070997AYECSEX
NN 161642121348C1C3 EC YECSEX 19980703152439S101702A073255AYECSEX
NN 15FF2F590C0AFBCC EC YECSFO 19980206175330S101702A070225AYECSFO
NN 160041490F2D5B4A EC YECSFO 19980213132037S101702A070420AYECSFO
NN 160484CD0BD3E7AA EC YECSFO 19980312162543S101702A070997AYECSFO
NN 1604875A07A87CEA EC YECSFO 19980312175719S101702A070997AYECSFO
NN 16164211143C049F EC YECSFO 19980703152440S101702A073255AYECSFO
NN 15F0B82E109039FC EC YECSFPR 19971106165429S101702A068113AYECSFPR
NN 15F0D48A1B6A84DE EC YECSFPR 19971107094918S101702A068113AYECSFPR
NN 15F545C0125233C2 EC YECSFPR 19971205161106S101702A068771AYECSFPR
NN 15FF2F47014A4A1C EC YECSFPR 19980206175330S101702A070225AYECSFPR
NN 1607F2CB121B4943 EC YECSFPR 19980403141055S101702A071472AYECSFPR
NN 160A06121A4A30AB EC YECSFPR 19980416190515S101702M000898AYECSFPR
NN 15FF2F5B07A35048 EC YECSHD1 19980206175331S101702A070225AYECSHD1
NN 16004155185CC706 EC YECSHD1 19980213132039S101702A070420AYECSHD1
NN 1600B45515A0C3AC EC YECSHD1 19980216095837S101702Z360013AYECSHD1
NN 1600BFE615815A32 EC YECSHD1 19980216165227S101702A070496AYECSHD1
NN 160484D31E39BD48 EC YECSHD1 19980312162544S101702A070997AYECSHD1
NN 1604876116E64CD4 EC YECSHD1 19980312175720S101702A070997AYECSHD1
NN 1616420C1FB74786 EC YECSHD1 19980703152440S101702A073255AYECSHD1
NN 15FF2F5B1D6B3BCA EC YECSHD2 19980206175332S101702A070225AYECSHD2
NN 160041531687EED4 EC YECSHD2 19980213132039S101702A070420AYECSHD2
NN 1600BFE70F114AA4 EC YECSHD2 19980216165227S101702A070496AYECSHD2
NN 160484CE162D15E5 EC YECSHD2 19980312162544S101702A070997AYECSHD2
NN 160487611FCACF76 EC YECSHD2 19980312175720S101702A070997AYECSHD2
NN 1607F2DD0C724220 EC YECSHD2 19980403141037S101702A071472AYECSHD2
NN 16152AB50A11958A EC YECSHD2 19980626164742S101702A073406AYECSHD2
NN 1616420E054F96AE EC YECSHD2 19980703152441S101702A073255AYECSHD2
NN 15F0B82E012FC6E8 EC YECSL 19971106165430S101702A068113AYECSL
NN 15F0D48B17AAB044 EC YECSL 19971107094918S101702A068113AYECSL
NN 15F545BD137FAFF4 EC YECSL 19971205161107S101702A068771AYECSL
NN 15F7008209FCAAF2 EC YECSL 19971216161903S101702Z351139AYECSL
NN 15FF2F560DAE488F EC YECSL 19980206175333S101702A070225AYECSL
NN 160041551E914834 EC YECSL 19980213132041S101702A070420AYECSL
NN 160484CF1D282D8C EC YECSL 19980312162545S101702A070997AYECSL
NN 160487610459B650 EC YECSL 19980312175721S101702A070997AYECSL
NN 160640261681A032 EC YECSL 19980323165535S101702A071245AYECSL
NN 1607F2CC0AE1ED3F EC YECSL 19980403141055S101702A071472AYECSL
NN 160A061E042CA1DA EC YECSL 19980416190516S101702M000898AYECSL
NN 160BBB7B12704280 EC YECSL 19980427160239S101702A072040AYECSL
NN 15FF2F5C15DC2968 EC YECSLV 19980206175333S101702A070225AYECSLV
NN 160041561AAC5290 EC YECSLV 19980213132041S101702A070420AYECSLV
NN 160484D806F1F62A EC YECSLV 19980312162546S101702A070997AYECSLV
NN 160487650BF685FF EC YECSLV 19980312175723S101702A070997AYECSLV
NN 16152AB601D491D6 EC YECSLV 19980626164742S101702A073406AYECSLV
NN 1616420D0AD154E0 EC YECSLV 19980703152443S101702A073255AYECSLV
NN 15FF2F5516E6C2FB EC YECSZS 19980206175335S101702A070225AYECSZS
NN 1600414E00E3ADCA EC YECSZS 19980213132043S101702A070420AYECSZS
NN 160484D21BC4957C EC YECSZS 19980312162547S101702A070997AYECSZS
NN 160487600B4AF5E8 EC YECSZS 19980312175724S101702A070997AYECSZS
NN 161642111CF02726 EC YECSZS 19980703152434S101702A073255AYECSZS
NY 17D2B1790CF11821 EC YECUCRK SYNC00001156FD2111
NY 182976891A82C016 EC YECUCRK SYNC00003059D501A0MVS
NY 17F3866D04B74B97 ED ED0830 ED00000040
NY 17E88BB70F9E3340 ED ED0830 ED00000043
NY 17F6DA811FC7E9FF ED ED0830 ED00000044
NY 17F664581D55D4C5 ED ED0830 ED00000049
AY 17E9A0A514429F90 ED ED0850 ED00000039
NY 17E4CCBA14127BDB ED ED0950 ED00000036
NY 17F036DD0D7F8420 ED ED0950 ED00000040
NY 17F6B26F1423814C ED ED0950 ED00000044
NY 1804A5A1054035F8 ED ED0950 ED00000047
NY 1810C2C401716D32 ED ED0950 ED00000052
NY 181CE48101B6A554 ED ED0950 ED00000056
NY 182A8F8C17CC8305 ED ED0950 ED00000062
NY 1839ED0D0A42A304 ED ED0950 ED00000071
NY 17F77E3A00D6B07E ED ED0960 DE00000049
NY 17F664CE19051000 ED ED0960 DE00000052
NY 17E9A0B6041BC336 ED ED0960 ED00000039
NY 17F4566D0A848A80 ED ED0960 ED00000040
NY 17F910D61ED793D1 ED ED0960 ED00000044
NY 1805CA9616A34104 ED ED0960 ED00000047
NY 180A596C0C38914E ED ED0960 ED00000058
NY 1810C2B0193ACBC4 ED ED5231 ED00000052
NY 1566417010DB145A ED YED0034 19950609S101702A044988AYED0034
NY 1568502A12EA53EE ED YED0034 19950622S101702M000590AYED0034
NY 156A7D740EF1DA36 ED YED0034 19950706S101702A045878AYED0034
NY 156BBE641F78FDAA ED YED0034 19950714S101702A045968AYED0034
NY 156EE5DC0F1AEF5E ED YED0034 19950803S101702A046536AYED0034
NY 156FFEB70D461402 ED YED0034 19950810S101702A046695AYED0034
NY 157463A6169F0466 ED YED0034 19950907S101702A047537AYED0034
NY 157528A60F3CE620 ED YED0034 19950912S101702Z207809AYED0034
NY 15757BFB1CF17C1C ED YED0034 19950914S101702A047657AYED0034
NY 157D387C01EA2D66 ED YED0034 19951102S101702M000602AYED0034
NY 1583CDC00E9B18B2 ED YED0034 19951214S101702A050106AYED0034
NY 1584E3BC0A5C26D6 ED YED0034 19951221S101702A050529AYED0034
NY 158ECA5B159EFCBC ED YED0034 19960222141003S101702A052082AYED0034
NY 15A4CE65134A8D48 ED YED0034 19960711161137S101702A055746AYED0034
NY 15A566D70ACC5286 ED YED0034 19960715110850S101702Z257531AYED0034
NY 15A5E7E70A73B282 ED YED0034 19960718160812S101702A055858AYED0034
NY 15B223D30ACB242C ED YED0034 19961004122313S101702A057542AYED0034
NY 15B2EC7401143D70 ED YED0034 19961009120403S101702Z269920AYED0034
NY 15B317B91753C5B0 ED YED0034 19961010135245S101702A057713AYED0034
NY 15B666561EEE08D2 ED YED0034 19961031145508S101702A058043AYED0034
NY 15B9B18E0267BF18 ED YED0034 19961121135414S101702A058872AYED0034
NY 15CC68211B0C0B7A ED YED0034 19970320153410S101702M000778AYED0034
NY 15D87EBC1D45DBDB ED YED0034 19970605133549S101702A064376AYED0034
NY 15E38AC400E62ECF ED YED0034 19970814202936S101702A065906AYED0034
NY 15EA1A2B1C06D80E ED YED0034 19970925142356S101702A067006AYED0034
NY 15F0FD7200FFCEE8 ED YED0034 19971108101340S101702Z343980AYED0034
NY 15F0FE010A00B682 ED YED0034 19971108103304S101702Z343980AYED0034
NY 15F1CEDC12072222 ED YED0034 19971113150814S101702A068155AYED0034
NY 15F74CAA1A20C0D8 ED YED0034 19971218134249S101702A069204AYED0034
NY 15FBBA1606AA183C ED YED0034 19980115174915S101702M000856AYED0034
NY 160A062D0B3E9FA4 ED YED0034 19980416190527S101702M000898AYED0034
NY 15685174095D110A ED YED0120 19950622S101702A045513AYED0120
NY 156BBE640505F766 ED YED0120 19950714S101702A045968AYED0120
NY 156EE5DB0A2F55CC ED YED0120 19950803S101702A046536AYED0120
NY 156FFEB6093D4742 ED YED0120 19950810S101702A046695AYED0120
NY 1574639E0C6EB142 ED YED0120 19950907S101702A047537AYED0120
NY 157528AE03A5E27A ED YED0120 19950912S101702Z207810AYED0120
NY 15757BFA0FCEFFB2 ED YED0120 19950914S101702A047657AYED0120
NY 157D38821A5BA470 ED YED0120 19951102S101702M000602AYED0120
NY 15AEBDC4015853E2 ED YED0120 19960912212211S101702A057173AYED0120
NY 15B223CF0FEF4474 ED YED0120 19961004122314S101702A057542AYED0120
NY 15B2A9B60121523C ED YED0120 19961007201605S101702Z269643AYED0120
NY 15B2EB730DA6AA98 ED YED0120 19961009112903S101702Z269915AYED0120
NY 15B317B819BBFB8A ED YED0120 19961010135243S101702A057713AYED0120
NY 15B9B18B120E5FA8 ED YED0120 19961121135415S101702A058872AYED0120
NY 15CC68281F88EF0C ED YED0120 19970320153410S101702M000778AYED0120
NY 15D0CB7E085D9D44 ED YED0120 19970417134223S101702A063129AYED0120
NY 15D0CC7117DFCF44 ED YED0120 19970417141749S101702A063129AYED0120
NY 15D87EB8047D5C74 ED YED0120 19970605133550S101702A064376AYED0120
NY 15F74CA2076C224E ED YED0120 19971218134250S101702A069204AYED0120
NY 15FBBA101F5323B4 ED YED0120 19980115174927S101702M000856AYED0120
AY 17E32DC310229A62 ED YED5203 ED0000003657876B64
AY 17EEA6BE0CB65965 ED YED5203 ED0000004057E7A890
AY 1810C2560D959EF6 ED YED5203 ED000000525905C672
AY 181CE4530829D875 ED YED5203 ED00000056596B8D61
NY 15700051176AB94C ED YEDSAM 19950810S101702A046615AYEDSAM
NY 15921AC110CE0074 ED YEDSAM 19960314161457S101702M000666AYEDSAM
NY 15BE17851035E7FA ED YEDSAM 19961219133558S101702A059912AYEDSAM
NY 17C7B36A1D8D0FC8 EF EF5940 NOST000168
NY 17C1924B0A132399 EK EK6413 EMA0000030
NY 17E1A3850FCCF80D EK EK6413 EMA0000034
NY 17EEAE84187F09D9 EK EK6413 EMA0000048
NY 17E1C2440DC4CD36 EK EK6430 EMA0000034
NY 17E1A387132517C3 EK EK6481 EMA0000034
NY 17E1A439161BBAA5 EK EK6482 EMA0000034
NY 17D25C881E21F8BD EK EK6482 EMA0000039
NY 17E1A41C1AE65BF8 EK EK6510 EMA0000034
NY 17D347E80EF19A3A EK EK6510 EMA0000039
NY 17E1A41D1F2550AD EK EK6520 EMA0000034
NY 17D2602F08F76315 EK EK6520 EMA0000039
NY 17EEAF4F04638410 EK EK6520 EMA0000048
NY 17E1A4400D523B90 EK EK6603 EMA0000034
NY 17D25C9601951F3A EK EK6603 EMA0000039
NY 17E1A41E02189BE0 EK EK6710 EMA0000034
NY 17D25CA61F344B17 EK EK6710 EMA0000039
NY 17C18E7F176F0EA2 EK EK6841 EMA0000030
NY 17E1A4200897B44C EK EK6841 EMA0000034
NY 17EEAF9E18CE7293 EK EK6841 EMA0000048
NY 17E1C2470F915C7A EK EK6866 EMA0000034
NY 17E1A45B0A93338D EK EK7618 EMA0000034
NY 17D25D9C0E1F3C1D EK EK7618 EMA0000039
NY 17E1A4831D6E96B9 EK EK7660 EMA0000034
NY 17D175FF02AB80BE EK EK7660 EMA0000039
NY 17EED3EA056D3EC9 EK EK7660 EMA0000048
NY 17E1A4821936F725 EK EK7661 EMA0000034
NY 17D175B20CB8FC90 EK EK7661 EMA0000039
NY 17E1A469191AB638 EK EK7663 EMA0000034
NY 17D25DAB1EC924C8 EK EK7663 EMA0000039
NY 17E1A48304A4E6CD EK EK7664 EMA0000034
NY 17D175B30EB36EF3 EK EK7664 EMA0000039
NY 17E1A4830F169014 EK EK7666 EMA0000034
NY 17D175FF1EC6E0F1 EK EK7666 EMA0000039
NY 17E1A4831742C891 EK EK7667 EMA0000034
NY 17D17602053BD87A EK EK7667 EMA0000039
NY 17E1A4921C25946D EK EK7668 EMA0000034
NY 17D175B51FC7BD65 EK EK7668 EMA0000039
NY 17EED42D0FDF9559 EK EK7668 EMA0000048
NY 17E1A48F1ABCAAD1 EK EK7672 EMA0000034
NY 17E1A35C07A3BE74 EK EK7681 EMA0000034
NY 17D2605B1D3CAA78 EK EK7681 EMA0000039
NY 17EBAE821DDF05B4 EK EK7681 EMA0000048
NY 17E1A4CB081CB845 EK EK8710 EMA0000034
NN 15EF996A1ACC4EFA EM EM0060 19971030134545S101702A067897AEM0060
NN 15FA9D32110EF5C7 EM EM0060 19980108153802S101702M000886AEM0060
NN 152994E8113CD614 EM EM0070 19940519143412S101702A034287AEM0070
NN 15ECE58705353AA0 EM EM0070 19971013090717S101702A067405AEM0070
NN 15ECE58713D35E82 EM EM0080 19971013090718S101702A067405AEM0080
NN 15A3B13C172C9DF0 EM EM0900 19960704140613S101702A055506AEM0900
NN 15D8849107A9C884 EM EM0900 19970605170247S101702A064138AEM0900
NN 15ECE5851EE2590C EM EM0900 19971013090719S101702A067405AEM0900
NN 1514B83B0DC8CC08 EM YEM0061
NN 152994CA0221EF9C EM YEM0061 19940519142707S101702A034287AYEM0061
NN 15337F0507367F0C EM YEM0061 19940721163814S101702M000430AYEM0061
NN 154A9E681CA1DF62 EM YEM0061 19941215194000S101702M000522AYEM0061
NN 1558E4FE0B6522AC EM YEM0061 19950316154216S101702A042912AYEM0061
NN 1558EADE19AB5752 EM YEM0061 19950316191311S101702A042912AYEM0061
NN 1568502817757B04 EM YEM0061 19950622S101702M000590AYEM0061
NN 157233531614ADDE EM YEM0061 19950824S101702M000598AYEM0061
NN 157B01331F7A1DA4 EM YEM0061 19951019S101702M000621AYEM0061
NN 157C16B3083537D8 EM YEM0061 19951026S101702A048979AYEM0061
NN 157EEA2C176B6C54 EM YEM0061 19951113S101702A048936AYEM0061
NN 158197AC147EA2F2 EM YEM0061 19951130S101702A049980AYEM0061
NN 1584E7221B6BE9A4 EM YEM0061 19951221S101702A050563AYEM0061
NN 158A0DF90FDFA6AA EM YEM0061 19960123S101702A051440AYEM0061
NN 15921AC70E6FF484 EM YEM0061 19960314161545S101702M000666AYEM0061
NN 159796990F7B0F96 EM YEM0061 19960418134157S101702M000672AYEM0061
NN 159BD7EB1ECDB4A0 EM YEM0061 19960515152929S101702M000684AYEM0061
NN 15A9321F1B3401E4 EM YEM0061 19960808143147S101702A056273AYEM0061
NN 15AD9A501ACCC89C EM YEM0061 19960905153007S101702M000711AYEM0061
NN 15AEBEA00B48655E EM YEM0061 19960912215244S101702M000710AYEM0061
NN 15B0E4210CE53A2A EM YEM0061 19960926133930S101702A057314AYEM0061
NN 15B1047A0F52C930 EM YEM0061 19960927085815S101702Z268032AYEM0061
NN 15B1FE8D1C446AB0 EM YEM0061 19961003140825S101702A057537AYEM0061
NN 15ECE57809449E14 EM YEM0061 19971013090422S101702A067405AYEM0061
NN 15FA9CA80186FA3A EM YEM0061 19980108153349S101702M000886AYEM0061
NN 1514B84204A1D5C6 EM YEM0064
NN 152994CA18CEA1CC EM YEM0064 19940519142722S101702A034287AYEM0064
NN 157233520B29A8F0 EM YEM0064 19950824S101702M000598AYEM0064
NN 157B013609038C48 EM YEM0064 19951019S101702M000621AYEM0064
NN 158A0DF909B1805C EM YEM0064 19960123S101702A051440AYEM0064
NN 158DB1B910807322 EM YEM0064 19960215144640S101702A052021AYEM0064
NN 15921AC91B15A402 EM YEM0064 19960314161635S101702M000666AYEM0064
NN 159BD7EA0650B316 EM YEM0064 19960515152934S101702M000684AYEM0064
NN 15ECE57507CC61FA EM YEM0064 19971013090424S101702A067405AYEM0064
NN 1514B84313396AE6 EM YEM0065
NN 152994CB19A92F88 EM YEM0065 19940519142723S101702A034287AYEM0065
NN 15337F07120015E4 EM YEM0065 19940721163815S101702M000430AYEM0065
NN 154A9E6904259C0C EM YEM0065 19941215193958S101702M000522AYEM0065
NN 156A81DE172F3BE0 EM YEM0065 19950706S101702M000589AYEM0065
NN 1572335400A67C02 EM YEM0065 19950824S101702M000598AYEM0065
NN 157B013619D82A3A EM YEM0065 19951019S101702M000621AYEM0065
NN 158A0DFA08AE3C46 EM YEM0065 19960123S101702A051440AYEM0065
NN 159BD7EA0E3015F2 EM YEM0065 19960515152930S101702M000684AYEM0065
NN 15AEBEA0003BE012 EM YEM0065 19960912215245S101702M000710AYEM0065
NN 15ECE5771F7CE15A EM YEM0065 19971013090419S101702A067405AYEM0065
NN 15FA9CA805C4D2E6 EM YEM0065 19980108153339S101702M000886AYEM0065
NN 1514B8441565B9E8 EM YEM0900
NN 152994CD0210D646 EM YEM0900 19940519142705S101702A034287AYEM0900
NN 1558E525004548C8 EM YEM0900 19950316154229S101702A042912AYEM0900
NN 1558EB0310B3C374 EM YEM0900 19950316191311S101702A042912AYEM0900
NN 1572335610182A54 EM YEM0900 19950824S101702M000598AYEM0900
NN 157B01371F894A42 EM YEM0900 19951019S101702M000621AYEM0900
NN 1584E4E90EBBDA2C EM YEM0900 19951221S101702A050710AYEM0900
NN 158A0DFB046626F6 EM YEM0900 19960123S101702A051440AYEM0900
NN 15A06A5E082E15C4 EM YEM0900 19960613174145S101702A054886AYEM0900
NN 15A17DF715AF230C EM YEM0900 19960620140644S101702A055061AYEM0900
NN 15ECE57817CE0694 EM YEM0900 19971013090419S101702A067405AYEM0900
NY 17797019127C8689 EQ YEQISRK CRMA00418654106690
NY 17EBD49D0A8893DC EQ YEQISRK EAGL00001857CFFEDB
NY 182A66E10DD66DF5 EQ YEQISRK EAGL00002459DCE1D0
NY 182A66E30C7841E8 EQ YEQISRK EAGL00002459DCE1D0CICSMVS
NY 182A66E21AE8F997 EQ YEQISRK EAGL00002459DCE1D0MVS
NY 1784774107BB637A EQ YEQKDGP CRMA004309546CDAE6
NY 17ED16951F6126F5 EQ YEQKDGP GSER00010957DA8BC7
NY 181642531F0A6578 EQ YEQKDGP GSER0001775933E982
NY 18280ADF1B68D8DD EQ YEQKDGP GSER00018759C91710
NY 18280AE2014FEBAF EQ YEQKDGP GSER00018759C91710MVS
NY 178BFD1A05D461E5 EQ YEQRFT GSER00001454ABF60E
NY 17A6AD1B02F6C241 EQ YEQWAEC APEN000014558BE31D
NY 17FD703A0C34F0B8 ER ER5080 EAMR000018
NY 180184AC16541806 ER ER5080 EAMR000019
NY 180552661A58394D ER ER5080 EAMR000022
NY 18104E6103B08172 ER ER5080 EAMR000028
NY 180985BF048D7514 ER ER5080 EAMR000029
NY 18167417130F530E ER ER5080 EAMR000034
NY 181E1DEA0F45DB3D ER ER5080 EAMR000035
NY 181DFE691C0BF474 ER ER5080 EAMR000044
NY 182856FA1C3F9E6A ER ER5080 EAMR000048
NY 1837E6FC116AFB5B ER ER5080 EAMR000061
NY 17F8B94F16A57745 ER ER8020 EAMR000017
NY 17FEB31F193E8585 ER ER8020 EAMR000019
NY 1802F22E10766C5A ER ER8020 EAMR000022
NY 180CA6C103C836A5 ER ER8020 EAMR000028
NY 181AD31F13F7471E ER ER8020 EAMR000035
NY 182EC87C03DB7ABC ER ER8020 EAMR000048
NY 183400A71EDB3498 ER ER8020 EAMR000053
NY 183BD1340BA2B019 ER ER8020 EAMR000061
NY 183A92660A46E3C7 ER ER8020 EAMR000063
NY 1840B2DF1901E4D0 ER ER8020 EAMR000069
NY 17F480FC1001B81A ER YERBER EAMR000010
NY 17ED10CC14688800 ER YERBER EAMR000012
NY 17F8BF9312A0E17B ER YERBER EAMR000017
NY 17FB10DE1CCD2C5F ER YERBER EAMR000018
NY 1800B8411E9D7863 ER YERBER EAMR000019
NY 17F81A7302C1DF27 ER YERBER EAMR000020
NY 1807F9691CD75BD6 ER YERBER EAMR000022
NY 1800985C0E26B974 ER YERBER EAMR000024
NY 180FD3551D55D036 ER YERBER EAMR000028
NY 180A5AD201662B06 ER YERBER EAMR000029
NY 180CB2E10D76F6E2 ER YERBER EAMR000033
NY 1815A3EA1D2C7B70 ER YERBER EAMR000034
NY 181F3E541E46A486 ER YERBER EAMR000035
NY 181A30160089B5E9 ER YERBER EAMR000042
NY 182D838D099E1269 ER YERBER EAMR000048
NY 1831CA6D0A25F6D0 ER YERBER EAMR000053
NY 17E1EAC319BE8F5A ER YERDCU0 EAMR000003
NY 17E9804F0DE7FF19 ER YERDCU0 EAMR000005
NY 17F1539B14B62745 ER YERDCUR EAMR00001057FE19A1
NY 17EC9E3B047884F3 ER YERDCUR EAMR00001257D69A33
NY 17F68C471260A97F ER YERDCUR EAMR0000175829D861
NY 17FC840307C84762 ER YERDCUR EAMR000018585BE7D9
NY 18063CFF01BDDFE7 ER YERDCUR EAMR00002258AD7708
NY 180FD65B04B75E4E ER YERDCUR EAMR00002858FE0AE8
NY 1812FBAD0552EBE9 ER YERDCUR EAMR00003559186E33MVS
NY 182601F20B51C94C ER YERDCUR EAMR00004859B80521MVS
NY 1839F102109635E7 ER YERDCUR EAMR0000615A5F2EBC
NY 1839F104038A7D5C ER YERDCUR EAMR0000615A5F2EBCMVS
NY 17E1EA611713CF7D ER YERDGE0 EAMR000003
NY 17E9806817F60985 ER YERDGE0 EAMR000005
NY 17F33AC11B7C623E ER YERDGET EAMR000010580E1012
NY 17EC9E39025DD90F ER YERDGET EAMR00001257D69A21
NY 17F8DEF7178562B3 ER YERDGET EAMR000017583D54F9
NY 1805C85006D53059 ER YERDGET EAMR00002258A9A437
NY 1811E45A1D56DE45 ER YERDGET EAMR000028590F474F
NY 1812FBB310C7372F ER YERDGET EAMR00003559186E6CMVS
NY 1825F75F1CE04F44 ER YERDGET EAMR00004859B7AC83
NY 1825F762167B341E ER YERDGET EAMR00004859B7AC83MVS
NY 17E1EA6116ED0BFB ER YERDIN0 EAMR000003
NY 17E97A9B07E92630 ER YERDIN0 EAMR000005
NY 17E99CFB1A3A4217 ER YERDINS EAMR00000557BD6545
NY 17F183BD111074A0 ER YERDINS EAMR00001057FFAD64
NY 17F68C2409419232 ER YERDINS EAMR0000175829D73A
NY 1802A70C083C7DB1 ER YERDINS EAMR000022588F62B1
NY 180A7F4A1D3762B7 ER YERDINS EAMR00002858D1311B
NY 1812FBB51CB591AC ER YERDINS EAMR00003559186E95
NY 1812FBB900011DA3 ER YERDINS EAMR00003559186E95MVS
NY 17E1EA600D19F422 ER YERDUP0 EAMR000003
NY 17E97AAC09FDAE7D ER YERDUP0 EAMR000005
NY 17EA9B520F9B6679 ER YERDUPD EAMR00000557C5BAD0
NY 17F1F8D80FA1F64A ER YERDUPD EAMR000010580383BA
NY 17F68C380122F678 ER YERDUPD EAMR0000175829D7DB
NY 17FC0C1D0EDA6E0C ER YERDUPD EAMR0000185857FA28
NY 1802A9731B21AA4B ER YERDUPD EAMR000022588F76E9
NY 1811E44018AC16D1 ER YERDUPD EAMR000028590F467B
NY 182652A41B0C051E ER YERDUPD EAMR00004859BAAA26
NY 1803185A0432B3A6 ER YERPRI EAMR000022
NY 18111B5904BB0BDA ER YERPRI EAMR000028
NY 18089AD00FDD8734 ER YERPRI EAMR000029
NY 18166C5B0817B4F8 ER YERPRI EAMR000034
NY 181FB5831ABB3E70 ER YERPRI EAMR000035
NY 181A2FFE00649D5A ER YERPRI EAMR000042
NY 181FB21A1FE4E323 ER YERPRI EAMR000045
NY 1826F0730C388176 ER YERPRI EAMR000048
NY 182F98EB053A8CD0 ER YERPRI EAMR000053
NY 1839F52203BA7BC2 ER YERPRI EAMR000061
NY 158A64AE135ACFC6 EV EV0600 19960125S101702A051501AEV0600
NY 15A5E43C12F2EE58 EV EV0600 19960718135628S101702A055841AEV0600
NY 16059A510FD3BAB4 EV EV5080 19980319140048S101702A070940AEV5080
NY 17E198DA0B38723D EV EV7030 EKVS000013
NY 17C78DE50E100676 EV EV7040 EKVS000010
NY 158A64AD02795C50 EV EV7130 19960125S101702A051501AEV7130
NY 17A65CFB093C2166 EV EV8100 EKVS000006
NY 177A892D1F1C7776 EV EV8220 A19R002528
NY 15C4B61C0EE8F8B0 EV YEVSICH 19970130162645S101702A061187AYEVSICH
NY 15DCE40D038545EA EV YEVSICH 19970703125234S101702A064768AYEVSICH
NY 15F632A60069883A EV YEVSICH 19971211133042S101702A068862AYEVSICH
NN 15B9B6B502EF5E20 EW EW7010 19961121165906S101702A058971AEW7010
NN 15BACAC614420C4E EW EW7010 19961128134025S101702A059169AEW7010
NN 15D0C9D1065BD84A EW EW7010 19970417124259S101702A063168AEW7010
NN 15D5300D19A5D517 EW EW7020 19970515123226S101702A063787AEW7020
NN 15D64F5F09BC6D0B EW EW7020 19970522155508S101702A064034AEW7020
NY 17CBEB64122862E6 EX EX0500 EXPN000020
NY 17F45BA502163A41 EX EX5020 EXPN000051
NY 17EC042310EF0DA1 EX EX5020 EXPN000052
NY 1804369115B6DA5A EX EX5020 EXPN000059
NY 17FE689B14661F10 EX EX5020 EXPN000062
NY 17E197B6137F4E9D EX EX5030 EXPN000039
NY 17F1F50D1B2B90D7 EX EX5030 EXPN000051
NY 180785CC091F6A55 EX EX5030 EXPN000059
NY 17E9560C0AF347FA EX EX6010 EXPN000050
NY 17F1F5260A32DBF8 EX EX6010 EXPN000051
NY 180436B1092FE606 EX EX6010 EXPN000059
NY 17FE68321CF6EF76 EX EX6010 EXPN000062
NY 17E9560E0A68FC74 EX EX6020 EXPN000050
NY 180436AA12896C3A EX EX6020 EXPN000059
NY 15B40F211A48DD32 EX EX7010 19961016172831S101702A057202AEX7010
NY 15FA9CC00F901AA0 EX EX7010 19980108153804S101702M000886AEX7010
NY 17C9756E06D8B8BB EX EX8030 EXPN000020
NY 159083F411E8405A EX EX8888 19960304133631S101702Z236837AEX8888
NY 159088F91A7BEC24 EX EX8888 19960304163609S101702Z236837AEX8888
NY 15A9CC1E0CCCFEE8 EX EX8888 19960812102421S101702Z261211AEX8888
NY 17F26D9C017CF557 EX YEX0003 EXPN00005158075739
NY 17EB8CCA019D77C3 EX YEX0003 EXPN00005357CDA468
NY 15A29B9013B916B6 EX YEXERG
NY 1578CA730AC3964E EX YEXERG 19951005S101702A048266AYEXERG
NY 157A826407C68504 EX YEXERG 19951016S101702Z213055AYEXERG
NY 157D319A15207EDE EX YEXERG 19951102S101702A049197AYEXERG
NY 157D584516B499E6 EX YEXERG 19951103S101702Z216005AYEXERG
NY 157DD3E30ABDF378 EX YEXERG 19951106S101702Z216751AYEXERG
NY 157F69BD0AD5EEE0 EX YEXERG 19951116S101702A049464AYEXERG
NY 158F701000527FFA EX YEXERG 19960226170142S101702A052326AYEXERG
NY 158FBCDC199B20AE EX YEXERG 19960228145027S101702A052419AYEXERG
NY 158FBDA41EE2753E EX YEXERG 19960228151903S101702A052419AYEXERG
NY 158FBEAE157623C6 EX YEXERG 19960228155542S101702A052419AYEXERG
NY 158FBF1E0FD2FA18 EX YEXERG 19960228161103S101702A052419AYEXERG
NY 1590D9AD10744B34 EX YEXERG 19960306164420S101702A052579AYEXERG
NY 15921751133DD504 EX YEXERG 19960314141339S101702A052439AYEXERG
NY 15B40F150B5CA384 EX YEXERG 19961016172704S101702A057202AYEXERG
NY 15B664871C972068 EX YEXERG 19961031134918CGS101702A058312AYEXERG
NY 15B6648418AC57A8 EX YEXERG 19961031134918S101702A058312AYEXERG
NY 15CA30E416B57CE6 EX YEXERG 19970306131334CGS101702A061962AYEXERG
NY 15CA30E217120BC4 EX YEXERG 19970306131334S101702A061962AYEXERG
NY 15E3802F06B170EE EX YEXERG 19970814141321CGS101702M000800AYEXERG
NY 15E3801A12F6A18E EX YEXERG 19970814141321S101702M000800AYEXERG
NY 15FA9CA806B826D0 EX YEXERG 19980108153340CGS101702M000886AYEXERG
NY 15FA9CA318EC4E90 EX YEXERG 19980108153340S101702M000886AYEXERG
NY 160E640602611798 EX YEXERG 19980514135917CGS101702A072308AYEXERG
NY 160E64011C58086F EX YEXERG 19980514135917S101702A072308AYEXERG
NY 16173001093E34D9 EX YEXERG 19980709132140CGS101702A073235AYEXERG
NY 16172FFF0DFD3771 EX YEXERG 19980709132140S101702A073235AYEXERG
NY 158F6C62108FBF68 EX YEXERG A
NY 1615952900B52150 FARDX DLLST1
NY 176115AA1BD3BF36 FC FC0010 CRMA003935
NY 181B2C1012D10CA9 FC FC0010 KLOM000062
NY 15B8A6000554B20A FC FC0020 19961114221845S101702A058752AFC0020
NY 15C5CFB9066B8104 FC FC0020 19970206162503S101702A061517AFC0020
NY 15D1440911D11632 FC FC0030 19970420133742S101702Z307085AFC0030
NY 15F272141486C8A8 FC FC0030 19971117163042S101702Z345149AFC0030
NY 15F2741C0775176E FC FC0030 19971117174349S101702Z345149AFC0030
NY 17F131A20AF5B84E FC FC0050 KLOM000050
NY 181CDCC700146260 FC FC0050 KLOM000062
NY 1583CFBF17F11168 FC FC0110 19951214S101702A050488AFC0110
NN 159F6A51192B35CE FC FC0110 19960607085733S101702A054822AFC0110
NY 1583CFBF0E97E704 FC FC0130 19951214S101702A050488AFC0130
NY 159F6A510105E148 FC FC0130 19960607085734S101702A054822AFC0130
NN 1563BF580033685A FC FC0400 19950524170555S101702A044625AFC0400
NN 1583CFB30C9CFCB8 FC YFCM02 19951214S101702A050488AYFCM02
NN 1583CFB315EE2A20 FC YFCM03 19951214S101702A050488AYFCM03
NY 1578CC300ECCEEEC FD FD8100 19951005S101702M000617AFD8100
NY 15883B181CD1D36A FD FD8100 19960111S101702A051006AFD8100
NY 159796A80233C87A FD FD8100 19960418134339S101702M000672AFD8100
NY 15A0652F089DD038 FD FD8100 19960613143639S101702A054192AFD8100
NY 17E307D61170465D FF FF0010 FFOR000021
NY 17EF4D4B0B0DEFBB FF FF0010 FFOR000023
NY 17F6B45D1C3A0010 FF FF0010 FFOR000024
NY 17F663451F4D51C0 FF FF0010 FFOR000027
NY 17E926651F0826E1 FF FF0020 FFOR000022
NY 17F0DBB515459805 FF FF0020 FFOR000023
NY 17F81E9919D8B126 FF FF0020 FFOR000024
NY 17F66346063C6A3C FF FF0020 FFOR000027
NY 17F819AA1A687185 FF FF0020 FFOR000029
NY 17FBE3FF0D052DA2 FF FF0020 FFOR000030
NY 17E9266F01CBE51A FF FF0030 FFOR000022
NY 17F0DBB51923338F FF FF0030 FFOR000023
NY 17F81E9A0CA2047C FF FF0030 FFOR000024
NY 17F663460CE857A7 FF FF0030 FFOR000027
NY 17F819AC00A6E720 FF FF0030 FFOR000029
NY 17FBE40018A7F88D FF FF0030 FFOR000030
NY 17E1993E1111147C FF FF5000 FFOR000021
NY 17EF4D4E12F2AC35 FF FF5000 FFOR000023
NY 17F6B4390BE78275 FF FF5000 FFOR000024
NY 17E926261965C322 FF YFF0004 FFOR00002257B98070
NY 17EF4C9A12F245E0 FF YFF0004 FFOR00002357ED17E7
NY 1794E96011C50DD7 FF YFF0015 FFOR00000554F6CFF5
NY 17F3368814223FE3 FI FI1900 BKUR000041
NY 1802F3FD105F252E FI FI1900 BKUR000052
NY 17E4C446035A844D FI FI2100 BKUR000020
NY 17ECA2F506EC7757 FI FI2100 BKUR000041
NY 1802F4011F2A0A73 FI FI2100 BKUR000052
NY 17F336AD0209156A FI FI5066 BKUR000041
NY 17F336B10B83A2A6 FI FI5067 BKUR000041
NY 17F92F821AFBB2E1 FI FI5067 BKUR000047
NY 1806166C14EA9FCE FI FI5067 BKUR000052
NY 17EAB7B81AD228B0 FI FI5200 BKUR000038
NY 17F14F631AA9FE90 FI FI5200 BKUR000041
NN 1802F45412A8FB77 FI FI5200 BKUR000052
NY 17E5179104CF21CD FI FI5260 BKUR000018
NY 17EE0A3F1210A64B FI FI5260 BKUR000041
NY 1839CCFE0FD5806C FI FI5600 BKUR000096
NY 177D37590992CE08 FI YFI0110 A06M02733354301877
NY 181873E814542A5E FI YFI0110 BKUR0000805946506C
NY 182625F00ECC6499 FI YFI0110 BKUR00009559B932C8MVS
NY 1839CA730834BE2F FI YFI0110 BKUR0000965A5DE7BD
NY 1839CA750924A4B4 FI YFI0110 BKUR0000965A5DE7BDMVS
NY 177D375A073D7364 FI YFI0120 A06M02733354301880
NY 181873EE126A8118 FI YFI0120 BKUR0000805946509A
NY 182625EF1F8D0DA8 FI YFI0120 BKUR00009559B932CCMVS
NY 1839CA7715CBAEBE FI YFI0120 BKUR0000965A5DE7D4
NY 1839CA7906DA62A9 FI YFI0120 BKUR0000965A5DE7D4MVS
NY 17E956DB00BEE5EA FI YFI0140 BKUR00003857BB18F4
NY 15B455830C0F1B84 FI YFI7201 19961018112744S101702Z271383AYFI7201
NY 182EA7E4060BA193 FI YFIWMKG BKUR0001165A008305
NY 16C0C7BD0C245E90 FRNCOL01 FRNA0010
NY 17CF71E11BB5D3A3 FRNCOL01 FRNA0080
NY 16C0C7BF10256446 FRNCOL01 FRNA0090
NY 16C16606141B3A85 FRNCOL01 FRNV0010
NY 165453040F28F7E8 FRNCOL01 FRNV0020
NY 1653DC83116290ED FRNCOL01 FRNV0030
NY 168BCD8815A155A4 FRNCOL01 FRNV0040
NY 168BCD9015D3429D FRNCOL01 FRNV0050
NY 1654EF7A0DFAA909 FRNCOL01 FRNV0060
NY 17D039BC09098D7C FRNCOL01 FRNV0080
NY 16FA6C8E1DD8C165 FRNCOL01 FRNV0090
NY 1634778217891D68 FRNIBMCL FRNA0010
NY 1634778A02168C10 FRNIBMCL FRNA0020
NY 1634779117DEC4A8 FRNIBMCL FRNA0030
NY 163477991459D64C FRNIBMCL FRNA0040
NY 163477A007BAD74C FRNIBMCL FRNA0050
NY 163477A70ABC080C FRNIBMCL FRNA0060
NY 163477AE0FC131E4 FRNIBMCL FRNA0070
NY 161DFEA1095C0F68 FRNIBMCL FRNMHB10
NY 161DFEB0106B99CC FRNIBMCL FRNMHB12
NY 165B26910A397E28 FRNIBMCL FRNMHBP8
NY 1681ADA3093D2D38 FRNIBMCL FRNPLLI1
NY 1661E76C10A34DB0 FRNIBMCL FRNPLLI2
NY 168B8B19007CF24C FRNIBMCL FRNPLLI3
NY 164981C7012F4818 FRNIBMCL FRNPLLI4
NY 16A8743D18D8A8DD FRNIBMCL FRNPLLQ1
NY 165B277F1B16E244 FRNIBMCL FRNPLLQ2
NY 161DFF7710F73994 FRNIBMCL FRNPLLQ3
NY 161DFF821A28E6DC FRNIBMCL FRNPLLQ4
NY 161DFF8C1176ECCC FRNIBMCL FRNPLLUQ
YY 16A874400B85A2B5 FRNIBMCL FRNPLLVS
NY 17E1986108E395AD FZ FZ0820 FZ00000007
NY 17F38B2B066DD61C FZ FZ0820 FZ00000010
NY 17F777470053BEA5 FZ FZ0820 FZ00000013
NY 180430D8090858D5 FZ FZ0820 FZ00000014
NY 17E885C009D477E6 GA GA0110I KAUT00003357B43EE9
NY 152302E11FA2EA7C GE GE2950 19940407190123S101702A033023AGE2950
NN 1538F6AE04CA1C96 GE GE7550 19940825113402S101702A036682AGE7550
NN 15B787FF08E833F0 GE GE7550 19961107194151S101702M000730AGE7550
NN 15BCFD791EC62704 GE GE7550 19961212131947S101702A059641AGE7550
NY 1538D56D1AADC70C GE GE7580 19940824154405S101702A036682AGE7580
NY 1538F6A60C81791C GE GE7580 19940825113350S101702A036682AGE7580
NY 15B7880710170D42 GE GE7580 19961107194153S101702M000730AGE7580
NY 1538D56E08437268 GE GE7590 19940824154407S101702A036682AGE7590
NY 1538F6A51AEDBAB0 GE GE7590 19940825113352S101702A036682AGE7590
NY 15B788010DB26162 GE GE7590 19961107194153S101702M000730AGE7590
NY 1538F6AA1D334BC4 GE GE7620 19940825113355S101702A036682AGE7620
NY 1592211D031E9F82 GE GE7620 19960314200328S101702A052811AGE7620
NY 15B7880B16521910 GE GE7620 19961107194155S101702M000730AGE7620
NN 1559F9E21ED3131E GE GE7690 19950323125534S101702A043120AGE7690
NY 17DECA9C0B0DAFCE GE GE7770 FFOR000021
NY 14CAF9DF119F2210 GE YGE0001
NY 14EAE58B114E8DDC GE YGE0002
NN 1516E60C0D740706 GE YGESP01
NN 152303221BCEECC4 GE YGESP01 19940407191249S101702A033034AYGESP01
NN 15501B270ABBB5A0 GE YGESP01 19950119173828S101702A041399AYGESP01
NN 1516E60211AB8964 GE YGESP02
NN 152303240CE82E84 GE YGESP02 19940407191251S101702A033034AYGESP02
NN 1516E61004901A30 GE YGESP04
NN 1523032605360DA6 GE YGESP04 19940407191258S101702A033034AYGESP04
NN 15501B28137EDB10 GE YGESP04 19950119173814S101702A041399AYGESP04
NY 15252E9609AF6D7C GE YYGE020 19940421143813S101702M000442AYYGE020
NY 15252EAC0ABF8F78 GE YYGE040 19940421143818S101702M000442AYYGE040
NY 17E9513F0C7B8969 GM GM0850 GM00000092
NY 17F4A1E90ADBA591 GM GM0850 GM00000105
NY 180527DD1FBDE8DC GM GM0850 GM00000113
NY 17F6658610966261 GM GM0850 GM00000117
NY 17F6631603B65379 GM GM0850 GM00000118
NY 17F77CBD004C5A65 GM GM0850 GM00000123
NY 17F702E71725BB76 GM GM0850 GM00000129
NY 180A52B0144E30BA GM GM0850 GM00000131
NY 181163C717B744FC GM GM0850 GM00000132
NY 181671C205733A31 GM GM0850 GM00000144
NY 181E4CAB1BE28D6F GM GM0850 GM00000145
NY 18248E230E2D63F4 GM GM0850 GM00000150
NY 182E8584036B0FFF GM GM0850 GM00000153
NY 17E1CC320012E17D GM GM0870 GM00000084
NY 180527DD14068361 GM GM0870 GM00000113
NY 17CDAC53112CC040 GM GM7910 GM00000065
NY 1810508C1D55188E GM GM7910 GM00000132
NY 181B296C15713FAB GM GM7910 GM00000145
NY 18385BDF1A89AEE7 GM GM7910 GM00000160
NY 17B27CD50BBB2390 GM YGMSTEU GM0000003655EEF7FB
NY 18187E8E1AA350C3 GM YGMSTEU GM000001455946A9BF
NY 18287E851C6356CE GM YGMSTEU GM0000015359CCE121MVS
NY 1834227511CD1BCA GM YGMSTEU GM000001605A2E77C8
NY 183422771DD938A4 GM YGMSTEU GM000001605A2E77C8MVS
NY 175E0AA8030F44C6 GROUP00 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP00 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP00 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP00 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP00 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP00 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP00 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP00 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP00 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP00 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP00 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP00 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP00 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP00 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP00 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP01 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP01 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP01 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP01 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP01 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP01 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP01 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP01 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP01 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP01 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP01 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP01 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP01 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP01 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP01 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP02 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP02 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP02 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP02 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP02 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP02 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP02 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP02 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP02 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP02 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP02 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP02 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP02 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP02 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP02 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP03 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP03 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP03 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP03 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP03 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP03 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP03 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP03 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP03 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP03 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP03 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP03 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP03 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP03 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP03 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP04 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP04 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP04 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP04 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP04 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP04 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP04 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP04 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP04 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP04 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP04 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP04 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP04 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP04 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP04 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP05 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP05 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP05 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP05 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP05 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP05 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP05 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP05 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP05 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP05 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP05 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP05 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP05 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP05 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP05 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP06 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP06 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP06 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP06 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP06 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP06 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP06 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP06 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP06 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP06 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP06 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP06 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP06 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP06 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP06 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP07 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP07 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP07 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP07 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP07 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP07 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP07 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP07 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP07 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP07 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP07 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP07 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP07 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP07 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP07 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP08 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP08 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP08 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP08 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP08 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP08 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP08 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP08 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP08 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP08 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP08 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP08 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP08 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP08 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP08 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP09 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP09 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP09 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP09 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP09 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP09 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP09 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP09 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP09 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP09 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP09 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP09 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP09 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP09 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP09 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP10 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP10 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP10 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP10 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP10 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP10 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP10 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP10 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP10 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP10 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP10 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP10 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP10 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP10 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP10 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP11 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP11 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP11 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP11 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP11 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP11 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP11 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP11 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP11 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP11 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP11 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP11 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP11 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP11 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP11 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP12 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP12 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP12 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP12 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP12 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP12 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP12 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP12 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP12 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP12 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP12 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP12 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP12 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP12 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP12 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP13 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP13 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP13 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP13 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP13 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP13 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP13 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP13 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP13 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP13 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP13 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP13 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP13 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP13 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP13 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP14 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP14 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP14 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP14 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP14 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP14 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP14 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP14 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP14 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP14 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP14 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP14 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP14 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP14 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP14 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP15 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP15 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP15 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP15 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP15 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP15 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP15 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP15 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP15 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP15 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP15 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP15 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP15 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP15 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP15 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP16 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP16 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP16 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP16 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP16 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP16 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP16 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP16 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP16 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP16 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP16 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP16 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP16 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP16 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP16 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP17 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP17 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP17 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP17 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP17 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP17 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP17 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP17 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP17 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP17 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP17 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP17 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP17 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP17 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP17 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP18 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP18 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP18 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP18 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP18 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP18 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP18 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP18 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP18 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP18 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP18 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP18 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP18 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP18 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP18 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP19 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP19 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP19 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP19 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP19 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP19 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP19 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP19 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP19 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP19 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP19 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP19 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP19 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP19 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP19 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP20 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP20 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP20 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP20 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP20 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP20 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP20 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP20 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP20 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP20 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP20 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP20 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP20 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP20 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP20 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP21 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP21 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP21 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP21 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP21 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP21 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP21 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP21 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP21 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP21 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP21 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP21 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP21 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP21 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP21 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP22 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP22 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP22 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP22 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP22 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP22 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP22 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP22 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP22 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP22 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP22 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP22 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP22 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP22 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP22 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP23 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP23 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP23 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP23 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP23 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP23 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP23 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP23 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP23 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP23 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP23 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP23 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP23 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP23 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP23 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP24 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP24 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP24 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP24 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP24 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP24 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP24 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP24 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP24 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP24 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP24 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP24 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP24 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP24 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP24 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP25 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP25 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP25 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP25 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP25 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP25 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP25 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP25 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP25 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP25 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP25 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP25 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP25 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP25 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP25 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP26 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP26 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP26 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP26 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP26 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP26 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP26 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP26 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP26 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP26 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP26 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP26 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP26 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP26 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP26 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP27 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP27 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP27 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP27 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP27 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP27 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP27 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP27 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP27 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP27 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP27 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP27 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP27 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP27 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP27 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP28 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP28 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP28 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP28 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP28 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP28 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP28 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP28 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP28 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP28 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP28 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP28 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP28 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP28 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP28 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP29 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP29 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP29 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP29 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP29 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP29 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP29 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP29 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP29 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP29 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP29 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP29 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP29 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP29 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP29 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP30 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP30 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP30 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP30 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP30 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP30 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP30 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP30 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP30 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP30 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP30 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP30 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP30 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP30 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP30 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP31 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP31 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP31 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP31 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP31 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP31 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP31 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP31 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP31 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP31 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP31 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP31 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP31 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP31 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP31 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP32 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP32 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP32 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP32 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP32 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP32 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP32 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP32 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP32 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP32 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP32 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP32 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP32 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP32 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP32 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP33 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP33 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP33 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP33 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP33 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP33 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP33 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP33 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP33 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP33 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP33 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP33 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP33 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP33 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP33 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP34 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP34 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP34 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP34 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP34 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP34 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP34 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP34 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP34 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP34 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP34 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP34 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP34 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP34 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP34 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP35 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP35 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP35 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP35 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP35 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP35 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP35 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP35 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP35 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP35 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP35 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP35 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP35 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP35 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP35 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP36 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP36 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP36 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP36 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP36 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP36 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP36 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP36 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP36 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP36 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP36 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP36 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP36 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP36 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP36 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP37 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP37 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP37 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP37 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP37 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP37 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP37 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP37 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP37 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP37 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP37 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP37 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP37 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP37 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP37 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP38 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP38 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP38 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP38 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP38 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP38 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP38 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP38 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP38 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP38 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP38 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP38 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP38 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP38 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP38 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP39 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP39 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP39 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP39 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP39 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP39 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP39 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP39 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP39 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP39 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP39 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP39 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP39 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP39 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP39 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP40 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP40 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP40 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP40 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP40 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP40 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP40 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP40 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP40 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP40 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP40 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP40 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP40 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP40 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP40 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP41 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP41 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP41 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP41 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP41 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP41 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP41 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP41 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP41 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP41 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP41 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP41 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP41 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP41 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP41 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP42 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP42 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP42 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP42 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP42 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP42 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP42 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP42 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP42 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP42 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP42 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP42 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP42 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP42 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP42 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP43 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP43 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP43 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP43 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP43 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP43 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP43 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP43 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP43 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP43 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP43 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP43 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP43 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP43 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP43 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP44 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP44 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP44 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP44 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP44 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP44 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP44 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP44 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP44 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP44 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP44 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP44 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP44 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP44 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP44 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP45 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP45 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP45 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP45 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP45 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP45 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP45 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP45 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP45 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP45 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP45 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP45 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP45 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP45 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP45 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP46 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP46 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP46 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP46 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP46 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP46 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP46 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP46 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP46 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP46 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP46 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP46 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP46 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP46 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP46 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP47 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP47 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP47 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP47 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP47 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP47 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP47 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP47 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP47 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP47 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP47 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP47 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP47 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP47 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP47 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP48 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP48 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP48 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP48 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP48 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP48 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP48 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP48 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP48 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP48 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP48 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP48 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP48 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP48 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP48 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP49 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP49 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP49 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP49 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP49 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP49 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP49 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP49 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP49 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP49 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP49 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP49 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP49 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP49 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP49 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP50 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP50 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP50 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP50 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP50 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP50 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP50 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP50 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP50 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP50 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP50 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP50 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP50 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP50 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP50 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP51 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP51 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP51 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP51 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP51 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP51 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP51 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP51 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP51 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP51 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP51 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP51 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP51 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP51 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP51 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP52 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP52 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP52 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP52 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP52 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP52 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP52 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP52 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP52 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP52 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP52 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP52 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP52 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP52 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP52 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP53 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP53 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP53 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP53 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP53 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP53 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP53 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP53 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP53 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP53 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP53 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP53 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP53 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP53 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP53 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP54 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP54 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP54 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP54 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP54 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP54 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP54 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP54 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP54 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP54 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP54 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP54 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP54 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP54 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP54 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP55 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP55 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP55 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP55 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP55 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP55 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP55 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP55 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP55 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP55 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP55 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP55 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP55 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP55 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP55 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP56 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP56 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP56 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP56 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP56 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP56 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP56 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP56 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP56 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP56 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP56 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP56 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP56 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP56 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP56 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP57 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP57 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP57 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP57 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP57 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP57 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP57 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP57 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP57 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP57 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP57 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP57 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP57 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP57 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP57 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP58 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP58 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP58 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP58 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP58 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP58 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP58 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP58 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP58 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP58 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP58 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP58 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP58 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP58 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP58 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP59 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP59 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP59 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP59 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP59 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP59 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP59 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP59 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP59 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP59 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP59 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP59 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP59 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP59 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP59 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP60 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP60 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP60 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP60 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP60 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP60 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP60 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP60 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP60 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP60 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP60 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP60 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP60 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP60 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP60 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP61 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP61 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP61 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP61 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP61 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP61 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP61 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP61 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP61 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP61 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP61 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP61 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP61 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP61 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP61 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP62 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP62 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP62 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP62 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP62 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP62 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP62 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP62 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP62 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP62 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP62 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP62 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP62 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP62 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP62 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP63 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP63 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP63 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP63 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP63 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP63 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP63 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP63 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP63 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP63 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP63 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP63 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP63 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP63 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP63 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP64 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP64 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP64 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP64 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP64 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP64 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP64 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP64 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP64 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP64 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP64 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP64 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP64 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP64 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP64 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP65 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP65 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP65 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP65 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP65 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP65 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP65 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP65 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP65 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP65 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP65 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP65 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP65 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP65 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP65 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP66 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP66 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP66 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP66 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP66 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP66 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP66 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP66 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP66 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP66 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP66 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP66 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP66 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP66 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP66 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP67 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP67 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP67 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP67 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP67 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP67 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP67 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP67 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP67 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP67 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP67 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP67 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP67 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP67 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP67 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP68 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP68 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP68 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP68 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP68 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP68 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP68 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP68 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP68 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP68 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP68 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP68 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP68 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP68 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP68 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP69 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP69 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP69 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP69 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP69 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP69 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP69 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP69 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP69 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP69 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP69 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP69 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP69 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP69 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP69 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP70 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP70 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP70 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP70 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP70 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP70 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP70 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP70 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP70 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP70 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP70 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP70 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP70 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP70 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP70 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP71 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP71 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP71 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP71 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP71 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP71 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP71 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP71 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP71 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP71 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP71 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP71 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP71 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP71 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP71 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP72 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP72 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP72 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP72 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP72 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP72 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP72 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP72 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP72 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP72 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP72 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP72 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP72 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP72 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP72 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP73 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP73 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP73 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP73 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP73 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP73 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP73 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP73 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP73 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP73 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP73 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP73 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP73 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP73 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP73 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP74 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP74 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP74 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP74 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP74 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP74 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP74 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP74 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP74 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP74 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP74 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP74 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP74 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP74 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP74 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP75 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP75 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP75 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP75 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP75 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP75 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP75 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP75 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP75 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP75 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP75 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP75 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP75 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP75 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP75 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP76 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP76 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP76 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP76 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP76 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP76 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP76 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP76 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP76 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP76 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP76 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP76 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP76 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP76 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP76 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP77 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP77 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP77 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP77 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP77 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP77 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP77 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP77 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP77 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP77 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP77 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP77 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP77 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP77 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP77 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP78 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP78 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP78 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP78 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP78 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP78 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP78 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP78 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP78 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP78 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP78 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP78 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP78 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP78 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP78 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP79 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP79 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP79 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP79 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP79 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP79 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP79 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP79 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP79 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP79 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP79 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP79 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP79 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP79 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP79 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP80 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP80 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP80 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP80 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP80 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP80 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP80 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP80 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP80 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP80 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP80 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP80 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP80 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP80 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP80 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP81 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP81 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP81 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP81 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP81 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP81 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP81 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP81 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP81 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP81 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP81 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP81 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP81 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP81 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP81 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP82 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP82 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP82 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP82 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP82 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP82 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP82 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP82 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP82 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP82 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP82 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP82 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP82 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP82 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP82 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP83 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP83 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP83 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP83 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP83 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP83 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP83 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP83 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP83 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP83 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP83 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP83 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP83 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP83 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP83 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP84 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP84 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP84 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP84 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP84 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP84 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP84 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP84 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP84 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP84 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP84 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP84 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP84 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP84 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP84 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP85 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP85 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP85 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP85 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP85 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP85 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP85 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP85 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP85 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP85 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP85 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP85 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP85 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP85 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP85 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP86 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP86 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP86 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP86 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP86 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP86 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP86 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP86 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP86 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP86 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP86 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP86 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP86 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP86 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP86 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP87 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP87 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP87 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP87 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP87 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP87 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP87 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP87 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP87 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP87 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP87 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP87 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP87 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP87 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP87 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP88 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP88 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP88 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP88 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP88 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP88 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP88 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP88 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP88 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP88 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP88 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP88 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP88 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP88 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP88 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP89 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP89 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP89 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP89 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP89 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP89 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP89 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP89 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP89 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP89 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP89 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP89 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP89 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP89 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP89 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP90 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP90 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP90 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP90 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP90 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP90 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP90 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP90 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP90 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP90 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP90 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP90 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP90 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP90 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP90 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP91 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP91 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP91 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP91 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP91 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP91 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP91 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP91 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP91 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP91 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP91 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP91 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP91 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP91 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP91 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP92 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP92 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP92 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP92 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP92 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP92 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP92 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP92 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP92 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP92 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP92 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP92 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP92 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP92 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP92 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP93 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP93 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP93 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP93 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP93 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP93 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP93 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP93 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP93 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP93 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP93 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP93 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP93 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP93 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP93 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP94 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP94 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP94 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP94 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP94 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP94 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP94 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP94 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP94 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP94 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP94 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP94 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP94 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP94 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP94 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP95 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP95 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP95 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP95 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP95 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP95 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP95 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP95 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP95 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP95 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP95 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP95 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP95 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP95 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP95 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP96 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP96 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP96 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP96 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP96 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP96 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP96 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP96 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP96 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP96 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP96 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP96 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP96 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP96 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP96 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP97 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP97 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP97 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP97 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP97 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP97 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP97 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP97 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP97 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP97 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP97 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP97 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP97 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP97 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP97 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP98 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP98 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP98 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP98 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP98 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP98 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP98 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP98 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP98 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP98 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP98 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP98 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP98 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP98 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP98 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP99 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP99 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP99 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP99 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP99 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP99 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP99 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP99 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP99 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP99 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP99 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP99 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP99 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP99 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP99 CBRIDBS UW95199HDZ11G0
NY 17F01B040CE0AEDB HB HB5000 ASIA000070
NY 17EFE6E5106A26C2 HB YHBK011 ASIA00007957F22639
NY 1825D76E0289AEA0 HB YHBK011 ASIA00013259B6A096
NY 1839CB7D1D1371DD HBDTEST YVVZZ04 VDPS0001185A5DF2D6
NY 1643560107BBEEAB HP1 A6MCHA HPSVP2A6MCHA
NY 1648D83908C76B3B HP1 AA00WM HPSVP2AA00WM
NY 168283791329893C HP1 AA6VV6 HPSVP2AA6VV6
NY 16A0893F02F1E5A6 HP1 AAAERK HPSVP2AAAERK
NY 1724E8341F15EFAD HP1 AAFYWR HPSVP2AAFYWR
NY 168288FB194953AF HP1 AAFZWR HPSVP2AAFZWR
NY 16D648980E241364 HP1 AAIORK HPSVP2AAIORK
NY 16592B6D04B1D9BD HP1 AANQUP HPSVP2AANQUP
NY 16A0888000AD2563 HP1 AAOAO4 HPSVP2AAOAO4
NY 16D648AB1720988C HP1 AATSRK HPSVP2AATSRK
NY 16AEAF1401E68D5E HP1 AATVRK HPSVP2AATVRK
NY 16C01B780D2C0EB5 HP1 AAZGRK HPSVP2AAZGRK
NY 16D648981104D278 HP1 AB0ORK HPSVP2AB0ORK
NY 173DDDB317B31679 HP1 AB70RG HPSVP2AB70RG
NY 173DDDB019BD953E HP1 AB79RG HPSVP2AB79RG
NY 170702DB1DB89478 HP1 AB7STL HPSVP2AB7STL
NY 173DDDB91A9CD7F2 HP1 AB8CRG HPSVP2AB8CRG
NY 1722313B1808FBA0 HP1 ABAIRK HPSVP2ABAIRK
NY 161EC0CD1667DAB2 HP1 ABARRG HPSVP1ABARRG
NY 168292EF08256606 HP1 ABC8QY HPSVP2ABC8QY
NY 16A087961247E55E HP1 ABIRQ6 HPSVP2ABIRQ6
NY 168288EF0FC755AD HP1 ABMXVN HPSVP2ABMXVN
NY 16C87AFB038D1336 HP1 ABTVRI HPSVP1ABTVRI
NY 153C6C3E10C0C460 HP1 ABWPTI
NY 173DDDB20C77866D HP1 ABWURG HPSVP2ABWURG
NY 168273B60DA9ACC3 HP1 ABWZQ2 HPSVP2ABWZQ2
NN 16829513017A1AAB HP1 ABZJLS HPSVP2ABZJLS
NY 16AEAEF404FC7943 HP1 AC7VRK HPSVP2AC7VRK
NY 16A0891F1534545B HP1 AC7ZRK HPSVP2AC7ZRK
NY 16D649251B2CE67E HP1 ACA0RK HPSVP2ACA0RK
NY 1540AA0803E417E2 HP1 ACDBQ1
NY 159007A30CC385D4 HP1 ACDBQ1 HPSVP1ACDBQ1
NY 168291D11CEE49B7 HP1 ACEQL4 HPSVP2ACEQL4
NY 153F980E0C205CC8 HP1 ACF3Q1
NY 1728A0881C6EEFD4 HP1 ACF3Q1 HPSVP2ACF3Q1
NY 1540AE5D19EAEC20 HP1 ACUHQ1
NY 15A01A3F0D38625E HP1 ACZRQ2 HPSVP2ACZRQ2
NY 17269E501B3B180E HP1 AD5WV6 HPSVP2AD5WV6
NY 153C6C8F1AF3D322 HP1 ADDZS3
NY 1724E8F0081871FA HP1 ADJQR5 HPSVP2ADJQR5
NY 154089200AE6C024 HP1 ADWVQZ
NY 165933970BE0AF71 HP1 ADWVQZ HPSVP2ADWVQZ
NY 16A0895A021FE1EB HP1 AE5MQ6 HPSVP2AE5MQ6
NY 153C6BBF1C19759C HP1 AE85S3
NY 153C6BD70100FAB4 HP1 AE86S3
NY 16D64923168575A9 HP1 AEGIQ6 HPSVP2AEGIQ6
NY 16D649260AA8D00A HP1 AEW7Q6 HPSVP2AEW7Q6
NY 15A01D3C072BE22A HP1 AF3TQ1 HPSVP2AF3TQ1
NY 16D648AB08594280 HP1 AF8URI HPSVP2AF8URI
NY 16F2B49608FDF6B9 HP1 AFJJRK HPSVP2AFJJRK
NY 1722312103DAC39B HP1 AFJKRK HPSVP2AFJKRK
NY 16F2B49904BDA037 HP1 AFOSRK HPSVP2AFOSRK
NY 16F2B49A0F1869E5 HP1 AFOWRK HPSVP2AFOWRK
NY 16A0879F1DF0F3B7 HP1 AFW4RB HPSVP2AFW4RB
NN 168291CA178D923C HP1 AG23LZ HPSVP2AG23LZ
NY 162E25F006C19C79 HP1 AG5JS8 HPSVP2AG5JS8
NY 16D6492D13A2E460 HP1 AGA8RI HPSVP2AGA8RI
NY 16A0896002A9F1EC HP1 AGDYRI HPSVP2AGDYRI
NY 17269D2610342D51 HP1 AGOWVT HPSVP2AGOWVT
NY 16A0895D0A2DE657 HP1 AGRZRI HPSVP2AGRZRI
NY 16A0885B012A7B54 HP1 AGW8RB HPSVP2AGW8RB
NY 16A0888008572BBF HP1 AGX3RB HPSVP2AGX3RB
NY 16A08860120192B3 HP1 AGXJRB HPSVP2AGXJRB
NY 16A0886C17366136 HP1 AGXMRB HPSVP2AGXMRB
NY 168291F11BA74C66 HP1 AGXNLE HPSVP2AGXNLE
NY 16D64928099F4035 HP1 AHGPRI HPSVP2AHGPRI
NY 16D6492B0450987F HP1 AHHSRI HPSVP2AHHSRI
NY 162A384019C60FBD HP1 AHJFRK HPSVP2AHJFRK
NY 168288F315CBB967 HP1 AJ0EWS HPSVP2AJ0EWS
NY 16C529D90092BCE3 HP1 AJV4RI HPSVP2AJV4RI
NY 16C13CF90B476069 HP1 AJXLRI HPSVP1AJXLRI
NY 16C0BB85000D078F HP1 AKEGRI HPSVP2AKEGRI
NY 17350B9B0D3596B1 HP1 AL0NRI HPSVP2AL0NRI
NY 16AEAE7712077B01 HP1 AL57RI HPSVP2AL57RI
NY 17350BAC016B0E14 HP1 ALS0RI HPSVP2ALS0RI
NY 17350B8909FC6030 HP1 ALSIRI HPSVP2ALSIRI
NY 17350B8B08C196B0 HP1 ALSZRI HPSVP2ALSZRI
NY 17350B961EC5378C HP1 ALVFRI HPSVP2ALVFRI
NY 16DA0F100494BECD HP1 ALX4RI HPSVP2ALX4RI
NY 17350B9E10560A21 HP1 ALYHRI HPSVP2ALYHRI
NY 16A087B006F79F21 HP1 AN6ERI HPSVP2AN6ERI
NY 164ED8331D29423C HP1 AN8JRI HPSVP2AN8JRI
NY 164F80B51E01630F HP1 AN8MRI HPSVP1AN8MRI
NY 17350B8D12C7D4C0 HP1 AN96RI HPSVP2AN96RI
NY 17350B9F06BA5ED8 HP1 AN97RI HPSVP2AN97RI
NY 16A088431BFEC51F HP1 ANEVRI HPSVP2ANEVRI
NY 16D648BD1AEDBD4C HP1 AO2QRK HPSVP2AO2QRK
NY 175DC04D11C2C359 HP1 AOAVRI HPSVP2AOAVRI
NY 17350BA20FE698F0 HP1 AOBARI HPSVP2AOBARI
NY 175DC0501312282C HP1 AOBPRI HPSVP2AOBPRI
NY 175DC054012899AA HP1 AOBWRI HPSVP2AOBWRI
NY 17350B900F908116 HP1 AOCLRI HPSVP2AOCLRI
NY 16C01B7400693E8D HP1 AOV6RK HPSVP2AOV6RK
NY 169C834E0C52F933 HP1 AOVURK HPSVP1AOVURK
NY 1750434B1D6739F5 HP1 AOX7RK HPSVP2AOX7RK
NY 1750434A08D5F241 HP1 AOXTRK HPSVP2AOXTRK
NY 16E34F3B1F70DB2A HP1 AOY2RK HPSVP2AOY2RK
NY 17504349151661C8 HP1 AOYQRK HPSVP2AOYQRK
NY 16AEAEF714CAB365 HP1 AOYURK HPSVP2AOYURK
NY 1724E6F219E4684F HP1 AUPDVU HPSVP2AUPDVU
NY 15AF54470B34C684 HP1 DFWYAA HPSVP2DFWYAA
NY 15B89DFF094D3B06 HP1 DOSBN5 HPSVP2DOSBN5
NY 173DDD8A0C9BCABE HP1 RWBB017 HPSVP2RWBB017
NN 15407F9F0CCB1902 HP1 RWBB022
NN 15407FB31729AD6A HP1 RWBB023
NY 17350B88031351AD HP1 RWBB110 HPSVP2RWBB110
NY 152FB5701C6932B0 HP1 RWBC011
NY 152FB5EE0BEA1C56 HP1 RWBC024
NY 1537C0B706E9DE34 HP1 RWBC030
NY 152FB61B195716C4 HP1 RWBC032
NY 151F7BE70A8C1BFC HP1 RWBC037
NY 15407DDD08692D98 HP1 RWBC040
NY 152DFCA20786D508 HP1 RWBC041
NY 152DFCC804CEFB6A HP1 RWBC048
NY 152DFCD404C000FC HP1 RWBC049
NY 163173C304B2997F HP1 RWBE056 HPSVP2RWBE056
NY 16F2B49809BBAC70 HP1 RWBH004 HPSVP2RWBH004
NY 163173C5108C809D HP1 RWBJ210 HPSVP2RWBJ210
NY 16A0879F0D4FD138 HP1 RWBK023 HPSVP2RWBK023
NY 16A087B710D05AAD HP1 RWBK029 HPSVP2RWBK029
NY 173DDD8A038368BE HP1 RWBM001 HPSVP2RWBM001
NY 16A202BD0C772F97 HP1 RWBM003 HPSVP1RWBM003
NY 16A088F81F17C61B HP1 RWBM004 HPSVP2RWBM004
NY 1537C02E0C9F972C HP1 RWBM007
NY 173DDD930B385499 HP1 RWBM009 HPSVP2RWBM009
NY 173DDD951C3A3244 HP1 RWBM010 HPSVP2RWBM010
NY 173DDDA508751A89 HP1 RWBM011 HPSVP2RWBM011
NY 173DDD9C06D0771E HP1 RWBM012 HPSVP2RWBM012
NY 16A0887B0AEE9978 HP1 RWBM013 HPSVP2RWBM013
NY 16987DFC0C16911D HP1 RWBP004 HPSVP2RWBP004
NY 152E1FFC0B491014 HP1 RWBP007
NY 164ED82003C8C157 HP1 RWBP007 HPSVP2RWBP007
NY 164ED818152D5362 HP1 RWBP008 HPSVP2RWBP008
NY 161EC06A110248A7 HP1 RWBP015 HPSVP1RWBP015
NY 1537BF930E473BB4 HP1 RWBP021
NY 164ED8230E431387 HP1 RWBP021 HPSVP2RWBP021
NY 152FAB140165D1D2 HP1 RWBP022
NY 164ED80A04234325 HP1 RWBP022 HPSVP2RWBP022
NY 1540631904C31DFA HP1 RWBP023
NY 16AEADE010C7CE20 HP1 RWBP023 HPSVP2RWBP023
NY 162AAC960C4D569D HP1 RWBP024 HPSVP1RWBP024
NY 152FAB3B114D87BC HP1 RWBP026
NY 162A3BC804FB0F87 HP1 RWBP026 HPSVP2RWBP026
NY 152FAB4A02823CEA HP1 RWBP029
NN 1538A00914D55CE4 HP1 RWBP030
NY 16D648661D340171 HP1 RWBP030 HPSVP2RWBP030
NN 1538A01413F6782A HP1 RWBP032
NY 16D648E410D27E96 HP1 RWBP032 HPSVP2RWBP032
NY 152FAB5719A2830A HP1 RWBP034
NY 152FAB2E0B26D1FA HP1 RWBP036
NY 164ED837080F939E HP1 RWBR002 HPSVP2RWBR002
NY 164D1F0A02721DA9 HP1 RWBR003 HPSVP1RWBR003
NY 164ED83F139FBA87 HP1 RWBR004 HPSVP2RWBR004
NY 16D648AB14A641A9 HP1 RWBR009 HPSVP2RWBR009
NY 155FD924181CCFA6 HP1 RWBR030 HPSVP1RWBR030
NY 1607FF4D0F035EE4 HP1 RWBR032 HPSVP1RWBR032
NN 1537C09E09539F82 HP1 RWBR040
NY 16AEAEB403F397E3 HP1 RWBR040 HPSVP2RWBR040
NY 152FB8CA00AF4C9A HP1 RWBR043
NY 16D648E40728730A HP1 RWBR200 HPSVP2RWBR200
NY 161EBEAB0439A734 HP1 RWBR201 HPSVP1RWBR201
NY 161EBEFE06B76ED7 HP1 RWBR202 HPSVP1RWBR202
NY 161EBEF41791E0E4 HP1 RWBR207 HPSVP1RWBR207
NY 173DDD96005235BD HP1 RWBT008 HPSVP2RWBT008
NY 16C13D211976CE77 HP1 RWBT031 HPSVP1RWBT031
NY 16A087F1038A3ACA HP1 RWBT032 HPSVP2RWBT032
NN 1537BFBB159E5AE6 HP1 RWBT033
NY 16D648E4106C50F4 HP1 RWBW015 HPSVP2RWBW015
NY 16AEAED002300931 HP1 RWBW042 HPSVP2RWBW042
NY 16D64911136FF3C9 HP1 RWBW048 HPSVP2RWBW048
NY 16D6488A00D271B5 HP1 RWBW050 HPSVP2RWBW050
NY 16A087FC11BF8EF4 HP1 RWBW058 HPSVP2RWBW058
NY 173DDDA104147E4E HP1 RWBW064 HPSVP2RWBW064
NY 173DE13F0335E2A1 HP1 RWBW072 HPSVP1RWBW072
NY 16AEADF00A3E6C71 HP1 RWBW075 HPSVP2RWBW075
NY 16AEAEC81FF658CF HP1 RWBZ008 HPSVP2RWBZ008
NY 16AEAEA90756D6F4 HP1 RWBZ010 HPSVP2RWBZ010
NY 16D6490E0810810C HP1 RWBZ050 HPSVP2RWBZ050
NY 1722312F06956A95 HP1 ZADOKRL HPSVP2ZADOKRL
NY 173D875118DF66EF HP1 ZAENORL HPSVP1ZAENORL
NY 173D873C04888972 HP1 ZAEOJRL HPSVP1ZAEOJRL
NY 173D874A0C20E015 HP1 ZAEVORL HPSVP1ZAEVORL
NY 173D874304B82484 HP1 ZAEWBRL HPSVP1ZAEWBRL
NY 16C4A94113F9BDB0 HP1 ZAJOIVS HPSVP2ZAJOIVS
NY 16C4A93616AD8D13 HP1 ZAJVAVS HPSVP2ZAJVAVS
NY 16C4A9C1005B500E HP1 ZANJIVS HPSVP2ZANJIVS
NY 175DC04E0A53E249 HP1 ZBZOPRI HPSVP2ZBZOPRI
NY 175DC04F0D5988A9 HP1 ZBZOURI HPSVP2ZBZOURI
NY 16C0BB891A03FEAD HP1 ZBZQQRI HPSVP2ZBZQQRI
NY 175DC0541A4C77C1 HP1 ZBZVFRI HPSVP2ZBZVFRI
NY 175DC055168A8E12 HP1 ZBZXDRI HPSVP2ZBZXDRI
NY 175DC0560D777BDC HP1 ZBZXERI HPSVP2ZBZXERI
NY 16B51EFA101D37FC HP1 ZDEWERI HPSVP2ZDEWERI
NY 16D64910141577F2 HP1 ZDEWPRI HPSVP2ZDEWPRI
NY 16E34F410D2DADF5 HP1 ZDFXPRK HPSVP2ZDFXPRK
NY 16CB6F5F03D8543C HP1 ZDIYURI HPSVP2ZDIYURI
NY 16E34F381848481A HP1 ZUZQERK HPSVP2ZUZQERK
NY 17273EA20593B4FD HP1 ZVIYWRI HPSVP1ZVIYWRI
NY 175DC0590BA2D770 HP1 ZVKUYRI HPSVP2ZVKUYRI
NY 175DC05909B83990 HP1 ZVKUZRI HPSVP2ZVKUZRI
NY 1643560107BBEEAB HP3 A6MCHA HPSVP2A6MCHA
NY 1648D83908C76B3B HP3 AA00WM HPSVP2AA00WM
NY 153C6C1A1C3B58FE HP3 AA40TI
NY 153C6BEA0A6228AE HP3 AA4XTI
NY 153C6C26027ABF90 HP3 AA4ZTI
NY 168283791329893C HP3 AA6VV6 HPSVP2AA6VV6
NY 16A0893F02F1E5A6 HP3 AAAERK HPSVP2AAAERK
NY 168288FB194953AF HP3 AAFZWR HPSVP2AAFZWR
NY 16D648980E241364 HP3 AAIORK HPSVP2AAIORK
NY 16592B6D04B1D9BD HP3 AANQUP HPSVP2AANQUP
NY 16A0888000AD2563 HP3 AAOAO4 HPSVP2AAOAO4
NY 16D648AB1720988C HP3 AATSRK HPSVP2AATSRK
NY 16AEAF1401E68D5E HP3 AATVRK HPSVP2AATVRK
NY 16D648981104D278 HP3 AB0ORK HPSVP2AB0ORK
NY 173DDDB317B31679 HP3 AB70RG HPSVP2AB70RG
NY 173DDDB019BD953E HP3 AB79RG HPSVP2AB79RG
NY 170702DB1DB89478 HP3 AB7STL HPSVP2AB7STL
NY 173DDDB91A9CD7F2 HP3 AB8CRG HPSVP2AB8CRG
NY 1722313B1808FBA0 HP3 ABAIRK HPSVP2ABAIRK
NY 161EC0CD1667DAB2 HP3 ABARRG HPSVP1ABARRG
NY 168292EF08256606 HP3 ABC8QY HPSVP2ABC8QY
NY 16A087961247E55E HP3 ABIRQ6 HPSVP2ABIRQ6
NY 153C6BFD0945DAE6 HP3 ABISTI
NY 168288EF0FC755AD HP3 ABMXVN HPSVP2ABMXVN
NY 153C6C3E10C0C460 HP3 ABWPTI
NY 173DDDB20C77866D HP3 ABWURG HPSVP2ABWURG
NY 168273B60DA9ACC3 HP3 ABWZQ2 HPSVP2ABWZQ2
NY 16829513017A1AAB HP3 ABZJLS HPSVP2ABZJLS
NY 16AEAEF404FC7943 HP3 AC7VRK HPSVP2AC7VRK
NY 16A0891F1534545B HP3 AC7ZRK HPSVP2AC7ZRK
NY 16D649251B2CE67E HP3 ACA0RK HPSVP2ACA0RK
NY 1540AA0803E417E2 HP3 ACDBQ1
NY 159007A30CC385D4 HP3 ACDBQ1 HPSVP1ACDBQ1
NY 168291D11CEE49B7 HP3 ACEQL4 HPSVP2ACEQL4
NY 153F980E0C205CC8 HP3 ACF3Q1
NY 1728A0881C6EEFD4 HP3 ACF3Q1 HPSVP2ACF3Q1
NY 151F3A881767B85C HP3 ACLQMC
NY 1540AE5D19EAEC20 HP3 ACUHQ1
NY 15A01A3F0D38625E HP3 ACZRQ2 HPSVP2ACZRQ2
NY 153C6C8F1AF3D322 HP3 ADDZS3
NY 153C6C9D092DCB32 HP3 ADEBS3
NY 153C6CAA08F9C4A0 HP3 ADECS3
NY 154089200AE6C024 HP3 ADWVQZ
NY 165933970BE0AF71 HP3 ADWVQZ HPSVP2ADWVQZ
NY 16A0895A021FE1EB HP3 AE5MQ6 HPSVP2AE5MQ6
NY 153C6B9F12D1BB4C HP3 AE84S3
NY 153C6BBF1C19759C HP3 AE85S3
NY 153C6BD70100FAB4 HP3 AE86S3
NY 153446601A7F2242 HP3 AE8GS3
NY 15344679154EDF92 HP3 AE8HS3
NY 1534468711EDB08E HP3 AE8IS3
NY 153C6CBF107E7C66 HP3 AE9SS3
NY 153C6CC91181313E HP3 AE9TS3
NY 153C6CD318660C1A HP3 AE9US3
NY 16D64923168575A9 HP3 AEGIQ6 HPSVP2AEGIQ6
NY 16D649260AA8D00A HP3 AEW7Q6 HPSVP2AEW7Q6
NY 15A01D3C072BE22A HP3 AF3TQ1 HPSVP2AF3TQ1
NY 16D648AB08594280 HP3 AF8URI HPSVP2AF8URI
NY 16F2B49608FDF6B9 HP3 AFJJRK HPSVP2AFJJRK
NY 1722312103DAC39B HP3 AFJKRK HPSVP2AFJKRK
NY 16F2B49904BDA037 HP3 AFOSRK HPSVP2AFOSRK
NY 16F2B49A0F1869E5 HP3 AFOWRK HPSVP2AFOWRK
NY 16A0879F1DF0F3B7 HP3 AFW4RB HPSVP2AFW4RB
NY 168291CA178D923C HP3 AG23LZ HPSVP2AG23LZ
NY 162E25F006C19C79 HP3 AG5JS8 HPSVP2AG5JS8
NY 16D6492D13A2E460 HP3 AGA8RI HPSVP2AGA8RI
NY 16A0896002A9F1EC HP3 AGDYRI HPSVP2AGDYRI
NY 16A0895D0A2DE657 HP3 AGRZRI HPSVP2AGRZRI
NY 16A0885B012A7B54 HP3 AGW8RB HPSVP2AGW8RB
NY 16A0888008572BBF HP3 AGX3RB HPSVP2AGX3RB
NY 16A08860120192B3 HP3 AGXJRB HPSVP2AGXJRB
NY 16A0886C17366136 HP3 AGXMRB HPSVP2AGXMRB
NY 168291F11BA74C66 HP3 AGXNLE HPSVP2AGXNLE
NY 16D64928099F4035 HP3 AHGPRI HPSVP2AHGPRI
NY 16D6492B0450987F HP3 AHHSRI HPSVP2AHHSRI
NY 162A384019C60FBD HP3 AHJFRK HPSVP2AHJFRK
NY 168288F315CBB967 HP3 AJ0EWS HPSVP2AJ0EWS
NY 153F160509A1F5E8 HP3 AJBTSH
NY 17350B9B0D3596B1 HP3 AL0NRI HPSVP2AL0NRI
NY 16AEAE7712077B01 HP3 AL57RI HPSVP2AL57RI
NY 17350BAC016B0E14 HP3 ALS0RI HPSVP2ALS0RI
NY 17350B8909FC6030 HP3 ALSIRI HPSVP2ALSIRI
NY 17350B8B08C196B0 HP3 ALSZRI HPSVP2ALSZRI
NY 17350B961EC5378C HP3 ALVFRI HPSVP2ALVFRI
NY 16DA0F100494BECD HP3 ALX4RI HPSVP2ALX4RI
NY 17350B9E10560A21 HP3 ALYHRI HPSVP2ALYHRI
NY 16A087B006F79F21 HP3 AN6ERI HPSVP2AN6ERI
NY 164ED8331D29423C HP3 AN8JRI HPSVP2AN8JRI
NY 164F80B51E01630F HP3 AN8MRI HPSVP1AN8MRI
NY 17350B8D12C7D4C0 HP3 AN96RI HPSVP2AN96RI
NY 17350B9F06BA5ED8 HP3 AN97RI HPSVP2AN97RI
NY 16A088431BFEC51F HP3 ANEVRI HPSVP2ANEVRI
NY 16D648BD1AEDBD4C HP3 AO2QRK HPSVP2AO2QRK
NY 175DC04D11C2C359 HP3 AOAVRI HPSVP2AOAVRI
NY 17350BA20FE698F0 HP3 AOBARI HPSVP2AOBARI
NY 175DC0501312282C HP3 AOBPRI HPSVP2AOBPRI
NY 175DC054012899AA HP3 AOBWRI HPSVP2AOBWRI
NY 17350B900F908116 HP3 AOCLRI HPSVP2AOCLRI
NY 16C01B7400693E8D HP3 AOV6RK HPSVP2AOV6RK
NY 1750434B1D6739F5 HP3 AOX7RK HPSVP2AOX7RK
NY 1750434A08D5F241 HP3 AOXTRK HPSVP2AOXTRK
NY 16E34F3B1F70DB2A HP3 AOY2RK HPSVP2AOY2RK
NY 17504349151661C8 HP3 AOYQRK HPSVP2AOYQRK
NY 16AEAEF714CAB365 HP3 AOYURK HPSVP2AOYURK
NY 15AF54470B34C684 HP3 DFWYAA HPSVP2DFWYAA
NY 15B89DFF094D3B06 HP3 DOSBN5 HPSVP2DOSBN5
NN 1540D52D072A8A1C HP3 RWBB004
NN 1540D5B902BD3748 HP3 RWBB015
NY 173DDD8A0C9BCABE HP3 RWBB017 HPSVP2RWBB017
NN 1540D5C8167A26DE HP3 RWBB019
NN 1540D5D804C10A84 HP3 RWBB020
NN 15407F9F0CCB1902 HP3 RWBB022
NN 15407FB31729AD6A HP3 RWBB023
NY 17350B88031351AD HP3 RWBB110 HPSVP2RWBB110
NY 152FB5701C6932B0 HP3 RWBC011
NY 152FB5EE0BEA1C56 HP3 RWBC024
NY 1537C0B706E9DE34 HP3 RWBC030
NY 152FB61B195716C4 HP3 RWBC032
NY 151F7BE70A8C1BFC HP3 RWBC037
NY 15407DDD08692D98 HP3 RWBC040
NY 152DFCA20786D508 HP3 RWBC041
NY 152DFCC804CEFB6A HP3 RWBC048
NY 163173C304B2997F HP3 RWBE056 HPSVP2RWBE056
NY 16F2B49809BBAC70 HP3 RWBH004 HPSVP2RWBH004
NY 163173C5108C809D HP3 RWBJ210 HPSVP2RWBJ210
NY 16A0879F0D4FD138 HP3 RWBK023 HPSVP2RWBK023
NY 16A087B710D05AAD HP3 RWBK029 HPSVP2RWBK029
NY 173DDD8A038368BE HP3 RWBM001 HPSVP2RWBM001
NN 1540A7B71375BA42 HP3 RWBM003
NY 16A088F81F17C61B HP3 RWBM004 HPSVP2RWBM004
NY 1537C02E0C9F972C HP3 RWBM007
NY 173DDD930B385499 HP3 RWBM009 HPSVP2RWBM009
NY 173DDD951C3A3244 HP3 RWBM010 HPSVP2RWBM010
NY 173DDDA508751A89 HP3 RWBM011 HPSVP2RWBM011
NY 173DDD9C06D0771E HP3 RWBM012 HPSVP2RWBM012
NY 16A0887B0AEE9978 HP3 RWBM013 HPSVP2RWBM013
NY 1537BF70086EBD5E HP3 RWBP004
NY 16987DFC0C16911D HP3 RWBP004 HPSVP2RWBP004
NY 152E1FFC0B491014 HP3 RWBP007
NY 164ED82003C8C157 HP3 RWBP007 HPSVP2RWBP007
NY 1537BF8712B0D1C8 HP3 RWBP008
NY 164ED818152D5362 HP3 RWBP008 HPSVP2RWBP008
NY 161EC06A110248A7 HP3 RWBP015 HPSVP1RWBP015
NY 1537BF930E473BB4 HP3 RWBP021
NY 164ED8230E431387 HP3 RWBP021 HPSVP2RWBP021
NY 152FAB140165D1D2 HP3 RWBP022
NY 164ED80A04234325 HP3 RWBP022 HPSVP2RWBP022
NY 1540631904C31DFA HP3 RWBP023
NY 16AEADE010C7CE20 HP3 RWBP023 HPSVP2RWBP023
NY 162AAC960C4D569D HP3 RWBP024 HPSVP1RWBP024
NY 152FAB3B114D87BC HP3 RWBP026
NY 162A3BC804FB0F87 HP3 RWBP026 HPSVP2RWBP026
NY 152FAB4A02823CEA HP3 RWBP029
NN 1538A00914D55CE4 HP3 RWBP030
NY 16D648661D340171 HP3 RWBP030 HPSVP2RWBP030
NN 1538A01413F6782A HP3 RWBP032
NY 16D648E410D27E96 HP3 RWBP032 HPSVP2RWBP032
NY 152FAB5719A2830A HP3 RWBP034
NY 164ED837080F939E HP3 RWBR002 HPSVP2RWBR002
NY 164D1F0A02721DA9 HP3 RWBR003 HPSVP1RWBR003
NY 164ED83F139FBA87 HP3 RWBR004 HPSVP2RWBR004
NY 16D648AB14A641A9 HP3 RWBR009 HPSVP2RWBR009
NY 155FD924181CCFA6 HP3 RWBR030 HPSVP1RWBR030
NY 1607FF4D0F035EE4 HP3 RWBR032 HPSVP1RWBR032
NN 1537C09E09539F82 HP3 RWBR040
NY 16AEAEB403F397E3 HP3 RWBR040 HPSVP2RWBR040
NY 152FB8CA00AF4C9A HP3 RWBR043
NY 16D648E40728730A HP3 RWBR200 HPSVP2RWBR200
NY 161EBEAB0439A734 HP3 RWBR201 HPSVP1RWBR201
NY 161EBEFE06B76ED7 HP3 RWBR202 HPSVP1RWBR202
NY 161EBEF41791E0E4 HP3 RWBR207 HPSVP1RWBR207
NY 173DDD96005235BD HP3 RWBT008 HPSVP2RWBT008
NN 15407E8D1F133F46 HP3 RWBT027
NY 16A087F1038A3ACA HP3 RWBT032 HPSVP2RWBT032
NY 16D648E4106C50F4 HP3 RWBW015 HPSVP2RWBW015
NN 1540D57708047726 HP3 RWBW032
NY 16AEAED002300931 HP3 RWBW042 HPSVP2RWBW042
NY 16D64911136FF3C9 HP3 RWBW048 HPSVP2RWBW048
NY 16D6488A00D271B5 HP3 RWBW050 HPSVP2RWBW050
NY 16A087FC11BF8EF4 HP3 RWBW058 HPSVP2RWBW058
NY 173DDDA104147E4E HP3 RWBW064 HPSVP2RWBW064
NY 16AEADF00A3E6C71 HP3 RWBW075 HPSVP2RWBW075
NY 16AEAEC81FF658CF HP3 RWBZ008 HPSVP2RWBZ008
NY 16AEAEA90756D6F4 HP3 RWBZ010 HPSVP2RWBZ010
NN 1540D5870CB279C6 HP3 RWBZ014
NN 1540D5990AC82F9E HP3 RWBZ015
NN 1540D53C19C96B78 HP3 RWBZ033
NN 1540D54D190FFB2C HP3 RWBZ034
NY 16D6490E0810810C HP3 RWBZ050 HPSVP2RWBZ050
NY 1722312F06956A95 HP3 ZADOKRL HPSVP2ZADOKRL
NY 175DC04E0A53E249 HP3 ZBZOPRI HPSVP2ZBZOPRI
NY 175DC04F0D5988A9 HP3 ZBZOURI HPSVP2ZBZOURI
NY 16C0BB891A03FEAD HP3 ZBZQQRI HPSVP2ZBZQQRI
NY 175DC0541A4C77C1 HP3 ZBZVFRI HPSVP2ZBZVFRI
NY 175DC055168A8E12 HP3 ZBZXDRI HPSVP2ZBZXDRI
NY 175DC0560D777BDC HP3 ZBZXERI HPSVP2ZBZXERI
NY 16D64910141577F2 HP3 ZDEWPRI HPSVP2ZDEWPRI
NY 16E34F410D2DADF5 HP3 ZDFXPRK HPSVP2ZDFXPRK
NY 16CB6F5F03D8543C HP3 ZDIYURI HPSVP2ZDIYURI
NY 16E34F381848481A HP3 ZUZQERK HPSVP2ZUZQERK
NY 175DC0590BA2D770 HP3 ZVKUYRI HPSVP2ZVKUYRI
NY 175DC05909B83990 HP3 ZVKUZRI HPSVP2ZVKUZRI
NY 1643560107BBEEAB HPS A6MCHA HPSVP2A6MCHA
NY 1648D83908C76B3B HPS AA00WM HPSVP2AA00WM
NY 16592B6D04B1D9BD HPS AANQUP HPSVP2AANQUP
NY 16C01B780D2C0EB5 HPS AAZGRK HPSVP2AAZGRK
NY 17269E501B3B180E HPS AD5WV6 HPSVP2AD5WV6
NY 165933970BE0AF71 HPS ADWVQZ HPSVP2ADWVQZ
NY 162E25F006C19C79 HPS AG5JS8 HPSVP2AG5JS8
NY 17269D2610342D51 HPS AGOWVT HPSVP2AGOWVT
NY 162A384019C60FBD HPS AHJFRK HPSVP2AHJFRK
NY 16C529D90092BCE3 HPS AJV4RI HPSVP2AJV4RI
NY 16C0BB85000D078F HPS AKEGRI HPSVP2AKEGRI
NY 164ED8331D29423C HPS AN8JRI HPSVP2AN8JRI
NY 16C01B7400693E8D HPS AOV6RK HPSVP2AOV6RK
NY 163173C304B2997F HPS RWBE056 HPSVP2RWBE056
NY 163173C5108C809D HPS RWBJ210 HPSVP2RWBJ210
NY 164ED82003C8C157 HPS RWBP007 HPSVP2RWBP007
NY 164ED818152D5362 HPS RWBP008 HPSVP2RWBP008
NY 164ED8230E431387 HPS RWBP021 HPSVP2RWBP021
NY 164ED80A04234325 HPS RWBP022 HPSVP2RWBP022
NY 162A3BC804FB0F87 HPS RWBP026 HPSVP2RWBP026
NY 164ED837080F939E HPS RWBR002 HPSVP2RWBR002
NY 164ED83F139FBA87 HPS RWBR004 HPSVP2RWBR004
NY 16C4A94113F9BDB0 HPS ZAJOIVS HPSVP2ZAJOIVS
NY 16C4A93616AD8D13 HPS ZAJVAVS HPSVP2ZAJVAVS
NY 16C4A9C1005B500E HPS ZANJIVS HPSVP2ZANJIVS
NY 16C0BB891A03FEAD HPS ZBZQQRI HPSVP2ZBZQQRI
NY 16B51EFA101D37FC HPS ZDEWERI HPSVP2ZDEWERI
NY 1793CF0C06D87AE9 IS ISLP20 DML0000004
NY 17B1B2461C68A334 IS ISLP23 DML0000014
NY 17AB0ED618CF9F61 IS ISLP24 DML0000006
NY 175EB87A0046401E IS ISLP87 A06M025140
NY 17B299AF1547470C IS ISLP88 DML0000014
NY 17465B0D02D59615 IS ISLP89 A06M024770
NY 17A867CF1027FFEA IS ISLP93 DML0000011
NY 17E19B5C0335CF89 IT IT0010 TABS000102
NY 1805F2811C1EC577 IT IT0010 TABS000131
NY 17D16E691E9EC1CE IT IT5000 RFT0000015
NY 17D16E71046222B0 IT IT5001 RFT0000015
NY 17D16E75009E2EC5 IT IT5002 RFT0000015
NY 17D16E79100FE8ED IT IT5003 RFT0000015
NY 17D16E7C096D1E00 IT IT5010 RFT0000015
NY 177C9DD11A871B48 IT IT5501 A20Y001508
NY 17D16E7E10BACFAF IT IT5503 RFT0000015
NY 181E268E1D177D30 IT IT8481 TABS000160
NY 178626B503DAD8E1 IT YIT0022 A20Y001569547AFE2B
NY 177B50660BB6E3A1 IT YITD00 A20Y001509542023A5
NY 177B50520E6A6E4B IT YITD01 A20Y001509542022FD
NY 177B504C1BA38CE8 IT YITD02 A20Y001509542022D1
NY 17B6E32A0D21727D IT YITGT TABS0000535613E056
NY 17B6E17215E77544 IT YITGTR TABS0000535613D1F0
NY 17E683DD10B93103 KA KA0030 KOAB000039
NY 17F7CD931EDBCCE6 KA KA0030 KOAB000046
NY 17F660C506E35510 KA KA0030 KOAB000047
NY 15B8A5E81D691C64 KB KB2010 19961114221018S101702A058608AKB2010
NY 15B92FA10D1799D0 KB KB2010 19961118082438S101702Z277492AKB2010
NY 15BACCA11C862B22 KB KB2010 19961128144621S101702A059147AKB2010
NY 155C31F619477AAA KB KB2020 19950406154743S101702A043366AKB2020
NY 15FA9CDA00594348 KB KB2020 19980108153831S101702M000886AKB2020
NY 156259B200F60008 KB KB5010 19950515S101702Z189864AKB5010
NY 156273BC149B0D46 KB KB5010 19950516S101702Z190008AKB5010
NY 156AB0B11D491CE2 KB KB5010 19950707S101702Z198701AKB5010
NY 175D03390323BE42 KC YKCWFVU A12M0061415321E5B0
NY 15B8A6000554B20A KD FC0020 19961114221845S101702A058752AFC0020
NY 15C5CFB9066B8104 KD FC0020 19970206162503S101702A061517AFC0020
NY 15F264DE161D7C18 KD FC5000 19971117083808S101702Z344985AFC5000
NY 15F2E5E2114F55C6 KD FC5000 19971120133503S101702A068334AFC5000
NY 15F3165B1CF1E4D4 KD FC5000 19971121183017S101702Z346058AFC5000
NY 158F69AA0EA4C302 KD KD0068 19960226131303S101702Z235794AKD0068
NY 161878261BA05DF7 KD KD0540 19980717170619S101702Z383268AKD0540
NY 15B104390214625A KD KD0600 19960927085001S101702Z268024AKD0600
NY 15B1FEA60B8D931A KD KD0600 19961003141208S101702A057537AKD0600
NY 15DAB25E0DF199C4 KD KD0600 19970619134842S101702A064764AKD0600
NY 15CC6B18173BBEC6 KD KD0620 19970320172119S101702A062566AKD0620
NY 15D8848F16F2D0C2 KD KD0620 19970605170251S101702A064138AKD0620
NY 15DAB2591D03FCEE KD KD0620 19970619134843S101702A064764AKD0620
NY 1585FD900D3959B0 KD KD0630 19951228S101702A050783AKD0630
NY 15AD9AE0108393F0 KD KD0630 19960905154850S101702M000711AKD0630
NY 15B0E4331D085892 KD KD0630 19960926134359S101702A057314AKD0630
NY 15B0E4360F49A806 KD KD0640 19960926134359S101702A057314AKD0640
NY 15B1044C1D3B5666 KD KD0640 19960927085317S101702Z268027AKD0640
NY 15B1FEA00F75F5FA KD KD0640 19961003141209S101702A057537AKD0640
NY 157B014C1A9528B6 KD KD0670 19951019S101702M000621AKD0670
NY 155C323703EB05A2 KD KD5020 19950406S101702A043419AKD5020
NY 157B014C12699D0A KD KD5020 19951019S101702M000621AKD5020
NY 157C2E08114EF1AC KD KD5040 19951027S101702Z214879AKD5040
NY 157E4FDB0D153F30 KD KD5040 19951109S101702A049329AKD5040
NY 157E5C6E013FDBE8 KD KD5040 19951110S101702A049329AKD5040
NY 157B014C05F1EFD4 KD KD7000 19951019S101702M000621AKD7000
NY 157C161D12025286 KD KD7000 19951026S101702A048919AKD7000
NY 1577DCD711F06A74 KD KD7098 19950929S101702Z210568AKD7098
NY 15784CB413F1E26E KD KD7098 19951002S101702Z210762AKD7098
NY 1578CA630B64679E KD KD7098 19951005S101702A048223AKD7098
NY 15A084B61057ECFC KD KD7200 19960614092516S101702A055036AKD7200
NY 15C285030193C06A KD KD8010 19970116174423S101702A060854AKD8010
NY 15C5CEC01010BD42 KD KD8010 19970206155033S101702A061213AKD8010
NY 15E38BF50169C18A KD KD8010 19970814211634S101702A065956AKD8010
NY 1572336409D76370 KD KD8011 19950824S101702M000598AKD8011
NY 15C5CEC108DF46DC KD KD8011 19970206155034S101702A061213AKD8011
NY 15CE44D016153D5C KD KD8012 19970401115710S101702Z304029AKD8012
NY 15CE4B401A011FA0 KD KD8012 19970401154800S101702Z304029AKD8012
NY 15CEBB92073E4C12 KD KD8012 19970404104807S101702Z304584AKD8012
NY 15C5CC090DF64506 KD KD8014 19970206141304S101702A061437AKD8014
NY 15E38C1F1BA0260A KD KD8014 19970814211637S101702A065956AKD8014
NY 15C5CC091133ABDE KD KD8015 19970206141306S101702A061437AKD8015
NY 15E38C230DB7BDEC KD KD8015 19970814211640S101702A065956AKD8015
NY 15C6BBEB01E36862 KD KD8030 19970212131949S101702Z295927AKD8030
NY 15CD84B711145636 KD KD8030 19970327172217S101702Z303860AKD8030
NY 15E38C0905BCFF08 KD KD8030 19970814211641S101702A065956AKD8030
NY 15FCCCAA036D0FEA KD KD8040 19980122133753S101702A069908AKD8040
NY 15FDE5FE0314BA2E KD KD8040 19980129132654S101702A070094AKD8040
NY 15A067CB119AD1EC KD KD8070 19960613161006S101702A054120AKD8070
NY 15AEAADF1C7E1118 KD KD8090 19960912100713S101702Z265960AKD8090
NY 15AF57861B8B8DDE KD KD8090 19960916170653S101702Z266453AKD8090
NY 15B1120A06301B18 KD KD8090 19960927170504S101702Z268138AKD8090
NY 15834A2D135F83E0 KD KD8096 19951211S101702Z223940AKD8096
NY 159BD80404846662 KD KD8096 19960515153311S101702M000684AKD8096
NY 15AD9ADE0046B79C KD KD8096 19960905155004S101702M000711AKD8096
NN 1583CFC0008CCFE0 KD KD8200 19951214S101702A050488AKD8200
NN 1585FD791FFF0AEA KD KD8200 19951228S101702A050761AKD8200
NY 15C69B1A1FCADB2E KD KD8512 19970211174525S101702Z295758AKD8512
NY 15C6B2D912026632 KD KD8512 19970212075517S101702Z295814AKD8512
NY 15C6B6A814B7A556 KD KD8512 19970212101134S101702Z295814AKD8512
NN 155C32451E87F830 KD YKD0500 19950406S101702A043450AYKD0500
NN 1563BCFD0EDB2042 KD YKD0500 19950524S101702A044691AYKD0500
NN 1568EAFE0D5A3F90 KD YKD0500 19950626S101702A045713AYKD0500
NN 1572335406D0308E KD YKD0500 19950824S101702M000598AYKD0500
NN 15894B480F964A0E KD YKD0500 19960118S101702A051288AYKD0500
NN 158ECAFF138EEB44 KD YKD0500 19960222143318S101702A052162AYKD0500
NN 159F26CD05C1FA22 KD YKD0500 19960605164059S101702Z251552AYKD0500
NN 15A17DF80F05374E KD YKD0500 19960620140638S101702A055061AYKD0500
NN 15AD1AFC03B5B9C2 KD YKD0500 19960902113434S101702Z264258AYKD0500
NN 15AD9A511B94EA2E KD YKD0500 19960905153037S101702M000711AYKD0500
NN 15C5EB1509074F78 KD YKD0500 19970207084459S101702A061408AYKD0500
NN 15C7FD8D1B047776 KD YKD0500 19970220131055S101702A061859AYKD0500
NN 15CD59581F868D66 KD YKD0500 19970326152928S101702A062772AYKD0500
NN 15CD85F103D59AAC KD YKD0500 19970327180544S101702A062772AYKD0500
NN 15E37FE91C7B23D4 KD YKD0500 19970814140402S101702M000800AYKD0500
NN 15E6CEF11FA4B640 KD YKD0500 19970904152318S101702A066089AYKD0500
NN 15E88BA11939633E KD YKD0500 19970915163933S101702A066826AYKD0500
NN 15E8FE3F13644320 KD YKD0500 19970918130127S101702A066876AYKD0500
NN 15F2EEB91D073CD8 KD YKD0500 19971120185108S101702M000818AYKD0500
NN 15F35ED91227D75A KD YKD0500 19971123134508S101702Z346134AYKD0500
NN 15F362DB077F0C56 KD YKD0500 19971123160833S101702Z346148AYKD0500
NN 15F3646E1EA25C0A KD YKD0500 19971123170525S101702Z346148AYKD0500
NN 15F3662E1D147D34 KD YKD0500 19971123180702S101702Z346152AYKD0500
NN 15F369CE0D0F47CA KD YKD0500 19971123194631S101702Z346164AYKD0500
NN 15F3AC9012C73DA2 KD YKD0500 19971125120634S101702Z346700AYKD0500
NN 15F51AAE092A4BFA KD YKD0500 19971204142946S101702Z348815AYKD0500
NN 15F5E973080E51E4 KD YKD0500 19971209175158S101702Z349699AYKD0500
NN 15F603000BF7D730 KD YKD0500 19971210090526S101702Z349765AYKD0500
NN 15F603781AF2232E KD YKD0500 19971210092215S101702Z349795AYKD0500
NN 15FBBA170A2A671E KD YKD0500 19980115174941S101702M000856AYKD0500
NN 15FF2F5D15AE1F82 KD YKD0500 19980206175332S101702A070225AYKD0500
NN 1600415710BDCF88 KD YKD0500 19980213132025S101702A070420AYKD0500
NN 160484D90C45D320 KD YKD0500 19980312162639S101702A070997AYKD0500
NN 16048755010B03D8 KD YKD0500 19980312175740S101702A070997AYKD0500
NN 1607F2CF0A1FA4F4 KD YKD0500 19980403141032S101702A071472AYKD0500
NN 160A06261A472F65 KD YKD0500 19980416190530S101702M000898AYKD0500
NN 1612E4F30FCA96DA KD YKD0500 19980612054559S101702M000922AYKD0500
NN 161310A30C678722 KD YKD0500 19980613074807S101702Z378634AYKD0500
NN 1613E4AC0B090F20 KD YKD0500 19980618141748S101702A073266AYKD0500
NN 1615EAC01A922BBA KD YKD0500 19980701111931S101702A073364AYKD0500
NN 1615EEA60F9DED86 KD YKD0500 19980701133922S101702A073364AYKD0500
NN 16161DF5150335D8 KD YKD0500 19980702175321S101702Z381719AYKD0500
NN 161731E90D5CB082 KD YKD0500 19980709142935S101702A073757AYKD0500
NN 16187C441D650656 KD YKD0500 19980717193307S101702Z383289AYKD0500
NN 16187CA10D0C1682 KD YKD0500 19980717194602S101702Z383292AYKD0500
NN 157B01301557EAE2 KD YKD0640 19951019S101702M000621AYKD0640
NN 157EEA2B0B614E78 KD YKD0640 19951113S101702A048936AYKD0640
NN 1590FD5E01CE84F8 KD YKD0640 19960307140102S101702A052143AYKD0640
NN 15A17DF50EA9DEEA KD YKD0640 19960620140639S101702A055061AYKD0640
NN 15B0E4230CBCBF48 KD YKD0640 19960926133932S101702A057314AYKD0640
NN 157B013102691596 KD YKD0641 19951019S101702M000621AYKD0641
NN 157EEA2B006453EC KD YKD0641 19951113S101702A048936AYKD0641
NN 1590FD5D0499C14E KD YKD0641 19960307140103S101702A052143AYKD0641
NN 15A17DF50EB09798 KD YKD0641 19960620140639S101702A055061AYKD0641
NN 15B0E41008853F86 KD YKD0641 19960926133927S101702A057314AYKD0641
NN 157B013103143876 KD YKD0642 19951019S101702M000621AYKD0642
NN 157EEA2C118B488E KD YKD0642 19951113S101702A048936AYKD0642
NN 158197AC1508C70A KD YKD0642 19951130S101702A049980AYKD0642
NN 1590FD5C1E039004 KD YKD0642 19960307140103S101702A052143AYKD0642
NN 15921ACD0C53E05C KD YKD0642 19960314161748S101702M000666AYKD0642
NN 1597969911B74380 KD YKD0642 19960418134159S101702M000672AYKD0642
NN 159BD7EA0A2201E4 KD YKD0642 19960515152932S101702M000684AYKD0642
NN 15A932370B9BDBC6 KD YKD0642 19960808143158S101702A056273AYKD0642
NN 15AD9A60060A0F4E KD YKD0642 19960905153039S101702M000711AYKD0642
NN 15B0E420059B0CC4 KD YKD0642 19960926133928S101702A057314AYKD0642
NN 15B1044114608070 KD YKD0642 19960927085133S101702Z268027AYKD0642
NN 15B1FE8700AD7DF0 KD YKD0642 19961003140829S101702A057537AYKD0642
NN 157B01300CD380D0 KD YKD0643 19951019S101702M000621AYKD0643
NN 157EEA2B04950E2A KD YKD0643 19951113S101702A048936AYKD0643
NN 159E0CE1082F7438 KD YKD0643 19960529163059S101702Z250540AYKD0643
NN 15A473800933E026 KD YKD0643 19960709095917S101702Z256432AYKD0643
NN 15A5E43F034B9320 KD YKD0643 19960718135640S101702A055861AYKD0643
NN 15B0E41605439978 KD YKD0643 19960926133929S101702A057314AYKD0643
NN 157B013314A80B84 KD YKDC91 19951019S101702M000621AYKDC91
NN 155C323E135E2824 KD YKDH00 19950406S101702A043450AYKDH00
NN 15CD59540ABCE1C8 KD YKDH00 19970326152925S101702A062772AYKDH00
NN 15CD85F10E6A5B02 KD YKDH00 19970327180543S101702A062772AYKDH00
NN 155C3243073ED954 KD YKDH01 19950406S101702A043450AYKDH01
NN 155C3243037F14D4 KD YKDH02 19950406S101702A043450AYKDH02
NN 155C32430C15DA0E KD YKDH03 19950406S101702A043450AYKDH03
NN 15E3801909B1647C KD YKDH03 19970814141325S101702M000800AYKDH03
NN 155C323C1F691A1C KD YKDH04 19950406S101702A043450AYKDH04
NN 155C323D0BF5FB1C KD YKDH05 19950406S101702A043450AYKDH05
NN 155C323D1FDE6A50 KD YKDH06 19950406S101702A043450AYKDH06
NN 155C323D1DB64B6E KD YKDH50 19950406S101702A043450AYKDH50
NN 155C323E13450388 KD YKDH51 19950406S101702A043450AYKDH51
NN 155C323E13F52FD8 KD YKDH52 19950406S101702A043450AYKDH52
NN 155C323F1DA6EE94 KD YKDH53 19950406S101702A043450AYKDH53
NN 155C323F15AD8A24 KD YKDH58 19950406S101702A043450AYKDH58
NN 155C324019D2BF54 KD YKDH59 19950406S101702A043450AYKDH59
NN 155C32410F7AEF26 KD YKDH60 19950406S101702A043450AYKDH60
NN 155C32410922D810 KD YKDH61 19950406S101702A043450AYKDH61
NN 155C324215629C66 KD YKDH91 19950406S101702A043450AYKDH91
NN 15BACC9313B278D8 KD YKDH91 19961128144447S101702A059147AYKDH91
NN 155C3242044DC582 KD YKDH92 19950406S101702A043450AYKDH92
NN 157B0133172455E4 KD YKDR00 19951019S101702M000621AYKDR00
NN 157B01331881AB60 KD YKDR01 19951019S101702M000621AYKDR01
NN 157B013407DC7C62 KD YKDR03 19951019S101702M000621AYKDR03
NN 157B013510F9BF94 KD YKDR04 19951019S101702M000621AYKDR04
NN 157B01350071D5B8 KD YKDR06 19951019S101702M000621AYKDR06
NN 157B01360C742192 KD YKDR16 19951019S101702M000621AYKDR16
NN 157B013608401B52 KD YKDR17 19951019S101702M000621AYKDR17
NN 157B01360F463884 KD YKDR18 19951019S101702M000621AYKDR18
NN 157B01360F346934 KD YKDR19 19951019S101702M000621AYKDR19
NN 157B013702C1292E KD YKDR20 19951019S101702M000621AYKDR20
NN 157B01360FA330A0 KD YKDR21 19951019S101702M000621AYKDR21
NN 157B013711EC162A KD YKDR22 19951019S101702M000621AYKDR22
NN 157B013703BE3850 KD YKDR50 19951019S101702M000621AYKDR50
NN 157B013715FBC704 KD YKDR51 19951019S101702M000621AYKDR51
NN 157B013710BC5C4A KD YKDR53 19951019S101702M000621AYKDR53
NN 157B0138152B6542 KD YKDR59 19951019S101702M000621AYKDR59
NN 157B013D1BB7A3FA KD YKDR60 19951019S101702M000621AYKDR60
NN 157B013C1712294C KD YKDR61 19951019S101702M000621AYKDR61
NN 157B013E07B45500 KD YKDR67 19951019S101702M000621AYKDR67
NN 157B012B1FE83E02 KD YKDR68 19951019S101702M000621AYKDR68
NN 157B012F1074D6D2 KD YKDR73 19951019S101702M000621AYKDR73
NN 157B012D0425CD12 KD YKDR74 19951019S101702M000621AYKDR74
NN 157B012D03F7BFF2 KD YKDR75 19951019S101702M000621AYKDR75
NN 157B012B19851ABA KD YKDR78 19951019S101702M000621AYKDR78
NN 15B0E40F07484198 KD YKDR78 19960926133932S101702A057314AYKDR78
NN 157B012B0A684DD8 KD YKDR88 19951019S101702M000621AYKDR88
NN 157B012B1A32EC8C KD YKDR89 19951019S101702M000621AYKDR89
NN 157B012B11253B60 KD YKDR91 19951019S101702M000621AYKDR91
NN 157B012F17B71458 KD YKDR92 19951019S101702M000621AYKDR92
NN 157B012D1E69E1EC KD YKDR93 19951019S101702M000621AYKDR93
NN 157B012E0D3DCD80 KD YKDR97 19951019S101702M000621AYKDR97
NN 157B012E10191FDA KD YKDR98 19951019S101702M000621AYKDR98
NN 155C32440D013D8C KD YKDS91 19950406S101702A043450AYKDS91
NN 15CD85F013C52902 KD YKDS91 19970327180544S101702A062772AYKDS91
NN 157B012E1793B91C KD YKDT00 19951019S101702M000621AYKDT00
NN 15A932271B75D182 KD YKDT00 19960808143156S101702A056273AYKDT00
NN 157B012F13FEF75A KD YKDV81 19951019S101702M000621AYKDV81
NN 157B9F2C1C4E9826 KD YKDV81 19951023S101702Z214190AYKDV81
NN 157BC01D0B0D5624 KD YKDV81 19951024S101702Z214339AYKDV81
NN 157BC607119387BA KD YKDV81 19951024S101702Z214421AYKDV81
NN 157EEA2B00BA6AE2 KD YKDV81 19951113S101702A048936AYKDV81
NN 158147710CCE6808 KD YKDV81 19951128S101702Z221489AYKDV81
NN 158197A91A6277CE KD YKDV81 19951130S101702A049980AYKDV81
NN 15921ACA1E8A2146 KD YKDV81 19960314161746S101702M000666AYKDV81
NN 159BD7EA06A58A10 KD YKDV81 19960515152935S101702M000684AYKDV81
NN 15A9321C1348F6C4 KD YKDV81 19960808143159S101702A056273AYKDV81
NN 15AD9A511306D3F8 KD YKDV81 19960905153031S101702M000711AYKDV81
NN 15B0E41A07BB2F12 KD YKDV81 19960926133929S101702A057314AYKDV81
NN 15B104221CBF2376 KD YKDV81 19960927084725S101702Z268022AYKDV81
NN 15B1FE8707CC76AE KD YKDV81 19961003140832S101702A057537AYKDV81
NN 15997B3D1157CD8E KD YKDX81 19960430144759S101702Z245908AYKDX81
NN 15997B6A10193FCA KD YKDX81 19960430145417S101702Z245908AYKDX81
NN 1599CDF318B0CD4E KD YKDX81 19960502160759S101702A053827AYKDX81
NN 159BD7E901D3785E KD YKDX81 19960515152931S101702M000684AYKDX81
NY 17E863760C45D2AC KE YKEA082 EBVV00022157B31F45
NY 17EDDC970054F072 KE YKEA082 EBVV00023557E108BE
NY 17E863791127A995 KE YKEA083 EBVV00022157B31F59
NY 17EDDC98185E11D8 KE YKEA083 EBVV00023557E108D7
NY 15501B1D1894F578 KEIN KD8014 19950119173805S101702A041425AKD8014
NY 15501B1F12A18210 KEIN KD8015 19950119173805S101702A041425AKD8015
NY 15A93269122828C2 KEIN NS0890 19960808144239S101702A056331ANS0890
NY 15AA4B82062790A6 KEIN NS0890 19960815142208S101702A056403ANS0890
NY 15AB65010A6D2094 KEIN NS0890 19960822141851S101702A056667ANS0890
NY 17D972E918EDEDBD KR YKRBCAL ACP00000725735CCA5
NY 17B5D1790F2E75B0 KR YKRT385 VEFO000008560AE85C
NY 180C5C3F12722594 KR YKRT385 VEFO00003458E0E00AMVS
NY 17B5D17900FEA714 KR YKRT397 VEFO000008560AE862
NY 180C5C4101678B29 KR YKRT397 VEFO00003458E0E01BMVS
NY 17B5D1DA1248013A KR YKRT511 KAUF000015560AEBA9
NY 1812B3490A67FE90 KR YKRT511 KAUF00003859160EE7MVS
NY 182A188F0DA7FF98 KR YKRT511 KAUF00004059DA50DA
NY 182A18910CBB2B8E KR YKRT511 KAUF00004059DA50DAMVS
NY 14DD80E91611F964 KS KS0600
NY 154A994901A34B88 KS KS0600 19941215163732S101702A040306AKS0600
NY 154A9C390108A038 KS KS0600 19941215182205S101702A040306AKS0600
NY 154A9C3C0B81E13E KS KS0610 19941215182206S101702A040306AKS0610
NY 15A06AC81EDFD8D2 KS KS0720 19960613175707S101702A054915AKS0720
NY 15BD2F7B06D4DCDE KS KS0720 19961213190918S101702A059882AKS0720
NY 15E264D91A9172D8 KS KS0720 19970807131518S101702A065672AKS0720
NY 17D37A990140AD5C KS KS5500 CSED000019
NY 17F00CDD12D3C623 KS KS5500 CSED000026
NY 17E1CB2300566C05 KS KS5685 EBVV000187
NY 17F03903043601C0 KS KS5685 EBVV000233
NY 17F6AAB109811DC0 KS KS5685 EBVV000245
NY 146931EA089B3C10 KS KS8000
NY 161097811AD2C3B8 KS KS8050 19980528140608S101702A072741AKS8050
NY 1469311008FAC394 KS KS8900
NY 14F07EEA108A9BFE KS YKS0031
NY 15C5A9021D11D1B0 KS YKS0802 19970205171935S101702A061407AYKS0802
NY 15C5CDB80290E4FC KS YKS0802 19970206151324S101702A061407AYKS0802
NY 15C5EFAE046AC4F4 KS YKS0802 19970207112844S101702A061561AYKS0802
NY 15D530F806BAC2AF KS YKS0802 19970515130326S101702A063870AYKS0802
NY 15D5FE1E087A8967 KS YKS0802 19970520152637S101702A064036AYKS0802
NY 15E122B6100B6608 KS YKS0802 19970730130516S101702A065612AYKS0802
NY 15E9A9080C11DC3A KS YKS0802 19970922185351S101702A066941AYKS0802
NY 160480F70195E1E2 KS YKS0802 19980312140727S101702A071004AYKS0802
NY 160E6C9414C2B25E KS YKS0802 19980514190209S101702A072512AYKS0802
NY 15D531011C2714A2 KS YKS0806 19970515130321S101702A063870AYKS0806
NY 15D5FE1E06E0015E KS YKS0806 19970520152633S101702A064036AYKS0806
NY 15E122B215B0F988 KS YKS0806 19970730130512S101702A065612AYKS0806
NY 15E9A9080B234082 KS YKS0806 19970922185347S101702A066941AYKS0806
NY 15F0B3E204C81A5E KS YKS0806 19971106141958S101702A068104AYKS0806
NY 160480F704784A38 KS YKS0806 19980312140715S101702A071004AYKS0806
NY 160E6C9215393F5C KS YKS0806 19980514190144S101702A072512AYKS0806
NN 15D530FE0FDD980E KS YKS0809 19970515130322S101702A063870AYKS0809
NN 15D5FE1D18543E3B KS YKS0809 19970520152634S101702A064036AYKS0809
NY 160E6C8E1CEFC334 KS YKS0813 19980514190151S101702A072512AYKS0813
NY 160EB0D40F5D0D0E KS YKS0813 19980516114927S101702Z374928AYKS0813
NY 1613E56F1740210C KS YKS0813 19980618144536S101702A073286AYKS0813
NY 17E1ED24088B4797 KS YKS5511 CSED000022577CE9CC
NY 17F451721AC06789 KS YKS5511 CSED000026581723E4
NY 18031469192E3BF6 KS YKS5511 CSED0000315892F81B
NY 18038C5F0A8E10F1 KS YKS5511 CSED0000325896E675
NY 17E28BFC03EFF710 KS YKS5512 CSED00002257821E43
NY 17F30A46154809DF KS YKS5512 CSED000026580C796C
NY 1803146A1DE571CD KS YKS5512 CSED0000315892F832
NY 18038C2B07BE3BD3 KS YKS5512 CSED0000325896E4BF
NY 155F7CCB14535948 KS YKS5551 19950427S101702A043905AYKS5551
NY 15807C8F0A393196 KS YKS5551 19951123S101702A049861AYKS5551
NY 1581BC9B17CE2FBC KS YKS5551 19951201S101702A050046AYKS5551
NY 1583CF950A954152 KS YKS5551 19951214S101702A050423AYKS5551
NY 15BD2F690661B65C KS YKS5551 19961213190524S101702A059882AYKS5551
NY 15C39D880FA90CA2 KS YKS5551 19970123170322S101702A060998AYKS5551
NY 15C43FC108E725F4 KS YKS5551 19970127175027S101702Z293101AYKS5551
NY 15CA30A11FB83D46 KS YKS5551 19970306130420S101702A061749AYKS5551
NY 15E382E11FD1313C KS YKS5551 19970814154706S101702M000820AYKS5551
NY 15EB3140182E11DE KS YKS5551 19971002124932S101702A067136AYKS5551
NY 1607F47213DDE91A KS YKS5551 19980403151109S101702Z368246AYKS5551
NY 160D49D91657B8F8 KS YKS5551 19980507134024S101702A072187AYKS5551
NY 160E641E15A66F6B KS YKS5551 19980514140042S101702A072309AYKS5551
NY 16131CF0132EF012 KS YKS5551 19980613150900S101702Z378654AYKS5551
NY 1617303B115B2127 KS YKS5551 19980709132913S101702A073491AYKS5551
NY 155F7CCB1751D630 KS YKS5552 19950427S101702A043905AYKS5552
NY 15807C91122733AE KS YKS5552 19951123S101702A049861AYKS5552
NY 1581BC9C16B9BFB4 KS YKS5552 19951201S101702A050046AYKS5552
NY 1583CF961ED82F84 KS YKS5552 19951214S101702A050423AYKS5552
NY 15BD2F681AE16098 KS YKS5552 19961213190524S101702A059882AYKS5552
NY 15E382E11DAE20C0 KS YKS5552 19970814154715S101702M000820AYKS5552
NY 160F546507A4E9F8 KS YKS5552 19980520132122S101702A072626AYKS5552
NY 15AEB4BE0882A382 KS YKS5553 19960912155328S101702A057108AYKS5553
NY 15BD2F6A06FD2C8A KS YKS5553 19961213190525S101702A059882AYKS5553
NY 15C39D8815111DC2 KS YKS5553 19970123170324S101702A060998AYKS5553
NY 15CE9A5317318254 KS YKS5553 19970403145839S101702A062688AYKS5553
NY 15D3EF6706F673D4 KS YKS5553 19970507131535S101702A063114AYKS5553
NY 15D87F81108E9D1C KS YKS5553 19970605140318S101702A063951AYKS5553
NY 15E382E218DDB9A6 KS YKS5553 19970814154722S101702M000820AYKS5553
NY 15EB3133182C165A KS YKS5553 19971002124933S101702A067136AYKS5553
NY 16013C6610826A82 KS YKS5553 19980219190855S101702A070545AYKS5553
NY 1601646C0EAA38C2 KS YKS5553 19980220190032S101702A070545AYKS5553
NY 1611B0D9040F1E43 KS YKS5553 19980604135613S101702A072797AYKS5553
NY 1615EEA81940ABD3 KS YKS5553 19980701133926S101702Z381523AYKS5553
NY 1617303D133A78E8 KS YKS5553 19980709132913S101702A073491AYKS5553
NN 150CFBA511783720 KS YKSAUFT
NN 151E9D6D18BC86E4 KS YKSAUFT 19940310195022S101702A032347A
NN 151FB036173F5ACA KS YKSAUFT 19940317154525S101702A032520AYKSAUFT
NN 1520C9B3183C5B60 KS YKSAUFT 19940324153804S101702A032785AYKSAUFT
NN 152648891D64FB0E KS YKSAUFT 19940428145413S101702A033787AYKSAUFT
NY 1529963E17645A12 KS YKSAUFT 19940519152148S101702A034419AYKSAUFT
NY 152BC8D10ECBBD12 KS YKSAUFT 19940602144938S101702A034556AYKSAUFT
NY 153150E30C41AED0 KS YKSAUFT 19940707194026S101702M000478AYKSAUFT
NY 1536C7C71622437C KS YKSAUFT 19940811140925S101702A036426AYKSAUFT
NY 1536D1C90537339C KS YKSAUFT 19940811195830S101702A036426AYKSAUFT
NY 154A9A510B790ED4 KS YKSAUFT 19941215164630S101702A040392AYKSAUFT
NY 154A9C40009D10C8 KS YKSAUFT 19941215182250S101702A040392AYKSAUFT
NY 155249051560D374 KS YKSAUFT 19950202142636S101702A041794AYKSAUFT
NY 15547C421718CC92 KS YKSAUFT 19950216142447S101702A042149AYKSAUFT
NY 1561B0C50FB84470 KS YKSAUFT 19950511S101702A044324AYKSAUFT
NY 1564FD5A1A35CDA6 KS YKSAUFT 19950601S101702M000585AYKSAUFT
NY 157230400F815CA8 KS YKSAUFT 19950824S101702A047164AYKSAUFT
NY 15757C0513447D46 KS YKSAUFT 19950914S101702A047692AYKSAUFT
NY 1583C99706009534 KS YKSAUFT 19951214S101702M000648AYKSAUFT
NY 1583C51515E20594 KS YKSAUFT 19951214S101702Z224822AYKSAUFT
NY 159633290999DBF2 KS YKSAUFT 19960409173948S101702A053018AYKSAUFT
NY 1596542B19C2BDBC KS YKSAUFT 19960410132144S101702Z242748AYKSAUFT
NY 15965583058DD2EA KS YKSAUFT 19960410140945S101702Z242764AYKSAUFT
NY 1596583D1FA84186 KS YKSAUFT 19960410154724S101702Z242818AYKSAUFT
NY 159797631046EF48 KS YKSAUFT 19960418140918S101702A053458AYKSAUFT
NY 159863560871884C KS YKSAUFT 19960423154952S101702A053648AYKSAUFT
NY 159BD8ED1B350282 KS YKSAUFT 19960515160557S101702M000686AYKSAUFT
NY 15B43678023ED9C8 KS YKSAUFT 19961017165520S101702A057903AYKSAUFT
NY 15B4F01F0A5E5F86 KS YKSAUFT 19961022074124S101702Z271871AYKSAUFT
NY 15B4FB5F1C8B104C KS YKSAUFT 19961022142351S101702Z272071AYKSAUFT
NY 15B54C5A0137E976 KS YKSAUFT 19961024144245S101702A058089AYKSAUFT
NY 15B56A3105C55AE0 KS YKSAUFT 19961025083025S101702Z273139AYKSAUFT
NY 15B56E2A17DA35EA KS YKSAUFT 19961025105240S101702Z273213AYKSAUFT
NY 15B8996708F1EF16 KS YKSAUFT 19961114144518S101702M000743AYKSAUFT
NY 15B8A1DE0F9BDBD2 KS YKSAUFT 19961114194908S101702M000743AYKSAUFT
NY 15BC8C2E175FC006 KS YKSAUFT 19961209174335S101702A059465AYKSAUFT
NY 15BDE9D711B2E6CA KS YKSAUFT 19961218101955S101702A059995AYKSAUFT
NY 15C6E5C918C07FF4 KS YKSAUFT 19970213141858S101702A061515AYKSAUFT
NY 15F6334F1B6852B8 KS YKSAUFT 19971211135316S101702A068968AYKSAUFT
NY 16001B63183B2DD4 KS YKSAUFT 19980212144151S101702M000834AYKSAUFT
NY 168DD4C201466813 KS YKSAUFT A15S000557
NY 17D463390A25822D KS YKSBKST CSED000019570B579E
NY 175FCE5A0CFDC6CD KS YKSFTXT A14S002412533962A5
NY 175FCE5B026E1669 KS YKSFTXT A14S002412533962A5CICS
NY 178C25361558E594 KS YKSISOC CSED00000554AD468E
NN 14F17F570C179124 KS YKSLFNR
NN 154A99271F6F15FA KS YKSLFNR 19941215163239S101702A040306AYKSLFNR
NN 154A9C1014114058 KS YKSLFNR 19941215181826S101702A040306AYKSLFNR
NY 1509AEAE1561F664 KS YKSMODU
NY 151E9D6A0132D42C KS YKSMODU 19940310195039S101702A032347A
NY 151FB0320BB17792 KS YKSMODU 19940317154541S101702A032520AYKSMODU
NY 1520C9C70B72BB8A KS YKSMODU 19940324153841S101702A032785AYKSMODU
NN 152648861B54F39A KS YKSMODU 19940428145414S101702A033787AYKSMODU
NN 152996380925ED74 KS YKSMODU 19940519152202S101702A034419AYKSMODU
NN 152BC8CC09049F8C KS YKSMODU 19940602145024S101702A034556AYKSMODU
NN 153150E2172DF882 KS YKSMODU 19940707194027S101702M000478AYKSMODU
NN 1536C7BD13F3E0B8 KS YKSMODU 19940811140924S101702A036426AYKSMODU
NN 1536D1B018842212 KS YKSMODU 19940811195758S101702A036426AYKSMODU
NN 154A9A4F0D858DAC KS YKSMODU 19941215164631S101702A040392AYKSMODU
NN 154A9C3E15381990 KS YKSMODU 19941215182251S101702A040392AYKSMODU
NN 155249031B3E8EF4 KS YKSMODU 19950202142637S101702A041794AYKSMODU
NN 15547C421CBF9A46 KS YKSMODU 19950216142448S101702A042149AYKSMODU
NN 1561B0C21E8AAE32 KS YKSMODU 19950511S101702A044324AYKSMODU
NN 1572303E1E0F82E0 KS YKSMODU 19950824S101702A047164AYKSMODU
NN 1583C997096B3DC0 KS YKSMODU 19951214S101702M000648AYKSMODU
NN 1596332906AE8548 KS YKSMODU 19960409173948S101702A053018AYKSMODU
NN 159797630E3B1B3A KS YKSMODU 19960418140921S101702A053458AYKSMODU
NN 159BD8DC1077A2DA KS YKSMODU 19960515160306S101702M000686AYKSMODU
NY 15B43677179A5E04 KS YKSMODU 19961017165521S101702A057903AYKSMODU
NY 15B4FB5F07CE385C KS YKSMODU 19961022142351S101702Z272071AYKSMODU
NY 15B54C590CEE7BEE KS YKSMODU 19961024144246S101702A058089AYKSMODU
NY 15B56E2C177B6FF8 KS YKSMODU 19961025105241S101702Z273213AYKSMODU
NY 15B8995A103CBC86 KS YKSMODU 19961114144530S101702M000743AYKSMODU
NY 15B8A1DC1ED5141C KS YKSMODU 19961114194917S101702M000743AYKSMODU
NY 15BC8C281F924658 KS YKSMODU 19961209174338S101702A059465AYKSMODU
NY 15F6334E1FE33AFA KS YKSMODU 19971211135319S101702A068968AYKSMODU
NY 15F6558D09AD722A KS YKSMODU 19971212102013S101702Z350189AYKSMODU
NY 15F6FC0D0EC3E22C KS YKSMODU 19971216133928S101702A069161AYKSMODU
NY 16001B63137CA2D8 KS YKSMODU 19980212144151S101702M000834AYKSMODU
NY 15209A9E0FE56B14 KS YKSZNID 19940323113754S101702A032639AYKSZNID
NY 1522FC091E9A706A KS YKSZNID 19940407150310S101702A032963AYKSZNID
NY 1522FEAF1380473A KS YKSZNID 19940407164427S101702A032963AYKSZNID
NY 15BD2F5C18903F58 KS YKSZNID 19961213190542S101702A059882AYKSZNID
NY 1558E39009FCEDEA KS ZKSFTXT 19950316145243S101702A042669AZKSFTXT
NN 15FBB30A0E3F3E8E KV BX0130 19980115133833S101702A069359ABX0130
NN 16173BB70544877E KV BX0130 19980709201828S101702A073668ABX0130
NN 1617503A06090CEE KV BX0130 19980710083334S101702A073668ABX0130
NN 157B2587123CB8B4 KX YKX002 19951020S101702A048828AYKX002
NN 158007560378CA20 KX YKX002 19951120S101702A049712AYKX002
NN 1594ED0E0A16EBD2 KX YKX002 19960401150805S101702A053178AYKX002
NN 15A7F1480F9F145C KX YKX002 19960731150729S101702A056211AYKX002
NN 15D2FCC7120F4E2E KX YKX002 19970501123152S101702A063604AYKX002
NN 15E38A0F16ED64F8 KX YKX002 19970814200734S101702A065850AYKX002
NN 15ED6AF904FAFFCE KX YKX002 19971016164307S101702A067570AYKX002
NN 16001B5403154BE6 KX YKX002 19980212144153S101702M000834AYKX002
NN 160A061D0CF7A3EF KX YKX002 19980416190522S101702M000898AYKX002
NY 177D565B0BD5E0D5 KX YKXO002 CRMA00397654311C87
NY 180A80CD13ED63E0 KX YKXO002 TLBO00002358D13DB6MVS
NY 17DFC09E12E3B3C6 LB YLB0090 AIS0000095576AAD56
NY 17E6F77E15DA0E03 LB YLB0091 AIS000009557A7320F
NY 17E0862803DC1A99 LB YLB0095 AIS000009557712672
NY 1612CD00175CB72B LB YLB0103 19980611152558S101702M000840AYLB0103
NY 1612CD020FB49484 LB YLB0105 19980611152558S101702M000840AYLB0105
NY 1520C9EE1D904E1E LB YLB0113 19940324154725S101702A032795AYLB0113
NY 15486A821EBF08C6 LB YLB0113 19941201191749S101702M000472AYLB0113
NY 154AA1F803CBB844 LB YLB0113 19941215214909S101702M000474AYLB0113
NY 1562CD131A892102 LB YLB0113 19950518S101702M000545AYLB0113
NY 15BD026108E2C2B8 LB YLB0113 19961212161055S101702M000662AYLB0113
NY 15F6360F0531FD1E LB YLB0113 19971211152839S101702M000726AYLB0113
NY 16036E9A04DDBB84 LB YLB0113 19980305182743S101702M000837AYLB0113
NY 161750690E76B6CA LB YLB0113 19980710083933S101702M000841AYLB0113
NY 161759BC1D3EE66C LB YLB0113 19980710141321S101702M000841AYLB0113
NY 15D0CDB70411E4DC LB YLB0115 19970417145740S101702M000718AYLB0115
NY 15F6360E17A6E950 LB YLB0115 19971211152840S101702M000726AYLB0115
NY 16036EA81BEABB18 LB YLB0115 19980305182800S101702M000837AYLB0115
NY 1617507D166076FF LB YLB0115 19980710083934S101702M000841AYLB0115
NY 161759E012ACD504 LB YLB0115 19980710141321S101702M000841AYLB0115
NY 15EA14201E07BD7A LB YLB0116 19970925104749S101702Z335520AYLB0116
NY 15ED91DE1F2AF776 LB YLB0116 19971017154949S101702M000724AYLB0116
NY 15F636091D5A0768 LB YLB0116 19971211152840S101702M000726AYLB0116
NY 1617507D0C167F85 LB YLB0116 19980710083934S101702M000841AYLB0116
NY 161759DB037762FF LB YLB0116 19980710141322S101702M000841AYLB0116
NY 17E84189028DAF89 LB YLB0120 IPC000015457B202A2
NY 17F019A21BE90364 LB YLB0120 IPC000015657F3CF5C
NY 17E0AD9B1FE3B731 LC LC0510I TFBM0000255772715A
NY 18098E231BC93EBF LC LC0511I TFBM00002658C94A27
NY 17E798DD0B5C5E1B LC LC0511I TFBM00002757AC7BB6
NY 17EEFDBB114A5121 LC LC0511I TFBM00002857EA823C
NY 18040B790040F871 LC LC0511I TFBM000029589B10A0
NY 181ACE71168F303B LC LC0511I TFBM000030595A0ED9
NY 1827402C1B8CF9DC LC LC0511I TFBM00003359C2729F
NY 1827403014BBFFD7 LC LC0511I TFBM00003359C2729FMVS
NN 15BACACC0E8F24AC LC LC5000 19961128134126S101702A059244ALC5000
NN 15E382F11A2120A2 LC LC5000 19970814155557S101702M000820ALC5000
NN 15FCCE3E0C84AEF2 LC LC5000 19980122143236S101702M000889ALC5000
NY 17E0ADD615A51E47 LC YLCTF01 TFBM0000255772734D
NY 17E0ADD910512211 LC YLCTF02 TFBM00002557727367
NY 180C843E180653C8 LC YLCTF02 TFBM00002658E22FB0
NY 17EF4B530E948846 LC YLCTF02 TFBM00002857ED0D2F
NY 1825D96E09526C60 LC YLCTF02 TFBM00003359B6B121
NY 1825D9701EE97EAD LC YLCTF02 TFBM00003359B6B121MVS
NY 18333AE4110B2B46 LC YLCTF02 TFBM0000375A26E226
NY 17E0ADDD08601560 LC YLCTF03 TFBM00002557727387
NY 18098E330F7BE27E LC YLCTF03 TFBM00002658C94AB4
NY 17EEFD800CE6AAF5 LC YLCTF03 TFBM00002857EA8045
NY 1825D96B10D1E0EC LC YLCTF03 TFBM00003359B6B138
NY 1825D96E188133E4 LC YLCTF03 TFBM00003359B6B138MVS
NN 18333AF00A8C164D LC YLCTF03 TFBM0000375A26E23A
NY 17CBEB3000D70B3A LQ LQ8090 LIQ0000015
NY 17E1D01E1601F401 LQ LQ8090 LIQ0000019
NN 14EBFA8A0437A5F0 LV YLV001D
NN 14A362EE0CBD3CB8 LV YLV001E
NN 15A7A55812697092 LV YLV0024 19960729175120S101702A056132AYLV0024
NN 15A953FA0457560A LV YLV0024 19960809104406S101702A056380AYLV0024
NN 15AF468412991118 LV YLV0024 19960916065859S101702Z266234AYLV0024
NN 15AFCAA21C6C5E26 LV YLV0024 19960919134517S101702A057205AYLV0024
NN 15C1666300ED22BA LV YLV0024 19970109144533S101702A060651AYLV0024
NN 15CB4A5904364DB6 LV YLV0024 19970313130752S101702A062314AYLV0024
NN 15E8FDCB178BE292 LV YLV0024 19970918124528S101702A066875AYLV0024
NN 15EC4D9A12ACAA38 LV YLV0024 19971009142943S101702A067320AYLV0024
NN 15F4025316263006 LV YLV0024 19971127151620S101702A068522AYLV0024
NN 160577C3112FE878 LV YLV0024 19980318172336S101702Z365489AYLV0024
NN 16076EA91CAD28B2 LV YLV0024 19980331072213S101702Z367531AYLV0024
NN 160780911073932A LV YLV0024 19980331180350S101702Z367531AYLV0024
NN 1607824E05B6C55A LV YLV0024 19980331190659S101702Z367531AYLV0024
NN 1608BBA6013713C6 LV YLV0024 19980408135941S101702A071564AYLV0024
NN 16240C4A058C2B68 M21SAMT2 SP1BS7T
NN 16240C4B0A3A1108 M21SAMT2 SP1BS9T
NN 1624161907231ECE M23SAMT2 SP1BS1T
NN 1624163601CBD7CA M23SAMT2 SP1BS3T
NN 162416531343F742 M23SAMT2 SP1BS7T
NN 162416551EA5E2F2 M23SAMT2 SP1BS9T
YY 1647C9EC01BAB864 M24SAMT2 SAMP0190
NN 154921C4195BA576 MD YMD0651 19941206083936S101702A040104AYMD0651
NN 15497F2E0875479E MD YMD0651 19941208162230S101702A040104AYMD0651
NN 154A41F31EE37A4C MD YMD0651 19941213123405S101702A040387AYMD0651
NN 155B13C313C15ED8 MD YMD0651 19950330S101702A043203AYMD0651
NN 1564FD7A1F9F1CE0 MD YMD0651 19950601S101702M000585AYMD0651
NY 153F9E6E00703118 ME ME0300 19941006195423S101702A037982AME0300
NY 15E38C0119181CAA ME ME0300 19970814211635S101702A065803AME0300
NY 17F294F5012B7346 MF MF6000 MFR0000086
NY 17F040360796A028 MF MF6010 MFR0000086
NY 17EFBCE10E8DCA6E MF MF6020 MFR0000086
NY 17DFDD4605EEA7BE MF MF7000 MFR0000082
NY 17B4D0180B03F9DE MF MF7010 MFR0000049
NY 1802C85C1F2E9631 MF MF7010 MFR0000096
NY 180C59D20DD3F08C MF MF7010 MFR0000110
NY 181B2B841A41010B MF MF7010 MFR0000124
NY 182D5B3316144327 MF MF7010 MFR0000135
NY 17E1713103ED44C1 MF MF7020 MFR0000082
NY 17CCE9B0118A67B6 MF MF7110 MFR0000065
NY 17B4D0181920CFDF MF MF7120 MFR0000049
NY 17F29514079B80EA MF MF7200 MFR0000086
NY 17E7A13C19308C95 MF MF7200 MFR0000090
NY 17E0DC6408927C8A MF MF7210 MFR0000082
NY 17CD0EC20A938AF7 MF MF7220 MFR0000065
NY 17E2198510D24371 MF MF7230 MFR0000082
NY 17F241971398570C MF MF7230 MFR0000086
NY 1804394B1591B5C5 MF MF7230 MFR0000096
NY 180C59E3156A5FE0 MF MF7230 MFR0000110
NY 181B4616182D32D6 MF MF7230 MFR0000124
NY 1827E0DC0C335646 MF MF7230 MFR0000135
NY 1837BBB11BF1F29A MF MF7230 MFR0000148
NY 17BE92E90170759C MF MF7240 MFR0000060
NY 17D35007082B7716 MF MF7250 MFR0000073
NY 17BE92E913AECAA2 MF MF7260 MFR0000060
NY 17E0DC6516F2B392 MF MF7300 MFR0000082
NY 17E0DC6608802C03 MF MF7310 MFR0000082
NY 17C89CC315D749EF MF MF7320 MFR0000065
NY 17F294981240F02B MF MF7320 MFR0000086
NY 1804394F058A57E0 MF MF7320 MFR0000096
NY 17D8FD741AEFF997 MF MF7330 MFR0000078
NY 17F294A61C40D6D7 MF MF7330 MFR0000086
NY 18043950020A39B2 MF MF7330 MFR0000096
NY 17E0DC660BF63947 MF MF7340 MFR0000082
NY 17F294AB04E91852 MF MF7340 MFR0000086
NY 17FEB882157052EC MF MF7340 MFR0000107
NY 17E0DC66198AB69A MF MF7360 MFR0000082
NY 17F35B5213C00D89 MF MF7360 MFR0000086
NY 17FEB8770EC16B9D MF MF7360 MFR0000107
NY 17C89CDC0BD3F18C MF MF7380 MFR0000065
NY 17EFBCE21EF326F9 MF MF7380 MFR0000086
NY 17E219851E2919B9 MF MF7500 MFR0000082
NY 17E2190205A0757E MF MF7510 MFR0000082
NY 17F1F9091A0115C5 MF MF7510 MFR0000086
NY 17B4D0270B65D149 MF MF7550 MFR0000049
NY 17EC9ECD040075DA MF MF7550 MFR0000086
NY 180C5A071A5F9867 MF MF7550 MFR0000110
NY 181B46411465D489 MF MF7550 MFR0000124
NY 182D5B4F17275DB7 MF MF7550 MFR0000135
NY 17C89CE312A48935 MF MF7570 MFR0000065
NY 17EC9ED408C8F881 MF MF7570 MFR0000086
NY 17B7CFA91C2036C4 MF MF7580 MFR0000049
NY 17B84F7000921AED MF MF7590 MFR0000049
NY 17CFDF5401FFCBFA MF MF7750 MFR0000073
NY 182744500E501441 MF MF7770 MFR0000135
NY 183310B512964AD9 MF MF7770 MFR0000148
NY 17DA36180D9446AF MF MF7801 MFR0000078
AY 17EFC7FD18C19850 MF MF7802 MFR0000086
AY 180CAC46097C85A1 MF MF7802 MFR0000110
AY 181B465210425DB5 MF MF7802 MFR0000124
AY 182D5B511CD65C01 MF MF7802 MFR0000135
NY 17CCDAE2112DCA75 MF MF7901 MFR0000065
NY 180C5A090A204F52 MF MF7901 MFR0000110
NY 181D81DF0F61AD6F MF MF7901 MFR0000124
NY 182D5B650EB9A64C MF MF7901 MFR0000135
NY 17B6BBA61ED986AE MF MF7902 MFR0000049
NY 17BE92F1145A4039 MF MF7930 MFR0000060
NY 17E3DA470FBF2DCA MF MF8110 MFR0000082
NY 17E3F3E6018CD951 MF MF8120 MFR0000082
NY 17E30AB003F0D413 MF MF8130 MFR0000082
NY 16DAFC971DC41148 MF MF8150 A06M020109
NY 17E6F30703B85C70 MF MF8210 MFR0000082
NY 16DB013C0B1F2689 MF MF8230 A06M020109
NY 17D3CCD615A15867 MF MF8310 MFR0000073
NY 17E219860C653788 MF MF8500 MFR0000082
NY 17E219871038619C MF MF8600 MFR0000082
NY 17ECF6E100444310 MF MF8600 MFR0000086
NY 17B4D0320EE752C1 MF MF8610 MFR0000049
NY 17E219880A17FB3C MF MF8620 MFR0000082
NY 17ECF6E1179EF0F6 MF MF8620 MFR0000086
NY 1804395B017BF843 MF MF8620 MFR0000096
NY 180C5A551ADF4A41 MF MF8620 MFR0000110
NY 181B47AA0CC2621A MF MF8620 MFR0000124
NY 18145E6F1BB57FFF MF MF8620 MFR0000127
NY 1823ED910C7196D0 MF MF8620 MFR0000132
NY 1827E15A10164428 MF MF8620 MFR0000135
NY 1837BBDF1D3B80C3 MF MF8620 MFR0000148
NY 17BE98CE0AF90794 MF MF8630 MFR0000060
NY 17E177111B81578C MF MF8703 MFR0000082
NY 17E177151C380AAF MF MF8706 MFR0000082
NY 17EFBD2F03AB0F3D MF MF8706 MFR0000086
NY 17F6D2A4174A91AC MF MF8706 MFR0000094
NY 17E177220866FA2D MF MF8710 MFR0000082
NY 17EFC2A6109D25A0 MF MF8710 MFR0000086
NY 17F6D2A01AADF1B0 MF MF8710 MFR0000094
NY 17E1773113D52431 MF MF8717 MFR0000082
NY 17F6D2BD1DC2AEBB MF MF8717 MFR0000094
NY 17E177370642ADD6 MF MF8719 MFR0000082
NY 17EFBD3017F6D701 MF MF8719 MFR0000086
NY 17F6D2C9095BF851 MF MF8719 MFR0000094
NY 1825306302D00ECC MF MF8800 MFR0000132
NY 1828FBD50DB81F06 MF MF8800 MFR0000135
NY 183310CF0870F9F8 MF MF8800 MFR0000148
NY 182530661A8D8968 MF MF8810 MFR0000132
NY 182D5B910E0EF0F8 MF MF8810 MFR0000135
NY 183310D51F02CDAF MF MF8810 MFR0000148
NY 16DB00FE074B050D MF MF8900 A06M020109
NY 17E80DEC01CFEA6F MF MF8930 MFR0000086
NY 17F65C681AFA0C17 MF MF8930 MFR0000094
NY 1804395F04A1F110 MF MF8930 MFR0000096
NY 180C5AFC0A7C6EDC MF MF8930 MFR0000110
NY 181DF15B096DB2E8 MF MF8930 MFR0000124
NY 182D5B931642F637 MF MF8930 MFR0000135
NY 17ECA00D19A225A5 MF MF8940 MFR0000086
NY 180409331CD3960A MF MF8940 MFR0000096
NY 180BC45D1874A61D MF MF8940 MFR0000110
NY 182D5B94121827C3 MF MF8940 MFR0000135
NY 1830D0140186B080 MF MF8940 MFR0000148
NY 17B969BF10C4EB0D MF MF8950 MFR0000049
NY 17ECA016191F3115 MF MF8950 MFR0000086
NY 1804F6150525B9F8 MF MF8950 MFR0000096
NY 180C5AFF04674E40 MF MF8950 MFR0000110
NY 183310E200D244E6 MF MF8950 MFR0000148
NY 18388C3212672D71 MF YMFC010 MFR00001495A537D96
NY 17E3FDA219F8B2E5 MF YMFC101 MFR0000083578E3B26
NY 17E3FDA50EDCE63D MF YMFC104 MFR0000083578E3B39
NY 17E3FDA70B3553F1 MF YMFC105 MFR0000083578E3B49
NY 17DD8C800AD44CCF MF YMFC106 MFR000008357583124
NY 17DD81C80EF4F74D MF YMFC107 MFR00000835757D747
NY 17DD8C921658856F MF YMFC108 MFR0000083575831C8
NY 17DF67DA061ED9DE MF YMFC110 MFR00000835767C4BD
NY 17F042411DEF8610 MF YMFC110 MFR000008757F52498
NY 1805C4B109B3797C MF YMFC110 MFR000009758A985D8
NY 181051621E31615B MF YMFC110 MFR0000111590212E8
NY 181E6B50010F7276 MF YMFC110 MFR000012559785D3C
NY 1828360A066104AE MF YMFC110 MFR000013659CA812D
NY 1839ECF801680C75 MF YMFC110 MFR00001495A5F0CE2
NY 17DF67DB01343AB8 MF YMFC112 MFR00000835767C4C4
NY 17DF67DB116997D5 MF YMFC113 MFR00000835767C4CA
NY 17F33C511D25C130 MF YMFC113 MFR0000087580E1D38
NY 1806E0C001713BCA MF YMFC113 MFR000009758B2D4AC
NY 181051610E195147 MF YMFC113 MFR0000111590212EB
NY 1827DEA10ED45350 MF YMFC113 MFR000013659C7A3DF
NY 1834A059156B6111 MF YMFC113 MFR00001495A3298BA
NY 17E3FE67173EF1D2 MF YMFC114 MFR0000083578E4191
AY 17EF44991EE4910E MF YMFC115 MFR000008757ECD4C5
AY 181050D51150A800 MF YMFC115 MFR000011159020E48
AY 181B2B4C0C5D5F94 MF YMFC115 MFR0000125595D19C9
AY 18388C5611DF784A MF YMFC115 MFR00001495A537ECB
NY 17DF67DE176EF90E MF YMFC116 MFR00000835767C4E0
NN 17DE78AA1B128F76 MF YMFC118 MFR0000083575FEE4D
NY 17DAD9280BA326F3 MF YMFC202 MFR0000079574189AF
NY 17DAD9431401230E MF YMFC203 MFR000007957418A72
NY 17DADA44116B5998 MF YMFC209 MFR0000079574192C4
NY 17DAD94E0524B94E MF YMFC211 MFR000007957418AC3
NY 17DADBCF0A368F93 MF YMFC217 MFR000007957419FF1
NY 17CBCBA51BBB7632 MF YMFC219 MFR000006656C33628
NY 17CBCC4601A8601C MF YMFC220 MFR000006656C33B6B
NY 17B4CF1006234E55 MF YMFINFO MFR0000050560270B4
NY 17B4CF1015EB934D MF YMFINFO MFR0000050560270B4CICS
NY 17E218D01A2DDAA6 MF YMFLPID MFR0000082577E5826
NY 17DF68030BA4A7BF MF YMFX155 MFR00000835767C612
NY 17B594B0066C25E1 NF NF5710 NBSI000050
NY 160E6BF9131F0AC4 NF NF5800 19980514184411S101702A072505ANF5800
NY 15E265C8114413FC NF NF5890 19970807134910S101702A065780ANF5890
NY 16001C0A18FC764B NF NF5890 19980212145537S101702M000834ANF5890
NY 17D28B72048870D4 NF NF5900 NBSI000089
NY 17C93F6F1DD81E53 NF NF5910 NBSI000061
NY 17D28B730AA89FAB NF NF5910 NBSI000089
NY 17D265751A3AD9EA NF NF7330 NBSI000089
NY 177529F11C11B988 NF NF7650 NF0Y000530
NY 17C3E66A05626FD5 NF NF7670 NBSI000061
NY 178D1A51119E620C NF NF7700 NBSI000016
NY 17A3120D03333059 NF NF8610 NBSC000008
NY 17F334590968DFD8 NF NF8620 NBSC000021
NY 17E86A1003DEB37F NF NF8620 NBSC000023
NY 157E4B0F074029E2 NF NF8800 19951109S101702A049436ANF8800
NY 157F661208014560 NF NF8800 19951116S101702M000633ANF8800
NY 15EC4BC5009019D6 NF NF8800 19971009132420S101702A067383ANF8800
NY 17D327F91820E896 NF YNF0101 NBSI00005657010320
NY 17B59AD6147117C6 NF YNFBUG NBSI00005056091E27
NY 157BA294020428A8 NF YNFCGB1 19951023S101702Z214260AYNFCGB1
NY 157BABF11868E936 NF YNFCGB1 19951023S101702Z214285AYNFCGB1
NY 157BC49D1DA8EFF8 NF YNFCGB1 19951024S101702Z214404AYNFCGB1
NY 17B56E5F1C27E590 NF YNFDEAL NBSI0000505607A92A
NY 17B5E78F09FF9550 NF YNFIB03 IB00000013560BA1BD
NY 17E100E706EDBB4E NF YNFIB07 IB0000002257752C1E
NY 17F014A61E6BF77A NF YNFIB07 IB0000002357F3A607
NY 179A9A4A17FFA64D NF YNFNACL NBSI00002455269B5B
NY 17D5AA1712D7C89E NF YNFNACL NBSI00005557160D8E
NY 17FE89191E1D5672 NF YNFNACL NBSI000122586CD99C
NY 17C99D3B01C61DD9 NG YNGKWEL PROK00006556B0E9D0
NY 17C99D541D6D32D7 NG YNGPWEL PROK00006556B0EA50
NY 1536D79D0AD9ED8C NH NH5910 19940811233300S101702A036480ANH5910
NY 1536D79906531EF8 NH NH7100 19940811233217S101702A036480ANH7100
NY 17F0DD0D111CF20E NI NI0010 IPC0000156
NY 17ED156107AD3E0D NI NI0010 IPC0000170
NY 17F77A311BF2D329 NI NI0010 IPC0000171
NY 17F01A160CEF09DD NI NI0040 IPC0000156
NY 17F935EF15375BB6 NI NI0040 IPC0000171
NY 17ECCBE007D2A9DF NI NI0040 IPC0000181
NY 17F7A2610E9596F8 NI YNI0161 IPC00001715832F542
NY 180191140E0664DA NI YNI0161 IPC0000175588646FA
NY 17EC97A11FA75806 NI YNI0161 IPC000017957D662DA
NY 17C3ED151B66666A NI YNI0201 IPC0000123568132CD
NY 17C3ED15184BA740 NI YNI0202 IPC0000123568132CD
NY 17C3ED1519269AB5 NI YNI0211 IPC0000123568132CD
NY 17C3ED151D30534F NI YNI0212 IPC0000123568132CE
NY 180A76EE1874F4E7 NI YNICL01 IPC000019258D0EAF8
NY 180501E71FCD78AD NI YNICOFM IPC000017558A323CC
NY 17EA44071EF6AE44 NI YNICS01 IPC000015457C2DE87
NY 17F275440CD1EA79 NI YNICS01 IPC000015658079777
NY 180666A6195DEF59 NI YNICS01 IPC000017558AED477
NY 180B90A1009DD96F NI YNICS01 IPC000019258DA340A
NY 17F0199F1620B3C6 NI YNILBP2 IPC000015657F3CF6B
NY 17ED1531187EDE79 NI YNILBP2 IPC000017057DA8023
NY 17F019A201910994 NI YNILBP3 IPC000015657F3CF7F
NY 17F0199F01CAF950 NI YNILBPL IPC000015657F3CF61
NY 17ED15310902D10F NI YNILBPL IPC000017057DA8022
NY 1801910010BC740C NI YNILBPL IPC000017558864653
NY 180FFD741B9FE6EF NI YNILBPL IPC000019258FF52EF
NY 18134EC41F04BB6E NI YNILBPL IPC0000199591B2776
NY 17E2E0E811835ADE NI YNIPACU IPC00001415784E6AB
NY 1819985512BC9A25 NI YNIPACU IPC0000196594FE57D
NY 18271CDD03DDF6B2 NI YNIPACU IPC000020959C14A76MVS
NY 182DB4421FE368C1 NI YNIPACU IPC000022959F8874AMVS
NY 17C2D2890B97CEE1 NI YNIPREU IPC00001235677F09E
NY 18202BA600E9C7F4 NI YNIPREU IPC000019659870E1AMVS
NY 182C4B631E0A7ED2 NI YNIPREU IPC000020959ECC21DMVS
NY 182DB4B9075F6A1F NI YNIPREU IPC000022959F88B30MVS
NY 17DFBFE20F8F2023 NI YNIYTLG IPC0000141576AA733
NY 17E2E0E811835ADE NI01 YNIPACU IPC00001415784E6AB
NY 1819985512BC9A25 NI01 YNIPACU IPC0000196594FE57D
NY 18271CDD03DDF6B2 NI01 YNIPACU IPC000020959C14A76MVS
NY 182DB4421FE368C1 NI01 YNIPACU IPC000022959F8874AMVS
NY 17DFBFE20F8F2023 NI01 YNIYTLG IPC0000141576AA733
NY 17E2E0E811835ADE NI02 YNIPACU IPC00001415784E6AB
NY 1819985512BC9A25 NI02 YNIPACU IPC0000196594FE57D
NY 18271CDD03DDF6B2 NI02 YNIPACU IPC000020959C14A76MVS
NY 182DB4421FE368C1 NI02 YNIPACU IPC000022959F8874AMVS
NY 17DFBFE20F8F2023 NI02 YNIYTLG IPC0000141576AA733
NY 17C4447209FA921A NJ NJ7180 QMS0000016
NY 17D976D91B90EB24 NJ NJ7180 QMS0000021
NY 17EE39061D91F223 NJ NJ7180 QMS0000023
NY 17C8A5C31BC42BED NJ YNJ050 QMS000001656A8CDEA
NY 17D20C8007EE8080 NJ YNJ050 QMS000001956F7B92C
NY 17E06A7A0986A8D1 NJ YNJ050 QMS000002157703E45
NY 15A47D5B03D9DC8A NK NK0030V 19960709155209S101702Z256616ANK0030V
NY 15C206D6072A1C08 NK NK0200V 19970113142804S101702Z290221ANK0200V
NY 15ED6648009BB03A NK NK5010 19971016135110S101702M000847ANK5010
NY 160E6980140B1D42 NK NK5010 19980514170627S101702M000860ANK5010
NY 15FBB79906BD0AD4 NK NK5020 19980115162122S101702A069682ANK5020
NY 160E697B14D5EE52 NK NK5020 19980514170627S101702M000860ANK5020
NY 15C01FA60D4ED9B0 NK NK5030 19970101115058S101702A060411ANK5030
NY 15C39ED8061F4E74 NK NK5030 19970123175105S101702A061091ANK5030
NY 15C01FB1151D534A NK NK5040 19970101115059S101702A060411ANK5040
NY 15FBB7960A23FD42 NK NK5040 19980115162123S101702A069682ANK5040
NY 15FBB7961D3CDECC NK NK5050 19980115162124S101702A069682ANK5050
NY 160E698112EF9EDC NK NK5050 19980514170628S101702M000860ANK5050
NY 15E38BDD1ACA7F32 NK NK5110 19970814211251S101702A065977ANK5110
NY 15FBB796072CA953 NK NK5110 19980115162114S101702A069682ANK5110
NY 15FBB79707BD1CDA NK NK5120 19980115162114S101702A069682ANK5120
NY 160E69810FEBB4BA NK NK5120 19980514170629S101702M000860ANK5120
NY 15FBB7990C0EDFEA NK NK5130 19980115162115S101702A069682ANK5130
NY 160E69B30325EB5B NK NK5130 19980514170630S101702M000860ANK5130
NY 15E8FDC818210CCA NK NK5140 19970918124542S101702A066889ANK5140
NY 15FBB7971A9A83B0 NK NK5140 19980115162115S101702A069682ANK5140
NY 15E8FDCA1AE5E722 NK NK5160 19970918124543S101702A066889ANK5160
NY 15FBB79400F8B2B6 NK NK5160 19980115162116S101702A069682ANK5160
NY 15FBB79914485CBA NK NK5170 19980115162116S101702A069682ANK5170
NY 160E698103038518 NK NK5170 19980514170630S101702M000860ANK5170
NY 15CE9DEB08F6D08A NK NK5180 19970403170629S101702A062868ANK5180
NY 15FBB7970F0C0F41 NK NK5180 19980115162117S101702A069682ANK5180
NY 15E38BCA046A68F7 NK NK5190 19970814211257S101702A065977ANK5190
NY 15FBB794007A552C NK NK5190 19980115162118S101702A069682ANK5190
NY 15CE9DEC120CE330 NK NK5200 19970403170632S101702A062868ANK5200
NY 15FBB79210B53BA6 NK NK5200 19980115162118S101702A069682ANK5200
NY 15FBB7980B8106C1 NK NK5210 19980115162119S101702A069682ANK5210
NY 15B3198106D4ACDA NK NK5240 19961010145701S101702A057697ANK5240
NY 15C01FA505B2FBC2 NK NK5240 19970101115037S101702A060411ANK5240
NY 153E80C716BFB5BE NK NK5240V 19940929172932S101702A037879ANK5240V
NY 15DE008000BCD94E NK NK5310 19970710143127S101702A065189ANK5310
NY 160E69A70EAB22AB NK NK7000 19980514170631S101702M000860ANK7000
NY 15B3198115703F7A NK NK7030 19961010145702S101702A057697ANK7030
NY 15C01FA80EE059B8 NK NK7030 19970101115041S101702A060411ANK7030
NY 1584E7FC02BEC326 NK NK7050 19951221S101702A050630ANK7050
NY 15CE9DED060E7572 NK NK7050 19970403170633S101702A062868ANK7050
NY 15EC6F261F3D978E NK NK7200 19971010103011S101702Z338761ANK7200
NY 15ED663E151A0002 NK NK7200 19971016135112S101702M000847ANK7200
NY 15F0B3DA1583261A NK NK7300 19971106141951S101702A068097ANK7300
NY 15F633341D5D0D06 NK NK7300 19971211135159S101702A068963ANK7300
NY 15819756011997CC NK NK7800 19951130S101702A049919ANK7800
NY 15C01FCD02A4E69C NK NK7800 19970101115537S101702A060424ANK7800
NY 1578CD8D14602938 NK NK7810 19951005S101702A048293ANK7810
NY 15C01FCD1B398D1C NK NK7810 19970101115539S101702A060424ANK7810
NY 15C01FCF11D74902 NK NK7840 19970101115540S101702A060424ANK7840
NY 15C2860910718C26 NK NK7910 19970116182042S101702A060940ANK7910
NY 15E38C0C1563C3E6 NK NK7910 19970814211302S101702A065977ANK7910
NY 15B3197E141AF95C NK NK7920 19961010145703S101702A057697ANK7920
NY 15C01FA31137941C NK NK7920 19970101115048S101702A060411ANK7920
NY 15C01FA715760F8A NK NK7930 19970101115051S101702A060411ANK7930
NY 15E38C371965C976 NK NK8010 19970814211305S101702A065977ANK8010
NY 160E69B90A21EFD4 NK NK8010 19980514170632S101702M000860ANK8010
NY 15E38C3A10D4453E NK NK8020 19970814211307S101702A065977ANK8020
NY 15CE9DF109460DA8 NK NK8030 19970403170634S101702A062868ANK8030
NY 160E69B90A5D5710 NK NK8030 19980514170633S101702M000860ANK8030
NY 15AB67041486344C NK NK8040 19960822153011S101702A056584ANK8040
NY 15C01FD116E4DD16 NK NK8040 19970101115540S101702A060424ANK8040
NY 160E69B90A43C29D NK NK8050 19980514170633S101702M000860ANK8050
NY 15CE9DF40E3F8606 NK NK8060 19970403170636S101702A062868ANK8060
NY 160E69AC1DE0B3AA NK NK8060 19980514170635S101702M000860ANK8060
NY 15F2E6271C5658E4 NK NK8080 19971120134500S101702A068428ANK8080
NY 15F51A1312E2B2B8 NK NK8080 19971204140627S101702A068796ANK8080
NY 15C01FD2160756D8 NK NK8090 19970101115541S101702A060424ANK8090
NY 15E38C3A0AB69AD4 NK NK8090 19970814211329S101702A065977ANK8090
NY 15A29BAC004F4372 NK NK8110 19960627163246S101702A055267ANK8110
NY 15B0E8C805FC95B8 NK NK8110 19960926162634S101702A057441ANK8110
NY 1577B36A17DC34EC NK NK8120 19950928S101702A048069ANK8120
NY 15FBB795196939D6 NK NK8120 19980115162120S101702A069682ANK8120
NY 15C01FCF1A051F5E NK NK8140 19970101115542S101702A060424ANK8140
NY 15FBB793138E453A NK NK8140 19980115162120S101702A069682ANK8140
NY 16013B4D0BCD7988 NK NK8150 19980219182538S101702A070555ANK8150
NY 15A180CB005D4B60 NK NK8160 19960620154603S101702A055102ANK8160
NY 15E38BDB0CE4AA8A NK NK8160 19970814211337S101702A065977ANK8160
NY 15B0E8C807928D88 NK NK8170 19960926162637S101702A057441ANK8170
NY 15C06DBE1C90143C NK NK8170 19970103102547S101702Z287047ANK8170
NY 160E696107986578 NK NK8180 19980514170648S101702M000860ANK8180
NY 15E4C12214223BA0 NK NK8190 19970822134421S101702Z329315ANK8190
NY 15E4C7811C05C7DA NK NK8190 19970822173219S101702Z329367ANK8190
NY 15FBB7971322DA28 NK NK8200 19980115162121S101702A069682ANK8200
NY 15FF01081524D7FA NK NK8210 19980205141816S101702A070186ANK8210
NY 15C01FAA0C5D0E08 NK NK8240 19970101115054S101702A060411ANK8240
NY 15C3E1FD05C9EDC6 NK NK8240 19970125095418S101702Z292839ANK8240
NY 15C4702F0D655FA4 NK NK8250 19970128224355S101702Z293392ANK8250
NY 15C4B09E0E28CB62 NK NK8250 19970130130932S101702A061205ANK8250
NY 15E7E44D0227B828 NK NK8300 19970911124909S101702A066744ANK8300
NY 16024C2106179BEE NK NK8300 19980226131317S101702A070680ANK8300
NN 15314D3F0F7571DC NK NK8820 19940707172646S101702A034690ANK8820
NY 15A29BC20A6A31EA NK NK8820 19960627163516S101702A055244ANK8820
NY 15EB5F591BBBB8DC NK NK8830 19971003162239S101702Z337521ANK8830
NY 15EC4D86030E9CC6 NK NK8830 19971009142704S101702A067321ANK8830
NY 15B3198200AC8152 NK NK8840 19961010145703S101702A057697ANK8840
NY 15C01FAF1E8F5952 NK NK8840 19970101115056S101702A060411ANK8840
NN 14D19348082F3664 NK YNKSICB
NN 15314CDE10629F62 NK YNKSICH 19940707172101S101702A034690AYNKSICH
NY 15A3669119218106 NK YNKSICH 19960702173409S101702Z255596AYNKSICH
NY 15A367EB0458EF64 NK YNKSICH 19960702182225S101702Z255600AYNKSICH
NY 15A38085003F6236 NK YNKSICH 19960703090225S101702Z255632AYNKSICH
NY 15A3815617169F42 NK YNKSICH 19960703093214S101702Z255641AYNKSICH
NY 15A3849C08157772 NK YNKSICH 19960703112609S101702Z255691AYNKSICH
NY 15A3853809C6F690 NK YNKSICH 19960703115112S101702Z255698AYNKSICH
NY 15A3864C05CBCF0C NK YNKSICH 19960703122934S101702Z255706AYNKSICH
NY 15A386DF0D910736 NK YNKSICH 19960703125020S101702Z255709AYNKSICH
NY 15A388181B4E8C26 NK YNKSICH 19960703133410S101702Z255717AYNKSICH
NY 15A389C810DECC7A NK YNKSICH 19960703143433S101702Z255741AYNKSICH
NY 15A38B690CA93038 NK YNKSICH 19960703153248S101702Z255754AYNKSICH
NY 15A3B5F213130F1A NK YNKSICH 19960704165443S101702A055614AYNKSICH
NY 15A44F43154DBB4A NK YNKSICH 19960708122220S101702Z256269AYNKSICH
NY 15A473AE105D8776 NK YNKSICH 19960709100619S101702Z256439AYNKSICH
NY 15A4CA36111F8B04 NK YNKSICH 19960711134332S101702A055711AYNKSICH
NY 15E14BDB0D20C6A6 NK YNKSIKO 19970731133829S101702A065623AYNKSIKO
NY 15E265021294AEE0 NK YNKSIKO 19970807132139S101702A065737AYNKSIKO
NY 15E37F12121B0734 NK YNKSIKO 19970814133711S101702A066053AYNKSIKO
NY 15E6CBAC0AB915C2 NK YNKSIKO 19970904132615S101702A066558AYNKSIKO
NY 15E6CE9202DE8DB2 NK YNKSIKO 19970904151013S101702A066558AYNKSIKO
NY 15E7E436138F1E34 NK YNKSIKO 19970911124743S101702A066744AYNKSIKO
NY 15EA19240BF3D950 NK YNKSIKO 19970925134637S101702A067064AYNKSIKO
NY 15FF00FA1F905D02 NK YNKSIKO 19980205141607S101702A070186AYNKSIKO
NY 14BDCCF717FA5A58 NK YNKUMW
NY 152439AB022CE1D8 NK YNKUMW 19940415123746S101702A032855AYNKUMW
NY 1524452F17C0528E NK YNKUMW 19940415193036S101702A032855AYNKUMW
NY 15314CDE09B635FC NK YNKUMW 19940707172102S101702A034690AYNKUMW
NY 1792E87101DD88BC NL NL5000 BALR000012
NY 1829730E0C5E414F NL NL5000 BALR000074
NY 1838881D0C28FF5E NL NL5000 BALR000076
NY 17E17D200ED28855 NL NL7310 BALR000041
NY 17E541E61B5BB0F1 NL NL7310 BALR000054
NY 180279C2069FFE55 NL NL7310 BALR000059
NY 180DEF8E1DD0B7B4 NL NL7310 BALR000067
NY 17FB15960BB34F41 NL NL7310 BALR000068
NY 18132445031B1F90 NL NL7310 BALR000073
NY 18299E0A1B8A37C5 NL NL7310 BALR000074
NY 17A6138E00CF7951 NL NL7590 BALR000005
NY 18127FB40FCF83CC NL NL7590 BALR000073
NY 1829732B1DEAE0B5 NL NL7590 BALR000074
NY 18388827038BF38D NL NL7590 BALR000076
NY 17C61F55163CB46B NL NL7750 BALR000023
NY 1817AC6D140EC561 NL NL7750 BALR000073
NY 18297331135D2DA7 NL NL7750 BALR000074
NY 1806192806FD9A76 NL NL7810 BALR000059
NY 1808754616BC7D5C NL NL7810 BALR000067
NY 1817AC22075B1ED5 NL NL7810 BALR000073
NY 1829733718EFB4E1 NL NL7810 BALR000074
NY 17CB6F6D0AD01100 NL NL8060 PSFG000032
NY 17C999B40844883E NL YNL0200 BALR00003156B0CC3B
NY 182E80B41CFDC381 NL YNL0200 BALR00007659FF3A58
NY 17593D4A17D6C6E1 NL YNLG010 A12P00279953023EDA
NY 181E9A8A04C771C1 NL YNLG010 BALR0000745979E96A
NY 181E9A8B15ED54C9 NL YNLG010 BALR0000745979E96AMVS
NY 1792E7CD0260E1C6 NL YNLG020 BALR00001254E5FBC3
NY 181E9A8A1F14EB08 NL YNLG020 BALR0000745979E96F
NY 181E9A8C11D79061 NL YNLG020 BALR0000745979E96FMVS
NY 1792E7CD17B69B75 NL YNLG021 BALR00001254E5FBC9
NY 181E9A961D32134D NL YNLG021 BALR0000745979E970
NY 181E9A981089E351 NL YNLG021 BALR0000745979E970MVS
NY 17853DE116071900 NL YNLG030 BALR00000154735D18
NY 181E9A9506609863 NL YNLG030 BALR0000745979E975
NY 181E9A961A1B1F19 NL YNLG030 BALR0000745979E975MVS
NY 1759B1E30CA3442E NL YNLG03M A12P002799530610F5
NY 181E9A911CD76552 NL YNLG03M BALR0000745979E978
NY 181E9A940256406D NL YNLG03M BALR0000745979E978MVS
NY 1759B1E41FC78AD8 NL YNLG040 A12P00279953061102
NY 181E9A8D1E49D86D NL YNLG040 BALR0000745979E97E
NY 181E9A8F16F647CE NL YNLG040 BALR0000745979E97EMVS
NY 181E9A8E1C984020 NL YNLG050 BALR0000745979E97F
NY 181E9A900B8BBA37 NL YNLG050 BALR0000745979E97FMVS
NY 181E9A9A0DF5E05F NL YNLG060 BALR0000745979E986
NY 181E9A9B1F0D1C6C NL YNLG060 BALR0000745979E986MVS
NY 1759B1E613B468AD NL YNLG120 A12P0027995306110F
NY 181E9A951A3BFEC5 NL YNLG120 BALR0000745979E98C
NY 181E9A970E2FCC26 NL YNLG120 BALR0000745979E98CMVS
NY 175A25021AD53DA6 NL YNLG121 A12P0028275309D6A8
NY 181E9A9118DF15AC NL YNLG121 BALR0000745979E992
NY 181E9A930E7C61F7 NL YNLG121 BALR0000745979E992MVS
NY 17853DE417AE0D72 NL YNLG130 BALR00000154735D32
NY 181E9A9207C58B64 NL YNLG130 BALR0000745979E995
NY 181E9A931D8BFB31 NL YNLG130 BALR0000745979E995MVS
NY 1759B1EA0013827A NL YNLG140 A12P0027995306112C
NY 181E9A9E09280926 NL YNLG140 BALR0000745979E99A
NY 181E9AA0008DEBB0 NL YNLG140 BALR0000745979E99AMVS
NY 17E289E710ACC65A NO NO0960 NO00000024
NY 17F815A60F7CD9CF NO NO0960 NO00000029
NY 1804A5D60BEAF7FE NO NO0960 NO00000031
NY 17F224E40780A2A1 NO NO0970 NO00000027
NY 17F93A0E0A056D1E NO NO0970 NO00000029
NY 17EF4E071D27AD04 NO NO0970 NO00000030
NY 1804FD7A1C3AEF0F NO NO0970 NO00000031
NY 1809651C0769BA6E NO NO0970 NO00000043
NN 153E7FBB0756338E NP NP0150 19940929164937S101702A037741ANP0150
NN 153E7FC118938A50 NP NP0350 19940929164943S101702A037741ANP0350
NN 1550165410E3E754 NP NP0360 19950119144601S101702A040974ANP0360
NN 159A729C0A67B488 NP NP0360 19960506182034S101702A053948ANP0360
NN 15A3B13219B50242 NP NP0360 19960704140529S101702A055458ANP0360
NN 1550165606826216 NP NP0380 19950119144602S101702A040974ANP0380
NN 159A729C01E677BA NP NP0380 19960506182034S101702A053948ANP0380
NN 153E7B280AFB7FB2 NP NP0410 19940929140633S101702A037741ANP0410
NN 153E7DD602FA26F4 NP NP0410 19940929154021S101702A037741ANP0410
NN 153E7FC001CF8D96 NP NP0410 19940929164945S101702A037741ANP0410
NY 153E7B130CEBC334 NP NP5000 19940929140635S101702A037741ANP5000
NY 153E7DB6002CF3DC NP NP5000 19940929154023S101702A037741ANP5000
NY 153E7FA61D05A1E4 NP NP5000 19940929164946S101702A037741ANP5000
NY 153E7B171E7B3A96 NP NP5020 19940929140638S101702A037741ANP5020
NY 153E7DB71AA308AE NP NP5020 19940929154025S101702A037741ANP5020
NY 153E7FA71B267462 NP NP5020 19940929164947S101702A037741ANP5020
NN 153E7B19094B32AE NP NP5140 19940929140642S101702A037741ANP5140
NN 153E7DBA018C90C6 NP NP5140 19940929154033S101702A037741ANP5140
NN 153E7FB20648D722 NP NP5140 19940929164951S101702A037741ANP5140
NN 153E7B2217F07080 NP NP5160 19940929140644S101702A037741ANP5160
NN 153E7DBA1A764744 NP NP5160 19940929154036S101702A037741ANP5160
NN 153E7FAE1253A898 NP NP5160 19940929164952S101702A037741ANP5160
NN 1542E2460E713678 NP NP5220 19941027143040S101702A038705ANP5220
NN 155015C505BA4FF0 NP NP5220 19950119142451S101702A040974ANP5220
NN 1550165107CCBF5A NP NP5220 19950119144603S101702A040974ANP5220
NN 1541C8B915576224 NP NP5240 19941020142956S101702A038461ANP5240
NY 145AC3DE1E7492B4 NP NP5410
NY 153E7B0A028667F8 NP NP5450 19940929140523S101702A037741ANP5450
NY 153E7DB4050704A8 NP NP5450 19940929153937S101702A037741ANP5450
NY 153E7FAA0014F3E8 NP NP5450 19940929164921S101702A037741ANP5450
NN 154861C906032F1C NP NP5460 19941201140647S101702A039881ANP5460
NN 153E7B0B00CD14FC NP NP5470 19940929140527S101702A037741ANP5470
NN 153E7DB105EE7A00 NP NP5470 19940929153939S101702A037741ANP5470
NN 153E7FAC1192DB16 NP NP5470 19940929164922S101702A037741ANP5470
NN 153E7B0A182F90E4 NP NP7210 19940929140529S101702A037741ANP7210
NN 153E7DAF18047F02 NP NP7210 19940929153942S101702A037741ANP7210
NN 153E7FAB14766166 NP NP7210 19940929164923S101702A037741ANP7210
NN 153E7B0F098F1ABC NP NP8330 19940929140550S101702A037741ANP8330
NN 153E7DB0071BDD0C NP NP8330 19940929153955S101702A037741ANP8330
NN 153E7FA40712F05C NP NP8330 19940929164930S101702A037741ANP8330
NN 153E7B1000FB9A9E NP NP8340 19940929140557S101702A037741ANP8340
NN 153E7DB0123A7E74 NP NP8340 19940929153957S101702A037741ANP8340
NN 153E7FA31776C104 NP NP8340 19940929164931S101702A037741ANP8340
NN 153E7FA419229B0A NP NP8350 19940929164931S101702A037741ANP8350
NY 153E7FA20964DA96 NP NP8900 19940929164933S101702A037741ANP8900
NY 1579E5EC1052194C NR NR8000 19951012S101702M000624ANR8000
NY 15A93269122828C2 NS NS0890 19960808144239S101702A056331ANS0890
NY 15AA4B82062790A6 NS NS0890 19960815142208S101702A056403ANS0890
NY 15AB65010A6D2094 NS NS0890 19960822141851S101702A056667ANS0890
NY 157D30BB10C36622 NS NS7340 19951102S101702A049013ANS7340
NY 15C4B64605F19458 NS NS7340 19970130162854S101702A061187ANS7340
NY 15E3ACDC1F4C8A0C NS NS7340 19970815165414S101702A066076ANS7340
NY 15B773460A9F1336 NTA1P AT0070 CIMA000450
NY 15F405F003470AA0 NTA1P AT0070 CIMA000651
NY 16056B3209A926D0 NTA1P AT0070 CIMA000663
NY 160D76330C1BB10E NTA1P AT0090 CIMA000675
NY 15C55AE81CEC8448 NTA1P BC0003
NY 15FC723819E10812 NTA1P BC0003 CRMB000360
NY 164CC3B61B3D3EA8 NTA1P BC0003 CRMB000430
NY 15C579911DD9F6FA NTA1P BC0007 CRMB000170
NY 15FC723D17259AAA NTA1P BC0007 CRMB000360
NY 164CC3B810E51406 NTA1P BC0007 CRMB000430
NY 15C55A7209B71720 NTA1P BC0008 CRMB000170
NY 160E3D4004D8CEAC NTA1P BC0008 CRMB000360
NY 164CC3B916F8BBA5 NTA1P BC0008 CRMB000430
NY 15C55A79161257AA NTA1P BC0009 CRMB000170
NY 15FC723F1F45C850 NTA1P BC0009 CRMB000360
NY 164CC3BA0A82A16C NTA1P BC0009 CRMB000430
NY 15E46C5C0A727582 NTA1P BC0010 CRMB000254
NY 15FC72411FBD4502 NTA1P BC0010 CRMB000360
NY 164CC3B916A79FDF NTA1P BC0010 CRMB000430
NY 15C5799E139FC882 NTA1P BC0011 CRMB000170
NY 15FC724C0C76ADAC NTA1P BC0011 CRMB000360
NY 164CC69E05E9A57D NTA1P BC0011 CRMB000430
NY 17D11FC61AB273AA NTA1P CZA0013 A02E00056056EFE947
NY 174C801D129F8729 NTA1P CZA0181 A02E00047752976218
NY 17E05AAF01209F80 NTA1P CZA0183 A02E000561576FB9C6
NY 17B0B8DF09918748 NTA1P CZA0199 A02E00053855E028A9
NY 17F0DFF103776A51 NTA1P CZA0199 A02E00056457FA4F4F
NY 17FA1F9B14D3A50E NTA1P CZA0199 A02E0005675847D69B
NY 1797EB891B98AD0E NTA1P CZA0213 A02E00053555100C8A
NY 1801D2830664796E NTA1P CZA0213 A02E00056858886BDA
NY 181B2CA70747BA47 NTA1P CZA0213 A02E000575595D2527
NY 182883500256596E NTA1P CZA0213 A02E00058259CD0967
NY 17A778591CDD885E NTA1P CZA0215 A02E00054455928C16
NY 1837E54B04003412 NTA1P CZA0215 A02E0005745A4E0589
NY 181B2CD40E454CD7 NTA1P CZA0215 A02E000575595D269F
NY 1828835214C3F08C NTA1P CZA0215 A02E00058259CD097C
NY 1797EB8B0C383C66 NTA1P CZA0219 A02E00053555100C98
NY 17FE89A8071E1E31 NTA1P CZA0219 A02E000568586CDE37
NY 17A7785D0A8DF25E NTA1P CZA0255 A02E00054455928C30
NY 1804D0C01197DBE9 NTA1P CZA0255 A02E00057158A18784
NY 1828834913A18388 NTA1P CZA0255 A02E00058259CD092F
NY 17850A5A17654490 NTA1P CZA0257 A02E0005225471ACDA
NY 1579E5E407BBB824 NTA1P NR7110 19951012S101702M000624ANR7110
YY 41534E434F4D4F4E NULLID ASNDD800
YY 41534E434F4D4F4E NULLID ASNDD802
YY 41534E434F4D4F4E NULLID ASNDD880
NY 1588FBAE0A59BFA4 NV NVB903
NY 15A6AACE1E9C1C70 NV NVB918
NY 15A6AAD0074AB930 NV NVB920
NY 15A6AAE513F1AFDC NV NVO006 A
NY 15A6AAE61D4AFBC4 NV NVO010 A
NY 15A6AAE803ECB232 NV NVO017 A
NY 15A6AAE9170D4F1E NV NVO018 A
NY 15AA1A950EE8DA80 NV NVO019 A
NY 15ADB61F03B915D2 NV NVO020 A
NY 15A6AAEE01EF28CA NV NVO021 A
NY 15A6AAEF0A8F7B26 NV NVO025 A
NY 15A6AAF10DB35B92 NV NVO026 A
NY 15A6AAF30DC4D072 NV NVO027 A
NY 15A6AAF50434AD26 NV NVO028 A
NY 15A6AAF60F14731A NV NVO029 A
NY 15A6AAF80F0F286A NV NVO030 A
NY 15A8B66613CAEE1A NV NVO031 A
NY 15A8B66804FFEB10 NV NVO032 A
NY 15ADB62014964020 NV NVO033 A
NY 15A6AB001F21D428 NV NVO034 A
NY 15A6AB0303803432 NV NVO037 A
NY 15A6AB04146F88A2 NV NVO038 A
NY 15A6AB061B3FF1D2 NV NVO039 A
NY 15A6AB080A79D41C NV NVO041 A
NY 15A6AB0A12B3CC6E NV NVO042 A
NY 15A6AB0E05249D5E NV NVO043 A
NY 15A6AB1007536DA2 NV NVO045 A
NY 15A6AB11111D130C NV NVO046 A
NY 15A8B6690C72F090 NV NVO047 A
NY 15A8B66A1128A3B2 NV NVO048 A
NY 15A8B66B1428113A NV NVO049 A
NY 15A6AB180DAD2BC8 NV NVO052 A
NY 15A6AB1A00BC6B9A NV NVO053 A
NY 15A6AB1C098476F4 NV NVO055 A
NY 15A8B66C17A83058 NV NVO057 A
NY 15A8B66E0AE2C03A NV NVO059 A
NY 15A6AB210377C2D8 NV NVO060 A
NY 15A6AB220AAA24E8 NV NVO064 A
NY 15A6AB2312944F52 NV NVO070 A
NY 15A6AB441BB654AC NV NVO071 A
NY 15A8B66F0F289152 NV NVO072 A
NY 15A8B67016A44208 NV NVO073 A
NY 15A8B6711667976A NV NVO074 A
NY 15A6AB4A11EB62EE NV NVO075 A
NY 15A6AB4B19A8714A NV NVO076 A
NY 15A6AB4C1F4F8476 NV NVO077 A
NY 15A6AB4E020C4D34 NV NVO079 A
NY 15A6AB4F082AD5EC NV NVO080 A
NY 15A6AB500EBE7A3C NV NVO081 A
NY 15A6AB5119C49A16 NV NVO082 A
NY 15A6AB5300411CDC NV NVO083 A
NY 15F74CAC1BC48BE2 NZ NZ0600 19971218134244S101702A069183ANZ0600
NY 15FBBB4C06BD50AC NZ NZ0600 19980115181659S101702M000856ANZ0600
NY 17DFBCB81F8E99F5 NZ NZDBM83 ZVBI000015
NY 180323EE1C786D10 NZ NZDBM83 ZVBI000016
NY 1819B3830335DA1F NZ NZDBM83 ZVBI000019
NY 182D843E1441CBDD NZ NZDBM83 ZVBI000021
NY 17DE50400164A6D7 NZ NZSRV07 NZV0000086
NY 1760E44D07EA9896 NZ YNZGSEL A14S00239353427E48
NN 15A065B2085DEAB6 OD OD7020 19960613145427S101702A054902AOD7020
NN 16047FDE199109B6 OD OD7020 19980312133153S101702A070916AOD7020
NN 1614FF570293BFCE OD OD7020 19980625145544S101702A073365AOD7020
NN 15722FC207B30E46 OD OD7030 19950824S101702A047131AOD7030
NN 16047FDE1E51C834 OD OD7030 19980312133154S101702A070916AOD7030
NN 1614FF57028B8196 OD OD7030 19980625145545S101702A073365AOD7030
NY 158FE3AD1235443C OD OD7040 19960229135951S101702Z236394AOD7040
NY 15900A580F7C701C OD OD7040 19960301130327S101702Z236556AOD7040
NY 15A4CA220446E228 OD OD7040 19960711133939S101702A055623AOD7040
NN 1561B06008E6F7A8 OD OD7060 19950511S101702A044280AOD7060
NN 1564FCBF1B89E4C2 OD OD7060 19950601S101702A044892AOD7060
NN 15B4C963192AEF16 OD OD7070 19961021083513S101702Z271571AOD7070
NY 15B51A7D199D9A24 OD OD7070 19961023085719S101702Z272282AOD7070
NN 15B54BFC04AE28D2 OD OD7070 19961024142938S101702A058057AOD7070
NN 1561B05B1D171304 OD OD7080 19950511S101702A044280AOD7080
NN 1569644714F8674C OD OD7080 19950629S101702A045721AOD7080
NN 15722FCB08638FB6 OD OD7080 19950824S101702A047131AOD7080
NY 15B40DC60E2F4AEC OD OD7090 19961016164015S101702Z271012AOD7090
NY 15B4266812918F8C OD OD7090 19961017072106S101702Z271040AOD7090
NN 15B54BFE03C58C7A OD OD7090 19961024142939S101702A058057AOD7090
NN 15E260F0076D2896 OD OD7120 19970807105631S101702Z325951AOD7120
NN 15E307311C9AEB1C OD OD7120 19970811140607S101702Z326413AOD7120
NN 15E4985310722626 OD OD7120 19970821132306S101702A066166AOD7120
NY 1542E523167958DE OD OD7130 19941027161308S101702A038607AOD7130
NY 1559FBC51AE55158 OD OD7130 19950323140241S101702A043077AOD7130
NY 15A5E43B027E4AE2 OD OD7140 19960718135641S101702A055864AOD7140
NN 15BDAF3816486C28 OD OD7140 19961216232158S101702Z284121AOD7140
NN 15BE188E11702BC2 OD OD7140 19961219141048S101702A060087AOD7140
NN 15BDAF850B130042 OD OD7160 19961216233243S101702Z284130AOD7160
NN 15BE188E1D22C28C OD OD7160 19961219141049S101702A060087AOD7160
NN 15DCE97618BA00D2 OD OD7160 19970703160630S101702M000808AOD7160
NY 159F1F9D056530F8 OD OD7180 19960605122405S101702Z251474AOD7180
NY 159F209D1C35DE50 OD OD7180 19960605130003S101702Z251474AOD7180
NY 15A065B21E2D642E OD OD7180 19960613145428S101702A054902AOD7180
NY 1579E2F81F395BA6 OD OD7181 19951012S101702A047632AOD7181
NY 1579E2F81F165102 OD OD7182 19951012S101702A047632AOD7182
NY 1579E2F9040DF786 OD OD7183 19951012S101702A047632AOD7183
NY 1579E2F81F61A244 OD OD7184 19951012S101702A047632AOD7184
NY 159F25C110697C1A OD OD7190 19960605160459S101702Z251541AOD7190
NY 159F4050063CDFDE OD OD7190 19960606075419S101702Z251583AOD7190
NY 15A065B208FDDAC4 OD OD7190 19960613145420S101702A054902AOD7190
NY 159F2644044405D0 OD OD7200 19960605162215S101702Z251546AOD7200
NY 159F41410FF73816 OD OD7200 19960606082803S101702Z251591AOD7200
NY 15A065B01F4CBAAE OD OD7200 19960613145421S101702A054902AOD7200
NY 1538FD1902DC78DC OD OD7210 19940825152244S101702A036730AOD7210
NY 15497B9306CFC3AA OD OD7210 19941208141347S101702A040106AOD7210
NY 15A5E43D001165A4 OD OD7210 19960718135643S101702A055864AOD7210
NN 15E260FF1AD87A60 OD OD7220 19970807105824S101702Z325954AOD7220
NN 15E307311CE48676 OD OD7220 19970811140644S101702Z326415AOD7220
NN 15E4985317E6DF28 OD OD7220 19970821132318S101702A066166AOD7220
NY 15A5E43C1E0849A4 OD OD7240 19960718135643S101702A055864AOD7240
NN 15BDAF64190A50D6 OD OD7240 19961216232811S101702Z284125AOD7240
NN 15BE188E0B5D6AE4 OD OD7240 19961219141032S101702A060087AOD7240
NN 15E49BB90DD8A742 OD OD7280 19970821152509S101702A066237AOD7280
NN 15E49DAB00073D2E OD OD7280 19970821163430S101702A066237AOD7280
NN 15BA7FDF14FE8878 OD OD7281 19961126165931S101702Z279665AOD7281
NN 15BAA8C80BF90382 OD OD7281 19961127172307S101702Z280020AOD7281
NN 15BBE9D11D9FA064 OD OD7281 19961205165458S101702A059431AOD7281
NN 15BBE9D80AF439BC OD OD7290 19961205165500S101702A059431AOD7290
NN 15DCE96A13B4CF7D OD OD7290 19970703160551S101702M000808AOD7290
NN 160D4EB506A0BA32 OD OD7290 19980507163236S101702A072127AOD7290
NN 15C0F22E0200F9E0 OD OD7300 19970106172633S101702A060567AOD7300
NN 15C1184616692102 OD OD7300 19970107160900S101702A060607AOD7300
NN 15DCE96B0A746A34 OD OD7300 19970703160555S101702M000808AOD7300
NN 161731C706E6862C OD OD7330 19980709142526S101702A073729AOD7330
NN 158FE3F611A3A804 OE OE0121 19960229141006S101702A052336AOE0121
NN 15967DBB1E0700C4 OE OE0122 19960411140916S101702A053315AOE0122
NN 15547BA618681B1A OE OE8100 19950216140325S101702A041670AOE8100
NN 15C91D4E16526614 OE OE8110 19970227165001S101702A062050AOE8110
NN 15EE073D05414D44 OE OE8110 19971020135626S101702A067670AOE8110
NN 15EF9953169B4B92 OE OE8110 19971030134735S101702A067911AOE8110
NN 1573501403114C10 OE OE8130 19950831S101702A047271AOE8130
NN 157372D10F32D664 OE OE8130 19950901S101702Z206327AOE8130
NN 1577B0AC1F80CA24 OE OE8130 19950928S101702A048025AOE8130
NY 15D880C90BD262C7 OE OE8730 19970605144943S101702A064421AOE8730
NY 15DAB2A214E69C4E OE OE8730 19970619135856S101702A064828AOE8730
NY 15ED663514692BB4 OE OE8730 19971016135122S101702M000847AOE8730
NY 15E5B37C1C9BC708 OE OE8740 19970828141800S101702A066323AOE8740
NY 15ED663812316026 OE OE8740 19971016135123S101702M000847AOE8740
NY 15AC7E4319D3B274 OE OE9250 19960829140415S101702A056744AOE9250
NN 156B96481BDF3CC6 OE YOE001 19950713S101702A046149AYOE001
NN 156CAF70043ACFA8 OE YOE001 19950720S101702A046302AYOE001
NN 157699F50D13CDEE OE YOE001 19950921S101702A047890AYOE001
NN 15944B1C1B80BB9E OE YOE001 19960328143211S101702A052974AYOE001
NN 157D301B0DD64256 OE YOE0135 19951102S101702A048966AYOE0135
NY 17E32CC10A0EDFD4 OE YOE0610 OE00000010578762EB
NY 174653F412B34674 OE YOE2BP1 A12M0057985263A8B2
NN 157699F50D25B2C4 OE YOEM001 19950921S101702A047890AYOEM001
NN 156CAF74003D11EA OE YOEM002 19950720S101702A046302AYOEM002
NN 157699F50BF3642C OE YOEM002 19950921S101702A047890AYOEM002
NY 15D64FC610D2249B OE YOERFT7 19970522160854S101702A064061AYOERFT7
NY 15D671C0104E00CF OE YOERFT7 19970523122650S101702A064061AYOERFT7
NY 15D673CE056136D4 OE YOERFT7 19970523134012S101702A064061AYOERFT7
NY 15D674C7054425CF OE YOERFT7 19970523141454S101702A064126AYOERFT7
NY 15D6753B1DFF9BE9 OE YOERFT7 19970523143128S101702A064126AYOERFT7
NY 15D675D300BB6FAA OE YOERFT7 19970523145200S101702A064126AYOERFT7
NY 15D67759157448A5 OE YOERFT7 19970523154739S101702A064126AYOERFT7
NY 15E5B3560A8ED0AC OE YOERFT7 19970828141213S101702A066323AYOERFT7
NY 15F0B55619A2D6E2 OE YOERFT7 19971106151230S101702A068068AYOERFT7
NY 14EE2F5605F30ED2 OE YOEUP04
NY 14EE2F351C6A102A OE YOEUP12
NY 14EE2F4118554B46 OE YOEUP77
NY 170911FC02109FB2 OS DB2EBS01 A18Q001546
NY 16A0E2DE050ED758 OS DB2EBS01 P
NY 17092E460340E889 OS DB2EBS01 PROD
NY 170911FD102F5F69 OS DB2EBS03 A18Q001546
NY 17092E5208951A26 OS DB2EBS03 PROD
NY 170911FF0F90A2CE OS DB2REORG A18Q001546
NY 17092E540EE441CE OS DB2REORG PROD
NY 15983BA301EB9E34 OS OS7240 A
NY 15AC2D7406EA6486 OS OS7293 A
NY 17E2E6171F7F7D26 PC PC5090 IVN0000021
NY 17F1F95105A101D9 PC PC5090 IVN0000024
NY 180070031036C12C PC PC5090 IVN0000028
NY 181A0B0A1AC0A815 PC PC5090 IVN0000032
NY 183975060C170859 PC PC5090 IVN0000038
NY 1804DCFF0D79368E PC PC5150 IVN0000028
NY 181A0B080BF89FC9 PC PC5150 IVN0000032
NY 183975071CBB84AE PC PC5150 IVN0000038
NY 17FFCE6B1860F4FF PC PC7030 IVN0000028
NY 1801AB8000E4FC2A PC PC7040 IVN0000028
NY 1828594E0D8AD6F9 PC PC7100 IVN0000035
NY 183308EF0D81CF79 PC PC7100 IVN0000038
NY 17FFCE721AAECE28 PC PC8000 IVN0000028
NY 181A0B120AA93F9D PC PC8000 IVN0000032
NY 182880AB1AEAFF22 PC PC8000 IVN0000035
NY 183308F108599050 PC PC8000 IVN0000038
NY 15042DE013A65CA6 PC YPC0002
NY 152530551E109B3C PC YPC0002 19940421153633S101702M000442AYPC0002
NY 17DECAA21F33F9F9 PC YPC0570 IVN000002157629DE6
NY 17F1785E18354C15 PC YPC0570 IVN000002457FF4E06
NY 180B70A00648C18F PC YPC0570 IVN000003058D9279F
NY 1817AF13117B8DB4 PC YPC0570 IVN0000032593FDD43
NY 1833083003B5796C PC YPC0570 IVN00000385A2538BCMVS
NY 182A6A8A14DD70E1 PC YPC0870 IVN000003559DD0082
NY 14CAF9E611E24984 PC YPC9997
NY 17E7A1B81656AE65 PC01 PC5060 AIS0000110
NY 17F067D21629C41B PC01 PC5060 IVN0000024
NY 180661EF0208A11D PC01 PC5060 IVN0000028
NY 180C58F90FF243F6 PC01 PC5060 IVN0000030
NY 181A0AFF0CF32612 PC01 PC5060 IVN0000032
NY 1828595715D2BA60 PC01 PC5060 IVN0000035
NY 183583430125ADA9 PC01 PC5060 IVN0000038
NY 17DE76B918DA9C41 PC01 PC5070 IVN0000021
NY 17EEAD3E11FF6234 PC01 PC5070 IVN0000024
NY 17F68F0400494D1E PC01 PC5120 AIS0000124
NY 17E6813B1F5FDBA7 PC01 PC5120 IVN0000021
NY 17F1F750161BE79A PC01 PC5120 IVN0000024
NY 17E7C0CB1DE2009F PC01 YPC0520 AIS000011157ADCAC2
NN 17F3360A11FAF296 PC01 YPC0520 IVN0000024580DE88D
NY 1802C2FA1F902DA2 PC01 YPC0520 IVN000002858904D09
NY 180B709C125803D4 PC01 YPC0520 IVN000003058D92770
NY 1819B39C1E8BD927 PC01 YPC0520 IVN00000325950CA4A
NY 1828FB091B03B8C9 PC01 YPC0520 IVN000003559D0F5B8
NY 183307DB094649A5 PC01 YPC0520 IVN00000385A2535B3MVS
NY 17DECA32053D2143 PC01 YPC0730 IVN000002157629A14
NY 17F1781E138AD4EE PC01 YPC0730 IVN000002457FF4BEB
NY 17DECA311087046D PC01 YPC0740 IVN000002157629A15
NY 17F1782105737A5E PC01 YPC0740 IVN000002457FF4BFF
NY 180523C3021C394B PC01 YPC0830 IVN000002858A43FD4
NY 180B71BD0784316A PC01 YPC0830 IVN000003058D930ED
NY 181D87B0041B2526 PC01 YPC0830 IVN00000325970E7C8
NY 1839783F1B9E97A3 PC01 YPC0830 IVN00000385A5B39A6MVS
NY 17E7A1B81656AE65 PC02 PC5060 AIS0000110
NY 17F067D21629C41B PC02 PC5060 IVN0000024
NY 180661EF0208A11D PC02 PC5060 IVN0000028
NY 180C58F90FF243F6 PC02 PC5060 IVN0000030
NY 181A0AFF0CF32612 PC02 PC5060 IVN0000032
NY 1828595715D2BA60 PC02 PC5060 IVN0000035
NY 183583430125ADA9 PC02 PC5060 IVN0000038
NY 17DE76B918DA9C41 PC02 PC5070 IVN0000021
NY 17EEAD3E11FF6234 PC02 PC5070 IVN0000024
NY 17F68F0400494D1E PC02 PC5120 AIS0000124
NY 17E6813B1F5FDBA7 PC02 PC5120 IVN0000021
NY 17F1F750161BE79A PC02 PC5120 IVN0000024
NY 17E7C0CB1DE2009F PC02 YPC0520 AIS000011157ADCAC2
NY 17F3360A11FAF296 PC02 YPC0520 IVN0000024580DE88D
NY 1802C2FA1F902DA2 PC02 YPC0520 IVN000002858904D09
NY 180B709C125803D4 PC02 YPC0520 IVN000003058D92770
NY 1819B39C1E8BD927 PC02 YPC0520 IVN00000325950CA4A
NY 1828FB091B03B8C9 PC02 YPC0520 IVN000003559D0F5B8
NY 183307DB094649A5 PC02 YPC0520 IVN00000385A2535B3MVS
NY 17DECA32053D2143 PC02 YPC0730 IVN000002157629A14
NY 17F1781E138AD4EE PC02 YPC0730 IVN000002457FF4BEB
NY 17DECA311087046D PC02 YPC0740 IVN000002157629A15
NY 17F1782105737A5E PC02 YPC0740 IVN000002457FF4BFF
NY 180523C3021C394B PC02 YPC0830 IVN000002858A43FD4
NY 180B71BD0784316A PC02 YPC0830 IVN000003058D930ED
NY 181D87B0041B2526 PC02 YPC0830 IVN00000325970E7C8
NY 1839783F1B9E97A3 PC02 YPC0830 IVN00000385A5B39A6MVS
NY 17E7A1B81656AE65 PC03 PC5060 AIS0000110
NY 17F067D21629C41B PC03 PC5060 IVN0000024
NY 180661EF0208A11D PC03 PC5060 IVN0000028
NY 180C58F90FF243F6 PC03 PC5060 IVN0000030
NY 181A0AFF0CF32612 PC03 PC5060 IVN0000032
NY 1828595715D2BA60 PC03 PC5060 IVN0000035
NY 183583430125ADA9 PC03 PC5060 IVN0000038
NY 17DE76B918DA9C41 PC03 PC5070 IVN0000021
NY 17EEAD3E11FF6234 PC03 PC5070 IVN0000024
NY 17F68F0400494D1E PC03 PC5120 AIS0000124
NY 17E6813B1F5FDBA7 PC03 PC5120 IVN0000021
NY 17F1F750161BE79A PC03 PC5120 IVN0000024
NY 17E7C0CB1DE2009F PC03 YPC0520 AIS000011157ADCAC2
NY 17F3360A11FAF296 PC03 YPC0520 IVN0000024580DE88D
NY 1802C2FA1F902DA2 PC03 YPC0520 IVN000002858904D09
NY 180B709C125803D4 PC03 YPC0520 IVN000003058D92770
NY 1819B39C1E8BD927 PC03 YPC0520 IVN00000325950CA4A
NY 1828FB091B03B8C9 PC03 YPC0520 IVN000003559D0F5B8
NY 183307DB094649A5 PC03 YPC0520 IVN00000385A2535B3MVS
NY 17DECA32053D2143 PC03 YPC0730 IVN000002157629A14
NY 17F1781E138AD4EE PC03 YPC0730 IVN000002457FF4BEB
NY 17DECA311087046D PC03 YPC0740 IVN000002157629A15
NY 17F1782105737A5E PC03 YPC0740 IVN000002457FF4BFF
NY 180523C3021C394B PC03 YPC0830 IVN000002858A43FD4
NY 180B71BD0784316A PC03 YPC0830 IVN000003058D930ED
NY 181D87B0041B2526 PC03 YPC0830 IVN00000325970E7C8
NY 1839783F1B9E97A3 PC03 YPC0830 IVN00000385A5B39A6MVS
NY 17E7A1B81656AE65 PC04 PC5060 AIS0000110
NY 17F067D21629C41B PC04 PC5060 IVN0000024
NY 180661EF0208A11D PC04 PC5060 IVN0000028
NY 180C58F90FF243F6 PC04 PC5060 IVN0000030
NY 181A0AFF0CF32612 PC04 PC5060 IVN0000032
NY 1828595715D2BA60 PC04 PC5060 IVN0000035
NY 183583430125ADA9 PC04 PC5060 IVN0000038
NY 17DE76B918DA9C41 PC04 PC5070 IVN0000021
NY 17EEAD3E11FF6234 PC04 PC5070 IVN0000024
NY 17F68F0400494D1E PC04 PC5120 AIS0000124
NY 17E6813B1F5FDBA7 PC04 PC5120 IVN0000021
NY 17F1F750161BE79A PC04 PC5120 IVN0000024
NY 17E7C0CB1DE2009F PC04 YPC0520 AIS000011157ADCAC2
NY 17F3360A11FAF296 PC04 YPC0520 IVN0000024580DE88D
NY 1802C2FA1F902DA2 PC04 YPC0520 IVN000002858904D09
NY 180B709C125803D4 PC04 YPC0520 IVN000003058D92770
NY 1819B39C1E8BD927 PC04 YPC0520 IVN00000325950CA4A
NY 1828FB091B03B8C9 PC04 YPC0520 IVN000003559D0F5B8
NY 183307DB094649A5 PC04 YPC0520 IVN00000385A2535B3MVS
NY 17DECA32053D2143 PC04 YPC0730 IVN000002157629A14
NY 17F1781E138AD4EE PC04 YPC0730 IVN000002457FF4BEB
NY 17DECA311087046D PC04 YPC0740 IVN000002157629A15
NY 17F1782105737A5E PC04 YPC0740 IVN000002457FF4BFF
NY 180523C3021C394B PC04 YPC0830 IVN000002858A43FD4
NY 180B71BD0784316A PC04 YPC0830 IVN000003058D930ED
NY 181D87B0041B2526 PC04 YPC0830 IVN00000325970E7C8
NY 1839783F1B9E97A3 PC04 YPC0830 IVN00000385A5B39A6MVS
NY 17E7A1B81656AE65 PC05 PC5060 AIS0000110
NY 17F067D21629C41B PC05 PC5060 IVN0000024
NY 180661EF0208A11D PC05 PC5060 IVN0000028
NY 180C58F90FF243F6 PC05 PC5060 IVN0000030
NY 181A0AFF0CF32612 PC05 PC5060 IVN0000032
NY 1828595715D2BA60 PC05 PC5060 IVN0000035
NY 183583430125ADA9 PC05 PC5060 IVN0000038
NY 17DE76B918DA9C41 PC05 PC5070 IVN0000021
NY 17EEAD3E11FF6234 PC05 PC5070 IVN0000024
NY 17F68F0400494D1E PC05 PC5120 AIS0000124
NY 17E6813B1F5FDBA7 PC05 PC5120 IVN0000021
NY 17F1F750161BE79A PC05 PC5120 IVN0000024
NY 17E7C0CB1DE2009F PC05 YPC0520 AIS000011157ADCAC2
NY 17F3360A11FAF296 PC05 YPC0520 IVN0000024580DE88D
NY 1802C2FA1F902DA2 PC05 YPC0520 IVN000002858904D09
NY 180B709C125803D4 PC05 YPC0520 IVN000003058D92770
NY 1819B39C1E8BD927 PC05 YPC0520 IVN00000325950CA4A
NY 1828FB091B03B8C9 PC05 YPC0520 IVN000003559D0F5B8
NY 183307DB094649A5 PC05 YPC0520 IVN00000385A2535B3MVS
NY 17DECA32053D2143 PC05 YPC0730 IVN000002157629A14
NY 17F1781E138AD4EE PC05 YPC0730 IVN000002457FF4BEB
NY 17DECA311087046D PC05 YPC0740 IVN000002157629A15
NY 17F1782105737A5E PC05 YPC0740 IVN000002457FF4BFF
NY 180523C3021C394B PC05 YPC0830 IVN000002858A43FD4
NY 180B71BD0784316A PC05 YPC0830 IVN000003058D930ED
NY 181D87B0041B2526 PC05 YPC0830 IVN00000325970E7C8
NY 1839783F1B9E97A3 PC05 YPC0830 IVN00000385A5B39A6MVS
NY 17E7A1B81656AE65 PC06 PC5060 AIS0000110
NY 17F067D21629C41B PC06 PC5060 IVN0000024
NY 180661EF0208A11D PC06 PC5060 IVN0000028
NY 180C58F90FF243F6 PC06 PC5060 IVN0000030
NY 181A0AFF0CF32612 PC06 PC5060 IVN0000032
NY 1828595715D2BA60 PC06 PC5060 IVN0000035
NY 183583430125ADA9 PC06 PC5060 IVN0000038
NY 17DE76B918DA9C41 PC06 PC5070 IVN0000021
NY 17EEAD3E11FF6234 PC06 PC5070 IVN0000024
NY 17F68F0400494D1E PC06 PC5120 AIS0000124
NY 17E6813B1F5FDBA7 PC06 PC5120 IVN0000021
NY 17F1F750161BE79A PC06 PC5120 IVN0000024
NY 17E7C0CB1DE2009F PC06 YPC0520 AIS000011157ADCAC2
NN 17F3360A11FAF296 PC06 YPC0520 IVN0000024580DE88D
NY 1802C2FA1F902DA2 PC06 YPC0520 IVN000002858904D09
NY 180B709C125803D4 PC06 YPC0520 IVN000003058D92770
NY 1819B39C1E8BD927 PC06 YPC0520 IVN00000325950CA4A
NY 1828FB091B03B8C9 PC06 YPC0520 IVN000003559D0F5B8
NY 183307DB094649A5 PC06 YPC0520 IVN00000385A2535B3MVS
NY 17DECA32053D2143 PC06 YPC0730 IVN000002157629A14
NY 17F1781E138AD4EE PC06 YPC0730 IVN000002457FF4BEB
NY 17DECA311087046D PC06 YPC0740 IVN000002157629A15
NY 17F1782105737A5E PC06 YPC0740 IVN000002457FF4BFF
NY 180523C3021C394B PC06 YPC0830 IVN000002858A43FD4
NY 180B71BD0784316A PC06 YPC0830 IVN000003058D930ED
NY 181D87B0041B2526 PC06 YPC0830 IVN00000325970E7C8
NY 1839783F1B9E97A3 PC06 YPC0830 IVN00000385A5B39A6MVS
NY 180661EF0208A11D PC07 PC5060 IVN0000028
NY 180C58F90FF243F6 PC07 PC5060 IVN0000030
NY 181A0AFF0CF32612 PC07 PC5060 IVN0000032
NY 1828595715D2BA60 PC07 PC5060 IVN0000035
NY 183583430125ADA9 PC07 PC5060 IVN0000038
NY 1802C2FA1F902DA2 PC07 YPC0520 IVN000002858904D09
NY 180B709C125803D4 PC07 YPC0520 IVN000003058D92770
NY 1819B39C1E8BD927 PC07 YPC0520 IVN00000325950CA4A
NY 1828FB091B03B8C9 PC07 YPC0520 IVN000003559D0F5B8
NY 183307DB094649A5 PC07 YPC0520 IVN00000385A2535B3MVS
NY 180523C3021C394B PC07 YPC0830 IVN000002858A43FD4
NY 180B71BD0784316A PC07 YPC0830 IVN000003058D930ED
NY 181D87B0041B2526 PC07 YPC0830 IVN00000325970E7C8
NY 1839783F1B9E97A3 PC07 YPC0830 IVN00000385A5B39A6MVS
NY 15CDAB591103C79C PHPS53 GACOLSN
NY 1694C61D0C724B38 PHPS53 GADRELS
NY 1668802F074DA4F8 PHPS53 GAMI000
NY 1565EECE0E5ECAEC PHPS53 GARD000
NY 16A8010F1F82BB8C PHPS53 GARD001
NY 15CDAB0B14D041D8 PHPS53 GARESET
NY 15CA646E06025900 PHPS53 GCADDE
NY 1619079A1575A360 PHPS53 GCBTOGL
NY 1567335819916C94 PHPS53 GCCOMON
NY 1672B0C208EA578C PHPS53 GCCRC00
NY 15AC828B1B14FA6A PHPS53 GCCRC01
NY 155C2C730710AF90 PHPS53 GCDTTM0
NY 163952971CCA9600 PHPS53 GCEXTAT
NY 155C5B4F023B6524 PHPS53 GCGENID
NY 167D65360749F7EC PHPS53 GCMIGDEL
NY 15CA646913B95630 PHPS53 GCRDENT
NY 15A36643030A26FC PHPS53 GCSTATE
NY 15D61F121CE36AD4 PHPS53 GCSTKCL
NY 161907A31F133620 PHPS53 GCSTMIG
NY 167834541B5DDFD8 PHPS53 GCTMTH
NY 164B90F8018FB550 PHPS53 GCUPDRES
NY 1646121C0B2895F0 PHPS53 GEXP000
NY 15F091221E7380D0 PHPS53 GEXP004
NY 1675588010AC1C98 PHPS53 GIMP000
NY 160E07A00A802048 PHPS53 GLCNVRT
NY 1636F6900F9CF270 PHPS53 GLMP000
NY 15D3CC2913ACAD18 PHPS53 GLXSEER
NY 16477D14047A4A48 PHPS53 GRBNDLK
NY 163703A910FAEC78 PHPS53 GRCLUP
NY 15A37FE50D1FAC42 PHPS53 GRENDV0
NY 1621D60F177D3620 PHPS53 GRINSPT
NY 16792BB11F1ADD68 PHPS53 GRINST0
NY 1640B2AB07663A60 PHPS53 GRPREP0
NY 167604A8034D288C PHPS53 GRRBA00
NY 15E1266101283F10 PHPS53 GRRBA04
NY 16394EC31826E248 PHPS53 GRRPT00
NY 165D7F23125F1EB4 PHPS53 GRRSTAT
NY 15D8A92F0CE846C4 PHPS53 GRSCL
NY 163703970628CBD0 PHPS53 GRSEED0
NY 15E147E71374FE70 PHPS53 GRSEED4
NY 155E0A010DFFB18C PHPS53 GRTBIND
NY 1622CCCB0AB717A8 PHPS53 GRVRF00
NY 15B09BB90BE4A7FA PHPS53 GSELECT
NY 15CDABCB034AE0C4 PHPS53 GTCLUP
NY 16506C1D10184988 PHPS53 GTDELTA
NY 163C50741B313FF0 PHPS53 GTLMC00
NY 16714C5E1D492438 PHPS53 GTREP00
NY 16085F6F199251D8 PHPS53 GTTOGGL
NY 15CDABD10526D324 PHPS53 GUIVRFY
NY 16224D7B0623E920 PHPS53 GUPDENT
NY 161FDC4B0094C100 PHPS53 H0001
NY 159772D012BAF9BA PHPS53 H0001R
NY 161FDC4F13D9E0C8 PHPS53 H0002
NY 1592177A0E93E6CC PHPS53 H0002R
NY 161FDC530447AFA0 PHPS53 H0003
NY 1592178B0CC11144 PHPS53 H0003R
NY 161FDC561EE0F568 PHPS53 H0004
NY 1592179502AA646A PHPS53 H0004R
NY 161FDC5A0DD001C8 PHPS53 H0005
NY 1592179E13C5A24A PHPS53 H0005R
NY 161FDC5E05BFA660 PHPS53 H0006
NY 159217A716F3A418 PHPS53 H0006R
NY 161FDC611DF407D8 PHPS53 H0007
NY 159217B30E117928 PHPS53 H0007R
NY 161FDC6510FBC310 PHPS53 H0008
NY 159217BE06C7E0D6 PHPS53 H0008R
NY 161FDC6903CE27A8 PHPS53 H0009
NY 159217C91163DD52 PHPS53 H0009R
NY 161FDC6D015FC398 PHPS53 H0010
NY 159217DB062756C6 PHPS53 H0010R
NY 161FDC701F1DF460 PHPS53 H0011
NY 159217E21F5EC7D4 PHPS53 H0011R
NY 161FDC74110D5A20 PHPS53 H0012
NY 159217E81AAA315E PHPS53 H0012R
NY 161FDC78054EBCC0 PHPS53 H0013
NY 159217ED192039C2 PHPS53 H0013R
NY 161FDC7B0F3AA690 PHPS53 H0014
NY 159217F3024803CA PHPS53 H0014R
NY 161FDC7E1F0A4CE0 PHPS53 H0015
NY 159217F71E33B7C2 PHPS53 H0015R
NY 161FDC82102BE588 PHPS53 H0016
NY 159217FC1ABC4770 PHPS53 H0016R
NY 161FDC86011E5340 PHPS53 H0017
NY 1592180115AF6AAA PHPS53 H0017R
NY 161FDC890808C648 PHPS53 H0018
NY 159218070F5B49A2 PHPS53 H0018R
NY 161FDC8C165AFDA0 PHPS53 H0019
NY 1592180D15DD3104 PHPS53 H0019R
NY 161FDC90020B3538 PHPS53 H0020
NY 159218121A716D24 PHPS53 H0020R
NY 161FDC9301C14030 PHPS53 H0021
NY 159218180878C04E PHPS53 H0021R
NY 161FDC951F7AFA30 PHPS53 H0022
NY 1592181E1206D3B0 PHPS53 H0022R
NY 161FDC981D3E1888 PHPS53 H0023
NY 159218241A5B697A PHPS53 H0023R
NY 162131100DE991E0 PHPS53 H0024
NY 159DDC1F0F7FE48C PHPS53 H0024R
NY 161FDC9D04DA9598 PHPS53 H0025
NY 15A128E9144D9DB0 PHPS53 H0025R
NY 15B74E511E488132 PHPS53 H0025X2
NY 161FDCA00A715110 PHPS53 H0026
NY 15921837107446C2 PHPS53 H0026R
NY 167C93F7089AEFA8 PHPS53 H0026X
NY 161FDCA3120DF348 PHPS53 H0033
NY 1592183C1EA72A64 PHPS53 H0033R
NY 161FDCA61B3D6DC8 PHPS53 H0034
NY 15921841177E708A PHPS53 H0034R
NY 161FDCA91FC33690 PHPS53 H0035
NY 15A4F3D3070FF4BA PHPS53 H0035R
NY 161FDCAC1BE345B0 PHPS53 H0038
NY 1592184607A905C2 PHPS53 H0038R
NY 161FDCAF1B7E8FE0 PHPS53 H0039
NY 1592184B0673F52E PHPS53 H0039R
NY 161FDCB21FD43D50 PHPS53 H0040
NY 159218510470D8A2 PHPS53 H0040R
NY 161FDCB60366A6C0 PHPS53 H0041
NY 159218560A8916E0 PHPS53 H0041R
NY 161FDCB900C1CD60 PHPS53 H0042
NY 1592185D00F97992 PHPS53 H0042R
NY 161FDCBB1D2EE0C0 PHPS53 H0043
NY 1592186215454FAC PHPS53 H0043R
NY 161FDCBE185DF678 PHPS53 H0044
NY 159218670C601C2A PHPS53 H0044R
NY 161FDCC11949FC10 PHPS53 H0045
NY 1592186D0CF0A2AA PHPS53 H0045R
NY 161FDCC415CF69B0 PHPS53 H0046
NY 159218711902350C PHPS53 H0046R
NY 161FDCC7185307C0 PHPS53 H0047
NY 159218761595AF48 PHPS53 H0047R
NY 161FDCCA15E40568 PHPS53 H0048
NY 1592187B1195DA1E PHPS53 H0048R
NY 161FDD1B0085D010 PHPS53 H0051
NY 1592188203929E42 PHPS53 H0051R
NY 161FDD1E13EF5CE0 PHPS53 H0052
NY 1592188714A465A0 PHPS53 H0052R
NY 161FDD211327A330 PHPS53 H0053
NY 1592188E0B8AB57A PHPS53 H0053R
NY 161FDD24118D4F90 PHPS53 H0054
NY 159218951F95B83A PHPS53 H0054R
NY 161FDD271103FAB8 PHPS53 H0055
NY 1592189E0254FFDC PHPS53 H0055R
NY 161FDD2A0FB47420 PHPS53 H0056
NY 159218A3106628B2 PHPS53 H0056R
NY 161FDD2D0ECC1400 PHPS53 H0057
NY 159218A80E2F55E2 PHPS53 H0057R
NY 161FDD300B2DCD00 PHPS53 H0058
NY 159218AD07A19110 PHPS53 H0058R
NY 161FDD3308997B98 PHPS53 H0059
NY 159218B203F1A084 PHPS53 H0059R
NY 161FDD3606748020 PHPS53 H0060
NY 159218B61A72A7F2 PHPS53 H0060R
NY 161FDD3904B03ED8 PHPS53 H0061
NY 159218BC00186A58 PHPS53 H0061R
NY 161FDD3C0A406260 PHPS53 H0062
NY 159218C107A4E882 PHPS53 H0062R
NY 161FDD3F076CD9E0 PHPS53 H0063
NY 159218C60B4CEFDC PHPS53 H0063R
NY 161FDD4204F18580 PHPS53 H0065
NY 159218CB03D33F32 PHPS53 H0065R
NY 161FDD4503AFE650 PHPS53 H0066
NY 159218D11270681A PHPS53 H0066R
NY 161FDD480A6E4D50 PHPS53 H0067
NY 159218D60D5FA7F4 PHPS53 H0067R
NY 161FDD4B072E2298 PHPS53 H0068
NY 159218DD034C0BF0 PHPS53 H0068R
NY 161FDD4E04A6A770 PHPS53 H0069
NY 159218E3089A4152 PHPS53 H0069R
NY 161FDD5102E9EC98 PHPS53 H0070
NY 159218E914045FE0 PHPS53 H0070R
NY 161FDD54018DCED0 PHPS53 H0072
NY 159218EF0F5CFE42 PHPS53 H0072R
NY 161FDD5706CD9618 PHPS53 H0074
NY 15C5D03D17A5BBD0 PHPS53 H0074R
NY 161FDD5A07589C98 PHPS53 H0075
NY 15C5D0441FAB9554 PHPS53 H0075R
NY 161FDD5D059E7028 PHPS53 H0076
NY 15C5D04B1714C114 PHPS53 H0076R
NY 161FDD6003FA1420 PHPS53 H0077
NY 15C5D0520506A144 PHPS53 H0077R
NY 161FDD63084D1890 PHPS53 H0078
NY 15C5D0581985C1C0 PHPS53 H0078R
NY 161FDD6606059FA8 PHPS53 H0079
NY 15C5D05F0F1622FC PHPS53 H0079R
NY 161FDD6904C8BEC0 PHPS53 H0080
NY 15C5D066153F7284 PHPS53 H0080R
NY 161FDD6C19056CB8 PHPS53 H0081
NY 15C5D06D160BFDE4 PHPS53 H0081R
NY 161FDD701378F7D8 PHPS53 H0082
NY 15C5D07317B389C4 PHPS53 H0082R
NY 161FDD740DECBB50 PHPS53 H0083
NY 15C5D07916CB5BE8 PHPS53 H0083R
NY 161FDD7804B1FEE0 PHPS53 H0084
NY 15C5D080117649A8 PHPS53 H0084R
NY 161FDD7B0FFCED60 PHPS53 H0085
NY 15C5D0861C2B48B8 PHPS53 H0085R
NY 161FDD7E101B8020 PHPS53 H0090
NY 15A4F3DD163BC854 PHPS53 H0090R
NY 161FDD810E6C8958 PHPS53 H0091
NY 15AC14130C6A1E08 PHPS53 H0091R
NY 161FDD840C4EBEA0 PHPS53 H0092
NY 15AC14230D148B26 PHPS53 H0092R
NY 161FDD870A100CB0 PHPS53 H0093
NY 15AC142A1FF41AAC PHPS53 H0093R
NY 161FDD8A082F8718 PHPS53 H0094
NY 15AC14311F137DA4 PHPS53 H0094R
NY 161FDD8D040DD3A0 PHPS53 H0095
NY 15AC143714EAD6AA PHPS53 H0095R
NY 161FDD9001CD64E8 PHPS53 H0096
NY 15AC143F072A5F2C PHPS53 H0096R
NY 161FDD9302367578 PHPS53 H0097
NY 15AC144E1E3BD120 PHPS53 H0097R
NY 161FDD9603377908 PHPS53 H0098
NY 15AC1458149FD8E8 PHPS53 H0098R
NY 161FDD9900A83250 PHPS53 H0099
NY 15AC14600EA43FEE PHPS53 H0099R
NY 161FDD9B1EDC32C0 PHPS53 H0100
NY 15AC146B18A8ACCE PHPS53 H0100R
NY 161FDD9F03D502D0 PHPS53 H0101
NY 15AC147612715F96 PHPS53 H0101R
NY 161FDDA209081A20 PHPS53 H0102
NY 15AC148507D9F45E PHPS53 H0102R
NY 161FDDA50841E560 PHPS53 H0103
NY 15AC29B21813181E PHPS53 H0103R
NY 161FDDA807F72CC0 PHPS53 H0104
NY 15AC149308056456 PHPS53 H0104R
NY 161FDDAB0FFFA0E0 PHPS53 H0105
NY 15AC149F1AC07FA0 PHPS53 H0105R
NY 161FDDAE0FABFFD8 PHPS53 H0106
NY 15AC14AE0591A4BC PHPS53 H0106R
NY 161FDE0D102AA820 PHPS53 H1001
NY 155BDC021B6DB61C PHPS53 H1001R
NY 161FDE100532ED80 PHPS53 H1002
NY 155BDC071E372DB0 PHPS53 H1002R
NY 161FDE12162AACB8 PHPS53 H1003
NY 155BDC0B0BADD90C PHPS53 H1003R
NY 161FDE1509071AA0 PHPS53 H1004
NY 155BDC0E0F296544 PHPS53 H1004R
NY 161FDE17195FCB58 PHPS53 H1006
NY 155BDC1110CD89B8 PHPS53 H1006R
NY 161FDE1A16B59890 PHPS53 H1007
NY 155BDC1507D7663C PHPS53 H1007R
NY 161FDE1D068027C0 PHPS53 H1008
NY 155BDC181F551708 PHPS53 H1008R
NY 161FDE1F153B0C30 PHPS53 H1009
NY 155BDC1C1E810688 PHPS53 H1009R
NY 161FDE22042F2988 PHPS53 H1010
NY 155BDC20123C805C PHPS53 H1010R
NY 161FDE2413BF0BA0 PHPS53 H1012
NY 155BDC2413BEE580 PHPS53 H1012R
NY 161FDE27046055A8 PHPS53 H1013
NY 155BDC281EF4CEA8 PHPS53 H1013R
NY 161FDE2912808880 PHPS53 H1014
NY 155BDC2D00D913F0 PHPS53 H1014R
NY 161FDE2C01AA4750 PHPS53 H1015
NY 155BDC30171DBA90 PHPS53 H1015R
NY 161FDE2E1621F790 PHPS53 H1016
NY 155BDC331DDCD7F4 PHPS53 H1016R
NY 161FDE31070D19E8 PHPS53 H1017
NY 155BDC361CA05AE0 PHPS53 H1017R
NY 161FDE33151F57B8 PHPS53 H1018
NY 155BDC391241B8E0 PHPS53 H1018R
NY 161FDE360456DE70 PHPS53 H1019
NY 155BDC3C0A496C88 PHPS53 H1019R
NY 161FDE381429AFC0 PHPS53 H1020
NY 155BDC3F01A2428C PHPS53 H1020R
NY 161FDE3B11A2D228 PHPS53 H1021
NY 155BDC411863F014 PHPS53 H1021R
NY 161FDE3E049D9430 PHPS53 H1022
NY 155BDC4409BCCD8C PHPS53 H1022R
NY 161FDE4014A1E9D0 PHPS53 H1023
NY 155BDC480314DC74 PHPS53 H1023R
NY 161FDE4305D95878 PHPS53 H1024
NY 155BDC4B07ED0AC0 PHPS53 H1024R
NY 161FDE4516C79DE8 PHPS53 H1025
NY 155BDC4E09BDAC40 PHPS53 H1025R
NY 161FDE48063FDFD8 PHPS53 H1026
NY 155BDC5107BFCECC PHPS53 H1026R
NY 161FDE4A1851D0F0 PHPS53 H1027
NY 155BDC531CFA8FE4 PHPS53 H1027R
NY 161FDE4D08209BA8 PHPS53 H1028
NY 155BDC5617546790 PHPS53 H1028R
NY 161FDE4F18F12778 PHPS53 H1029
NY 155BDC5913982694 PHPS53 H1029R
NY 161FDE5209BE3CE8 PHPS53 H1031
NY 155BDC5D02DA37C0 PHPS53 H1031R
NY 161FDE5419B880B8 PHPS53 H1032
NY 155BDC6316ADAC4C PHPS53 H1032R
NY 161FDE570994B9C0 PHPS53 H1033
NY 155BDC6706CC7C10 PHPS53 H1033R
NY 161FDE591A8134D0 PHPS53 H1034
NY 155BDC6A13A513C4 PHPS53 H1034R
NY 161FDE5C09F8D5B8 PHPS53 H1035
NY 155BDC6E0AC09784 PHPS53 H1035R
NY 161FDE5E1A512EF0 PHPS53 H1036
NY 158A85B901EC2828 PHPS53 H1036R
NY 16488F5B04F61578 PHPS53 H1037
NY 155BDC750E375AA4 PHPS53 H1037R
NY 161FDE6401599EF8 PHPS53 H1038
NY 155BDC780E52907C PHPS53 H1038R
NY 161FDE6611EDBE68 PHPS53 H1039
NY 155BDC7B13DFCE04 PHPS53 H1039R
NY 161FDE6901AED080 PHPS53 H1040
NY 155BDC7E15785B10 PHPS53 H1040R
NY 161FDE6B113CCFE8 PHPS53 H1041
NY 155BDC820EB9A1D4 PHPS53 H1041R
NY 161FDE6E02365EA0 PHPS53 H1042
NY 155BDC860BAB9440 PHPS53 H1042R
NY 161FDE70156E1E18 PHPS53 H1043
NY 155BDC8A000C7508 PHPS53 H1043R
NY 161FDE730667E1D8 PHPS53 H1044
NY 155BDC8E1AC79150 PHPS53 H1044R
NY 161FDE75172311A8 PHPS53 H1046
NY 15ACA3D315FD0A1A PHPS53 H1046R
NY 161FDE7806709330 PHPS53 H1047
NY 155BDC951DD95064 PHPS53 H1047R
NY 161FDE7A15CBD0B8 PHPS53 H1048
NY 155BDC9A195F1CAC PHPS53 H1048R
NY 161FDE7D0E4EFC90 PHPS53 H1051
NY 1584DFBF09E5165C PHPS53 H1051R
NY 15816A34079F3880 PHPS53 H1051X
NY 161FDE80088551C8 PHPS53 H1056
NY 155BDCA117D55598 PHPS53 H1056R
NY 161FDE8217CDEF70 PHPS53 H1057
NY 155BDCA418814914 PHPS53 H1057R
NY 161FECCF00E17C20 PHPS53 H1058
NY 155BDCA714AC9E14 PHPS53 H1058R
NY 161FECD21DE71C40 PHPS53 H1059
NY 155BDCAA1380A8EC PHPS53 H1059R
NY 161FECD6066E9C20 PHPS53 H1060
NY 155BDCAD061DC944 PHPS53 H1060R
NY 161FECD90BE52440 PHPS53 H1061
NY 155BDCAF18C672B4 PHPS53 H1061R
NY 161FECDC109D7628 PHPS53 H1062
NY 155BDCB21F3D7428 PHPS53 H1062R
NY 161FECDF1222D330 PHPS53 H1063
NY 155BDCB60F133A14 PHPS53 H1063R
NY 161FECE2181277D0 PHPS53 H1064
NY 155BDCB914653080 PHPS53 H1064R
NY 161FECE6037780C8 PHPS53 H1065
NY 155BDCBC186AAF74 PHPS53 H1065R
NY 161FECE90BB44280 PHPS53 H1066
NY 155BDCC0084869BC PHPS53 H1066R
NY 161FECEC0ED8C648 PHPS53 H1067
NY 155BDCC30620BA1C PHPS53 H1067R
NY 161FECEF0A249C48 PHPS53 H1068
NY 155BDCC6016F5008 PHPS53 H1068R
NY 161FECF209283BE0 PHPS53 H1069
NY 155BDCC9044B858C PHPS53 H1069R
NY 161FECF50C793EB0 PHPS53 H1071
NY 155BDCCC165495DC PHPS53 H1071R
NY 15DC641200ECE17C PHPS53 H1071X
NY 161FECF810778CA0 PHPS53 H1072
NY 155BDCD00B413930 PHPS53 H1072R
NY 161FECFB11377B20 PHPS53 H1073
NY 155BDCD319CAF2C0 PHPS53 H1073R
NY 161FECFE061DB038 PHPS53 H1074
NY 155BDCD80F9233BC PHPS53 H1074R
NY 161FED00163D3890 PHPS53 H1075
NY 155BDCDB0DB3B18C PHPS53 H1075R
NY 161FED03136463B0 PHPS53 H1076
NY 155BDCDE0B1AA074 PHPS53 H1076R
NY 161FED060E434DA0 PHPS53 H1077
NY 155BDCE108D7039C PHPS53 H1077R
NY 161FED090CEDF588 PHPS53 H1078
NY 155BDCE40EFAC860 PHPS53 H1078R
NY 161FED0C08C7B388 PHPS53 H1079
NY 155BDCE71815C8C0 PHPS53 H1079R
NY 161FED0F05C96360 PHPS53 H1080
NY 155BDCEA119ABEC4 PHPS53 H1080R
NY 161FED12077AFC20 PHPS53 H1081
NY 155BDCED03791A08 PHPS53 H1081R
NY 161FED150107E628 PHPS53 H1082
NY 155BDCF8041D0CAC PHPS53 H1082R
NY 161FED171006BFC0 PHPS53 H1083
NY 155BDCFA1ABE2414 PHPS53 H1083R
NY 161FED191F3194B0 PHPS53 H1084
NY 155BDCFD18411260 PHPS53 H1084R
NY 161FED1C0D617888 PHPS53 H1085
NY 155BDD01018C390C PHPS53 H1085R
NY 161FED1E1D792E90 PHPS53 H1086
NY 155BDD04195F28CC PHPS53 H1086R
NY 161FED210B6F3400 PHPS53 H1087
NY 155BDD081B376444 PHPS53 H1087R
NY 161FED231E0822F0 PHPS53 H1088
NY 155BDD0C153A597C PHPS53 H1088R
NY 161FED2617B63710 PHPS53 H1089
NY 155BDD1002B4259C PHPS53 H1089R
NY 161FED290E6FF710 PHPS53 H1090
NY 155BDD1302792958 PHPS53 H1090R
NY 161FED2B1D86B130 PHPS53 H1091
NY 155BDD16089DAB30 PHPS53 H1091R
NY 161FED2E0D091280 PHPS53 H1092
NY 155BDD2117BE19B4 PHPS53 H1092R
NY 161FED301C4A7DB8 PHPS53 H1093
NY 155BDD241BA7FDC4 PHPS53 H1093R
NY 161FED330D630468 PHPS53 H1094
NY 155BDD271DAF37E0 PHPS53 H1094R
NY 161FED351D165ED8 PHPS53 H1095
NY 155BDD2B00B83E48 PHPS53 H1095R
NY 161FED380BE31F50 PHPS53 H1096
NY 155BDD2E1017989C PHPS53 H1096R
NY 161FED3A1C1E60F8 PHPS53 H1097
NY 155BDD311042AC38 PHPS53 H1097R
NY 161FED3D0C21A228 PHPS53 H1099
NY 15A4FD37163C3114 PHPS53 H1099R
NY 161FED3F1BAE6B48 PHPS53 H1100
NY 1584DFC6136F3DA0 PHPS53 H1100R
NY 15816A36033CC6B4 PHPS53 H1100X
NY 161FED4219B089C0 PHPS53 H1101
NY 1584DFCD05FA4DB4 PHPS53 H1101R
NY 15816A370D903F2C PHPS53 H1101X
NY 161FED4514635AB8 PHPS53 H1102
NY 1584DFD309263C14 PHPS53 H1102R
NY 161FED4804361A28 PHPS53 H1112
NY 1584DFB60BC66010 PHPS53 H1112R
NY 15C483AA06397F0C PHPS53 H1112X
NY 161FED4A1E930520 PHPS53 H1113
NY 155BDD480A63B8F0 PHPS53 H1113R
NY 15C8EF841FE89A0C PHPS53 H1113X
NY 161FED4D16245178 PHPS53 H1115
NY 1566AB81098E9D94 PHPS53 H1115R
NY 1583ED1F1E666B9C PHPS53 H1115X2
NY 161FED5010DFA3B8 PHPS53 H1116
NY 15ACA3DA185219F2 PHPS53 H1116R
NY 15A0601E1851EE58 PHPS53 H1116X2
NY 161FED5317270668 PHPS53 H1117
NY 155BDD5215C47080 PHPS53 H1117R
NY 161FED56065A0978 PHPS53 H1118
NY 155BDD550B98865C PHPS53 H1118R
NY 161FED5816A66898 PHPS53 H1120
NY 1588083502F675E0 PHPS53 H1120R
NY 161FED5B1081F558 PHPS53 H1121
NY 158808391E6D6298 PHPS53 H1121R
NY 161FED5E0CAAC940 PHPS53 H1122
NY 1588083E0E2B8A58 PHPS53 H1122R
NY 161FED610B14E640 PHPS53 H1123
NY 15880843067C1C78 PHPS53 H1123R
NY 161FED64022752A8 PHPS53 H1124
NY 158808480E8A888C PHPS53 H1124R
NY 161FED66191DF450 PHPS53 H1125
NY 1588084E11535E04 PHPS53 H1125R
NY 161FED690F945E90 PHPS53 H1126
NY 158808531E5DC988 PHPS53 H1126R
NY 161FED6C05601230 PHPS53 H1127
NY 158808571B9CC210 PHPS53 H1127R
NY 161FED6E1DD2D600 PHPS53 H1128
NY 1588085C14B63814 PHPS53 H1128R
NY 161FED71158E1C28 PHPS53 H1129
NY 158808610ED59A74 PHPS53 H1129R
NY 161FED740ADF3B98 PHPS53 H1130
NY 158808660480FF9C PHPS53 H1130R
NY 161FED77033D7E38 PHPS53 H1131
NY 1588086A1F9EAF9C PHPS53 H1131R
NY 161FED79198F2E40 PHPS53 H1132
NY 1588086F1A327960 PHPS53 H1132R
NY 161FED7C0AC87678 PHPS53 H1133
NY 158808740F91C07C PHPS53 H1133R
NY 161FED7E190C6C40 PHPS53 H1134
NY 158808790AF445B8 PHPS53 H1134R
NY 161FED8109006C60 PHPS53 H1135
NY 1588087E03B881B4 PHPS53 H1135R
NY 161FED8317E80110 PHPS53 H1136
NY 1588088303BDDDD8 PHPS53 H1136R
NY 161FED86063A8180 PHPS53 H1137
NY 158808871B5AB230 PHPS53 H1137R
NY 161FED881655D160 PHPS53 H1138
NY 1597B8020AD0BD9A PHPS53 H1138R
NY 161FED8B06039590 PHPS53 H1139
NY 158A8DEB02D28CC4 PHPS53 H1139R
NY 161FED8D145762C8 PHPS53 H1140
NY 15880895102A7A88 PHPS53 H1140R
NY 161FED9003DD1C68 PHPS53 H1141
NY 1588089916CF1EA0 PHPS53 H1141R
NY 161FED9213061778 PHPS53 H1142
NY 1588089D0ACC33D0 PHPS53 H1142R
NY 161FED9500FEA7F0 PHPS53 H1143
NY 158808A11E2F0884 PHPS53 H1143R
NY 161FED970EBC5C30 PHPS53 H1144
NY 158808A619D7DD2C PHPS53 H1144R
NY 161FED991D0D7A38 PHPS53 H1145
NY 158808AB105DC8C0 PHPS53 H1145R
NY 161FED9C0C731020 PHPS53 H1146
NY 158808B00B779D20 PHPS53 H1146R
NY 161FED9E1A9B0998 PHPS53 H1147
NY 158808B505709F8C PHPS53 H1147R
NY 161FEDA10A2B5FC8 PHPS53 H1148
NY 158808BA04AE2478 PHPS53 H1148R
NY 161FEDA318E185F8 PHPS53 H1149
NY 158808BF01838FDC PHPS53 H1149R
NY 161FEDA607142670 PHPS53 H1150
NY 158808C31D7FCF1C PHPS53 H1150R
NY 161FEDB412B59D58 PHPS53 H1151
NY 158808C80D365CA8 PHPS53 H1151R
NY 161FEDB712319570 PHPS53 H1152
NY 158808CC1E10D514 PHPS53 H1152R
NY 161FEDBA1023E610 PHPS53 H1153
NY 158808D114BF7A60 PHPS53 H1153R
NY 161FEDBD06893138 PHPS53 H1154
NY 158808D60B439D10 PHPS53 H1154R
NY 161FEDBF1DA923B0 PHPS53 H1155
NY 158808DA07E4DBF0 PHPS53 H1155R
NY 161FEDC21B16A850 PHPS53 H1156
NY 158808DF0EDBE740 PHPS53 H1156R
NY 161FEDC511668FE8 PHPS53 H1157
NY 158808E40E6D543C PHPS53 H1157R
NY 161FEDC80E57B7F8 PHPS53 H1158
NY 158808E9094D7624 PHPS53 H1158R
NY 161FEDCB0558D420 PHPS53 H1159
NY 15A4FCC71DEF06F4 PHPS53 H1159R
NY 161FEDCD1DD3DF00 PHPS53 H1160
NY 15A4FCCC17DAF046 PHPS53 H1160R
NY 161FEDD0158252E8 PHPS53 H1161
NY 15A4FCD015A005C6 PHPS53 H1161R
NY 161FEDD30CE85468 PHPS53 H1162
NY 15A4FCD414EE74BC PHPS53 H1162R
NY 161FEDD6043AADA0 PHPS53 H1163
NY 15AC15B60E7E6D46 PHPS53 H1163R
NY 161FEDD81BB86000 PHPS53 H1164
NY 15AC15BA184D6394 PHPS53 H1164R
NY 161FEDDB123E7738 PHPS53 H1165
NY 15AC15BE18D5B91A PHPS53 H1165R
NY 161FEDDE09A40798 PHPS53 H1166
NY 15AC15C21EB803EC PHPS53 H1166R
NY 161FEDE1044854B0 PHPS53 H1167
NY 15AC15C614AF6C92 PHPS53 H1167R
NY 161FEDE31D19E598 PHPS53 H1168
NY 15AC15CA1CE5E3EA PHPS53 H1168R
NY 161FEDE61B70C198 PHPS53 H1169
NY 15AC15CF080B269C PHPS53 H1169R
NY 161FEDEA01BC29B8 PHPS53 H1170
NY 15AC15D312F51EEE PHPS53 H1170R
NY 161FEDEC1FDF4C38 PHPS53 H1171
NY 15AC15D811701362 PHPS53 H1171R
NY 161FEDEF1963A618 PHPS53 H1172
NY 15AC15DD0616B9FA PHPS53 H1172R
NY 161FEDF211083818 PHPS53 H1173
NY 15AC15E103FD7D98 PHPS53 H1173R
NY 161FEDF50CB5DD40 PHPS53 H1174
NY 15AC15E5134DBE32 PHPS53 H1174R
NY 161FEDF809914D70 PHPS53 H1175
NY 15AC161D09607442 PHPS53 H1175R
NY 161FEDFA17B6BF10 PHPS53 H1176
NY 15AC16220F3514C8 PHPS53 H1176R
NY 161FEDFD05AD8F30 PHPS53 H1177
NY 15AC1627160FAD56 PHPS53 H1177R
NY 161FEDFF13BFF408 PHPS53 H1178
NY 15AC162B1E6AA318 PHPS53 H1178R
NY 161FEE02021D61E0 PHPS53 H1179
NY 15AC1631000EE58C PHPS53 H1179R
NY 161FEE04116E3098 PHPS53 H1180
NY 15AC163519AC7ACA PHPS53 H1180R
NY 161FEE070015F508 PHPS53 H1181
NY 15AC163A078833B6 PHPS53 H1181R
NY 161FEE090E43D8D0 PHPS53 H1182
NY 15AC163E1A204160 PHPS53 H1182R
NY 161FEE0B1CD116F8 PHPS53 H1183
NY 15AC164311D0EB7C PHPS53 H1183R
NY 161FEE0E0A39E4D8 PHPS53 H1184
NY 15AC16480B30358C PHPS53 H1184R
NY 161FEE1018A76240 PHPS53 H1185
NY 15AC164D016D16C2 PHPS53 H1185R
NY 161FEE130668A2E0 PHPS53 H1186
NY 15AC16520A834990 PHPS53 H1186R
NY 161FEE1514913AA0 PHPS53 H1187
NY 15AC165719986650 PHPS53 H1187R
NY 161FEE1803D9C1A8 PHPS53 H1188
NY 15AC165C1ACD812C PHPS53 H1188R
NY 161FEE1A1153AE80 PHPS53 H1189
NY 15AC166305575FF0 PHPS53 H1189R
NY 161FEE1C1F3E3F50 PHPS53 H1190
NY 15AC166813C505D4 PHPS53 H1190R
NY 161FEE1F0EFADB18 PHPS53 H1191
NY 15AC166E06CBF05A PHPS53 H1191R
NY 161FEE211C92DAD8 PHPS53 H1192
NY 15AC16730BBC53A6 PHPS53 H1192R
NY 161FEE240A2EB8C8 PHPS53 H1193
NY 15AC1678186FF6C2 PHPS53 H1193R
NY 161FEE261885BD78 PHPS53 H1194
NY 15AC167D071126E0 PHPS53 H1194R
NY 161FEE2909A03CC8 PHPS53 H1195
NY 15AC16811084B2BC PHPS53 H1195R
NY 161FEE2B199D2C70 PHPS53 H1196
NY 15AC1686025898D4 PHPS53 H1196R
NY 161FEE2E07E6B948 PHPS53 H1197
NY 15AC168A0168C574 PHPS53 H1197R
NY 161FEE3015729858 PHPS53 H1198
NY 15AC168D154B3C68 PHPS53 H1198R
NY 161FEE3303370CC8 PHPS53 H1199
NY 15AC1691174F64EE PHPS53 H1199R
NY 161FEE35112046E0 PHPS53 H1200
NY 15AC169603C5E4D8 PHPS53 H1200R
NY 160D1D7D1EE16DB0 PHPS53 HAXPRST
NY 15E7709F17E5EDB0 PHPS53 HMCALDB
NY 155BBCF304541900 PHPS53 HMCAUDT
NY 15AF999510594FC8 PHPS53 HMCBCRD
NY 161D969413D2F020 PHPS53 HMCCFGV
NY 157DCAFB0018DB28 PHPS53 HMCCFGX
NY 15B60AC21A37C08A PHPS53 HMCCNVSD
NY 1648BC9C0A07CBB0 PHPS53 HMCCOS1
NY 15C7B6C10BCB2FD8 PHPS53 HMCECR2
NY 15C7B6C90CC88A90 PHPS53 HMCECR4
NY 15CACE6508736400 PHPS53 HMCECR5
NY 15C7B6B0066AD23C PHPS53 HMCECRC
NY 15D9BE630DFF1524 PHPS53 HMCERE2
NY 15D9BE6915344B80 PHPS53 HMCERE4
NY 15D9BE6F0D6D9698 PHPS53 HMCERE5
NY 15D9BE521E305188 PHPS53 HMCEREP
NY 15220C551C3B6E28 PHPS53 HMCEXP3
NY 15CE713C00D20FB8 PHPS53 HMCGSET
NY 166877D90BF64B88 PHPS53 HMCLKCK
NY 161F0BE31EED2D30 PHPS53 HMCPRSX
NY 1615BD381DA77DA0 PHPS53 HMCPRUP
NY 1619587800D60890 PHPS53 HMCPRUS
NY 164B90BD1C019430 PHPS53 HMCQRY
NY 164B90C806C859B8 PHPS53 HMCQRY2
NY 164B90CD10509A64 PHPS53 HMCQRY4
NY 164B90D0073EB890 PHPS53 HMCQRY5
NY 15C7830702097490 PHPS53 HMCRCR2
NY 15C7830E185A6BFC PHPS53 HMCRCR4
NY 15C78317061022C4 PHPS53 HMCRCR5
NY 15C7832B09628D34 PHPS53 HMCRCRC
NY 15D7894D02F10E00 PHPS53 HMCRES
NY 15D9BE8F1D89B10C PHPS53 HMCRRE2
NY 15D9BE9513654C98 PHPS53 HMCRRE4
NY 15DA3869101E5928 PHPS53 HMCRRE5
NY 15D9BE7C1DE60F88 PHPS53 HMCRREP
NY 163917300E3A09E8 PHPS53 HMCSEC3
NY 1639247400924910 PHPS53 HMCSIG3
NY 167A381006E54154 PHPS53 HMCSRVR
NY 165068C40486A51C PHPS53 HMCSTK
NY 1648701D08505C48 PHPS53 HMCTRAN
NY 15AAE9F00D66AC82 PHPS53 HMCXRL4
NY 162D0C2C0A2CAAE0 PHPS53 HMCXRLE
NY 15A7C94E1ED22D8E PHPS53 HMPBNDM
NY 164DEE021925D98C PHPS53 HMPBNDR
NY 1608E2520A62D370 PHPS53 HMPBNDR4
NY 1603114C09187630 PHPS53 HMPBTBL
NY 1631560B086E34A8 PHPS53 HMPDCLG
NY 15E76E4709C5C930 PHPS53 HMPFCMP
NY 164890B40BD43E58 PHPS53 HMPGCB
NY 163155830B285D98 PHPS53 HMPGDDL
NY 1631561808A47EF8 PHPS53 HMPGENP
NY 164DEDE0153DDC90 PHPS53 HMPGENX
NY 15976C280BCB1DB8 PHPS53 HMPGPNL
NY 1687224D0F9F5FFC PHPS53 HMPRBDR
NY 155BC2A1004D5FD8 PHPS53 HMPSNAM
NY 1637EC541E9F2518 PHPS53 HMPUTRN
NY 15CB758A0929ECF4 PHPS53 HMPVRSN
NY 1534BB420D798BC4 PHPS53 RMICKJB
NY 1619076913430EE0 PHPS53 RMIGNID
NY 155BFD0F07DCE618 PHPS53 RMIPDAD
NY 155BFD141D669A04 PHPS53 RMISTAD
NY 155BFD1B04E61B4C PHPS53 RMISTUP
NY 15811B3A09912CCC PHPS53 SEDTRNS
NY 158FBB970661F6C2 PHPS53 STKCLON
NY 15CDAB591103C79C PHPSPTA GACOLSN
NY 1694C61D0C724B38 PHPSPTA GADRELS
NY 1668802F074DA4F8 PHPSPTA GAMI000
NY 1565EECE0E5ECAEC PHPSPTA GARD000
NY 16A8010F1F82BB8C PHPSPTA GARD001
NY 15CDAB0B14D041D8 PHPSPTA GARESET
NY 15CA646E06025900 PHPSPTA GCADDE
NY 1619079A1575A360 PHPSPTA GCBTOGL
NY 1567335819916C94 PHPSPTA GCCOMON
NY 1672B0C208EA578C PHPSPTA GCCRC00
NY 15AC828B1B14FA6A PHPSPTA GCCRC01
NY 155C2C730710AF90 PHPSPTA GCDTTM0
NY 163952971CCA9600 PHPSPTA GCEXTAT
NY 155C5B4F023B6524 PHPSPTA GCGENID
NY 167D65360749F7EC PHPSPTA GCMIGDEL
NY 15CA646913B95630 PHPSPTA GCRDENT
NY 15A36643030A26FC PHPSPTA GCSTATE
NY 15D61F121CE36AD4 PHPSPTA GCSTKCL
NY 161907A31F133620 PHPSPTA GCSTMIG
NY 167834541B5DDFD8 PHPSPTA GCTMTH
NY 164B90F8018FB550 PHPSPTA GCUPDRES
NY 1646121C0B2895F0 PHPSPTA GEXP000
NY 15F091221E7380D0 PHPSPTA GEXP004
NY 1675588010AC1C98 PHPSPTA GIMP000
NY 160E07A00A802048 PHPSPTA GLCNVRT
NY 1636F6900F9CF270 PHPSPTA GLMP000
NY 15D3CC2913ACAD18 PHPSPTA GLXSEER
NY 16477D14047A4A48 PHPSPTA GRBNDLK
NY 163703A910FAEC78 PHPSPTA GRCLUP
NY 15A37FE50D1FAC42 PHPSPTA GRENDV0
NY 1621D60F177D3620 PHPSPTA GRINSPT
NY 16792BB11F1ADD68 PHPSPTA GRINST0
NY 1640B2AB07663A60 PHPSPTA GRPREP0
NY 167604A8034D288C PHPSPTA GRRBA00
NY 15E1266101283F10 PHPSPTA GRRBA04
NY 16394EC31826E248 PHPSPTA GRRPT00
NY 165D7F23125F1EB4 PHPSPTA GRRSTAT
NY 15D8A92F0CE846C4 PHPSPTA GRSCL
NY 163703970628CBD0 PHPSPTA GRSEED0
NY 15E147E71374FE70 PHPSPTA GRSEED4
NY 155E0A010DFFB18C PHPSPTA GRTBIND
NY 1622CCCB0AB717A8 PHPSPTA GRVRF00
NY 15B09BB90BE4A7FA PHPSPTA GSELECT
NY 15CDABCB034AE0C4 PHPSPTA GTCLUP
NY 16506C1D10184988 PHPSPTA GTDELTA
NY 163C50741B313FF0 PHPSPTA GTLMC00
NY 16714C5E1D492438 PHPSPTA GTREP00
NY 16085F6F199251D8 PHPSPTA GTTOGGL
NY 15CDABD10526D324 PHPSPTA GUIVRFY
NY 16224D7B0623E920 PHPSPTA GUPDENT
NY 161FDC4B0094C100 PHPSPTA H0001
NY 159772D012BAF9BA PHPSPTA H0001R
NY 161FDC4F13D9E0C8 PHPSPTA H0002
NY 1592177A0E93E6CC PHPSPTA H0002R
NY 161FDC530447AFA0 PHPSPTA H0003
NY 1592178B0CC11144 PHPSPTA H0003R
NY 161FDC561EE0F568 PHPSPTA H0004
NY 1592179502AA646A PHPSPTA H0004R
NY 161FDC5A0DD001C8 PHPSPTA H0005
NY 1592179E13C5A24A PHPSPTA H0005R
NY 161FDC5E05BFA660 PHPSPTA H0006
NY 159217A716F3A418 PHPSPTA H0006R
NY 161FDC611DF407D8 PHPSPTA H0007
NY 159217B30E117928 PHPSPTA H0007R
NY 161FDC6510FBC310 PHPSPTA H0008
NY 159217BE06C7E0D6 PHPSPTA H0008R
NY 161FDC6903CE27A8 PHPSPTA H0009
NY 159217C91163DD52 PHPSPTA H0009R
NY 161FDC6D015FC398 PHPSPTA H0010
NY 159217DB062756C6 PHPSPTA H0010R
NY 161FDC701F1DF460 PHPSPTA H0011
NY 159217E21F5EC7D4 PHPSPTA H0011R
NY 161FDC74110D5A20 PHPSPTA H0012
NY 159217E81AAA315E PHPSPTA H0012R
NY 161FDC78054EBCC0 PHPSPTA H0013
NY 159217ED192039C2 PHPSPTA H0013R
NY 161FDC7B0F3AA690 PHPSPTA H0014
NY 159217F3024803CA PHPSPTA H0014R
NY 161FDC7E1F0A4CE0 PHPSPTA H0015
NY 159217F71E33B7C2 PHPSPTA H0015R
NY 161FDC82102BE588 PHPSPTA H0016
NY 159217FC1ABC4770 PHPSPTA H0016R
NY 161FDC86011E5340 PHPSPTA H0017
NY 1592180115AF6AAA PHPSPTA H0017R
NY 161FDC890808C648 PHPSPTA H0018
NY 159218070F5B49A2 PHPSPTA H0018R
NY 161FDC8C165AFDA0 PHPSPTA H0019
NY 1592180D15DD3104 PHPSPTA H0019R
NY 161FDC90020B3538 PHPSPTA H0020
NY 159218121A716D24 PHPSPTA H0020R
NY 161FDC9301C14030 PHPSPTA H0021
NY 159218180878C04E PHPSPTA H0021R
NY 161FDC951F7AFA30 PHPSPTA H0022
NY 1592181E1206D3B0 PHPSPTA H0022R
NY 161FDC981D3E1888 PHPSPTA H0023
NY 159218241A5B697A PHPSPTA H0023R
NY 162131100DE991E0 PHPSPTA H0024
NY 159DDC1F0F7FE48C PHPSPTA H0024R
NY 161FDC9D04DA9598 PHPSPTA H0025
NY 15A128E9144D9DB0 PHPSPTA H0025R
NY 15B74E511E488132 PHPSPTA H0025X2
NY 161FDCA00A715110 PHPSPTA H0026
NY 15921837107446C2 PHPSPTA H0026R
NY 167C93F7089AEFA8 PHPSPTA H0026X
NY 161FDCA3120DF348 PHPSPTA H0033
NY 1592183C1EA72A64 PHPSPTA H0033R
NY 161FDCA61B3D6DC8 PHPSPTA H0034
NY 15921841177E708A PHPSPTA H0034R
NY 161FDCA91FC33690 PHPSPTA H0035
NY 15A4F3D3070FF4BA PHPSPTA H0035R
NY 161FDCAC1BE345B0 PHPSPTA H0038
NY 1592184607A905C2 PHPSPTA H0038R
NY 161FDCAF1B7E8FE0 PHPSPTA H0039
NY 1592184B0673F52E PHPSPTA H0039R
NY 161FDCB21FD43D50 PHPSPTA H0040
NY 159218510470D8A2 PHPSPTA H0040R
NY 161FDCB60366A6C0 PHPSPTA H0041
NY 159218560A8916E0 PHPSPTA H0041R
NY 161FDCB900C1CD60 PHPSPTA H0042
NY 1592185D00F97992 PHPSPTA H0042R
NY 161FDCBB1D2EE0C0 PHPSPTA H0043
NY 1592186215454FAC PHPSPTA H0043R
NY 161FDCBE185DF678 PHPSPTA H0044
NY 159218670C601C2A PHPSPTA H0044R
NY 161FDCC11949FC10 PHPSPTA H0045
NY 1592186D0CF0A2AA PHPSPTA H0045R
NY 161FDCC415CF69B0 PHPSPTA H0046
NY 159218711902350C PHPSPTA H0046R
NY 161FDCC7185307C0 PHPSPTA H0047
NY 159218761595AF48 PHPSPTA H0047R
NY 161FDCCA15E40568 PHPSPTA H0048
NY 1592187B1195DA1E PHPSPTA H0048R
NY 161FDD1B0085D010 PHPSPTA H0051
NY 1592188203929E42 PHPSPTA H0051R
NY 161FDD1E13EF5CE0 PHPSPTA H0052
NY 1592188714A465A0 PHPSPTA H0052R
NY 161FDD211327A330 PHPSPTA H0053
NY 1592188E0B8AB57A PHPSPTA H0053R
NY 161FDD24118D4F90 PHPSPTA H0054
NY 159218951F95B83A PHPSPTA H0054R
NY 161FDD271103FAB8 PHPSPTA H0055
NY 1592189E0254FFDC PHPSPTA H0055R
NY 161FDD2A0FB47420 PHPSPTA H0056
NY 159218A3106628B2 PHPSPTA H0056R
NY 161FDD2D0ECC1400 PHPSPTA H0057
NY 159218A80E2F55E2 PHPSPTA H0057R
NY 161FDD300B2DCD00 PHPSPTA H0058
NY 159218AD07A19110 PHPSPTA H0058R
NY 161FDD3308997B98 PHPSPTA H0059
NY 159218B203F1A084 PHPSPTA H0059R
NY 161FDD3606748020 PHPSPTA H0060
NY 159218B61A72A7F2 PHPSPTA H0060R
NY 161FDD3904B03ED8 PHPSPTA H0061
NY 159218BC00186A58 PHPSPTA H0061R
NY 161FDD3C0A406260 PHPSPTA H0062
NY 159218C107A4E882 PHPSPTA H0062R
NY 161FDD3F076CD9E0 PHPSPTA H0063
NY 159218C60B4CEFDC PHPSPTA H0063R
NY 161FDD4204F18580 PHPSPTA H0065
NY 159218CB03D33F32 PHPSPTA H0065R
NY 161FDD4503AFE650 PHPSPTA H0066
NY 159218D11270681A PHPSPTA H0066R
NY 161FDD480A6E4D50 PHPSPTA H0067
NY 159218D60D5FA7F4 PHPSPTA H0067R
NY 161FDD4B072E2298 PHPSPTA H0068
NY 159218DD034C0BF0 PHPSPTA H0068R
NY 161FDD4E04A6A770 PHPSPTA H0069
NY 159218E3089A4152 PHPSPTA H0069R
NY 161FDD5102E9EC98 PHPSPTA H0070
NY 159218E914045FE0 PHPSPTA H0070R
NY 161FDD54018DCED0 PHPSPTA H0072
NY 159218EF0F5CFE42 PHPSPTA H0072R
NY 161FDD5706CD9618 PHPSPTA H0074
NY 15C5D03D17A5BBD0 PHPSPTA H0074R
NY 161FDD5A07589C98 PHPSPTA H0075
NY 15C5D0441FAB9554 PHPSPTA H0075R
NY 161FDD5D059E7028 PHPSPTA H0076
NY 15C5D04B1714C114 PHPSPTA H0076R
NY 161FDD6003FA1420 PHPSPTA H0077
NY 15C5D0520506A144 PHPSPTA H0077R
NY 161FDD63084D1890 PHPSPTA H0078
NY 15C5D0581985C1C0 PHPSPTA H0078R
NY 161FDD6606059FA8 PHPSPTA H0079
NY 15C5D05F0F1622FC PHPSPTA H0079R
NY 161FDD6904C8BEC0 PHPSPTA H0080
NY 15C5D066153F7284 PHPSPTA H0080R
NY 161FDD6C19056CB8 PHPSPTA H0081
NY 15C5D06D160BFDE4 PHPSPTA H0081R
NY 161FDD701378F7D8 PHPSPTA H0082
NY 15C5D07317B389C4 PHPSPTA H0082R
NY 161FDD740DECBB50 PHPSPTA H0083
NY 15C5D07916CB5BE8 PHPSPTA H0083R
NY 161FDD7804B1FEE0 PHPSPTA H0084
NY 15C5D080117649A8 PHPSPTA H0084R
NY 161FDD7B0FFCED60 PHPSPTA H0085
NY 15C5D0861C2B48B8 PHPSPTA H0085R
NY 161FDD7E101B8020 PHPSPTA H0090
NY 15A4F3DD163BC854 PHPSPTA H0090R
NY 161FDD810E6C8958 PHPSPTA H0091
NY 15AC14130C6A1E08 PHPSPTA H0091R
NY 161FDD840C4EBEA0 PHPSPTA H0092
NY 15AC14230D148B26 PHPSPTA H0092R
NY 161FDD870A100CB0 PHPSPTA H0093
NY 15AC142A1FF41AAC PHPSPTA H0093R
NY 161FDD8A082F8718 PHPSPTA H0094
NY 15AC14311F137DA4 PHPSPTA H0094R
NY 161FDD8D040DD3A0 PHPSPTA H0095
NY 15AC143714EAD6AA PHPSPTA H0095R
NY 161FDD9001CD64E8 PHPSPTA H0096
NY 15AC143F072A5F2C PHPSPTA H0096R
NY 161FDD9302367578 PHPSPTA H0097
NY 15AC144E1E3BD120 PHPSPTA H0097R
NY 161FDD9603377908 PHPSPTA H0098
NY 15AC1458149FD8E8 PHPSPTA H0098R
NY 161FDD9900A83250 PHPSPTA H0099
NY 15AC14600EA43FEE PHPSPTA H0099R
NY 161FDD9B1EDC32C0 PHPSPTA H0100
NY 15AC146B18A8ACCE PHPSPTA H0100R
NY 161FDD9F03D502D0 PHPSPTA H0101
NY 15AC147612715F96 PHPSPTA H0101R
NY 161FDDA209081A20 PHPSPTA H0102
NY 15AC148507D9F45E PHPSPTA H0102R
NY 161FDDA50841E560 PHPSPTA H0103
NY 15AC29B21813181E PHPSPTA H0103R
NY 161FDDA807F72CC0 PHPSPTA H0104
NY 15AC149308056456 PHPSPTA H0104R
NY 161FDDAB0FFFA0E0 PHPSPTA H0105
NY 15AC149F1AC07FA0 PHPSPTA H0105R
NY 161FDDAE0FABFFD8 PHPSPTA H0106
NY 15AC14AE0591A4BC PHPSPTA H0106R
NY 161FDE0D102AA820 PHPSPTA H1001
NY 155BDC021B6DB61C PHPSPTA H1001R
NY 161FDE100532ED80 PHPSPTA H1002
NY 155BDC071E372DB0 PHPSPTA H1002R
NY 161FDE12162AACB8 PHPSPTA H1003
NY 155BDC0B0BADD90C PHPSPTA H1003R
NY 161FDE1509071AA0 PHPSPTA H1004
NY 155BDC0E0F296544 PHPSPTA H1004R
NY 161FDE17195FCB58 PHPSPTA H1006
NY 155BDC1110CD89B8 PHPSPTA H1006R
NY 161FDE1A16B59890 PHPSPTA H1007
NY 155BDC1507D7663C PHPSPTA H1007R
NY 161FDE1D068027C0 PHPSPTA H1008
NY 155BDC181F551708 PHPSPTA H1008R
NY 161FDE1F153B0C30 PHPSPTA H1009
NY 155BDC1C1E810688 PHPSPTA H1009R
NY 161FDE22042F2988 PHPSPTA H1010
NY 155BDC20123C805C PHPSPTA H1010R
NY 161FDE2413BF0BA0 PHPSPTA H1012
NY 155BDC2413BEE580 PHPSPTA H1012R
NY 161FDE27046055A8 PHPSPTA H1013
NY 155BDC281EF4CEA8 PHPSPTA H1013R
NY 161FDE2912808880 PHPSPTA H1014
NY 155BDC2D00D913F0 PHPSPTA H1014R
NY 161FDE2C01AA4750 PHPSPTA H1015
NY 155BDC30171DBA90 PHPSPTA H1015R
NY 161FDE2E1621F790 PHPSPTA H1016
NY 155BDC331DDCD7F4 PHPSPTA H1016R
NY 161FDE31070D19E8 PHPSPTA H1017
NY 155BDC361CA05AE0 PHPSPTA H1017R
NY 161FDE33151F57B8 PHPSPTA H1018
NY 155BDC391241B8E0 PHPSPTA H1018R
NY 161FDE360456DE70 PHPSPTA H1019
NY 155BDC3C0A496C88 PHPSPTA H1019R
NY 161FDE381429AFC0 PHPSPTA H1020
NY 155BDC3F01A2428C PHPSPTA H1020R
NY 161FDE3B11A2D228 PHPSPTA H1021
NY 155BDC411863F014 PHPSPTA H1021R
NY 161FDE3E049D9430 PHPSPTA H1022
NY 155BDC4409BCCD8C PHPSPTA H1022R
NY 161FDE4014A1E9D0 PHPSPTA H1023
NY 155BDC480314DC74 PHPSPTA H1023R
NY 161FDE4305D95878 PHPSPTA H1024
NY 155BDC4B07ED0AC0 PHPSPTA H1024R
NY 161FDE4516C79DE8 PHPSPTA H1025
NY 155BDC4E09BDAC40 PHPSPTA H1025R
NY 161FDE48063FDFD8 PHPSPTA H1026
NY 155BDC5107BFCECC PHPSPTA H1026R
NY 161FDE4A1851D0F0 PHPSPTA H1027
NY 155BDC531CFA8FE4 PHPSPTA H1027R
NY 161FDE4D08209BA8 PHPSPTA H1028
NY 155BDC5617546790 PHPSPTA H1028R
NY 161FDE4F18F12778 PHPSPTA H1029
NY 155BDC5913982694 PHPSPTA H1029R
NY 161FDE5209BE3CE8 PHPSPTA H1031
NY 155BDC5D02DA37C0 PHPSPTA H1031R
NY 161FDE5419B880B8 PHPSPTA H1032
NY 155BDC6316ADAC4C PHPSPTA H1032R
NY 161FDE570994B9C0 PHPSPTA H1033
NY 155BDC6706CC7C10 PHPSPTA H1033R
NY 161FDE591A8134D0 PHPSPTA H1034
NY 155BDC6A13A513C4 PHPSPTA H1034R
NY 161FDE5C09F8D5B8 PHPSPTA H1035
NY 155BDC6E0AC09784 PHPSPTA H1035R
NY 161FDE5E1A512EF0 PHPSPTA H1036
NY 158A85B901EC2828 PHPSPTA H1036R
NY 16488F5B04F61578 PHPSPTA H1037
NY 155BDC750E375AA4 PHPSPTA H1037R
NY 161FDE6401599EF8 PHPSPTA H1038
NY 155BDC780E52907C PHPSPTA H1038R
NY 161FDE6611EDBE68 PHPSPTA H1039
NY 155BDC7B13DFCE04 PHPSPTA H1039R
NY 161FDE6901AED080 PHPSPTA H1040
NY 155BDC7E15785B10 PHPSPTA H1040R
NY 161FDE6B113CCFE8 PHPSPTA H1041
NY 155BDC820EB9A1D4 PHPSPTA H1041R
NY 161FDE6E02365EA0 PHPSPTA H1042
NY 155BDC860BAB9440 PHPSPTA H1042R
NY 161FDE70156E1E18 PHPSPTA H1043
NY 155BDC8A000C7508 PHPSPTA H1043R
NY 161FDE730667E1D8 PHPSPTA H1044
NY 155BDC8E1AC79150 PHPSPTA H1044R
NY 161FDE75172311A8 PHPSPTA H1046
NY 15ACA3D315FD0A1A PHPSPTA H1046R
NY 161FDE7806709330 PHPSPTA H1047
NY 155BDC951DD95064 PHPSPTA H1047R
NY 161FDE7A15CBD0B8 PHPSPTA H1048
NY 155BDC9A195F1CAC PHPSPTA H1048R
NY 161FDE7D0E4EFC90 PHPSPTA H1051
NY 1584DFBF09E5165C PHPSPTA H1051R
NY 15816A34079F3880 PHPSPTA H1051X
NY 161FDE80088551C8 PHPSPTA H1056
NY 155BDCA117D55598 PHPSPTA H1056R
NY 161FDE8217CDEF70 PHPSPTA H1057
NY 155BDCA418814914 PHPSPTA H1057R
NY 161FECCF00E17C20 PHPSPTA H1058
NY 155BDCA714AC9E14 PHPSPTA H1058R
NY 161FECD21DE71C40 PHPSPTA H1059
NY 155BDCAA1380A8EC PHPSPTA H1059R
NY 161FECD6066E9C20 PHPSPTA H1060
NY 155BDCAD061DC944 PHPSPTA H1060R
NY 161FECD90BE52440 PHPSPTA H1061
NY 155BDCAF18C672B4 PHPSPTA H1061R
NY 161FECDC109D7628 PHPSPTA H1062
NY 155BDCB21F3D7428 PHPSPTA H1062R
NY 161FECDF1222D330 PHPSPTA H1063
NY 155BDCB60F133A14 PHPSPTA H1063R
NY 161FECE2181277D0 PHPSPTA H1064
NY 155BDCB914653080 PHPSPTA H1064R
NY 161FECE6037780C8 PHPSPTA H1065
NY 155BDCBC186AAF74 PHPSPTA H1065R
NY 161FECE90BB44280 PHPSPTA H1066
NY 155BDCC0084869BC PHPSPTA H1066R
NY 161FECEC0ED8C648 PHPSPTA H1067
NY 155BDCC30620BA1C PHPSPTA H1067R
NY 161FECEF0A249C48 PHPSPTA H1068
NY 155BDCC6016F5008 PHPSPTA H1068R
NY 161FECF209283BE0 PHPSPTA H1069
NY 155BDCC9044B858C PHPSPTA H1069R
NY 161FECF50C793EB0 PHPSPTA H1071
NY 155BDCCC165495DC PHPSPTA H1071R
NY 15DC641200ECE17C PHPSPTA H1071X
NY 161FECF810778CA0 PHPSPTA H1072
NY 155BDCD00B413930 PHPSPTA H1072R
NY 161FECFB11377B20 PHPSPTA H1073
NY 155BDCD319CAF2C0 PHPSPTA H1073R
NY 161FECFE061DB038 PHPSPTA H1074
NY 155BDCD80F9233BC PHPSPTA H1074R
NY 161FED00163D3890 PHPSPTA H1075
NY 155BDCDB0DB3B18C PHPSPTA H1075R
NY 161FED03136463B0 PHPSPTA H1076
NY 155BDCDE0B1AA074 PHPSPTA H1076R
NY 161FED060E434DA0 PHPSPTA H1077
NY 155BDCE108D7039C PHPSPTA H1077R
NY 161FED090CEDF588 PHPSPTA H1078
NY 155BDCE40EFAC860 PHPSPTA H1078R
NY 161FED0C08C7B388 PHPSPTA H1079
NY 155BDCE71815C8C0 PHPSPTA H1079R
NY 161FED0F05C96360 PHPSPTA H1080
NY 155BDCEA119ABEC4 PHPSPTA H1080R
NY 161FED12077AFC20 PHPSPTA H1081
NY 155BDCED03791A08 PHPSPTA H1081R
NY 161FED150107E628 PHPSPTA H1082
NY 155BDCF8041D0CAC PHPSPTA H1082R
NY 161FED171006BFC0 PHPSPTA H1083
NY 155BDCFA1ABE2414 PHPSPTA H1083R
NY 161FED191F3194B0 PHPSPTA H1084
NY 155BDCFD18411260 PHPSPTA H1084R
NY 161FED1C0D617888 PHPSPTA H1085
NY 155BDD01018C390C PHPSPTA H1085R
NY 161FED1E1D792E90 PHPSPTA H1086
NY 155BDD04195F28CC PHPSPTA H1086R
NY 161FED210B6F3400 PHPSPTA H1087
NY 155BDD081B376444 PHPSPTA H1087R
NY 161FED231E0822F0 PHPSPTA H1088
NY 155BDD0C153A597C PHPSPTA H1088R
NY 161FED2617B63710 PHPSPTA H1089
NY 155BDD1002B4259C PHPSPTA H1089R
NY 161FED290E6FF710 PHPSPTA H1090
NY 155BDD1302792958 PHPSPTA H1090R
NY 161FED2B1D86B130 PHPSPTA H1091
NY 155BDD16089DAB30 PHPSPTA H1091R
NY 161FED2E0D091280 PHPSPTA H1092
NY 155BDD2117BE19B4 PHPSPTA H1092R
NY 161FED301C4A7DB8 PHPSPTA H1093
NY 155BDD241BA7FDC4 PHPSPTA H1093R
NY 161FED330D630468 PHPSPTA H1094
NY 155BDD271DAF37E0 PHPSPTA H1094R
NY 161FED351D165ED8 PHPSPTA H1095
NY 155BDD2B00B83E48 PHPSPTA H1095R
NY 161FED380BE31F50 PHPSPTA H1096
NY 155BDD2E1017989C PHPSPTA H1096R
NY 161FED3A1C1E60F8 PHPSPTA H1097
NY 155BDD311042AC38 PHPSPTA H1097R
NY 161FED3D0C21A228 PHPSPTA H1099
NY 15A4FD37163C3114 PHPSPTA H1099R
NY 161FED3F1BAE6B48 PHPSPTA H1100
NY 1584DFC6136F3DA0 PHPSPTA H1100R
NY 15816A36033CC6B4 PHPSPTA H1100X
NY 161FED4219B089C0 PHPSPTA H1101
NY 1584DFCD05FA4DB4 PHPSPTA H1101R
NY 15816A370D903F2C PHPSPTA H1101X
NY 161FED4514635AB8 PHPSPTA H1102
NY 1584DFD309263C14 PHPSPTA H1102R
NY 161FED4804361A28 PHPSPTA H1112
NY 1584DFB60BC66010 PHPSPTA H1112R
NY 15C483AA06397F0C PHPSPTA H1112X
NY 161FED4A1E930520 PHPSPTA H1113
NY 155BDD480A63B8F0 PHPSPTA H1113R
NY 15C8EF841FE89A0C PHPSPTA H1113X
NY 161FED4D16245178 PHPSPTA H1115
NY 1566AB81098E9D94 PHPSPTA H1115R
NY 1583ED1F1E666B9C PHPSPTA H1115X2
NY 161FED5010DFA3B8 PHPSPTA H1116
NY 15ACA3DA185219F2 PHPSPTA H1116R
NY 15A0601E1851EE58 PHPSPTA H1116X2
NY 161FED5317270668 PHPSPTA H1117
NY 155BDD5215C47080 PHPSPTA H1117R
NY 161FED56065A0978 PHPSPTA H1118
NY 155BDD550B98865C PHPSPTA H1118R
NY 161FED5816A66898 PHPSPTA H1120
NY 1588083502F675E0 PHPSPTA H1120R
NY 161FED5B1081F558 PHPSPTA H1121
NY 158808391E6D6298 PHPSPTA H1121R
NY 161FED5E0CAAC940 PHPSPTA H1122
NY 1588083E0E2B8A58 PHPSPTA H1122R
NY 161FED610B14E640 PHPSPTA H1123
NY 15880843067C1C78 PHPSPTA H1123R
NY 161FED64022752A8 PHPSPTA H1124
NY 158808480E8A888C PHPSPTA H1124R
NY 161FED66191DF450 PHPSPTA H1125
NY 1588084E11535E04 PHPSPTA H1125R
NY 161FED690F945E90 PHPSPTA H1126
NY 158808531E5DC988 PHPSPTA H1126R
NY 161FED6C05601230 PHPSPTA H1127
NY 158808571B9CC210 PHPSPTA H1127R
NY 161FED6E1DD2D600 PHPSPTA H1128
NY 1588085C14B63814 PHPSPTA H1128R
NY 161FED71158E1C28 PHPSPTA H1129
NY 158808610ED59A74 PHPSPTA H1129R
NY 161FED740ADF3B98 PHPSPTA H1130
NY 158808660480FF9C PHPSPTA H1130R
NY 161FED77033D7E38 PHPSPTA H1131
NY 1588086A1F9EAF9C PHPSPTA H1131R
NY 161FED79198F2E40 PHPSPTA H1132
NY 1588086F1A327960 PHPSPTA H1132R
NY 161FED7C0AC87678 PHPSPTA H1133
NY 158808740F91C07C PHPSPTA H1133R
NY 161FED7E190C6C40 PHPSPTA H1134
NY 158808790AF445B8 PHPSPTA H1134R
NY 161FED8109006C60 PHPSPTA H1135
NY 1588087E03B881B4 PHPSPTA H1135R
NY 161FED8317E80110 PHPSPTA H1136
NY 1588088303BDDDD8 PHPSPTA H1136R
NY 161FED86063A8180 PHPSPTA H1137
NY 158808871B5AB230 PHPSPTA H1137R
NY 161FED881655D160 PHPSPTA H1138
NY 1597B8020AD0BD9A PHPSPTA H1138R
NY 161FED8B06039590 PHPSPTA H1139
NY 158A8DEB02D28CC4 PHPSPTA H1139R
NY 161FED8D145762C8 PHPSPTA H1140
NY 15880895102A7A88 PHPSPTA H1140R
NY 161FED9003DD1C68 PHPSPTA H1141
NY 1588089916CF1EA0 PHPSPTA H1141R
NY 161FED9213061778 PHPSPTA H1142
NY 1588089D0ACC33D0 PHPSPTA H1142R
NY 161FED9500FEA7F0 PHPSPTA H1143
NY 158808A11E2F0884 PHPSPTA H1143R
NY 161FED970EBC5C30 PHPSPTA H1144
NY 158808A619D7DD2C PHPSPTA H1144R
NY 161FED991D0D7A38 PHPSPTA H1145
NY 158808AB105DC8C0 PHPSPTA H1145R
NY 161FED9C0C731020 PHPSPTA H1146
NY 158808B00B779D20 PHPSPTA H1146R
NY 161FED9E1A9B0998 PHPSPTA H1147
NY 158808B505709F8C PHPSPTA H1147R
NY 161FEDA10A2B5FC8 PHPSPTA H1148
NY 158808BA04AE2478 PHPSPTA H1148R
NY 161FEDA318E185F8 PHPSPTA H1149
NY 158808BF01838FDC PHPSPTA H1149R
NY 161FEDA607142670 PHPSPTA H1150
NY 158808C31D7FCF1C PHPSPTA H1150R
NY 161FEDB412B59D58 PHPSPTA H1151
NY 158808C80D365CA8 PHPSPTA H1151R
NY 161FEDB712319570 PHPSPTA H1152
NY 158808CC1E10D514 PHPSPTA H1152R
NY 161FEDBA1023E610 PHPSPTA H1153
NY 158808D114BF7A60 PHPSPTA H1153R
NY 161FEDBD06893138 PHPSPTA H1154
NY 158808D60B439D10 PHPSPTA H1154R
NY 161FEDBF1DA923B0 PHPSPTA H1155
NY 158808DA07E4DBF0 PHPSPTA H1155R
NY 161FEDC21B16A850 PHPSPTA H1156
NY 158808DF0EDBE740 PHPSPTA H1156R
NY 161FEDC511668FE8 PHPSPTA H1157
NY 158808E40E6D543C PHPSPTA H1157R
NY 161FEDC80E57B7F8 PHPSPTA H1158
NY 158808E9094D7624 PHPSPTA H1158R
NY 161FEDCB0558D420 PHPSPTA H1159
NY 15A4FCC71DEF06F4 PHPSPTA H1159R
NY 161FEDCD1DD3DF00 PHPSPTA H1160
NY 15A4FCCC17DAF046 PHPSPTA H1160R
NY 161FEDD0158252E8 PHPSPTA H1161
NY 15A4FCD015A005C6 PHPSPTA H1161R
NY 161FEDD30CE85468 PHPSPTA H1162
NY 15A4FCD414EE74BC PHPSPTA H1162R
NY 161FEDD6043AADA0 PHPSPTA H1163
NY 15AC15B60E7E6D46 PHPSPTA H1163R
NY 161FEDD81BB86000 PHPSPTA H1164
NY 15AC15BA184D6394 PHPSPTA H1164R
NY 161FEDDB123E7738 PHPSPTA H1165
NY 15AC15BE18D5B91A PHPSPTA H1165R
NY 161FEDDE09A40798 PHPSPTA H1166
NY 15AC15C21EB803EC PHPSPTA H1166R
NY 161FEDE1044854B0 PHPSPTA H1167
NY 15AC15C614AF6C92 PHPSPTA H1167R
NY 161FEDE31D19E598 PHPSPTA H1168
NY 15AC15CA1CE5E3EA PHPSPTA H1168R
NY 161FEDE61B70C198 PHPSPTA H1169
NY 15AC15CF080B269C PHPSPTA H1169R
NY 161FEDEA01BC29B8 PHPSPTA H1170
NY 15AC15D312F51EEE PHPSPTA H1170R
NY 161FEDEC1FDF4C38 PHPSPTA H1171
NY 15AC15D811701362 PHPSPTA H1171R
NY 161FEDEF1963A618 PHPSPTA H1172
NY 15AC15DD0616B9FA PHPSPTA H1172R
NY 161FEDF211083818 PHPSPTA H1173
NY 15AC15E103FD7D98 PHPSPTA H1173R
NY 161FEDF50CB5DD40 PHPSPTA H1174
NY 15AC15E5134DBE32 PHPSPTA H1174R
NY 161FEDF809914D70 PHPSPTA H1175
NY 15AC161D09607442 PHPSPTA H1175R
NY 161FEDFA17B6BF10 PHPSPTA H1176
NY 15AC16220F3514C8 PHPSPTA H1176R
NY 161FEDFD05AD8F30 PHPSPTA H1177
NY 15AC1627160FAD56 PHPSPTA H1177R
NY 161FEDFF13BFF408 PHPSPTA H1178
NY 15AC162B1E6AA318 PHPSPTA H1178R
NY 161FEE02021D61E0 PHPSPTA H1179
NY 15AC1631000EE58C PHPSPTA H1179R
NY 161FEE04116E3098 PHPSPTA H1180
NY 15AC163519AC7ACA PHPSPTA H1180R
NY 161FEE070015F508 PHPSPTA H1181
NY 15AC163A078833B6 PHPSPTA H1181R
NY 161FEE090E43D8D0 PHPSPTA H1182
NY 15AC163E1A204160 PHPSPTA H1182R
NY 161FEE0B1CD116F8 PHPSPTA H1183
NY 15AC164311D0EB7C PHPSPTA H1183R
NY 161FEE0E0A39E4D8 PHPSPTA H1184
NY 15AC16480B30358C PHPSPTA H1184R
NY 161FEE1018A76240 PHPSPTA H1185
NY 15AC164D016D16C2 PHPSPTA H1185R
NY 161FEE130668A2E0 PHPSPTA H1186
NY 15AC16520A834990 PHPSPTA H1186R
NY 161FEE1514913AA0 PHPSPTA H1187
NY 15AC165719986650 PHPSPTA H1187R
NY 161FEE1803D9C1A8 PHPSPTA H1188
NY 15AC165C1ACD812C PHPSPTA H1188R
NY 161FEE1A1153AE80 PHPSPTA H1189
NY 15AC166305575FF0 PHPSPTA H1189R
NY 161FEE1C1F3E3F50 PHPSPTA H1190
NY 15AC166813C505D4 PHPSPTA H1190R
NY 161FEE1F0EFADB18 PHPSPTA H1191
NY 15AC166E06CBF05A PHPSPTA H1191R
NY 161FEE211C92DAD8 PHPSPTA H1192
NY 15AC16730BBC53A6 PHPSPTA H1192R
NY 161FEE240A2EB8C8 PHPSPTA H1193
NY 15AC1678186FF6C2 PHPSPTA H1193R
NY 161FEE261885BD78 PHPSPTA H1194
NY 15AC167D071126E0 PHPSPTA H1194R
NY 161FEE2909A03CC8 PHPSPTA H1195
NY 15AC16811084B2BC PHPSPTA H1195R
NY 161FEE2B199D2C70 PHPSPTA H1196
NY 15AC1686025898D4 PHPSPTA H1196R
NY 161FEE2E07E6B948 PHPSPTA H1197
NY 15AC168A0168C574 PHPSPTA H1197R
NY 161FEE3015729858 PHPSPTA H1198
NY 15AC168D154B3C68 PHPSPTA H1198R
NY 161FEE3303370CC8 PHPSPTA H1199
NY 15AC1691174F64EE PHPSPTA H1199R
NY 161FEE35112046E0 PHPSPTA H1200
NY 15AC169603C5E4D8 PHPSPTA H1200R
NY 160D1D7D1EE16DB0 PHPSPTA HAXPRST
NY 15E7709F17E5EDB0 PHPSPTA HMCALDB
NY 155BBCF304541900 PHPSPTA HMCAUDT
NY 15AF999510594FC8 PHPSPTA HMCBCRD
NY 161D969413D2F020 PHPSPTA HMCCFGV
NY 157DCAFB0018DB28 PHPSPTA HMCCFGX
NY 15B60AC21A37C08A PHPSPTA HMCCNVSD
NY 1648BC9C0A07CBB0 PHPSPTA HMCCOS1
NY 15C7B6C10BCB2FD8 PHPSPTA HMCECR2
NY 15C7B6C90CC88A90 PHPSPTA HMCECR4
NY 15CACE6508736400 PHPSPTA HMCECR5
NY 15C7B6B0066AD23C PHPSPTA HMCECRC
NY 15D9BE630DFF1524 PHPSPTA HMCERE2
NY 15D9BE6915344B80 PHPSPTA HMCERE4
NY 15D9BE6F0D6D9698 PHPSPTA HMCERE5
NY 15D9BE521E305188 PHPSPTA HMCEREP
NY 15220C551C3B6E28 PHPSPTA HMCEXP3
NY 15CE713C00D20FB8 PHPSPTA HMCGSET
NY 166877D90BF64B88 PHPSPTA HMCLKCK
NY 161F0BE31EED2D30 PHPSPTA HMCPRSX
NY 1615BD381DA77DA0 PHPSPTA HMCPRUP
NY 1619587800D60890 PHPSPTA HMCPRUS
NY 164B90BD1C019430 PHPSPTA HMCQRY
NY 164B90C806C859B8 PHPSPTA HMCQRY2
NY 164B90CD10509A64 PHPSPTA HMCQRY4
NY 164B90D0073EB890 PHPSPTA HMCQRY5
NY 15C7830702097490 PHPSPTA HMCRCR2
NY 15C7830E185A6BFC PHPSPTA HMCRCR4
NY 15C78317061022C4 PHPSPTA HMCRCR5
NY 15C7832B09628D34 PHPSPTA HMCRCRC
NY 15D7894D02F10E00 PHPSPTA HMCRES
NY 15D9BE8F1D89B10C PHPSPTA HMCRRE2
NY 15D9BE9513654C98 PHPSPTA HMCRRE4
NY 15DA3869101E5928 PHPSPTA HMCRRE5
NY 15D9BE7C1DE60F88 PHPSPTA HMCRREP
NY 163917300E3A09E8 PHPSPTA HMCSEC3
NY 1639247400924910 PHPSPTA HMCSIG3
NY 167A381006E54154 PHPSPTA HMCSRVR
NY 165068C40486A51C PHPSPTA HMCSTK
NY 1648701D08505C48 PHPSPTA HMCTRAN
NY 15AAE9F00D66AC82 PHPSPTA HMCXRL4
NY 162D0C2C0A2CAAE0 PHPSPTA HMCXRLE
NY 15A7C94E1ED22D8E PHPSPTA HMPBNDM
NY 164DEE021925D98C PHPSPTA HMPBNDR
NY 1608E2520A62D370 PHPSPTA HMPBNDR4
NY 1603114C09187630 PHPSPTA HMPBTBL
NY 1631560B086E34A8 PHPSPTA HMPDCLG
NY 15E76E4709C5C930 PHPSPTA HMPFCMP
NY 164890B40BD43E58 PHPSPTA HMPGCB
NY 163155830B285D98 PHPSPTA HMPGDDL
NY 1631561808A47EF8 PHPSPTA HMPGENP
NY 164DEDE0153DDC90 PHPSPTA HMPGENX
NY 15976C280BCB1DB8 PHPSPTA HMPGPNL
NY 1687224D0F9F5FFC PHPSPTA HMPRBDR
NY 155BC2A1004D5FD8 PHPSPTA HMPSNAM
NY 1637EC541E9F2518 PHPSPTA HMPUTRN
NY 15CB758A0929ECF4 PHPSPTA HMPVRSN
NY 1534BB420D798BC4 PHPSPTA RMICKJB
NY 1619076913430EE0 PHPSPTA RMIGNID
NY 155BFD0F07DCE618 PHPSPTA RMIPDAD
NY 155BFD141D669A04 PHPSPTA RMISTAD
NY 155BFD1B04E61B4C PHPSPTA RMISTUP
NY 15811B3A09912CCC PHPSPTA SEDTRNS
NY 158FBB970661F6C2 PHPSPTA STKCLON
NY 15D80C3E18F94D23 PI PI5330 19970602171837S101702A064346API5330
NY 15E49AD60E0E501A PI PI5330 19970821145248S101702A066132API5330
NY 15E7E7F31F8400F2 PI PI5330 19970911145900S101702M000825API5330
NY 15F37FEF1A624D38 PI PI9180 19971124092916S101702Z346248API9180
NY 15F383AA0CCB743C PI PI9180 19971124114227S101702Z346248API9180
NY 15F384B90AFA1C10 PI PI9180 19971124122047S101702Z346248API9180
NY 1576DF591B11FAFA PI PT5310 19950923S101702Z209544APT5310
NY 160522321585D6B6 PI PT5310 19980316142018S101702A071106APT5310
NY 1605231506D029A8 PI PT5310 19980316145200S101702A071106APT5310
NY 160524D602F7E70C PI PT5310 19980316155305S101702A071106APT5310
NY 15769B300BFD6A92 PI PT5500 19950921S101702Z209344APT5500
NY 15769BDD0A003F54 PI PT5500 19950921S101702Z209353APT5500
NY 15769CA51A09D4D6 PI PT5500 19950921S101702Z209365APT5500
NY 1576E23612C24274 PI PT5500 19950923S101702Z209547APT5500
NY 1576E34212AD1454 PI PT5500 19950923S101702Z209549APT5500
NY 1576E4AE10DB0846 PI PT5500 19950923S101702Z209554APT5500
NY 160522471FE39FB6 PI PT5500 19980316142018S101702A071106APT5500
NY 16052321065E4F8A PI PT5500 19980316145200S101702A071106APT5500
NY 160524D40C0ACCDE PI PT5500 19980316155306S101702A071106APT5500
NY 17CBED730FCDA14B PR PR0700I PMRT00003856C451BC
NY 17D28B271FAFF6EE PR PR0700I PMRT00004756FBDF9D
NY 17CBED7504865065 PR PR0730I PMRT00003856C451C9
NY 17D28B290707B4B6 PR PR0730I PMRT00004756FBDFA6
NY 1700981E0C5A22E0 PSSSICH PSSCSQL V4000
NY 1576C95000BB4872 PT PT5310 19950922S101702Z209539APT5310
NY 1576DF591B11FAFA PT PT5310 19950923S101702Z209544APT5310
NY 160522321585D6B6 PT PT5310 19980316142018S101702A071106APT5310
NY 1605231506D029A8 PT PT5310 19980316145200S101702A071106APT5310
NY 160524D602F7E70C PT PT5310 19980316155305S101702A071106APT5310
NY 15E7E7C7158A3702 PT PT5440 19970911145557S101702M000825APT5440
NY 15F0B4EB1937796C PT PT5440 19971106145743S101702A067886APT5440
NY 15769A9E11F1BCB4 PT PT5500 19950921S101702Z209329APT5500
NY 15769B300BFD6A92 PT PT5500 19950921S101702Z209344APT5500
NY 15769BDD0A003F54 PT PT5500 19950921S101702Z209353APT5500
NY 15769CA51A09D4D6 PT PT5500 19950921S101702Z209365APT5500
NY 1576E0100F2EAFEC PT PT5500 19950923S101702Z209545APT5500
NY 1576E0C60DF3B43C PT PT5500 19950923S101702Z209546APT5500
NY 1576E23612C24274 PT PT5500 19950923S101702Z209547APT5500
NY 1576E2CF001CFF64 PT PT5500 19950923S101702Z209548APT5500
NY 1576E34212AD1454 PT PT5500 19950923S101702Z209549APT5500
NY 1576E3A9166DCD96 PT PT5500 19950923S101702Z209550APT5500
NY 1576E4311B55E77A PT PT5500 19950923S101702Z209551APT5500
NY 1576E4AE10DB0846 PT PT5500 19950923S101702Z209554APT5500
NY 158442EC1671AB8C PT PT5500 19951217S101702Z225217APT5500
NY 1584EC800C7CD4C6 PT PT5500 19951221S101702Z226191APT5500
NY 160522471FE39FB6 PT PT5500 19980316142018S101702A071106APT5500
NY 16052321065E4F8A PT PT5500 19980316145200S101702A071106APT5500
NY 160524D40C0ACCDE PT PT5500 19980316155306S101702A071106APT5500
NY 15E7E7ED0B68575C PT PT5510 19970911145559S101702M000825APT5510
NY 15F427070ACF74D8 PT PT5510 19971128130923S101702Z347739APT5510
NY 15F74F061D9C512C PT PT5510 19971218150836S101702A069263APT5510
NY 15F51E1F0353ADD0 PT PT8060 19971204163212S101702M000828APT8060
NY 160C314A07BB75F6 PT PT8490 19980430141812S101702A072050APT8490
NY 15FCCEB0130AE135 PT PT8500 19980122145053S101702A069863APT8500
NY 1576BE1A12EFE12A PT PT8520 19950922S101702Z209475APT8520
NY 1576E4A202F8FA54 PT PT8520 19950923S101702Z209553APT8520
NY 158B34781F8F67CE PT PT8520 19960130S101702Z232085APT8520
NY 15A06492075EA8E0 PT PT8520 19960613141320S101702M000695APT8520
NY 15BF57A913832FA4 PT PT8520 19961227123142S101702M000758APT8520
NY 160E649B1FE921CC PT PT8550 19980514142122S101702A072418APT8550
NY 15D2FAFE11AC610A PT PT8640 19970501112819S101702Z309494APT8640
NY 15D78DA70F21A16F PT PT8640 19970530134806S101702Z313782APT8640
NY 15DBCB591EF53862 PT PT8640 19970626132656S101702A064909APT8640
NY 15BFFB821DCDEEE4 PT PT8650 19961231141731S101702Z286711APT8650
NY 15C073AE08615E2C PT PT8650 19970103135840S101702Z287197APT8650
NY 15C4DC300D0FCCC6 PT PT8650 19970131150927S101702A061364APT8650
NY 15D3025C05BF972C PT PT8660 19970501155240S101702Z309514APT8660
NY 15D78DCB12589A5F PT PT8660 19970530135311S101702Z313785APT8660
NY 15DBCB5810DC9F80 PT PT8660 19970626132652S101702A064909APT8660
NY 15B7A6CD0776D948 PT YPTBAK 19961108140520S101702Z275952AYPTBAK
NY 15B82E3118A4DB0C PT YPTBAK 19961111225045S101702Z276501AYPTBAK
NY 15B82F0A10C29FC2 PT YPTBAK 19961111232114S101702Z276502AYPTBAK
NY 15B84E911770ABC6 PT YPTBAK 19961112180917S101702Z276858AYPTBAK
NY 15B85D13076AB4CA PT YPTBAK 19961113024850S101702Z276869AYPTBAK
NY 15B8BB991E5F6618 PT YPTBAK 19961115111205S101702A058611AYPTBAK
NY 15C00D9B0E244E32 PT YPTBAK 19970101010523S101702Z286736AYPTBAK
NY 15C4DC1D0F2561BC PT YPTBAK 19970131150650S101702A061364AYPTBAK
NY 15C52C0E0C29018E PT YPTBAK 19970202144825S101702Z294216AYPTBAK
NY 15C69716081FC1C2 PT YPTBAK 19970211152131S101702Z295652AYPTBAK
NY 15C96D8410280334 PT YPTBAK 19970301164109S101702Z298905AYPTBAK
NY 15CD838B169BBC14 PT YPTBAK 19970327164021S101702Z303850AYPTBAK
NY 15D2DB0F0D9D6E96 PT YPTBAK 19970430162533S101702Z309430AYPTBAK
NY 15D78D8E074A916E PT YPTBAK 19970530134436S101702Z313781AYPTBAK
NY 15DBCB4E1A2B4AE2 PT YPTBAK 19970626132441S101702A064909AYPTBAK
NY 15DCB9E00B9F9790 PT YPTBAK 19970702114347S101702Z319299AYPTBAK
NY 15DE006704E8B1CB PT YPTBAK 19970710143049S101702A065152AYPTBAK
NY 15E266B9028DEDE0 PT YPTBAK 19970807142356S101702A065756AYPTBAK
NY 15E49AEF0B921EAA PT YPTBAK 19970821145703S101702A066147AYPTBAK
NY 15E8FEE61BDA43D6 PT YPTBAK 19970918132513S101702A066834AYPTBAK
NY 15EBCE4414357C32 PT YPTBAK 19971006103232S101702Z337756AYPTBAK
NY 15EE8182170E3CB8 PT YPTBAK 19971023145209S101702A067699AYPTBAK
NY 15F40132187C72CA PT YPTBAK 19971127143521S101702A068552AYPTBAK
NY 15FABB5101948028 PT YPTBAK 19980109095256S101702Z354315AYPTBAK
NY 15FCCF2A0295BF06 PT YPTBAK 19980122150833S101702A069955AYPTBAK
NY 160F563E0D279370 PT YPTBAK 19980520142938S101702A072384AYPTBAK
NY 161190060C42EFEC PT YPTBAK 19980603182259S101702Z377284AYPTBAK
NY 1612CAF000AC8EE2 PT YPTBAK 19980611141330S101702A072986AYPTBAK
NY 1616BD80170F59EC PT YPTBAK 19980706170353S101702Z382086AYPTBAK
NY 15B7A6CD1C5235AE PT YPTBER 19961108140519S101702Z275952AYPTBER
NY 15B84E9116D6F49E PT YPTBER 19961112180916S101702Z276858AYPTBER
NY 15B8BB991C01C330 PT YPTBER 19961115111204S101702A058611AYPTBER
NY 15C4DC1C0C27ABAC PT YPTBER 19970131150649S101702A061364AYPTBER
NY 15C52C0204C2AD20 PT YPTBER 19970202144632S101702Z294215AYPTBER
NY 15C96D840C52C4D8 PT YPTBER 19970301164107S101702Z298905AYPTBER
NY 15CD838B14670644 PT YPTBER 19970327164021S101702Z303850AYPTBER
NY 15D2DB0F0C4EF8EA PT YPTBER 19970430162531S101702Z309430AYPTBER
NY 15D78D8E05A65FE3 PT YPTBER 19970530134435S101702Z313781AYPTBER
NY 15DCB9E004319F82 PT YPTBER 19970702114345S101702Z319299AYPTBER
NY 15DE00680AEC1396 PT YPTBER 19970710143019S101702A065152AYPTBER
NY 15E8FEE519C2BED6 PT YPTBER 19970918132507S101702A066834AYPTBER
NY 15EBCE44117D78EE PT YPTBER 19971006103226S101702Z337756AYPTBER
NY 15EE81810DB0104A PT YPTBER 19971023145207S101702A067699AYPTBER
NY 15F4012F1C28123A PT YPTBER 19971127143518S101702A068552AYPTBER
NY 15FABB51020CF0D2 PT YPTBER 19980109095255S101702Z354315AYPTBER
NY 15FCCF281C6740C4 PT YPTBER 19980122150832S101702A069955AYPTBER
NY 15B7A6CD019CE8F6 PT YPTBZAC 19961108140519S101702Z275952AYPTBZAC
NY 15B84E9116F18FA4 PT YPTBZAC 19961112180917S101702Z276858AYPTBZAC
NY 15B85D121A7FB7E0 PT YPTBZAC 19961113024849S101702Z276869AYPTBZAC
NY 15B8BB991BF2DE38 PT YPTBZAC 19961115111204S101702A058611AYPTBZAC
NY 15C96D840C475B1A PT YPTBZAC 19970301164109S101702Z298905AYPTBZAC
NY 15CD838B1656C8C6 PT YPTBZAC 19970327164021S101702Z303850AYPTBZAC
NY 15D2DB0F0D384228 PT YPTBZAC 19970430162532S101702Z309430AYPTBZAC
NY 15D78D91182C4DF2 PT YPTBZAC 19970530134435S101702Z313781AYPTBZAC
NY 15DBCB4D17199AE6 PT YPTBZAC 19970626132432S101702A064909AYPTBZAC
NY 15DCB9E007B1B9A4 PT YPTBZAC 19970702114346S101702Z319299AYPTBZAC
NY 15DE00670F7BC36C PT YPTBZAC 19970710143026S101702A065152AYPTBZAC
NY 15E8FEE502A4428C PT YPTBZAC 19970918132511S101702A066834AYPTBZAC
NY 15EBCE4410B183F8 PT YPTBZAC 19971006103230S101702Z337756AYPTBZAC
NY 15EE81810DB15824 PT YPTBZAC 19971023145208S101702A067699AYPTBZAC
NY 15F4012E0ACB83CC PT YPTBZAC 19971127143519S101702A068552AYPTBZAC
NY 1579E3C114C9C4E6 PT YYPTM12 19951012S101702A048386AYYPTM12
NY 1798FBDD04B87AF8 PU PU7334 A18Q002532
NY 180096D90561FF68 PU PU7334 JCLB000014
NY 181558C31EE2F0FE PU PU7334 JCLB000021
NY 15A05CEC1F5D6F70 PUPG53 HMCCNVI1
NY 15C7873D10990614 PUPG53 HMCCNVK
NY 15A043920A5B4270 PUPG53 HMCCNVK2
NY 15A0441013B493C2 PUPG53 HMCCNVS2
NY 15A043970D3DA93A PUPG53 HMCCNVS3
NY 15A0439C01514B04 PUPG53 HMCCNVT2
NY 15A043A6113CBE56 PUPG53 HMCCNVT3
NY 158A43471504A084 PUPG53 HMCCNVTE
NY 158A434C1B384D44 PUPG53 HMCCNVTR
NN 16805BE6195D3018 PV A5PO058 2000-05-08-16.07.25.035712
NN 166B99D109A58BB0 PV B5POCNTL 1999-12-28-14.08.56.649262
NN 169C03F101441E35 PV YPV760B A18Q000770
NY 17E0F739098EBF0B RA RA7240 EGB0000020
NY 17FB3B7A0A8CAD31 RA RA7240 EGB0000025
NY 181B290A16FECF14 RA RA7240 EGB0000034
NY 1838634D0E21B868 RA RA7240 EGB0000036
NY 1818019F1FF9964B RB YRBUXY1 RBK0000001594291B9
NY 182B51321362BA9C RB YRBUXY1 RBK000000659E48F65MVS
NY 18321A5510E3BDD3 RB YRBUXY1 RBK00000185A1D6D88
NY 18321A571A3F36F0 RB YRBUXY1 RBK00000185A1D6D88MVS
NY 1541CE631AF17F42 RE RE7520 19941020175514S101702M000502ARE7520
NY 154631F5182A2E0E RE RE7520 19941117161042S101702A039244ARE7520
NY 15684C181296326C RE RE7580 19950622S101702A045483ARE7580
NY 15C708760367E16A RE RE7580 19970214105944S101702A061587ARE7580
NY 15C709581E10A430 RE RE7580 19970214112718S101702A061587ARE7580
NY 1596804A1E8F8F38 RE RE8020 19960411154156S101702A052875ARE8020
NY 15EC1BA406523798 RE RE9930 19971008084159S101702Z338162ARE9930
NY 152BD19507F98B48 RE YREDAT 19940602200603S101702A034743AYREDAT
NY 152BEFE81D72F7E8 RE YREDAT 19940603141908S101702A034743AYREDAT
NY 17E958040B0A9E89 RI RI0810 RI00000013
NY 17F24A40085E0995 RI RI0810 RI00000014
NY 17F7F3371242E607 RI RI0810 RI00000015
NY 1804A5AE1C166F9F RI RI0810 RI00000016
NY 1810C27A02661734 RI RI0810 RI00000019
NY 181CE4AB1F3FDF76 RI RI0810 RI00000021
NY 18297A870DD73A72 RI RI0810 RI00000024
NY 1831536E1FE85151 RI RI0810 RI00000026
NY 1839ED1405A97365 RI RI0810 RI00000027
NY 17F77D041087671C RI RI0820 DE00000049
NY 17F664F21E7CDEB5 RI RI0820 DE00000052
NY 17E658A908D7445C RI RI0820 RI00000012
NY 17F0D69A0BE9BA02 RI RI0820 RI00000014
NY 1804A5AB0688C130 RI RI0820 RI00000016
NY 1560964D1177A128 RK RK2320 19950504142910S101702A043469ARK2320
NY 15C5CF4E037AD228 RK RK2320 19970206160943S101702A061306ARK2320
NY 1560964F070B41CA RK RK2330 19950504142915S101702A043469ARK2330
NY 15693C640D8F84BA RK RK2330 19950628151450S101702Z197041ARK2330
NY 156A7E220F1A5F38 RK RK2330 19950706150906S101702A045904ARK2330
NY 155C63740F70936C RK RK2340 19950407211920S101702Z184804ARK2340
NY 1560965113E43822 RK RK2340 19950504142921S101702A043469ARK2340
NY 1560964A0C2536A6 RK RK2350 19950504142834S101702A043469ARK2350
NY 155C637F1C17F0D6 RK RK2360 19950407212049S101702Z184806ARK2360
NY 1560964C08BA9EEA RK RK2360 19950504142837S101702A043469ARK2360
NY 1560964D035B52D6 RK RK2380 19950504142840S101702A043469ARK2380
NY 15C5CF4704B2065C RK RK2380 19970206160944S101702A061306ARK2380
NY 15609650104F5002 RK RK2390 19950504142842S101702A043469ARK2390
NY 159F4A220FC79D18 RK RK2390 19960606134538S101702A053734ARK2390
NY 15C5CF51133C7EEE RK RK2390 19970206160944S101702A061306ARK2390
NY 1560964C1FB33A24 RK RK2400 19950504142846S101702A043469ARK2400
NY 15C5CF4B03B35654 RK RK2400 19970206160942S101702A061306ARK2400
NY 1560964F0808E5D8 RK RK2410 19950504142854S101702A043469ARK2410
NY 15C7FD8E090E0BE6 RK RK2410 19970220131049S101702A061871ARK2410
NY 1560964C007FB3A0 RK RK2420 19950504142901S101702A043469ARK2420
NY 15C7FD8E08C284A6 RK RK2420 19970220131051S101702A061871ARK2420
NY 17C9963D0E9D1A7E RM RM7190 PARS000047
NY 17D2894B199C042A RM RM7210 PARS000056
NY 17C9B5381AAAEB8E RM RM7220 PARS000047
NY 17D324D60428A15D RM RM7220 PARS000054
NY 17CAA7F607B9CEF4 RM RM7280 PARS000047
NY 17D5FDA602DF8199 RM RM7280 PARS000054
NY 17C89C9B020D8DEF RM RM7930 PARS000047
NY 1558E31601BCB286 RM RM9020 19950316S101702A042838ARM9020
NY 160C31380C0F6DE6 RM RM9200 19980430141653S101702A072046ARM9200
NN 15F064461C73D05C RM RP7980 19971104145142S101702Z343279ARP7980
NY 17C9714F0337B8C7 RM YRM0760 PARS00005056AF7949
NY 17D32906023E38B4 RM YRM0760 PARS00005557010BE4
NY 17C96F7C11174A32 RM YRM2670 PARS00004756AF6A14
NY 17D2B6E407337802 RM YRM2670 PARS00005456FD4E7D
NY 17C96F7C1C6EEBB2 RM YRM2680 PARS00004756AF6A17
NY 17D2B6E41578F6C5 RM YRM2680 PARS00005456FD4E81
NY 17D34A07007AC032 RM YRMORGB PARS000054570220C1
NY 17C89DC91C3BB369 RM YRMORGP PARS00004956A88B07
NY 17C0C2730EC08811 RM YRMR025 PARS0000505666A2A0
NY 17C0C278086E5C7B RM YRMR075 PARS0000505666A2CB
NY 17C0C29403353CFA RM YRMR11O PARS0000505666A3C3
NY 15B7586006DB759E RP RP5100 19961106151732S101702A058507ARP5100
NY 15EB160816FC0FA2 RP RP5100 19971001203824S101702Z336777ARP5100
NY 15FA26431BD0E24C RP RP5100 19980105165723S101702A069490ARP5100
YY 158E6676037C60AE RP RP5340 19960220023552S101702A052154ARP5340
NY 15A4508F0E546484 RP RP5660 19960708130856S101702A055658ARP5660
NY 15A5C13D0983C2F0 RP RP5660 19960717170432S101702A055989ARP5660
NY 15524A961D6A6342 RP RP7000 19950202152307S101702A041708ARP7000
NY 156855601385D216 RP RP7000 19950622S101702A045509ARP7000
NY 15684D520C7715DA RP RP7000 19950622S101702M000595ARP7000
YY 158E638309BED4C0 RP RP7060 19960220004831S101702A052153ARP7060
YY 158EF5E70AD865D6 RP RP7060 19960223160835S101702A052289ARP7060
YY 1593FFE80F5B4CC2 RP RP7060 19960326173958S101702A053072ARP7060
NY 1591F5B90E3EAA7C RP RP7280 19960313181104S101702Z238416ARP7280
NY 159CC1B012AC5782 RP RP7280 19960521105717S101702Z249265ARP7280
NY 156A05721234D83A RP RP7290 19950703S101702Z197678ARP7290
NY 158978CF1E507F2A RP RP7290 19960119S101702A051340ARP7290
NY 15FA26490972FC56 RP RP7960 19980105165721S101702A069490ARP7960
NY 15FD730A0F63120C RP RP7960 19980126165347S101702A070032ARP7960
NY 15BCB55C03922F5E RP RP9010 19961210181748S101702A059742ARP9010
NY 15C3776601054A7C RP RP9010 19970122181857S101702A061163ARP9010
NY 15D19D32145B0FEC RP RP9010 19970422184816S101702A063443ARP9010
NY 1753E1E801C8E77C RP YRPMCOD A12W00063052D54ED2
NY 15763B151F831328 RR RR0010 19950919S101702Z208678ARR0010
NY 1606B4570BD7BB5E RR RR0060 19980326141010S101702A071251ARR0060
NY 1607CA831478B918 RR RR0060 19980402140829S101702A071359ARR0060
NY 160A0690085AC38E RR RR0060 19980416191916S101702M000898ARR0060
NY 15FA9D050152F19A RR RR0180 19980108153856S101702M000886ARR0180
NY 16059B0202712854 RR RR0180 19980319142247S101702A071155ARR0180
NY 160A06D7073C9F48 RR RR0180 19980416191920S101702M000898ARR0180
NY 16059B0819181410 RR RR0210 19980319142248S101702A071155ARR0210
NY 160A06DF107F4AFF RR RR0210 19980416192021S101702M000898ARR0210
NY 1613E4BC033325FB RR RR0210 19980618141924S101702A072843ARR0210
NY 15BF59480E567130 RR RR0240 19961227132818S101702A060345ARR0240
NY 15FA9CF601CF281E RR RR0240 19980108153902S101702M000886ARR0240
NY 16059B00067E3554 RR RR0240 19980319142249S101702A071155ARR0240
NY 15DAB2E119DAD44A RR RR7110 19970619140751S101702A064773ARR7110
NY 15DAD30207470A34 RR RR7110 19970620091818S101702Z317432ARR7110
NY 15DCE51D026DDBE6 RR RR7110 19970703133159S101702A064977ARR7110
NY 156730021410C706 RR RR7120 19950615S101702A044661ARR7120
NY 15AD9AF214B10CD2 RR RR7120 19960905155309S101702M000711ARR7120
NY 15D0CA2F0BFC4734 RR RR7120 19970417125620S101702A063110ARR7120
NY 15894DEA0AD9B246 RR RR7130 19960118S101702M000635ARR7130
NY 15AD9AF21FBF4002 RR RR7130 19960905155309S101702M000711ARR7130
NY 15D0CA321DD7D2C0 RR RR7130 19970417125624S101702A063110ARR7130
NY 15AA49920BCCCCC8 RR RR7150 19960815131413S101702A055629ARR7150
NY 15AD9AF5068541C2 RR RR7150 19960905155310S101702M000711ARR7150
NY 15D0CA321D3E98A2 RR RR7150 19970417125625S101702A063110ARR7150
NY 156730710A2AE5A8 RR RR7190 19950615S101702A044803ARR7190
NY 15AD9AF5096FDDF4 RR RR7190 19960905155311S101702M000711ARR7190
NY 15D0CA2D11768972 RR RR7190 19970417125627S101702A063110ARR7190
NN 15AD9AF51B9DBCC8 RR RR7240 19960905155311S101702M000711ARR7240
NY 15CB494B0CE2ECBA RR RR7240 19970313122849S101702A061790ARR7240
NY 15FA9D140EEA0149 RR RR7240 19980108153908S101702M000886ARR7240
NY 15CB494E0E3ABBC6 RR RR7260 19970313122851S101702A061790ARR7260
NY 15F1CD11118FA34C RR RR7260 19971113140418S101702A067628ARR7260
NY 15FA9D0C1BA194F0 RR RR7260 19980108153913S101702M000886ARR7260
NY 15253780171A3714 RR RR7310 19940421200115S101702M000439ARR7310
NY 155E644903E07944 RR RR7310 19950420S101702A043312ARR7310
NY 156730710C2E0688 RR RR7310 19950615S101702A044803ARR7310
NY 15AD9AF518B0FA5A RR RR7410 19960905155313S101702M000711ARR7410
NY 15D0CA341A122842 RR RR7410 19970417125638S101702A063110ARR7410
NY 15D5300E0D4A325F RR RR7410 19970515123231S101702A063836ARR7410
NN 157F639B022EF7EE RR RR7420 19951116S101702A049429ARR7420
NN 158ECF370E146BD4 RR RR7420 19960222170427S101702A051544ARR7420
NY 15CB494A0A2C3B82 RR RR7420 19970313122851S101702A061790ARR7420
NY 16075648075CE7AA RR RR7510 19980330165030S101702Z367465ARR7510
NY 1607CCA209F8FEEE RR RR7510 19980402152456S101702A071430ARR7510
NY 1607D0AC0616F7A7 RR RR7510 19980402174722S101702A071430ARR7510
NY 15F74ED018466868 RR RR7530 19971218150113S101702A069057ARR7530
NY 1607CCB10BBE413A RR RR7530 19980402152459S101702A071430ARR7530
NY 1607D0B10A1CAD3A RR RR7530 19980402174728S101702A071430ARR7530
NY 16001C0D1BFE722C RR RR8050 19980212150044S101702M000834ARR8050
NY 1607CA85035C4274 RR RR8050 19980402140836S101702A071359ARR8050
NY 160A06A8047BAE52 RR RR8050 19980416192336S101702M000898ARR8050
NY 15CB49500EEC74A6 RR RR8100 19970313122854S101702A061790ARR8100
NY 15E38AB4165461C2 RR RR8100 19970814203006S101702A065878ARR8100
NY 160A068C10FA3A08 RR RR8100 19980416191507S101702M000898ARR8100
NY 15CB49431B72BDDE RR RR8220 19970313122854S101702A061790ARR8220
NY 15E38AB61AA70746 RR RR8220 19970814203010S101702A065878ARR8220
NY 160A068214A4DA36 RR RR8220 19980416191508S101702M000898ARR8220
NY 15CC6B651DFAC6E4 RR RR8300 19970320173218S101702A062654ARR8300
NY 15E38AAF0AF4A442 RR RR8410 19970814203017S101702A065878ARR8410
NY 15FAC8A311E4930A RR RR8410 19980109174945S101702Z354478ARR8410
NY 15E269DF0EBECDA2 RR YRRBLR2 19970807161543CGS101702A065814AYRRBLR2
NY 15E269DD1F494852 RR YRRBLR2 19970807161543S101702A065814AYRRBLR2
NY 15C39D780D302984 RT RE7580 19970123170243S101702A060807ARE7580
NY 15C3B5550A1F1984 RT RE7580 19970124071623S101702A060807ARE7580
NY 15C709581E10A430 RT RE7580 19970214112718S101702A061587ARE7580
NY 17D1941600492BE1 RT RT0100 RFT0000012
NY 17E19B4E0A563BA1 RT RT0200 RFT0000016
NY 17EC7B16084E1A5B RT RT0200 TABS000119
NY 18031B5110D39B75 RT RT0200 TABS000130
NY 182286851C29279F RT RT0200 TABS000163
NY 1541C8C20577E334 RT RT5000 19941020143110S101702A038467ART5000
NN 151A35BF1DC7D344 RT RT5010
NN 152302491FE02E54 RT RT5010 19940407185237S101702A032574ART5010
NY 17D16E971FB872ED RT RT5020 RFT0000015
NY 17EF204D1B02ABA2 RT RT5020 TABS000121
NY 14E7946817E5CE1A RT RT5030
NY 1524395301E2CBBA RT RT5030 19940415122520S101702A032575ART5030
NY 17D16E9D15284C69 RT RT5050 RFT0000015
NY 17D16EA202E911B9 RT RT5060 RFT0000015
NY 17EF2052083ABD62 RT RT5060 TABS000121
NY 17D16EAD03C58C7F RT RT5090 RFT0000015
NY 17F03AE912818F98 RT RT5090 TABS000121
NY 17DC968E1EB56CDA RT RT5100 RFT0000016
NY 17EF205A160D5A55 RT RT5100 TABS000121
NY 17A8E8770674C505 RT RT5110 RFT0000004
NY 17EF205E00112D3D RT RT5110 TABS000121
NY 17D16EAF0C9D0C04 RT RT5120 RFT0000015
NY 17EF2063033DACDE RT RT5120 TABS000121
NY 17992C060EE5753A RT RT5130 RFT0000003
NY 17EF206509CEF087 RT RT5130 TABS000121
NY 17D16EB2190EC161 RT RT5140 RFT0000015
NY 17EF20670798077E RT RT5140 TABS000121
NY 17D21DC81254ADB6 RT RT5160 RFT0000015
NY 17EF20691EE8A1DD RT RT5160 TABS000121
NY 17D16EB604B3DB98 RT RT5170 RFT0000015
NY 17EF206B1FC59F38 RT RT5170 TABS000121
NY 17D16EBA043FA588 RT RT5200 RFT0000015
NY 17D16EBC1BCC0BDD RT RT5210 RFT0000015
NY 150F30CF09A26520 RT RT5400
NY 150F30E50DAF8F1A RT RT5401
NY 150F30A109622612 RT RT5410
NY 14DB7D3E14B2B13C RT RT5411
NY 17D16EC017D19376 RT RT5500 RFT0000015
NY 17D194491ABEAD4A RT RT5550 TABS000080
NY 17E19B4B0E45AA31 RT RT5910 RFT0000016
NY 18031BEA0D8C1911 RT RT5910 TABS000134
NY 180C8F7F0475785F RT RT5910 TABS000145
NY 1824BF3316F2EFAC RT RT5910 TABS000163
NY 14F6FFA21D7D742E RT RT5930
NY 1524395616C6918A RT RT5930 19940415122513S101702A032575ART5930
NN 160E412002F9BF7A RT RT8300 19980513171122S101702A072545ART8300
NY 17D16EC4131A9246 RT RT8400 RFT0000015
NY 177EBFD10E18E8D9 RT RT8401 A20Y001508
NY 17D16EC603E1968D RT RT8410 RFT0000015
NN 160E14430328824B RT RT8411 19980512142538S101702A072415ART8411
NY 15ED6C081CC4F59E RT RT8412 19971016172138S101702A067105ART8412
NY 15F088D0118ABB5C RT RT8412 19971105123924S101702A068100ART8412
NY 17C827201B7E3A17 RT YRT0001 RFT000000956A4A79F
NY 17C8272B0B878916 RT YRT0002 RFT000000956A4A7F6
NY 17FFD2E20DC43B5A RT YRT0002 TABS0001305877A804
NY 18228655036D8A5D RT YRT0002 TABS000163599ACDD3
NY 17D1732300E61795 RT YRT0006 RFT000001556F2A499
NY 1822865B104DC77D RT YRT0006 TABS000163599ACE06
NY 17C8273701BBCC90 RT YRT0007 RFT000000956A4A858
NY 1822865E1104AE21 RT YRT0007 TABS000163599ACE23
NY 17C8273D0A443DB6 RT YRT0008 RFT000000956A4A893
NY 17D173251C28BB66 RT YRT0011 RFT000001556F2A4B0
NY 17D173290491EFD8 RT YRT0023 RFT000001556F2A4CC
NY 17D1732D1A73F1E8 RT YRT025M RFT000001556F2A4F3
NY 17D1732F1E7B38A4 RT YRT075M RFT000001556F2A505
NY 175E0E341F0C6B84 RT YRTKOMB A20Y001346532AA546
NY 17DF647E180F8484 SA SA0160 CSVE000051
NN 153F948D05458196 SA SA0240 19941006135801S101702A038126ASA0240
NN 1592172B0C759F9C SA SA0240 19960314140753S101702A052714ASA0240
NN 15BCFD1B02499354 SA SA0240 19961212130630S101702A059412ASA0240
NN 153C48BB1DE4D182 SA SA0370 19940915143120S101702A037314ASA0370
NN 15E6CAC806F4F6CC SA SA0370 19970904124754S101702M000827ASA0370
NN 16059C22125E2638 SA SA0370 19980319145840S101702M000893ASA0370
NY 17DF648402373064 SA SA0470 CSVE000051
NY 1607CAF81CAAF864 SA SA0980 19980402142445S101702A071385ASA0980
NY 160A033E118387AA SA SA0980 19980416172032S101702M000874ASA0980
NY 16059C0D0FA17010 SA SA5170 19980319145848S101702M000893ASA5170
NY 14FC7B9F09A1CF7A SA YSA0231
NN 153E7AEB0DF02CBC SA YSA0231 19940929135935S101702A037897AYSA0231
NN 154861EC1079A5A8 SA YSA0231 19941201141053S101702A039926AYSA0231
NN 159AE2E90003907E SA YSA0231 19960509132031S101702A053971AYSA0231
NY 160018B400805128 SA YSA0231 19980212130817S101702M000885AYSA0231
NY 14FC7BAE0C55C32C SA YSA0232
NN 153E7AEE092B5344 SA YSA0232 19940929135939S101702A037897AYSA0232
NN 154861EC1F8ACE2A SA YSA0232 19941201141056S101702A039926AYSA0232
NN 159AE2E900F1BFB6 SA YSA0232 19960509132032S101702A053971AYSA0232
NY 160018B401F412F6 SA YSA0232 19980212130817S101702M000885AYSA0232
NY 14FC7BA1092FCD28 SA YSA0233
NN 153E7AEC1D12BA88 SA YSA0233 19940929140005S101702A037897AYSA0233
NN 154861EE11FD4FBA SA YSA0233 19941201141103S101702A039926AYSA0233
NN 159AE2E918E4523A SA YSA0233 19960509132033S101702A053971AYSA0233
NY 160018B4031CD008 SA YSA0233 19980212130818S101702M000885AYSA0233
NY 14FC7BA305407D16 SA YSA0234
NN 153E7AEE0549ED06 SA YSA0234 19940929140025S101702A037897AYSA0234
NN 159AE2E90A01B03A SA YSA0234 19960509132033S101702A053971AYSA0234
NY 160018B21962E2FC SA YSA0234 19980212130815S101702M000885AYSA0234
NY 14FC7BAB0F989FD8 SA YSA0235
NN 153E7AEC0D906562 SA YSA0235 19940929135931S101702A037897AYSA0235
NN 159AE2E810E0325C SA YSA0235 19960509132030S101702A053971AYSA0235
NY 160018B31A5B1BB8 SA YSA0235 19980212130815S101702M000885AYSA0235
NY 14FC7BA219BB3386 SA YSA0236
NN 153E7AEA1D885672 SA YSA0236 19940929135932S101702A037897AYSA0236
NN 154861EE1679472E SA YSA0236 19941201141106S101702A039926AYSA0236
NN 149DE1E70069812C SA YSA0272
NY 15CE998801676182 SA YSA5281 19970403142907S101702M000784AYSA5281
NY 1617309A1D53B85B SA YSA5281 19980709133945S101702M000924AYSA5281
NY 15CE99870A316E8A SA YSA5282 19970403142915S101702M000784AYSA5282
NY 1617308B0D31C360 SA YSA5282 19980709133946S101702M000924AYSA5282
NY 15F2E643106225E8 SA YSA67S1 19971120134646S101702A068355AYSA67S1
NY 15FBB34210C378DF SA YSA67S1 19980115134658S101702M000890AYSA67S1
NY 16059BD61DD4E90E SA YSA67S1 19980319145252S101702M000893AYSA67S1
NY 1608ED100BBB4F54 SA YSA67S1 19980409192933S101702A071661AYSA67S1
NY 161AA5C403AB8BA2 SA YSA67S1 A16M000011
NY 15673006126219FA SA YSAL001 19950615S101702A044787AYSAL001
NY 1568496515AEB1F4 SA YSAL001 19950622S101702A045506AYSAL001
NY 156B96111108E7B0 SA YSAL001 19950713S101702A046133AYSAL001
NY 1576979B0FDE7A28 SA YSAL001 19950921S101702A047844AYSAL001
NY 157AFC721907BEF8 SA YSAL001 19951019S101702M000626AYSAL001
NY 157E4ACD02366344 SA YSAL001 19951109S101702A049380AYSAL001
NY 1582B2B304203332 SA YSAL001 19951207S101702A050221AYSAL001
NY 15AB64B50C10C8A4 SA YSAL001 19960822140801S101702A056643AYSAL001
NY 15FBB342152B3471 SA YSAL001 19980115134655S101702M000890AYSAL001
NY 156B960C1747DEA0 SA YSAL002 19950713S101702A046133AYSAL002
NY 1576979C0ED6446A SA YSAL002 19950921S101702A047844AYSAL002
NY 15AB64B50E9565AE SA YSAL002 19960822140803S101702A056643AYSAL002
NY 15CE998616874042 SA YSAL002 19970403142856S101702M000784AYSAL002
NY 15FBB3421550F17C SA YSAL002 19980115134657S101702M000890AYSAL002
NY 15A17D840948285C SA YSAL006 19960620135031S101702A054814AYSAL006
NY 15A35EA31AA5BD84 SA YSAL006 19960702125049S101702A055478AYSAL006
NY 15A386A40C51ECB6 SA YSAL006 19960703124118S101702A055562AYSAL006
NY 15A7F1270A7AAE68 SA YSAL006 19960731150427S101702A056186AYSAL006
NY 15CE998705E28EC2 SA YSAL006 19970403142900S101702M000784AYSAL006
NY 15FBB3421551E58C SA YSAL006 19980115134658S101702M000890AYSAL006
NY 15CE9987057858D2 SA YSAL010 19970403142900S101702M000784AYSAL010
NY 15D87F7915F198DA SA YSAL010 19970605140228S101702M000795AYSAL010
NY 15D8A9BC088162CD SA YSAL010 19970606151531S101702A064474AYSAL010
NY 15F9053605F5B6C2 SA YSAL010 19971229123211S101702A069401AYSAL010
NY 15CE998A09C6AF60 SA YSAL011 19970403142901S101702M000784AYSAL011
NY 15D87F791766D369 SA YSAL011 19970605140229S101702M000795AYSAL011
NY 15D8A9BC0A37FD7A SA YSAL011 19970606151531S101702A064474AYSAL011
NY 15F905360541A4BC SA YSAL011 19971229123211S101702A069401AYSAL011
NY 159F4BC014E4B402 SA YSAOBP 19960606144320S101702A054730AYSAOBP
NY 15B899671C5170D8 SA YSAOBP 19961114144539S101702M000743AYSAOBP
NY 15B8A1D914AF065C SA YSAOBP 19961114194922S101702M000743AYSAOBP
NY 15B9B1B70CEAF70A SA YSAOBP 19961121140042S101702M000745AYSAOBP
NY 15C164601E9338A4 SA YSAOBP 19970109133259S101702A060528AYSAOBP
NY 15E44AED15D19C64 SA YSAOBP 19970819151336S101702Z328496AYSAOBP
NY 15E44B5A1734315C SA YSAOBP 19970819152851S101702Z328527AYSAOBP
NY 15E44D420A240B9A SA YSAOBP 19970819163654S101702Z328550AYSAOBP
NY 15E499890CFABE4E SA YSAOBP 19970821140528S101702A066252AYSAOBP
NY 160022FE1AA3074A SA YSAOBP 19980212191614S101702M000891AYSAOBP
NN 1617CA2B0D9F0C9C SA YSAT006 A16M000011
NY 1617309407826F30 SA YSAT009 19980709134033S101702M000924AYSAT009
NN 161730780C837ABA SA YSAT011 19980709133841S101702M000924AYSAT011
NY 16173099130FB091 SA YSAT015 19980709133846S101702M000924AYSAT015
NY 161730801E25BCB0 SA YSAT035 19980709133855S101702M000924AYSAT035
NN 15B8996A0277B5C6 SA YSAT301 19961114144601S101702M000743AYSAT301
NN 15B8A1D609330FC2 SA YSAT301 19961114194931S101702M000743AYSAT301
NN 161D7D3001A935B0 SA YSAT301 A16M000011
NY 152BC9A60BD9B57A SA YSAT801 19940602152851S101702A034761AYSAT801
NY 152F190A14CC6B52 SA YSAT801 19940623170035S101702A035250AYSAT801
NY 15C5CC961E2D0CA0 SA YSAT801 19970206143328S101702A061469AYSAT801
NY 1608ED0F1851F0D8 SA YSAT801 19980409192934S101702A071661AYSAT801
NY 1532821C19E6B976 SA YSAT802 19940715094943S101702A035847AYSAT802
NY 155016A709C4043A SA YSAT802 19950119145806S101702A041204AYSAT802
NY 15C5CC970C333E6E SA YSAT802 19970206143331S101702A061469AYSAT802
NY 15CA30E009D9769A SA YSAT802 19970306131335S101702M000777AYSAT802
NY 1608ED0F18531FB6 SA YSAT802 19980409192934S101702A071661AYSAT802
NY 1532822D15807290 SA YSAT803 19940715094944S101702A035847AYSAT803
NY 15C5CC97089DA9D6 SA YSAT803 19970206143332S101702A061469AYSAT803
NY 1608ED0F141CC73A SA YSAT803 19980409192932S101702A071661AYSAT803
NY 1532821C15FAAEFC SA YSAT805 19940715094945S101702A035847AYSAT805
NY 15C5CC970F570596 SA YSAT805 19970206143334S101702A061469AYSAT805
NY 1608ED0F08BC2FAC SA YSAT805 19980409192933S101702A071661AYSAT805
NY 1532822D11BD61B2 SA YSAT806 19940715094946S101702A035847AYSAT806
NY 15C5CC920E8C7D8C SA YSAT806 19970206143321S101702A061469AYSAT806
NY 152DFBCC09912506 SA YSAT807 19940616144919S101702A034999AYSAT807
NY 153D625917580C4E SA YSAT807 19940922143846S101702A037594AYSAT807
NY 15A066370EEB9C62 SA YSAT807 19960613151306S101702A054928AYSAT807
NY 15B9B1BB041DB752 SA YSAT807 19961121140042S101702M000745AYSAT807
NY 15C5CC931A5872CA SA YSAT807 19970206143322S101702A061469AYSAT807
NY 154513D61BBDA420 SA YSAUEB 19941110133031S101702A039326AYSAUEB
NY 15451B0404DABD5A SA YSAUEB 19941110174709S101702A039326AYSAUEB
NY 15462E841FA8D642 SA YSAUEB 19941117140738S101702A039487AYSAUEB
NY 15C164B9051612DA SA YSAUEB 19970109134538S101702A060538AYSAUEB
NY 15F5E0F71EAF2E6A SA YSAUEB 19971209124732S101702A068954AYSAUEB
NY 161933E403C81B9C SA YSX8105 A16M000011
NY 161981A5061B2D42 SA YSX81S1 A16M000011
NY 1541788603A42FF4 SAMDBOF SAMB0500
NY 15767F84136446E4 SAMDBOF SP1BS1T
NY 15767F8D19B472B2 SAMDBOF SP1BS2T
NY 15767F9709AA25FE SAMDBOF SP1BS3T
NY 15767F9C0FCE862E SAMDBOF SP1BS4T
NY 15767FA817407E00 SAMDBOF SP1BS5T
NY 15767FB0006A1294 SAMDBOF SP1BS6T
NY 1578C49201271AE0 SAMDBOF SP1BS9T
NY 15988B550C40F8D4 SAMDBOF SP1SK1T
NY 15988B61096F6B8A SAMDBOF SP1SK2T
NY 15988B6C01CAD6AA SAMDBOF SP1SK3T
NY 15988B711C4D1EE0 SAMDBOF SP1SK4T
NY 15988B7F0B56EB30 SAMDBOF SP1SK5T
NY 15767FC308E2C354 SAMDBOF SP1TS1T
NY 15767FFB08111E84 SAMDBOF SP1US1T
NY 1576802C1467DB7E SAMDBOF SP1US2T
NY 16D99450011C8DF5 SE SE0560 A20Y000517
NY 16A3B1C805B5AC6F SE SE0560 A20Y000523
NY 16E4EB9D12FBF592 SE SE0560 A20Y000936
NY 172F437D038F34BD SE SE0560 A20Y001226
NY 175B6E4110B174C8 SE SE0560 A20Y001357
NY 177F1CB71E593D76 SE SE0870 A20Y001521
NY 17BF5E19069A3C09 SE SE7120 IMS0000024
NY 17BF5E191A471C79 SE SE7130 IMS0000024
NY 181E472111C57656 SE SE8300 IMS0000057
NY 181E472117D0FB6D SE SE8310 IMS0000057
NY 177A5FB504F94FDC SE SE8710 A12M006478
NY 15AD972311049BEA SE YSE0301 19960905133832S101702A056374AYSE0301
NY 15DDFD8F0BD5A2B4 SE YSE0301 19970710124842S101702A065149AYSE0301
NY 15DDFD9605FB9180 SE YSE0310 19970710124852S101702A065149AYSE0310
NY 15EC2A440A7D960A SE YSE0310 19971008172544S101702A067384AYSE0310
NY 160480EB16D325E0 SE YSE0310 19980312140704S101702A071005AYSE0310
NY 15DDFD8F19BAFD10 SE YSE0311 19970710124837S101702A065149AYSE0311
NY 15EC2A4313F5C304 SE YSE0311 19971008172549S101702A067384AYSE0311
NY 15DDFD9316E3465E SE YSE0312 19970710124838S101702A065149AYSE0312
NY 15DDFD931948518A SE YSE0313 19970710124839S101702A065149AYSE0313
NY 15DDFD951227B94C SE YSE0314 19970710124840S101702A065149AYSE0314
NY 15EC2A4B0712352A SE YSE0314 19971008172558S101702A067384AYSE0314
NY 15DDFD9409AC0430 SE YSE0315 19970710124841S101702A065149AYSE0315
NY 15EC2A4A0C52B3EE SE YSE0315 19971008172603S101702A067384AYSE0315
NY 15DDFD8F057E73E0 SE YSE0316 19970710124842S101702A065149AYSE0316
NY 15DDFD940CAA335A SE YSE0317 19970710124843S101702A065149AYSE0317
NY 15EC2A431C89DB98 SE YSE0317 19971008172531S101702A067384AYSE0317
NY 15DDFD94062E7FA0 SE YSE0318 19970710124844S101702A065149AYSE0318
NY 15DDFD8F0F1C3CFA SE YSE0319 19970710124845S101702A065149AYSE0319
NY 15DDFD941349BD10 SE YSE0320 19970710124845S101702A065149AYSE0320
NY 15EC2A411D04B02E SE YSE0320 19971008172534S101702A067384AYSE0320
NY 15DDFD9314C2582A SE YSE0321 19970710124847S101702A065149AYSE0321
NY 15DDFD930E7AECC0 SE YSE0322 19970710124848S101702A065149AYSE0322
NY 15DDFD941196E27C SE YSE0323 19970710124849S101702A065149AYSE0323
NY 15DDFD901F803F2E SE YSE0324 19970710124850S101702A065149AYSE0324
NY 15EC2A43050533CA SE YSE0324 19971008172537S101702A067384AYSE0324
NY 176AFA811A058A84 SE YSE09D0 A20Y00142753971B62
NY 17E0AB9C06FF5334 SF SF7990 GDIR000033
NN 155390A303748620 SI SI7340 19950210175302S101702Z176831ASI7340
NN 15551EA502C4230A SI SI7340 19950220151931S101702A042317ASI7340
NN 14B6182312CD38FC SI SI7550
NN 14B618021668B9F4 SI YSI0132
NY 15D997EF0C286A40 SM SMDEF002
NN 15D6E2381E2BD592 SM SMJCLEX1
NY 15AA6CCB0E16DCA8 SM SMJCLEX2
NN 15AB8DC70A7C3D3E SM SMPATCRE
NN 15D04BF40F23CF8E SM SMPATDEL
NN 15F1ED3E01F57756 SM SMPHBILD
NN 15D2AAB407FB7716 SM SMPHREPL
NN 15AB84960727165E SM SMPHUPD
NN 15AB85D00AD82780 SM SMPHUPD1
NN 15AB85CF03B95EFE SM SMPHUPD2
NN 15AA6CD40E0EFAC4 SM SMPLAN01
NN 15E7E9A116ECD213 SM SMUPDAT0
NN 15E7E9A313C0F84F SM SMUPDAT1
NY 15D6D716005BD5FE SM SMUPDAT2
NY 181F404000F8EED1 SN SN0200 SAVS000005
NY 1823CE0F1C967B65 SN SN0200 SAVS000013
NY 182CBB2506CA0F5D SN SN0200 SAVS000015
NY 181F3FFC0584E468 SN SN5000 SAVS000005
NY 18241CFE0E3C658D SN SN5000 SAVS000013
NY 182194F00B0D8253 SN SN5000 SAVS000014
NY 182CBB280C00CF30 SN SN5000 SAVS000015
NY 18287E5404CC7ED9 SN SN5000 SAVS000016
NY 18399EDA165E51E8 SN SN5000 SAVS000018
NY 1810511C040E0F31 SN SN5001 SAVS000001
NY 1823CE1A1167AB15 SN SN5001 SAVS000013
NY 182CBB2B071C931A SN SN5001 SAVS000015
NY 1838B5520B5DFBD7 SN SN5001 SAVS000018
NY 1810511F10CC8DD2 SN SN5003 SAVS000001
NY 181B9CDC0D5612F7 SN SN5003 SAVS000005
NY 1806432F0022BD35 SN SN5004 NOST000268
NY 1810512209D0EFF9 SN SN5004 SAVS000001
NY 1809AFB2198DF5E8 SN SN5004 SAVS000002
NY 180A2BF81A2C7D9C SN SN5004 SAVS000004
NY 181B9CDC1F6BB3B2 SN SN5004 SAVS000005
NY 1823CE1B0546200E SN SN5004 SAVS000013
NY 181B9CDD1F49FCC9 SN SN5005 SAVS000005
NY 1823CE1B1C43A74D SN SN5005 SAVS000013
NY 181051241B20D9B1 SN SN5006 SAVS000001
NY 181E73F907BDEA71 SN SN5006 SAVS000005
NY 1823CE1C06798B40 SN SN5006 SAVS000013
NY 1837C73001709EEE SN SN5006 SAVS000018
NY 181F412F13C140CE SN SN5100 SAVS000005
NY 18241CFE1C23B877 SN SN5100 SAVS000013
NY 182CBB2E0528F8ED SN SN5100 SAVS000015
NY 18399EDC0E39377D SN SN5100 SAVS000018
NY 18020F1F1E3890CD SN SN5901 NOST000268
NY 1809AFB305C62075 SN SN5901 SAVS000002
NY 181C438E1B1FA2A3 SN SN5901 SAVS000005
NY 1823F5DE16E55444 SN SN5901 SAVS000013
NY 181F40411B0CB2A1 SN SN5902 SAVS000005
NY 1825B120177A7420 SN SN5902 SAVS000013
NY 1828868403E50B4E SN SN5902 SAVS000016
NY 1838B5551CC61772 SN SN5902 SAVS000018
NY 1802C97E11ED3A7E SN SN5903 NOST000268
NY 1810513401AD8E4E SN SN5903 SAVS000001
NY 181B9CFE03287EB1 SN SN5903 SAVS000005
NY 1823CE1F174F5DBD SN SN5903 SAVS000013
NY 181F40420CC9EFA1 SN SN5910 SAVS000005
NY 1825B1400AE3506F SN SN5910 SAVS000013
NY 1838B5681CBA7EF9 SN SN5910 SAVS000018
NY 18111CD2011BE5E7 SN SN5920 SAVS000001
NY 181F4043086B7F18 SN SN5920 SAVS000005
NY 1812A6ED0FC2CE7B SN SN5920 SAVS000006
NY 1812AAD1133E9997 SN SN5920 SAVS000008
NY 1825B15913A0F0BD SN SN5920 SAVS000013
NY 1828877F066B6F3E SN SN5920 SAVS000016
NY 1837E6C8107D76D4 SN SN6005 SAVS000018
NY 183B0A921F4BD645 SN SN6006 SAVS000018
NY 1837E6CD1F3DEB61 SN SN6007 SAVS000018
NY 17FEBFDC15F94F6B SN YSN100I NOST000268586EA4F0
NY 181B9C9A066F4579 SN YSN100I SAVS0000055960D039
NY 17FEBFE101E872A1 SN YSN100S NOST000268586EA518
NY 181B9C9A1E4FC7E2 SN YSN101I SAVS0000055960D042
NY 181B9C9B14534D98 SN YSN102I SAVS0000055960D048
NY 181B9C9C1925A484 SN YSN103I SAVS0000055960D050
NY 17FEBFE306118A91 SN YSN110I NOST000268586EA52B
NY 18104FC9120B48E0 SN YSN110I SAVS00000159020504
NY 181B9CC8057623FA SN YSN110I SAVS0000055960D1C4
NY 17FEBFE315D52BBF SN YSN110S NOST000268586EA52F
NY 17FEBFE404E62B68 SN YSN110U NOST000268586EA531
NY 18104FD401ADA090 SN YSN110U SAVS0000015902056A
NY 17FEBFE4045D1ECA SN YSN111I NOST000268586EA533
NY 18104FDD1F6A48C3 SN YSN111I SAVS000001590205C6
NY 181B9C9E124C7C6F SN YSN111I SAVS0000055960D060
NY 17FF5C8C0E992FD8 SN YSN111S NOST0002685873C750
NY 17FEBFE4142131A8 SN YSN111U NOST000268586EA538
NY 18104FEA1264933D SN YSN111U SAVS00000159020621
NY 17FEBFE41EEE187F SN YSN120 NOST000268586EA53A
NY 181B9CA208374FDF SN YSN120 SAVS0000055960D067
NY 17FEBFE601503D12 SN YSN183I NOST000268586EA543
NY 181B9CA3016EA83A SN YSN183I SAVS0000055960D087
NY 1802F3FF1530B200 SN YSN187I NOST0002685891E82E
NY 181B9CA417EB77B7 SN YSN187I SAVS0000055960D095
NY 1801FBE61D52FEF6 SN YSN187S NOST0002685889C70D
NY 17FEBFEB005C1663 SN YSN201I NOST000268586EA569
NY 181C42601CE75B56 SN YSN201I SAVS00000559663EDB
NY 1810500B0216C17E SN YSN202I SAVS00000159020731
NY 181D828C0E5074AC SN YSN202I SAVS0000055970BC9A
NY 181F3F4815EA259D SN YSNA005 SAVS000005597F4F58
NY 1823CDF00459846B SN YSNA005 SAVS00001359A589EE
NY 182CBA4A10CD65D5 SN YSNA005 SAVS00001559F06462
NY 181C39961D1F259C SN YSNB002 SAVS0000055965F526
NY 1823CDF118A17310 SN YSNB002 SAVS00001359A58A06
NY 18399EB505F3737E SN YSNB002 SAVS0000185A5C7C5F
NY 181F3F0E099FEF2B SN YSND001 SAVS000005597F4D78
NY 17FEBFD10B69FD66 SN YSND002 NOST000268586EA494
NY 17FEBFD20A3F8B5A SN YSND003 NOST000268586EA49A
NY 1810509E09643C91 SN YSND003 SAVS00000159020C56
NY 181B9C7D1E8FEEB9 SN YSND003 SAVS0000055960CF4C
NY 181B9C7E1B2359ED SN YSND004 SAVS0000055960CF54
NY 181B9C7F1A5C29C9 SN YSND005 SAVS0000055960CF5D
NY 181B9C801BEC5ED9 SN YSND006 SAVS0000055960CF65
NY 181050A813EDA1C7 SN YSND007 SAVS00000159020CA9
NY 181B9C811899B1E0 SN YSND007 SAVS0000055960CF6D
NY 18066B1F1389EC58 SN YSND008 NOST00026858AEF9FA
NY 181050B6129AAFC8 SN YSND008 SAVS00000159020CEE
NY 181B9C8215C2DAC8 SN YSND008 SAVS0000055960CF75
NY 18111CB31CAE9549 SN YSND010 SAVS0000015908BC89
NY 181E74830FB5EFF0 SN YSND010 SAVS0000055978AA6A
NY 1823CDFB0EDA5F7C SN YSND010 SAVS00001359A58A57
NY 181D829E017E7DE9 SN YSND011 SAVS0000055970BD39
NY 181050CF14ECC654 SN YSND012 SAVS00000159020DCD
NY 181E9DA21B49B572 SN YSND012 SAVS000005597A035F
NY 1823CDFC06D6C4F4 SN YSND012 SAVS00001359A58A5C
NY 181050D5060FD9A2 SN YSND013 SAVS00000159020E14
NY 181E7484189AC362 SN YSND013 SAVS0000055978AA76
NY 1823CDFC1FFF69D6 SN YSND013 SAVS00001359A58A61
NY 181B9C8B0093806B SN YSND014 SAVS0000055960CFBC
NY 181B9C8B1EA8591B SN YSND015 SAVS0000055960CFC3
NY 181B9C8C1E40A05F SN YSNI001 SAVS0000055960CFCC
NY 181B9C9603465715 SN YSNI003 SAVS0000055960D01A
NY 1823CDFD0786DCDF SN YSNI003 SAVS00001359A58A67
NY 17F3609005E187B2 SV SV0230 WSSV000121
NY 17FB6B9918022B3B SV SV0230 WSSV000148
NY 17E1C22500E4EAA9 SV SV0240 WSSV000116
NY 17EF29AF18EA992A SV SV0240 WSSV000121
NY 17E17D4106BD3BAD SV SV0250 WSSV000116
NY 17F3609104232730 SV SV0250 WSSV000121
NY 17F8DCF6183E58F3 SV SV0250 WSSV000146
NY 17FC34E304E617D7 SV SV0250 WSSV000148
NN 180435DB1E0581B4 SV SV0250 WSSV000151
NY 181117CA19B176CF SV SV0280 WSSV000188
NY 18139D96073F7290 SV SV0280 WSSV000195
NN 181E1FD01E35DB38 SV SV0280 WSSV000196
NY 1812FD400DA6B1F5 SV SV0280 WSSV000225
NY 17E1C22A0741446E SV SV0930 WSSV000116
NY 17EE02CD064FA89C SV SV0930 WSSV000121
NY 180A7B8B152B54FA SV SV0930 WSSV000188
NY 17E1C21E191CC4E8 SV SV0950 WSSV000116
NY 17F4A66418BCA37F SV SV0950 WSSV000121
NY 17F93517016FB65A SV SV0950 WSSV000146
NY 180193FF05D35DF2 SV SV0950 WSSV000148
NY 180437460D67ABCB SV SV0950 WSSV000151
NY 181CE5090B2FF3E3 SV SV0950 WSSV000196
NY 1826EE1A12D83747 SV SV0950 WSSV000200
NY 1809135E1ECC1829 SV SV0950 WSSV000208
NY 183243810540D063 SV SV0950 WSSV000246
NY 1838B74B04E905F2 SV SV0950 WSSV000248
NY 17E1C22E0AF5F78B SV SV5150 WSSV000116
NY 17F3AF6C069E0A99 SV SV5150 WSSV000121
NY 17FB6BAF1DE15371 SV SV5150 WSSV000148
NY 1806E418149351A1 SV SV5150 WSSV000151
NY 180B4212093324F8 SV SV5150 WSSV000188
NY 17E17DDB0150649C SV SV5210 WSSV000116
NY 17EF29C21F42F14E SV SV5210 WSSV000121
NY 17E17DB8024394C8 SV SV5600 WSSV000116
NY 17F365DA01787EC3 SV SV5600 WSSV000121
NY 17F7F5B108C27440 SV SV5600 WSSV000146
NY 17FFA93D0153902D SV SV5600 WSSV000148
NY 1802C78016235575 SV SV5600 WSSV000151
NY 1811E3D01C738FD4 SV SV5600 WSSV000188
NY 1810BE841959FFF8 SV SV5600 WSSV000222
NY 181A0C460B75E40F SV SV5640 WSSV000196
NY 182168E01BA69CA2 SV SV5640 WSSV000239
NY 182194F214F42E61 SV SV5640 WSSV000240
NY 17E67F4816F0A575 SV SV5650 WSSV000116
NY 17E1C234052F1142 SV SV5710 WSSV000116
NY 17E1C23510752386 SV SV5740 WSSV000116
NY 17F3B7941FA91076 SV SV5740 WSSV000121
NY 17F92DAE07AB58D2 SV SV5740 WSSV000146
NY 17FB6BC91BA8A620 SV SV5740 WSSV000148
NY 1806E41E19535516 SV SV5740 WSSV000151
NY 181167BD08F8BE8A SV SV5740 WSSV000188
NY 18144063123CD895 SV SV5740 WSSV000195
NY 181B4E361A47513A SV SV5740 WSSV000196
NY 182530EC1951048A SV SV5740 WSSV000199
NY 18090CFE0AB40619 SV SV5740 WSSV000207
NY 17E1C239175CDD4C SV SV5750 WSSV000116
NY 17F3B79D0B2A07A1 SV SV5750 WSSV000121
NY 17F92DB208E98B1C SV SV5750 WSSV000146
NY 17FB6BCB00901306 SV SV5750 WSSV000148
NY 1806E4671CE7F768 SV SV5750 WSSV000151
NY 181167CE06BC3E70 SV SV5750 WSSV000188
NY 1814406B04C43F02 SV SV5750 WSSV000195
NY 181B4E390C4001C4 SV SV5750 WSSV000196
NY 182530FA1755B2EA SV SV5750 WSSV000199
NY 17E4290D0DADB980 SV SV5760 WSSV000116
NY 17F3B7A501DF68D8 SV SV5760 WSSV000121
NY 17F92DB60B5312EC SV SV5760 WSSV000146
NY 17FB6BCB0B7CE67D SV SV5760 WSSV000148
NY 1806E42800414898 SV SV5760 WSSV000151
NY 181167D119F6601E SV SV5760 WSSV000188
NY 1814406C0D30AECA SV SV5760 WSSV000195
NY 181B4E391F13EE7F SV SV5760 WSSV000196
NY 182530FB129E26BC SV SV5760 WSSV000199
NY 18090D010DA5D0D1 SV SV5760 WSSV000207
NY 1821910E1F6FA041 SV SV5760 WSSV000240
NY 17F3B7AA01DFB8BF SV SV5770 WSSV000121
NY 17F92DB91980B134 SV SV5770 WSSV000146
NY 17FB6BCC0672FABD SV SV5770 WSSV000148
NY 1806E4241E15FA09 SV SV5770 WSSV000151
NY 181167D5028F29A4 SV SV5770 WSSV000188
NY 1814406D0EE779F3 SV SV5770 WSSV000195
NY 181B4E3A1892B51A SV SV5770 WSSV000196
NY 182530FC09665515 SV SV5770 WSSV000199
NY 17E1C2411C8D3D49 SV SV5780 WSSV000116
NY 17F3AF780DFDE389 SV SV5780 WSSV000121
NY 17F6ADE81DBCC16A SV SV5780 WSSV000146
NY 17FF2D25024C519B SV SV5780 WSSV000148
NY 1806E42702F137B4 SV SV5780 WSSV000151
NY 180C621E0277D9C2 SV SV5780 WSSV000188
NY 17E1C2411C77D807 SV SV5790 WSSV000116
NY 17F3AF7901670AC2 SV SV5790 WSSV000121
NY 17F6847B1DD35054 SV SV5790 WSSV000146
NY 17FC34FD149C3875 SV SV5790 WSSV000148
NY 1806E4290CD5B0EC SV SV5790 WSSV000151
NY 1811E3D903AEE322 SV SV5790 WSSV000188
NY 181B4E3F1AA100B1 SV SV5790 WSSV000196
NY 1810BE880B14CF7A SV SV5790 WSSV000222
NY 17E1C24504D84A02 SV SV5910 WSSV000116
NY 17E17DEA0BA804BB SV SV5940 WSSV000116
NY 17F3AF830D90FC6E SV SV5940 WSSV000121
NY 17F8B7CE126F4468 SV SV5940 WSSV000146
NY 17FC29FA128E97E4 SV SV5940 WSSV000148
NY 18040A411B62DF86 SV SV5940 WSSV000151
NY 1812F22F14165F0C SV SV5940 WSSV000195
NY 181A0C4D08D4876B SV SV5940 WSSV000196
NY 18090CD11D32C6BA SV SV5940 WSSV000207
NY 17ECA36C1D86DFB8 SV SV7520 WSSV000121
NY 17FB6BDC1DC80D4F SV SV7520 WSSV000148
NY 1802CC1313D81A5F SV SV7520 WSSV000151
NY 15A4D014033630CA SV SV7570 19960711171327S101702A055415ASV7570
NN 153034C91B6B1020 SV SV7710 19940630181346S101702A035352ASV7710
NN 153263440CE3374A SV SV7710 19940714152500S101702A035714ASV7710
NY 17E19D851E5058C9 SV SV7770 WSSV000116
NY 1612D2F21FD314F6 SV SV7810 19980611190040S101702A073120ASV7810
NY 17D233B301FEDFA1 SV SV7820 WSSV000087
NY 17E17DEC140DE9B5 SV SV7820 WSSV000116
NY 17E3D0B01ADC51CC SV SV8150 WSSV000116
NY 17E17E3708CB0CCE SV SV8300 WSSV000116
NY 17F3AFA110778205 SV SV8300 WSSV000121
NY 17F3AFA31375B006 SV SV8410 WSSV000121
NY 17F819DC1F901138 SV SV8410 WSSV000148
NN 18018A0306D17B38 SV SV8410 WSSV000151
NY 17E17DB402056D28 SV SV8620 WSSV000116
NY 17E17DFF0AC41EBF SV SV8630 WSSV000116
NY 17ED8FA7091BCAB9 SV SV8630 WSSV000121
NY 17E3CF5218ED5984 SV YSVAUHI WSSV000116578CB6A6
NY 1775A4131007686E SV YSVBUID A06M02547153F08CAD
NN 153A17A3176DAD4C SV YSVRAD 19940901155609S101702A036983AYSVRAD
NN 1542E2530EDC3580 SV YSVRAD 19941027143121S101702A038681AYSVRAD
NN 1550178603C5A4EA SV YSVRAD 19950119153007S101702A041393AYSVRAD
NN 1556AF2C161A78D0 SV YSVRAD 19950302141336S101702A042588AYSVRAD
NN 1568502B11EF97E4 SV YSVRAD 19950622S101702M000590AYSVRAD
NN 17F4A532019FE2B1 SV YSVTXOG WSSV0001215819E262
NY 1822BA3117EB2901 SV YSVVORM WSSV000199
AY 182855F0108A139D SV YSVVORM WSSV000200
NY 158C978701D73A76 SX SX0540 19960208S101702A051698ASX0540
NY 15A7F1480C2D1BBA SX SX0540 19960731150721S101702A056219ASX0540
NY 15AB652403FA9474 SX SX0540 19960822142339S101702A056633ASX0540
NN 1576890E1AA75A58 SX SX0640 19950921S101702Z209168ASX0640
NN 1577B0691453E4CE SX SX0640 19950928S101702A047968ASX0640
NN 157E4B0B0B66A3B2 SX SX0640 19951109S101702A049277ASX0640
NY 152CE28503BF3CD0 SX SX0650 19940609145031S101702A034927ASX0650
NY 152F1916029864C2 SX SX0650 19940623170137S101702A035250ASX0650
NN 156B957D08AFB4A2 SX SX0720 19950713134744S101702A046025ASX0720
NN 1573504D15CD741E SX SX0720 19950831S101702A047303ASX0720
NN 15807BB5074440D6 SX SX0720 19951123S101702A049707ASX0720
NY 15F519220403220E SX SX0750 19971204133317S101702M000869ASX0750
NY 15FBBB0C0C1D49CA SX SX0750 19980115181956S101702M000856ASX0750
NY 16002321034245F2 SX SX0750 19980212191931S101702M000891ASX0750
NY 157B250E054049B4 SX SX0780 19951020S101702A048835ASX0780
NY 157B208909229470 SX SX0780 19951020S101702Z213845ASX0780
NY 157B23801ADFE750 SX SX0780 19951020S101702Z213858ASX0780
NN 1559F9FC023B0974 SX YS81103 19950323125510S101702A043101AYS81103
NN 155B13C3029604BC SX YS81103 19950330S101702A043182AYS81103
NN 155F7BCF08C04508 SX YS81103 19950427S101702A044020AYS81103
NN 156B95A21C72B020 SX YS81103 19950713S101702A046089AYS81103
NN 156CAF7B1C51A4EE SX YS81103 19950720S101702A046278AYS81103
NN 1559FA051C04561A SX YS81104 19950323125515S101702A043101AYS81104
NN 155B13C206A3808C SX YS81104 19950330S101702A043182AYS81104
NN 155F7BD1182C9E58 SX YS81104 19950427S101702A044020AYS81104
NN 156B959E02911352 SX YS81104 19950713S101702A046089AYS81104
NN 156CAF7C0809A71C SX YS81104 19950720S101702A046278AYS81104
NY 144AFF6807253174 SX YSX0610
NN 158ECB781FE977E4 SX YSX5104 19960222144929S101702A052254AYSX5104
NN 159F4BC61D6676D4 SX YSX5104 19960606144321S101702A054730AYSX5104
NN 15A066361E18A61C SX YSX5104 19960613151300S101702A054928AYSX5104
NN 15A1532219B70EDA SX YSX5104 19960619123317S101702Z253706AYSX5104
NN 15A17B9A197A4218 SX YSX5104 19960620124151S101702Z253982AYSX5104
NN 15A180711D0A6E50 SX YSX5104 19960620153501S101702Z254046AYSX5104
NN 15A246D704B855C6 SX YSX5104 19960625135551S101702A055308AYSX5104
NY 15AB64C20AAE080C SX YSX5104 19960822140944S101702A056633AYSX5104
NY 15AC309815B4B7A0 SX YSX5104 19960827154539S101702Z263428AYSX5104
NY 15AC768F132F33DE SX YSX5104 19960829092947S101702Z263848AYSX5104
NY 15AC7E4A07701C82 SX YSX5104 19960829140441S101702A056757AYSX5104
NY 15B8994F01C6D760 SX YSX5104 19961114144227S101702M000743AYSX5104
NY 15B8A1D607B6206C SX YSX5104 19961114194623S101702M000743AYSX5104
NY 15B899411D3A8EB4 SX YSX5404 19961114144229S101702M000743AYSX5404
NY 15B8A1BB1698BE4C SX YSX5404 19961114194626S101702M000743AYSX5404
NY 15B899511CC3745C SX YSX5405 19961114144230S101702M000743AYSX5405
NY 15B8A1BA1A4C00C2 SX YSX5405 19961114194627S101702M000743AYSX5405
NY 15C2797C0F613AAA SX YSX5405 19970116105139S101702Z291042AYSX5405
NY 15C5CB83084303D6 SX YSX5405 19970206135317S101702A061338AYSX5405
NY 15DCE48914CAB098 SX YSX5405 19970703131040S101702M000806AYSX5405
NY 15E3807F00DFDFCA SX YSX5405 19970814142703S101702M000819AYSX5405
NY 15E3833D0166A0D6 SX YSX5405 19970814160458S101702M000819AYSX5405
NY 15EB318C1EFF025E SX YSX5405 19971002130333S101702A067187AYSX5405
NY 16059BD91EA9B992 SX YSX5405 19980319145256S101702M000893AYSX5405
NY 1605B75607CF32AE SX YSX5405 19980320071931S101702Z365731AYSX5405
NY 1605B96308EF0FF4 SX YSX5405 19980320083218S101702A071206AYSX5405
NY 1607E9E7097E9794 SX YSX5405 19980403085402S101702Z368118AYSX5405
NY 1607EC4115D59740 SX YSX5405 19980403101803S101702A071482AYSX5405
NN 157AFC7708CFD6B4 SX YSX6403 19951019S101702M000626AYSX6403
NN 157B20D1199DB0E2 SX YSX6403 19951020S101702A048832AYSX6403
NN 157B1F2410A89EA8 SX YSX6403 19951020S101702Z213819AYSX6403
NN 157BC3690F55BAFC SX YSX6403 19951024S101702A048896AYSX6403
NN 157BBE70143F64F8 SX YSX6403 19951024S101702Z214302AYSX6403
NN 157CB74A1030AE02 SX YSX6403 19951030S101702A049033AYSX6403
NN 157D0C0C1A21D3BA SX YSX6403 19951101S101702A049170AYSX6403
NN 157D03E3160D9904 SX YSX6403 19951101S101702Z215711AYSX6403
NN 157D31940B53A2C8 SX YSX6403 19951102S101702A049191AYSX6403
NN 157D29E41E11E576 SX YSX6403 19951102S101702Z215828AYSX6403
NN 157E4A9712D9EB42 SX YSX6403 19951109S101702A049277AYSX6403
NN 157F65A80781BA74 SX YSX6403 19951116S101702M000633AYSX6403
NN 157F58720B66C634 SX YSX6403 19951116S101702Z219256AYSX6403
NN 157F59ED09CBA0F0 SX YSX6403 19951116S101702Z219263AYSX6403
NN 157F81BD1D9955DA SX YSX6403 19951117S101702Z219421AYSX6403
NN 157F88D5041FA3EE SX YSX6403 19951117S101702Z219514AYSX6403
NN 1580023610C8A708 SX YSX6403 19951120S101702Z219821AYSX6403
NN 15800A850EB814C0 SX YSX6403 19951120S101702Z219988AYSX6403
NN 15802BBA1464E042 SX YSX6403 19951121S101702Z220128AYSX6403
NN 15802D0603851400 SX YSX6403 19951121S101702Z220149AYSX6403
NN 158058760AE29C44 SX YSX6403 19951122S101702Z220528AYSX6403
NN 1582B14E0F1B23C4 SX YSX6403 19951207S101702M000644AYSX6403
NN 157AFF1C0CF513D6 SX YSX6404 19951019S101702M000626AYSX6404
NN 157D0C11182DADC2 SX YSX6404 19951101S101702A049170AYSX6404
NN 157D03DF1F1A0496 SX YSX6404 19951101S101702Z215711AYSX6404
NN 157D07891E7C70AE SX YSX6404 19951101S101702Z215750AYSX6404
NN 157E4AA413780998 SX YSX6404 19951109S101702A049277AYSX6404
NN 157F65A8168E9526 SX YSX6404 19951116S101702M000633AYSX6404
NN 158002370412E632 SX YSX6404 19951120S101702Z219821AYSX6404
NN 15802BBB0A9123EC SX YSX6404 19951121S101702Z220128AYSX6404
NN 15802D0618D53640 SX YSX6404 19951121S101702Z220149AYSX6404
NN 15804EF51A17A5F8 SX YSX6404 19951122S101702Z220381AYSX6404
NN 15818C5D02C27A40 SX YSX6404 19951130S101702Z222054AYSX6404
NN 1582B14A1C2269D0 SX YSX6404 19951207S101702M000644AYSX6404
NN 1583C9A506A92A02 SX YSX6404 19951214S101702M000650AYSX6404
NN 1583BE0C093D4690 SX YSX6404 19951214S101702Z224743AYSX6404
NN 1583C0271FEAC558 SX YSX6404 19951214S101702Z224751AYSX6404
NN 15846BBD1769B366 SX YSX6404 19951218S101702A050580AYSX6404
NN 1584BD4D08B57CF4 SX YSX6404 19951220S101702A050692AYSX6404
NN 1585CFD31461A328 SX YSX6404 19951227S101702A050763AYSX6404
NN 1588320F1E183AC8 SX YSX6404 19960111S101702M000654AYSX6404
NN 15891BF50D979ACA SX YSX6404 19960117S101702A051254AYSX6404
NN 158A84A60AB4B4B6 SX YSX6404 19960126S101702Z231538AYSX6404
NN 158B2F3D11C0FAB2 SX YSX6404 19960130S101702A051549AYSX6404
NN 158C97201096367E SX YSX6404 19960208S101702M000665AYSX6404
NN 158ECB9313CF239C SX YSX6404 19960222144924S101702A052254AYSX6404
NN 15944B7A1A07251A SX YSX6404 19960328144309S101702A053092AYSX6404
NN 15944D6B1584B088 SX YSX6404 19960328155251S101702A053092AYSX6404
NN 15944F2F08A7C05E SX YSX6404 19960328165756S101702A053092AYSX6404
NN 159BD8DE05759546 SX YSX6404 19960515160308S101702M000686AYSX6404
NN 159C467009F49F42 SX YSX6404 19960518092523S101702Z248849AYSX6404
NN 159C9E34195E47D8 SX YSX6404 19960520134651S101702A054281AYSX6404
NN 15A083290AC6BDA0 SX YSX6404 19960614082939S101702Z252755AYSX6404
NN 15A08E8A1F1D8D06 SX YSX6404 19960614151554S101702A055046AYSX6404
NN 15A10799061AF3A4 SX YSX6404 19960617152901S101702A055080AYSX6404
NN 15A298551603232A SX YSX6404 19960627143103S101702A055354AYSX6404
NN 15A3B19F1CE393FC SX YSX6404 19960704142038S101702A055548AYSX6404
NN 15AB64C316974D84 SX YSX6404 19960822140947S101702A056633AYSX6404
NN 15B45BE402B36B20 SX YSX6404 19961018151537S101702A058019AYSX6404
NN 15B5214B1AE30368 SX YSX6404 19961023130053S101702A058044AYSX6404
NN 15B9DE6B0045E89E SX YSX6404 19961122163940S101702A059128AYSX6404
NN 15B9F482175AAC6C SX YSX6404 19961123055028S101702Z279032AYSX6404
NN 15BA553F1F5DAB1C SX YSX6404 19961125153301S101702A059164AYSX6404
NN 15BBE7A415C22376 SX YSX6404 19961205153416S101702M000752AYSX6404
NN 15B9B1C203FA3896 SX YSX6405 19961121140041S101702M000745AYSX6405
NN 15BBE7A415E64564 SX YSX6405 19961205153417S101702M000752AYSX6405
NN 15BE18A215AA3788 SX YSX6405 19961219141040S101702A060107AYSX6405
NN 15C5CCB61D938398 SX YSX6405 19970206143330S101702A061469AYSX6405
NN 15CE9995012D3F92 SX YSX6405 19970403143003S101702M000784AYSX6405
NN 15D4E4FE15F52D8F SX YSX6405 19970513154526S101702A063879AYSX6405
NN 15D5019C06986FF0 SX YSX6405 19970514084910S101702Z311200AYSX6405
NN 15D50F33086105C8 SX YSX6405 19970514165526S101702A063968AYSX6405
NN 15D87F95167A750D SX YSX6405 19970605140226S101702M000795AYSX6405
NN 15D8A1011773DB8E SX YSX6405 19970606100244S101702Z315022AYSX6405
NN 15D8A85E18EC4C49 SX YSX6405 19970606142544S101702A064475AYSX6405
NN 15DADD43129A0BC2 SX YSX6405 19970620152422S101702A064844AYSX6405
NN 15DD8731077D9162 SX YSX6405 19970707141044S101702A065151AYSX6405
NN 15DEA11B0E5EA8E6 SX YSX6405 19970714142047S101702A065304AYSX6405
NN 15DECB861D7026A2 SX YSX6405 19970715153931S101702A065354AYSX6405
NN 15E265C404691D6E SX YSX6405 19970807134752S101702A065801AYSX6405
NN 15E3807C16D54EDC SX YSX6405 19970814142658S101702M000819AYSX6405
NN 15E3833802FE9D42 SX YSX6405 19970814160448S101702M000819AYSX6405
NN 15E4192917134A7E SX YSX6405 19970818093107S101702Z327680AYSX6405
NN 15E4245417AC08DC SX YSX6405 19970818161023S101702A066102AYSX6405
NN 15E4998B095FD442 SX YSX6405 19970821140531S101702A066252AYSX6405
NN 15E8FD85098F021E SX YSX6405 19970918123555S101702A066829AYSX6405
NN 15F2BEAC0AF8B302 SX YSX6405 19971119141110S101702A068442AYSX6405
NN 15F5190407D60B38 SX YSX6405 19971204132949S101702M000869AYSX6405
NN 15F5E0FE10436E76 SX YSX6405 19971209124733S101702A068954AYSX6405
NN 15F74CA907BCDAF6 SX YSX6405 19971218134256S101702A069206AYSX6405
NN 15F7DFEE1A1140AC SX YSX6405 19971222053543S101702Z352011AYSX6405
NN 15FBBA1406F2D048 SX YSX6405 19980115174324S101702M000856AYSX6405
NN 15FC57E4039F0174 SX YSX6405 19980119155852S101702A069899AYSX6405
NN 15FCF2710534B0EC SX YSX6405 19980123121054S101702Z356881AYSX6405
NN 15FCF5FE10F98F9A SX YSX6405 19980123141704S101702Z356907AYSX6405
NN 15FCF6F30AE89D86 SX YSX6405 19980123145045S101702A070007AYSX6405
NN 1607CBC9140627E5 SX YSX6405 19980402145252S101702M000899AYSX6405
NN 1607D0201082AF96 SX YSX6405 19980402172908S101702M000899AYSX6405
NN 16086D0C1B5F62EC SX YSX6405 19980406150643S101702A071524AYSX6405
NN 160A06340B7E4886 SX YSX6405 19980416190913S101702M000898AYSX6405
NN 160F559E06839613 SX YSX6405 19980520140320S101702M000912AYSX6405
NN 16101F63161E1B38 SX YSX6405 19980525142836S101702A072728AYSX6405
NN 1610BDC10F807C44 SX YSX6405 19980529125649S101702A072818AYSX6405
NN 1612CA291720EF30 SX YSX6405 19980611134538S101702M000921AYSX6405
NN 15828D8216BBB3A4 SX YSX64P4 19951206S101702Z223382AYSX64P4
NN 1582B14F01A78782 SX YSX64P4 19951207S101702M000644AYSX64P4
NN 1583C9A6100874A6 SX YSX64P4 19951214S101702M000650AYSX64P4
NN 1583BD9D16A0F21C SX YSX64P4 19951214S101702Z224741AYSX64P4
NN 1583BE0C09139D80 SX YSX64P4 19951214S101702Z224743AYSX64P4
NN 1583C02706FE22B6 SX YSX64P4 19951214S101702Z224751AYSX64P4
NN 15846BBD1556B166 SX YSX64P4 19951218S101702A050580AYSX64P4
NN 158463DB15862DD0 SX YSX64P4 19951218S101702Z225267AYSX64P4
NN 158467551C0FD244 SX YSX64P4 19951218S101702Z225344AYSX64P4
NN 1584BD4C1C2D8EEC SX YSX64P4 19951220S101702A050692AYSX64P4
NN 1584B5770E46642E SX YSX64P4 19951220S101702Z225865AYSX64P4
NN 1584B6A0156A2C1A SX YSX64P4 19951220S101702Z225899AYSX64P4
NN 15850C8C0B21FA0C SX YSX64P4 19951222S101702A050719AYSX64P4
NN 1585CFD402C4C770 SX YSX64P4 19951227S101702A050763AYSX64P4
NN 1588320F1DF06CB8 SX YSX64P4 19960111S101702M000654AYSX64P4
NN 1588FC800301D63A SX YSX64P4 19960116S101702A051197AYSX64P4
NN 15891C0017B4FAD0 SX YSX64P4 19960117S101702A051254AYSX64P4
NN 158A84A3193E58A6 SX YSX64P4 19960126S101702Z231538AYSX64P4
NN 158B2F5103FDFF42 SX YSX64P4 19960130S101702A051549AYSX64P4
NN 158B80C906B86A8A SX YSX64P4 19960201S101702A051648AYSX64P4
NN 15921708001661CC SX YSX64P4 19960314140358S101702A052714AYSX64P4
NN 15935B8F15814884 SX YSX64P4 19960322153819S101702A053005AYSX64P4
NN 159C9E3419608CA2 SX YSX64P4 19960520134654S101702A054281AYSX64P4
NN 15A066380B70AC30 SX YSX64P4 19960613151302S101702A054928AYSX64P4
NN 15A08E8700D576FC SX YSX64P4 19960614151553S101702A055046AYSX64P4
NN 15A1079611E06138 SX YSX64P4 19960617152900S101702A055080AYSX64P4
NN 15A1A9DE1CC3EBF8 SX YSX64P4 19960621161730S101702A055254AYSX64P4
NN 15AB64CB14D053D8 SX YSX64P4 19960822140946S101702A056633AYSX64P4
NN 15AC5CCE07714BAC SX YSX64P4 19960828180725S101702A056782AYSX64P4
NN 15ACA5E11E084310 SX YSX64P4 19960830134305S101702Z264075AYSX64P4
NN 15AD1A691F23EDCE SX YSX64P4 19960902111358S101702Z264248AYSX64P4
NN 15AD46930343C32A SX YSX64P4 19960903133413S101702A056855AYSX64P4
NN 15B9B1BF115CC4AE SX YSX64P4 19961121140040S101702M000745AYSX64P4
NN 15B9DE6A1FCCEF3C SX YSX64P4 19961122163939S101702A059128AYSX64P4
NN 15B9F4821A80B90E SX YSX64P4 19961123055027S101702Z279032AYSX64P4
NN 15BA553F1F73E0A6 SX YSX64P4 19961125153300S101702A059164AYSX64P4
NN 15BBE7A416395902 SX YSX64P4 19961205153414S101702M000752AYSX64P4
NN 15BCFEBF102435FA SX YSX64P5 19961212135753S101702A059837AYSX64P5
NN 15C164BE1F570A0E SX YSX64P5 19970109134552S101702A060555AYSX64P5
NN 15C5CCB615F03636 SX YSX64P5 19970206143327S101702A061469AYSX64P5
NN 15CE99950783A102 SX YSX64P5 19970403142956S101702M000784AYSX64P5
NN 15D3EFA6076D084E SX YSX64P5 19970507132447S101702M000792AYSX64P5
NN 15D4E4FE15F85147 SX YSX64P5 19970513154524S101702A063879AYSX64P5
NN 15D5019C186E9827 SX YSX64P5 19970514084909S101702Z311200AYSX64P5
NN 15D50F33140545A8 SX YSX64P5 19970514165525S101702A063968AYSX64P5
NN 15D87F8508B02DF0 SX YSX64P5 19970605140224S101702M000795AYSX64P5
NN 15D8A85E18DC5CD6 SX YSX64P5 19970606142544S101702A064475AYSX64P5
NN 15DD87310312FBA2 SX YSX64P5 19970707141043S101702A065151AYSX64P5
NN 15DEA11B09FC6474 SX YSX64P5 19970714142046S101702A065304AYSX64P5
NN 15DECB861CCC0B66 SX YSX64P5 19970715153931S101702A065354AYSX64P5
NN 15E3807D14063AC8 SX YSX64P5 19970814142657S101702M000819AYSX64P5
NN 15E383420FBCD42C SX YSX64P5 19970814160447S101702M000819AYSX64P5
NN 15E419281E7CDE14 SX YSX64P5 19970818093106S101702Z327680AYSX64P5
NN 15E4245B13CBEEA6 SX YSX64P5 19970818161022S101702A066102AYSX64P5
NN 15E4998B13ADC56C SX YSX64P5 19970821140530S101702A066252AYSX64P5
NN 15F0B30A00AE47BC SX YSX64P5 19971106134926S101702M000849AYSX64P5
NN 15F2BEAC0BCC8F5C SX YSX64P5 19971119141112S101702A068442AYSX64P5
NN 15F5190404B4D436 SX YSX64P5 19971204132949S101702M000869AYSX64P5
NN 15F5E0FE0FCDFA4E SX YSX64P5 19971209124733S101702A068954AYSX64P5
NN 15F74CAE0D9245D2 SX YSX64P5 19971218134258S101702A069206AYSX64P5
NN 15F76C5910C455A2 SX YSX64P5 19971219083811S101702Z351781AYSX64P5
NN 15F778990CA7AD8E SX YSX64P5 19971219155653S101702A069287AYSX64P5
NN 15F7DFF5131DAADE SX YSX64P5 19971222053615S101702Z352013AYSX64P5
NN 15FBBA1403BB5780 SX YSX64P5 19980115174323S101702M000856AYSX64P5
NN 15FC4F0216655CA6 SX YSX64P5 19980119104109S101702Z355843AYSX64P5
NN 15FC57E404A04902 SX YSX64P5 19980119155852S101702A069899AYSX64P5
NN 15FCF26E1AAECB30 SX YSX64P5 19980123121052S101702Z356881AYSX64P5
NN 15FCF5FE1112481C SX YSX64P5 19980123141704S101702Z356907AYSX64P5
NN 15FCF6F30238214C SX YSX64P5 19980123145045S101702A070007AYSX64P5
NN 1607CD4B0924421C SX YSX64P5 19980402154907S101702M000899AYSX64P5
NN 1607D01F0539B2B4 SX YSX64P5 19980402172907S101702M000899AYSX64P5
NN 16086D0F08D86394 SX YSX64P5 19980406150642S101702A071524AYSX64P5
NN 1608BA930E7491E2 SX YSX64P5 19980408132103S101702A071600AYSX64P5
NN 1608ED1411CE1954 SX YSX64P5 19980409192934S101702A071661AYSX64P5
NN 160F55931ADFD53A SX YSX64P5 19980520140318S101702M000912AYSX64P5
NN 161730A703D51E82 SX YSX64P5 19980709134005S101702M000924AYSX64P5
NN 1571157313C573BC SX YSX8103 19950817S101702A046517AYSX8103
NN 157C16B512FB44AC SX YSX8103 19951026S101702A048958AYSX8103
NN 157D318A04933C62 SX YSX8103 19951102S101702A049172AYSX8103
NN 15850C870AE46676 SX YSX8103 19951222S101702A050719AYSX8103
NN 159F4BC61A1C9468 SX YSX8103 19960606144323S101702A054730AYSX8103
NN 1571156F01CA52CC SX YSX8104 19950817S101702A046517AYSX8104
NN 157C16B515E96EE8 SX YSX8104 19951026S101702A048958AYSX8104
NN 157D318A079D888A SX YSX8104 19951102S101702A049172AYSX8104
NN 15850C870CA55F0A SX YSX8104 19951222S101702A050719AYSX8104
NN 159ADB51182B2246 SX YSX8104 19960509084907S101702Z247322AYSX8104
NN 159AE3411EAFD254 SX YSX8104 19960509133253S101702A054073AYSX8104
NN 159F4BC805482D5E SX YSX8104 19960606144310S101702A054730AYSX8104
NY 15B899511092045A SX YSX8104 19961114144235S101702M000743AYSX8104
NY 15B8A1DB0C4C4948 SX YSX8104 19961114194632S101702M000743AYSX8104
NY 15C16462059C0658 SX YSX8104 19970109133303S101702A060530AYSX8104
NY 15B8995908276F1E SX YSX8105 19961114144236S101702M000743AYSX8105
NY 15B8A1DB10081264 SX YSX8105 19961114194633S101702M000743AYSX8105
NY 15B9342308D950C4 SX YSX8105 19961118110550S101702A058913AYSX8105
NY 15C164621C0207DC SX YSX8105 19970109133314S101702A060530AYSX8105
NY 15C5CB7B15990C06 SX YSX8105 19970206135318S101702A061338AYSX8105
NY 15D998871BDD73AE SX YSX8105 19970612134213S101702A064573AYSX8105
NY 15F2E61814A9D118 SX YSX8105 19971120134349S101702A068352AYSX8105
NY 15F3D212042DE0CE SX YSX8105 19971126102958S101702A068604AYSX8105
NY 15F4278E0045FDC2 SX YSX8105 19971128132836S101702A068681AYSX8105
NY 16059BE41FCFB732 SX YSX8105 19980319145430S101702M000893AYSX8105
NY 1605BE4213F65E18 SX YSX8105 19980320112646S101702A071216AYSX8105
NY 1607CADC1BFAD3DF SX YSX8105 19980402142035S101702A071385AYSX8105
NY 160F558C195E0C9C SX YSX8105 19980520140317S101702M000912AYSX8105
NY 16173094077053DC SX YSX8105 19980709134006S101702M000924AYSX8105
NY 15F0B30511E18942 SX YSX81S1 19971106134925S101702M000849AYSX81S1
NY 16059BE401AB11B4 SX YSX81S1 19980319145410S101702M000893AYSX81S1
NY 1607CAD009B76706 SX YSX81S1 19980402142033S101702A071385AYSX81S1
NY 1612CA24135515A7 SX YSX81S1 19980611134539S101702M000921AYSX81S1
NY 1517FC3D0D29C796 SX YSXFEHL
NY 151EA73716E4C2FA SX YSXFEHL 19940311013633S101702M000389A
NY 1557C87A0851C2E6 SX YSXFLOG 19950309140310S101702A042692AYSXFLOG
NY 155B13C201B67B58 SX YSXFLOG 19950330S101702A043182AYSXFLOG
NY 155C2F6F00389B96 SX YSXFLOG 19950406S101702A043381AYSXFLOG
NY 156B959E0B0861BC SX YSXFLOG 19950713S101702A046089AYSXFLOG
NY 15894B4511707A8C SX YSXFLOG 19960118S101702A051283AYSXFLOG
NY 15A0662B067DB9D6 SX YSXFLOG 19960613151257S101702A054928AYSXFLOG
NY 16059BD2029AA8A8 SX YSXFLOG 19980319145352S101702M000893AYSXFLOG
NY 151EA73813545804 SX YSXRELK 19940311013634S101702M000389A
NY 151F2CC31F733642 SX YSXRELK E
NN 1614FC2F024D406E SX YSXT231 19980625130147S101702A073376AYSXT231
NN 158DB2310749718C SX YSXT812 19960215150345S101702A052062AYSXT812
NN 158ECB311EBC7A4A SX YSXT812 19960222144042S101702A052211AYSXT812
NY 1454498000D217B0 SY SY9230
NY 15CE92BA0FD60A9C SY SY9230 A
NN 160A103D1AC874EB TE YTEF021 19980417011040S101702A071217AYTEF021
NN 160E6A7D1FE73396 TE YTEF021 19980514175259S101702A072358AYTEF021
NN 160A104003ADE3F2 TE YTEF022 19980417011041S101702A071217AYTEF022
NN 160E6A880A455602 TE YTEF022 19980514175300S101702A072358AYTEF022
NY 15F51EB417EC7912 TEST YYFIKUR 19971204165432S101702A068818AYYFIKUR
NN 15BCCEEE141E4052 TK TK0100 19961211093410S101702Z282987ATK0100
NN 15BDAFF31DF38818 TK TK0100 19961216234803S101702Z284134ATK0100
NN 15BDCD1806CE6402 TK TK0100 19961217171109S101702A060053ATK0100
NN 160D4EC11A3FB73A TK TK0110 19980507163244S101702A072127ATK0110
NN 15CC649D0539BB5C TK TK0120 19970320132922S101702A062552ATK0120
NN 160D4EA718821A60 TK TK0120 19980507163249S101702A072127ATK0120
NN 160D4EB7125C33C8 TK TK0130 19980507163251S101702A072127ATK0130
NN 15E5B14804A94F86 TK TK0150 19970828125856S101702A066346ATK0150
NN 15BE189502002E6C TK TK0160 19961219141039S101702A060093ATK0160
NN 15CC649C0CB18912 TK TK0160 19970320132918S101702A062552ATK0160
NN 160D4EC2023A6CD0 TK TK0160 19980507163219S101702A072127ATK0160
NN 1613E41B17AA1A32 TK TK0180 19980618135727S101702A073194ATK0180
NN 161731280ADF24EE TK TK0180 19980709140354S101702A073643ATK0180
NY 17E657201170B0BB TN TN0530 OTXO000054
NY 17F21DCA15518BEA TN TN0530 OTXO000058
NY 17FEAFB209BF994A TN TN0530 OTXO000063
NY 18104EE814900FEA TN TN0530 OTXO000066
NY 181C3B180B30476D TN TN0530 OTXO000070
NY 1819E9931AB47AFA TN TN0530 WS8B000468
NY 17C966571F2A4911 TN TN5003 OTXO000036
NY 17E657980847E6A6 TN TN5003 OTXO000054
NY 17E657991D6451CB TN TN5004 OTXO000054
NY 18063C231C9B1DE5 TN TN5004 OTXO000060
NY 181B48F112AAF5D8 TN TN5004 OTXO000070
NY 182E8111012CCA11 TN TN5004 OTXO000081
NY 1819E9CB0368BBAC TN TN5004 WS8B000468
NY 17E6570B0DF9D509 TN TN5010 OTXO000054
NY 17D4BDE2007918FE TN TN5014 OTXO000045
NY 181B48F008A06B67 TN TN5014 OTXO000070
NY 17C9665C0387A55B TN TN5015 OTXO000036
NY 181B48F2011210A5 TN TN5015 OTXO000070
NY 1819E9D9176CB4D2 TN TN5015 WS8B000468
NY 17E6570B0AABFCCE TN TN5016 OTXO000054
NY 17F21DDA14D71797 TN TN5016 OTXO000058
NY 18063C1808A5D534 TN TN5016 OTXO000060
NY 18104EFE0554BB5E TN TN5016 OTXO000066
NY 181B49080DA8EC2A TN TN5016 OTXO000070
NY 182E810A01038C2E TN TN5016 OTXO000081
NY 17E6570C0D791019 TN TN5030 OTXO000054
NY 181B490A1AC57E74 TN TN5030 OTXO000070
NY 1812F65D1E15FCEA TN TN5030 OTXO000074
NY 183AC00E05023C61 TN TN7004 CSQS000007
NY 17E6570D175F4BCC TN TN7004 OTXO000054
NY 17F21DD813107A44 TN TN7004 OTXO000058
NY 18063C0D100AB6A4 TN TN7004 OTXO000060
NY 17FEAFAC1709C607 TN TN7004 OTXO000063
NY 18104FB20C777F7F TN TN7004 OTXO000066
NY 181B490F003C0912 TN TN7004 OTXO000070
NY 182E810C16E481CB TN TN7004 OTXO000081
NY 182149BF1F625D6A TN TN7004 OTXO000082
NY 1830D2BA1F74EDCE TN TN7004 OTXO000094
NY 17C966571F3246DF TN TN7020 OTXO000036
NY 17F21DD70A3EBF11 TN TN7020 OTXO000058
NY 17D4BDE718D0778D TN TN7065 OTXO000045
NY 17E657110255E3A3 TN TN7066 OTXO000054
NY 17D4BDE4073F9F55 TN TN7067 OTXO000045
NY 17D4BDE5021BA429 TN TN7068 OTXO000045
NY 17E657A219156486 TN TN7080 OTXO000054
NY 18063C5E10898939 TN TN7080 OTXO000060
NY 1811132F09383B22 TN TN7080 OTXO000066
NY 181B490C0EA4AA91 TN TN7080 OTXO000070
NY 181116FF0E0F1749 TN TN7080 OTXO000072
NY 18148F89125891BE TN TN7080 OTXO000075
NY 1814DA68156F3251 TN TN7080 OTXO000076
NY 18175BBA0E8A3345 TN TN7080 OTXO000078
NY 182534FC0B8DF7BB TN TN7080 OTXO000085
NY 17D4BDD2163E5B45 TN TN8900 OTXO000045
NY 18104EF71FB8201D TN TN8900 OTXO000066
NY 17C96658071D404A TN TN8910 OTXO000036
NY 17E657AC1B0AB8DC TN TN8920 OTXO000054
NY 181B49100387BF76 TN TN8920 OTXO000070
NY 182E814602B0B1A4 TN TN8920 OTXO000081
NY 17E1E94F01B663D1 TN YTN0021 OTXO000054577CC9AE
NY 17F21C560E49E035 TN YTN0021 OTXO0000585804AD7B
NY 180B663101E0FC48 TN YTN0021 OTXO00006658D8D017
NY 181C3AB30E618BED TN YTN0021 OTXO0000705965FE66
NY 17E199940CAD9611 TN YTN0041 OTXO000054577A2CD6
NY 181C3AC1107EEC1B TN YTN0041 OTXO0000705965FE73
NY 17E1E9491B322516 TN YTN0100 OTXO000054577CC97A
NY 17EDB6FC0129B3ED TN YTN0100 OTXO00005857DFCD28
NY 18081F800CFE1F11 TN YTN0100 OTXO00006058BD4694
NY 180B3E2712F573A3 TN YTN0100 OTXO00006658D78025
NN 181CE3791B4E6F70 TN YTN0100 OTXO000070596B8607MVS
NY 182809F90649941C TN YTN0100 OTXO00008159C90F4FMVS
NY 181DF4941CBDBE2D TN YTN0101 OTXO00007059747939
NY 182A62711B731854 TN YTN0101 OTXO00008159DCBCA0
NY 17E6558D07C16DC5 TN YTN0160 OTXO00005457A1E399
NY 181C3AC902656B36 TN YTN0160 OTXO0000705965FE8DMVS
NY 17E6558E13DBA9B8 TN YTN0170 OTXO00005457A1E39F
NY 181C3ACC04F24690 TN YTN0170 OTXO0000705965FE9DMVS
NY 17E6558E1BD85139 TN YTN0180 OTXO00005457A1E3A8
NY 181C3AD3128B4815 TN YTN0180 OTXO0000705965FEAFMVS
NY 17E655900C824645 TN YTN0190 OTXO00005457A1E3AF
NY 181C3AD716131BAA TN YTN0190 OTXO0000705965FEBFMVS
NY 17E1E9500486A1F4 TN YTN0200 OTXO000054577CC9B6
NY 181DF495160F6BB6 TN YTN0201 OTXO0000705974793F
NY 18282B261F97BBD8 TN YTN0201 OTXO00008159CA241A
NY 182E573913D07116 TN YTN0202 OTXO00008159FDDDF0MVS
NY 182FBB770EAF3D5E TN YTN0202 OTXO0000925A098A8AMVS
NY 17D492130747E397 TN YTN0210 OTXO000045570CE08E
NY 181DF4B4023686AD TN YTN0210 OTXO00007059747A48
NY 17DF45C41789AAD2 TN YTN5012 OTXO0000545766A6D3
NY 17EDB6EC0CF41C4E TN YTN5012 OTXO00005857DFCCA4
NY 18191C8603A06FC5 TN YTN5012 OTXO000070594BD57CMVS
NY 1827D9ED1B7A2247 TN YTN5012 OTXO00008159C777B6MVS
NY 17E6559A1CCAD2A9 TN YTN5013 OTXO00005457A1E413
NY 17F21C5711AA25C0 TN YTN5013 OTXO0000585804AD84
NY 18191C90082C554C TN YTN5013 OTXO000070594BD582MVS
NY 17DF45A31978F37D TN YTNBOPH OTXO0000545766A5BA
NY 17EDB6E91BA0581C TN YTNBOPH OTXO00005857DFCC97
NY 1809603A0BEFEB25 TN YTNBOPH OTXO00006658C7C906
NY 181ACC4D11C2F59C TN YTNBOPH OTXO0000705959FCD2MVS
NY 17C8CC6419D27532 TN YTNDEP OTXO00003656AA11D9
NY 17EDB6FB19E7E784 TN YTNDEP OTXO00005857DFCD1D
NY 17E6558C1322BCCF TN YTNOTF OTXO00005457A1E392
NY 17EDB6E21CDC612C TN YTNOTF OTXO00005857DFCC76
NY 180F0FD312B47284 TN YTNOTF OTXO00007158F7898E
NY 17DF45A60F2A7989 TN YTNSICH OTXO0000545766A5D8
NY 17EDB6FE0A52D974 TN YTNSICH OTXO00005857DFCD1F
NY 180618DA0815EE09 TN YTNSICH OTXO00006058AC46FF
NY 18191C6703BC1494 TN YTNSICH OTXO000070594BD52D
NY 1827D9FA15D678AA TN YTNSICH OTXO00008159C777D9
NY 17E67D330AF98717 TN YTNUPD OTXO00005457A33001
NY 17F110FD1F448DB8 TN YTNUPD OTXO00005857FBEABF
NY 17F79CF810A7E370 TN YTNUPD OTXO0000615832C7DD
NY 181E8200024419AE TN YTNUPD OTXO00007059791B5C
NN 1815CCAA138ADEAC TN YTNUPD OTXO00007359300B05
NY 1827DA091B550E18 TN YTNUPD OTXO00008159C7784F
NY 1821498D00510B13 TN YTNUPD OTXO00008259906C81
NY 182284B2057B5728 TN YTNUPD OTXO000085599AC00E
NY 1830D2AD0CF9B217 TN YTNUPD OTXO0000945A12B0F8
NY 1835776E12D92D8C TN YTNW100 CSQS0000075A39A4F1
NY 1835776F0D4B98ED TN YTNW100 CSQS0000075A39A4F1MVS
NY 17B961AE1FEAFADD TN YTNW100 OTXO0000235628CC9D
NY 17F1543407FE1E03 TN YTNW100 OTXO00005857FE1E9A
NY 17FBE2B60642ED14 TN YTNW100 OTXO00006358569ED9
NY 1819E27F0995289A TN YTNW100 OTXO00007059525387MVS
NY 182B2EE119F07759 TN YTNW100 OTXO00008159E36F73MVS
NY 1830D286004BCE73 TN YTNW100 OTXO0000945A12AF80MVS
NY 17E0A92102C7BC46 TN YTNW170 OTXO00005457724BD1
NY 17F15CB5038EB27A TN YTNW170 OTXO00005857FE65F4
NY 180B99CD097AF661 TN YTNW170 OTXO00006658DA8107
NY 18191C82198A62B3 TN YTNW170 OTXO000070594BD553MVS
NY 182A35830C65F21A TN YTNW170 OTXO00008159DB43A5MVS
NY 17E97FE90F708F1A TP TP0800 TP00000006
NY 17EF242E0A05F435 TP TP0800 TP00000011
NY 180430DD1856D211 TP TP0800 TP00000016
NY 17E08A7A1437B036 TR TR0810 AITR000024
NY 1802C7421C862CE2 TR TR0810 AITR000031
NY 17EED90D089FEAAE TR TR5310 DERI000033
NY 17EED90D1D7F3D36 TR TR5320 DERI000033
NY 17F0DF8B1DC9F296 TR TR5330 DERI000033
NY 17F0DF8E16868A73 TR TR5340 DERI000033
NY 17CBC2051C2DC687 TR TR5360 DERI000022
NY 17D6C4E7117C1866 TR TR5360 DERI000026
NY 17E6821203212ED6 TR TR5360 DERI000030
NY 17F0DF9014CD9938 TR TR5360 DERI000033
NY 17C9941413DD4975 TR TR7040 DERI000022
NY 17D3A899025701A9 TR TR7040 DERI000026
NY 17E304760AB8D3E3 TR TR7040 DERI000030
NY 17B4F8970461F9BA TR YTREDBM AITR0000155603CD16
NY 17C55303070C8A0D TR YTRHISP AITR000012568CED33
NY 180A79E40309AEE1 TR YTRHISP AITR00003558D103CA
NY 181913010BD238E1 TR YTRHISP AITR000041594B870D
NY 1830B6E915E88DAF TR YTRHISP AITR0000475A11C803MVS
NY 17C99311078E759A TR YTRT061 RRA000003156B09495
NY 17EE32100DBDABE9 TR YTRT061 RRA000004357E3D5C4
NN 1511668506178B7C TR YTRT931
NN 15AA4B330C36AFB4 TR YTRT931 19960815141215S101702A056402AYTRT931
NN 151166AC117672B4 TR YTRT932
NN 1525300215B6B5FC UF UF8000 19940421153508S101702A033617AUF8000
NN 1529963307EBC618 UF UF8000 19940519152240S101702A034445AUF8000
NY 1479937C01128F38 UP YUP03
NY 1479939C0F27649C UP YUP04
NY 1479939A14610D4C UP YUP06
NY 147993B815305050 UP YUP09
NY 147994F413269064 UP YUP10
NY 1479939B1FA3DE60 UP YUP11
NY 147993DF14F25E00 UP YUP12
NN 147993DD1C94A6AC UP YUP13
NY 147995320C696CE0 UP YUP22
NN 1479941C17ACA5B8 UP YUP23
NY 147994F310C5AAE8 UP YUP24
NY 1479955A16491B58 UP YUP25
NY 147994EF04A4F7C4 UP YUP29
NY 14799559148240A8 UP YUP39
NY 1479955B0532D7CC UP YUP40
NY 147994F01D3914F0 UP YUP44
NY 1482604801ADA634 UP YUP45
NY 147994F3031659C0 UP YUP46
NY 1484B7781DA22CD0 UP YUP77
NY 1809B2F11F6A0328 UU UU5170 GSER000169
NY 17E08C24031B3CE6 UU UU5170 RS20000050
NY 17F0109116506E77 UU UU5170 RS20000055
NY 180527A0006F0662 UU UU5170 RS20000066
NY 180BE16207F0CF6D UU UU5170 RS20000072
NY 181B4D5103D71475 UU UU5170 RS20000077
NY 1828882A1064CD7E UU UU5170 RS20000079
NY 183541EE0A6A5AEF UU UU5170 RS20000080
YY 17B6B00315F39DDC UU YUU1031 RS2000003356123340
YY 1834A47C0B438F4F UU YUU1031 RS200000805A32BB72
NY 17E0892B04DF4477 VD VDDBM01 DSPV000030
NY 18198D8C087DC41E VD VDDBM01 DSPV000042
NY 1824E1921E3AF7B0 VD VDDBM01 DSPV000044
NY 177E9A5B18ACFDE9 VD VDDBM04 A14S002541
NY 18134A4318AA4A30 VD VDDBM04 DSPV000042
NY 17E089240269C872 VD VDDBM15 DSPV000030
NY 17EED0B006930DF7 VD VDDBM15 DSPV000034
NY 1802C6690ADAC2E2 VD VDDBM15 DSPV000040
NY 1809B5BF07D12AC6 VD VDDBM15 DSPV000041
NY 18198D910ABAFDE1 VD VDDBM15 DSPV000042
NY 182718F7011EF702 VD VDDBM15 DSPV000044
NY 17E0892319281FB1 VD VDGLH00 DSPV000030
NY 17F17AAC12A17747 VD VDGLH00 DSPV000034
NY 1802C64E09C96318 VD VDGLH00 DSPV000040
NY 18198D941781E33C VD VDGLH00 DSPV000042
NY 18285BB91897D8D1 VD VDGLH00 DSPV000044
NY 18385D8B1D38F301 VD VDGLH00 DSPV000047
NY 183DDEC91E45FFFB VD VDGLH00 DSPV000050
NY 178CE81217F4E0EA VD VDINI01 DSPV000001
NY 18198D981F1365CF VD VDINI01 DSPV000042
NY 1824E198035338B8 VD VDINI01 DSPV000044
NY 17E0892D10D30CB5 VD VDREC00 DSPV000030
NY 18134A351DD80C62 VD VDREC00 DSPV000042
NY 17E0892A09A09817 VD VDUTI41 DSPV000030
NY 17FF2EF11F05701F VD VDUTI41 DSPV000040
NY 18198DA416543BCB VD VDUTI41 DSPV000042
NY 17DF911E07E1A390 VD YVD0721 DSPV00003057691EEA
NY 17FC5F2D1A76F396 VD YVD0721 DSPV000040585AB2F8
NY 17DF913212D6437C VD YVD0722 DSPV00003057691F8F
NY 17FC5F2E1C3D2D8C VD YVD0722 DSPV000040585AB301
NY 17D358FB1F71048E VD YVDDFA DSPV00002357029E3F
NY 1824DF5F02020ACF VD YVDDFA DSPV00004459AE7FA5
NY 1824DF6100693A94 VD YVDDFA DSPV00004459AE7FA5MVS
NY 182998FB175A9A89 VD YVDRES VDSS00010259D6229C
NY 17C9B49A131A4C55 VP VP0010 VIP0000008
NY 17E4505513488971 VP VP0030 VIP0000015
NY 17EED96D13A29111 VP VP0030 VIP0000018
NY 17E1C561053A68D4 VP VP5300 VIP0000015
NY 17E1C55A15612ADA VP VP5310 VIP0000015
NY 17EED919061DCEDE VP VP5310 VIP0000018
NY 180435C80D6714B8 VP VP5310 VIP0000022
NY 180274B80A406832 VP VP5310 VIP0000023
NY 17E1C5681055CB39 VP VP5330 VIP0000015
NY 17E1C56C1492292F VP VP5340 VIP0000015
NN 1512802709B816B8 VP VP7010
NN 155248551FB50E4A VP VP7010 19950202135945S101702A041692AVP7010
NY 1617CF331E004DB6 VP VP7400 19980713121941S101702Z382775AVP7400
NY 1607ADD71D1138A6 VP VP7410 19980401210424S101702Z367944AVP7410
NY 1607CADA05853684 VP VP7410 19980402142025S101702A071473AVP7410
NY 15D93E480C064AA9 VP VP7411 19970610075226S101702Z315459AVP7411
NY 15D9426501AF1929 VP VP7411 19970610101931S101702Z315459AVP7411
NY 15D94CBB10162BDF VP VP7411 19970610162936S101702Z315459AVP7411
NN 158B81171BDDD332 VP VP9997 19960201S101702A051690AVP9997
NN 157E4AE3037CD542 VP VP9998 19951109S101702A049426AVP9998
NN 157EECE7015F7B66 VP VP9998 19951113S101702Z218537AVP9998
NN 157F0C9702D3D7DE VP VP9998 19951114S101702Z218682AVP9998
NN 156967950CC44BFC VP VP9999 19950629S101702A045771AVP9999
NY 1599CDF01295F890 VP YVP7401 19960502160759S101702A053816AYVP7401
NY 159CEA3C0D873370 VP YVP7401 19960522110824S101702Z249496AYVP7401
NY 159D3CFB0757F72E VP YVP7401 19960524122955S101702Z249868AYVP7401
NY 15A10496004B9CC8 VP YVP7401 19960617134246S101702Z253094AYVP7401
NY 15A1318C059543A2 VP YVP7401 19960618163029S101702Z253537AYVP7401
NY 15A1A21B1763E4D0 VP YVP7401 19960621113929S101702Z254159AYVP7401
NY 15A1A74E02F15284 VP YVP7401 19960621144555S101702Z254221AYVP7401
NY 15A2984B14FEB1B4 VP YVP7401 19960627143107S101702A055358AYVP7401
NY 15BDC0ED079BF8B8 VP YVP7401 19961217095521S101702Z284200AYVP7401
NY 15BDCA381CA9429E VP YVP7401 19961217152842S101702Z284369AYVP7401
NY 15CC3EC608583F7C VP YVP7401 19970319145619S101702Z302523AYVP7401
NY 15D09D3D13A79E36 VP YVP7401 19970416100659S101702Z306532AYVP7401
NY 15D0A8331151FAD2 VP YVP7401 19970416164056S101702Z306635AYVP7401
NY 15D55D9804A2483B VP YVP7401 19970516154226S101702A064012AYVP7401
NY 1601549705449EEC VP YVP7401 19980220093422S101702Z360998AYVP7401
NY 16024C15126C415A VP YVP7401 19980226131233S101702A070664AYVP7401
NY 1599CDF20F6371B6 VP YVP7402 19960502160803S101702A053816AYVP7402
NY 159CEA3C0D6A65F8 VP YVP7402 19960522110825S101702Z249496AYVP7402
NY 159D3CFB088BBEC4 VP YVP7402 19960524122955S101702Z249868AYVP7402
NY 15A10496003409D0 VP YVP7402 19960617134247S101702Z253094AYVP7402
NY 15A1318C0A0CD842 VP YVP7402 19960618163031S101702Z253537AYVP7402
NY 15A1A21C02CDA2EC VP YVP7402 19960621113930S101702Z254159AYVP7402
NY 15A1A74E00B1B76C VP YVP7402 19960621144555S101702Z254221AYVP7402
NY 15A2984C0A211D02 VP YVP7402 19960627143109S101702A055358AYVP7402
NY 15D0A83307B256E2 VP YVP7402 19970416164056S101702Z306635AYVP7402
NY 15D55DA61697C01F VP YVP7402 19970516154445S101702A064012AYVP7402
NN 1599CDF30B1FE6EE VP YVP7403 19960502160807S101702A053816AYVP7403
NN 159CEA3C0D6E6FF8 VP YVP7403 19960522110825S101702Z249496AYVP7403
NN 159D3CFB078F564A VP YVP7403 19960524122957S101702Z249868AYVP7403
NN 15A1049609914F8E VP YVP7403 19960617134248S101702Z253094AYVP7403
NN 15A1318C0CD88C7C VP YVP7403 19960618163032S101702Z253537AYVP7403
NN 15A1A21B177412AC VP YVP7403 19960621113930S101702Z254159AYVP7403
NN 15A1A74E01673934 VP YVP7403 19960621144556S101702Z254221AYVP7403
NN 15A2985015593642 VP YVP7403 19960627143112S101702A055358AYVP7403
NY 15D0A833074CC22E VP YVP7403 19970416164057S101702Z306635AYVP7403
NY 15D55DA6142B8F3A VP YVP7403 19970516154446S101702A064012AYVP7403
NY 15D8A44E1ED3A997 VP YVP7403 19970606120106S101702Z315108AYVP7403
NY 15DAB2DF150FD718 VP YVP7403 19970619140749S101702A064792AYVP7403
NN 1514B9300974D096 VP YVPUP01
NN 151B4E370A08F98C VP YVPUP01 19940217182915S101702A031241A
NN 153F9E61006D51BE VP YVPUP01 19941006195313S101702A037982AYVPUP01
NN 157353FB027A7168 VP YVPUP01 19950831S101702A047391AYVPUP01
NN 1579956306FFFC26 VP YVPUP01 19951010S101702Z212033AYVPUP01
NN 157AFCC21A2579D8 VP YVPUP01 19951019S101702A048565AYVPUP01
NN 157F6A4D1C370E08 VP YVPUP01 19951116S101702A049627AYVPUP01
NN 158169A5024C3084 VP YVPUP01 19951129S101702Z221857AYVPUP01
NN 158197F31F69DD0A VP YVPUP01 19951130S101702A050037AYVPUP01
NN 1582B2B214C1345E VP YVPUP01 19951207S101702A050228AYVPUP01
NN 15871B4E0DF5CBD2 VP YVPUP01 19960104S101702A050753AYVPUP01
NN 158A6445045C2762 VP YVPUP01 19960125S101702A051459AYVPUP01
NN 159450A70A94D942 VP YVPUP01 19960328175023S101702A053067AYVPUP01
NN 15A3B6F90592C158 VP YVPUP01 19960704173144S101702A055520AYVPUP01
NN 15A3CF04138EC020 VP YVPUP01 19960705075226S101702A055520AYVPUP01
NN 15AD97B41F0D6020 VP YVPUP01 19960905135845S101702A056819AYVPUP01
NY 17E197BE0FF74064 VT VT0120 EBZV000009
NY 17EF1F241FB29B4B VT VT0120 EBZV000010
NY 152648AF171340AA VT VT0610 19940428145845S101702A033858AVT0610
NY 154749780BC6A590 VT VT0610 19941124145522S101702A039698AVT0610
NY 154497E90E66A334 VT VT0610 E
NY 17CBF5331866DD2B VT VT0880 VTX0000018
NY 1556B723175BD380 VT VT5040 19950302185840S101702A042571AVT5040
NY 15866F3A132A56DA VT VT5040 19951231S101702Z227061AVT5040
NY 15B317C918193170 VT VT5040 19961010135459S101702A057724AVT5040
NY 15CC69A406A0EA08 VT VT5040 19970320162702S101702M000778AVT5040
NY 17D3569706302E1A VT VT5110 EBZV000007
NN 154DE2241478A896 VT VT5120 19950105141216S101702A040864AVT5120
NN 1583C9CB11900060 VT VT5120 19951214S101702M000648AVT5120
NY 15F702E511F0579A VT VT5120 19971216174425S101702A069201AVT5120
NY 155E23AD0E233A82 VT VT5121 19950419S101702A043804AVT5121
NY 155F335706E117E2 VT VT5121 19950425S101702A043947AVT5121
NY 17E197C30A29756B VT VT5130 EBZV000009
NY 17EF1F3510490AF3 VT VT5130 EBZV000010
NY 16015A8217DF2D9A VT VT7798 19980220130604S101702A070613AVT7798
NN 15971E9A09A0A7E4 VT VT7799 19960415140717S101702A053434AVT7799
NN 15BD2F760F7FA550 VT VT7799 19961213190927S101702A059882AVT7799
NY 154A189804D12E02 VT VT8111 19941212115358S101702A040321AVT8111
NY 17C8CE340910B334 VT YVT0502 VTX000001856AA212B
NY 17C69BE81B4F8BD8 VT YVT0509 VTX00000185697B44F
NY 17C8CE380303CEF7 VT YVT0531 VTX000001856AA214A
NY 17C781E80C5F8056 VT YVT0532 VTX0000018569F3DAA
NY 162BC7DF199DB45D VT YVT0578 A15S000165
NY 151A387A0453DB72 VT YVT0621
NY 15F632E71A202A58 VT YVT0623 19971211133922S101702M000884AYVT0623
NY 1600E51A09713ACA VT YVT0623 19980217150354S101702A070537AYVT0623
NY 1603676C1DE4B288 VT YVT0623 19980305141315S101702A070824AYVT0623
NY 150F2EEB09ED3F46 VT YVT0731
NY 154B339C0D6B7386 VT YVT0731 19941219124226S101702A040594AYVT0731
NY 15501662082F0A76 VT YVT0731 19950119144820S101702M000551AYVT0731
NY 1564FD760273645E VT YVT0731 19950601S101702M000585AYVT0731
NY 156A7E0601447D9C VT YVT0731 19950706S101702A045888AYVT0731
NY 1589C8221820A6F2 VT YVT0731 19960121S101702Z230461AYVT0731
NY 158BAECA1098B8CC VT YVT0731 19960202S101702A051729AYVT0731
NY 158C4F720B399F60 VT YVT0731 19960206S101702A051780AYVT0731
NY 15BC8C2C0CD313E6 VT YVT0731 19961209174331S101702A059465AYVT0731
NY 15BD2F630FF8FB34 VT YVT0731 19961213190527S101702A059882AYVT0731
NY 15C6E71918B02712 VT YVT0731 19970213150302S101702A061735AYVT0731
NY 15E264C30EFA3C52 VT YVT0731 19970807131116S101702A065672AYVT0731
NY 15E30C4206896AFA VT YVT0731 19970811170742S101702A065857AYVT0731
NY 15E815801931476C VT YVT0731 19970912181134S101702A066795AYVT0731
NY 1602F2DA1ED90E10 VT YVT0731 19980302164021S101702A070775AYVT0731
NY 151167F21A9EC93C VT YVT0801
NY 151B49D716061078 VT YVT0801 19940217154745S101702A031635A
NY 151F3DA8056C651E VT YVT0801 19940314192641S101702A032472AYVT0801
NY 151F85EA15962870 VT YVT0801 19940316143208S101702A032544AYVT0801
NY 151F8D3310C943E0 VT YVT0801 19940316185331S101702A032544AYVT0801
NY 1521B8FF047DD074 VT YVT0801 19940330142350S101702A032942AYVT0801
NY 152765100F8EC68A VT YVT0801 19940505163017S101702A034051AYVT0801
NY 1532630B1E5EF83A VT YVT0801 19940714151204S101702A035710AYVT0801
NY 153268040C52A18E VT YVT0801 19940714180856S101702A035710AYVT0801
NY 1543D0BE16E4C33C VT YVT0801 19941102124425S101702A038864AYVT0801
NY 15497C4A1328B086 VT YVT0801 19941208143554S101702A040233AYVT0801
NY 15497D7816B01A00 VT YVT0801 19941208151811S101702A040233AYVT0801
NY 154DE3351054ED0E VT YVT0801 19950105144958S101702A041005AYVT0801
NY 154EFD9004A9F75A VT YVT0801 19950112151630S101702A041230AYVT0801
NY 1559FA041D3E829E VT YVT0801 19950323125517S101702A043107AYVT0801
NY 1564FD8016ED3154 VT YVT0801 19950601S101702M000585AYVT0801
NY 1566161301779178 VT YVT0801 19950608S101702A045087AYVT0801
NY 156A7E1006163068 VT YVT0801 19950706S101702A045888AYVT0801
NY 158A427E1ED0C40E VT YVT0801 19960124S101702A051425AYVT0801
NY 158AF8A91259FB0A VT YVT0801 19960129S101702Z231662AYVT0801
NY 158BAECF0EC0E0B4 VT YVT0801 19960202S101702A051729AYVT0801
NY 158C4F7A1AF83DE2 VT YVT0801 19960206S101702A051780AYVT0801
NY 159BD8E91746E942 VT YVT0801 19960515160336S101702M000686AYVT0801
NY 159CCA700B404E28 VT YVT0801 19960521160919S101702A054328AYVT0801
NY 15A06B3C14F086B0 VT YVT0801 19960613181338S101702A054978AYVT0801
NY 15AD9A3A0EAA4FDE VT YVT0801 19960905152954S101702M000711AYVT0801
NY 15C3990D0D92AB94 VT YVT0801 19970123142207S101702A061139AYVT0801
NY 15CB7D4918717AA4 VT YVT0801 19970314192907S101702A062471AYVT0801
NY 15CF2E1205598D60 VT YVT0801 19970407070548S101702Z304742AYVT0801
NY 15CFB353118ADEC8 VT YVT0801 19970410142923S101702A063075AYVT0801
NY 15CFB409160573D2 VT YVT0801 19970410150032S101702A063075AYVT0801
NY 15E382E2015202DC VT YVT0801 19970814154725S101702M000820AYVT0801
NY 15EC79A71C8C574C VT YVT0801 19971010164615S101702A067424AYVT0801
NY 15F519F008403907 VT YVT0801 19971204140206S101702A068758AYVT0801
NY 160019EC1FF75B36 VT YVT0801 19980212134230S101702A070371AYVT0801
NY 161730AB0956819E VT YVT0801 19980709133842S101702M000924AYVT0801
NY 168C73FD190C1934 VT YVT0801 A15S000580
NY 151F57E409DC6F5E VT YVT0801 E
NY 151167F2082DF054 VT YVT0802
NY 151B49D71BD9A654 VT YVT0802 19940217154748S101702A031635A
NY 151F3DA71F6D9FE8 VT YVT0802 19940314192641S101702A032472AYVT0802
NY 151F85EA067B94C8 VT YVT0802 19940316143210S101702A032544AYVT0802
NY 151F8D3303E875A6 VT YVT0802 19940316185332S101702A032544AYVT0802
NY 1521B8D90840D54A VT YVT0802 19940330142123S101702A032942AYVT0802
NY 1527650F0B9AB1A8 VT YVT0802 19940505163025S101702A034051AYVT0802
NY 153263100A2FA6B6 VT YVT0802 19940714151204S101702A035710AYVT0802
NY 153268021EC80C7A VT YVT0802 19940714180857S101702A035710AYVT0802
NY 1543D0BE00973E80 VT YVT0802 19941102124425S101702A038864AYVT0802
NY 154DE3370FA864F2 VT YVT0802 19950105144959S101702A041005AYVT0802
NY 1564FD800EC77C0C VT YVT0802 19950601S101702M000585AYVT0802
NY 156A7E0F11983E0C VT YVT0802 19950706S101702A045888AYVT0802
NY 158A427E078D09DA VT YVT0802 19960124S101702A051425AYVT0802
NY 158AF8AF1A839964 VT YVT0802 19960129S101702Z231662AYVT0802
NY 158BAECE07873230 VT YVT0802 19960202S101702A051729AYVT0802
NY 158C4F7A0521DBAE VT YVT0802 19960206S101702A051780AYVT0802
NY 159BD8E91276E922 VT YVT0802 19960515160337S101702M000686AYVT0802
NY 15AD9A421B9BB98E VT YVT0802 19960905152955S101702M000711AYVT0802
NY 15CFB34E05C0222A VT YVT0802 19970410142924S101702A063075AYVT0802
NY 15CFB419075426C8 VT YVT0802 19970410150032S101702A063075AYVT0802
NY 15E382DD11F6E216 VT YVT0802 19970814154725S101702M000820AYVT0802
NY 160019D30AB33018 VT YVT0802 19980212134231S101702A070371AYVT0802
NY 161730801C26F4E8 VT YVT0802 19980709133842S101702M000924AYVT0802
NY 168C74290A93E9A8 VT YVT0802 A15S000580
NY 151F57F0019B2BC6 VT YVT0802 E
NY 151167F301E63D04 VT YVT0803
NY 151B49D9182F3226 VT YVT0803 19940217154750S101702A031635A
NY 151F3DB9078B116C VT YVT0803 19940314192642S101702A032472AYVT0803
NY 151F85EC07C69C6A VT YVT0803 19940316143212S101702A032544AYVT0803
NY 151F8D3318B1099A VT YVT0803 19940316185334S101702A032544AYVT0803
NY 1521B8EE06BAE01A VT YVT0803 19940330142140S101702A032942AYVT0803
NY 15276558190C8AC0 VT YVT0803 19940505163031S101702A034051AYVT0803
NY 1532631308016C84 VT YVT0803 19940714151205S101702A035710AYVT0803
NY 153268041C688CBA VT YVT0803 19940714180857S101702A035710AYVT0803
NY 1534726C1D44C7F6 VT YVT0803 19940727175006S101702A036169AYVT0803
NY 15390002019E845E VT YVT0803 19940825170749S101702A036783AYVT0803
NY 154DE32B1E02D892 VT YVT0803 19950105144947S101702A041005AYVT0803
NY 1564FD80149CD4F6 VT YVT0803 19950601S101702M000585AYVT0803
NY 156A7E100EC37A26 VT YVT0803 19950706S101702A045888AYVT0803
NY 159BD8EA001206AC VT YVT0803 19960515160337S101702M000686AYVT0803
NY 159CCA6F18108A06 VT YVT0803 19960521160920S101702A054328AYVT0803
NY 15A06B350583AD68 VT YVT0803 19960613181234S101702A054978AYVT0803
NY 15AD9A4E022D9AA4 VT YVT0803 19960905152956S101702M000711AYVT0803
NY 15CFB35107B67EC4 VT YVT0803 19970410142925S101702A063075AYVT0803
NY 15CFB4170ECF7042 VT YVT0803 19970410150033S101702A063075AYVT0803
NY 15E382C0163F7B1C VT YVT0803 19970814154726S101702M000820AYVT0803
NY 160019E512F6EE4E VT YVT0803 19980212134231S101702A070371AYVT0803
NY 161730800070367C VT YVT0803 19980709133843S101702M000924AYVT0803
NY 168C74410EEC7819 VT YVT0803 A15S000580
NY 151167F3182FEEBC VT YVT0804
NY 151B49D818EF38C0 VT YVT0804 19940217154640S101702A031635A
NY 151F3DB91576AAE0 VT YVT0804 19940314192643S101702A032472AYVT0804
NY 151F8D340CA235C4 VT YVT0804 19940316185336S101702A032544AYVT0804
NY 1521B8F21B501AFC VT YVT0804 19940330142205S101702A032942AYVT0804
NY 152765590A4BDFBE VT YVT0804 19940505162908S101702A034051AYVT0804
NY 153263170E2CCDDE VT YVT0804 19940714151207S101702A035710AYVT0804
NY 1532680506F7152A VT YVT0804 19940714180858S101702A035710AYVT0804
NY 1543D0BF068D70FA VT YVT0804 19941102124426S101702A038864AYVT0804
NY 15497C480CACA22C VT YVT0804 19941208143556S101702A040233AYVT0804
NY 15497D7B1C930560 VT YVT0804 19941208151812S101702A040233AYVT0804
NY 154DE3311099A1EA VT YVT0804 19950105144951S101702A041005AYVT0804
NY 1564FD801BF9B964 VT YVT0804 19950601S101702M000585AYVT0804
NY 1566161917C58550 VT YVT0804 19950608S101702A045087AYVT0804
NY 156A7E101B77CB20 VT YVT0804 19950706S101702A045888AYVT0804
NY 156B95EA08A027C2 VT YVT0804 19950713S101702A046105AYVT0804
NY 158A427F02468704 VT YVT0804 19960124S101702A051425AYVT0804
NY 158AF8A9170F1906 VT YVT0804 19960129S101702Z231662AYVT0804
NY 158BAED00D3E36B8 VT YVT0804 19960202S101702A051729AYVT0804
NY 158C4F7803623030 VT YVT0804 19960206S101702A051780AYVT0804
NY 159216F7145D1A62 VT YVT0804 19960314140008S101702A052610AYVT0804
NY 159BD8E91A76C142 VT YVT0804 19960515160338S101702M000686AYVT0804
NY 159CCA7007A01F1A VT YVT0804 19960521160920S101702A054328AYVT0804
NY 15A06B38171D1E2E VT YVT0804 19960613181241S101702A054978AYVT0804
NY 15AD9A4E15D9DE38 VT YVT0804 19960905152957S101702M000711AYVT0804
NY 15CA63A517886942 VT YVT0804 19970307192828S101702A062025AYVT0804
NY 15CB7D4919482A6A VT YVT0804 19970314192907S101702A062471AYVT0804
NY 15CFB35318BC762C VT YVT0804 19970410142926S101702A063075AYVT0804
NY 15CFB41B0821A076 VT YVT0804 19970410150033S101702A063075AYVT0804
NY 15D973741C1B58BF VT YVT0804 19970611153558S101702A064611AYVT0804
NY 15E382C10B37C3C8 VT YVT0804 19970814154726S101702M000820AYVT0804
NY 15F519F0033FBB0B VT YVT0804 19971204140207S101702A068758AYVT0804
NY 160019EE11A19D82 VT YVT0804 19980212134232S101702A070371AYVT0804
NY 161730940E2E180A VT YVT0804 19980709133843S101702M000924AYVT0804
NY 168C745A0BB457AC VT YVT0804 A15S000580
NY 151F580D128061FE VT YVT0804 E
NY 151167F30FFD6E5E VT YVT0805
NY 151B49D70F130978 VT YVT0805 19940217154651S101702A031635A
NY 151F3DB9010A3E12 VT YVT0805 19940314192644S101702A032472AYVT0805
NY 151F8D34014479DA VT YVT0805 19940316185339S101702A032544AYVT0805
NY 1521B8E8085CBB4E VT YVT0805 19940330142220S101702A032942AYVT0805
NY 1527650D1A1AF54E VT YVT0805 19940505162933S101702A034051AYVT0805
NY 1532631609CD1058 VT YVT0805 19940714151209S101702A035710AYVT0805
NY 1532680406319AE8 VT YVT0805 19940714180859S101702A035710AYVT0805
NY 1543D0BF16B2C2C8 VT YVT0805 19941102124427S101702A038864AYVT0805
NY 154515E6087794AC VT YVT0805 19941110143933S101702A039292AYVT0805
NY 15497C4808095D7A VT YVT0805 19941208143559S101702A040233AYVT0805
NY 15497D76024B2922 VT YVT0805 19941208151813S101702A040233AYVT0805
NY 154DE33203B18D42 VT YVT0805 19950105144952S101702A041005AYVT0805
NY 1564FD4E16C9FEEA VT YVT0805 19950601S101702M000585AYVT0805
NY 1566161912B6D9AC VT YVT0805 19950608S101702A045087AYVT0805
NY 156A7E1613FB30BC VT YVT0805 19950706S101702A045888AYVT0805
NY 156B95EA0A9D9796 VT YVT0805 19950713S101702A046105AYVT0805
NY 158A427F0425C056 VT YVT0805 19960124S101702A051425AYVT0805
NY 158AF8A915D62672 VT YVT0805 19960129S101702Z231662AYVT0805
NY 158BAECA115701BA VT YVT0805 19960202S101702A051729AYVT0805
NY 158C4F7A1D4FE978 VT YVT0805 19960206S101702A051780AYVT0805
NY 159BD8E91A6DD730 VT YVT0805 19960515160338S101702M000686AYVT0805
NY 159CCA700B855802 VT YVT0805 19960521160921S101702A054328AYVT0805
NY 15A06B39098F74D4 VT YVT0805 19960613181244S101702A054978AYVT0805
NY 15AD9A4E0209F674 VT YVT0805 19960905152957S101702M000711AYVT0805
NY 15C3990C1525D7B0 VT YVT0805 19970123142208S101702A061139AYVT0805
NY 15CB7D42171BD266 VT YVT0805 19970314192907S101702A062471AYVT0805
NY 15CF2E241C539C4C VT YVT0805 19970407070836S101702Z304746AYVT0805
NY 15CFB3531C685870 VT YVT0805 19970410142928S101702A063075AYVT0805
NY 15CFB41B08548766 VT YVT0805 19970410150034S101702A063075AYVT0805
NY 15E382C10095F005 VT YVT0805 19970814154727S101702M000820AYVT0805
NY 15EC79A71BD9AF62 VT YVT0805 19971010164616S101702A067424AYVT0805
NY 15F519EE12129F24 VT YVT0805 19971204140208S101702A068758AYVT0805
NY 160019D61D647340 VT YVT0805 19980212134233S101702A070371AYVT0805
NY 168C746B1B41CD4F VT YVT0805 A15S000580
NY 151167F115294F90 VT YVT0806
NY 151B49D402FBBAD0 VT YVT0806 19940217154655S101702A031635A
NY 151F3DA81FA2E514 VT YVT0806 19940314192645S101702A032472AYVT0806
NY 151F8D330B00D164 VT YVT0806 19940316185341S101702A032544AYVT0806
NY 1521B8F21338139A VT YVT0806 19940330142237S101702A032942AYVT0806
NY 1527650A13CEF8D8 VT YVT0806 19940505162943S101702A034051AYVT0806
NY 15326314054EDF8E VT YVT0806 19940714151210S101702A035710AYVT0806
NY 1532680113147860 VT YVT0806 19940714180900S101702A035710AYVT0806
NY 1543D0BA08B15AB0 VT YVT0806 19941102124427S101702A038864AYVT0806
NY 154DE33016B22D14 VT YVT0806 19950105144954S101702A041005AYVT0806
NY 1564FD4E0732905E VT YVT0806 19950601S101702M000585AYVT0806
NY 156A7E1417B25068 VT YVT0806 19950706S101702A045888AYVT0806
NY 158A427E0779BADE VT YVT0806 19960124S101702A051425AYVT0806
NY 158AF8A90424481C VT YVT0806 19960129S101702Z231662AYVT0806
NY 158BAEC900A69648 VT YVT0806 19960202S101702A051729AYVT0806
NY 158C4F78162BA110 VT YVT0806 19960206S101702A051780AYVT0806
NY 159BD8E90AEE3370 VT YVT0806 19960515160339S101702M000686AYVT0806
NY 15AD9A4E19CABBC4 VT YVT0806 19960905152958S101702M000711AYVT0806
NY 15CFB348092330CA VT YVT0806 19970410142929S101702A063075AYVT0806
NY 15CFB41914658DD2 VT YVT0806 19970410150034S101702A063075AYVT0806
NY 15E382BB085D17A0 VT YVT0806 19970814154727S101702M000820AYVT0806
NY 160019D31B3E770A VT YVT0806 19980212134234S101702A070371AYVT0806
NY 1617308C1BE4ECD0 VT YVT0806 19980709133843S101702M000924AYVT0806
NY 168C747A0EA27E53 VT YVT0806 A15S000580
NY 151F5836043B2772 VT YVT0806 E
NY 151167F21394F46C VT YVT0809
NY 151B49C0160501DC VT YVT0809 19940217154709S101702A031635A
NY 151F3DB212A2172C VT YVT0809 19940314192648S101702A032472AYVT0809
NY 151F8D340B69B194 VT YVT0809 19940316185345S101702A032544AYVT0809
NY 15326304167ADF4A VT YVT0809 19940714151212S101702A035710AYVT0809
NY 1532680317030674 VT YVT0809 19940714180901S101702A035710AYVT0809
NY 1543D0BD00911A6C VT YVT0809 19941102124430S101702A038864AYVT0809
NY 1564FD4E1A2F31C8 VT YVT0809 19950601S101702M000585AYVT0809
NY 156A7E16035F0B54 VT YVT0809 19950706S101702A045888AYVT0809
NY 158A427906FEB542 VT YVT0809 19960124S101702A051425AYVT0809
NY 158AF8A90968A7F4 VT YVT0809 19960129S101702Z231662AYVT0809
NY 158BAEC9115B6D92 VT YVT0809 19960202S101702A051729AYVT0809
NY 158C4F7818D4A974 VT YVT0809 19960206S101702A051780AYVT0809
NY 159BD8E91EF73524 VT YVT0809 19960515160340S101702M000686AYVT0809
NY 15AB64B80FA255C4 VT YVT0809 19960822140730S101702A056608AYVT0809
NY 15BC8C291817E13A VT YVT0809 19961209174336S101702A059465AYVT0809
NY 15CFB351077266DE VT YVT0809 19970410142932S101702A063075AYVT0809
NY 15CFB4180B65C8E8 VT YVT0809 19970410150035S101702A063075AYVT0809
NY 160019D40DB6C90E VT YVT0809 19980212134236S101702A070371AYVT0809
NY 168C748E1E285220 VT YVT0809 A15S000580
NY 151F584D0DC93DDA VT YVT0809 E
NY 1608DFED0F9383F0 VT YVTAFS 19980409113931S101702Z369138AYVTAFS
NY 160A02D8132033DA VT YVTAFS 19980416170514S101702M000874AYVTAFS
NY 161730AB10D4FA25 VT YVTAFS 19980709134007S101702M000924AYVTAFS
NY 176CB0510609DF4D VT YVTBEDR A14S00248553A57407
NY 17C8CE2E12FE63E1 VT YVTBRVI VTX000001856AA20FB
NY 17C8CE300E0C8C95 VT YVTCSFP VTX000001856AA210A
NY 1788AB2E0FBC9B9D VT YVTDTAT A14S00262754901C5B
NY 17F315F202926D77 VT YVTDTAT EBZV000010580CDB55
NY 17C82ABA1E5F7FD6 VT YVTDTEX VTX000001856A4C5D9
NY 17D2DFA4035458D7 VT YVTEINS EBZV00000756FEA457
NY 17E083D01B5701C6 VT YVTVALU EBZV000009577112CD
NY 17C8CE330A2F30E4 VT YVTVWAH VTX000001856AA2122
NY 182EABED0294473C VV YVV3EIP VDPS0001175A00A470MVS
NY 183B104111800348 VV YVV3EIP VDPS0001185A68985A
NY 183B10421CCC957F VV YVV3EIP VDPS0001185A68985AMVS
NY 182F9C221FDE5EE7 VV YVV3EIP VDPS0001565A0883F9
NY 182F9C231D54A234 VV YVV3EIP VDPS0001565A0883F9MVS
NY 1796F92B10E7D57E VV YVV5070 VDPS00001455081B63
NY 1839C8CC1C6F775C VV YVV5070 VDPS0001185A5DDB5D
NY 1839C8CE0226FFCB VV YVV5070 VDPS0001185A5DDB5DMVS
NY 17D38554150F85FB VV YVVZZ03 VDPS00007357041232
NY 180A5AD40949C332 VV YVVZZ03 VDPS00010858CFFF3B
NY 1818F6A70CA1DDDA VV YVVZZ03 VDPS000114594A9918
NY 1818F6A91C005510 VV YVVZZ03 VDPS000114594A9918MVS
NY 17DFC54603338C00 VV YVVZZ04 VDPS000077576AD450
NY 17EE13FD144D9F14 VV YVVZZ04 VDPS00008557E2D980
NY 17FC0CB31216ACA1 VV YVVZZ04 VDPS0001035857FF0A
NY 18148BF51CE92690 VV YVVZZ04 VDPS00011259258C31
NY 1818D380154526FD VV YVVZZ04 VDPS0001145949721BMVS
NY 1828086F1EEB6F1D VV YVVZZ04 VDPS00011759C9027DMVS
NY 1839CB7D1D1371DD VV YVVZZ04 VDPS0001185A5DF2D6
NY 1839CB7F087E5FFE VV YVVZZ04 VDPS0001185A5DF2D6MVS
NY 17E4C69C0F263440 VV YVVZZ05 VDPS0000775794D107
NY 180AC4871B3BFD99 VV YVVZZ05 VDPS00010858D375E2
NY 1818A62301D79BDE VV YVVZZ05 VDPS0001145947F5B1
NY 1818A626117BCA76 VV YVVZZ05 VDPS0001145947F5B1MVS
NY 182945060695701C VV YVVZZ05 VDPS00011759D36248
NY 1829450A0E4AEA87 VV YVVZZ05 VDPS00011759D36248MVS
NY 1817FCDE0AFE5034 VV YVVZZ06 VDPS000114594269AF
NY 1817FCE01221E055 VV YVVZZ06 VDPS000114594269AFMVS
NY 18323C010807FF93 VV YVVZZ06 VDPS0001185A1E8803
NY 18323C020C81B3B0 VV YVVZZ06 VDPS0001185A1E8803MVS
NY 182924371E28547F VV YVVZZ07 VDPS00011759D24F27
NY 1829243A01ED2F4D VV YVVZZ07 VDPS00011759D24F27MVS
NY 1823AC1F15169D58 VV YVVZZ07 VDPS00013759A46E34MVS
NY 17BB227116D89518 VV YVVZZ08 VDPS00005256377304
NY 1817FCE215EA8AB4 VV YVVZZ08 VDPS000114594269CD
NY 1817FCE51F8A9A79 VV YVVZZ08 VDPS000114594269CDMVS
NY 182C6A8614BFEC15 VV YVVZZ08 VDPS00011759EDC6B6
NY 182C6A8813BC12B2 VV YVVZZ08 VDPS00011759EDC6B6MVS
NY 1804111808DEE720 VV YVVZZ09 VDPS000099589B3FC8
NY 1817FD1312680083 VV YVVZZ09 VDPS00011459426A6C
NY 1817FD1516CB6239 VV YVVZZ09 VDPS00011459426A6CMVS
NY 1828FF3B18AC58B4 VV YVVZZ09 VDPS00011759D118C6MVS
NY 18323C0D04B441B6 VV YVVZZ09 VDPS0001185A1E8862
NY 18323C0E14E65B8A VV YVVZZ09 VDPS0001185A1E8862MVS
NY 17D3A4F316907351 VV YVVZZ10 VDPS00007357051B7A
NY 180417D413BD2DB0 VV YVVZZ10 VDPS000099589B784A
NY 1819E37A0A3D4D73 VV YVVZZ10 VDPS00011459525BC8
NY 1819E37C0B1E1974 VV YVVZZ10 VDPS00011459525BC8MVS
NY 182B298A17F6EC10 VV YVVZZ10 VDPS00011759E342BE
NY 182B298C1F4B65C6 VV YVVZZ10 VDPS00011759E342BEMVS
NY 17C8C6DB1A523C6E VV YVVZZ11 VDPS00006756A9E387
NY 1800E6191D0FC84E VV YVVZZ11 VDPS0000995880ACAB
NY 1817FCF21358B1E2 VV YVVZZ11 VDPS00011459426A05MVS
NY 182C6A770DCFCC74 VV YVVZZ11 VDPS00011759EDC6C1MVS
NY 1839CAAC0843B125 VV YVVZZ11 VDPS0001185A5DED1E
NY 1839CAAE0C1524D6 VV YVVZZ11 VDPS0001185A5DED1EMVS
NY 17D1A45902D2750D VV YVVZZ12 VDPS00007356F4415D
NY 1804122B1E178FF9 VV YVVZZ12 VDPS000099589B48CE
NY 17FE94BA1332FF42 VV YVVZZ12 VDPS000103586D3B12
NY 1817FCF00ECB7A76 VV YVVZZ12 VDPS00011459426A35
NY 1817FCF509E5D4C0 VV YVVZZ12 VDPS00011459426A35MVS
NY 1828FA5818A8DE7F VV YVVZZ12 VDPS00011759D0EFDA
NY 1828FA5B00278D1F VV YVVZZ12 VDPS00011759D0EFDAMVS
NY 1839C90B0C5E2AEA VV YVVZZ12 VDPS0001185A5DDF82
NY 1839C90C1AE2433E VV YVVZZ12 VDPS0001185A5DDF82MVS
NY 17B7F61B123590DC VV YVVZZ13 VDPS000052561CE2B1
NY 1801D4770FA83FD7 VV YVVZZ13 VDPS00009958887C3E
NY 181AA84015BCA89A VV YVVZZ13 VDPS0001145958CE5FMVS
NY 182BA678018048FC VV YVVZZ13 VDPS00011759E75A9CMVS
NY 18353AF4161FD149 VV YVVZZ13 VDPS0001185A37A9AA
NY 18353AF51E4C1CA1 VV YVVZZ13 VDPS0001185A37A9AAMVS
NY 17D1487C040559CA VV YVVZZ14 VDPS00007356F13EBD
NY 1818A62618BBB2BD VV YVVZZ14 VDPS0001145947F5C7
NY 1818A6281F8089F6 VV YVVZZ14 VDPS0001145947F5C7MVS
NY 1829251F0FF55B60 VV YVVZZ14 VDPS00011759D2568E
NY 1829252E15CB1F29 VV YVVZZ14 VDPS00011759D2568EMVS
NY 18323C10058831A0 VV YVVZZ14 VDPS0001185A1E887D
NY 17B7F61D13F75756 VV YVVZZ15 VDPS000052561CE2B7
NY 17C8C82308425FAE VV YVVZZ15 VDPS00006756A9EE3E
NY 1800E622084051D1 VV YVVZZ15 VDPS0000995880ACF1
NY 1817FCEE177F3F8F VV YVVZZ15 VDPS00011459426A38
NY 1817FCF5030407FC VV YVVZZ15 VDPS00011459426A38MVS
NY 182C6A771B57340A VV YVVZZ15 VDPS00011759EDC6CA
NY 182C6A7E07B7D479 VV YVVZZ15 VDPS00011759EDC6CAMVS
NY 17D2BBD307B51A5B VV YVVZZ16 VDPS00007356FD77D1
NY 1817FD05055D36EA VV YVVZZ16 VDPS00011459426A5D
NY 1817FD0708B5F769 VV YVVZZ16 VDPS00011459426A5DMVS
NY 18294E2418CFC279 VV YVVZZ16 VDPS00011759D3AED0
NY 18294E2801D1659D VV YVVZZ16 VDPS00011759D3AED0MVS
NY 17DF96EA02265E28 VV YVVZZ17 VDPS00007757694F83
NY 1818A62909607400 VV YVVZZ17 VDPS0001145947F5E0
NY 1818A62B17845F25 VV YVVZZ17 VDPS0001145947F5E0MVS
NY 18291E760E5D6408 VV YVVZZ17 VDPS00011759D21EC1MVS
NY 1839CAC20E1B3976 VV YVVZZ17 VDPS0001185A5DEDE3
NY 1839CAC316B685F1 VV YVVZZ17 VDPS0001185A5DEDE3MVS
NY 17DFC3560F52B3AB VV YVVZZ18 VDPS000077576AC41A
NY 1800E6D21E2DC7C2 VV YVVZZ18 VDPS0000995880B2BF
NY 1818A62E01FEDFEC VV YVVZZ18 VDPS0001145947F613
NY 1818A6301FB4922E VV YVVZZ18 VDPS0001145947F613MVS
NY 182EC58813EF1B88 VV YVVZZ18 VDPS0001175A017B9CMVS
NY 18323C110DA9D908 VV YVVZZ18 VDPS0001185A1E8884
NY 18323C130B079199 VV YVVZZ18 VDPS0001185A1E8884MVS
NY 17E05DCA16EB4AB6 VV YVVZZ19 VDPS000077576FD3D1
NY 17F6B956103BB5E8 VV YVVZZ19 VDPS000090582B5250
NY 180EC58D00E8AED7 VV YVVZZ19 VDPS00010858F51A6F
NY 181B878B0D9D5495 VV YVVZZ19 VDPS00011459600648MVS
NY 182A3D771779844D VV YVVZZ19 VDPS00011759DB8665
NY 182A3D7A0C27EFBA VV YVVZZ19 VDPS00011759DB8665MVS
NY 18323C1210F8CCB0 VV YVVZZ19 VDPS0001185A1E888B
NY 17B6E36E00B67432 VV YVVZZ1R VDPS0000525613E28D
NY 18031C751F3F8679 VV YVVZZ1R VDPS00009958933B9C
NY 1817FCF60EFC4EE7 VV YVVZZ1R VDPS00011459426A3E
NY 1817FCF81A6CA2F5 VV YVVZZ1R VDPS00011459426A3EMVS
NY 17E953AD064B4002 VV YVVZZ20 VDPS00008757BAFE47
NY 17F131F207DBDFD6 VV YVVZZ20 VDPS00009057FCFF37
NY 181B4BB20EEAEC4B VV YVVZZ20 VDPS000114595E2936MVS
NY 182EC5960FB65A62 VV YVVZZ20 VDPS0001175A017C26
NY 182EC59904775180 VV YVVZZ20 VDPS0001175A017C26MVS
NY 17EC00610CDDA6EE VV YVVZZ21 VDPS00008557D16DF0
NY 1817FCFB138C4181 VV YVVZZ21 VDPS00011459426A44
NY 1817FD02114AA653 VV YVVZZ21 VDPS00011459426A44MVS
NY 182922F213EEF0A2 VV YVVZZ21 VDPS00011759D24460MVS
NY 18323C120E6EB3AA VV YVVZZ21 VDPS0001185A1E8890
NY 18323C151FBF017A VV YVVZZ21 VDPS0001185A1E8890MVS
NY 17EBB3FA00747DE9 VV YVVZZ22 VDPS00008757CEED15
NY 1818A65309EBAA05 VV YVVZZ22 VDPS0001145947F743MVS
NY 182C6A7D16D97808 VV YVVZZ22 VDPS00011759EDC6D8
NY 182C6A820E8DE9F2 VV YVVZZ22 VDPS00011759EDC6D8MVS
NY 17EFCEC30F2CA722 VV YVVZZ23 VDPS00008557F15BB7
NY 1817FD1A001F3682 VV YVVZZ23 VDPS00011459426A7F
NY 1817FD1C0428F0E3 VV YVVZZ23 VDPS00011459426A7FMVS
NY 182C6A811F6A52CA VV YVVZZ23 VDPS00011759EDC6E4
NY 182C6A840C1ABFD6 VV YVVZZ23 VDPS00011759EDC6E4MVS
NY 17EE08C2069C995B VV YVVZZ24 VDPS00008557E27B46
NY 1817FD131A8F8416 VV YVVZZ24 VDPS00011459426A82
NY 1817FD1512946DF7 VV YVVZZ24 VDPS00011459426A82MVS
NY 182C6A84125D1BD8 VV YVVZZ24 VDPS00011759EDC6ED
NY 182C6A8708C29E3C VV YVVZZ24 VDPS00011759EDC6EDMVS
NY 18009915172ACA4B VV YVVZZ25 VDPS000099587E2698
NY 1818A639100255AA VV YVVZZ25 VDPS0001145947F674
NN 1818A63C01AC1A78 VV YVVZZ25 VDPS0001145947F674MVS
NY 182923431C5EAA85 VV YVVZZ25 VDPS00011759D246F2MVS
NY 18323C121E96C0EC VV YVVZZ25 VDPS0001185A1E8896
NY 18323C1504194608 VV YVVZZ25 VDPS0001185A1E8896MVS
NY 180E18DB12A73DBD VV YVVZZ27 VDPS00010858EF71CF
NY 18187F291509B956 VV YVVZZ27 VDPS0001145946AEC8
NY 18187F2C038FC493 VV YVVZZ27 VDPS0001145946AEC8MVS
NY 182A3D971C7EE783 VV YVVZZ27 VDPS00011759DB8776
NY 182A3D9A17BAA45A VV YVVZZ27 VDPS00011759DB8776MVS
NY 18323C1500910915 VV YVVZZ27 VDPS0001185A1E889E
NY 180EE0950EB83E0A VV YVVZZ28 VDPS00010858F5FD2B
NY 18146AED0C20DBC8 VV YVVZZ28 VDPS00011259247724
NY 181E294B005D5567 VV YVVZZ28 VDPS00011459763336MVS
NY 182C6A8B06A2819C VV YVVZZ28 VDPS00011759EDC6FA
NY 182C6A8E11634856 VV YVVZZ28 VDPS00011759EDC6FAMVS
NY 18323C150D65093D VV YVVZZ28 VDPS0001185A1E88A3
NY 18102799142FE518 VV YVVZZ29 VDPS0001085900B473
NY 1818A65311203A6D VV YVVZZ29 VDPS0001145947F759
NY 1818A6550FC31CFA VV YVVZZ29 VDPS0001145947F759MVS
NY 182C6A8E10BC8DCE VV YVVZZ29 VDPS00011759EDC703
NY 182C6A9218329C04 VV YVVZZ29 VDPS00011759EDC703MVS
NY 18031C780A9949A5 VV YVVZZ2R VDPS00009958933BBC
NY 1818A5E90E58899E VV YVVZZ2R VDPS0001145947F3D5
NY 1818A5EB0F577762 VV YVVZZ2R VDPS0001145947F3D5MVS
NY 1827DFD71198F6BD VV YVVZZ2R VDPS00011759C7AE13
NY 1827DFD9138D6180 VV YVVZZ2R VDPS00011759C7AE13MVS
NY 1817FCD6016D695B VV YVVZZ30 VDPS00011459426994
NY 1817FCD7198A6BA0 VV YVVZZ30 VDPS00011459426994MVS
NY 182C6A921624F411 VV YVVZZ30 VDPS00011759EDC710
NY 182C6A950192651A VV YVVZZ30 VDPS00011759EDC710MVS
NY 182927541720E419 VV YVVZZ31 VDPS00011759D26946
NY 18292756106C9A8A VV YVVZZ31 VDPS00011759D26946MVS
NY 1828F5031162B44D VV YVVZZ32 VDPS00011759D0C30EMVS
NY 18323C16151CEB4D VV YVVZZ32 VDPS0001185A1E88B5
NY 18323C1908597B86 VV YVVZZ32 VDPS0001185A1E88B5MVS
NY 182E092916DB03BC VV YVVZZ33 VDPS00011759FB4F83
NY 182E092B1156CB86 VV YVVZZ33 VDPS00011759FB4F83MVS
NY 183C03241ADF9596 VV YVVZZ33 VDPS0001685A708DD5MVS
NY 183E36361650E573 VV YVVZZ33 VDPS0001745A83012D
NY 183E363E059B0AFB VV YVVZZ33 VDPS0001745A83012DMVS
NY 17A6132F1DC5AAA4 VV YVVZZ3R VDPS0000295586D7EF
NY 18031C7C0C9537CE VV YVVZZ3R VDPS00009958933BE0
NY 1818A5FB15580267 VV YVVZZ3R VDPS0001145947F471
NY 1818A5FD0CD7D3BC VV YVVZZ3R VDPS0001145947F471MVS
NY 1839C8CA00263CDE VV YVVZZ3R VDPS0001185A5DDB06
NY 1839C8CB00488F3B VV YVVZZ3R VDPS0001185A5DDB06MVS
NY 1802F9F208BF7192 VV YVVZZAR VDPS00009958921A13
NY 1817FD091EFE99EF VV YVVZZAR VDPS00011459426A66
NY 1817FD0D0716185C VV YVVZZAR VDPS00011459426A66MVS
NY 1818A63D016125C2 VV YVVZZFR VDPS0001145947F698
NY 1818A63E1CC30975 VV YVVZZFR VDPS0001145947F698MVS
NY 1839C8C705CF8A34 VV YVVZZFR VDPS0001185A5DDA78
NY 1839C8C80A3F1F11 VV YVVZZFR VDPS0001185A5DDA78MVS
NY 17BE97F30EA54A8D VV YVVZZGR VDPS00006256547738
NY 18031C6D0AA55941 VV YVVZZGR VDPS00009958933B61
NY 1818A63F03197821 VV YVVZZGR VDPS0001145947F6A7
NY 1818A640116B32F2 VV YVVZZGR VDPS0001145947F6A7MVS
NY 17EB5DF512B23666 VV YVVZZJR VDPS00008557CC1B89
NY 1817FD050487DB67 VV YVVZZJR VDPS00011459426A61
NY 1817FD0708A55FA3 VV YVVZZJR VDPS00011459426A61MVS
NY 180095250E1F1955 VV YVVZZNR VDPS000099587E0594
NY 1818A64D19C9D36B VV YVVZZNR VDPS0001145947F723
NY 1818A64F10B60BDD VV YVVZZNR VDPS0001145947F723MVS
NY 180EC12E1AF0FF45 VV YVVZZQR VDPS00010858F4F5CB
NY 1819BDEF0D59DC76 VV YVVZZQR VDPS000114595120D5
NY 1819BDF10C9721EC VV YVVZZQR VDPS000114595120D5MVS
NY 179BB5890764E3F1 VW YVWB641 WSTS000003552FE2D3
NY 18191FF417ACD960 VW YVWB641 WSTS000055594BF359
NY 18191FF604E3B4BC VW YVWB641 WSTS000055594BF359MVS
NY 1718A64005AF56B3 WA WK9000 A06M012041
NN 16E8FBC10538DE3D WA YWAPOS A06M012041
NN 16E8FBC50FF62CAD WA YWAPOSA A06M012041
NY 14E32D111A7F9F68 WB WB0030
NY 17F3B7450ED54313 WB WB0060 TOFF000076
NY 18063C33167D4E6B WB WB0060 TOFF000088
NY 18104EDB03BFF635 WB WB0060 TOFF000099
NY 1802C38F09A9B866 WB WB0060 TOFF000100
NY 181DF5860F63DFDE WB WB0060 TOFF000109
NY 182CE96E1855E81B WB WB0060 TOFF000112
NY 183B0AFE127AF46F WB WB0060 TOFF000122
NY 17E655B20CE8B678 WB WB0330 WS8B000316
NY 17E657D9016B243C WB WB0510 WSTS000039
NY 17EFF3991A1A6CE1 WB WB0510 WSTS000043
NY 18031B3505505F40 WB WB0510 WSTS000046
NY 181C3D160E9B0534 WB WB0510 WSTS000055
NY 183AC1721966537F WB WB0510 WSTS000061
NY 1815CC451E00E03D WB WB0520 WS8B000441
NY 1819E99804485691 WB WB0520 WS8B000468
NY 17E657DA121C737D WB WB0520 WSTS000039
NY 17EFF39B034AD573 WB WB0520 WSTS000043
NY 18031B3518A70288 WB WB0520 WSTS000046
NY 1800BEE91566A527 WB WB0520 WSTS000050
NY 18104EC01CD11CB0 WB WB0520 WSTS000051
NY 181C3D1317362D11 WB WB0520 WSTS000055
NY 183AC1941A2DA759 WB WB0520 WSTS000061
NY 1815CC66082A96BE WB WB0530 WS8B000441
NY 1819E998093144B4 WB WB0530 WS8B000468
NY 17E657DC019767AE WB WB0530 WSTS000039
NY 17F293590D84C765 WB WB0530 WSTS000043
NY 18031B390AF22C2A WB WB0530 WSTS000046
NY 1800BEDE0F38D1D8 WB WB0530 WSTS000050
NY 18104EC006E59145 WB WB0530 WSTS000051
NY 181E45FB0A593D49 WB WB0530 WSTS000055
NY 1829969C1B6CCD53 WB WB0530 WSTS000057
NY 183AC19E03CF5557 WB WB0530 WSTS000061
NY 1819E99606AB2A97 WB WB0550 WS8B000468
NY 17E656280A3A76EF WB WB0550 WSTS000039
NY 17F12D1F04640876 WB WB0550 WSTS000043
NY 1804D65F1A0CFF65 WB WB0550 WSTS000046
NY 18104EB40BCCF03E WB WB0550 WSTS000051
NY 181C3D11076E04F9 WB WB0550 WSTS000055
NY 1815CBF31F43A228 WB WB0550 WSTS000056
NY 183AC16F0BC74831 WB WB0550 WSTS000061
NY 17E657DF0A2107EF WB WB0570 WSTS000039
NY 17EFF38117B0CFA8 WB WB0570 WSTS000043
NY 18031B371D893645 WB WB0570 WSTS000046
NY 181C3D04133DC330 WB WB0570 WSTS000055
NY 183AC1B615F3A398 WB WB0570 WSTS000061
NY 17E657E01EB07746 WB WB0580 WSTS000039
NY 17EFF38E029291BE WB WB0580 WSTS000043
NY 18031B3A00453D27 WB WB0580 WSTS000046
NY 181C3D0212342DC0 WB WB0580 WSTS000055
NY 183AC1751EDECFEA WB WB0580 WSTS000061
NY 17E657E20F6569CE WB WB0600 WSTS000039
NY 17EFF390023C3C28 WB WB0600 WSTS000043
NY 18031B401E57AFB5 WB WB0600 WSTS000046
NY 181C3D0102B7E31B WB WB0600 WSTS000055
NY 18166D1E1A447645 WB WB0600 WSTS000056
NY 183AC1CE097EA2E8 WB WB0600 WSTS000061
NY 17E657E4057139CB WB WB0620 WSTS000039
NY 17EFF3891A70BCFB WB WB0620 WSTS000043
NY 18031B3F1AE4BFBA WB WB0620 WSTS000046
NY 1800BEE20A3CB8F6 WB WB0620 WSTS000050
NY 181C3CFF077AA155 WB WB0620 WSTS000055
NY 183AC1BB0F6B6F4C WB WB0620 WSTS000061
NY 17F42B521E51FFA3 WB WB0630 WS8B000320
NY 1819E99F1E49A95D WB WB0630 WS8B000468
NY 1820EE0F049F6595 WB WB0630 WS8B000479
NY 182508AA10BEBA29 WB WB0630 WS8B000493
NY 182FE88D160B22E0 WB WB0630 WS8B000540
NY 182264E4186BED4A WB WB0630 WS8I000307
NY 17E656290F96D45C WB WB0630 WSTS000039
NY 18063D040A63D155 WB WB0630 WSTS000046
NY 17F65A5217A5D6F2 WB WB0630 WSTS000048
NY 17F65D2C1DFF05BE WB WB0630 WSTS000049
NY 1800BEE017E9CAFE WB WB0630 WSTS000050
NY 18104EB6186FD50D WB WB0630 WSTS000051
NY 182052BA179076D5 WB WB0630 WSTS000055
NY 1815CBEF0E29C722 WB WB0630 WSTS000056
NY 182E81401C8F29AC WB WB0630 WSTS000057
NY 1825A8A2107EFBF3 WB WB0630 WSTS000058
NY 183B0B360E15C7EE WB WB0630 WSTS000061
NY 1833FFF107F249CA WB WB0630 WSTS000062
NY 183DE81C04E37624 WB WB0630 WSTS000069
NY 17E657E515D83022 WB WB0660 WSTS000039
NY 17EFF3891312AA3C WB WB0660 WSTS000043
NY 18031B540F96DB33 WB WB0660 WSTS000046
NY 181C3CFB1AAB51EE WB WB0660 WSTS000055
NY 183AC1C91411C70D WB WB0660 WSTS000061
NY 17F42B4707CCEA19 WB WB0680 WS8B000320
NY 1819E9AB19248670 WB WB0680 WS8B000468
NY 1820EE0A1F86168B WB WB0680 WS8B000479
NY 182508B11E12CC23 WB WB0680 WS8B000493
NY 182FE892026789A6 WB WB0680 WS8B000540
NY 182264E506A2937A WB WB0680 WS8I000307
NY 17E6562A10339C08 WB WB0680 WSTS000039
NY 18063D050822AEDE WB WB0680 WSTS000046
NY 17F65A530F26EE8E WB WB0680 WSTS000048
NY 17F65D2F0C6E175D WB WB0680 WSTS000049
NY 1800BEE01BFB50BC WB WB0680 WSTS000050
NY 18104EB713C20790 WB WB0680 WSTS000051
NY 182052BA0A954E1C WB WB0680 WSTS000055
NY 1815CBD70C3254D1 WB WB0680 WSTS000056
NY 182E811B115E1ED2 WB WB0680 WSTS000057
NY 1825A8AA13CD3568 WB WB0680 WSTS000058
NY 183B0B38156B7F1A WB WB0680 WSTS000061
NY 1833FFF21D120C95 WB WB0680 WSTS000062
NY 183DE81F022DAF51 WB WB0680 WSTS000069
NY 17F9DC5608801777 WB WB0720 MKUR000032
NY 1801B0091FCC5EEB WB WB0720 WS8B000359
NY 17F608D00437DC2D WB WB0720 WS8B000370
NY 17F666A31EC1AF09 WB WB0720 WS8B000373
NY 17F6A5D00822433A WB WB0720 WS8B000374
NY 17F6D8B21540EC6A WB WB0720 WS8B000376
NY 17F7743E0ABC8050 WB WB0720 WS8B000379
NY 17F9FF2F14DA3E72 WB WB0720 WS8B000382
NY 17F81DED08BC564E WB WB0720 WS8B000383
NY 17F7CEAC0ACF3CE1 WB WB0720 WS8B000386
NY 17F931A407386CC9 WB WB0720 WS8B000390
NY 17FB60EE132FF13B WB WB0720 WS8B000400
NY 17FBD84104F5288E WB WB0720 WS8B000401
NY 1811E2AE175B2CC1 WB WB0720 WS8B000411
NY 180398421D1E95AC WB WB0720 WS8B000413
NY 1804D9971A8C728F WB WB0720 WS8B000415
NY 1815CC480293D5DB WB WB0720 WS8B000441
NY 18204E3909DF90A3 WB WB0720 WS8B000443
NY 1819E9A9036D132C WB WB0720 WS8B000468
NY 182E80520C69CC67 WB WB0720 WS8B000471
NY 181A605D1B799562 WB WB0720 WS8B000473
NY 182534A4088C0901 WB WB0720 WS8B000476
NY 182508AB0597AC3B WB WB0720 WS8B000493
NY 1833F78D18A8D0E6 WB WB0720 WS8B000524
NY 182F9C560D102D32 WB WB0720 WS8B000535
NY 182FE88D08916620 WB WB0720 WS8B000540
NY 1830B3B418B55676 WB WB0720 WS8B000548
NY 182264E5128DA89A WB WB0720 WS8I000307
NY 18314CB10D1F93F8 WB WB0820 TOFF000119
NY 183B0B1516CC80C8 WB WB0820 TOFF000122
NY 1819E9A61C26BDA7 WB WB0820 WS8B000468
NY 17B6EFAD008737F5 WB WB0820 WSTS000014
NY 18104EB80EEC82EF WB WB0820 WSTS000051
NY 181C3CF50797A90A WB WB0820 WSTS000055
NY 1815CBDF028ABC14 WB WB0820 WSTS000056
NY 1829966907409084 WB WB0820 WSTS000057
NY 17E657E81ADCDFE4 WB WB0830 WSTS000039
NY 17EFF38805D1430C WB WB0830 WSTS000043
NY 18031B3E19486761 WB WB0830 WSTS000046
NY 1800BEE4191C1B45 WB WB0830 WSTS000050
NY 181C3CD70B255060 WB WB0830 WSTS000055
NY 183AC1AC048CEBF3 WB WB0830 WSTS000061
NY 17F5FC081C4D837F WB WB0840 NOST000271
NY 17F68C4907A38BD7 WB WB0840 NOST000275
NY 17FAC3411D088954 WB WB0840 NOST000288
NY 1819E9B3184BFA20 WB WB0840 WS8B000468
NY 182508BC17AB3FDE WB WB0840 WS8B000493
NY 182FE89C1A89F8B7 WB WB0840 WS8B000540
NY 182264F10BBCCE31 WB WB0840 WS8I000307
NY 17E6562C1B46E4CD WB WB0840 WSTS000039
NY 18063D0B0189BF11 WB WB0840 WSTS000046
NY 1800E7F30C7DE071 WB WB0840 WSTS000050
NY 18104EBF1899911D WB WB0840 WSTS000051
NY 182052B8138C5EAB WB WB0840 WSTS000055
NY 1815CBE403F1522A WB WB0840 WSTS000056
NY 182E81230D947285 WB WB0840 WSTS000057
NY 1825A8B4050AC926 WB WB0840 WSTS000058
NY 183B0B3D0130A622 WB WB0840 WSTS000061
NY 1833FFF607E1229D WB WB0840 WSTS000062
NY 183127D0118B8088 WB WB0840 WSTS000063
NY 18321B8B01D1DDC1 WB WB0840 WSTS000064
NY 17F6663C1FB97016 WB WB0870 WS8B000373
NY 17E657EA064338A2 WB WB0870 WSTS000039
NY 17EFF3840280BCCC WB WB0870 WSTS000043
NY 18031B3F147AC3A2 WB WB0870 WSTS000046
NY 181C3CD1170CA459 WB WB0870 WSTS000055
NY 183AC1C502C91867 WB WB0870 WSTS000061
NY 17B6EFAE0B79D792 WB WB0900 WSTS000014
NY 181BC4FB194A390D WB WB0900 WSTS000055
NY 183AC1AC18FD05CF WB WB0900 WSTS000061
NY 177E97AC05456002 WB WB0910 A06M025453
NY 181B48460EBD724A WB WB0910 WSTS000055
NY 1829968504E28612 WB WB0910 WSTS000057
NY 183AC1A203D8D6B9 WB WB0910 WSTS000061
NY 17B6EFAE1FF2B425 WB WB0920 WSTS000014
NY 181C3CCF17C160C6 WB WB0920 WSTS000055
NY 183AC18C01E003B4 WB WB0920 WSTS000061
NY 1819E9A90F687615 WB WB0940 WS8B000468
NY 17E657FD19DED6AE WB WB0940 WSTS000039
NY 17F2935C0CAB20DE WB WB0940 WSTS000043
NY 18031B4507712C96 WB WB0940 WSTS000046
NY 1800BEDF02B614F5 WB WB0940 WSTS000050
NY 18104EC90D674E44 WB WB0940 WSTS000051
NY 181C3CD11F409BBD WB WB0940 WSTS000055
NY 1815CBE113E011FC WB WB0940 WSTS000056
NY 182996A010DC1DFF WB WB0940 WSTS000057
NY 183AC17D1EDB58A4 WB WB0940 WSTS000061
NY 1819E9B61769DD73 WB WB0950 WS8B000468
NY 17E657FE18982280 WB WB0950 WSTS000039
NY 17EFF38E02A9203F WB WB0950 WSTS000043
NY 18031B4413F19B92 WB WB0950 WSTS000046
NY 1800BEE21CF45542 WB WB0950 WSTS000050
NY 18104EBC1A502B0A WB WB0950 WSTS000051
NY 181C3CCB172EC79B WB WB0950 WSTS000055
NY 1815CBE81CDDA42A WB WB0950 WSTS000056
NY 183AC19A150B3F03 WB WB0950 WSTS000061
NY 17B6EFAF17EDB46A WB WB0960 WSTS000014
NY 181C3CCD1F403412 WB WB0960 WSTS000055
NY 183AC1911DCB20D6 WB WB0960 WSTS000061
NY 18314CB119CD9908 WB WB0970 TOFF000119
NY 183B0B0B161F507C WB WB0970 TOFF000122
NY 1819E9BB1DEB6DEA WB WB0970 WS8B000468
NY 17E658000744B5E1 WB WB0970 WSTS000039
NY 17F2935F17CA4579 WB WB0970 WSTS000043
NY 18031B5810DE385B WB WB0970 WSTS000046
NY 1800BEE41265A7D8 WB WB0970 WSTS000050
NY 18104EB50F6C19E5 WB WB0970 WSTS000051
NY 1802A1AF1D15D0F6 WB WB0970 WSTS000052
NY 181C3CCF18A25948 WB WB0970 WSTS000055
NY 1815CBD813E68799 WB WB0970 WSTS000056
NY 18299666011412CE WB WB0970 WSTS000057
NY 182190B107786E08 WB WB0970 WSTS000059
NY 183DE8150D65B415 WB WB0970 WSTS000069
NY 17F3B73D092B4283 WB WB0980 TOFF000076
NY 18063C421241FE5A WB WB0980 TOFF000088
NY 18104ED9037C0A73 WB WB0980 TOFF000099
NY 181DF58A13353842 WB WB0980 TOFF000109
NY 182CE95B0E61834E WB WB0980 TOFF000112
NY 18314CAB0B51E797 WB WB0980 TOFF000119
NY 183B0B0C1BF09E86 WB WB0980 TOFF000122
NY 17EC2004111ADB1D WB WB0980 WS8B000345
NY 17BA08BB06322FA4 WB WB0990 TOFF000026
NY 17F3B74F1E488E52 WB WB0990 TOFF000076
NY 18104ED4125908F5 WB WB0990 TOFF000099
NY 181DF58D021E9F86 WB WB0990 TOFF000109
NY 18314CAB12720FBA WB WB0990 TOFF000119
NY 183B0B0418FC2BB3 WB WB0990 TOFF000122
NY 161750120ECA5E5A WB WB1010 19980710082854S101702A073636AWB1010
NY 17E658021976720D WB WB1020 WSTS000039
NY 17EFF392188518D2 WB WB1020 WSTS000043
NY 18031B431C21ADE5 WB WB1020 WSTS000046
NY 181C3CC90BD2EB57 WB WB1020 WSTS000055
NY 183AC17A022BB450 WB WB1020 WSTS000061
NY 17E658030E0E4658 WB WB1030 WSTS000039
NY 17EFF38C04EE96FC WB WB1030 WSTS000043
NY 18031B4404501E6C WB WB1030 WSTS000046
NY 17E658041E70F5FC WB WB1040 WSTS000039
NY 17EFF38B11073D43 WB WB1040 WSTS000043
NY 18031B490D66E6FC WB WB1040 WSTS000046
NY 17E6580613FC183E WB WB1050 WSTS000039
NY 17EFF3860446A804 WB WB1050 WSTS000043
NY 18031B4B0865055F WB WB1050 WSTS000046
NY 181C3CC41DD64553 WB WB1050 WSTS000055
NY 183AC1A71ACA9B60 WB WB1050 WSTS000061
NY 18031B5C10E2794F WB WB1060 WSTS000046
NY 17E658091BD1E38A WB WB1070 WSTS000039
NY 17EFF398053E0FA4 WB WB1070 WSTS000043
NY 18031B471234006F WB WB1070 WSTS000046
NY 1800BEE512D2C44E WB WB1070 WSTS000050
NY 181C3CC50797627B WB WB1070 WSTS000055
NY 183AC1A4130FB812 WB WB1070 WSTS000061
NY 17E658470DCF65C8 WB WB1080 TOFF000067
NY 17F3B7530CB74BEF WB WB1080 TOFF000076
NY 18063C2E1FBE5252 WB WB1080 TOFF000088
NY 18104F1910468A7E WB WB1080 TOFF000099
NY 181DF5961B515E0D WB WB1080 TOFF000109
NY 182CE9770C982E56 WB WB1080 TOFF000112
NY 18314CAC13D5C113 WB WB1080 TOFF000119
NY 183B0B1200545349 WB WB1080 TOFF000122
NY 17E658481B0AD1F9 WB WB1090 TOFF000067
NY 17F3B75B04496A8B WB WB1090 TOFF000076
NY 18063C681E19FBC8 WB WB1090 TOFF000088
NY 181DF58A1831B87D WB WB1090 TOFF000109
NY 182CE9641E571C62 WB WB1090 TOFF000112
NY 18314CB108C3B21E WB WB1090 TOFF000119
NY 183B0B170D4A05FC WB WB1090 TOFF000122
NY 17E658491A659997 WB WB1100 TOFF000067
NY 17F3B74B0FD3EB87 WB WB1100 TOFF000076
NY 18063C2A0DCAFFC3 WB WB1100 TOFF000088
NY 18104ECD00DF33CC WB WB1100 TOFF000099
NY 18038A7317FF4CE6 WB WB1100 TOFF000101
NY 18204F520D3BBE96 WB WB1100 TOFF000109
NY 1815CBBC128B209F WB WB1100 TOFF000111
NY 182E812F077DDBF7 WB WB1100 TOFF000112
NY 1825351F025970A3 WB WB1100 TOFF000117
NY 18314CAC06DAB158 WB WB1100 TOFF000119
NY 183BD30D193582E9 WB WB1100 TOFF000122
NY 182508C0009A2791 WB WB1100 WS8B000493
NY 182FE8A119EB323F WB WB1100 WS8B000540
NY 182264F510B513B1 WB WB1100 WS8I000307
NY 17E6580B0834A199 WB WB1110 WSTS000039
NY 17EFF3A103A29AB3 WB WB1110 WSTS000043
NY 18031B471DB0036B WB WB1110 WSTS000046
NY 1800BEE615FD9A10 WB WB1110 WSTS000050
NY 181C3CC01DF20ED6 WB WB1110 WSTS000055
NY 183AC1A41AB6A840 WB WB1110 WSTS000061
NY 17B6EFB00FA2278C WB WB1120 WSTS000014
NY 181BC4FC0590BD70 WB WB1120 WSTS000055
NY 183AC18802D3917E WB WB1120 WSTS000061
NY 17F5FC1F1872F751 WB WB1130 NOST000271
NY 17F68C530A0368C7 WB WB1130 NOST000275
NY 17FAC34D060D2F01 WB WB1130 NOST000288
NY 1819E9B01255AAF5 WB WB1130 WS8B000468
NY 182508B908A66659 WB WB1130 WS8B000493
NY 182FE89F0C3DCC0C WB WB1130 WS8B000540
NY 182264F500BCCA0E WB WB1130 WS8I000307
NY 17E6562D1E211910 WB WB1130 WSTS000039
NY 18063D14070D9ED2 WB WB1130 WSTS000046
NY 1800E7ED01718B51 WB WB1130 WSTS000050
NY 18104EC80BF36DD2 WB WB1130 WSTS000051
NY 182052B701C86330 WB WB1130 WSTS000055
NY 1815CBD3028990C0 WB WB1130 WSTS000056
NY 182E81190D0F9522 WB WB1130 WSTS000057
NY 1825A8B61E132806 WB WB1130 WSTS000058
NY 183B0CAA0DED47F4 WB WB1130 WSTS000061
NY 1833FFF70CF81D11 WB WB1130 WSTS000062
NY 17C993CF04790E4D WB WB1140 WSTS000025
NY 17C0A358070D962E WB WB1140 WSTS000032
NY 17D3A36414AF8130 WB WB1140 WSTS000035
NY 17E6562F0079A811 WB WB1140 WSTS000039
NY 17E656D50497257B WB WB1270 TOFF000067
NY 181DF5901B2478B6 WB WB1270 TOFF000109
NY 183B0B06055E7F50 WB WB1270 TOFF000122
NY 17D7161C06E6BFAE WB WB1280 TOFF000059
NY 17CD0AEF050D4C36 WB WB1280 WS8B000188
NY 17F429F603347F8C WB WB1290 TOFF000076
NY 18063C4512A8DBE5 WB WB1290 TOFF000088
NY 17FEAF8C0F4507FC WB WB1290 TOFF000090
NY 18104F001A82A2D2 WB WB1290 TOFF000099
NY 1802C39B10003785 WB WB1290 TOFF000100
NY 18204F50133EEF4F WB WB1290 TOFF000109
NY 180F309103DE08AE WB WB1290 TOFF000110
NY 1815CBC80E0A07D8 WB WB1290 TOFF000111
NY 182E81350E35C518 WB WB1290 TOFF000112
NY 1825351E1A39AD79 WB WB1290 TOFF000117
NY 18314CAB1D0CD034 WB WB1290 TOFF000119
NY 183B0B0F0ABE6647 WB WB1290 TOFF000122
NY 17EC20040FB5B229 WB WB1290 WS8B000345
NY 182508BC07CE0D85 WB WB1290 WS8B000493
NY 182FE89F190AB8F6 WB WB1290 WS8B000540
NY 182264F606CDDD86 WB WB1290 WS8I000307
NY 17F429F81B636042 WB WB1300 TOFF000076
NY 17E6580C1C1EDF66 WB WB1310 WSTS000039
NY 17EFF394094612F1 WB WB1310 WSTS000043
NY 18031B4E14EB6841 WB WB1310 WSTS000046
NY 181C3CBE09DCAD91 WB WB1310 WSTS000055
NY 183AC1820A650D6B WB WB1310 WSTS000061
NY 17E6580E095E8853 WB WB1340 WSTS000039
NY 17EFF3951E44C4D3 WB WB1340 WSTS000043
NY 18031B5F18E00183 WB WB1340 WSTS000046
NY 181C3CC406753F55 WB WB1340 WSTS000055
NY 183AC1DC0BC41F26 WB WB1340 WSTS000061
NY 18031B4A0412385B WB WB1350 WSTS000046
NY 17D7B9B01E44C020 WB WB5040 WS8B000222
NY 17F42B4105DCA057 WB WB5040 WS8B000319
NY 18204EB91EC9358A WB WB5040 WS8B000444
NY 183B0D381BD50164 WB WB5040 WS8B000520
NY 17E65815113FC4DD WB WB5090 WSTS000039
NY 1804D66E00920D38 WB WB5090 WSTS000046
NY 181B482217C8CC17 WB WB5090 WSTS000055
NY 183AC1D2122C81BA WB WB5090 WSTS000061
NY 17E658170381461E WB WB5120 WSTS000039
NY 18031B550608B4EE WB WB5120 WSTS000046
NY 181B481D0D0DF37B WB WB5120 WSTS000055
NY 1825A8BE03B40135 WB WB5120 WSTS000058
NY 183AC1B80F13FC35 WB WB5120 WSTS000061
NY 17E656330D4C86A5 WB WB5260 WSTS000039
NY 17F12D2003A67C35 WB WB5260 WSTS000043
NY 1804D66E09600D74 WB WB5260 WSTS000046
NY 18104ED001A5E5B0 WB WB5260 WSTS000051
NY 181B483902A2C31C WB WB5260 WSTS000055
NY 183AC1B002D07BED WB WB5260 WSTS000061
NY 1819E9D216BAE89A WB WB5270 WS8B000468
NY 17E6581815414CAF WB WB5270 WSTS000039
NY 17EFF39B1BB8B230 WB WB5270 WSTS000043
NY 18031B64037FC1E6 WB WB5270 WSTS000046
NY 18104EC80F091F37 WB WB5270 WSTS000051
NY 181B481A044DDC45 WB WB5270 WSTS000055
NY 183AC1BE12F0BC5F WB WB5270 WSTS000061
NY 18341F590EDA153B WB WB5270 WSTS000065
NY 1819E9DB050D93E2 WB WB5280 WS8B000468
NY 17E656340E3DE83C WB WB5280 WSTS000039
NY 17EFF39707D66D94 WB WB5280 WSTS000043
NY 18031B4E0A0BE859 WB WB5280 WSTS000046
NY 18104ECF12EF2AA4 WB WB5280 WSTS000051
NY 181B4824159489A2 WB WB5280 WSTS000055
NY 18163D2B1C5C9CE5 WB WB5280 WSTS000056
NY 183AC1DA0A0F34A9 WB WB5280 WSTS000061
NY 1819E9CE1C08E759 WB WB5290 WS8B000468
NY 17E658191FEC3935 WB WB5290 WSTS000039
NY 17F47B0D0AD85488 WB WB5290 WSTS000043
NY 18031B611CB11690 WB WB5290 WSTS000046
NY 18104ED9034E19E8 WB WB5290 WSTS000051
NY 181B481C080B1E88 WB WB5290 WSTS000055
NY 183AC1E908892539 WB WB5290 WSTS000061
NY 18341F6018E8CCF8 WB WB5290 WSTS000065
NY 17E656D80CA4C2AB WB WB5320 TOFF000067
NY 17F9D78F04D4D6F0 WB WB5340 MKUR000032
NY 17F3B75B03B61B8C WB WB5340 TOFF000076
NY 18063C48073C1821 WB WB5340 TOFF000088
NY 1800BCB11DAC404E WB WB5340 TOFF000090
NY 1811E17C16C548D4 WB WB5340 TOFF000099
NY 18204F4E09BD932C WB WB5340 TOFF000109
NY 180F308F05BBE908 WB WB5340 TOFF000110
NY 1815CBC41E9ECD6B WB WB5340 TOFF000111
NY 182E80BE12B48951 WB WB5340 TOFF000112
NY 1825350D068EB174 WB WB5340 TOFF000117
NY 18314CB90134CC0E WB WB5340 TOFF000119
NY 183B0B1B0ABDFA4C WB WB5340 TOFF000122
NY 1833FFD007819E9D WB WB5340 TOFF000126
NY 17EC201A1AFA8989 WB WB5340 WS8B000345
NY 182509020B72643B WB WB5340 WS8B000493
NY 182FE8E91FB09F86 WB WB5340 WS8B000540
NY 1822650401D8C0BA WB WB5340 WS8I000307
NY 17F42B2F06543E61 WB WB5570 WS8B000319
NY 17EAE2F8089CF998 WB WB5570 WS8B000334
NY 180708F21550CB34 WB WB5570 WS8B000362
NY 18111B6715B5819C WB WB5570 WS8B000411
NY 1815CC701862E0F0 WB WB5570 WS8B000441
NY 18204EC002F7AD36 WB WB5570 WS8B000444
NY 1819E9D8100C76EE WB WB5570 WS8B000468
NY 182534CF1843DAC9 WB WB5570 WS8B000476
NY 182508EF19331EAB WB WB5570 WS8B000493
NY 182265071C5F2DD9 WB WB5570 WS8I000307
NY 17E6582300ED4DF9 WB WB7020 WSTS000039
NY 181B482308EFF1DB WB WB7020 WSTS000055
NY 1829967F04389766 WB WB7020 WSTS000057
NY 1825A8C005020929 WB WB7020 WSTS000058
NY 183AC1960E37DD65 WB WB7020 WSTS000061
NY 177E95C00FE6F6C0 WB WB7030 A06M025453
NY 181B482516FFEECA WB WB7030 WSTS000055
NY 183AC1E616B3A958 WB WB7030 WSTS000061
NY 17D372DD042630B7 WB WB7040 WSTS000035
NY 181B481F1BBB06A5 WB WB7040 WSTS000055
NY 183AC1D51DD58D4D WB WB7040 WSTS000061
NY 177E95DA027DD0B6 WB WB7230 A06M025453
NY 181DF5AD1CE07ADA WB WB7230 TOFF000109
NY 17D372D8179BF8A7 WB WB7270 WSTS000035
NY 181B48311C2115E4 WB WB7270 WSTS000055
NY 183AC1BB0E7DB729 WB WB7270 WSTS000061
NY 17D372D909A78CFE WB WB7280 WSTS000035
NY 181B48271F50AB63 WB WB7280 WSTS000055
NY 183AC1B60EFBB612 WB WB7280 WSTS000061
NY 177E95D116F98055 WB WB7290 A06M025453
NY 181B482602EC0984 WB WB7290 WSTS000055
NY 183AC1981F318662 WB WB7290 WSTS000061
NY 177E95D112253231 WB WB7300 A06M025453
NY 177E95D600CF89C6 WB WB7320 A06M025453
NY 180760180079CDF5 WB WB7320 WSTS000046
NY 181B48280797DBEA WB WB7320 WSTS000055
NY 183AC1BD01A3E5A0 WB WB7320 WSTS000061
NY 177E95D405ED2BFA WB WB7330 A06M025453
NY 1807601913BC34F4 WB WB7330 WSTS000046
NY 181B48221360CA92 WB WB7330 WSTS000055
NY 183AC19D154DBA79 WB WB7330 WSTS000061
NY 177E95D71EEC3BE1 WB WB7340 A06M025453
NY 1807601C03C093F7 WB WB7340 WSTS000046
NY 181B4837037FE738 WB WB7340 WSTS000055
NY 183AC1EE0E3635AA WB WB7340 WSTS000061
NY 177E95DB1644FF30 WB WB7360 A06M025453
NY 181B482D00B5B92C WB WB7360 WSTS000055
NY 183AC1DD1F730DB2 WB WB7360 WSTS000061
NY 17D372DE14DB5C15 WB WB7370 WSTS000035
NY 181B482A0DF62AFA WB WB7370 WSTS000055
NY 183AC1C91FC69517 WB WB7370 WSTS000061
NY 177E95E50526E634 WB WB7380 A06M025453
NY 181B482A14F9B1D5 WB WB7380 WSTS000055
NY 183AC1C007EFCEF0 WB WB7380 WSTS000061
NY 177E95E102DA3E20 WB WB7381 A06M025453
NY 181B48241E46F8D4 WB WB7381 WSTS000055
NY 183AC19F1F2FEB7F WB WB7381 WSTS000061
NY 17D372E304B63DA2 WB WB7390 WSTS000035
NY 181B48391E85C989 WB WB7390 WSTS000055
NY 183AC1F10034CD45 WB WB7390 WSTS000061
NY 17D372DE15F73A29 WB WB7400 WSTS000035
NY 181B4830012488BA WB WB7400 WSTS000055
NY 183AC1E01C10149E WB WB7400 WSTS000061
NY 17D372DB139DD0C8 WB WB7410 WSTS000035
NY 181B482D0DE532E3 WB WB7410 WSTS000055
NY 183AC1CC19F7DF9E WB WB7410 WSTS000061
NY 17D372D7072C27F3 WB WB7420 WSTS000035
NY 18031B52052A63EE WB WB7420 WSTS000046
NY 181B482D0AA6E018 WB WB7420 WSTS000055
NY 183AC1C21F3FB82C WB WB7420 WSTS000061
NY 160D4EF80F3B0F44 WB WB7430 19980507164320S101702A072243AWB7430
NY 1819E9DD181A4657 WB WB7440 WS8B000468
NY 17D372E40D10EA5F WB WB7440 WSTS000035
NY 181B48200C9F72D8 WB WB7440 WSTS000055
NY 1827682612A2BF5A WB WB7440 WSTS000060
NY 183AC1E20ECFF34A WB WB7440 WSTS000061
NY 1819E9DA1D273222 WB WB7441 WS8B000468
NY 17D372E0058EF4F5 WB WB7441 WSTS000035
NY 181B481A0C85C3E1 WB WB7441 WSTS000055
NY 183AC1CF15313E29 WB WB7441 WSTS000061
NY 159A1DE21F3ED35A WB WB7460 19960504154757S101702A053306AWB7460
NY 177E95E91BBF48AA WB WB7470 A06M025453
NY 181B483C12088EBD WB WB7470 WSTS000055
NY 183AC1A20DF58A73 WB WB7470 WSTS000061
NY 15CFB55412A35ABA WB WB7490 19970410154641S101702A063035AWB7490
NY 17BF5DCF0D4AB25A WB WB7520 WSTS000023
NY 181B4833128C6D23 WB WB7520 WSTS000055
NY 1825A89C1BE2FC0A WB WB7520 WSTS000058
NY 183AC1F310D58820 WB WB7520 WSTS000061
NY 160D4EF81F5FD208 WB WB7530 19980507164321S101702A072243AWB7530
NY 178CF04C070E79F4 WB WB7540 WSTS000001
NY 181B482F0A727620 WB WB7540 WSTS000055
NY 183AC1E30D458B40 WB WB7540 WSTS000061
NY 17C1906501B32E11 WB WB7560 WSTS000034
NY 18104ED41238DDBD WB WB7560 WSTS000051
NY 181B48320DD3F4BC WB WB7560 WSTS000055
NY 183AC1CF003A4F98 WB WB7560 WSTS000061
NY 17B4D2BB1EBE88E4 WB WB7561 WSTS000019
NY 18104ED21C9722AD WB WB7561 WSTS000051
NY 181B48431C7CC611 WB WB7561 WSTS000055
NY 183AC1C5185269D1 WB WB7561 WSTS000061
NY 15EE81370B064606 WB WB7580 19971023144206S101702A067639AWB7580
NY 15FCCEDD0C7772C8 WB WB7580 19980122145713S101702A069894AWB7580
NY 177E95F117458ED9 WB WB7650 A06M025453
NY 181DF59E1E040216 WB WB7650 TOFF000109
NY 18314CB41ADAC1C1 WB WB7650 TOFF000119
NY 183B0B1A032F89EE WB WB7650 TOFF000122
NY 1833FFD610A9E51C WB WB7650 TOFF000126
NY 177E95F512C8053D WB WB7690 A06M025453
NY 17D7162D047FE477 WB WB7720 TOFF000059
NY 181DF5A510135A87 WB WB7720 TOFF000109
NY 17C993D615F70343 WB WB7730 WSTS000025
NY 1807601D13CE201F WB WB7730 WSTS000046
NY 181B483F043C505C WB WB7730 WSTS000055
NY 183AC1F60130A53A WB WB7730 WSTS000061
NY 17D372DB0A5DFAF0 WB WB7770 WSTS000035
NY 181B483811734D84 WB WB7770 WSTS000055
NY 183AC1E50FA35B58 WB WB7770 WSTS000061
NY 17D372DC12202830 WB WB7871 WSTS000035
NY 181B4832085E397F WB WB7871 WSTS000055
NY 183AC1C909050118 WB WB7871 WSTS000061
NY 177E96191AA7B6A1 WB WB7880 A06M025453
NY 181B482C1BB27209 WB WB7880 WSTS000055
NY 17E65872038FA072 WB WB8010 TOFF000067
NY 18063C7300805687 WB WB8010 TOFF000088
NY 181DF5A802121E7C WB WB8010 TOFF000109
NY 17D7162F03F72F9A WB WB8650 TOFF000059
NY 181DF5BC0208ABD5 WB WB8650 TOFF000109
NY 183B0B3A0FA06533 WB WB8650 TOFF000122
NY 17D372DC0D51D04A WB WB8720 WSTS000035
NY 181B48360D2346B8 WB WB8720 WSTS000055
NY 183AC1D402AA64E6 WB WB8720 WSTS000061
NY 1618F1011CA15BC4 WB WB9993 A06M000357
NY 180915970A3C7C0D WB YWB0082 WS8B00042658C556F1
NY 1819BB65112A33FB WB YWB0082 WS8B00046859510BA3
NY 17F1316B166C291E WB YWB0082 WSTS00004357FCFAC3
NY 17E8841A040A663F WB YWB0082 WSTS00004457B43111
NY 180318F308466952 WB YWB0082 WSTS00004658931E2C
NY 17F6593507F0991B WB YWB0082 WSTS00004758282BE3
NY 17FABFFE13D5C4BC WB YWB0082 WSTS000050584D1824
NY 180FA9B91C108FD2 WB YWB0082 WSTS00005158FC9483
NY 181C3CA70424A8BD WB YWB0082 WSTS00005559660E59MVS
NY 1815CA811B0232E9 WB YWB0082 WSTS000056592FFC68
NY 1827DA1D03FFDB00 WB YWB0082 WSTS00005759C7789AMVS
NY 183577D302791E02 WB YWB0082 WSTS0000615A39A807MVS
NY 18070830187C28F1 WB YWB0083 WS8B00038058B41EE5
NY 1819BB6608D94976 WB YWB0083 WS8B00046859510BA9
NY 1824188306484C98 WB YWB0083 WS8B00049859A7FB84MVS
NY 180E173313327007 WB YWB0083 WSTS00005158EF63E7
NY 1806624A0FE52F38 WB YWB0083 WSTS00005458AEAFE5
NY 181D3635191FC8E7 WB YWB0083 WSTS000055596E3C20MVS
NY 1815CA82150A2EA3 WB YWB0083 WSTS000056592FFC72
NY 1827DA281F81C0C3 WB YWB0083 WSTS00005759C7789EMVS
NY 1825050B0AA408CF WB YWB0083 WSTS00005859AFBB9DMVS
NY 183577CD126E7FDF WB YWB0083 WSTS0000615A39A80BMVS
NY 1830F8E201B51E3F WB YWB0083 WSTS0000625A13F154MVS
NN 14E0F99F08B8A78A WB YWB5012
NN 14E0F9A010F87214 WB YWB5013
NY 17E656C50DE4DA58 WB YWB530 WS8B000312
NY 17F21E040606E9F2 WB YWB530 WS8B000320
NY 18111BB006506198 WB YWB530 WS8B000411
NY 1815CC8806CB9A1F WB YWB530 WS8B000441
NY 18204EA51BB20439 WB YWB530 WS8B000443
NY 182535190875479B WB YWB530 WS8B000476
NY 182508E2112C51DA WB YWB530 WS8B000493
NY 182265901BEE32D8 WB YWB530 WS8I000307
NY 176D7FFE0C4873F1 WB YWB5402 A06M02510853AC420A
NY 18191FF500770133 WB YWB5402 WSTS000055594BF347MVS
NY 183577CF1AB9E03F WB YWB5402 WSTS0000615A39A826MVS
NY 176D80010157D0D5 WB YWB5403 A06M02510853AC4207
NY 18191FF3015FBA1A WB YWB5403 WSTS000055594BF33EMVS
NY 183577DD1FE73077 WB YWB5403 WSTS0000615A39A82CMVS
NY 176D80010C2BC972 WB YWB5417 A06M02510853AC422D
NY 18191FDA177E875B WB YWB5417 WSTS000055594BF2BEMVS
NY 183577DB152862F5 WB YWB5417 WSTS0000615A39A861MVS
NY 18191FDB160E209F WB YWB5419 WSTS000055594BF2C6MVS
NY 18191FC617F86461 WB YWB5425 WSTS000055594BF204MVS
NY 18191FCA0F8C1B80 WB YWB5427 WSTS000055594BF219MVS
NY 17E516BD07F41266 WB YWB551 WS8B00028657977132
NY 1819BA6F13A88258 WB YWB551 WS8B00044259510292MVS
NY 18357891106A6C56 WB YWB551 WS8B0005185A39AE85
NY 18357892075BD5AE WB YWB551 WS8B0005185A39AE85MVS
NY 1540B336191D323E WB YWB5901 19941013170117S101702A037988AYWB5901
NY 159A1DCA139F52F2 WB YWB5901 19960504154552S101702A053306AYWB5901
NY 17ECA3510D42101C WB YWB709 WS8B00031857D6C4E1
NY 17E653B21AAE9238 WB YWBBODA WS8B00028657A1D413
NY 17ECA08D03882188 WB YWBBODA WS8B00031857D6ADA9
NY 180A2785079897FA WB YWBBODA WS8B00040958CE50CE
NY 181AAA1316770361 WB YWBBODA WS8B0004425958DDB0MVS
NY 17F4CAE81D124201 WB YWBBOPR WS8B000318581B1EC5
NY 17E79C6D161BB342 WB YWBBOPR WS8B00032957AC99AE
NY 1800BA7C017744A1 WB YWBBOPR WS8B000359587F3ED3
NY 180315C2111911C7 WB YWBBOPR WS8B00038058930376
NY 17F7CDF615592B44 WB YWBBOPR WS8B000386583462DC
NY 180FCC600B7A0A2C WB YWBBOPR WS8B00040958FDB730
NY 181487570A9CBF92 WB YWBBOPR WS8B00044159256574
NY 18175DBA16D08A79 WB YWBBOPR WS8B000465593D32E5
NY 1819E244056C3EAA WB YWBBOPR WS8B000468595251AE
NY 17DE50AF0834DC9E WB YWBCTA WS8B000286575E9C03
NY 17EDB65E0059AE7C WB YWBCTA WS8B00031857DFC824
NY 1803164F11652F4E WB YWBCTA WS8B00038058930814
NY 180A28B1196278DC WB YWBCTA WS8B00040958CE5AAC
NY 181ACBE5166D9350 WB YWBCTA WS8B0004425959F984
NY 17DFB6400FBE5AA6 WB YWBDGP WS8B000286576A566C
NY 180314D608B4A6D9 WB YWBDGP WS8B0003805892FBB2
NY 1819B9520C3A9E96 WB YWBDGP WS8B0004425950FA22MVS
NY 17DFB6410B7D2895 WB YWBDGP2 WS8B000286576A5674
NY 180314DA0AABE2EE WB YWBDGP2 WS8B0003805892FBD7
NY 1819B95600C828CF WB YWBDGP2 WS8B0004425950FA29MVS
NY 1815C9D81095EDE8 WB YWBEBSM WS8B000441592FF6DF
NY 1819BB8A110EB8EB WB YWBEBSM WS8B00046859510C08
NY 1820EDD80560A16C WB YWBEBSM WS8B000479598D6B36
NY 17DF44FA0A7FAA50 WB YWBEBSM WSTS00003957669F37
NY 17EDDBD30DE30F06 WB YWBEBSM WSTS00004357E1024F
NY 180318F21D2A9178 WB YWBEBSM WSTS00004658931E1A
NY 17F65A4E11AB0A37 WB YWBEBSM WSTS0000485828352D
NY 17F65CBF1FC4A84A WB YWBEBSM WSTS000049582849AF
NY 17FA24C616E2F012 WB YWBEBSM WSTS00005058480203
NY 180E17360852A7CA WB YWBEBSM WSTS00005158EF63FE
NY 1819DC7C0F04665C WB YWBEBSM WSTS000055595220FAMVS
NY 182C8DBA0B6EB050 WB YWBEBSM WSTS00005759EEEEAF
NY 183577DB03681FC4 WB YWBEBSM WSTS0000615A39A815MVS
NY 183DE8061292451E WB YWBEBSM WSTS0000695A80713EMVS
NY 17DE592B1DF94E8E WB YWBIO WS8B000286575EE61A
NY 17EDB68C09DA7D57 WB YWBIO WS8B00031857DFC9A9
NY 180315740B349F48 WB YWBIO WS8B000380589300E4
NY 17FB60D20F9B8F02 WB YWBIO WS8B00040058525D43
NY 17FBD7E30BD021C3 WB YWBIO WS8B0004015856440E
NY 18093A250578AC7C WB YWBIO WS8B00040958C6898F
NN 181AAB810DA424A7 WB YWBIO WS8B0004425958E985MVS
NY 17D70EA10E338102 WB YWBITV TOFF0000595721BC72
NY 17EDDBA5064280AA WB YWBITV TOFF00007657E100DB
NY 181A0DF707DD2360 WB YWBITV TOFF0001095953C015MVS
NY 1829546706589227 WB YWBITV TOFF00011259D3E350MVS
NY 17DE50E70D9A610C WB YWBMAS WS8B000286575E9E49
NY 17ECA1220B217446 WB YWBMAS WS8B00031857D6B290
NY 18093A5208A498C5 WB YWBMAS WS8B00040958C68B0C
NY 181AAB9F1CC56848 WB YWBMAS WS8B0004425958EA9AMVS
NY 17F3AC651CAB1AFE WB YWBMOV WS8B0003185811C948
NY 1800BA3A01C8307E WB YWBMOV WS8B000359587F3CA8
NN 1803E705175E5CF5 WB YWBMOV WS8B0003805899DEB4
NY 17E653D71522AA54 WB YWBN100 WS8B00028657A1D54A
NY 17E0A3CE1788E1A5 WB YWBSA2 WS8B00028657721F2F
NY 17ECA17310A6C525 WB YWBSA2 WS8B00031857D6B537
NY 180315951FD0A79D WB YWBSA2 WS8B00038058930202
NY 180991520F243939 WB YWBSA2 WS8B00040958C964D3
NY 181E0A5906FDFCEB WB YWBSA2 WS8B00044259752FC0MVS
NY 1807038F02E95D9A WB YWBSA4 WS8B00038058B3F8A5
NY 180BBC5A03DC0DA2 WB YWBSA4 WS8B00040958DBA2D3
NY 181AAC0B13DEE03C WB YWBSA4 WS8B0004425958EE28MVS
NY 18252FDE14A20557 WB YWBSA4 WS8B00047659B12272MVS
NY 17E6549412925009 WB YWBSUM WS8B00028657A1DB75
NY 17F21CBC110AF1E9 WB YWBSUM WS8B0003185804B0D3
NY 18093C381477987A WB YWBSUM WS8B00040958C69AFA
NY 181AAC51064064A8 WB YWBSUM WS8B0004425958F075MVS
NY 178CBAB501330F34 WB YWBSYM WS8B00001654B22C92
NY 1804CF620777EF19 WB YWBSYM WS8B00038058A17C05
NY 1803163913531F47 WB YWBWRK WS8B0003805893075A
NY 17F9315D0B3CF01C WB YWBWRK WS8B00039058400836
NY 18093C761D12727A WB YWBWRK WS8B00040958C69CFF
NY 181ACC0B10C55764 WB YWBWRK WS8B0004425959FAC1
AY 1827E6B60DE283C1 WB YWBWRK WS8B00046959C7E7A6MVS
AY 183578830C7FFDAC WB YWBWRK WS8B0005185A39AE0E
AY 183578840B87DA99 WB YWBWRK WS8B0005185A39AE0EMVS
NY 15FBE54C00E0778E WB YYWBBPU 19980116193842S101702A069660AYYWBBPU
NY 17E657BB1056E9C9 WC WC5010 OTXO000054
NY 17F21DD31F8CFB22 WC WC5010 OTXO000058
NY 18072A2A1A022FFA WC WC5010 OTXO000060
NY 18104EED145B9FE5 WC WC5010 OTXO000066
NY 181CE485169A2292 WC WC5010 OTXO000070
NY 1815CC1D0ACA3EBE WC WC5010 OTXO000073
NY 1817624A17ABF493 WC WC5010 OTXO000077
NY 182E81261B5A42EE WC WC5010 OTXO000081
NY 182534F7102E2A77 WC WC5010 OTXO000085
NY 182F1A3A0A95304A WC WC5010 OTXO000090
NY 1819E9E01D0E6840 WC WC5010 WS8B000468
NY 182F9C94064FEB21 WC WC5010 WS8B000535
NY 182FE927161E2B2E WC WC5010 WS8B000540
NY 18226582085840F8 WC WC5010 WS8I000307
NY 183AC19014C8320D WC WC5010 WSTS000061
NY 183400000C9259CF WC WC5010 WSTS000062
NY 17E657BC01D55B18 WC WC5050 OTXO000054
NY 17F21DDB10B76A14 WC WC5050 OTXO000058
NY 18063C3110AB2DE5 WC WC5050 OTXO000060
NY 181B491716D92453 WC WC5050 OTXO000070
NY 182E8135026D808D WC WC5050 OTXO000081
NY 182534F9089DAC0A WC WC5050 OTXO000085
NY 183AC1CC1CD093D1 WC WC5050 WSTS000061
NY 181B491D188A5C56 WC WC7100 OTXO000070
NY 183AC1EA171EFCC6 WC WC7102 WSTS000061
NY 183AC1D61D3CB858 WC WC7103 WSTS000061
NY 181B492D0C2A296B WC WC7104 OTXO000070
NY 181B49310388ED64 WC WC7105 OTXO000070
NY 181B493117F6065C WC WC7106 OTXO000070
NY 181C62A911B5737E WC WC7108 OTXO000070
NY 181C62AA0A829F61 WC WC7109 OTXO000070
NY 17D4BDDF025C7B54 WC WC7220 OTXO000045
NY 181B4934145BD3C5 WC WC7220 OTXO000070
NY 1825350C14C8C654 WC WC7220 OTXO000085
NY 183AC1FC07FC070B WC WC7220 WSTS000061
NY 17A7996B0D814A9D WC WC7230 OTXO000014
NY 177B7D0C1BFE777F WC WC7240 A06M027069
NY 181B49361607A8BA WC WC7240 OTXO000070
NY 18253502188B9652 WC WC7240 OTXO000085
NY 183AC1DA1EE75450 WC WC7240 WSTS000061
NY 177B7D0E0491C98D WC WC7250 A06M027069
NY 1793AA2019911369 WC WC7260 OTXO000008
NY 181B49381EFEE30C WC WC7260 OTXO000070
NY 182534F204C6EC26 WC WC7260 OTXO000085
NY 183AC1E705C4FF6C WC WC7260 WSTS000061
NY 17D4BDE90BAD8C6B WC WC7280 OTXO000045
NY 17F21DCE0943C5B8 WC WC7280 OTXO000058
NY 181B493C12EAF752 WC WC7280 OTXO000070
NY 182E812317ED996C WC WC7280 OTXO000081
NY 183AC1FE14094BDC WC WC7280 WSTS000061
NY 177878600624DAE6 WC WC7310 A06M027069
NY 181B49420E6C84E6 WC WC7310 OTXO000070
NY 1825350F0030FE42 WC WC7310 OTXO000085
NY 183AC1DD0A52AD3D WC WC7310 WSTS000061
NY 177878680513A2BF WC WC7320 A06M027069
NY 181B49430BCC42C0 WC WC7320 OTXO000070
NY 18253506015FA880 WC WC7320 OTXO000085
NY 183AC1D4058AAF50 WC WC7320 WSTS000061
NY 181B494518030B67 WC WC7400 OTXO000070
NY 181B4948181A9F77 WC WC7402 OTXO000070
NY 181B49491627AA7C WC WC7403 OTXO000070
NY 181C62AB0FC25C60 WC WC7404 OTXO000070
NY 181C62AC058006DA WC WC7405 OTXO000070
NY 17D4BDE10FB50A25 WC WC7500 OTXO000045
NY 18063C221C20E6C5 WC WC7500 OTXO000060
NY 181B49491D6D930B WC WC7500 OTXO000070
NY 1825350418934F44 WC WC7500 OTXO000085
NY 183AC1B20B8F877D WC WC7500 WSTS000061
NY 177B7D111F810F11 WC WC7530 A06M027069
NY 181B494D01568648 WC WC7530 OTXO000070
NY 182534F41F8BF991 WC WC7530 OTXO000085
NY 183AC1F11FD2B616 WC WC7530 WSTS000061
NY 17E657C81CE6E037 WC WC8120 OTXO000054
NY 18104EFF187EAA32 WC WC8120 OTXO000066
NY 181B495210AC32F4 WC WC8120 OTXO000070
NY 1815CC3708A02B0D WC WC8120 OTXO000073
NY 1819E9E4135D7F2A WC WC8120 WS8B000468
NY 17F21DBF0195247E WC WC8170 OTXO000058
NY 18063C2F01A69907 WC WC8170 OTXO000060
NY 18104EFC01B91721 WC WC8170 OTXO000066
NY 181B495411CD518C WC WC8170 OTXO000070
NY 1815CC21197C9DC0 WC WC8170 OTXO000073
NY 182E81160F3767AF WC WC8170 OTXO000081
NY 1825351303342F49 WC WC8170 OTXO000085
NY 1819E9E912AF2F8C WC WC8170 WS8B000468
NY 17E657CC0503B1C6 WC WC8401 OTXO000054
NY 17F21DBA1F13E3B4 WC WC8401 OTXO000058
NY 18072A2C1E82348A WC WC8401 OTXO000060
NY 18104EEF1D7198E1 WC WC8401 OTXO000066
NY 181D2645049A5697 WC WC8401 OTXO000070
NY 1815CC321B23A971 WC WC8401 OTXO000073
NY 182E81451AA9D856 WC WC8401 OTXO000081
NY 1825350B07522C4B WC WC8401 OTXO000085
NY 1819E9E117A5CB9F WC WC8401 WS8B000468
NY 182F9C7D0755188A WC WC8401 WS8B000535
NY 1822658105CC1901 WC WC8401 WS8I000307
NY 183AC2080516E17A WC WC8401 WSTS000061
NY 1834000A06F6C60B WC WC8401 WSTS000062
NY 183AC2050E9A7F8F WC WC8402 WSTS000061
NY 183AC1F61168ED96 WC WC8403 WSTS000061
NY 17E657CD0A58BA81 WC WC8410 OTXO000054
NY 17F3AD630156D3E6 WC WC8410 OTXO000058
NY 18063C2C12B355CA WC WC8410 OTXO000060
NY 18104EFA0D57BBEC WC WC8410 OTXO000066
NY 182051610EC67759 WC WC8410 OTXO000070
NY 1815CC300E92FA2C WC WC8410 OTXO000073
NY 182E812C17B3ADBB WC WC8410 OTXO000081
NY 1825350A05B3B5C4 WC WC8410 OTXO000085
NY 182FE9271C78D4CD WC WC8410 WS8B000540
NY 183B0C9A0EFD390B WC WC8410 WSTS000061
NY 1833FFFD102242EA WC WC8410 WSTS000062
NY 17F1F4EE0F6BAE2B WF WF0280 WSSW000043
NY 17F6B7C306E33831 WF WF0280 WSSW000046
NY 17E08AA010384A51 WF WF0280 WSSW000064
NY 1804B3C41E9469FF WF WF0280 WSSW000069
NY 17F7757F11C00378 WF WF0280 WSSW000077
NY 180C66741D294472 WF WF0280 WSSW000085
NY 1822D6A611A1A93F WF WF0280 WSSW000086
NY 181D331C016E0835 WF WF0280 WSSW000089
NY 17F011F01151C0AF WF WF0300 WSSW000043
NY 17F6B7C31E75074D WF WF0300 WSSW000046
NY 17E08AAD165B6D7E WF WF0300 WSSW000064
NY 17FFA31E1A371168 WF WF0300 WSSW000069
NY 180C667A1D3AEE28 WF WF0300 WSSW000085
NY 1822D69C1D9BF47D WF WF0300 WSSW000086
NY 181D33200B9EAFF6 WF WF0300 WSSW000089
NY 17F01BA30CDEFD01 WF WF0310 WSSW000043
NY 17F6B7C414880E8C WF WF0310 WSSW000046
NY 17E08AB604CCD574 WF WF0310 WSSW000064
NY 1806608116F7B849 WF WF0310 WSSW000069
NY 17F775790920F1A2 WF WF0310 WSSW000077
NY 180C667E044AA0F0 WF WF0310 WSSW000085
NY 181D333212EC01EA WF WF0310 WSSW000089
NY 17F0120818D71E36 WF WF0320 WSSW000043
NY 17F6B7C50812EB73 WF WF0320 WSSW000046
NY 17E08AC60AFB310F WF WF0320 WSSW000064
NY 18038E9A0164CFC1 WF WF0320 WSSW000069
NY 17F77574122CE0AC WF WF0320 WSSW000077
NY 180C668510AA7600 WF WF0320 WSSW000085
NY 181D3334036367CB WF WF0320 WSSW000089
NY 17F1F4F00D3B936D WF WF0350 WSSW000043
NY 17F6B7CB0D43627B WF WF0350 WSSW000046
NY 17E08B0410799D5C WF WF0350 WSSW000064
NY 18038E9C16053EE5 WF WF0350 WSSW000069
NY 17F7756C175C6118 WF WF0350 WSSW000077
NY 180C668F1F297930 WF WF0350 WSSW000085
NY 181D333C1BE0E1B1 WF WF0350 WSSW000089
NY 180184F516B11620 WF WF5410 WSSW000005
NY 17F5424F0E3C4DA1 WF WF5410 WSSW000043
NY 17F6B7E70A49CE6A WF WF5410 WSSW000046
NY 1806DFB013F87BBD WF WF5410 WSSW000069
NY 17EF4D760DD5EC6A WF WF5410 WSSW000073
NY 17F03A7E0B780DE0 WF WF5410 WSSW000074
NY 17F107CA1893BFF0 WF WF5410 WSSW000075
NY 17F892681E40DE49 WF WF5410 WSSW000077
NY 17F81DAC0E413DEF WF WF5410 WSSW000078
NY 1800ECCC0E288DB8 WF WF5410 WSSW000083
NY 1804B32804CC125E WF WF5410 WSSW000084
NY 1811DF49016C2500 WF WF5410 WSSW000085
NY 18250FC50DE7802F WF WF5410 WSSW000086
NY 181E44E302A4CCCF WF WF5410 WSSW000089
NY 181646700BE59260 WF WF5410 WSSW000090
NY 180BC02E0240FF58 WF WF5410 WSSW000091
NY 180FD8DB1475606E WF WF5410 WSSW000092
NY 15D532B813FF3C80 WF WF8010 19970515140836S101702A063893AWF8010
NY 15D5368918C3FE2D WF WF8010 19970515162454S101702A063893AWF8010
NY 15DF1AD70559923A WF WF8010 19970717145832S101702A065379AWF8010
NY 17ED9325083C45D7 WF YWF64CA WSSW00004357DEA0AA
NY 17F6878E1A421617 WF YWF64CA WSSW0000465829B0C2
NY 17E1A6F210B0D3D9 WF YWF64CA WSSW000064577A9CFA
NY 1803178B0D3FBDD7 WF YWF64CA WSSW00006958931268
NY 180A332D044BF7FF WF YWF64CA WSSW00008558CEB299
NY 18250EDA10EEAF8A WF YWF64CA WSSW00008659B00DFB
NY 18198EA9091BA94A WF YWF64CA WSSW000089594F9457
NY 17E972E002C3EC8F WF YWFCB02 WSSW00003857BC040B
NY 17F29E710C7EB572 WF YWFCB02 WSSW0000435808F0DA
NY 180660B80CB6185A WF YWFCB02 WSSW00006958AEA2AC
NY 180CAFFF08A04C4A WF YWFCB02 WSSW00008558E39EB2
NY 181993381EA5F596 WF YWFCB02 WSSW000089594FBA69MVS
NY 18276DE209737070 WF YWFCB02 WSSW00009959C3F210MVS
NY 182D67AB0731EA23 WF YWFCB02 WSSW00010059F604C2MVS
NY 183426890855F4AA WF YWFCB02 WSSW0001055A2E9AD7
NY 1834268F0517CA32 WF YWFCB02 WSSW0001055A2E9AD7MVS
NY 17F29E680D9BE978 WF YWFM537 WSSW0000435808F092
NY 17F6879202E7E765 WF YWFM537 WSSW0000465829B0E1
NY 18052B911F28B386 WF YWFM537 WSSW00006958A48155
NY 17EC7C221097E18D WF YWFM537 WSSW00007157D57C31
NY 17FEB52102C5D6FD WF YWFM537 WSSW000081586E4AEB
NY 180CAFFF1DEE1D8E WF YWFM537 WSSW00008558E39EB7
NY 181992D90B2A84CB WF YWFM537 WSSW000089594FB758MVS
NY 18273B0903C49A50 WF YWFM537 WSSW00009959C24789MVS
NY 182D678519607A65 WF YWFM537 WSSW00010059F6038CMVS
NY 1834276301104AED WF YWFM537 WSSW0001055A2EA204
NY 183427641BA304C7 WF YWFM537 WSSW0001055A2EA204MVS
NY 17F0195E064B09B1 WF YWFSWC WS8B000357
NY 1801B6CC00803A76 WF YWFSWC WSSW000005
NY 17F5424807BCCD23 WF YWFSWC WSSW000043
NY 17F6B7B80F6E842A WF YWFSWC WSSW000046
NY 1806DFC10F42CCE3 WF YWFSWC WSSW000069
NY 17EF4D9A118195B3 WF YWFSWC WSSW000073
NY 17F03AC71EEF4D75 WF YWFSWC WSSW000074
NY 17F107CB10B8DB9A WF YWFSWC WSSW000075
NY 17F8926C1A75F8F4 WF YWFSWC WSSW000077
NY 17F81DC012503B34 WF YWFSWC WSSW000078
NY 1800ECCB00F86846 WF YWFSWC WSSW000083
NY 1804B0430E72DE54 WF YWFSWC WSSW000084
NY 1811DFA102DD4450 WF YWFSWC WSSW000085
NY 18250FB111198E07 WF YWFSWC WSSW000086
NY 181E44EE166A3740 WF YWFSWC WSSW000089
NY 180BC05B11AD373C WF YWFSWC WSSW000091
NY 180FD8E5056D53DD WF YWFSWC WSSW000092
NY 182834FF04A794FE WF YWFSWC WSSW000104
NY 17EFF1AA191162DE WI YWI0087 TOFF00007657F28089
NY 17F7A62C0C9AB394 WI YWI0087 TOFF0000875833150E
NY 1804D0C01AC3D13F WI YWI0087 TOFF00008858A1871A
NY 1800E9A20699B9CE WI YWI0087 TOFF0000905880CA48
NY 180E172E1D4BF445 WI YWI0087 TOFF00009958EF63C0
NY 18038A70086E9E5C WI YWI0087 TOFF0001015896D63B
NY 181D5A3D0CCE3601 WI YWI0087 TOFF000109596F6A5DMVS
NY 1815CB9002222DA5 WI YWI0087 TOFF000111593004B5
NY 1828FDCA15B511F3 WI YWI0087 TOFF00011259D10C51MVS
NY 183B09F516A89508 WI YWI0087 TOFF0001225A68637AMVS
NY 17E19D331291BFE6 WI YWI0087 WS8B000313577A4B43
NY 1809433B02F33409 WI YWI0087 WS8B00042858C6D5CA
NY 1819BBA11374D8E4 WI YWI0087 WS8B00046859510C2E
AY 17CFE03A059375CC WI YWI5951 WS8I00015256E570B8
AY 17FF771B08CF35B5 WI YWI5951 WS8I0002415874A622
AY 1817AFC90F6EC510 WI YWI5951 WS8I000268593FE342
AY 18321BFB0A765B6C WI YWI5951 WS8I0003205A1D7B52
AY 18321BFE0061DD9F WI YWI5951 WS8I0003205A1D7B52MVS
AY 18330E6E17E9E911 WI YWI5951 WS8I0003435A256D39
AY 17CFE03A1B94E629 WI YWI5952 WS8I00015256E570BD
AY 17FF771C17B8DC79 WI YWI5952 WS8I0002415874A62F
AY 1817AFCA0E2031A5 WI YWI5952 WS8I000268593FE34B
AY 18321C03017AC1B3 WI YWI5952 WS8I0003205A1D7B91
AY 18321C0608073C7E WI YWI5952 WS8I0003205A1D7B91MVS
AY 18330E6F12CCC760 WI YWI5952 WS8I0003435A256D40
AY 17CFE03B0A9DBFEE WI YWI5953 WS8I00015256E570C2
AY 17FF771D1A1F33F8 WI YWI5953 WS8I0002415874A635
AY 1817AFCB135F1EEE WI YWI5953 WS8I000268593FE353
AY 18321C0B10F3220E WI YWI5953 WS8I0003205A1D7BD6
AY 18321C0F047F1754 WI YWI5953 WS8I0003205A1D7BD6MVS
AY 18330E7006B6D5EF WI YWI5953 WS8I0003435A256D44
NY 17CFE03C0048A772 WI YWI5954 WS8I00015256E570C7
AY 17FF771E1E75D8A9 WI YWI5954 WS8I0002415874A641
AY 1817AFCD04DE6BE3 WI YWI5954 WS8I000268593FE360
AY 18321C131CD549AE WI YWI5954 WS8I0003205A1D7C0C
AY 18321C180D39B292 WI YWI5954 WS8I0003205A1D7C0CMVS
AY 18330E7013DC72CB WI YWI5954 WS8I0003435A256D47
AY 17CFE03C1AFFBBE1 WI YWI5955 WS8I00015256E570CC
AY 17FF772008FA439C WI YWI5955 WS8I0002415874A64D
AY 1817AFCE0AE7D9E3 WI YWI5955 WS8I000268593FE368
AY 18321C20177E9087 WI YWI5955 WS8I0003205A1D7C47
AY 18321C231B6BAEC8 WI YWI5955 WS8I0003205A1D7C47MVS
AY 18330E701AAF0F8C WI YWI5955 WS8I0003435A256D49
AY 17CFE03D08400F20 WI YWI5956 WS8I00015256E570D2
AY 17FF772103D435E0 WI YWI5956 WS8I0002415874A652
AY 1817AFCF016D77C8 WI YWI5956 WS8I000268593FE371
AY 18321C2706DF01FA WI YWI5956 WS8I0003205A1D7C79
AY 18321C2A14DC6A36 WI YWI5956 WS8I0003205A1D7C79MVS
AY 18330E71096038CD WI YWI5956 WS8I0003435A256D4B
AY 17CFE03D1FA380A9 WI YWI5957 WS8I00015256E570D7
AY 17FF772411D19763 WI YWI5957 WS8I0002415874A65E
AY 1817AFD00A189CCD WI YWI5957 WS8I000268593FE37B
AY 18321C890BF8FB5B WI YWI5957 WS8I0003205A1D7FF7
AY 18321C8D0890A39C WI YWI5957 WS8I0003205A1D7FF7MVS
AY 18330E7108C72FCD WI YWI5957 WS8I0003435A256D4D
AY 17CFE03E100D3474 WI YWI5958 WS8I00015256E570DC
AY 17FF772503B19491 WI YWI5958 WS8I0002415874A666
AY 1817AFD102327F89 WI YWI5958 WS8I000268593FE383
AY 18321C910F99CEC1 WI YWI5958 WS8I0003205A1D8033
AY 18321C941B20AEFB WI YWI5958 WS8I0003205A1D8033MVS
AY 18330E710C4DE25C WI YWI5958 WS8I0003435A256D50
AY 17CFE03F043D2EC7 WI YWI5959 WS8I00015256E570E1
AY 17FF772510327044 WI YWI5959 WS8I0002415874A674
AY 1817AFD40663889E WI YWI5959 WS8I000268593FE39D
AY 18321C9A01B820C1 WI YWI5959 WS8I0003205A1D8082
AY 18321C9D02F84785 WI YWI5959 WS8I0003205A1D8082MVS
AY 18330E711B4C0B13 WI YWI5959 WS8I0003435A256D54
AY 17CFE03914019E4C WI YWI595A WS8I00015256E570B2
AY 17FF771A1CA86F80 WI YWI595A WS8I0002415874A61A
AY 1817AFC8039BE815 WI YWI595A WS8I000268593FE337
AY 18321BEE1FDE7A75 WI YWI595A WS8I0003205A1D7AEA
AY 18321BF1162B8558 WI YWI595A WS8I0003205A1D7AEAMVS
AY 18330E6E11748E96 WI YWI595A WS8I0003435A256D37
NN 165361EE15ACF46D WI YWIASL A06M002543
AY 17CFE0520FB13724 WI YWINS01 WS8I00015256E5718A
AY 17EC9B1F07A44FAD WI YWINS01 WS8I00022357D68018
AY 1801FBDB042EEB8B WI YWINS01 WS8I0002415889C6AA
AY 180C5F3E18D106B6 WI YWINS01 WS8I00026558E0F951
AY 181873E016605288 WI YWINS01 WS8I00026859464FB1MVS
AY 1827DB770637A060 WI YWINS01 WS8I00029559C78926MVS
AY 17CFE05212619DDC WI YWINS02 WS8I00015256E5718C
AY 17EC9B21089AB3BE WI YWINS02 WS8I00022357D68027
AY 1801FBDB0D9F9709 WI YWINS02 WS8I0002415889C6AC
AY 180C5F4503E746ED WI YWINS02 WS8I00026558E0F987
AY 181873E6099E5205 WI YWINS02 WS8I00026859464FB6MVS
AY 1827DB760EF31B6F WI YWINS02 WS8I00029559C7892FMVS
AY 17CFE053032A0468 WI YWINS03 WS8I00015256E57190
AY 17EC9B22189ED4CD WI YWINS03 WS8I00022357D68037
AY 1801FBDB141B4DD1 WI YWINS03 WS8I0002415889C6AE
AY 180C5F4A09013A95 WI YWINS03 WS8I00026558E0F9B1
AY 181873EF139796A9 WI YWINS03 WS8I00026859464FC0MVS
AY 1827DB781C745302 WI YWINS03 WS8I00029559C7893AMVS
AY 17CFE05313FE1157 WI YWINS04 WS8I00015256E57194
AY 17EC9B2502108AAC WI YWINS04 WS8I00022357D6804A
AY 1801FBDB1F85C719 WI YWINS04 WS8I0002415889C6B1
AY 17F90D131999EF75 WI YWINS04 WS8I000257583ED7CF
AY 180C5F4D11B59A92 WI YWINS04 WS8I00026558E0F9CC
AY 181873FA0E1AEF28 WI YWINS04 WS8I00026859464FC8MVS
AY 1827DB7E06EE4F7D WI YWINS04 WS8I00029559C78947MVS
AY 17CFE054014D9976 WI YWINS05 WS8I00015256E57198
AY 17EC9B260A49AD23 WI YWINS05 WS8I00022357D68057
AY 1801FBDC0CEF763B WI YWINS05 WS8I0002415889C6B3
AY 180C5F530F262C68 WI YWINS05 WS8I00026558E0F9FF
AY 181874030D3E0FB5 WI YWINS05 WS8I00026859464FD3MVS
AY 1827DB7E07F2440D WI YWINS05 WS8I00029559C78950MVS
AY 17CFE055174B3B60 WI YWINS06 WS8I00015256E571A6
AY 17EC9B28094B14DC WI YWINS06 WS8I00022357D68066
AY 1801FBE11D075D60 WI YWINS06 WS8I0002415889C6B8
AY 180C5F560F3847AD WI YWINS06 WS8I00026558E0FA18
AY 1818740D10396227 WI YWINS06 WS8I00026859464FE3MVS
AY 1827DB7F0FC48985 WI YWINS06 WS8I00029559C78959MVS
AY 17CFE05612B16A21 WI YWINS07 WS8I00015256E571A9
AY 17EC9B2916F8D2B0 WI YWINS07 WS8I00022357D68074
AY 1801FBE205570271 WI YWINS07 WS8I0002415889C6E7
AY 180C5F5C196B3B99 WI YWINS07 WS8I00026558E0FA4E
AY 181874160DC4BBFC WI YWINS07 WS8I00026859464FEFMVS
AY 1827DB7C156E829B WI YWINS07 WS8I00029559C78966MVS
AY 17CFE05613902EC9 WI YWINS08 WS8I00015256E571AD
AY 17EC9B2A1E7BDCE1 WI YWINS08 WS8I00022357D6807D
AY 1801FBE51C423FE4 WI YWINS08 WS8I0002415889C6E9
AY 180C5F6218774F92 WI YWINS08 WS8I00026558E0FA7F
AY 1818741E0D7F9B9E WI YWINS08 WS8I00026859464FFDMVS
AY 1827DB8009B71C5F WI YWINS08 WS8I00029559C7898DMVS
AY 17CFE05702EF0AE6 WI YWINS09 WS8I00015256E571B1
AY 17EC9B2C0C49719D WI YWINS09 WS8I00022357D6808B
AY 1801FBE70E71576C WI YWINS09 WS8I0002415889C707
AY 180C5F6A16EF5B6E WI YWINS09 WS8I00026558E0FABE
AY 1818742915D45182 WI YWINS09 WS8I0002685946500EMVS
AY 1827DB821DB68241 WI YWINS09 WS8I00029559C78995MVS
AY 17CFE0571E7F23ED WI YWINS10 WS8I00015256E571B5
AY 17EC9B2D0202DF67 WI YWINS10 WS8I00022357D68092
AY 1801FBE9060B1956 WI YWINS10 WS8I0002415889C714
AY 180C5F6D1BC6ED66 WI YWINS10 WS8I00026558E0FADA
AY 1818742F0E823CBF WI YWINS10 WS8I0002685946501DMVS
AY 1827DB830546529D WI YWINS10 WS8I00029559C789A1MVS
NN 160E854E06F2C4B6 WI YWISTIN 19980515094949S101702M000839AYWISTIN
NY 15299A4D0D85802E WK WK7140 19940519174927S101702A034385AWK7140
NY 152E2C0F0D3E8A0C WK WK7140 19940617193658S101702M000399AWK7140
NY 15315002191658A6 WK WK7140 19940707190603S101702M000457AWK7140
NY 15B8ADC50C7EE520 WK WK7160 19961115025420S101702M000661AWK7160
NY 15ED937A079717CF WK WK7160 19971017165350S101702M000724AWK7160
NY 15F2EE111CB6708A WK WK7160 19971120182636S101702M000725AWK7160
NY 155481B513EFB4C4 WK WK8320 19950216173938S101702M000536AWK8320
NY 1562CF4A047F148C WK WK8320 19950518S101702M000545AWK8320
NY 157D367104E7F570 WK WK8320 19951102S101702M000606AWK8320
NY 152E2936090A9106 WK YWK018A 19940617175335S101702M000399AYWK018A
NY 154CD3FD077E2D72 WK YWK018A 19941229210352S101702M000523AYWK018A
NY 15548095052968DE WK YWK018A 19950216165749S101702M000536AYWK018A
NY 157D35281996BE02 WK YWK018A 19951102S101702M000606AYWK018A
NY 152E29361B1B9CE4 WK YWK018C 19940617175335S101702M000399AYWK018C
NY 154CD3FD16D4C18A WK YWK018C 19941229210359S101702M000523AYWK018C
NY 155480960089624C WK YWK018C 19950216165754S101702M000536AYWK018C
NY 157D35281954CBAC WK YWK018C 19951102S101702M000606AYWK018C
NY 152E293613FB2262 WK YWK018D 19940617175336S101702M000399AYWK018D
NY 15230D4D0FDA8DEA WK YWK019A 19940408012536S101702M000391AYWK019A
NY 152E293D07EC1490 WK YWK019A 19940617175336S101702M000399AYWK019A
NY 153A1FB40C7534B4 WK YWK019A 19940901204355S101702M000463AYWK019A
NY 153C50CA1965CDCE WK YWK019A 19940915192823S101702M000465AYWK019A
NY 154CD40117BDD0FE WK YWK019A 19941229210426S101702M000523AYWK019A
NY 1554809715724046 WK YWK019A 19950216165801S101702M000536AYWK019A
NY 157D352211EDEC88 WK YWK019A 19951102S101702M000606AYWK019A
NY 159336D01D2F0658 WK YWK019A 19960321174238S101702A052874AYWK019A
NY 15BF5A860CA1B6AA WK YWK019A 19961227141204S101702M000749AYWK019A
NY 15C281F6172116CE WK YWK019A 19970116155229S101702M000715AYWK019A
NY 15C289171C461306 WK YWK019A 19970116200309S101702M000715AYWK019A
NY 15D6426E0F805263 WK YWK019A 19970522081337S101702Z312321AYWK019A
NY 15D766971C249544 WK YWK019A 19970529142348S101702M000773AYWK019A
NY 15E87BFD02BB791E WK YWK019A 19970915071921S101702Z333341AYWK019A
NY 15ED91F20BBF8F2A WK YWK019A 19971017155338S101702M000724AYWK019A
NY 15F2E9AF192A89D6 WK YWK019A 19971120155139S101702M000725AYWK019A
NY 160A0D4E15188AB6 WK YWK019A 19980416231839S101702M000838AYWK019A
NY 160A27E11AA26250 WK YWK019A 19980417151206S101702M000838AYWK019A
NY 152E297D031B19F0 WK YWKATRE 19940617180548S101702M000399AYWKATRE
NY 15B8AAE51C670F08 WK YWKATRE 19961115011453S101702M000661AYWKATRE
NY 15230DC105A18DB6 WK YWKLUBO 19940408012610S101702M000391AYWKLUBO
NY 152443080B96BD0A WK YWKLUBO 19940415175633S101702M000426AYWKLUBO
NY 15276C0313E71C24 WK YWKLUBO 19940505203528S101702M000394AYWKLUBO
NY 152E29A116DF3BA2 WK YWKLUBO 19940617180626S101702M000399AYWKLUBO
NY 152F1C740764EDA0 WK YWKLUBO 19940623185421S101702M000479AYWKLUBO
NY 15314FB106E16624 WK YWKLUBO 19940707185047S101702M000457AYWKLUBO
NY 15326CA60869D666 WK YWKLUBO 19940714204856S101702M000458AYWKLUBO
NY 1533810219DF3D8E WK YWKLUBO 19940721173958S101702M000459AYWKLUBO
NY 1536D50217A70978 WK YWKLUBO 19940811215857S101702M000461AYWKLUBO
NY 1539038217A75048 WK YWKLUBO 19940825190037S101702M000490AYWKLUBO
NY 153A1FCB0128194A WK YWKLUBO 19940901204338S101702M000463AYWKLUBO
NY 153C4FED10319F00 WK YWKLUBO 19940915185724S101702M000465AYWKLUBO
NY 153D6F8A1E470A7A WK YWKLUBO 19940922222855S101702M000497AYWKLUBO
NY 153F9FF21D79A22C WK YWKLUBO 19941006204333S101702M000466AYWKLUBO
NY 1541CE4E034E348C WK YWKLUBO 19941020175037S101702M000468AYWKLUBO
NY 15440279002CF798 WK YWKLUBO 19941103182227S101702M000469AYWKLUBO
NY 15451DB007982042 WK YWKLUBO 19941110191853S101702M000470AYWKLUBO
NY 154632D4079ECF94 WK YWKLUBO 19941117163613S101702M000471AYWKLUBO
NY 154636FA01B8CE70 WK YWKLUBO 19941117190715S101702M000471AYWKLUBO
NY 1547515518621B6C WK YWKLUBO 19941124193246S101702M000517AYWKLUBO
NY 15486AA51390266E WK YWKLUBO 19941201191819S101702M000472AYWKLUBO
NY 15497EF20F2DFBAE WK YWKLUBO 19941208160857S101702M000473AYWKLUBO
NY 154AA1E811DA3346 WK YWKLUBO 19941215214321S101702M000474AYWKLUBO
NY 154CD39114BB1BD2 WK YWKLUBO 19941229204640S101702M000523AYWKLUBO
NY 15548022014E59DA WK YWKLUBO 19950216164131S101702M000536AYWKLUBO
NY 155BB8B11A64E6B6 WK YWKLUBO 19950403S101702Z183880AYWKLUBO
NY 155D21E70606CCF2 WK YWKLUBO 19950412S101702M000541AYWKLUBO
NY 1562CCAF091A0732 WK YWKLUBO 19950518S101702M000545AYWKLUBO
NY 156EE48B0D5577D2 WK YWKLUBO 19950803S101702M000562AYWKLUBO
NY 156F77A1012A0986 WK YWKLUBO 19950807S101702Z202630AYWKLUBO
NY 156FF7DE023A92A6 WK YWKLUBO 19950810S101702Z203284AYWKLUBO
NY 1570E6F0116B7A98 WK YWKLUBO 19950816S101702Z204003AYWKLUBO
NY 157117D01C550C1C WK YWKLUBO 19950817S101702M000563AYWKLUBO
NY 1571B8221D7CF820 WK YWKLUBO 19950821S101702Z204586AYWKLUBO
NY 1572047F1266E6B4 WK YWKLUBO 19950823S101702Z205049AYWKLUBO
NY 157234AE0AF2D858 WK YWKLUBO 19950824S101702Z205219AYWKLUBO
NY 1572D2C4161C86D2 WK YWKLUBO 19950828S101702Z205521AYWKLUBO
NY 1572F91013E253CA WK YWKLUBO 19950829S101702Z205812AYWKLUBO
NY 15731FD10E2F5DB8 WK YWKLUBO 19950830S101702Z205812AYWKLUBO
NY 157352AA00959484 WK YWKLUBO 19950831S101702M000564AYWKLUBO
NY 157369250CB40BD8 WK YWKLUBO 19950901S101702Z205812AYWKLUBO
NY 1573EBC21FF01278 WK YWKLUBO 19950904S101702Z205812AYWKLUBO
NY 15740FBE1BEFB354 WK YWKLUBO 19950905S101702Z205812AYWKLUBO
NY 1574367903570626 WK YWKLUBO 19950906S101702Z205812AYWKLUBO
NY 15757D561D15D79C WK YWKLUBO 19950914S101702M000565AYWKLUBO
NY 157615851B5DFD5C WK YWKLUBO 19950918S101702Z208465AYWKLUBO
NY 1576947E1C5CEC06 WK YWKLUBO 19950921S101702Z208465AYWKLUBO
NY 15784B1706052C2A WK YWKLUBO 19951002S101702Z208465AYWKLUBO
NY 1578CC480073E7E8 WK YWKLUBO 19951005S101702M000566AYWKLUBO
NY 157D35861AFB94B0 WK YWKLUBO 19951102S101702M000606AYWKLUBO
NY 157E5CB11478658C WK YWKLUBO 19951110S101702M000609AYWKLUBO
NY 15807B901D590FA6 WK YWKLUBO 19951123S101702Z220705AYWKLUBO
NY 15819A1F108897F6 WK YWKLUBO 19951130S101702M000610AYWKLUBO
NY 1583CE661708D828 WK YWKLUBO 19951214S101702M000611AYWKLUBO
NY 15883682031B7C4A WK YWKLUBO 19960111S101702M000636AYWKLUBO
NY 159221760CC1CCC8 WK YWKLUBO 19960314201344S101702M000638AYWKLUBO
NY 159680411228A4B0 WK YWKLUBO 19960411152854S101702M000639AYWKLUBO
NY 159687A61FCF961A WK YWKLUBO 19960411200336S101702M000639AYWKLUBO
NY 159AE8020193BFD8 WK YWKLUBO 19960509161344S101702M000640AYWKLUBO
NY 159BA1F5002EEF7E WK YWKLUBO 19960514071832S101702Z248142AYWKLUBO
NY 159BD8DD1D7F15B2 WK YWKLUBO 19960515160311S101702M000686AYWKLUBO
NY 159E34DA071B830E WK YWKLUBO 19960530161041S101702M000689AYWKLUBO
NY 15A06D5609DD801E WK YWKLUBO 19960613192725S101702M000641AYWKLUBO
NY 15A4CCF1077CA010 WK YWKLUBO 19960711152018S101702M000657AYWKLUBO
NY 15AA50BA13A9AA44 WK YWKLUBO 19960815172257S101702M000658AYWKLUBO
NY 15AEB87A10D7B646 WK YWKLUBO 19960912180055S101702M000659AYWKLUBO
NY 15BD029414D62C9C WK YWKLUBO 19961212161508S101702M000662AYWKLUBO
NY 15BF5B201C831F72 WK YWKLUBO 19961227141203S101702M000749AYWKLUBO
NY 15C7098105898B82 WK YWKLUBO 19970214111257S101702M000716AYWKLUBO
NY 15CB4D7B1E778ED6 WK YWKLUBO 19970313143807S101702M000717AYWKLUBO
NY 15CB55680D691504 WK YWKLUBO 19970313192346S101702M000717AYWKLUBO
NY 15D0CE4E1AEEC7C2 WK YWKLUBO 19970417150052S101702M000718AYWKLUBO
NY 15D53537014A9362 WK YWKLUBO 19970515152437S101702M000719AYWKLUBO
NY 15D7673B0D306348 WK YWKLUBO 19970529142336S101702M000773AYWKLUBO
NY 15D99DF10AB82CF9 WK YWKLUBO 19970612164801S101702M000720AYWKLUBO
NY 15DCB7B5078F6FAA WK YWKLUBO 19970702102459S101702Z319251AYWKLUBO
NY 15DE004008CD7B17 WK YWKLUBO 19970710141830S101702M000721AYWKLUBO
NY 15E12285118DBA4C WK YWKLUBO 19970730125913S101702Z325019AYWKLUBO
NY 15E23FFE1EC34D1E WK YWKLUBO 19970806151636S101702Z325846AYWKLUBO
NY 15E3862F086264F6 WK YWKLUBO 19970814173305S101702M000722AYWKLUBO
NY 15E7E6CB1C51E32E WK YWKLUBO 19970911135336S101702M000723AYWKLUBO
NY 15ED92271DE4258E WK YWKLUBO 19971017155255S101702M000724AYWKLUBO
NY 15F2EA41089840FA WK YWKLUBO 19971120155133S101702M000725AYWKLUBO
NY 15F636C518F3708E WK YWKLUBO 19971211152904S101702M000726AYWKLUBO
NY 16001FE90EC6BEE8 WK YWKLUBO 19980212171239S101702M000836AYWKLUBO
NY 16036EC101548857 WK YWKLUBO 19980305180826S101702M000837AYWKLUBO
NY 160A0DF216E00150 WK YWKLUBO 19980416231747S101702M000838AYWKLUBO
NY 160A289012C37417 WK YWKLUBO 19980417151059S101702M000838AYWKLUBO
NY 160B40250812FA08 WK YWKLUBO 19980424142817S101702Z371584AYWKLUBO
NY 160E85DC07288951 WK YWKLUBO 19980515095019S101702M000839AYWKLUBO
NY 1612CD2F07087A62 WK YWKLUBO 19980611152859S101702M000840AYWKLUBO
NY 161750951D99044E WK YWKLUBO 19980710084245S101702M000841AYWKLUBO
NY 16175A61187B4FF2 WK YWKLUBO 19980710141605S101702M000841AYWKLUBO
NY 17D2334A129FEC6A WL WL7390 WSAW000059
NY 1805283C161200DE WL WL7390 WSAW000086
NY 182D5EEC1A184F46 WL WL8600 WSAW000104
NY 1823ECA910719939 WL WL8600 WSAW000106
NY 183860761FDB5AE0 WL WL8600 WSAW000110
NY 17F56ECC1B0822C6 WM WM0010 WSIN000032
NY 17EDDF7409950811 WM WM0010 WSIN000037
NY 17F705C90492978B WM WM0010 WSIN000038
NY 17B3DB0F1F6E5295 WN YWNOLOG FOND00002455FA71E6
NY 180A79F2186A754E WN YWNOLOG FOND00008558D0FF8B
NY 181B2A72136E3781 WN YWNOLOG FOND000087595D1286MVS
NY 182A870B12068D60 WN YWNOLOG FOND00009559DDEF94MVS
NY 1837BE561A816E6C WN YWNOLOG FOND0001065A4CBEB4MVS
NY 17DD6CB216335413 WP YWPL1P1 DBH000006857572669
NN 1749A5D304B2335D WP YWPL1W1 A06M024666527F73FE
NY 17DF3C1717251EBD WP YWPL2P1 DBH00000685766559B
NY 17FF3EC11AC577B8 WP YWPL2P1 DBH00000835872CD6B
NY 1826238C1C7385AB WP YWPL2P1 DBH000012659B91C6C
NY 1826239016CBB2EE WP YWPL2P1 DBH000012659B91C6CMVS
NY 17DB2DBA0ED5AE22 WP YWPL3P1 DBH000006857444F1D
NY 17FF3F201A2DDC44 WP YWPL3P1 DBH00000835872D08A
NY 1816795F0A71EED5 WP YWPL3P1 DBH00000965935B6F3MVS
NY 18261CDA0A061458 WP YWPL3P1 DBH000012659B8E6F0
NY 18261CDE07950EED WP YWPL3P1 DBH000012659B8E6F0MVS
NY 17DB2DBF0474465D WP YWPL4P1 DBH000006857444F20
NY 17FF3ECA0D6540C4 WP YWPL4P1 DBH00000835872CDB3
NY 18167A40199930C3 WP YWPL4P1 DBH00000965935BE8EMVS
NY 18261CDC1C7C693C WP YWPL4P1 DBH000012659B8E702
NY 18261CE00FEBB7F2 WP YWPL4P1 DBH000012659B8E702MVS
NY 17DB2DBF10EC2FCC WP YWPL5P1 DBH000006857444F23
NY 17FF3ED2069F17C7 WP YWPL5P1 DBH00000835872CDF6
NY 18167A4707EFEC51 WP YWPL5P1 DBH00000965935BEC1MVS
NY 18261CDF1597622C WP YWPL5P1 DBH000012659B8E717
NY 18261CE3147F6401 WP YWPL5P1 DBH000012659B8E717MVS
NY 18261CE20437A2AC WP YWPL6P1 DBH000012659B8E72D
NY 18261CE51D532C8E WP YWPL6P1 DBH000012659B8E72DMVS
NY 17DB2DC001B59FB6 WP YWPL7P1 DBH000006857444F2C
NY 17DB2DC006147AEA WP YWPL8P1 DBH000006857444F2F
NY 17FF3EEB12546D41 WP YWPL8P1 DBH00000835872CECA
NY 18167A5F12850DED WP YWPL8P1 DBH00000965935BF94MVS
NY 18261CE41CD92FDE WP YWPL8P1 DBH000012659B8E744
NY 18261CE8181C55AC WP YWPL8P1 DBH000012659B8E744MVS
NY 17DB2DC4176698B9 WP YWPL9P1 DBH000006857444F33
NY 17FF3EF300B6F933 WP YWPL9P1 DBH00000835872CF09
NY 18167A71057A84EC WP YWPL9P1 DBH00000965935C01FMVS
NY 18261CE71CB36FFE WP YWPL9P1 DBH000012659B8E75B
NY 18261CEB0F4782DA WP YWPL9P1 DBH000012659B8E75BMVS
NY 1826237100B3E7DF WP YWPLAP1 DBH000012659B91C65
NY 182623741F8D0072 WP YWPLAP1 DBH000012659B91C65MVS
NY 18261CAE136BADD5 WP YWPLBP1 DBH000012659B8E57E
NY 18261CB30438FBC2 WP YWPLBP1 DBH000012659B8E57EMVS
NY 17DD6DA1108246D3 WP YWPLEP1 DBH000006857572E3A
NY 17FF3EA91FD5AE5D WP YWPLEP1 DBH00000835872CCA2
NY 18261EF81B5873CF WP YWPLEP1 DBH000012659B8F8B5
NY 18261EFC0F07665A WP YWPLEP1 DBH000012659B8F8B5MVS
NY 17DB2DCA180393A6 WP YWPR1PX DBH000006857444F52
NY 17EBB4D700922058 WP YWPR1PX DBH000007557CEF455
NY 17FF39EE0C252AB5 WP YWPR1PX DBH00000835872A4ED
NY 181677E70B544640 WP YWPR1PX DBH00000965935A9F8MVS
NY 18261D080413902C WP YWPR1PX DBH000012659B8E86B
NY 18261D0B1414CBDD WP YWPR1PX DBH000012659B8E86BMVS
NY 17DB2DCF0FD69B19 WP YWPR1QX DBH000006857444F5A
NY 17FF3A040077B3CA WP YWPR1QX DBH00000835872A5A5
NY 1816780E1735FE5D WP YWPR1QX DBH00000965935ABFFMVS
NY 18261D091E965A44 WP YWPR1QX DBH000012659B8E877
NY 18261D0D1A3682C1 WP YWPR1QX DBH000012659B8E877MVS
NY 17A6872C1CA61887 WP YWPR2PX DBH0000023558AA4ED
NY 17DB2DCF18BB6738 WP YWPR2PX DBH000006857444F62
NY 17EBB4D70DC58958 WP YWPR2PX DBH000007557CEF456
NY 17FF3A170C603B54 WP YWPR2PX DBH00000835872A647
NY 181677EC047FB3F4 WP YWPR2PX DBH00000965935AA0CMVS
NY 18261D0D1F010506 WP YWPR2PX DBH000012659B8E89C
NY 18261D11084946C5 WP YWPR2PX DBH000012659B8E89CMVS
NY 17DB2DD008C545C4 WP YWPR3PX DBH000006857444F88
NY 17EBB4D70E598DA9 WP YWPR3PX DBH000007557CEF458
NY 17FF3A21106BA559 WP YWPR3PX DBH00000835872A69A
NY 181677EF14389850 WP YWPR3PX DBH00000965935AA2CMVS
NY 18261D2906D9453A WP YWPR3PX DBH000012659B8E97F
NY 18261D2D058ACF18 WP YWPR3PX DBH000012659B8E97FMVS
NY 17EBB4D71458D5A7 WP YWPR4PX DBH000007557CEF45A
NY 17FF3A2B011C386E WP YWPR4PX DBH00000835872A6ED
NY 181677F21D35936F WP YWPR4PX DBH00000965935AA4BMVS
NY 18261D300A5EC34F WP YWPR4PX DBH000012659B8E9A0MVS
NY 17DDACA0147957C5 WP YWPR5PX DBH000006857593EAD
NY 17EBB4D7195DA412 WP YWPR5PX DBH000007557CEF45B
NY 17FF3A341B359E5D WP YWPR5PX DBH00000835872A738
NY 181677FA19061F57 WP YWPR5PX DBH00000965935AB22MVS
NY 18261D301DB29A22 WP YWPR5PX DBH000012659B8E9C1
NY 18261D3408908EA2 WP YWPR5PX DBH000012659B8E9C1MVS
NY 17DB2DDA0BA04058 WP YWPR6PX DBH000006857444FA1
NY 17EBB4D71AFA7A67 WP YWPR6PX DBH000007557CEF45D
NY 17FF3A421E5D52CA WP YWPR6PX DBH00000835872A791
NY 1816780218D492A4 WP YWPR6PX DBH00000965935AB34MVS
NY 18261F5F1971CB6E WP YWPR6PX DBH000012659B8FB2E
NY 18261F6310F0DE76 WP YWPR6PX DBH000012659B8FB2EMVS
NY 17E4010514465F4F WP YWPR7PX DBH0000068578E578A
NY 17EC7A41115DC48A WP YWPR7PX DBH000007557D56C68
NY 17FF3A4C1ED36765 WP YWPR7PX DBH00000835872A809
NY 181678081C27A2FD WP YWPR7PX DBH00000965935ABE2MVS
NY 18261F6919051FCE WP YWPR7PX DBH000012659B8FB4B
NY 18261F6E0B52B762 WP YWPR7PX DBH000012659B8FB4BMVS
NY 17DB2DC506334F0D WP YWPRAPX DBH000006857444F3A
NY 17EC7A390B5BA615 WP YWPRAPX DBH000007557D56C23
NY 17FF39781B9ECCB1 WP YWPRAPX DBH00000835872A114
NY 1816415B183189F2 WP YWPRAPX DBH00000965933E137MVS
NY 18262040096BEAE2 WP YWPRAPX DBH000012659B90365
NY 1826204404A2E54E WP YWPRAPX DBH000012659B90365MVS
NY 17DB2DC41977C9A9 WP YWPRBPX DBH000006857444F3E
NY 17EC9F6D0ADF577A WP YWPRBPX DBH000007557D6A43E
NY 17FF39730E410F4B WP YWPRBPX DBH00000835872A0E8
NY 1816779710B19535 WP YWPRBPX DBH00000965935A7D3MVS
NY 18261F391CC1A8B0 WP YWPRBPX DBH000012659B8FA95MVS
NY 17C75E6E18606571 WP YWPRCBX DBH0000054569E140F
NY 17DB2DC41E0EE810 WP YWPRCPX DBH000006857444F41
NY 17ECA9601425E493 WP YWPRCPX DBH000007557D6F7AF
NY 17FF39CA01B28C8A WP YWPRCPX DBH00000835872A3BB
NY 1816779A0BD761EC WP YWPRCPX DBH00000965935A7F9MVS
NY 18261F3A033B222E WP YWPRCPX DBH000012659B8FAB2
NY 18261F3D1AE3565B WP YWPRCPX DBH000012659B8FAB2MVS
NY 17DB2DC8147A27B9 WP YWPRDPX DBH000006857444F45
NY 17EBB4D702F5D058 WP YWPRDPX DBH000007557CEF450
NY 17FF39DD07C5186D WP YWPRDPX DBH00000835872A45F
NY 181677E40970F431 WP YWPRDPX DBH00000965935A9DDMVS
NY 18261F3E033106D9 WP YWPRDPX DBH000012659B8FAC3
NY 18261F411C58204A WP YWPRDPX DBH000012659B8FAC3MVS
NY 17E0FD0906033B82 WP YWPU1P5 DBH000006857750BA6
NY 17FFB0C613A55FDE WP YWPU1P5 DBH0000083587689E2
NY 1815D73F0BB52A99 WP YWPU1P5 DBH000009659306727MVS
NY 18261D820039E71F WP YWPU1P5 DBH000012659B8EC6A
NY 18261D86047413E6 WP YWPU1P5 DBH000012659B8EC6AMVS
NY 17DE58CC1B7B0615 WP YWPXB1A DBH0000068575EE2A7
NY 17DE58DC0CF6834F WP YWPXB1B DBH0000068575EE2E4
NY 17DE58D9139CB188 WP YWPXB1C DBH0000068575EE2D9
NY 17DE58D61BBB0880 WP YWPXB1D DBH0000068575EE2D0
NY 17DE58D40BA30EBC WP YWPXB1E DBH0000068575EE2C6
NY 17DE58D2019BE8C4 WP YWPXB1F DBH0000068575EE2BB
NY 17DE58CF0E073F7C WP YWPXB1G DBH0000068575EE2B1
NY 17DE58E10335F2F5 WP YWPXB1H DBH0000068575EE2F7
NY 17DE58DE1A1DABD3 WP YWPXB1I DBH0000068575EE2ED
NY 176667C50ACD815E WP YWPXBAA A06M0264235370B066
NY 176667C812D9D466 WP YWPXBAB A06M0264235370B182
NY 176667C7006B7E9A WP YWPXBAC A06M0264235370B10A
NY 176667CD056A3D7A WP YWPXBAD A06M0264235370B1E6
NY 176667CA09A86408 WP YWPXBAE A06M0264235370B1AE
NY 176667D51FED37D2 WP YWPXBBA A06M0264235370B3E8
NY 176667DB1B6DE180 WP YWPXBBB A06M0264235370B45A
NY 176667D91CF59238 WP YWPXBBC A06M0264235370B429
NY 176667DF01C4917E WP YWPXBBD A06M0264235370B547
NY 176667DD12019CAC WP YWPXBBE A06M0264235370B480
NY 17677F030A5B5E3D WP YWPXBCA A06M0263755379E4F0
NY 17677F0402A543E4 WP YWPXBCB A06M0263755379E4FF
NY 17677F04164F7472 WP YWPXBCC A06M0263755379E503
NY 17677F0503D92548 WP YWPXBCD A06M0263755379E50A
NY 17677F051A7D55E6 WP YWPXBCE A06M0263755379E510
NY 176667EC065E104D WP YWPXBDA A06M0264235370B94F
NY 176667E91C8CB4AF WP YWPXBDB A06M0264235370B8E2
NY 176667E8023144DC WP YWPXBDC A06M0264235370B829
NY 176667F41DCB23A5 WP YWPXBDF A06M0264235370B9D2
NY 176667F21F858384 WP YWPXBDG A06M0264235370B9BD
NY 17677F0816E5617A WP YWPXBEA A06M0263755379E52A
NY 17677F09081A7400 WP YWPXBEB A06M0263755379E52F
NY 17677F0913FCC1B2 WP YWPXBEC A06M0263755379E534
NY 17677F0A067E8438 WP YWPXBED A06M0263755379E538
NY 17677F0A1D900EA0 WP YWPXBEE A06M0263755379E53D
NY 17677F0B0C4BCB5E WP YWPXBEF A06M0263755379E540
NY 17677F0B1D18DF9B WP YWPXBEG A06M0263755379E545
NY 17677F0D0ACA9B8E WP YWPXBGA A06M0263755379E553
NY 17677F0D1E74FB7E WP YWPXBGB A06M0263755379E557
NY 17677F0E0AC23084 WP YWPXBGC A06M0263755379E55B
NY 17677F0F0B287ADC WP YWPXBGE A06M0263755379E562
NY 1766680C052BB1AD WP YWPXBIA A06M0264235370BB01
NY 1766680A04B3F2D0 WP YWPXBIB A06M0264235370BAE8
NY 1766680E06DEDCCD WP YWPXBIC A06M0264235370BB24
NY 17666810047293AC WP YWPXBID A06M0264235370BB38
NY 1766681704F799A5 WP YWPXBIE A06M0264235370BB6C
NY 17DE58AA1C28E51D WP YWPXBJA DBH0000068575EE13F
NY 17DE58B718E53B10 WP YWPXBJB DBH0000068575EE18E
NY 17DE58B50A1FB690 WP YWPXBJC DBH0000068575EE17C
NY 17DE58B3042C2DBF WP YWPXBJD DBH0000068575EE163
NY 17DE58B01B612602 WP YWPXBJE DBH0000068575EE157
NY 17DE58AD1EED6557 WP YWPXBJF DBH0000068575EE14B
NY 17DE58BF09680E52 WP YWPXBJG DBH0000068575EE1D9
NY 17DE58BC1B77FD45 WP YWPXBJH DBH0000068575EE1C6
NY 17DE58BA0C9FFF2C WP YWPXBJI DBH0000068575EE1AA
NY 1766682E02285930 WP YWPXBKA A06M0264235370BC46
NY 1766683319EBD2DE WP YWPXBKB A06M0264235370BC7D
NY 176668311EDBCE89 WP YWPXBKC A06M0264235370BC67
NY 1766682F1F71DCCD WP YWPXBKD A06M0264235370BC5C
NY 176668381784073C WP YWPXBKE A06M0264235370BCA4
NY 176668360B5FFEA1 WP YWPXBKF A06M0264235370BC96
NY 176B21CE0429370D WP YWPXBLC A06M0263755398650C
NY 1766684002E8C360 WP YWPXBMA A06M0264235370BCCF
NY 1766684811B3EA2C WP YWPXBMB A06M0264235370BD02
NY 1766684600573C01 WP YWPXBMC A06M0264235370BCF8
NY 176668440039D075 WP YWPXBMD A06M0264235370BCE8
NY 1766684C0B049E2F WP YWPXBME A06M0264235370BD2A
NY 17677F190EC1C916 WP YWPXBNA A06M0263755379E5B7
NY 17677F191A69DB9F WP YWPXBNB A06M0263755379E5BB
NY 17677F1A08169C99 WP YWPXBNC A06M0263755379E5BF
NY 17677F2B0414B5C9 WP YWPXBND A06M0263755379E63F
NY 17677F2B0BF9A7A6 WP YWPXBNE A06M0263755379E649
NY 17677F2C01AD43AE WP YWPXBNF A06M0263755379E64D
NY 17677F2B1BBE6B06 WP YWPXBNG A06M0263755379E652
NY 17677F2C1D20406D WP YWPXBNH A06M0263755379E656
NY 17677F2D08C3375F WP YWPXBNI A06M0263755379E65B
NY 17677F2D13F04D46 WP YWPXBOA A06M0263755379E660
NY 17677F2E0ACA2E4A WP YWPXBOB A06M0263755379E665
NY 17677F2E1BD65360 WP YWPXBOC A06M0263755379E669
NY 17677F32184B5435 WP YWPXBPA A06M0263755379E68B
NY 17677F340A6649C9 WP YWPXBPB A06M0263755379E690
NY 17677F3405AC5750 WP YWPXBPC A06M0263755379E696
NY 17677F341D17A3E0 WP YWPXBPD A06M0263755379E69D
NY 17677F3518790026 WP YWPXBPE A06M0263755379E6A2
NY 17677F3613E3A871 WP YWPXBPF A06M0263755379E6A8
NY 17677F370DB1C71A WP YWPXBPG A06M0263755379E6AC
NY 17677F371BF57588 WP YWPXBPH A06M0263755379E6B1
NY 17677F371FB07E30 WP YWPXBPI A06M0263755379E6B5
NY 17677F5118A73166 WP YWPXBQA A06M0263755379E6B9
NY 17677F511144EF92 WP YWPXBQB A06M0263755379E78F
NY 17677F5211695276 WP YWPXBQC A06M0263755379E793
NY 17677F53084CA462 WP YWPXBQD A06M0263755379E797
NY 17677F530279B510 WP YWPXBQE A06M0263755379E79C
NY 17677F53147291AE WP YWPXBQF A06M0263755379E7A0
NY 17677F540684C9B0 WP YWPXBQG A06M0263755379E7A5
NY 176668541D0BF1D8 WP YWPXBTA A06M0264235370BD89
NY 176668530B62F5C0 WP YWPXBTB A06M0264235370BD79
NY 176668571E4D6A89 WP YWPXBTC A06M0264235370BD99
NY 176668560ED88EB2 WP YWPXBTD A06M0264235370BD90
NY 1766685D0DBD9AA6 WP YWPXBTE A06M0264235370BDF5
NY 1766686918093289 WP YWPXBUC A06M0264235370BE52
NY 17A5948E1DE7E1E3 WP YWPXBXA DBH00000195582B1B3
NY 17A5949306D849F0 WP YWPXBXB DBH00000195582B1DA
NY 17A5949600865104 WP YWPXBXC DBH00000195582B1F3
NY 17A59499034EAF75 WP YWPXBXD DBH00000195582B20D
NY 17A594B7167CDA05 WP YWPXBXE DBH00000195582B30B
NY 176780710D2E1F59 WP YWPXBYC A06M0263755379E9BB
NY 1767819309CF9D24 WP YWPYBAA A06M0263755379FA7F
NY 1767819317D00B12 WP YWPYBAB A06M0263755379FA83
NY 176781940D2CF56C WP YWPYBAC A06M0263755379FA86
NY 176781941A485D20 WP YWPYBAD A06M0263755379FA8A
NY 17678195081EC1BE WP YWPYBAE A06M0263755379FA8F
NY 176781951ABBE6B1 WP YWPYBAF A06M0263755379FA93
NY 1767819607996EDB WP YWPYBAG A06M0263755379FA97
NY 176781D3033AD13F WP YWPYBCA A06M0263755379FC8E
NY 176781D30416D5BC WP YWPYBCB A06M0263755379FC94
NY 176781D3189E005D WP YWPYBCC A06M0263755379FC9A
NY 176781D40EDA0F82 WP YWPYBCD A06M0263755379FCA0
NY 176782321E54E08C WP YWPYBCE A06M0263755379FE40
NY 1793D8DF18992804 WP YWPYBDC DBH000002254EDE1AB
NY 1793D8E301FD62E2 WP YWPYBDD DBH000002254EDE1C2
NY 17F3B503051A38CD WQ WQ5950 CUBE000056
NY 17E9811A0494004C WQ WQ5950 CUBE000058
NY 17F906C31C5D9188 WQ WQ5950 CUBE000063
NY 1801443915349BEB WQ WQ5950 CUBE000066
NY 18061B6D09DBF6CB WQ WQ5950 CUBE000067
NY 17F65C6E00EFD5FB WQ WQ5950 CUBE000069
NY 17FAEB0018EA1848 WQ WQ5950 CUBE000075
NY 181163D20DF8717D WQ WQ5950 CUBE000081
NY 181691080B96EE2E WQ WQ5950 CUBE000083
NY 180990B30F056120 WQ WQ5950 CUBE000090
NY 181E25A21091CDA5 WQ WQ5950 CUBE000092
NY 182CE2A40D4028A3 WQ WQ5950 CUBE000094
NY 18134B330222F350 WQ WQ5950 CUBE000100
NY 181463E219509849 WQ WQ5950 CUBE000101
NY 181579F50ABB256D WQ WQ5950 CUBE000103
NY 18250D8F1F9833E3 WQ WQ5950 CUBE000112
NY 1826C38D0714BA79 WQ WQ5950 CUBE000114
NY 1833049C1B0B6BC4 WQ WQ5950 CUBE000116
NY 1839AA5609FB4E83 WQ WQ5950 CUBE000118
NY 17F9AD6105CC58CB WQ WQ6000 CUBE000063
NY 180146690EADF0E6 WQ WQ6000 CUBE000066
NY 18082310065D8816 WQ WQ6000 CUBE000067
NY 181051CF09ECC1F2 WQ WQ6000 CUBE000081
NY 18081F360B380606 WQ WQ6000 CUBE000084
NY 181D5F1F1F6585FE WQ WQ6000 CUBE000092
NY 182CE8D206E65CF4 WQ WQ6000 CUBE000094
NY 18239A341EBABCCF WQ WQ6000 CUBE000112
NY 1826C38E09922368 WQ WQ6000 CUBE000114
NY 183304A108676675 WQ WQ6000 CUBE000116
NY 18399F4811F221D2 WQ WQ6000 CUBE000118
NY 17E30CF01534A1D6 WQ WQ6010 CUBE000052
NY 17F3B50B1E0E4DD7 WQ WQ6010 CUBE000056
NY 17F9B2EE0CCA4038 WQ WQ6010 CUBE000063
NY 180071570E7DB0A4 WQ WQ6010 CUBE000066
NY 18061B721944490E WQ WQ6010 CUBE000067
NY 181051CE1BF3384D WQ WQ6010 CUBE000081
NY 181B4F910E6F30F1 WQ WQ6010 CUBE000092
NY 182C9CD907867171 WQ WQ6010 CUBE000094
NY 183B07F30EDA5573 WQ WQ6010 CUBE000118
NY 17D25B9612B1B12D WQ YWQ1101 CUBE00003556FA509B
NY 17EDE3BB1AEB52EE WQ YWQ1101 CUBE00005657E144AF
NY 17C2D3A01732FD37 WQ YWQ1501 CUBE0000305677F9BE
NY 17EDE3C11085328C WQ YWQ1501 CUBE00005657E144E3
NY 17C2D1A30E88BF6E WQ YWQ1502 CUBE0000305677E85A
NY 17EDE3CA01C69FC1 WQ YWQ1502 CUBE00005657E14527
NY 180615C4185D4CA5 WQ YWQ4101 CUBE00006758AC2DF1
NY 17F067371537606D WQ YWQ4501 CUBE00005657F65A9E
NY 181B4E770E6BAE39 WQ YWQ4501 CUBE000092595E40B8
NY 182C9C3A09BCAD0A WQ YWQ4501 CUBE00009459EF6858
NY 183862E3172CD76D WQ YWQ4501 CUBE0001185A52231D
NY 183F488B0039A181 WQ YWQ4501 CUBE0001295A8BFE05
NY 183E5BC11F440D44 WQ YWQ4501 CUBE0001325A843C30
NY 17F067380130CC34 WQ YWQ4502 CUBE00005657F65AA1
NY 18038DF90850E6F0 WQ YWQ4502 CUBE0000675896F3D8
NY 181028B91480D8A0 WQ YWQ4502 CUBE0000815900BDEA
NY 181B4E7507B9AAFC WQ YWQ4502 CUBE000092595E40BC
NY 182C9C3B0558C263 WQ YWQ4502 CUBE00009459EF685F
NY 183862E41EC90A86 WQ YWQ4502 CUBE0001185A522322
NY 17F29ACB07C2020D WQ YWQ5601 CUBE0000565808D243
NY 18038DFC1FC81664 WQ YWQ5601 CUBE0000675896F3F9
NY 181028831F575312 WQ YWQ5601 CUBE0000815900BC28
NY 181B4E76128D418C WQ YWQ5601 CUBE000092595E40C8
NY 182C9C1D0C4880A2 WQ YWQ5601 CUBE00009459EF6729
NY 183862EB1B19A44B WQ YWQ5601 CUBE0001185A522360
NY 17E51BD21F22A4AD WQ YWQBERI CUBE00005257979BE0
NY 17EF490C0A28E38E WQ YWQBERI CUBE00005657ECFA12
NY 1800C81D11683C06 WQ YWQBERI CUBE000066587FB128
NY 18052CEA0DA0D14B WQ YWQBERI CUBE00006758A48C9B
NY 181028540E38A2FE WQ YWQBERI CUBE0000815900BA99
NY 181B4DB31EC811AD WQ YWQBERI CUBE000092595E3A2E
NY 182C9C2C1D927AFD WQ YWQBERI CUBE00009459EF6722
NY 181BBF151880ED2C WQ YWQBERI CUBE0001085961F18D
NY 182C4BBA13FCFE6A WQ YWQBERI CUBE00011159ECC4D5
NY 183862A30B47D8D5 WQ YWQBERI CUBE0001185A5220FD
NY 183F488E06E81464 WQ YWQBERI CUBE0001295A8BFDDF
NY 17CAD8F41EC935FE WQ YWQEVEO CUBE00003256BB4250
NY 17D2B60305D6060B WQ YWQEXCP CUBE00003956FD4720
NY 17EEFD6302059005 WQ YWQEXCP CUBE00005657EA7F5E
NY 181B4DE5099E5909 WQ YWQEXCP CUBE000092595E3C05
NY 183862B0087A03B3 WQ YWQEXCP CUBE0001185A52216F
NY 17A0E53601EDEA20 WQ YWQREPI CUBE000003555B64DD
NY 178C43A70B7CFC02 WU YWUGBUB TU0000001154AE45DF
NY 175FF19F1E28FCE5 XP XP7200 A19R002479
NY 17EEB242152CBDE1 YX YXA171C TOFF00007657E8092C
NY 1804D5EF0CE1C48F YX YXA171C TOFF00008858A1B300
NY 1801AAA403D464C3 YX YXA171C TOFF00009858871D68
NY 180AAC5C0209D06B YX YXA171C TOFF00010858D2AB30
NY 181C3B5D0C377BD8 YX YXA171C TOFF0001095966040A
NY 1823C46F12920728 YX YXA171C TOFF00011759A53A43
NY 154BFD2C19813DEC YX YXBF222 19941224125703S101702Z170599AYXBF222
NY 158D5C361373AE02 YX YXBF222 19960213S101702Z233885AYXBF222
NY 158ECF611F1247BE YX YXBF222 19960222171023S101702A052072AYXBF222
NY 15D0CDD90A19A4C2 YX YXBF222 19970417150642S101702M000718AYXBF222
NY 15E38C330477CE60 YX YXBF222 19970814212651S101702A065276AYXBF222
NY 153C50261C9EE968 YX YXBF224 19940915190525S101702M000465AYXBF224
NY 156C85AD11D7650C YX YXBF224 19950719S101702Z200752AYXBF224
NY 157118761441F602 YX YXBF224 19950817S101702A046685AYXBF224
NY 15F634ED05A71B7A YX YXBF224 19971211145230S101702A068424AYXBF224
NY 15264E490291F352 YX YXNKSIC 19940428181933S101702A033825AYXNKSIC
NY 15A5E2111D883CF6 YX YXNKSIC 19960718123939S101702A056012AYXNKSIC
NY 1730D0251C726E5D YX YXWB011 A06M02422851AF2DED
NY 18191FBF13217948 YX YXWB011 WSTS000055594BF1D5
NY 18191FC10C8F9119 YX YXWB011 WSTS000055594BF1D5MVS
NY 1730D0270D76950C YX YXWB021 A06M02422851AF2DFE
NY 18191FBE00F669D5 YX YXWB021 WSTS000055594BF1C2MVS
NY 1730D01A0AB15D42 YX YXWB116 A06M02422851AF2D8E
NY 18191FBA1E7C88EA YX YXWB116 WSTS000055594BF1B0MVS
NY 1730D02D1058CD31 YX YXWB231 A06M02422851AF2E38
NY 18191FBA1F2BB85E YX YXWB231 WSTS000055594BF1B9
NY 18191FBC06497F15 YX YXWB231 WSTS000055594BF1B9MVS
NY 183577E11A225F8F YX YXWB231 WSTS0000615A39A8B6
NY 183577E21429B53C YX YXWB231 WSTS0000615A39A8B6MVS
NY 156982C61B3CF9CE YX YXWB52M 19950630S101702Z197290AYXWB52M
NY 1569843017D970EC YX YXWB52M 19950630S101702Z197319AYXWB52M
NY 156984D415B81DB4 YX YXWB52M 19950630S101702Z197327AYXWB52M
NY 1569853E04BBC8C6 YX YXWB52M 19950630S101702Z197332AYXWB52M
NY 156A84010993F178 YX YXWB52M 19950706S101702A045845AYXWB52M
NY 156A813707B32DAE YX YXWB52M 19950706S101702Z198507AYXWB52M
NY 156BC4471C8973A0 YX YXWB52M 19950714S101702Z200133AYXWB52M
NY 156CB19113255A84 YX YXWB52M 19950720S101702A046231AYXWB52M
NY 156D558E15CAA1D6 YX YXWB52M 19950724S101702Z201292AYXWB52M
NY 156EE58A17225662 YX YXWB52M 19950803S101702A046454AYXWB52M
NY 157118AE1F458302 YX YXWB52M 19950817S101702A046882AYXWB52M
NY 15AEB8D707346442 YY AV8760 19960912182612S101702M000659AAV8760
NY 15E3ACE2172482D2 YY EV0520 19970815165403S101702A066076AEV0520
NY 15F632B20D501D42 YY EV0520 19971211133228S101702A068862AEV0520
NY 16059A6604EBF508 YY EV0520 19980319140102S101702A070940AEV0520
NY 157B014C12699D0A YY KD5020 19951019S101702M000621AKD5020
NN 15562E180C4345A0 YY LC5000 19950227091355S101702Z178899ALC5000
NN 15562FBE083CCC0C YY LC5000 19950227101253S101702A042491ALC5000
NN 15AD9AF51B9DBCC8 YY RR7240 19960905155311S101702M000711ARR7240
NY 15CB494B0CE2ECBA YY RR7240 19970313122849S101702A061790ARR7240
NN 15FF2F4C16BF00A4 YY YECSAS 19980206175324S101702A070225AYECSAS
NN 160041540F3D2242 YY YECSAS 19980213132029S101702A070420AYECSAS
NN 160484C51A2027F0 YY YECSAS 19980312162539S101702A070997AYECSAS
NN 1604875B02B0189E YY YECSAS 19980312175709S101702A070997AYECSAS
NN 16164212086E9087 YY YECSAS 19980703152436S101702A073255AYECSAS
NY 15A5E21203991050 YY YNKSICB 19960718123939S101702A056012AYNKSICB
NY 15DE003D14449A06 YY YYAKDAT 19970710142418S101702M000721AYYAKDAT
NY 1612CD4B01121012 YY YYAKDAT 19980611153615S101702M000840AYYAKDAT
NY 161750B801C3D872 YY YYAKDAT 19980710084846S101702M000841AYYAKDAT
NY 161759F605B39914 YY YYAKDAT 19980710142111S101702M000841AYYAKDAT
NY 1579E8A507B33DBC YY YYCXCR 19951012S101702A048616AYYCXCR
NY 157C19171896808E YY YYCXCR 19951026S101702A048908AYYCXCR
NY 15819B92091631CE YY YYCXCR 19951130S101702A049675AYYCXCR
NY 1583CA8712E92BB2 YY YYCXCR 19951214S101702A050270AYYCXCR
NY 15933060108F0298 YY YYCXCR 19960321135238S101702A052860AYYCXCR
NY 1597970E110AC44A YY YYCXCR 19960418135815S101702A053388AYYCXCR
NY 15CB46D41C9F99F0 YY YYCXCR 19970313110131S101702Z301064AYYCXCR
NY 15E386480B6CC48A YY YYCXCR 19970814175447S101702M000722AYYCXCR
NY 15E4C55D0FF80394 YY YYCXCR 19970822161513S101702A066301AYYCXCR
NY 15EE7EB31D3AD2DA YY YYCXCR 19971023131100S101702A067654AYYCXCR
NY 15FF016103E8C46E YY YYCXCR 19980205143017S101702A070192AYYCXCR
NY 16024C400BA854E6 YY YYCXCR 19980226131415S101702A070718AYYCXCR
NY 1617512D1257AAD7 YY YYCXOLD 19980710085313S101702A073727AYYCXOLD
NY 156617A60AC0705E YY YYDAISF 19950608S101702M000546AYYDAISF
NY 1568502B1DAE0586 YY YYDAISF 19950622S101702M000590AYYDAISF
NY 15921AC5035C67B4 YY YYDAISF 19960314161501S101702M000666AYYDAISF
NY 1597995A10CC8BE4 YY YYDAISF 19960418152010S101702M000680AYYDAISF
NY 159BD4680706D1FA YY YYDAISF 19960515132403S101702A054107AYYDAISF
NY 15AEB4711794B942 YY YYDAISF 19960912154821S101702A056992AYYDAISF
NY 15CC680F07443E68 YY YYDAISF 19970320153356S101702M000778AYYDAISF
NY 15AFF02C1857EE2E YY YYDAISM 19960920121001S101702Z267171AYYDAISM
NY 15B10A37169313E8 YY YYDAISM 19960927122508S101702Z268064AYYDAISM
NY 15B17CD0130D1CB0 YY YYDAISM 19960930084648S101702Z268203AYYDAISM
NY 15B18CE51F6372EA YY YYDAISM 19960930182222S101702Z268425AYYDAISM
NY 15B4563C0347E728 YY YYDAISM 19961018115328S101702M000660AYYDAISM
NY 15CC68101AB83382 YY YYDAISM 19970320153356S101702M000778AYYDAISM
NY 15D534E11F737160 YY YYDAISM 19970515152456S101702M000719AYYDAISM
NY 15D6F0151856BA32 YY YYDAISM 19970526154815S101702Z312955AYYDAISM
NY 15ED91FB0E701E02 YY YYDAISM 19971017155755S101702M000724AYYDAISM
NY 15F6363B0A278DF0 YY YYDAISM 19971211153706S101702M000726AYYDAISM
NY 15FBDBA91BC0D8BC YY YYDAISM 19980116135024S101702M000835AYYDAISM
NY 17C8CBAC06E54B3B YY YYDB2FK TOFF00004856AA0B30
NY 17EE2A8D130CEC43 YY YYDB2FK TOFF00007657E396C1
NY 181A0E0913151E72 YY YYDB2FK TOFF0001095953C05BMVS
NY 182954880499454A YY YYDB2FK TOFF00011259D3E46AMVS
NY 152303611A41576E YY YYDEAIS 19940407192650S101702A032805AYYDEAIS
NY 156617A500833F8C YY YYDEAIS 19950608S101702M000546AYYDEAIS
NY 1568502B18E0EAF8 YY YYDEAIS 19950622S101702M000590AYYDEAIS
NY 1578A07F16314AF8 YY YYDEAIS 19951004S101702Z211189AYYDEAIS
NY 15921AC50232CE3E YY YYDEAIS 19960314161502S101702M000666AYYDEAIS
NY 15979958131859DC YY YYDEAIS 19960418152010S101702M000680AYYDEAIS
NY 159BD46711090FCE YY YYDEAIS 19960515132404S101702A054107AYYDEAIS
NY 15CC680F182B0436 YY YYDEAIS 19970320153357S101702M000778AYYDEAIS
NY 150ACAC51B00900A YY YYDEPAY
NY 1522FC7D054BE556 YY YYDEPAY 19940407150944S101702A032852AYYDEPAY
NY 1522FF0D18A98A1E YY YYDEPAY 19940407165401S101702A032852AYYDEPAY
NY 15252EC413FC8A94 YY YYDEPAY 19940421144515S101702A033531AYYDEPAY
NY 152532AB07A80076 YY YYDEPAY 19940421171023S101702A033531AYYDEPAY
NY 15276A4D1D371472 YY YYDEPAY 19940505194307S101702A033876AYYDEPAY
NY 1528546C05AF4870 YY YYDEPAY 19940511152421S101702A034077AYYDEPAY
NY 152CE4CF1CE22EC2 YY YYDEPAY 19940609162215S101702A034897AYYDEPAY
NY 152CE5DB05F708AE YY YYDEPAY 19940609165924S101702A034897AYYDEPAY
NY 152F1839137D891A YY YYDEPAY 19940623162940S101702A035091AYYDEPAY
NY 152F19F216DB4166 YY YYDEPAY 19940623173219S101702A035091AYYDEPAY
NY 152F1B91022991FC YY YYDEPAY 19940623183033S101702A035091AYYDEPAY
NY 15302ED3002362DA YY YYDEPAY 19940630144158S101702A035293AYYDEPAY
NY 15302FA717AEBA54 YY YYDEPAY 19940630151201S101702A035293AYYDEPAY
NY 153146A010F421BA YY YYDEPAY 19940707133234S101702A035428AYYDEPAY
NY 1532626F11BBB5A2 YY YYDEPAY 19940714145243S101702A035665AYYDEPAY
NY 1535B50D1B4EE964 YY YYDEPAY 19940804181158S101702M000486AYYDEPAY
NY 1538FC7C0D72806E YY YYDEPAY 19940825150144S101702M000491AYYDEPAY
NY 153A14190F37546E YY YYDEPAY 19940901135024S101702A036991AYYDEPAY
NY 153D62370160DBA6 YY YYDEPAY 19940922143400S101702A037561AYYDEPAY
NY 153F997A1C201A9E YY YYDEPAY 19941006165731S101702M000503AYYDEPAY
NY 153FA1510E36291A YY YYDEPAY 19941006213821S101702M000503AYYDEPAY
NY 154401DD18C42926 YY YYDEPAY 19941103180213S101702A038783AYYDEPAY
NY 154632251788AEE4 YY YYDEPAY 19941117161523S101702A039431AYYDEPAY
NY 1546CF680390FE7E YY YYDEPAY 19941121140628S101702A039653AYYDEPAY
NY 155016621CB54158 YY YYDEPAY 19950119144822S101702M000551AYYDEPAY
NY 1566199F002EBF30 YY YYDEPAY 19950608S101702A045100AYYDEPAY
NY 156733071943396C YY YYDEPAY 19950615S101702M000591AYYDEPAY
NY 1568502E1D6C7A24 YY YYDEPAY 19950622S101702M000590AYYDEPAY
NY 156CB199081AC32E YY YYDEPAY 19950720S101702A046223AYYDEPAY
NY 157852A400E71A38 YY YYDEPAY 19951002S101702Z210818AYYDEPAY
NY 1579EBD309689602 YY YYDEPAY 19951012S101702A048532AYYDEPAY
NY 157E4FE308523092 YY YYDEPAY 19951109S101702A049367AYYDEPAY
NY 157E5C6119DC655E YY YYDEPAY 19951110S101702A049367AYYDEPAY
NY 158DB0B81220EF5E YY YYDEPAY 19960215141014S101702A051716AYYDEPAY
NY 158ECAFE0DC90120 YY YYDEPAY 19960222143313S101702A052141AYYDEPAY
NY 15921AC601B008C2 YY YYDEPAY 19960314161503S101702M000666AYYDEPAY
NY 1599CA5A0237FDD2 YY YYDEPAY 19960502135824S101702A053253AYYDEPAY
NY 15A938F902FF8304 YY YYDEPAY 19960808183530S101702A056249AYYDEPAY
NY 15C194F9080D910E YY YYDEPAY 19970110183204S101702Z289912AYYDEPAY
NY 15C2276718E0F092 YY YYDEPAY 19970114095350S101702Z290455AYYDEPAY
NY 15C24F881D84C1B8 YY YYDEPAY 19970115095002S101702Z290790AYYDEPAY
NY 15C29F7311EDBBC2 YY YYDEPAY 19970117093023S101702Z291200AYYDEPAY
NY 15C3982C143BCCC6 YY YYDEPAY 19970123135201S101702A061056AYYDEPAY
NY 15CC68291A74EF5C YY YYDEPAY 19970320153413S101702M000778AYYDEPAY
NY 15E7E7560099C880 YY YYDEPAY 19970911143853S101702A066758AYYDEPAY
NY 15F632F70423F8C8 YY YYDEPAY 19971211134115S101702A068934AYYDEPAY
NY 15FBB9F8181B4EB2 YY YYDEPAY 19980115174544S101702M000856AYYDEPAY
NY 16024D680394BD7A YY YYDEPAY 19980226135927S101702A070724AYYDEPAY
NY 17DFBFA607A9180C YY YYDMAKD WSIN000023
NY 15AFEFCA17E34B18 YY YYEAISM 19960920115644S101702Z267161AYYEAISM
NY 15AFF06B0A4AE0EE YY YYEAISM 19960920121911S101702Z267173AYYEAISM
NY 15B45A870600ED96 YY YYEAISM 19961018142720S101702M000660AYYEAISM
NY 15CC68120AF490E0 YY YYEAISM 19970320153358S101702M000778AYYEAISM
NY 15FBDBAB1BC1BB5C YY YYEAISM 19980116135025S101702M000835AYYEAISM
NN 160018711F92E016 YY YYECGR2 19980212125840CGS101702A069923AYYECGR2
NN 16001870032E9786 YY YYECGR2 19980212125840S101702A069923AYYECGR2
NN 1600BFE9157E45A8 YY YYECGR2 19980216165215CGS101702A070496AYYECGR2
NN 1600BFE7162B59CA YY YYECGR2 19980216165215S101702A070496AYYECGR2
NN 15F17FAD1272E342 YY YYECGRI 19971111155503S101702A068203AYYECGRI
NN 15F2EEB81F753348 YY YYECGRI 19971120185114S101702M000818AYYECGRI
NN 15F369CC0439D86A YY YYECGRI 19971123194631S101702Z346164AYYECGRI
NN 15F519F619C6885F YY YYECGRI 19971204140411S101702Z348800AYYECGRI
NN 15FBB9F00F950012 YY YYECGRI 19980115174545S101702M000856AYYECGRI
NN 15F0865E14C44A8A YY YYECGRP 19971105111102CGS101702A068033AYYECGRP
NN 15F0865C0AE9D486 YY YYECGRP 19971105111102S101702A068033AYYECGRP
NY 15E37FF1175FC4DC YY YYFIBPR 19970814140833S101702M000800AYYFIBPR
NY 15E4188D027F8394 YY YYFIBPR 19970818091027S101702Z327662AYYFIBPR
NY 15E533030E14134E YY YYFIBPR 19970825094010S101702Z329469AYYFIBPR
NY 15E53B4C1113BC34 YY YYFIBPR 19970825143650S101702Z329469AYYFIBPR
NY 15E6CBB903DB245D YY YYFIBPR 19970904132827S101702A066559AYYFIBPR
NY 15E766741202B080 YY YYFIBPR 19970908094638S101702Z331899AYYFIBPR
NY 15E793CB0A82A0B8 YY YYFIBPR 19970909124923S101702Z332260AYYFIBPR
NY 15E7BF3B1064B13A YY YYFIBPR 19970910144408S101702Z332672AYYFIBPR
NY 15E7E6301359E030 YY YYFIBPR 19970911135707S101702Z332865AYYFIBPR
NY 15E7E62F0F6AECBC YY YYFIBPR 19970911135748S101702M000723AYYFIBPR
NY 15E8B15318EC00AA YY YYFIBPR 19970916150918S101702Z333785AYYFIBPR
NY 15E8B2A80D2EE108 YY YYFIBPR 19970916155634S101702Z333785AYYFIBPR
NY 15E9018F09DEC578 YY YYFIBPR 19970918150017S101702Z334213AYYFIBPR
NY 15EADA930F135D8A YY YYFIBPR 19970930091036S101702Z336218AYYFIBPR
NY 15EAE16E13C1A270 YY YYFIBPR 19970930131559S101702Z336218AYYFIBPR
NY 15EB5BAF03BF78E2 YY YYFIBPR 19971003141148S101702Z337398AYYFIBPR
NY 15ED91F40DA321A8 YY YYFIBPR 19971017155842S101702M000724AYYFIBPR
NY 15EDFD9C0954B4AC YY YYFIBPR 19971020081228S101702Z340073AYYFIBPR
NY 15EE7F7D02C4A036 YY YYFIBPR 19971023134013S101702A067763AYYFIBPR
NY 15EF4CE909B97752 YY YYFIBPR 19971028161241S101702A067870AYYFIBPR
NY 15EF715B082A44EC YY YYFIBPR 19971029135718S101702Z342287AYYFIBPR
NY 15EF73B313E72048 YY YYFIBPR 19971029152110S101702A067922AYYFIBPR
NY 15F1CD8F16CBB102 YY YYFIBPR 19971113142213S101702A068238AYYFIBPR
NY 15F2E9CE117E0CB4 YY YYFIBPR 19971120155550S101702M000725AYYFIBPR
NY 15F3FFA30D164C90 YY YYFIBPR 19971127133905S101702A068607AYYFIBPR
NY 15FA73E30D92229A YY YYFIBPR 19980107151625S101702Z353891AYYFIBPR
NY 15FBDBA318A2B474 YY YYFIBPR 19980116135026S101702M000835AYYFIBPR
NY 15FCCE091650F9E6 YY YYFIBPR 19980122142859S101702M000889AYYFIBPR
NY 160A0D5E1FCED194 YY YYFIBPR 19980416232803S101702M000838AYYFIBPR
NY 160A27F31A320BDE YY YYFIBPR 19980417151921S101702M000838AYYFIBPR
NY 1612CD4E0730EF56 YY YYFIBPR 19980611153657S101702M000840AYYFIBPR
NY 177D376110AD5D9E YY YYFIKST A06M027333543018B2
NY 1818747A0BE43812 YY YYFIKST BKUR00008059465507MVS
NY 1839CABA046018EB YY YYFIKST BKUR0000965A5DE9E3
NY 1839CABB0F6CC418 YY YYFIKST BKUR0000965A5DE9E3MVS
NY 15C286081191A66C YY YYFIKU1 19970116181927S101702A060919AYYFIKU1
NY 15C3418805C0E26E YY YYFIKU1 19970121101133S101702Z291909AYYFIKU1
NY 15C398F908EF9C08 YY YYFIKU1 19970123142101S101702A061123AYYFIKU1
NY 15C489FE1460809C YY YYFIKU1 19970129140738S101702Z293531AYYFIKU1
NY 15C4D98316FB4854 YY YYFIKU1 19970131133354S101702Z294063AYYFIKU1
NY 15C4DA1D17445C08 YY YYFIKU1 19970131135524S101702Z294063AYYFIKU1
NY 15C4DA730656319C YY YYFIKU1 19970131140710S101702Z294063AYYFIKU1
NY 15C5560A1B720028 YY YYFIKU1 19970203155055S101702Z294410AYYFIKU1
NY 15C5566815248554 YY YYFIKU1 19970203160358S101702Z294410AYYFIKU1
NY 15C5742506C60392 YY YYFIKU1 19970204094815S101702Z294522AYYFIKU1
NY 15C5807102C2DB68 YY YYFIKU1 19970204170805S101702Z294522AYYFIKU1
NY 15C5F3C80A03AD08 YY YYFIKU1 19970207135639S101702Z295237AYYFIKU1
NY 15C5F7DE16DD09D4 YY YYFIKU1 19970207162252S101702Z295237AYYFIKU1
NY 15C68F340B219374 YY YYFIKU1 19970211103926S101702Z295534AYYFIKU1
NY 15C6ED610246DBCA YY YYFIKU1 19970213184955S101702A061650AYYFIKU1
NY 15C70DED172ECA28 YY YYFIKU1 19970214141457S101702A061650AYYFIKU1
NY 16172FFF01BF612E YY YYFIKU1 19980709132109S101702Z382599AYYFIKU1
NY 15DE003E076E5514 YY YYFIKUR 19970710142449S101702M000721AYYFIKUR
NY 15E385C91B3D06FF YY YYFIKUR 19970814173534S101702M000722AYYFIKUR
NY 15E58C35083F42B4 YY YYFIKUR 19970827145220S101702Z330075AYYFIKUR
NY 15E5B2D20C26A498 YY YYFIKUR 19970828135427S101702Z330384AYYFIKUR
NY 15E5B75011F360EC YY YYFIKUR 19970828163505S101702Z330384AYYFIKUR
NY 15E6A6C014CB58AC YY YYFIKUR 19970903152517S101702Z331381AYYFIKUR
NY 15E6C8901D6A44F8 YY YYFIKUR 19970904113540S101702Z331512AYYFIKUR
NY 15E76E0011E20F9C YY YYFIKUR 19970908141644S101702Z332003AYYFIKUR
NY 15E76E1F0EB2D04A YY YYFIKUR 19970908142100S101702Z332003AYYFIKUR
NY 15E7E636191BF19C YY YYFIKUR 19970911135753S101702M000723AYYFIKUR
NY 15E7E7361C517AA8 YY YYFIKUR 19970911143522S101702Z332879AYYFIKUR
NY 15E7E8D20E820D84 YY YYFIKUR 19970911152454S101702Z332879AYYFIKUR
NY 15EAE1380500BB68 YY YYFIKUR 19970930130759S101702Z336339AYYFIKUR
NY 15ED91FE0081AECA YY YYFIKUR 19971017155855S101702M000724AYYFIKUR
NY 15EE9C9A07D0DA54 YY YYFIKUR 19971024070255S101702Z341447AYYFIKUR
NY 15EF1DED163CD3C2 YY YYFIKUR 19971027121114S101702Z341787AYYFIKUR
NY 15EF71540B35A282 YY YYFIKUR 19971029135652S101702Z342286AYYFIKUR
NY 15F1700B0D6FA90E YY YYFIKUR 19971111063522S101702Z344162AYYFIKUR
NY 15F1C6CC08BC5408 YY YYFIKUR 19971113101937CGS101702Z344648AYYFIKUR
NY 15F1C6C808FB0EA4 YY YYFIKUR 19971113101937S101702Z344648AYYFIKUR
NY 15F2B3A319877A5C YY YYFIKUR 19971119073725S101702Z345453AYYFIKUR
NY 15F2E9D71307678C YY YYFIKUR 19971120155600CGS101702M000725AYYFIKUR
NY 15F2E9D2156D220A YY YYFIKUR 19971120155600S101702M000725AYYFIKUR
NY 15F37D611EE138A0 YY YYFIKUR 19971124075840S101702Z346214AYYFIKUR
NY 15F3A483088A51C2 YY YYFIKUR 19971125071800S101702Z346565AYYFIKUR
NY 15F3AEAE0E1B3A8C YY YYFIKUR 19971125132146CGS101702Z346704AYYFIKUR
NY 15F3AEAA13C6A0CA YY YYFIKUR 19971125132146S101702Z346704AYYFIKUR
NY 15F3FFAC12135424 YY YYFIKUR 19971127133906CGS101702A068607AYYFIKUR
NY 15F3FFA509C3CB8A YY YYFIKUR 19971127133906S101702A068607AYYFIKUR
NY 15F51EBC01E174A2 YY YYFIKUR 19971204165432CGS101702A068818AYYFIKUR
NY 15F51EB417EC7912 YY YYFIKUR 19971204165432S101702A068818AYYFIKUR
NY 15F636570CBC56C3 YY YYFIKUR 19971211153730CGS101702M000726AYYFIKUR
NY 15F6364000503D9D YY YYFIKUR 19971211153730S101702M000726AYYFIKUR
NY 15FBDBB21D92000A YY YYFIKUR 19980116135027S101702M000835AYYFIKUR
NY 16001B6517B805B0 YY YYFIKUR 19980212144259CGS101702M000834AYYFIKUR
NY 16001B580AE44AA2 YY YYFIKUR 19980212144259S101702M000834AYYFIKUR
NY 160A0D6613CA2262 YY YYFIKUR 19980416232808CGS101702M000838AYYFIKUR
NY 160A0D5E00845DC4 YY YYFIKUR 19980416232808S101702M000838AYYFIKUR
NY 160A288904A83F62 YY YYFIKUR 19980417151937CGS101702M000838AYYFIKUR
NY 160A27F914508896 YY YYFIKUR 19980417151937S101702M000838AYYFIKUR
NY 1612CD571888D0D6 YY YYFIKUR 19980611153705CGS101702M000840AYYFIKUR
NY 1612CD5007B9D0F2 YY YYFIKUR 19980611153705S101702M000840AYYFIKUR
NY 1613E6D61F9BD9EB YY YYFIKUR 19980618153331CGS101702A072820AYYFIKUR
NY 1613E6D1014F7AE9 YY YYFIKUR 19980618153331S101702A072820AYYFIKUR
NY 1613EA801994AE1C YY YYFIKUR 19980618174544CGS101702A072820AYYFIKUR
NY 1613EA7C1EBFF447 YY YYFIKUR 19980618174544S101702A072820AYYFIKUR
NY 161524D01CCBFF06 YY YYFIKUR 19980626131600CGS101702A073395AYYFIKUR
NY 161524CE06CCC8A4 YY YYFIKUR 19980626131600S101702A073395AYYFIKUR
NY 161525A71CE08EDA YY YYFIKUR 19980626134607CGS101702A073395AYYFIKUR
NY 161525A505D9A3F6 YY YYFIKUR 19980626134607S101702A073395AYYFIKUR
NY 1615264E03F99E7C YY YYFIKUR 19980626140918CGS101702A073395AYYFIKUR
NY 1615264B0DD6FBEC YY YYFIKUR 19980626140918S101702A073395AYYFIKUR
NY 1615280711F76BAA YY YYFIKUR 19980626151056CGS101702A073401AYYFIKUR
NY 161528041466BF88 YY YYFIKUR 19980626151056S101702A073401AYYFIKUR
NY 161750CA082CB234 YY YYFIKUR 19980710084900CGS101702M000841AYYFIKUR
NY 161750C017446400 YY YYFIKUR 19980710084900S101702M000841AYYFIKUR
NY 17EAB64013708CFF YY YYFILOD BKUR00003857C69CB7
NY 17EF1DD60AA9C7C4 YY YYFILOD BKUR00004157EB8F97
NN 18031F110C4C2B69 YY YYFILOD BKUR00005258935183
NY 15E6CBBA005DA61E YY YYFISER 19970904132828S101702A066559AYYFISER
NY 15ED91F80DD9305A YY YYFISER 19971017155900S101702M000724AYYFISER
NY 160E856D0621DE78 YY YYFISER 19980515095453S101702M000839AYYFISER
NY 150ACD5C155A3B8C YY YYGE040
NY 181A0E0704374A12 YY YYGETCS TOFF0001095953C065
NY 181A0E0817AC2265 YY YYGETCS TOFF0001095953C065MVS
NN 15F3118E14E98182 YY YYGPAS 19971121153752S101702A068485AYYGPAS
NN 15F3B4630CE36DAA YY YYGPAS 19971125164555S101702A068569AYYGPAS
NN 15F3DBCF1C9877B0 YY YYGPAS 19971126161741S101702Z347154AYYGPAS
NN 15F3FDE11F9AA642 YY YYGPAS 19971127123700S101702Z347334AYYGPAS
NN 15F545BD065532F2 YY YYGPAS 19971205161109S101702A068771AYYGPAS
NY 171FDC81124D5E40 YY YYHECO A06M022888
NY 1753B2D514B9B4A5 YY YYITST A20Y00132952D3C3E7
NN 151EC4DD0B631542 YY YYNFP14 19940311192628S101702A032372A
NN 151FB7A6000D73F0 YY YYNFP14 19940317201407S101702M000390AYYNFP14
NN 1524173E17F27A22 YY YYNFP14 19940414160445S101702A033411AYYNFP14
NN 15241E7817C8B476 YY YYNFP14 19940414202416S101702A033411AYYNFP14
NN 153A232D14D2DEFA YY YYNFP14 19940901225031S101702A037061AYYNFP14
NY 153A419602CAE318 YY YYNFP14 19940902165842S101702A037061AYYNFP14
NN 15CE9B530119BDAA YY YYNFP14 19970403153334S101702A062839AYYNFP14
NY 17D28AC1181AEC7C YY YYNFP15 NBSI000056
NY 17C93F311BF9B4A7 YY YYNFP17 NBSI00006156ADD502
NY 17CBF39C14D96CA0 YY YYNFP17 NBSI000070
NN 151EC4EB16EABC48 YY YYNFP24 19940311192636S101702A032372A
NN 151FB7A71F0A61DC YY YYNFP24 19940317201425S101702M000390AYYNFP24
NN 1524173C15FCBA3A YY YYNFP24 19940414160453S101702A033411AYYNFP24
NN 15241E7B1014C356 YY YYNFP24 19940414202420S101702A033411AYYNFP24
NN 153A232F1F6FD7A6 YY YYNFP24 19940901225036S101702A037061AYYNFP24
NN 153A419611D80B30 YY YYNFP24 19940902165848S101702A037061AYYNFP24
NN 15CE9B501CFD4F62 YY YYNFP24 19970403153340S101702A062839AYYNFP24
NY 17B7D8E11AF6C292 YY YYNFWRG NBSI000050
NN 15757B1814F33F10 YY YYNGKAS 19950914S101702A047578AYYNGKAS
NN 1576981A14FAAF04 YY YYNGKAS 19950921S101702A047924AYYNGKAS
NN 157D2FE9051C133A YY YYNGTCP 19951102S101702A048892AYYNGTCP
NY 146C7A1103D158D4 YY YYNHBS
NY 1524423A042AC164 YY YYNHBS 19940415174407S101702A033339AYYNHBS
NY 153265B509D98D98 YY YYNHBS 19940714165234S101702A035718AYYNHBS
NY 15463214008EC298 YY YYNHBS 19941117161412S101702A039404AYYNHBS
NY 17E0B2760D79482E YY YYNLCPB MOD000002157729A19
NY 17EE041401C828BE YY YYNLCPB MOD000002657E253F8
NY 17E0B2710D08B6C3 YY YYNLCPO MOD0000021577299E0
NY 17EE04151A7B5505 YY YYNLCPO MOD000002657E25407
NN 1515C8791417951A YY YYOELEI
NN 152CE21D0BFF3DE2 YY YYOELEI 19940609143536S101702A034813AYYOELEI
NY 177AAC82057F81CE YY YYPRAD0 A20Y001521
NY 156DC8730F9AF87A YY YYPTM12 19950727S101702A046364AYYPTM12
NY 156EE2920934D858 YY YYPTM12 19950803S101702A046538AYYPTM12
NY 157141D4000BE6E0 YY YYPTM12 19950818S101702A047074AYYPTM12
NY 1571E6FD143F4ADA YY YYPTM12 19950822S101702Z204939AYYPTM12
NY 15725CFC0FE5AEAA YY YYPTM12 19950825S101702Z205416AYYPTM12
NY 15728BFF05995CFA YY YYPTM12 19950826S101702Z205430AYYPTM12
NY 1572ADE807AA1C76 YY YYPTM12 19950827S101702Z205430AYYPTM12
NY 1572C87609374A88 YY YYPTM12 19950828S101702Z205430AYYPTM12
NY 1572D17000F67C48 YY YYPTM12 19950828S101702Z205582AYYPTM12
NY 1572F6EA18980D74 YY YYPTM12 19950829S101702Z205736AYYPTM12
NY 1573280915179998 YY YYPTM12 19950830S101702Z206096AYYPTM12
NY 157344D104228EE6 YY YYPTM12 19950831S101702Z206167AYYPTM12
NY 15736EAD1B03E7B2 YY YYPTM12 19950901S101702Z206288AYYPTM12
NY 1574106E034EDCB4 YY YYPTM12 19950905S101702Z206837AYYPTM12
NY 157434F113590034 YY YYPTM12 19950906S101702Z206973AYYPTM12
NY 1574633800041C26 YY YYPTM12 19950907S101702A047466AYYPTM12
NY 157486451DB20AE2 YY YYPTM12 19950908S101702Z207435AYYPTM12
NY 15773E070DA7132C YY YYPTM12 19950925S101702Z209742AYYPTM12
NY 1578CA0903FE251E YY YYPTM12 19951005S101702A048161AYYPTM12
NY 1579644C130BA342 YY YYPTM12 19951009S101702Z211751AYYPTM12
NY 157997B30E8AC44E YY YYPTM12 19951010S101702Z212019AYYPTM12
NY 1579B7AA1D646CCA YY YYPTM12 19951011S101702Z212285AYYPTM12
NY 1579B86E1BAB8F26 YY YYPTM12 19951011S101702Z212295AYYPTM12
NY 1579BE3D03B1A2A8 YY YYPTM12 19951011S101702Z212376AYYPTM12
NY 1579E3C114C9C4E6 YY YYPTM12 19951012S101702A048386AYYPTM12
NY 157A06211C953694 YY YYPTM12 19951013S101702Z212652AYYPTM12
NY 15837E6413DB9D04 YY YYPTM12 19951212S101702Z224373AYYPTM12
NY 1583A6F116448B9A YY YYPTM12 19951213S101702Z224682AYYPTM12
NY 1583AB1B18D75DE0 YY YYPTM12 19951213S101702Z224731AYYPTM12
NY 1583CADC13289CC2 YY YYPTM12 19951214S101702A050352AYYPTM12
NY 1583C252084DB644 YY YYPTM12 19951214S101702Z224779AYYPTM12
NY 154DFD7E09887904 YY YYSPINS 19950106063222S101702A041003AYYSPINS
NY 17675CAB17BF175C YY YYUWI A19R0024915378C4EF
NY 180DEE890806798A YY YYUWI PSMF00001758EE0EC7
NY 180DEE8B0A00DE1E YY YYUWI PSMF00001758EE0EC7MVS
NY 17D39F8E1D4A3BE1 YY YYVPSVF VIP00000145704EE3B
NY 17CE271E0FD72FC3 YY YYWB101 WS8B00018756D6FC76
NY 17ECC60D1B971F0A YY YYWB101 WS8B00031857D7E845
NY 15FBE54C00E0778E YY YYWBBPU 19980116193842S101702A069660AYYWBBPU
NY 1730D02E1B2CED58 YY YYWBERR A06M02422851AF2E43
NY 18191F9E0475659C YY YYWBERR WSTS000055594BF0A8
NY 18191FA0041BF040 YY YYWBERR WSTS000055594BF0A8MVS
NY 183577E70DA2E70E YY YYWBERR WSTS0000615A39A896
NY 183577E71F153012 YY YYWBERR WSTS0000615A39A896MVS
NY 17E655791B7D36DE YY YYWBERX TOFF00006757A1E2F4
NY 17F0161408A8F429 YY YYWBERX TOFF00007657F3B1EE
NY 1802C71D123B04FF YY YYWBERX TOFF00008858906FB5
NY 181A0E1807B808DE YY YYWBERX TOFF0001095953C073MVS
NY 180F308B0E3EBEA6 YY YYWBERX TOFF00011058F89C03
NY 1827DA221FF5CEB2 YY YYWBERX TOFF00011259C7788CMVS
NY 182281741FAC0927 YY YYWBERX TOFF000117599AA4C0MVS
NY 18314CA01F534940 YY YYWBERX TOFF0001195A16AFD3MVS
NY 183577CA01DD12DD YY YYWBERX TOFF0001225A39A7DF
NY 183577CE0751ADE5 YY YYWBERX TOFF0001225A39A7DFMVS
NY 176D800307A25B5B YY YYWBESM A06M02510853AC4238
NY 18191FBF13B0DEB6 YY YYWBESM WSTS000055594BF1CCMVS
NY 177D37630CC7B5F9 YY YYWBKUR A06M027333543018CE
NY 181874E504076DD3 YY YYWBKUR BKUR000080594658B8
NY 15BACC9F187C524E YY YYWBMOE 19961128144620S101702A059131AYYWBMOE
NY 15BACED419DE065C YY YYWBMOE 19961128160532S101702A059131AYYWBMOE
NY 15BD0476166D4268 YY YYWBMOE 19961212173057S101702A059683AYYWBMOE
NY 15C1681F0EC67508 YY YYWBMOE 19970109154730S101702A060516AYYWBMOE
NY 15C39E7411B777E0 YY YYWBMOE 19970123173704S101702A061015AYYWBMOE
NY 15C3B55A081BDB8E YY YYWBMOE 19970124071700S101702A061015AYYWBMOE
NY 15C800EF0388913A YY YYWBMOE 19970220151213S101702A061848AYYWBMOE
NN 15CA55A31735EBE4 YY YYWBMON 19970307110926S101702A062134AYYWBMON
NN 15CA83710EAE6488 YY YYWBMON 19970308142853S101702Z300112AYYWBMON
NN 15CACB761B5B1466 YY YYWBMON 19970310092637S101702Z300188AYYWBMON
NN 15CACEC7168D5DC2 YY YYWBMON 19970310112514S101702Z300265AYYWBMON
NN 15CAD04903A38642 YY YYWBMON 19970310121902S101702Z300265AYYWBMON
NN 15CAD0B914921CE8 YY YYWBMON 19970310123454S101702Z300265AYYWBMON
NN 15CAD2B5019D8F4C YY YYWBMON 19970310134551S101702Z300265AYYWBMON
NN 15CB4D021C010CB0 YY YYWBMON 19970313144250S101702M000717AYYWBMON
NN 15CB54F7085E0490 YY YYWBMON 19970313192604S101702M000717AYYWBMON
NN 15CB97E91D1E745A YY YYWBMON 19970315112351S101702Z301577AYYWBMON
NN 15CB99C1179306BA YY YYWBMON 19970315122939S101702Z301585AYYWBMON
NN 15CBE35B0EAC22EE YY YYWBMON 19970317082407S101702Z301640AYYWBMON
NN 15CBE9F91963A2C2 YY YYWBMON 19970317122158S101702Z301640AYYWBMON
NN 15CC118D012EF1E4 YY YYWBMON 19970318115741S101702Z302125AYYWBMON
NN 15CC822D1972E9E0 YY YYWBMON 19970321070837S101702Z302741AYYWBMON
NN 15CC876D0D856B26 YY YYWBMON 19970321101634S101702Z302741AYYWBMON
NN 15CC87EA1BA5A2CE YY YYWBMON 19970321103457S101702Z302741AYYWBMON
NN 15CC89AF04E2C5B0 YY YYWBMON 19970321113725S101702Z302741AYYWBMON
NN 15CC8A700825D760 YY YYWBMON 19970321120417S101702Z302741AYYWBMON
NN 15CC8BF613044BAC YY YYWBMON 19970321125900S101702Z302861AYYWBMON
NN 15CC8E4317E33A62 YY YYWBMON 19970321142116S101702Z302861AYYWBMON
NN 15CCFD1B11F96CF6 YY YYWBMON 19970324082836S101702Z303012AYYWBMON
NN 15CCFEEC1FC13568 YY YYWBMON 19970324093352S101702Z303012AYYWBMON
NN 15CD08B1174D7342 YY YYWBMON 19970324152338S101702Z303012AYYWBMON
NN 15CD09931408333C YY YYWBMON 19970324155417S101702Z303012AYYWBMON
NN 15CD28E40FD2C2D6 YY YYWBMON 19970325103538S101702Z303341AYYWBMON
NN 15CE6FBF17EB38FA YY YYWBMON 19970402133425S101702Z304278AYYWBMON
NN 15CF332B1B740882 YY YYWBMON 19970407100855S101702Z304797AYYWBMON
NN 15D0CDF30885BEE4 YY YYWBMON 19970417151042S101702M000718AYYWBMON
NN 15D534FD1AE441BC YY YYWBMON 19970515152742S101702M000719AYYWBMON
NN 15D7FAF00A371B85 YY YYWBMON 19970602065921S101702Z313900AYYWBMON
NN 15D99073175A7227 YY YYWBMON 19970612085344S101702Z316050AYYWBMON
NN 15D99D86058B7952 YY YYWBMON 19970612164152S101702M000720AYYWBMON
NN 15DE005219DA53C8 YY YYWBMON 19970710142705S101702M000721AYYWBMON
NN 15E385DD1022E234 YY YYWBMON 19970814173805S101702M000722AYYWBMON
NN 15E7E65913C0CAEC YY YYWBMON 19970911140351S101702M000723AYYWBMON
NN 15F2E9EF0042410C YY YYWBMON 19971120155919S101702M000725AYYWBMON
NN 15F3A38006B99F02 YY YYWBMON 19971125064220S101702Z346561AYYWBMON
NN 15F6365B19B405C8 YY YYWBMON 19971211154151S101702M000726AYYWBMON
NN 16001FC111AC2F33 YY YYWBMON 19980212172010S101702M000836AYYWBMON
NN 160A0D7903D15B44 YY YYWBMON 19980416233210S101702M000838AYYWBMON
NN 160A281806D31840 YY YYWBMON 19980417152423S101702M000838AYYWBMON
NN 160E857C176EC566 YY YYWBMON 19980515095747S101702M000839AYYWBMON
NN 1612CD6C138353F6 YY YYWBMON 19980611154027S101702M000840AYYWBMON
NY 176D800416D1A3E6 YY YYWBMTU A06M02510853AC4233
NY 18191F9E017F0146 YY YYWBMTU WSTS000055594BF093MVS
NY 157E592A1C761270 YY YYWBPOS 19951109S101702A049203AYYWBPOS
NY 157E64E700B0C79E YY YYWBPOS 19951110S101702A049203AYYWBPOS
NY 1730D03119598F52 YY YYWBPRI A06M02422851AF2E54
NY 18191FA4006977E4 YY YYWBPRI WSTS000055594BF0FF
NY 18191FA51C7886F1 YY YYWBPRI WSTS000055594BF0FFMVS
NY 1607CBE214CAE4A9 YY YYWBTMS 19980402145954S101702A071235AYYWBTMS
NY 1607D0501A9F1AE0 YY YYWBTMS 19980402173431S101702A071235AYYWBTMS
NY 1607D2191D7F3FF0 YY YYWBTMS 19980402184148S101702A071235AYYWBTMS
NY 1607F4440930D456 YY YYWBTMS 19980403150226S101702A071235AYYWBTMS
NY 160867290C7C2D64 YY YYWBTMS 19980406113742S101702A071510AYYWBTMS
NY 17DF44F2006E7C70 YY YYWBVIN WSTS00003957669F10
NY 17F128AA1DA656D1 YY YYWBVIN WSTS00004357FCB166
NY 1802C75A0683C63A YY YYWBVIN WSTS000046589071B4
NY 181A046E0A291C88 YY YYWBVIN WSTS0000555953702BMVS
NY 183577E202F1F921 YY YYWBVIN WSTS0000615A39A89AMVS
NN 1514B97802FFBC58 ZP YZPUSER
NN 151BC8E4096D99B8 ZP YZPUSER 19940220194106S101702A031777A
NN 151BC93F02304F06 ZP YZPUSER 19940220195347S101702A031777A
NN 151C0DE01EBDC15C ZP YZPUSER 19940222125004S101702A031858A
NN 151CEA1D1AE5265C ZP YZPUSER 19940228001251S101702A032020A
NN 1520A4F6042A4D36 ZP YZPUSER 19940323174801S101702A032820AYZPUSER
NN 152302AC109E06E6 ZP YZPUSER 19940407190244S101702A033221AYZPUSER
NY 15BA7B261D9B42A0 ZP YZPUSER 19961126141035S101702A059224AYZPUSER
$#out 20100801 11:58:47
}¢--- A540769.WK.REXX.O13(DRDACOM2) cre=2010-07-06 mod=2010-07-06-11.19.49 A540769 ---
$@loadNew()
call sqlConnect DBOF
call sqlPreOpen 1, 'select collid, name, hex(contoken), version',
'from sysibm.sysPackage',
"where dbProtocol = 'P'",
"order by collid, name"
new = 0
old = 0
co = ' '
do while sqlFetchInto(1, ':coll, :pkg, :co, :vers')
if symbol('m.co2pkg.co') \== 'VAR' then
da = '10000000'
else if pkg \= m.co2Pkg.co then
say 'mismatch' pkg '==>' m.co2Pkg.co
else
da = 'm.co2last.co
else do
old = old + 1
$$ REBIND PACKAGE($-{strip(coll)'.'strip(pkg)'.(' $*+
|| strip(vers)})) -
$$ $'' DBPROTOCOL(DRDA)
end
if old // 1000 = 1 then
say 'new' new 'old' old
end
say 'new' new 'old' old
call sqlDisconnect
$@proc loadNew $@¢
st = 0
$;
$<A540769.WK.REXX(DRDALAST)
$@for li $@¢
if abbrev($li, $'$#out ') then do
if st=1 then
leave
st = 1
iterate
end
if st = 0 then
iterate
parse value $li with co 'pkg' pkg 'last' la .
co = strip(co)
pkg = strip(pkg)
m.co2pkg.co = pkg
m.co2last.co = translate('789a4512', la, '123456789a')
$!
$!
$#out 20100622 09:10:58
$#out 20100622 09:10:01
$#out 20100622 09:07:08
REBIND PACKAGE(RF.RF0520.(REPO000024)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF0520.(REPO000030)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF0520.(REPO000034)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF0520.(REPO000036)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF0520.(REPO000044)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF0520.(REPO000046)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF0520.(REPO000053)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF0530.(REPO000028)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF0530.(REPO000030)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF0530.(REPO000032)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF0530.(REPO000034)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF0530.(REPO000036)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF0530.(REPO000041)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF0530.(REPO000044)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF0530.(REPO000051)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF0530.(REPO000046)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF0530.(REPO000053)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF0540.(REPO000024)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF0540.(REPO000030)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF0540.(REPO000044)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF0550.(REPO000024)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF0550.(REPO000030)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF0550.(REPO000044)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF0550.(REPO000053)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF5020.(REPO000028)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF5020.(REPO000030)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF5020.(REPO000032)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF5020.(REPO000034)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF5020.(REPO000036)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF5020.(REPO000041)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF5020.(REPO000044)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF5020.(REPO000051)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF5020.(REPO000046)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF5020.(REPO000053)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7010.(REPO000032)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7010.(REPO000044)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7010.(REPO000046)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7050.(REPO000024)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7050.(REPO000030)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7050.(REPO000044)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7050.(REPO000046)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7050.(REPO000053)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7070.(REPO000024)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7070.(REPO000030)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7070.(REPO000044)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7070.(REPO000046)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7070.(REPO000053)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7100.(REPO000024)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7100.(REPO000030)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7100.(REPO000041)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7100.(REPO000044)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7100.(REPO000046)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7100.(REPO000053)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7110.(REPO000024)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7110.(REPO000030)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7110.(REPO000041)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7110.(REPO000044)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7110.(REPO000046)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7120.(REPO000024)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7120.(REPO000030)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7120.(REPO000032)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7120.(REPO000036)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7120.(REPO000041)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7120.(REPO000044)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7120.(REPO000046)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7120.(REPO000053)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7130.(REPO000024)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7130.(REPO000030)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7130.(REPO000041)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7130.(REPO000049)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7130.(REPO000044)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7130.(REPO000046)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7130.(REPO000053)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7140.(REPO000024)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7140.(REPO000030)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7140.(REPO000041)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7140.(REPO000044)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7140.(REPO000046)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7140.(REPO000053)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7150.(REPO000018)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7150.(REPO000022)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7150.(REPO000024)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7160.(REPO000024)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7160.(REPO000030)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7160.(REPO000044)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7160.(REPO000046)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7170.(REPO000018)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7170.(REPO000022)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7170.(REPO000024)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7180.(REPO000024)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7180.(REPO000030)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7180.(REPO000032)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7180.(REPO000044)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7180.(REPO000046)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7180.(REPO000053)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF8000.(REPO000030)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF8000.(REPO000032)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF8000.(REPO000034)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF8000.(REPO000036)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF8000.(REPO000044)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF8000.(REPO000046)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF8010.(REPO000024)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF8010.(REPO000030)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF8010.(REPO000044)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF8010.(REPO000046)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF8010.(REPO000053)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF8020.(REPO000024)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF8020.(REPO000030)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF8020.(REPO000036)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF8020.(REPO000044)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF8020.(REPO000046)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF8020.(REPO000053)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF8030.(REPO000028)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF8030.(REPO000030)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF8030.(REPO000032)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF8030.(REPO000034)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF8030.(REPO000036)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF8030.(REPO000041)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF8030.(REPO000044)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF8030.(REPO000051)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF8030.(REPO000046)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF8030.(REPO000053)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF8040.(REPO000044)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF8040.(REPO000051)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF8040.(REPO000046)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.YRFKDE.(REPO00004459761880)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.YRFKDE.(REPO00004659C7BB83)) -
DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.YRFKDE.(REPO00004659C7BB83MVS)) -
DBPROTOCOL(DRDA)
$#out 20100622 09:06:36
$#out 20100621 15:07:36
}¢--- A540769.WK.REXX.O13(DRDAFREE) cre=2010-06-23 mod=2010-06-23-15.07.24 A540769 ---
ldat = 20081220
$;
$<A540769.WK.TEXW(DRDALASC)
$@for li $@¢
parse value $li with lPrd lPta vo con coll pkg vers .
/* say 'prd' lPrd 'pta' lPta 'vo' vo,
'con' con 'coll' coll 'pkg' pkg 'vers' vers'|' */
if lPrd >> lDat | lPta >> lDat | pos(vo, 'AY YY') > 0 then
say 'keeping' coll pkg vers
else
$$- ' FREE PACKAGE('coll'.'pkg'.('vers'))'
$!
$#out 20100623 15:06:45
FREE PACKAGE(LV.YLV001E.())
FREE PACKAGE(SI.YSI0132.())
FREE PACKAGE(SI.SI7550.())
FREE PACKAGE(BX.BX7900.())
FREE PACKAGE(CO.CO8000.())
FREE PACKAGE(CR.YCRAN01.())
FREE PACKAGE(BX.BX0330.())
FREE PACKAGE(CR.YCRAN02.())
FREE PACKAGE(CO.CO0030.())
FREE PACKAGE(BP.BP6020.())
FREE PACKAGE(NK.YNKSICB.())
FREE PACKAGE(BX.BX5200.())
FREE PACKAGE(BX.BX7400.())
FREE PACKAGE(LV.YLV001D.())
FREE PACKAGE(BX.BX7410.())
FREE PACKAGE(BX.BX7200.())
FREE PACKAGE(CI.YCI009.())
FREE PACKAGE(CI.YCI009A.())
FREE PACKAGE(WB.YWB5013.())
FREE PACKAGE(WB.YWB5012.())
FREE PACKAGE(BB.BB0620.())
FREE PACKAGE(KS.YKSLFNR.())
FREE PACKAGE(DG.YDGT031.())
FREE PACKAGE(UP.YUP13.())
FREE PACKAGE(UP.YUP23.())
FREE PACKAGE(BP.BP7090.())
FREE PACKAGE(SA.YSA0272.())
FREE PACKAGE(TR.YTRT931.(19960815141215S101702A056402AYTRT931))
FREE PACKAGE(BX.YBX0323.(19960815173146S101702A056350AYBX0323))
FREE PACKAGE(BX.YBX0321.(19960815173129S101702A056350AYBX0321))
FREE PACKAGE(SM.SMPLAN01.())
FREE PACKAGE(BX.BX6550.(19960822173742S101702Z262853ABX6550))
FREE PACKAGE(SX.YSX64P4.(19960822140946S101702A056633AYSX64P4))
FREE PACKAGE(SX.YSX6404.(19960822140947S101702A056633AYSX6404))
FREE PACKAGE(SM.SMPATCRE.())
FREE PACKAGE(SM.SMPHUPD.())
FREE PACKAGE(SM.SMPHUPD2.())
FREE PACKAGE(SM.SMPHUPD1.())
FREE PACKAGE(SX.YSX64P4.(19960830134305S101702Z264075AYSX64P4))
FREE PACKAGE(BX.BX6560.(19960826145905S101702Z263181ABX6560))
FREE PACKAGE(SX.YSX64P4.(19960828180725S101702A056782AYSX64P4))
FREE PACKAGE(KD.YKD0500.(19960902113434S101702Z264258AYKD0500))
FREE PACKAGE(SX.YSX64P4.(19960902111358S101702Z264248AYSX64P4))
FREE PACKAGE(SX.YSX64P4.(19960903133413S101702A056855AYSX64P4))
FREE PACKAGE(RR.RR7240.(19960905155311S101702M000711ARR7240))
FREE PACKAGE(YY.RR7240.(19960905155311S101702M000711ARR7240))
FREE PACKAGE(CD.YCDUP14.(19960905152821S101702M000711AYCDUP14))
FREE PACKAGE(EM.YEM0061.(19960905153007S101702M000711AYEM0061))
FREE PACKAGE(KD.YKD0500.(19960905153037S101702M000711AYKD0500))
FREE PACKAGE(KD.YKDV81.(19960905153031S101702M000711AYKDV81))
FREE PACKAGE(CD.YCDCIFD.(19960905153115S101702M000711AYCDCIFD))
FREE PACKAGE(KD.YKD0642.(19960905153039S101702M000711AYKD0642))
FREE PACKAGE(CD.YCD0020.(19960905135843S101702A056819AYCD0020))
FREE PACKAGE(VP.YVPUP01.(19960905135845S101702A056819AYVPUP01))
FREE PACKAGE(BX.BX6570.(19960912102108S101702Z265961ABX6570))
FREE PACKAGE(EM.YEM0061.(19960912215244S101702M000710AYEM0061))
FREE PACKAGE(EM.YEM0065.(19960912215245S101702M000710AYEM0065))
FREE PACKAGE(EA.YEA0001.(19960912215250S101702M000710AYEA0001))
FREE PACKAGE(LV.YLV0024.(19960919134517S101702A057205AYLV0024))
FREE PACKAGE(BX.BX6500.(19960919140931S101702A057271ABX6500))
FREE PACKAGE(BX.BX6560.(19960919140932S101702A057273ABX6560))
FREE PACKAGE(BX.BX6570.(19960919140933S101702A057273ABX6570))
FREE PACKAGE(BX.BX6550.(19960919140932S101702A057273ABX6550))
FREE PACKAGE(LV.YLV0024.(19960916065859S101702Z266234AYLV0024))
FREE PACKAGE(BB.BB0630.(19960613175401S101702A054931ABB0630))
FREE PACKAGE(EM.YEM0900.(19960613174145S101702A054886AYEM0900))
FREE PACKAGE(OD.OD7020.(19960613145427S101702A054902AOD7020))
FREE PACKAGE(BX.YBX0321.(19960613151234S101702A054925AYBX0321))
FREE PACKAGE(BX.YBX0323.(19960613151236S101702A054925AYBX0323))
FREE PACKAGE(BX.YBX0322.(19960613151235S101702A054925AYBX0322))
FREE PACKAGE(SX.YSX5104.(19960613151300S101702A054928AYSX5104))
FREE PACKAGE(SX.YSX64P4.(19960613151302S101702A054928AYSX64P4))
FREE PACKAGE(SX.YSX6404.(19960614151554S101702A055046AYSX6404))
FREE PACKAGE(SX.YSX64P4.(19960614151553S101702A055046AYSX64P4))
FREE PACKAGE(BX.YBX0321.(19960614070338S101702Z252740AYBX0321))
FREE PACKAGE(BX.YBX0322.(19960614070339S101702Z252740AYBX0322))
FREE PACKAGE(BX.YBX0323.(19960614070339S101702Z252740AYBX0323))
FREE PACKAGE(BX.YBX0323.(19960614071637S101702Z252742AYBX0323))
FREE PACKAGE(BX.YBX0321.(19960614071636S101702Z252742AYBX0321))
FREE PACKAGE(BX.YBX0322.(19960614071450S101702Z252741AYBX0322))
FREE PACKAGE(SX.YSX6404.(19960614082939S101702Z252755AYSX6404))
FREE PACKAGE(VP.YVP7403.(19960621113930S101702Z254159AYVP7403))
FREE PACKAGE(VP.YVP7403.(19960621144556S101702Z254221AYVP7403))
FREE PACKAGE(SX.YSX64P4.(19960621161730S101702A055254AYSX64P4))
FREE PACKAGE(VP.YVP7403.(19960617134248S101702Z253094AYVP7403))
FREE PACKAGE(SX.YSX64P4.(19960617152900S101702A055080AYSX64P4))
FREE PACKAGE(SX.YSX6404.(19960617152901S101702A055080AYSX6404))
FREE PACKAGE(VP.YVP7403.(19960618163032S101702Z253537AYVP7403))
FREE PACKAGE(BX.YBX0311.(19960618173627S101702Z253574AYBX0311))
FREE PACKAGE(SX.YSX5104.(19960619123317S101702Z253706AYSX5104))
FREE PACKAGE(SX.YSX5104.(19960620124151S101702Z253982AYSX5104))
FREE PACKAGE(KD.YKD0640.(19960620140639S101702A055061AYKD0640))
FREE PACKAGE(KD.YKD0641.(19960620140639S101702A055061AYKD0641))
FREE PACKAGE(EM.YEM0900.(19960620140644S101702A055061AYEM0900))
FREE PACKAGE(KD.YKD0500.(19960620140638S101702A055061AYKD0500))
FREE PACKAGE(BX.YBX0363.(19960620104733S101702Z253936AYBX0363))
FREE PACKAGE(BX.YBX0362.(19960620104732S101702Z253936AYBX0362))
FREE PACKAGE(BX.YBX0361.(19960620104731S101702Z253936AYBX0361))
FREE PACKAGE(BX.YBX0312.(19960620113121S101702Z253964AYBX0312))
FREE PACKAGE(BX.YBX0311.(19960620113120S101702Z253964AYBX0311))
FREE PACKAGE(SX.YSX5104.(19960620153501S101702Z254046AYSX5104))
FREE PACKAGE(SX.YSX5104.(19960625135551S101702A055308AYSX5104))
FREE PACKAGE(VP.YVP7403.(19960627143112S101702A055358AYVP7403))
FREE PACKAGE(SX.YSX6404.(19960627143103S101702A055354AYSX6404))
FREE PACKAGE(EM.EM0900.(19960704140613S101702A055506AEM0900))
FREE PACKAGE(NP.NP0360.(19960704140529S101702A055458ANP0360))
FREE PACKAGE(SX.YSX6404.(19960704142038S101702A055548AYSX6404))
FREE PACKAGE(CD.YCD0020.(19960704164722S101702A055520AYCD0020))
FREE PACKAGE(BX.YBX0363.(19960704163424S101702A055219AYBX0363))
FREE PACKAGE(BX.YBX0361.(19960704163417S101702A055219AYBX0361))
FREE PACKAGE(BX.YBX0321.(19960704163427S101702A055219AYBX0321))
FREE PACKAGE(BX.YBX0323.(19960704163416S101702A055219AYBX0323))
FREE PACKAGE(BX.YBX0362.(19960704163419S101702A055219AYBX0362))
FREE PACKAGE(BX.YBX0312.(19960704163425S101702A055219AYBX0312))
FREE PACKAGE(BX.YBX0311.(19960704163425S101702A055219AYBX0311))
FREE PACKAGE(BX.YBX0322.(19960704163429S101702A055219AYBX0322))
FREE PACKAGE(CD.YCD0020.(19960704173143S101702A055520AYCD0020))
FREE PACKAGE(VP.YVPUP01.(19960704173144S101702A055520AYVPUP01))
FREE PACKAGE(VP.YVPUP01.(19960705075226S101702A055520AYVPUP01))
FREE PACKAGE(CD.YCD0020.(19960705075225S101702A055520AYCD0020))
FREE PACKAGE(BX.YBX0311.(19960711134555S101702A055749AYBX0311))
FREE PACKAGE(BX.YBX0313.(19960711134603S101702A055749AYBX0313))
FREE PACKAGE(BX.YBX0321.(19960711134539S101702A055749AYBX0321))
FREE PACKAGE(BX.YBX0322.(19960711134542S101702A055749AYBX0322))
FREE PACKAGE(BX.YBX0323.(19960711134551S101702A055749AYBX0323))
FREE PACKAGE(BX.YBX0312.(19960711134559S101702A055749AYBX0312))
FREE PACKAGE(KD.YKD0643.(19960709095917S101702Z256432AYKD0643))
FREE PACKAGE(KD.YKD0643.(19960718135640S101702A055861AYKD0643))
FREE PACKAGE(LV.YLV0024.(19960729175120S101702A056132AYLV0024))
FREE PACKAGE(BX.YBX0323.(19960730104336S101702Z259999AYBX0323))
FREE PACKAGE(BX.YBX0321.(19960730104336S101702Z259999AYBX0321))
FREE PACKAGE(BX.YBX0322.(19960730104336S101702Z259999AYBX0322))
FREE PACKAGE(BX.YBX0313.(19960730103039S101702Z259993AYBX0313))
FREE PACKAGE(BX.YBX0312.(19960730103038S101702Z259993AYBX0312))
FREE PACKAGE(BX.YBX0311.(19960730103037S101702Z259993AYBX0311))
FREE PACKAGE(BX.YBX0313.(19960730134829S101702Z259993AYBX0313))
FREE PACKAGE(BX.YBX0311.(19960730134827S101702Z259993AYBX0311))
FREE PACKAGE(BX.YBX0312.(19960730134828S101702Z259993AYBX0312))
FREE PACKAGE(BX.YBX0322.(19960730135122S101702Z260054AYBX0322))
FREE PACKAGE(BX.YBX0323.(19960730135346S101702Z260055AYBX0323))
FREE PACKAGE(BX.YBX0321.(19960730135345S101702Z260055AYBX0321))
FREE PACKAGE(EA.YEA0001.(19960731143941S101702A056130AYEA0001))
FREE PACKAGE(KX.YKX002.(19960731150729S101702A056211AYKX002))
FREE PACKAGE(BX.BX6500.(19960806145757S101702Z260717ABX6500))
FREE PACKAGE(KD.YKDV81.(19960808143159S101702A056273AYKDV81))
FREE PACKAGE(EM.YEM0061.(19960808143147S101702A056273AYEM0061))
FREE PACKAGE(KD.YKDT00.(19960808143156S101702A056273AYKDT00))
FREE PACKAGE(KD.YKD0642.(19960808143158S101702A056273AYKD0642))
FREE PACKAGE(BX.YBX0121.(19960808183126S101702A056200AYBX0121))
FREE PACKAGE(BX.YBX0342.(19960808183116S101702A056200AYBX0342))
FREE PACKAGE(BX.YBX0343.(19960808183117S101702A056200AYBX0343))
FREE PACKAGE(BX.YBX0313.(19960808183114S101702A056200AYBX0313))
FREE PACKAGE(BX.YBX0311.(19960808183112S101702A056200AYBX0311))
FREE PACKAGE(BX.YBX0363.(19960808183121S101702A056200AYBX0363))
FREE PACKAGE(BX.YBX0361.(19960808183119S101702A056200AYBX0361))
FREE PACKAGE(BX.YBXBI03.(19960808183125S101702A056200AYBXBI03))
FREE PACKAGE(BX.YBX0383.(19960808183123S101702A056200AYBX0383))
FREE PACKAGE(CR.YCRAN01.(19960808183350S101702A056200AYCRAN01))
FREE PACKAGE(BX.YBX0382.(19960808183122S101702A056200AYBX0382))
FREE PACKAGE(BX.YBX0381.(19960808183121S101702A056200AYBX0381))
FREE PACKAGE(BX.YBX0362.(19960808183120S101702A056200AYBX0362))
FREE PACKAGE(BX.YBX0312.(19960808183113S101702A056200AYBX0312))
FREE PACKAGE(BX.YBX0341.(19960808183116S101702A056200AYBX0341))
FREE PACKAGE(BX.YBX0322.(19960808183124S101702A056200AYBX0322))
FREE PACKAGE(BX.YBXBI01.(19960808183118S101702A056200AYBXBI01))
FREE PACKAGE(CR.YCRAN02.(19960808183522S101702A056200AYCRAN02))
FREE PACKAGE(BX.BX0330.(19960808183517S101702A056200ABX0330))
FREE PACKAGE(LV.YLV0024.(19960809104406S101702A056380AYLV0024))
FREE PACKAGE(OD.OD7281.(19961127172307S101702Z280020AOD7281))
FREE PACKAGE(LC.LC5000.(19961128134126S101702A059244ALC5000))
FREE PACKAGE(EW.EW7010.(19961128134025S101702A059169AEW7010))
FREE PACKAGE(KD.YKDH91.(19961128144447S101702A059147AYKDH91))
FREE PACKAGE(SX.YSX6404.(19961125153301S101702A059164AYSX6404))
FREE PACKAGE(SX.YSX64P4.(19961125153300S101702A059164AYSX64P4))
FREE PACKAGE(OD.OD7281.(19961126165931S101702Z279665AOD7281))
FREE PACKAGE(SX.YSX6404.(19961205153416S101702M000752AYSX6404))
FREE PACKAGE(SX.YSX6405.(19961205153417S101702M000752AYSX6405))
FREE PACKAGE(SX.YSX64P4.(19961205153414S101702M000752AYSX64P4))
FREE PACKAGE(CD.YCDCIFD.(19961205161342S101702A059523AYCDCIFD))
FREE PACKAGE(OD.OD7281.(19961205165458S101702A059431AOD7281))
FREE PACKAGE(OD.OD7290.(19961205165500S101702A059431AOD7290))
FREE PACKAGE(TK.TK0100.(19961211093410S101702Z282987ATK0100))
FREE PACKAGE(BX.BX6500.(19961212132750S101702A059703ABX6500))
FREE PACKAGE(BX.BX6410.(19961212132749S101702A059703ABX6410))
FREE PACKAGE(BX.BX8110.(19961212132748S101702A059703ABX8110))
FREE PACKAGE(BX.BX6550.(19961212132745S101702A059703ABX6550))
FREE PACKAGE(BX.BX6560.(19961212132746S101702A059703ABX6560))
FREE PACKAGE(BX.BX6570.(19961212132746S101702A059703ABX6570))
FREE PACKAGE(SA.SA0240.(19961212130630S101702A059412ASA0240))
FREE PACKAGE(GE.GE7550.(19961212131947S101702A059641AGE7550))
FREE PACKAGE(SX.YSX64P5.(19961212135753S101702A059837AYSX64P5))
FREE PACKAGE(TK.TK0100.(19961216234803S101702Z284134ATK0100))
FREE PACKAGE(OD.OD7140.(19961216232158S101702Z284121AOD7140))
FREE PACKAGE(OD.OD7240.(19961216232811S101702Z284125AOD7240))
FREE PACKAGE(OD.OD7160.(19961216233243S101702Z284130AOD7160))
FREE PACKAGE(TK.TK0100.(19961217171109S101702A060053ATK0100))
FREE PACKAGE(EA.YEA0001.(19961212173052S101702A059672AYEA0001))
FREE PACKAGE(BX.YBXBI02.(19961212173256S101702A059679AYBXBI02))
FREE PACKAGE(BX.YBXBI01.(19961212173255S101702A059679AYBXBI01))
FREE PACKAGE(BX.YBX0311.(19961212173254S101702A059679AYBX0311))
FREE PACKAGE(BX.YBX0121.(19961212173258S101702A059679AYBX0121))
FREE PACKAGE(BX.YBXBI03.(19961212173257S101702A059679AYBXBI03))
FREE PACKAGE(VT.VT7799.(19961213190927S101702A059882AVT7799))
FREE PACKAGE(SX.YSX6405.(19961219141040S101702A060107AYSX6405))
FREE PACKAGE(OD.OD7240.(19961219141032S101702A060087AOD7240))
FREE PACKAGE(OD.OD7160.(19961219141049S101702A060087AOD7160))
FREE PACKAGE(OD.OD7140.(19961219141048S101702A060087AOD7140))
FREE PACKAGE(TK.TK0160.(19961219141039S101702A060093ATK0160))
FREE PACKAGE(EA.YEA0001.(19961227161942S101702A060313AYEA0001))
FREE PACKAGE(EA.YEA0011.(19961227161943S101702A060313AYEA0011))
FREE PACKAGE(EA.YEA0010.(19961227161943S101702A060313AYEA0010))
FREE PACKAGE(EA.YEA0001.(19961227131336S101702A060313AYEA0001))
FREE PACKAGE(EA.YEA0011.(19961227131340S101702A060313AYEA0011))
FREE PACKAGE(EA.YEA0010.(19961227131338S101702A060313AYEA0010))
FREE PACKAGE(KD.YKDR78.(19960926133932S101702A057314AYKDR78))
FREE PACKAGE(KD.YKDV81.(19960926133929S101702A057314AYKDV81))
FREE PACKAGE(KD.YKD0641.(19960926133927S101702A057314AYKD0641))
FREE PACKAGE(KD.YKD0643.(19960926133929S101702A057314AYKD0643))
FREE PACKAGE(KD.YKD0642.(19960926133928S101702A057314AYKD0642))
FREE PACKAGE(EM.YEM0061.(19960926133930S101702A057314AYEM0061))
FREE PACKAGE(KD.YKD0640.(19960926133932S101702A057314AYKD0640))
FREE PACKAGE(BX.BX7150.(19960926155302S101702A057383ABX7150))
FREE PACKAGE(BX.BX5200.(19960926155311S101702A057383ABX5200))
FREE PACKAGE(BX.BX7620.(19960926155305S101702A057383ABX7620))
FREE PACKAGE(BX.BX8100.(19960926155310S101702A057383ABX8100))
FREE PACKAGE(BX.BX6410.(19960926155312S101702A057383ABX6410))
FREE PACKAGE(EM.YEM0061.(19961003140825S101702A057537AYEM0061))
FREE PACKAGE(KD.YKD0642.(19961003140829S101702A057537AYKD0642))
FREE PACKAGE(KD.YKDV81.(19961003140832S101702A057537AYKDV81))
FREE PACKAGE(KD.YKDV81.(19960927084725S101702Z268022AYKDV81))
FREE PACKAGE(KD.YKD0642.(19960927085133S101702Z268027AYKD0642))
FREE PACKAGE(EM.YEM0061.(19960927085815S101702Z268032AYEM0061))
FREE PACKAGE(BX.YBX0311.(19961009134202S101702Z269958AYBX0311))
FREE PACKAGE(BX.YBXBI02.(19961003150557S101702A057489AYBXBI02))
FREE PACKAGE(BX.YBX0321.(19961003150555S101702A057489AYBX0321))
FREE PACKAGE(BX.YBXBI01.(19961003150557S101702A057489AYBXBI01))
FREE PACKAGE(BX.YBX0323.(19961003150556S101702A057489AYBX0323))
FREE PACKAGE(BX.YBX0121.(19961003150558S101702A057489AYBX0121))
FREE PACKAGE(BX.YBX0312.(19961003150554S101702A057489AYBX0312))
FREE PACKAGE(BX.YBX0313.(19961003150554S101702A057489AYBX0313))
FREE PACKAGE(BX.YBX0382.(19961003150556S101702A057489AYBX0382))
FREE PACKAGE(BX.YBXBI03.(19961003150558S101702A057489AYBXBI03))
FREE PACKAGE(BX.YBX0311.(19961003150552S101702A057489AYBX0311))
FREE PACKAGE(BX.YBX0320.(19961003150555S101702A057489AYBX0320))
FREE PACKAGE(BX.YBX0321.(19961003163434S101702A057489AYBX0321))
FREE PACKAGE(BX.YBXBI02.(19961003163436S101702A057489AYBXBI02))
FREE PACKAGE(BX.YBX0382.(19961003163435S101702A057489AYBX0382))
FREE PACKAGE(BX.YBX0313.(19961003163433S101702A057489AYBX0313))
FREE PACKAGE(BX.YBXBI01.(19961003163436S101702A057489AYBXBI01))
FREE PACKAGE(BX.YBX0311.(19961003163431S101702A057489AYBX0311))
FREE PACKAGE(BX.YBX0312.(19961003163432S101702A057489AYBX0312))
FREE PACKAGE(BX.YBX0320.(19961003163434S101702A057489AYBX0320))
FREE PACKAGE(BX.YBX0121.(19961003163437S101702A057489AYBX0121))
FREE PACKAGE(BX.YBX0323.(19961003163435S101702A057489AYBX0323))
FREE PACKAGE(BX.YBXBI03.(19961003163436S101702A057489AYBXBI03))
FREE PACKAGE(OD.OD7070.(19961021083513S101702Z271571AOD7070))
FREE PACKAGE(SX.YSX6404.(19961018151537S101702A058019AYSX6404))
FREE PACKAGE(SX.YSX6404.(19961023130053S101702A058044AYSX6404))
FREE PACKAGE(BX.YBX0311.(19961024141922S101702A057873AYBX0311))
FREE PACKAGE(OD.OD7070.(19961024142938S101702A058057AOD7070))
FREE PACKAGE(OD.OD7090.(19961024142939S101702A058057AOD7090))
FREE PACKAGE(CD.YCDUP14.(19961031150600S101702M000738AYCDUP14))
FREE PACKAGE(GE.GE7550.(19961107194151S101702M000730AGE7550))
FREE PACKAGE(CD.YCDUP14.(19961114194605S101702M000743AYCDUP14))
FREE PACKAGE(SA.YSAT301.(19961114194931S101702M000743AYSAT301))
FREE PACKAGE(CD.YCDCIFD.(19961114194635S101702M000743AYCDCIFD))
FREE PACKAGE(CD.YCDUP14.(19961114175620S101702M000743AYCDUP14))
FREE PACKAGE(CD.YCDCIFD.(19961114175616S101702M000743AYCDCIFD))
FREE PACKAGE(AT.AT7060.(19961114135124S101702A058435AAT7060))
FREE PACKAGE(CD.YCDUP14.(19961114144213S101702M000743AYCDUP14))
FREE PACKAGE(CD.YCDCIFD.(19961114144241S101702M000743AYCDCIFD))
FREE PACKAGE(SA.YSAT301.(19961114144601S101702M000743AYSAT301))
FREE PACKAGE(SX.YSX64P4.(19961121140040S101702M000745AYSX64P4))
FREE PACKAGE(SX.YSX6405.(19961121140041S101702M000745AYSX6405))
FREE PACKAGE(EW.EW7010.(19961121165906S101702A058971AEW7010))
FREE PACKAGE(SX.YSX64P4.(19961122163939S101702A059128AYSX64P4))
FREE PACKAGE(SX.YSX6404.(19961122163940S101702A059128AYSX6404))
FREE PACKAGE(SX.YSX64P4.(19961123055027S101702Z279032AYSX64P4))
FREE PACKAGE(SX.YSX6404.(19961123055028S101702Z279032AYSX6404))
FREE PACKAGE(YY.YYWBMON.(19970310092637S101702Z300188AYYWBMON))
FREE PACKAGE(YY.YYWBMON.(19970310112514S101702Z300265AYYWBMON))
FREE PACKAGE(YY.YYWBMON.(19970310123454S101702Z300265AYYWBMON))
FREE PACKAGE(YY.YYWBMON.(19970310121902S101702Z300265AYYWBMON))
FREE PACKAGE(YY.YYWBMON.(19970310134551S101702Z300265AYYWBMON))
FREE PACKAGE(YY.YYWBMON.(19970307110926S101702A062134AYYWBMON))
FREE PACKAGE(YY.YYWBMON.(19970308142853S101702Z300112AYYWBMON))
FREE PACKAGE(YY.YYWBMON.(19970317082407S101702Z301640AYYWBMON))
FREE PACKAGE(YY.YYWBMON.(19970317122158S101702Z301640AYYWBMON))
FREE PACKAGE(LV.YLV0024.(19970313130752S101702A062314AYLV0024))
FREE PACKAGE(YY.YYWBMON.(19970313144250S101702M000717AYYWBMON))
FREE PACKAGE(YY.YYWBMON.(19970313192604S101702M000717AYYWBMON))
FREE PACKAGE(YY.YYWBMON.(19970315112351S101702Z301577AYYWBMON))
FREE PACKAGE(YY.YYWBMON.(19970315122939S101702Z301585AYYWBMON))
FREE PACKAGE(YY.YYWBMON.(19970324082836S101702Z303012AYYWBMON))
FREE PACKAGE(YY.YYWBMON.(19970324093352S101702Z303012AYYWBMON))
FREE PACKAGE(YY.YYWBMON.(19970318115741S101702Z302125AYYWBMON))
FREE PACKAGE(EA.YEA0010.(19970320132759S101702A062550AYEA0010))
FREE PACKAGE(TK.TK0160.(19970320132918S101702A062552ATK0160))
FREE PACKAGE(TK.TK0120.(19970320132922S101702A062552ATK0120))
FREE PACKAGE(CD.YCDCIFD.(19970320153542S101702M000778AYCDCIFD))
FREE PACKAGE(YY.YYWBMON.(19970321120417S101702Z302741AYYWBMON))
FREE PACKAGE(YY.YYWBMON.(19970321125900S101702Z302861AYYWBMON))
FREE PACKAGE(YY.YYWBMON.(19970321142116S101702Z302861AYYWBMON))
FREE PACKAGE(YY.YYWBMON.(19970321070837S101702Z302741AYYWBMON))
FREE PACKAGE(YY.YYWBMON.(19970321103457S101702Z302741AYYWBMON))
FREE PACKAGE(YY.YYWBMON.(19970321101634S101702Z302741AYYWBMON))
FREE PACKAGE(YY.YYWBMON.(19970321113725S101702Z302741AYYWBMON))
FREE PACKAGE(YY.YYWBMON.(19970324152338S101702Z303012AYYWBMON))
FREE PACKAGE(YY.YYWBMON.(19970324155417S101702Z303012AYYWBMON))
FREE PACKAGE(YY.YYWBMON.(19970325103538S101702Z303341AYYWBMON))
FREE PACKAGE(KD.YKDH00.(19970326152925S101702A062772AYKDH00))
FREE PACKAGE(KD.YKD0500.(19970326152928S101702A062772AYKD0500))
FREE PACKAGE(KD.YKDS91.(19970327180544S101702A062772AYKDS91))
FREE PACKAGE(KD.YKDH00.(19970327180543S101702A062772AYKDH00))
FREE PACKAGE(A1P.YKD0500.(19970327180544S101702A062772AYKD0500))
FREE PACKAGE(A2P.YKD0500.(19970327180544S101702A062772AYKD0500))
FREE PACKAGE(KD.YKD0500.(19970327180544S101702A062772AYKD0500))
FREE PACKAGE(EA.YEA0010.(19970401145030S101702Z304098AYEA0010))
FREE PACKAGE(YY.YYWBMON.(19970402133425S101702Z304278AYYWBMON))
FREE PACKAGE(YY.YYNFP24.(19970403153340S101702A062839AYYNFP24))
FREE PACKAGE(YY.YYNFP14.(19970403153334S101702A062839AYYNFP14))
FREE PACKAGE(SX.YSX6405.(19970403143003S101702M000784AYSX6405))
FREE PACKAGE(SX.YSX64P5.(19970403142956S101702M000784AYSX64P5))
FREE PACKAGE(A2P.FD0350.(19970410145407S101702A062970AFD0350))
FREE PACKAGE(BX.YBX0323.(19970410143107S101702A063036AYBX0323))
FREE PACKAGE(BX.YBX0381.(19970410143108S101702A063036AYBX0381))
FREE PACKAGE(BX.YBX0312.(19970410143101S101702A063036AYBX0312))
FREE PACKAGE(BX.YBXBI02.(19970410143058S101702A063036AYBXBI02))
FREE PACKAGE(BX.YBX0121.(19970410143059S101702A063036AYBX0121))
FREE PACKAGE(BX.YBXBI03.(19970410143058S101702A063036AYBXBI03))
FREE PACKAGE(BX.YBX0383.(19970410143110S101702A063036AYBX0383))
FREE PACKAGE(BX.YBX0313.(19970410143102S101702A063036AYBX0313))
FREE PACKAGE(BX.YBX0321.(19970410143104S101702A063036AYBX0321))
FREE PACKAGE(BX.YBX0382.(19970410143109S101702A063036AYBX0382))
FREE PACKAGE(BX.YBX0311.(19970410143100S101702A063036AYBX0311))
FREE PACKAGE(BX.YBX0320.(19970410143103S101702A063036AYBX0320))
FREE PACKAGE(BX.YBXBI01.(19970410143057S101702A063036AYBXBI01))
FREE PACKAGE(YY.YYWBMON.(19970407100855S101702Z304797AYYWBMON))
FREE PACKAGE(OD.OD7300.(19970106172633S101702A060567AOD7300))
FREE PACKAGE(OD.OD7300.(19970107160900S101702A060607AOD7300))
FREE PACKAGE(EA.YEA0011.(19970108165718S101702Z289119AYEA0011))
FREE PACKAGE(EA.YEA0010.(19970108165717S101702Z289119AYEA0010))
FREE PACKAGE(SX.YSX64P5.(19970109134552S101702A060555AYSX64P5))
FREE PACKAGE(LV.YLV0024.(19970109144533S101702A060651AYLV0024))
FREE PACKAGE(BX.YBX0320.(19970116175300S101702A060891AYBX0320))
FREE PACKAGE(BX.YBX0382.(19970116175301S101702A060891AYBX0382))
FREE PACKAGE(BX.YBX0312.(19970116175259S101702A060891AYBX0312))
FREE PACKAGE(EA.YEA0011.(19970123135233S101702A061046AYEA0011))
FREE PACKAGE(EA.YEA0010.(19970123135233S101702A061046AYEA0010))
FREE PACKAGE(A2P.FD0350.(19970128173847S101702Z293371AFD0350))
FREE PACKAGE(CR.CR5000.(19970206135312S101702A061341ACR5000))
FREE PACKAGE(SX.YSX6405.(19970206143330S101702A061469AYSX6405))
FREE PACKAGE(SX.YSX64P5.(19970206143327S101702A061469AYSX64P5))
FREE PACKAGE(EA.YEA0010.(19970206155028S101702M000764AYEA0010))
FREE PACKAGE(EA.YEA0001.(19970206155025S101702M000764AYEA0001))
FREE PACKAGE(EA.YEA0011.(19970206155016S101702M000764AYEA0011))
FREE PACKAGE(A1P.YKD0500.(19970207084459S101702A061408AYKD0500))
FREE PACKAGE(A2P.YKD0500.(19970207084459S101702A061408AYKD0500))
FREE PACKAGE(KD.YKD0500.(19970207084459S101702A061408AYKD0500))
FREE PACKAGE(A1P.KD0500.(19970207084703S101702A061408AKD0500))
FREE PACKAGE(A2P.KD0500.(19970207084703S101702A061408AKD0500))
FREE PACKAGE(A1P.YKD0500.(19970220131055S101702A061859AYKD0500))
FREE PACKAGE(A2P.YKD0500.(19970220131055S101702A061859AYKD0500))
FREE PACKAGE(KD.YKD0500.(19970220131055S101702A061859AYKD0500))
FREE PACKAGE(CD.YCDCIFD.(19970227151435S101702A061867AYCDCIFD))
FREE PACKAGE(OE.OE8110.(19970227165001S101702A062050AOE8110))
FREE PACKAGE(SX.YSX6405.(19970620152422S101702A064844AYSX6405))
FREE PACKAGE(BX.YBX0323.(19970703160012S101702A064922AYBX0323))
FREE PACKAGE(BX.YBX0383.(19970703160013S101702A064922AYBX0383))
FREE PACKAGE(BX.YBX0382.(19970703160012S101702A064922AYBX0382))
FREE PACKAGE(BX.YBX0312.(19970703160008S101702A064922AYBX0312))
FREE PACKAGE(BX.YBXBI02.(19970703160014S101702A064922AYBXBI02))
FREE PACKAGE(BX.YBX0313.(19970703160009S101702A064922AYBX0313))
FREE PACKAGE(BX.YBX0381.(19970703160012S101702A064922AYBX0381))
FREE PACKAGE(BX.YBX0321.(19970703160011S101702A064922AYBX0321))
FREE PACKAGE(BX.YBX0320.(19970703160010S101702A064922AYBX0320))
FREE PACKAGE(BX.YBX0311.(19970703160008S101702A064922AYBX0311))
FREE PACKAGE(BX.YBXBI01.(19970703160014S101702A064922AYBXBI01))
FREE PACKAGE(BX.YBX0121.(19970703160016S101702A064922AYBX0121))
FREE PACKAGE(BX.YBXBI03.(19970703160015S101702A064922AYBXBI03))
FREE PACKAGE(OD.OD7290.(19970703160551S101702M000808AOD7290))
FREE PACKAGE(OD.OD7300.(19970703160555S101702M000808AOD7300))
FREE PACKAGE(OD.OD7160.(19970703160630S101702M000808AOD7160))
FREE PACKAGE(BX.YBX0312.(19970708065743S101702Z320108AYBX0312))
FREE PACKAGE(BX.YBX0321.(19970708074924S101702Z320111AYBX0321))
FREE PACKAGE(BX.YBX0320.(19970708074923S101702Z320111AYBX0320))
FREE PACKAGE(BX.YBX0321.(19970708085757S101702Z320122AYBX0321))
FREE PACKAGE(BX.YBX0320.(19970708085756S101702Z320122AYBX0320))
FREE PACKAGE(BX.YBX0321.(19970708083532S101702Z320122AYBX0321))
FREE PACKAGE(BX.YBX0320.(19970708083532S101702Z320122AYBX0320))
FREE PACKAGE(BX.YBX0321.(19970708092728S101702Z320133AYBX0321))
FREE PACKAGE(BX.YBX0320.(19970708092727S101702Z320133AYBX0320))
FREE PACKAGE(BX.YBX0312.(19970710130348S101702A065203AYBX0312))
FREE PACKAGE(BX.YBX0320.(19970710130345S101702A065203AYBX0320))
FREE PACKAGE(BX.YBX0321.(19970710130346S101702A065203AYBX0321))
FREE PACKAGE(SX.YSX64P5.(19970707141043S101702A065151AYSX64P5))
FREE PACKAGE(SX.YSX6405.(19970707141044S101702A065151AYSX6405))
FREE PACKAGE(SX.YSX6405.(19970714142047S101702A065304AYSX6405))
FREE PACKAGE(SX.YSX64P5.(19970714142046S101702A065304AYSX64P5))
FREE PACKAGE(SX.YSX64P5.(19970715153931S101702A065354AYSX64P5))
FREE PACKAGE(SX.YSX6405.(19970715153931S101702A065354AYSX6405))
FREE PACKAGE(YY.YYWBMON.(19970710142705S101702M000721AYYWBMON))
FREE PACKAGE(BF.BF5820.(19970710145443S101702M000721ABF5820))
FREE PACKAGE(BX.YBX0311.(19970711071158S101702Z320845AYBX0311))
FREE PACKAGE(BX.BX6400.(19970717131027S101702A065289ABX6400))
FREE PACKAGE(BX.YBXBI03.(19970717131555S101702A065362AYBXBI03))
FREE PACKAGE(BX.YBX0313.(19970717131547S101702A065362AYBX0313))
FREE PACKAGE(BX.YBXBI02.(19970717131554S101702A065362AYBXBI02))
FREE PACKAGE(EA.YEA0011.(19970717131722S101702A065360AYEA0011))
FREE PACKAGE(BX.YBX0312.(19970717131547S101702A065362AYBX0312))
FREE PACKAGE(BX.YBX0320.(19970717131548S101702A065362AYBX0320))
FREE PACKAGE(BX.YBX0121.(19970717131555S101702A065362AYBX0121))
FREE PACKAGE(BX.YBX0383.(19970717131553S101702A065362AYBX0383))
FREE PACKAGE(BX.YBX0381.(19970717131551S101702A065362AYBX0381))
FREE PACKAGE(BX.YBX0382.(19970717131552S101702A065362AYBX0382))
FREE PACKAGE(BX.YBX0323.(19970717131550S101702A065362AYBX0323))
FREE PACKAGE(BX.YBX0321.(19970717131549S101702A065362AYBX0321))
FREE PACKAGE(BX.YBXBI01.(19970717131551S101702A065362AYBXBI01))
FREE PACKAGE(BX.YBX0311.(19970717131546S101702A065362AYBX0311))
FREE PACKAGE(EA.YEA0010.(19970717131720S101702A065360AYEA0010))
FREE PACKAGE(BX.YBX0311.(19970717133054S101702A065362AYBX0311))
FREE PACKAGE(BX.YBX0320.(19970717133057S101702A065362AYBX0320))
FREE PACKAGE(BX.YBX0321.(19970717133058S101702A065362AYBX0321))
FREE PACKAGE(BX.YBX0313.(19970717133056S101702A065362AYBX0313))
FREE PACKAGE(BX.YBX0312.(19970717133055S101702A065362AYBX0312))
FREE PACKAGE(BX.YBX0121.(19970717133108S101702A065362AYBX0121))
FREE PACKAGE(BX.YBX0381.(19970717133103S101702A065362AYBX0381))
FREE PACKAGE(BX.YBX0383.(19970717133105S101702A065362AYBX0383))
FREE PACKAGE(BX.YBXBI02.(19970717133106S101702A065362AYBXBI02))
FREE PACKAGE(BX.YBXBI03.(19970717133107S101702A065362AYBXBI03))
FREE PACKAGE(BX.YBX0323.(19970717133101S101702A065362AYBX0323))
FREE PACKAGE(BX.YBX0382.(19970717133104S101702A065362AYBX0382))
FREE PACKAGE(BX.YBXBI01.(19970717133102S101702A065362AYBXBI01))
FREE PACKAGE(DX.DX5400.(19970417125527S101702A063250ADX5400))
FREE PACKAGE(DX.DX5410.(19970417125528S101702A063250ADX5410))
FREE PACKAGE(BX.YBX0313.(19970417134905S101702A063207AYBX0313))
FREE PACKAGE(BX.YBX0321.(19970417134905S101702A063207AYBX0321))
FREE PACKAGE(BX.YBX0312.(19970417134903S101702A063207AYBX0312))
FREE PACKAGE(BX.YBX0311.(19970417134902S101702A063207AYBX0311))
FREE PACKAGE(BX.YBX0321.(19970417142631S101702A063207AYBX0321))
FREE PACKAGE(BX.YBX0311.(19970417142628S101702A063207AYBX0311))
FREE PACKAGE(BX.YBX0313.(19970417142630S101702A063207AYBX0313))
FREE PACKAGE(BX.YBX0312.(19970417142629S101702A063207AYBX0312))
FREE PACKAGE(YY.YYWBMON.(19970417151042S101702M000718AYYWBMON))
FREE PACKAGE(EA.YEA0010.(19970417154119S101702A063297AYEA0010))
FREE PACKAGE(EW.EW7010.(19970417124259S101702A063168AEW7010))
FREE PACKAGE(SM.SMPATDEL.())
FREE PACKAGE(EA.YEA0010.(19970424130254S101702A063459AYEA0010))
FREE PACKAGE(EA.YEA0010.(19970421132703S101702Z307341AYEA0010))
FREE PACKAGE(EA.YEA0010.(19970421115820S101702Z307341AYEA0010))
FREE PACKAGE(SM.SMPHREPL.())
FREE PACKAGE(KX.YKX002.(19970501123152S101702A063604AYKX002))
FREE PACKAGE(SX.YSX64P5.(19970507132447S101702M000792AYSX64P5))
FREE PACKAGE(BX.BX6750.(19970507161423S101702Z310325ABX6750))
FREE PACKAGE(SX.YSX6405.(19970513154526S101702A063879AYSX6405))
FREE PACKAGE(SX.YSX64P5.(19970513154524S101702A063879AYSX64P5))
FREE PACKAGE(KS.YKS0809.(19970520152634S101702A064036AYKS0809))
FREE PACKAGE(SX.YSX6405.(19970514165526S101702A063968AYSX6405))
FREE PACKAGE(SX.YSX64P5.(19970514165525S101702A063968AYSX64P5))
FREE PACKAGE(SX.YSX6405.(19970514084910S101702Z311200AYSX6405))
FREE PACKAGE(SX.YSX64P5.(19970514084909S101702Z311200AYSX64P5))
FREE PACKAGE(KS.YKS0809.(19970515130322S101702A063870AYKS0809))
FREE PACKAGE(EW.EW7020.(19970515123226S101702A063787AEW7020))
FREE PACKAGE(YY.YYWBMON.(19970515152742S101702M000719AYYWBMON))
FREE PACKAGE(SM.SMJCLEX1.())
FREE PACKAGE(EW.EW7020.(19970522155508S101702A064034AEW7020))
FREE PACKAGE(YY.YYWBMON.(19970602065921S101702Z313900AYYWBMON))
FREE PACKAGE(BX.BX6750.(19970529124001S101702A064140ABX6750))
FREE PACKAGE(SX.YSX6405.(19970606100244S101702Z315022AYSX6405))
FREE PACKAGE(SX.YSX64P5.(19970606142544S101702A064475AYSX64P5))
FREE PACKAGE(SX.YSX6405.(19970606142544S101702A064475AYSX6405))
FREE PACKAGE(SX.YSX64P5.(19970605140224S101702M000795AYSX64P5))
FREE PACKAGE(SX.YSX6405.(19970605140226S101702M000795AYSX6405))
FREE PACKAGE(EM.EM0900.(19970605170247S101702A064138AEM0900))
FREE PACKAGE(BX.YBX0381.(19970605172728S101702A064221AYBX0381))
FREE PACKAGE(BX.YBXBI02.(19970605172718S101702A064221AYBXBI02))
FREE PACKAGE(BX.YBX0382.(19970605172730S101702A064221AYBX0382))
FREE PACKAGE(BX.YBX0313.(19970605172723S101702A064221AYBX0313))
FREE PACKAGE(BX.YBX0312.(19970605172722S101702A064221AYBX0312))
FREE PACKAGE(BX.YBX0311.(19970605172721S101702A064221AYBX0311))
FREE PACKAGE(BX.YBX0121.(19970605172720S101702A064221AYBX0121))
FREE PACKAGE(BX.YBX0321.(19970605172725S101702A064221AYBX0321))
FREE PACKAGE(BX.YBXBI03.(19970605172719S101702A064221AYBXBI03))
FREE PACKAGE(BX.YBX0320.(19970605172724S101702A064221AYBX0320))
FREE PACKAGE(BX.YBX0323.(19970605172726S101702A064221AYBX0323))
FREE PACKAGE(BX.YBX0383.(19970605172732S101702A064221AYBX0383))
FREE PACKAGE(BX.YBXBI01.(19970605172716S101702A064221AYBXBI01))
FREE PACKAGE(YY.YYWBMON.(19970612164152S101702M000720AYYWBMON))
FREE PACKAGE(YY.YYWBMON.(19970612085344S101702Z316050AYYWBMON))
FREE PACKAGE(BX.YBX0312.(19970612132948S101702A064570AYBX0312))
FREE PACKAGE(BX.YBX0313.(19971002134434S101702A067077AYBX0313))
FREE PACKAGE(BX.YBX0323.(19971002134435S101702A067077AYBX0323))
FREE PACKAGE(BX.YBX0383.(19971002134435S101702A067077AYBX0383))
FREE PACKAGE(BX.BX6700.(19971002134658S101702A067077ABX6700))
FREE PACKAGE(BX.BX8000.(19971002134658S101702A067077ABX8000))
FREE PACKAGE(EM.YEM0064.(19971013090424S101702A067405AYEM0064))
FREE PACKAGE(EM.YEM0065.(19971013090419S101702A067405AYEM0065))
FREE PACKAGE(EM.YEM0061.(19971013090422S101702A067405AYEM0061))
FREE PACKAGE(EM.YEM0900.(19971013090419S101702A067405AYEM0900))
FREE PACKAGE(EM.EM0900.(19971013090719S101702A067405AEM0900))
FREE PACKAGE(EM.EM0070.(19971013090717S101702A067405AEM0070))
FREE PACKAGE(EM.EM0080.(19971013090718S101702A067405AEM0080))
FREE PACKAGE(LV.YLV0024.(19971009142943S101702A067320AYLV0024))
FREE PACKAGE(KX.YKX002.(19971016164307S101702A067570AYKX002))
FREE PACKAGE(EC.EC7103.(19971016150142S101702A067558AEC7103))
FREE PACKAGE(OE.OE8110.(19971020135626S101702A067670AOE8110))
FREE PACKAGE(BX.YBX0121.(19971030134551S101702A067836AYBX0121))
FREE PACKAGE(BX.YBXBI03.(19971030134549S101702A067836AYBXBI03))
FREE PACKAGE(OE.OE8110.(19971030134735S101702A067911AOE8110))
FREE PACKAGE(EM.EM0060.(19971030134545S101702A067897AEM0060))
FREE PACKAGE(BX.YBX0323.(19970723092129S101702Z323872AYBX0323))
FREE PACKAGE(BX.YBX0321.(19970723092128S101702Z323872AYBX0321))
FREE PACKAGE(BX.YBX0320.(19970723092127S101702Z323872AYBX0320))
FREE PACKAGE(BX.YBX0313.(19970723092031S101702Z323871AYBX0313))
FREE PACKAGE(BX.YBX0311.(19970723092030S101702Z323871AYBX0311))
FREE PACKAGE(BX.YBX0312.(19970723092031S101702Z323871AYBX0312))
FREE PACKAGE(BX.YBX0323.(19970724124829S101702A065494AYBX0323))
FREE PACKAGE(BX.YBX0313.(19970724124837S101702A065494AYBX0313))
FREE PACKAGE(BX.YBX0311.(19970724124832S101702A065494AYBX0311))
FREE PACKAGE(BX.YBX0312.(19970724124835S101702A065494AYBX0312))
FREE PACKAGE(BX.YBX0320.(19970724124839S101702A065494AYBX0320))
FREE PACKAGE(BX.YBX0321.(19970724124827S101702A065494AYBX0321))
FREE PACKAGE(BX.BX5100.(19970724125214S101702A065494ABX5100))
FREE PACKAGE(OD.OD7220.(19970807105824S101702Z325954AOD7220))
FREE PACKAGE(OD.OD7120.(19970807105631S101702Z325951AOD7120))
FREE PACKAGE(SX.YSX6405.(19970807134752S101702A065801AYSX6405))
FREE PACKAGE(OD.OD7220.(19970811140644S101702Z326415AOD7220))
FREE PACKAGE(OD.OD7120.(19970811140607S101702Z326413AOD7120))
FREE PACKAGE(A1P.YKD0500.(19970814140402S101702M000800AYKD0500))
FREE PACKAGE(A2P.YKD0500.(19970814140402S101702M000800AYKD0500))
FREE PACKAGE(KD.YKD0500.(19970814140402S101702M000800AYKD0500))
FREE PACKAGE(KX.YKX002.(19970814200734S101702A065850AYKX002))
FREE PACKAGE(BB.BB0630.(19970814210720S101702A065981ABB0630))
FREE PACKAGE(EA.YEA0001.(19970814210804S101702A065956AYEA0001))
FREE PACKAGE(EA.YEA0010.(19970814210808S101702A065956AYEA0010))
FREE PACKAGE(EA.YEA0011.(19970814210813S101702A065956AYEA0011))
FREE PACKAGE(CD.YCDCIFD.(19970814141023S101702M000800AYCDCIFD))
FREE PACKAGE(KD.YKDH03.(19970814141325S101702M000800AYKDH03))
FREE PACKAGE(SX.YSX6405.(19970814142658S101702M000819AYSX6405))
FREE PACKAGE(SX.YSX64P5.(19970814142657S101702M000819AYSX64P5))
FREE PACKAGE(LC.LC5000.(19970814155557S101702M000820ALC5000))
FREE PACKAGE(SX.YSX6405.(19970814160448S101702M000819AYSX6405))
FREE PACKAGE(SX.YSX64P5.(19970814160447S101702M000819AYSX64P5))
FREE PACKAGE(YY.YYWBMON.(19970814173805S101702M000722AYYWBMON))
FREE PACKAGE(SX.YSX64P5.(19970818093106S101702Z327680AYSX64P5))
FREE PACKAGE(SX.YSX6405.(19970818093107S101702Z327680AYSX6405))
FREE PACKAGE(SX.YSX64P5.(19970818161022S101702A066102AYSX64P5))
FREE PACKAGE(SX.YSX6405.(19970818161023S101702A066102AYSX6405))
FREE PACKAGE(OD.OD7280.(19970821152509S101702A066237AOD7280))
FREE PACKAGE(OD.OD7280.(19970821163430S101702A066237AOD7280))
FREE PACKAGE(AT.AT7200.(19970821130820S101702A065919AAT7200))
FREE PACKAGE(OD.OD7120.(19970821132306S101702A066166AOD7120))
FREE PACKAGE(OD.OD7220.(19970821132318S101702A066166AOD7220))
FREE PACKAGE(SX.YSX6405.(19970821140531S101702A066252AYSX6405))
FREE PACKAGE(SX.YSX64P5.(19970821140530S101702A066252AYSX64P5))
FREE PACKAGE(TK.TK0150.(19970828125856S101702A066346ATK0150))
FREE PACKAGE(SA.SA0370.(19970904124754S101702M000827ASA0370))
FREE PACKAGE(BX.YBX0311.(19970904130822S101702A066492AYBX0311))
FREE PACKAGE(A1P.YKD0500.(19970904152318S101702A066089AYKD0500))
FREE PACKAGE(A2P.YKD0500.(19970904152318S101702A066089AYKD0500))
FREE PACKAGE(KD.YKD0500.(19970904152318S101702A066089AYKD0500))
FREE PACKAGE(BX.YBX0311.(19970904151111S101702A066492AYBX0311))
FREE PACKAGE(EA.YEA0010.(19970904153951S101702A066529AYEA0010))
FREE PACKAGE(YY.YYWBMON.(19970911140351S101702M000723AYYWBMON))
FREE PACKAGE(SM.SMUPDAT0.())
FREE PACKAGE(SM.SMUPDAT1.())
FREE PACKAGE(LV.YLV0024.(19970918124528S101702A066875AYLV0024))
FREE PACKAGE(SX.YSX6405.(19970918123555S101702A066829AYSX6405))
FREE PACKAGE(A1P.YKD0500.(19970918130127S101702A066876AYKD0500))
FREE PACKAGE(A2P.YKD0500.(19970918130127S101702A066876AYKD0500))
FREE PACKAGE(KD.YKD0500.(19970918130127S101702A066876AYKD0500))
FREE PACKAGE(A1P.YKD0500.(19970915163933S101702A066826AYKD0500))
FREE PACKAGE(A2P.YKD0500.(19970915163933S101702A066826AYKD0500))
FREE PACKAGE(KD.YKD0500.(19970915163933S101702A066826AYKD0500))
FREE PACKAGE(EA.YEA0010.(19980108153347S101702M000886AYEA0010))
FREE PACKAGE(EM.YEM0061.(19980108153349S101702M000886AYEM0061))
FREE PACKAGE(EM.YEM0065.(19980108153339S101702M000886AYEM0065))
FREE PACKAGE(EM.EM0060.(19980108153802S101702M000886AEM0060))
FREE PACKAGE(EC.YECAV.(19980115174314S101702M000856AYECAV))
FREE PACKAGE(EC.YECCLAR.(19980115174315S101702M000856AYECCLAR))
FREE PACKAGE(SX.YSX64P5.(19980115174323S101702M000856AYSX64P5))
FREE PACKAGE(SX.YSX6405.(19980115174324S101702M000856AYSX6405))
FREE PACKAGE(A1P.YKD0500.(19980115174941S101702M000856AYKD0500))
FREE PACKAGE(A2P.YKD0500.(19980115174941S101702M000856AYKD0500))
FREE PACKAGE(KD.YKD0500.(19980115174941S101702M000856AYKD0500))
FREE PACKAGE(CD.YCDCIFD.(19980115174306S101702M000856AYCDCIFD))
FREE PACKAGE(BX.YBXBI01.(19980115133559S101702A069359AYBXBI01))
FREE PACKAGE(KV.BX0130.(19980115133833S101702A069359ABX0130))
FREE PACKAGE(EC.YECCRCR.(19980115174316S101702M000856AYECCRCR))
FREE PACKAGE(EC.YECCR.(19980115174315S101702M000856AYECCR))
FREE PACKAGE(EC.YECMUPD.(19980115174318S101702M000856AYECMUPD))
FREE PACKAGE(EC.YECCL.(19980115174315S101702M000856AYECCL))
FREE PACKAGE(A1P.YYECGRI.(19980115174545S101702M000856AYYECGRI))
FREE PACKAGE(A2P.YYECGRI.(19980115174545S101702M000856AYYECGRI))
FREE PACKAGE(YY.YYECGRI.(19980115174545S101702M000856AYYECGRI))
FREE PACKAGE(EC.YECCRL.(19980115174316S101702M000856AYECCRL))
FREE PACKAGE(EC.EC5099.(19980122145046S101702A069866AEC5099))
FREE PACKAGE(LC.LC5000.(19980122143236S101702M000889ALC5000))
FREE PACKAGE(BB.BB0610.(19980123072119S101702A069974ABB0610))
FREE PACKAGE(SX.YSX64P5.(19980123121052S101702Z356881AYSX64P5))
FREE PACKAGE(SX.YSX6405.(19980123121054S101702Z356881AYSX6405))
FREE PACKAGE(SX.YSX6405.(19980123141704S101702Z356907AYSX6405))
FREE PACKAGE(SX.YSX64P5.(19980123141704S101702Z356907AYSX64P5))
FREE PACKAGE(SX.YSX6405.(19980123145045S101702A070007AYSX6405))
FREE PACKAGE(SX.YSX64P5.(19980123145045S101702A070007AYSX64P5))
FREE PACKAGE(SX.YSX64P5.(19980119104109S101702Z355843AYSX64P5))
FREE PACKAGE(SX.YSX6405.(19980119155852S101702A069899AYSX6405))
FREE PACKAGE(SX.YSX64P5.(19980119155852S101702A069899AYSX64P5))
FREE PACKAGE(EA.YEA0010.(19980205151554S101702A070151AYEA0010))
FREE PACKAGE(EC.YECAV.(19980206175259S101702A070225AYECAV))
FREE PACKAGE(EC.YECCLAR.(19980206175303S101702A070225AYECCLAR))
FREE PACKAGE(EC.YECRPA.(19980206175319S101702A070225AYECRPA))
FREE PACKAGE(EC.YECRPAV.(19980206175320S101702A070225AYECRPAV))
FREE PACKAGE(EC.YECSAS.(19980206175324S101702A070225AYECSAS))
FREE PACKAGE(YY.YECSAS.(19980206175324S101702A070225AYECSAS))
FREE PACKAGE(EC.YECSDS.(19980206175327S101702A070225AYECSDS))
FREE PACKAGE(EC.YECSDH.(19980206175326S101702A070225AYECSDH))
FREE PACKAGE(EC.YECSBR.(19980206175325S101702A070225AYECSBR))
FREE PACKAGE(EC.YECSFPR.(19980206175330S101702A070225AYECSFPR))
FREE PACKAGE(EC.YECSAN.(19980206175323S101702A070225AYECSAN))
FREE PACKAGE(EC.YECIN.(19980206175315S101702A070225AYECIN))
FREE PACKAGE(EC.YECRP.(19980206175319S101702A070225AYECRP))
FREE PACKAGE(EC.YECMUPD.(19980206175318S101702A070225AYECMUPD))
FREE PACKAGE(A1P.YECGRI.(19980206175312S101702A070225AYECGRI))
FREE PACKAGE(A2P.YECGRI.(19980206175312S101702A070225AYECGRI))
FREE PACKAGE(EC.YECGRI.(19980206175312S101702A070225AYECGRI))
FREE PACKAGE(EC.YECCLC.(19980206175303S101702A070225AYECCLC))
FREE PACKAGE(EC.YECRTV.(19980206175323S101702A070225AYECRTV))
FREE PACKAGE(EC.YECSHD1.(19980206175331S101702A070225AYECSHD1))
FREE PACKAGE(EC.YECDCI.(19980206175310S101702A070225AYECDCI))
FREE PACKAGE(EC.YECCRCR.(19980206175307S101702A070225AYECCRCR))
FREE PACKAGE(EC.YECSHD2.(19980206175332S101702A070225AYECSHD2))
FREE PACKAGE(EC.YECSEG.(19980206175328S101702A070225AYECSEG))
FREE PACKAGE(EC.YECCL.(19980206175302S101702A070225AYECCL))
FREE PACKAGE(EC.YECSES.(19980206175329S101702A070225AYECSES))
FREE PACKAGE(EC.YECSLV.(19980206175333S101702A070225AYECSLV))
FREE PACKAGE(EC.YECCR.(19980206175304S101702A070225AYECCR))
FREE PACKAGE(A1P.YKD0500.(19980206175332S101702A070225AYKD0500))
FREE PACKAGE(A2P.YKD0500.(19980206175332S101702A070225AYKD0500))
FREE PACKAGE(KD.YKD0500.(19980206175332S101702A070225AYKD0500))
FREE PACKAGE(EC.YECCLV.(19980206175304S101702A070225AYECCLV))
FREE PACKAGE(EC.YECCRL.(19980206175308S101702A070225AYECCRL))
FREE PACKAGE(EC.YECCRAR.(19980206175305S101702A070225AYECCRAR))
FREE PACKAGE(EC.YECSZS.(19980206175335S101702A070225AYECSZS))
FREE PACKAGE(EC.YECSL.(19980206175333S101702A070225AYECSL))
FREE PACKAGE(EC.YECCRC.(19980206175306S101702A070225AYECCRC))
FREE PACKAGE(EC.YECSEX.(19980206175329S101702A070225AYECSEX))
FREE PACKAGE(EC.YECCRV.(19980206175309S101702A070225AYECCRV))
FREE PACKAGE(EC.YECSFO.(19980206175330S101702A070225AYECSFO))
FREE PACKAGE(EC.YECRT.(19980206175322S101702A070225AYECRT))
FREE PACKAGE(EC.YECSDOC.(19980206175327S101702A070225AYECSDOC))
FREE PACKAGE(SX.YSX64P5.(19971106134926S101702M000849AYSX64P5))
FREE PACKAGE(EC.YECCL.(19971106165431S101702A068113AYECCL))
FREE PACKAGE(EC.YECRTV.(19971106165429S101702A068113AYECRTV))
FREE PACKAGE(EC.YECRT.(19971106165428S101702A068113AYECRT))
FREE PACKAGE(EC.YECSL.(19971106165430S101702A068113AYECSL))
FREE PACKAGE(EC.YECRPAV.(19971106165428S101702A068113AYECRPAV))
FREE PACKAGE(EC.YECRPA.(19971106165428S101702A068113AYECRPA))
FREE PACKAGE(EC.YECCLAR.(19971106165420S101702A068113AYECCLAR))
FREE PACKAGE(EC.YECSFPR.(19971106165429S101702A068113AYECSFPR))
FREE PACKAGE(EC.YECIN.(19971106165426S101702A068113AYECIN))
FREE PACKAGE(EC.YECCLV.(19971106165421S101702A068113AYECCLV))
FREE PACKAGE(EC.YECCRAR.(19971106165422S101702A068113AYECCRAR))
FREE PACKAGE(EC.YECCRC.(19971106165423S101702A068113AYECCRC))
FREE PACKAGE(EC.YECRP.(19971106165427S101702A068113AYECRP))
FREE PACKAGE(EC.YECCRV.(19971106165424S101702A068113AYECCRV))
FREE PACKAGE(EC.YECDCI.(19971106165425S101702A068113AYECDCI))
FREE PACKAGE(EC.YECCRL.(19971106165424S101702A068113AYECCRL))
FREE PACKAGE(EC.YECCRCR.(19971106165423S101702A068113AYECCRCR))
FREE PACKAGE(EC.YECAV.(19971106165427S101702A068113AYECAV))
FREE PACKAGE(EC.YECCLC.(19971106165420S101702A068113AYECCLC))
FREE PACKAGE(EC.YECCR.(19971106165421S101702A068113AYECCR))
FREE PACKAGE(EC.YECCRAR.(19971107094909S101702A068113AYECCRAR))
FREE PACKAGE(EC.YECCRL.(19971107094912S101702A068113AYECCRL))
FREE PACKAGE(EC.YECRTV.(19971107094918S101702A068113AYECRTV))
FREE PACKAGE(EC.YECSFPR.(19971107094918S101702A068113AYECSFPR))
FREE PACKAGE(EC.YECRPA.(19971107094916S101702A068113AYECRPA))
FREE PACKAGE(EC.YECCRCR.(19971107094911S101702A068113AYECCRCR))
FREE PACKAGE(EC.YECCRC.(19971107094910S101702A068113AYECCRC))
FREE PACKAGE(EC.YECCR.(19971107094908S101702A068113AYECCR))
FREE PACKAGE(EC.YECIN.(19971107094915S101702A068113AYECIN))
FREE PACKAGE(EC.YECRT.(19971107094917S101702A068113AYECRT))
FREE PACKAGE(EC.YECCLC.(19971107094907S101702A068113AYECCLC))
FREE PACKAGE(EC.YECAV.(19971107094915S101702A068113AYECAV))
FREE PACKAGE(EC.YECRP.(19971107094916S101702A068113AYECRP))
FREE PACKAGE(EC.YECCLAR.(19971107094906S101702A068113AYECCLAR))
FREE PACKAGE(EC.YECRPAV.(19971107094917S101702A068113AYECRPAV))
FREE PACKAGE(EC.YECDCI.(19971107094913S101702A068113AYECDCI))
FREE PACKAGE(EC.YECSL.(19971107094918S101702A068113AYECSL))
FREE PACKAGE(EC.YECCLV.(19971107094908S101702A068113AYECCLV))
FREE PACKAGE(EC.YECCL.(19971107094920S101702A068113AYECCL))
FREE PACKAGE(EC.YECCRV.(19971107094912S101702A068113AYECCRV))
FREE PACKAGE(RM.RP7980.(19971104145142S101702Z343279ARP7980))
FREE PACKAGE(YY.YYECGRP.(19971105111102S101702A068033AYYECGRP))
FREE PACKAGE(YY.YYECGRP.(19971105111102CGS101702A068033AYYECGRP))
FREE PACKAGE(BX.YBXBI02.(19971113142012S101702A068187AYBXBI02))
FREE PACKAGE(EA.YEA0010.(19971113150405S101702A068044AYEA0010))
FREE PACKAGE(SM.SMPHBILD.())
FREE PACKAGE(YY.YYECGRI.(19971111155503S101702A068203AYYECGRI))
FREE PACKAGE(SX.YSX6405.(19971119141110S101702A068442AYSX6405))
FREE PACKAGE(SX.YSX64P5.(19971119141112S101702A068442AYSX64P5))
FREE PACKAGE(A1P.YYECGRI.(19971120185114S101702M000818AYYECGRI))
FREE PACKAGE(A2P.YYECGRI.(19971120185114S101702M000818AYYECGRI))
FREE PACKAGE(YY.YYECGRI.(19971120185114S101702M000818AYYECGRI))
FREE PACKAGE(A1P.YKD0500.(19971120185108S101702M000818AYKD0500))
FREE PACKAGE(A2P.YKD0500.(19971120185108S101702M000818AYKD0500))
FREE PACKAGE(KD.YKD0500.(19971120185108S101702M000818AYKD0500))
FREE PACKAGE(EC.YECMUPD.(19971120190914S101702M000855AYECMUPD))
FREE PACKAGE(CD.YCDCIFD.(19971120133445S101702A068246AYCDCIFD))
FREE PACKAGE(YY.YYWBMON.(19971120155919S101702M000725AYYWBMON))
FREE PACKAGE(A1P.YKD0500.(19971125120634S101702Z346700AYKD0500))
FREE PACKAGE(A2P.YKD0500.(19971125120634S101702Z346700AYKD0500))
FREE PACKAGE(KD.YKD0500.(19971125120634S101702Z346700AYKD0500))
FREE PACKAGE(YY.YYWBMON.(19971125064220S101702Z346561AYYWBMON))
FREE PACKAGE(EC.YECMUPD.(19971125164536S101702A068569AYECMUPD))
FREE PACKAGE(YY.YYGPAS.(19971125164555S101702A068569AYYGPAS))
FREE PACKAGE(YY.YYGPAS.(19971126161741S101702Z347154AYYGPAS))
FREE PACKAGE(EC.YECMUPD.(19971126112833S101702A068620AYECMUPD))
FREE PACKAGE(EC.YECMUPD.(19971126124340S101702Z347060AYECMUPD))
FREE PACKAGE(YY.YYGPAS.(19971127123700S101702Z347334AYYGPAS))
FREE PACKAGE(YY.YYGPAS.(19971121153752S101702A068485AYYGPAS))
FREE PACKAGE(EC.EC7103.(19971121154032S101702A068485AEC7103))
FREE PACKAGE(EC.EC5099.(19971122070527S101702Z346068AEC5099))
FREE PACKAGE(KD.YKD0500.(19971123134508S101702Z346134AYKD0500))
FREE PACKAGE(KD.YKD0500.(19971123160833S101702Z346148AYKD0500))
FREE PACKAGE(EC.EC5099.(19971123164056S101702Z346149AEC5099))
FREE PACKAGE(A1P.YKD0500.(19971123170525S101702Z346148AYKD0500))
FREE PACKAGE(A2P.YKD0500.(19971123170525S101702Z346148AYKD0500))
FREE PACKAGE(KD.YKD0500.(19971123170525S101702Z346148AYKD0500))
FREE PACKAGE(A1P.YKD0500.(19971123180702S101702Z346152AYKD0500))
FREE PACKAGE(A2P.YKD0500.(19971123180702S101702Z346152AYKD0500))
FREE PACKAGE(KD.YKD0500.(19971123180702S101702Z346152AYKD0500))
FREE PACKAGE(A1P.YYECGRI.(19971123194631S101702Z346164AYYECGRI))
FREE PACKAGE(A2P.YYECGRI.(19971123194631S101702Z346164AYYECGRI))
FREE PACKAGE(YY.YYECGRI.(19971123194631S101702Z346164AYYECGRI))
FREE PACKAGE(A1P.YKD0500.(19971123194631S101702Z346164AYKD0500))
FREE PACKAGE(A2P.YKD0500.(19971123194631S101702Z346164AYKD0500))
FREE PACKAGE(KD.YKD0500.(19971123194631S101702Z346164AYKD0500))
FREE PACKAGE(EC.YECMUPD.(19971124134218S101702Z346407AYECMUPD))
FREE PACKAGE(LV.YLV0024.(19971127151620S101702A068522AYLV0024))
FREE PACKAGE(SX.YSX64P5.(19971209124733S101702A068954AYSX64P5))
FREE PACKAGE(SX.YSX6405.(19971209124733S101702A068954AYSX6405))
FREE PACKAGE(A1P.YKD0500.(19971209175158S101702Z349699AYKD0500))
FREE PACKAGE(A2P.YKD0500.(19971209175158S101702Z349699AYKD0500))
FREE PACKAGE(KD.YKD0500.(19971209175158S101702Z349699AYKD0500))
FREE PACKAGE(A1P.YKD0500.(19971204142946S101702Z348815AYKD0500))
FREE PACKAGE(A2P.YKD0500.(19971204142946S101702Z348815AYKD0500))
FREE PACKAGE(KD.YKD0500.(19971204142946S101702Z348815AYKD0500))
FREE PACKAGE(A1P.YYECGRI.(19971204140411S101702Z348800AYYECGRI))
FREE PACKAGE(A2P.YYECGRI.(19971204140411S101702Z348800AYYECGRI))
FREE PACKAGE(YY.YYECGRI.(19971204140411S101702Z348800AYYECGRI))
FREE PACKAGE(SX.YSX64P5.(19971204132949S101702M000869AYSX64P5))
FREE PACKAGE(SX.YSX6405.(19971204132949S101702M000869AYSX6405))
FREE PACKAGE(EC.YECCRC.(19971205161056S101702A068771AYECCRC))
FREE PACKAGE(EC.YECCRV.(19971205161058S101702A068771AYECCRV))
FREE PACKAGE(EC.YECCLAR.(19971205161053S101702A068771AYECCLAR))
FREE PACKAGE(EC.YECCLC.(19971205161054S101702A068771AYECCLC))
FREE PACKAGE(EC.YECRPA.(19971205161104S101702A068771AYECRPA))
FREE PACKAGE(EC.YECRTV.(19971205161106S101702A068771AYECRTV))
FREE PACKAGE(EC.YECDCI.(19971205161058S101702A068771AYECDCI))
FREE PACKAGE(EC.YECRT.(19971205161105S101702A068771AYECRT))
FREE PACKAGE(EC.YECIN.(19971205161103S101702A068771AYECIN))
FREE PACKAGE(YY.YYGPAS.(19971205161109S101702A068771AYYGPAS))
FREE PACKAGE(EC.YECSL.(19971205161107S101702A068771AYECSL))
FREE PACKAGE(EC.YECAV.(19971205161051S101702A068771AYECAV))
FREE PACKAGE(EC.YECCRAR.(19971205161056S101702A068771AYECCRAR))
FREE PACKAGE(EC.YECMUPD.(19971205161051S101702A068771AYECMUPD))
FREE PACKAGE(EC.YECCRCR.(19971205161057S101702A068771AYECCRCR))
FREE PACKAGE(EC.YECCLV.(19971205161054S101702A068771AYECCLV))
FREE PACKAGE(EC.YECCRL.(19971205161057S101702A068771AYECCRL))
FREE PACKAGE(EC.YECRPAV.(19971205161105S101702A068771AYECRPAV))
FREE PACKAGE(EC.YECRP.(19971205161104S101702A068771AYECRP))
FREE PACKAGE(EC.YECSFPR.(19971205161106S101702A068771AYECSFPR))
FREE PACKAGE(EC.YECCR.(19971205161055S101702A068771AYECCR))
FREE PACKAGE(EC.YECCL.(19971205161052S101702A068771AYECCL))
FREE PACKAGE(EC.YECCRL.(19971215145836S101702Z350817AYECCRL))
FREE PACKAGE(KD.YKD0500.(19971210090526S101702Z349765AYKD0500))
FREE PACKAGE(A1P.YKD0500.(19971210092215S101702Z349795AYKD0500))
FREE PACKAGE(A2P.YKD0500.(19971210092215S101702Z349795AYKD0500))
FREE PACKAGE(KD.YKD0500.(19971210092215S101702Z349795AYKD0500))
FREE PACKAGE(BP.BP7000.(19971211140642S101702A069088ABP7000))
FREE PACKAGE(BF.BF5820.(19971211145412S101702A068424ABF5820))
FREE PACKAGE(BF.BF5800.(19971211145411S101702A068424ABF5800))
FREE PACKAGE(YY.YYWBMON.(19971211154151S101702M000726AYYWBMON))
FREE PACKAGE(BP.BP7000.(19971212114155S101702Z350210ABP7000))
FREE PACKAGE(SX.YSX6405.(19971222053543S101702Z352011AYSX6405))
FREE PACKAGE(SX.YSX64P5.(19971222053615S101702Z352013AYSX64P5))
FREE PACKAGE(EC.YECCR.(19971222101649S101702Z352108AYECCR))
FREE PACKAGE(EC.YECSL.(19971216161903S101702Z351139AYECSL))
FREE PACKAGE(EC.YECCR.(19971217103059S101702Z351294AYECCR))
FREE PACKAGE(BP.BP7000.(19971217114439S101702A069235ABP7000))
FREE PACKAGE(CD.FC0100.(19971218134434S101702A069142AFC0100))
FREE PACKAGE(SX.YSX64P5.(19971218134258S101702A069206AYSX64P5))
FREE PACKAGE(SX.YSX6405.(19971218134256S101702A069206AYSX6405))
FREE PACKAGE(SX.YSX64P5.(19971219083811S101702Z351781AYSX64P5))
FREE PACKAGE(SX.YSX64P5.(19971219155653S101702A069287AYSX64P5))
FREE PACKAGE(BX.YBXBI01.(19971223090545S101702Z352321AYBXBI01))
FREE PACKAGE(EC.YECCRL.(19971231130928S101702Z353046AYECCRL))
FREE PACKAGE(EC.YECCR.(19971231131652S101702Z353056AYECCR))
FREE PACKAGE(CR.CR5000.())
FREE PACKAGE(KS.YKSAUFT.())
FREE PACKAGE(CD.YCDUP10.())
FREE PACKAGE(CD.YCDGETV.())
FREE PACKAGE(CO.CO0050.())
FREE PACKAGE(BX.BX7620.())
FREE PACKAGE(BP.BP5300.())
FREE PACKAGE(CD.YCD0020.())
FREE PACKAGE(RT.RT5010.())
FREE PACKAGE(ZP.YZPUSER.(19940220194106S101702A031777A))
FREE PACKAGE(ZP.YZPUSER.(19940220195347S101702A031777A))
FREE PACKAGE(VP.YVPUP01.(19940217182915S101702A031241A))
FREE PACKAGE(BX.YBX0311.(19940217143350S101702A031502A))
FREE PACKAGE(BX.YBX0382.(19940217143416S101702A031502A))
FREE PACKAGE(ZP.YZPUSER.(19940228001251S101702A032020A))
FREE PACKAGE(ZP.YZPUSER.(19940222125004S101702A031858A))
FREE PACKAGE(YY.YYNFP14.(19940311192628S101702A032372A))
FREE PACKAGE(YY.YYNFP24.(19940311192636S101702A032372A))
FREE PACKAGE(KS.YKSAUFT.(19940310195022S101702A032347A))
FREE PACKAGE(BX.YBX0382.(19940317152239S101702A032458AYBX0382))
FREE PACKAGE(CD.YCDGETV.(19940317160338S101702A032553AYCDGETV))
FREE PACKAGE(KS.YKSAUFT.(19940317154525S101702A032520AYKSAUFT))
FREE PACKAGE(CI.YCI009.(19940317190314S101702A032565AYCI009))
FREE PACKAGE(CD.YCD0020.(19940317190318S101702A032467AYCD0020))
FREE PACKAGE(CI.YCI009A.(19940317190359S101702A032565AYCI009A))
FREE PACKAGE(YY.YYNFP14.(19940317201407S101702M000390AYYNFP14))
FREE PACKAGE(YY.YYNFP24.(19940317201425S101702M000390AYYNFP24))
FREE PACKAGE(DE.DE5630.())
FREE PACKAGE(TR.YTRT932.())
FREE PACKAGE(TR.YTRT931.())
FREE PACKAGE(VP.VP7010.())
FREE PACKAGE(CD.YCDGETJ.())
FREE PACKAGE(EM.YEM0061.())
FREE PACKAGE(EM.YEM0064.())
FREE PACKAGE(EM.YEM0065.())
FREE PACKAGE(EM.YEM0900.())
FREE PACKAGE(VP.YVPUP01.())
FREE PACKAGE(ZP.YZPUSER.())
FREE PACKAGE(BP.BP6060.())
FREE PACKAGE(BP.BP6000.())
FREE PACKAGE(BX.YBX0363.())
FREE PACKAGE(BX.YBX0362.())
FREE PACKAGE(BX.YBXBI01.())
FREE PACKAGE(BX.YBXBI03.())
FREE PACKAGE(YY.YYOELEI.())
FREE PACKAGE(CO.CO8100.())
FREE PACKAGE(CO.CO8200.())
FREE PACKAGE(BW.YBWAELC.())
FREE PACKAGE(GE.YGESP01.())
FREE PACKAGE(GE.YGESP02.())
FREE PACKAGE(GE.YGESP04.())
FREE PACKAGE(BX.YBX0321.())
FREE PACKAGE(BX.YBX0313.())
FREE PACKAGE(BX.YBX0361.())
FREE PACKAGE(BX.YBX0381.())
FREE PACKAGE(BX.YBX0322.())
FREE PACKAGE(BX.YBX0382.())
FREE PACKAGE(BX.YBX0323.())
FREE PACKAGE(BX.YBX0383.())
FREE PACKAGE(BX.YBX0312.())
FREE PACKAGE(BX.YBX0311.())
FREE PACKAGE(EA.YEA0001.())
FREE PACKAGE(KS.YKSMODU.(19940602145024S101702A034556AYKSMODU))
FREE PACKAGE(CR.YCRAN01.(19940609143524S101702A034846AYCRAN01))
FREE PACKAGE(YY.YYOELEI.(19940609143536S101702A034813AYYOELEI))
FREE PACKAGE(ZP.YZPUSER.(19940323174801S101702A032820AYZPUSER))
FREE PACKAGE(CD.YCDUP10.(19940324191112S101702A032715AYCDUP10))
FREE PACKAGE(CD.YCDUP14.(19940324191114S101702A032715AYCDUP14))
FREE PACKAGE(KS.YKSAUFT.(19940324153804S101702A032785AYKSAUFT))
FREE PACKAGE(CD.YCDUP14.(19940324153826S101702A032715AYCDUP14))
FREE PACKAGE(CD.YCDUP10.(19940324153717S101702A032715AYCDUP10))
FREE PACKAGE(CD.YCDUP10.(19940324201829S101702A032715AYCDUP10))
FREE PACKAGE(CD.YCDUP14.(19940324201833S101702A032715AYCDUP14))
FREE PACKAGE(BB0610.BB0610.(E))
FREE PACKAGE(ZP.YZPUSER.(19940407190244S101702A033221AYZPUSER))
FREE PACKAGE(RT.RT5010.(19940407185237S101702A032574ART5010))
FREE PACKAGE(GE.YGESP01.(19940407191249S101702A033034AYGESP01))
FREE PACKAGE(GE.YGESP02.(19940407191251S101702A033034AYGESP02))
FREE PACKAGE(GE.YGESP04.(19940407191258S101702A033034AYGESP04))
FREE PACKAGE(YY.YYNFP24.(19940414202420S101702A033411AYYNFP24))
FREE PACKAGE(YY.YYNFP14.(19940414202416S101702A033411AYYNFP14))
FREE PACKAGE(BX.YBX0342.(19940414155516S101702A033405AYBX0342))
FREE PACKAGE(BX.YBX0341.(19940414155510S101702A033405AYBX0341))
FREE PACKAGE(BX.YBX0343.(19940414155517S101702A033405AYBX0343))
FREE PACKAGE(BX.BX0330.(19940414155938S101702A033405ABX0330))
FREE PACKAGE(YY.YYNFP24.(19940414160453S101702A033411AYYNFP24))
FREE PACKAGE(YY.YYNFP14.(19940414160445S101702A033411AYYNFP14))
FREE PACKAGE(BX.YBXBI01.(19940415175222S101702A033466AYBXBI01))
FREE PACKAGE(CR.YBXBI01.(19940415175222S101702A033466AYBXBI01))
FREE PACKAGE(BX.YBXBI01.(19940417194441S101702A033466AYBXBI01))
FREE PACKAGE(UF.UF8000.(19940421153508S101702A033617AUF8000))
FREE PACKAGE(DX.DX5400.(19940421194557S101702A033552ADX5400))
FREE PACKAGE(DX.DX5410.(19940421194631S101702A033552ADX5410))
FREE PACKAGE(BB.BB0620.(19940421195008S101702A033635ABB0620))
FREE PACKAGE(KS.YKSMODU.(19940428145414S101702A033787AYKSMODU))
FREE PACKAGE(KS.YKSAUFT.(19940428145413S101702A033787AYKSAUFT))
FREE PACKAGE(BX.YBX0341.(19940505160752S101702A033611AYBX0341))
FREE PACKAGE(BX.YBX0342.(19940505160753S101702A033611AYBX0342))
FREE PACKAGE(BX.YBXBI01.(19940505160733S101702A033572AYBXBI01))
FREE PACKAGE(BX.YBXBI01.(19940511164541S101702A034201AYBXBI01))
FREE PACKAGE(EM.YEM0061.(19940519142707S101702A034287AYEM0061))
FREE PACKAGE(EM.YEM0064.(19940519142722S101702A034287AYEM0064))
FREE PACKAGE(EM.YEM0065.(19940519142723S101702A034287AYEM0065))
FREE PACKAGE(EM.YEM0900.(19940519142705S101702A034287AYEM0900))
FREE PACKAGE(EM.EM0070.(19940519143412S101702A034287AEM0070))
FREE PACKAGE(BX.YBXBI01.(19940519151914S101702A034386AYBXBI01))
FREE PACKAGE(UF.UF8000.(19940519152240S101702A034445AUF8000))
FREE PACKAGE(KS.YKSMODU.(19940519152202S101702A034419AYKSMODU))
FREE PACKAGE(SV.YSVRAD.(19940901155609S101702A036983AYSVRAD))
FREE PACKAGE(YY.YYNFP14.(19940901225031S101702A037061AYYNFP14))
FREE PACKAGE(YY.YYNFP24.(19940901225036S101702A037061AYYNFP24))
FREE PACKAGE(YY.YYNFP24.(19940902165848S101702A037061AYYNFP24))
FREE PACKAGE(SA.SA0370.(19940915143120S101702A037314ASA0370))
FREE PACKAGE(SA.YSA0236.(19940929135932S101702A037897AYSA0236))
FREE PACKAGE(SA.YSA0231.(19940929135935S101702A037897AYSA0231))
FREE PACKAGE(SA.YSA0235.(19940929135931S101702A037897AYSA0235))
FREE PACKAGE(SA.YSA0233.(19940929140005S101702A037897AYSA0233))
FREE PACKAGE(SA.YSA0234.(19940929140025S101702A037897AYSA0234))
FREE PACKAGE(SA.YSA0232.(19940929135939S101702A037897AYSA0232))
FREE PACKAGE(NP.NP7210.(19940929140529S101702A037741ANP7210))
FREE PACKAGE(NP.NP5470.(19940929140527S101702A037741ANP5470))
FREE PACKAGE(NP.NP8330.(19940929140550S101702A037741ANP8330))
FREE PACKAGE(NP.NP8340.(19940929140557S101702A037741ANP8340))
FREE PACKAGE(NP.NP5140.(19940929140642S101702A037741ANP5140))
FREE PACKAGE(NP.NP5160.(19940929140644S101702A037741ANP5160))
FREE PACKAGE(NP.NP0410.(19940929140633S101702A037741ANP0410))
FREE PACKAGE(NP.NP7210.(19940929153942S101702A037741ANP7210))
FREE PACKAGE(NP.NP5140.(19940929154033S101702A037741ANP5140))
FREE PACKAGE(NP.NP5160.(19940929154036S101702A037741ANP5160))
FREE PACKAGE(NP.NP8330.(19940929153955S101702A037741ANP8330))
FREE PACKAGE(NP.NP8340.(19940929153957S101702A037741ANP8340))
FREE PACKAGE(NP.NP5470.(19940929153939S101702A037741ANP5470))
FREE PACKAGE(NP.NP0410.(19940929154021S101702A037741ANP0410))
FREE PACKAGE(NP.NP7210.(19940929164923S101702A037741ANP7210))
FREE PACKAGE(NP.NP5470.(19940929164922S101702A037741ANP5470))
FREE PACKAGE(NP.NP5160.(19940929164952S101702A037741ANP5160))
FREE PACKAGE(NP.NP8340.(19940929164931S101702A037741ANP8340))
FREE PACKAGE(NP.NP8330.(19940929164930S101702A037741ANP8330))
FREE PACKAGE(NP.NP8350.(19940929164931S101702A037741ANP8350))
FREE PACKAGE(NP.NP0150.(19940929164937S101702A037741ANP0150))
FREE PACKAGE(NP.NP5140.(19940929164951S101702A037741ANP5140))
FREE PACKAGE(NP.NP0410.(19940929164945S101702A037741ANP0410))
FREE PACKAGE(NP.NP0350.(19940929164943S101702A037741ANP0350))
FREE PACKAGE(BX.YBX0313.(19941006193206S101702A037591AYBX0313))
FREE PACKAGE(BX.YBX0323.(19941006193209S101702A037591AYBX0323))
FREE PACKAGE(BX.YBX0362.(19941006193218S101702A037591AYBX0362))
FREE PACKAGE(BX.YBX0321.(19941006193207S101702A037591AYBX0321))
FREE PACKAGE(BX.YBX0363.(19941006193219S101702A037591AYBX0363))
FREE PACKAGE(BX.YBX0343.(19941006193214S101702A037591AYBX0343))
FREE PACKAGE(BX.YBX0312.(19941006193205S101702A037591AYBX0312))
FREE PACKAGE(BX.YBX0311.(19941006193204S101702A037591AYBX0311))
FREE PACKAGE(BX.YBX0322.(19941006193208S101702A037591AYBX0322))
FREE PACKAGE(BX.YBXBI03.(19941006193227S101702A037591AYBXBI03))
FREE PACKAGE(BX.YBX0342.(19941006193213S101702A037591AYBX0342))
FREE PACKAGE(BX.YBX0361.(19941006193216S101702A037591AYBX0361))
FREE PACKAGE(BX.YBX0121.(19941006193229S101702A037591AYBX0121))
FREE PACKAGE(BX.YBX0341.(19941006193211S101702A037591AYBX0341))
FREE PACKAGE(BX.YBX0383.(19941006193225S101702A037591AYBX0383))
FREE PACKAGE(BX.YBX0381.(19941006193220S101702A037591AYBX0381))
FREE PACKAGE(BX.YBX0382.(19941006193223S101702A037591AYBX0382))
FREE PACKAGE(BX.YBXBI01.(19941006193210S101702A037591AYBXBI01))
FREE PACKAGE(VP.YVPUP01.(19941006195313S101702A037982AYVPUP01))
FREE PACKAGE(BX.BX7620.(19941006135422S101702A037791ABX7620))
FREE PACKAGE(SA.SA0240.(19941006135801S101702A038126ASA0240))
FREE PACKAGE(CI.YCI009A.(19940705103231S101702A035214AYCI009A))
FREE PACKAGE(CI.YCI009.(19940705103230S101702A035214AYCI009))
FREE PACKAGE(CD.YCDGETV.(19940705103237S101702A035214AYCDGETV))
FREE PACKAGE(CD.YCDUP10.(19940705103250S101702A035214AYCDUP10))
FREE PACKAGE(CD.YCDUP14.(19940705103255S101702A035214AYCDUP14))
FREE PACKAGE(CD.YCD0020.(19940705104246S101702A035214AYCD0020))
FREE PACKAGE(CI.YCI009A.(19940705140214S101702A035214AYCI009A))
FREE PACKAGE(CI.YCI009.(19940705140212S101702A035214AYCI009))
FREE PACKAGE(CD.YCDGETV.(19940705140221S101702A035214AYCDGETV))
FREE PACKAGE(CD.YCDUP10.(19940705140235S101702A035214AYCDUP10))
FREE PACKAGE(CD.YCDUP14.(19940705140239S101702A035214AYCDUP14))
FREE PACKAGE(CD.YCD0020.(19940705142646S101702A035214AYCD0020))
FREE PACKAGE(CD.YCD0020.(19940705140411S101702A035214AYCD0020))
FREE PACKAGE(CI.YCI009.(19940705142422S101702A035214AYCI009))
FREE PACKAGE(CI.YCI009A.(19940705142423S101702A035214AYCI009A))
FREE PACKAGE(CD.YCDUP10.(19940705142447S101702A035214AYCDUP10))
FREE PACKAGE(CD.YCDGETV.(19940705142431S101702A035214AYCDGETV))
FREE PACKAGE(CD.YCDUP14.(19940705142451S101702A035214AYCDUP14))
FREE PACKAGE(SV.SV7710.(19940630181346S101702A035352ASV7710))
FREE PACKAGE(CI.YCI009.(19940701132426S101702A035214AYCI009))
FREE PACKAGE(CI.YCI009A.(19940701132427S101702A035214AYCI009A))
FREE PACKAGE(CD.YCDGETV.(19940701132444S101702A035214AYCDGETV))
FREE PACKAGE(CD.YCDUP14.(19940701132551S101702A035214AYCDUP14))
FREE PACKAGE(CD.YCDUP10.(19940701132538S101702A035214AYCDUP10))
FREE PACKAGE(CD.YCD0020.(19940701132652S101702A035214AYCD0020))
FREE PACKAGE(NK.YNKSICH.(19940707172101S101702A034690AYNKSICH))
FREE PACKAGE(NK.NK8820.(19940707172646S101702A034690ANK8820))
FREE PACKAGE(KS.YKSMODU.(19940707194027S101702M000478AYKSMODU))
FREE PACKAGE(SV.SV7710.(19940714152500S101702A035714ASV7710))
FREE PACKAGE(BX.YBX0311.(19940714161915S101702A034979AYBX0311))
FREE PACKAGE(BX.YBX0382.(19940714161913S101702A034979AYBX0382))
FREE PACKAGE(BX.YBX0383.(19940714161914S101702A034979AYBX0383))
FREE PACKAGE(BX.YBX0323.(19940714161908S101702A034979AYBX0323))
FREE PACKAGE(BX.YBX0321.(19940714161919S101702A034979AYBX0321))
FREE PACKAGE(BX.YBX0381.(19940714161912S101702A034979AYBX0381))
FREE PACKAGE(BX.YBX0313.(19940714161918S101702A034979AYBX0313))
FREE PACKAGE(BX.YBX0322.(19940714161906S101702A034979AYBX0322))
FREE PACKAGE(BX.YBX0312.(19940714161917S101702A034979AYBX0312))
FREE PACKAGE(BX.YBXBI01.(19940714172642S101702A035771AYBXBI01))
FREE PACKAGE(BX.YBXBI03.(19940714172644S101702A035771AYBXBI03))
FREE PACKAGE(EM.YEM0061.(19940721163814S101702M000430AYEM0061))
FREE PACKAGE(EA.YEA0001.(19940721163813S101702M000430AYEA0001))
FREE PACKAGE(EM.YEM0065.(19940721163815S101702M000430AYEM0065))
FREE PACKAGE(BX.YBX0311.(19940804140337S101702A036030AYBX0311))
FREE PACKAGE(KS.YKSMODU.(19940811140924S101702A036426AYKSMODU))
FREE PACKAGE(KS.YKSMODU.(19940811195758S101702A036426AYKSMODU))
FREE PACKAGE(HP1.RWBT033.())
FREE PACKAGE(HP1.RWBR040.())
FREE PACKAGE(HP3.RWBR040.())
FREE PACKAGE(HP1.RWBP030.())
FREE PACKAGE(HP3.RWBP030.())
FREE PACKAGE(HP1.RWBP032.())
FREE PACKAGE(HP3.RWBP032.())
FREE PACKAGE(GE.GE7550.(19940825113402S101702A036682AGE7550))
FREE PACKAGE(MD.YMD0651.(19941213123405S101702A040387AYMD0651))
FREE PACKAGE(KS.YKSMODU.(19941215164631S101702A040392AYKSMODU))
FREE PACKAGE(KS.YKSLFNR.(19941215181826S101702A040306AYKSLFNR))
FREE PACKAGE(KS.YKSMODU.(19941215182251S101702A040392AYKSMODU))
FREE PACKAGE(BX.BX5200.(19941215191359S101702A040134ABX5200))
FREE PACKAGE(EM.YEM0061.(19941215194000S101702M000522AYEM0061))
FREE PACKAGE(EA.YEA0001.(19941215193956S101702M000522AYEA0001))
FREE PACKAGE(EM.YEM0065.(19941215193958S101702M000522AYEM0065))
FREE PACKAGE(KS.YKSLFNR.(19941215163239S101702A040306AYKSLFNR))
FREE PACKAGE(VT.VT5120.(19950105141216S101702A040864AVT5120))
FREE PACKAGE(BX.YBX0322.(19941013141416S101702A038234AYBX0322))
FREE PACKAGE(BX.YBX0311.(19941013141432S101702A038234AYBX0311))
FREE PACKAGE(BX.YBX0312.(19941013141433S101702A038234AYBX0312))
FREE PACKAGE(BX.YBX0313.(19941013141434S101702A038234AYBX0313))
FREE PACKAGE(BX.YBX0321.(19941013141435S101702A038234AYBX0321))
FREE PACKAGE(CD.YCDCIFD.(19941013140654S101702A038159AYCDCIFD))
FREE PACKAGE(BX.YBX0383.(19941013141431S101702A038234AYBX0383))
FREE PACKAGE(BX.YBX0382.(19941013141428S101702A038234AYBX0382))
FREE PACKAGE(BX.YBX0381.(19941013141427S101702A038234AYBX0381))
FREE PACKAGE(BX.YBX0323.(19941013141420S101702A038234AYBX0323))
FREE PACKAGE(HP3.RWBM003.())
FREE PACKAGE(HP3.RWBB015.())
FREE PACKAGE(HP3.RWBB019.())
FREE PACKAGE(HP3.RWBB020.())
FREE PACKAGE(HP3.RWBB004.())
FREE PACKAGE(HP3.RWBZ033.())
FREE PACKAGE(HP3.RWBZ034.())
FREE PACKAGE(HP3.RWBW032.())
FREE PACKAGE(HP3.RWBZ014.())
FREE PACKAGE(HP3.RWBZ015.())
FREE PACKAGE(HP3.RWBT027.())
FREE PACKAGE(HP1.RWBB023.())
FREE PACKAGE(HP3.RWBB023.())
FREE PACKAGE(HP1.RWBB022.())
FREE PACKAGE(HP3.RWBB022.())
FREE PACKAGE(NP.NP5240.(19941020142956S101702A038461ANP5240))
FREE PACKAGE(NP.NP5220.(19941027143040S101702A038705ANP5220))
FREE PACKAGE(SV.YSVRAD.(19941027143121S101702A038681AYSVRAD))
FREE PACKAGE(BX.BX6410.(19941103151044S101702A038911ABX6410))
FREE PACKAGE(EA.YEA0001.(19941117135202S101702M000510AYEA0001))
FREE PACKAGE(NP.NP5460.(19941201140647S101702A039881ANP5460))
FREE PACKAGE(SA.YSA0232.(19941201141056S101702A039926AYSA0232))
FREE PACKAGE(SA.YSA0231.(19941201141053S101702A039926AYSA0231))
FREE PACKAGE(SA.YSA0233.(19941201141103S101702A039926AYSA0233))
FREE PACKAGE(SA.YSA0236.(19941201141106S101702A039926AYSA0236))
FREE PACKAGE(BX.BX7150.(19941201183328S101702A039829ABX7150))
FREE PACKAGE(MD.YMD0651.(19941206083936S101702A040104AYMD0651))
FREE PACKAGE(CU.CU8322.(19941208140545S101702A040093ACU8322))
FREE PACKAGE(MD.YMD0651.(19941208162230S101702A040104AYMD0651))
FREE PACKAGE(SX.YS81104.(19950330S101702A043182AYS81104))
FREE PACKAGE(SX.YS81103.(19950330S101702A043182AYS81103))
FREE PACKAGE(MD.YMD0651.(19950330S101702A043203AYMD0651))
FREE PACKAGE(KD.YKDH04.(19950406S101702A043450AYKDH04))
FREE PACKAGE(KD.YKDH05.(19950406S101702A043450AYKDH05))
FREE PACKAGE(KD.YKDH50.(19950406S101702A043450AYKDH50))
FREE PACKAGE(KD.YKDH06.(19950406S101702A043450AYKDH06))
FREE PACKAGE(KD.YKDH52.(19950406S101702A043450AYKDH52))
FREE PACKAGE(KD.YKDH51.(19950406S101702A043450AYKDH51))
FREE PACKAGE(KD.YKDH00.(19950406S101702A043450AYKDH00))
FREE PACKAGE(KD.YKDH53.(19950406S101702A043450AYKDH53))
FREE PACKAGE(KD.YKDH58.(19950406S101702A043450AYKDH58))
FREE PACKAGE(KD.YKDH59.(19950406S101702A043450AYKDH59))
FREE PACKAGE(KD.YKDH60.(19950406S101702A043450AYKDH60))
FREE PACKAGE(KD.YKDH61.(19950406S101702A043450AYKDH61))
FREE PACKAGE(KD.YKDH92.(19950406S101702A043450AYKDH92))
FREE PACKAGE(KD.YKDH91.(19950406S101702A043450AYKDH91))
FREE PACKAGE(KD.YKDH03.(19950406S101702A043450AYKDH03))
FREE PACKAGE(KD.YKDH02.(19950406S101702A043450AYKDH02))
FREE PACKAGE(KD.YKDH01.(19950406S101702A043450AYKDH01))
FREE PACKAGE(KD.YKDS91.(19950406S101702A043450AYKDS91))
FREE PACKAGE(KD.YKD0500.(19950406S101702A043450AYKD0500))
FREE PACKAGE(CR.YCRAN02.(19950412S101702A043707AYCRAN02))
FREE PACKAGE(BX.YBX0383.(19950412S101702A043533AYBX0383))
FREE PACKAGE(BX.YBXBI01.(19950412S101702A043533AYBXBI01))
FREE PACKAGE(BX.YBX0362.(19950412S101702A043533AYBX0362))
FREE PACKAGE(BX.YBX0343.(19950412S101702A043533AYBX0343))
FREE PACKAGE(BX.YBX0313.(19950412S101702A043533AYBX0313))
FREE PACKAGE(BX.YBX0361.(19950412S101702A043533AYBX0361))
FREE PACKAGE(BX.YBX0342.(19950412S101702A043533AYBX0342))
FREE PACKAGE(BX.YBX0323.(19950412S101702A043533AYBX0323))
FREE PACKAGE(BX.YBX0341.(19950412S101702A043533AYBX0341))
FREE PACKAGE(BX.YBX0363.(19950412S101702A043533AYBX0363))
FREE PACKAGE(BX.YBX0311.(19950412S101702A043533AYBX0311))
FREE PACKAGE(BX.YBX0321.(19950412S101702A043533AYBX0321))
FREE PACKAGE(BX.YBX0312.(19950412S101702A043533AYBX0312))
FREE PACKAGE(BX.YBX0382.(19950412S101702A043533AYBX0382))
FREE PACKAGE(BX.YBX0322.(19950412S101702A043533AYBX0322))
FREE PACKAGE(BX.YBX0381.(19950412S101702A043533AYBX0381))
FREE PACKAGE(BX.YBX0121.(19950412S101702A043533AYBX0121))
FREE PACKAGE(BX.YBXBI03.(19950412S101702A043533AYBXBI03))
FREE PACKAGE(BX.YBX0311.(19950418S101702Z185893AYBX0311))
FREE PACKAGE(BX.YBX0382.(19950420S101702A043759AYBX0382))
FREE PACKAGE(BX.YBX0322.(19950420S101702A043759AYBX0322))
FREE PACKAGE(BX.YBX0312.(19950420S101702A043759AYBX0312))
FREE PACKAGE(BX.YBX0311.(19950421S101702Z186279AYBX0311))
FREE PACKAGE(BX.YBX0341.(19950428S101702Z187241AYBX0341))
FREE PACKAGE(SX.YS81103.(19950427S101702A044020AYS81103))
FREE PACKAGE(SX.YS81104.(19950427S101702A044020AYS81104))
FREE PACKAGE(GE.YGESP01.(19950119173828S101702A041399AYGESP01))
FREE PACKAGE(GE.YGESP04.(19950119173814S101702A041399AYGESP04))
FREE PACKAGE(NP.NP5220.(19950119142451S101702A040974ANP5220))
FREE PACKAGE(NP.NP5220.(19950119144603S101702A040974ANP5220))
FREE PACKAGE(NP.NP0360.(19950119144601S101702A040974ANP0360))
FREE PACKAGE(NP.NP0380.(19950119144602S101702A040974ANP0380))
FREE PACKAGE(SV.YSVRAD.(19950119153007S101702A041393AYSVRAD))
FREE PACKAGE(VP.VP7010.(19950202135945S101702A041692AVP7010))
FREE PACKAGE(KS.YKSMODU.(19950202142637S101702A041794AYKSMODU))
FREE PACKAGE(SI.SI7340.(19950210175302S101702Z176831ASI7340))
FREE PACKAGE(CO.CO5000.(19950216140316S101702A041670ACO5000))
FREE PACKAGE(CO.CO8000.(19950216140319S101702A041670ACO8000))
FREE PACKAGE(CO.CO8100.(19950216140321S101702A041670ACO8100))
FREE PACKAGE(CO.CO8200.(19950216140324S101702A041670ACO8200))
FREE PACKAGE(OE.OE8100.(19950216140325S101702A041670AOE8100))
FREE PACKAGE(CO.CO0030.(19950216140330S101702A041670ACO0030))
FREE PACKAGE(CO.CO0040.(19950216140333S101702A041670ACO0040))
FREE PACKAGE(CO.CO0050.(19950216140336S101702A041670ACO0050))
FREE PACKAGE(CO.CO0020.(19950216140329S101702A041670ACO0020))
FREE PACKAGE(KS.YKSMODU.(19950216142448S101702A042149AYKSMODU))
FREE PACKAGE(CR.CR5000.(19950216172233S101702A042017ACR5000))
FREE PACKAGE(SI.SI7340.(19950220151931S101702A042317ASI7340))
FREE PACKAGE(CD.YCDCIFD.(19950302135905S101702A042467AYCDCIFD))
FREE PACKAGE(SV.YSVRAD.(19950302141336S101702A042588AYSVRAD))
FREE PACKAGE(YY.LC5000.(19950227091355S101702Z178899ALC5000))
FREE PACKAGE(YY.LC5000.(19950227101253S101702A042491ALC5000))
FREE PACKAGE(EM.YEM0061.(19950316191311S101702A042912AYEM0061))
FREE PACKAGE(EM.YEM0900.(19950316191311S101702A042912AYEM0900))
FREE PACKAGE(CO.CO0020.(19950316125817S101702A042779ACO0020))
FREE PACKAGE(EM.YEM0061.(19950316154216S101702A042912AYEM0061))
FREE PACKAGE(EM.YEM0900.(19950316154229S101702A042912AYEM0900))
FREE PACKAGE(SX.YS81104.(19950323125515S101702A043101AYS81104))
FREE PACKAGE(GE.GE7690.(19950323125534S101702A043120AGE7690))
FREE PACKAGE(SX.YS81103.(19950323125510S101702A043101AYS81103))
FREE PACKAGE(EA.YEA0001.(19950706S101702M000589AYEA0001))
FREE PACKAGE(EM.YEM0065.(19950706S101702M000589AYEM0065))
FREE PACKAGE(BX.BX8100.(19950713S101702Z199809ABX8100))
FREE PACKAGE(BX.BX8100.(19950713S101702Z199813ABX8100))
FREE PACKAGE(SX.YS81103.(19950713S101702A046089AYS81103))
FREE PACKAGE(SX.SX0720.(19950713134744S101702A046025ASX0720))
FREE PACKAGE(SX.YS81104.(19950713S101702A046089AYS81104))
FREE PACKAGE(OE.YOE001.(19950713S101702A046149AYOE001))
FREE PACKAGE(SX.YS81103.(19950720S101702A046278AYS81103))
FREE PACKAGE(SX.YS81104.(19950720S101702A046278AYS81104))
FREE PACKAGE(OE.YOE001.(19950720S101702A046302AYOE001))
FREE PACKAGE(OE.YOEM002.(19950720S101702A046302AYOEM002))
FREE PACKAGE(CD.YCDCIFD.(19950810S101702A046728AYCDCIFD))
FREE PACKAGE(BX.YBX0311.(19950505S101702Z188373AYBX0311))
FREE PACKAGE(BX.YBX0341.(19950504S101702A044162AYBX0341))
FREE PACKAGE(BX.YBX0311.(19950504S101702A044162AYBX0311))
FREE PACKAGE(BX.BX7150.(19950504S101702A044162ABX7150))
FREE PACKAGE(CO.CO0020.(19950511142640S101702A044204ACO0020))
FREE PACKAGE(KS.YKSMODU.(19950511S101702A044324AYKSMODU))
FREE PACKAGE(BX.YBX0311.(19950511S101702A044343AYBX0311))
FREE PACKAGE(OD.OD7080.(19950511S101702A044280AOD7080))
FREE PACKAGE(OD.OD7060.(19950511S101702A044280AOD7060))
FREE PACKAGE(BX.YBX0311.(19950510S101702Z189043AYBX0311))
FREE PACKAGE(KD.YKD0500.(19950524S101702A044691AYKD0500))
FREE PACKAGE(FC.FC0400.(19950524170555S101702A044625AFC0400))
FREE PACKAGE(OD.OD7060.(19950601S101702A044892AOD7060))
FREE PACKAGE(MD.YMD0651.(19950601S101702M000585AYMD0651))
FREE PACKAGE(CD.YCD0020.(19950615S101702A045345AYCD0020))
FREE PACKAGE(KD.YKD0500.(19950626S101702A045713AYKD0500))
FREE PACKAGE(SV.YSVRAD.(19950622S101702M000590AYSVRAD))
FREE PACKAGE(CD.YCDCIFD.(19950622S101702M000590AYCDCIFD))
FREE PACKAGE(EM.YEM0061.(19950622S101702M000590AYEM0061))
FREE PACKAGE(OD.OD7080.(19950629S101702A045721AOD7080))
FREE PACKAGE(CD.YCD0020.(19950629S101702A045492AYCD0020))
FREE PACKAGE(VP.VP9999.(19950629S101702A045771AVP9999))
FREE PACKAGE(VP.YVPUP01.(19951019S101702A048565AYVPUP01))
FREE PACKAGE(SX.YSX6403.(19951019S101702M000626AYSX6403))
FREE PACKAGE(SX.YSX6404.(19951019S101702M000626AYSX6404))
FREE PACKAGE(SX.YSX6403.(19951024S101702Z214302AYSX6403))
FREE PACKAGE(KD.YKDV81.(19951024S101702Z214339AYKDV81))
FREE PACKAGE(SX.YSX6403.(19951024S101702A048896AYSX6403))
FREE PACKAGE(KD.YKDV81.(19951024S101702Z214421AYKDV81))
FREE PACKAGE(KD.YKDR88.(19951019S101702M000621AYKDR88))
FREE PACKAGE(KD.YKDR89.(19951019S101702M000621AYKDR89))
FREE PACKAGE(KD.YKDR68.(19951019S101702M000621AYKDR68))
FREE PACKAGE(KD.YKDR91.(19951019S101702M000621AYKDR91))
FREE PACKAGE(KD.YKDR78.(19951019S101702M000621AYKDR78))
FREE PACKAGE(KD.YKDR75.(19951019S101702M000621AYKDR75))
FREE PACKAGE(KD.YKDR74.(19951019S101702M000621AYKDR74))
FREE PACKAGE(KD.YKDR93.(19951019S101702M000621AYKDR93))
FREE PACKAGE(KD.YKDR97.(19951019S101702M000621AYKDR97))
FREE PACKAGE(KD.YKDR98.(19951019S101702M000621AYKDR98))
FREE PACKAGE(KD.YKDT00.(19951019S101702M000621AYKDT00))
FREE PACKAGE(KD.YKDR73.(19951019S101702M000621AYKDR73))
FREE PACKAGE(KD.YKDV81.(19951019S101702M000621AYKDV81))
FREE PACKAGE(KD.YKDR92.(19951019S101702M000621AYKDR92))
FREE PACKAGE(KD.YKDR61.(19951019S101702M000621AYKDR61))
FREE PACKAGE(KD.YKDR60.(19951019S101702M000621AYKDR60))
FREE PACKAGE(KD.YKDR67.(19951019S101702M000621AYKDR67))
FREE PACKAGE(KD.YKD0643.(19951019S101702M000621AYKD0643))
FREE PACKAGE(KD.YKD0640.(19951019S101702M000621AYKD0640))
FREE PACKAGE(KD.YKD0641.(19951019S101702M000621AYKD0641))
FREE PACKAGE(KD.YKD0642.(19951019S101702M000621AYKD0642))
FREE PACKAGE(EM.YEM0061.(19951019S101702M000621AYEM0061))
FREE PACKAGE(KD.YKDC91.(19951019S101702M000621AYKDC91))
FREE PACKAGE(KD.YKDR00.(19951019S101702M000621AYKDR00))
FREE PACKAGE(KD.YKDR01.(19951019S101702M000621AYKDR01))
FREE PACKAGE(KD.YKDR03.(19951019S101702M000621AYKDR03))
FREE PACKAGE(KD.YKDR06.(19951019S101702M000621AYKDR06))
FREE PACKAGE(KD.YKDR04.(19951019S101702M000621AYKDR04))
FREE PACKAGE(KD.YKDR16.(19951019S101702M000621AYKDR16))
FREE PACKAGE(KD.YKDR21.(19951019S101702M000621AYKDR21))
FREE PACKAGE(KD.YKDR19.(19951019S101702M000621AYKDR19))
FREE PACKAGE(KD.YKDR18.(19951019S101702M000621AYKDR18))
FREE PACKAGE(KD.YKDR17.(19951019S101702M000621AYKDR17))
FREE PACKAGE(EM.YEM0064.(19951019S101702M000621AYEM0064))
FREE PACKAGE(EM.YEM0065.(19951019S101702M000621AYEM0065))
FREE PACKAGE(KD.YKDR20.(19951019S101702M000621AYKDR20))
FREE PACKAGE(KD.YKDR50.(19951019S101702M000621AYKDR50))
FREE PACKAGE(EM.YEM0900.(19951019S101702M000621AYEM0900))
FREE PACKAGE(KD.YKDR53.(19951019S101702M000621AYKDR53))
FREE PACKAGE(KD.YKDR22.(19951019S101702M000621AYKDR22))
FREE PACKAGE(KD.YKDR51.(19951019S101702M000621AYKDR51))
FREE PACKAGE(KD.YKDR59.(19951019S101702M000621AYKDR59))
FREE PACKAGE(SX.YSX6403.(19951020S101702Z213819AYSX6403))
FREE PACKAGE(SX.YSX6403.(19951020S101702A048832AYSX6403))
FREE PACKAGE(KX.YKX002.(19951020S101702A048828AYKX002))
FREE PACKAGE(KD.YKDV81.(19951023S101702Z214190AYKDV81))
FREE PACKAGE(SX.YSX6403.(19951030S101702A049033AYSX6403))
FREE PACKAGE(EM.YEM0061.(19951026S101702A048979AYEM0061))
FREE PACKAGE(SX.YSX8103.(19951026S101702A048958AYSX8103))
FREE PACKAGE(SX.YSX8104.(19951026S101702A048958AYSX8104))
FREE PACKAGE(SX.YSX6403.(19951101S101702A049170AYSX6403))
FREE PACKAGE(SX.YSX6404.(19951101S101702A049170AYSX6404))
FREE PACKAGE(SX.YSX6404.(19951101S101702Z215711AYSX6404))
FREE PACKAGE(SX.YSX6403.(19951101S101702Z215711AYSX6403))
FREE PACKAGE(SX.YSX6404.(19951101S101702Z215750AYSX6404))
FREE PACKAGE(YY.YYNGTCP.(19951102S101702A048892AYYNGTCP))
FREE PACKAGE(SX.YSX6403.(19951102S101702Z215828AYSX6403))
FREE PACKAGE(OE.YOE0135.(19951102S101702A048966AYOE0135))
FREE PACKAGE(SX.YSX8103.(19951102S101702A049172AYSX8103))
FREE PACKAGE(SX.YSX8104.(19951102S101702A049172AYSX8104))
FREE PACKAGE(SX.YSX6403.(19951102S101702A049191AYSX6403))
FREE PACKAGE(BX.YBX0323.(19951102S101702A048803AYBX0323))
FREE PACKAGE(BX.YBX0321.(19951102S101702A048803AYBX0321))
FREE PACKAGE(BX.YBX0312.(19951102S101702A048803AYBX0312))
FREE PACKAGE(BX.YBX0381.(19951102S101702A048803AYBX0381))
FREE PACKAGE(BX.YBX0382.(19951102S101702A048803AYBX0382))
FREE PACKAGE(BX.YBX0322.(19951102S101702A048803AYBX0322))
FREE PACKAGE(BX.YBX0311.(19951102S101702A048803AYBX0311))
FREE PACKAGE(BX.YBXBI01.(19951102S101702A048803AYBXBI01))
FREE PACKAGE(BX.YBX0363.(19951102S101702A048803AYBX0363))
FREE PACKAGE(BX.YBX0383.(19951102S101702A048803AYBX0383))
FREE PACKAGE(BX.YBXBI03.(19951102S101702A048803AYBXBI03))
FREE PACKAGE(BX.YBX0121.(19951102S101702A048803AYBX0121))
FREE PACKAGE(BX.YBX0361.(19951102S101702A048803AYBX0361))
FREE PACKAGE(BX.YBX0362.(19951102S101702A048803AYBX0362))
FREE PACKAGE(BX.YBX0313.(19951102S101702A048803AYBX0313))
FREE PACKAGE(KD.YKD0640.(19951113S101702A048936AYKD0640))
FREE PACKAGE(KD.YKDV81.(19951113S101702A048936AYKDV81))
FREE PACKAGE(KD.YKD0641.(19951113S101702A048936AYKD0641))
FREE PACKAGE(KD.YKD0643.(19951113S101702A048936AYKD0643))
FREE PACKAGE(KD.YKD0642.(19951113S101702A048936AYKD0642))
FREE PACKAGE(EM.YEM0061.(19951113S101702A048936AYEM0061))
FREE PACKAGE(VP.VP9998.(19951113S101702Z218537AVP9998))
FREE PACKAGE(SX.YSX6404.(19951109S101702A049277AYSX6404))
FREE PACKAGE(VP.VP9998.(19951109S101702A049426AVP9998))
FREE PACKAGE(SX.YSX6403.(19951109S101702A049277AYSX6403))
FREE PACKAGE(SX.SX0640.(19951109S101702A049277ASX0640))
FREE PACKAGE(VP.VP9998.(19951114S101702Z218682AVP9998))
FREE PACKAGE(SX.YSX6403.(19951116S101702Z219256AYSX6403))
FREE PACKAGE(SX.YSX6403.(19951116S101702Z219263AYSX6403))
FREE PACKAGE(VP.YVPUP01.(19951116S101702A049627AYVPUP01))
FREE PACKAGE(CD.YCD0020.(19951116S101702A049627AYCD0020))
FREE PACKAGE(RR.RR7420.(19951116S101702A049429ARR7420))
FREE PACKAGE(SX.YSX6403.(19951116S101702M000633AYSX6403))
FREE PACKAGE(SX.YSX6404.(19951116S101702M000633AYSX6404))
FREE PACKAGE(SX.YSX6403.(19951117S101702Z219421AYSX6403))
FREE PACKAGE(SX.YSX6403.(19951117S101702Z219514AYSX6403))
FREE PACKAGE(SX.YSX8104.(19950817S101702A046517AYSX8104))
FREE PACKAGE(SX.YSX8103.(19950817S101702A046517AYSX8103))
FREE PACKAGE(OD.OD7080.(19950824S101702A047131AOD7080))
FREE PACKAGE(OD.OD7030.(19950824S101702A047131AOD7030))
FREE PACKAGE(KS.YKSMODU.(19950824S101702A047164AYKSMODU))
FREE PACKAGE(EM.YEM0064.(19950824S101702M000598AYEM0064))
FREE PACKAGE(EM.YEM0061.(19950824S101702M000598AYEM0061))
FREE PACKAGE(EM.YEM0065.(19950824S101702M000598AYEM0065))
FREE PACKAGE(KD.YKD0500.(19950824S101702M000598AYKD0500))
FREE PACKAGE(EA.YEA0001.(19950824S101702M000598AYEA0001))
FREE PACKAGE(EM.YEM0900.(19950824S101702M000598AYEM0900))
FREE PACKAGE(OE.OE8130.(19950831S101702A047271AOE8130))
FREE PACKAGE(SX.SX0720.(19950831S101702A047303ASX0720))
FREE PACKAGE(VP.YVPUP01.(19950831S101702A047391AYVPUP01))
FREE PACKAGE(OE.OE8130.(19950901S101702Z206327AOE8130))
FREE PACKAGE(BB.BB0630.(19950907S101702A047247ABB0630))
FREE PACKAGE(YY.YYNGKAS.(19950914S101702A047578AYYNGKAS))
FREE PACKAGE(SX.SX0640.(19950921S101702Z209168ASX0640))
FREE PACKAGE(YY.YYNGKAS.(19950921S101702A047924AYYNGKAS))
FREE PACKAGE(OE.YOEM002.(19950921S101702A047890AYOEM002))
FREE PACKAGE(OE.YOE001.(19950921S101702A047890AYOE001))
FREE PACKAGE(OE.YOEM001.(19950921S101702A047890AYOEM001))
FREE PACKAGE(OE.OE8130.(19950928S101702A048025AOE8130))
FREE PACKAGE(BP.BP7090.(19950928S101702A048040ABP7090))
FREE PACKAGE(BP.BP5300.(19950928S101702A048040ABP5300))
FREE PACKAGE(SX.SX0640.(19950928S101702A047968ASX0640))
FREE PACKAGE(CD.CD7400.(19951012S101702A048447ACD7400))
FREE PACKAGE(VP.YVPUP01.(19951010S101702Z212033AYVPUP01))
FREE PACKAGE(EM.YEM0065.(19960123S101702A051440AYEM0065))
FREE PACKAGE(EM.YEM0900.(19960123S101702A051440AYEM0900))
FREE PACKAGE(EM.YEM0061.(19960123S101702A051440AYEM0061))
FREE PACKAGE(EM.YEM0064.(19960123S101702A051440AYEM0064))
FREE PACKAGE(VP.YVPUP01.(19960125S101702A051459AYVPUP01))
FREE PACKAGE(SX.YSX64P4.(19960126S101702Z231538AYSX64P4))
FREE PACKAGE(SX.YSX6404.(19960126S101702Z231538AYSX6404))
FREE PACKAGE(SX.YSX6404.(19960130S101702A051549AYSX6404))
FREE PACKAGE(SX.YSX64P4.(19960130S101702A051549AYSX64P4))
FREE PACKAGE(SX.YSX64P4.(19960201S101702A051648AYSX64P4))
FREE PACKAGE(VP.VP9997.(19960201S101702A051690AVP9997))
FREE PACKAGE(CD.YCD0020.(19960201S101702A051689AYCD0020))
FREE PACKAGE(EA.YEA0001.(19960201S101702A051573AYEA0001))
FREE PACKAGE(SX.YSX6404.(19960208S101702M000665AYSX6404))
FREE PACKAGE(EM.YEM0064.(19960215144640S101702A052021AYEM0064))
FREE PACKAGE(SX.YSXT812.(19960215150345S101702A052062AYSXT812))
FREE PACKAGE(KD.YKD0500.(19960222143318S101702A052162AYKD0500))
FREE PACKAGE(EA.YEA0001.(19960222143902S101702A052199AYEA0001))
FREE PACKAGE(SX.YSXT812.(19960222144042S101702A052211AYSXT812))
FREE PACKAGE(SX.YSX5104.(19960222144929S101702A052254AYSX5104))
FREE PACKAGE(SX.YSX6404.(19960222144924S101702A052254AYSX6404))
FREE PACKAGE(RR.RR7420.(19960222170427S101702A051544ARR7420))
FREE PACKAGE(OE.OE0121.(19960229141006S101702A052336AOE0121))
FREE PACKAGE(SX.YSX6403.(19951120S101702Z219988AYSX6403))
FREE PACKAGE(SX.YSX6403.(19951120S101702Z219821AYSX6403))
FREE PACKAGE(SX.YSX6404.(19951120S101702Z219821AYSX6404))
FREE PACKAGE(KX.YKX002.(19951120S101702A049712AYKX002))
FREE PACKAGE(SX.YSX6403.(19951121S101702Z220128AYSX6403))
FREE PACKAGE(SX.YSX6404.(19951121S101702Z220128AYSX6404))
FREE PACKAGE(SX.YSX6403.(19951121S101702Z220149AYSX6403))
FREE PACKAGE(SX.YSX6404.(19951121S101702Z220149AYSX6404))
FREE PACKAGE(SX.YSX6404.(19951122S101702Z220381AYSX6404))
FREE PACKAGE(SX.YSX6403.(19951122S101702Z220528AYSX6403))
FREE PACKAGE(SX.SX0720.(19951123S101702A049707ASX0720))
FREE PACKAGE(EA.YEA0001.(19951201S101702A049916AYEA0001))
FREE PACKAGE(KD.YKDV81.(19951128S101702Z221489AYKDV81))
FREE PACKAGE(VP.YVPUP01.(19951129S101702Z221857AYVPUP01))
FREE PACKAGE(SX.YSX6404.(19951130S101702Z222054AYSX6404))
FREE PACKAGE(EM.YEM0061.(19951130S101702A049980AYEM0061))
FREE PACKAGE(KD.YKD0642.(19951130S101702A049980AYKD0642))
FREE PACKAGE(KD.YKDV81.(19951130S101702A049980AYKDV81))
FREE PACKAGE(VP.YVPUP01.(19951130S101702A050037AYVPUP01))
FREE PACKAGE(SX.YSX6404.(19951207S101702M000644AYSX6404))
FREE PACKAGE(SX.YSX6403.(19951207S101702M000644AYSX6403))
FREE PACKAGE(SX.YSX64P4.(19951207S101702M000644AYSX64P4))
FREE PACKAGE(VP.YVPUP01.(19951207S101702A050228AYVPUP01))
FREE PACKAGE(BX.YBX0313.(19951207S101702A050132AYBX0313))
FREE PACKAGE(BX.YBX0313.(19951204S101702Z222592AYBX0313))
FREE PACKAGE(SX.YSX64P4.(19951206S101702Z223382AYSX64P4))
FREE PACKAGE(SX.YSX64P4.(19951214S101702Z224741AYSX64P4))
FREE PACKAGE(SX.YSX64P4.(19951214S101702Z224743AYSX64P4))
FREE PACKAGE(SX.YSX6404.(19951214S101702Z224743AYSX6404))
FREE PACKAGE(FC.YFCM02.(19951214S101702A050488AYFCM02))
FREE PACKAGE(FC.YFCM03.(19951214S101702A050488AYFCM03))
FREE PACKAGE(KD.KD8200.(19951214S101702A050488AKD8200))
FREE PACKAGE(SX.YSX64P4.(19951214S101702Z224751AYSX64P4))
FREE PACKAGE(SX.YSX6404.(19951214S101702Z224751AYSX6404))
FREE PACKAGE(SX.YSX6404.(19951214S101702M000650AYSX6404))
FREE PACKAGE(SX.YSX64P4.(19951214S101702M000650AYSX64P4))
FREE PACKAGE(VT.VT5120.(19951214S101702M000648AVT5120))
FREE PACKAGE(KS.YKSMODU.(19951214S101702M000648AYKSMODU))
FREE PACKAGE(SX.YSX64P4.(19951220S101702A050692AYSX64P4))
FREE PACKAGE(SX.YSX6404.(19951220S101702A050692AYSX6404))
FREE PACKAGE(SX.YSX64P4.(19951220S101702Z225865AYSX64P4))
FREE PACKAGE(SX.YSX64P4.(19951220S101702Z225899AYSX64P4))
FREE PACKAGE(EM.YEM0900.(19951221S101702A050710AYEM0900))
FREE PACKAGE(EM.YEM0061.(19951221S101702A050563AYEM0061))
FREE PACKAGE(SX.YSX64P4.(19951218S101702A050580AYSX64P4))
FREE PACKAGE(SX.YSX6404.(19951218S101702A050580AYSX6404))
FREE PACKAGE(SX.YSX64P4.(19951218S101702Z225267AYSX64P4))
FREE PACKAGE(SX.YSX64P4.(19951218S101702Z225344AYSX64P4))
FREE PACKAGE(SX.YSX6404.(19951227S101702A050763AYSX6404))
FREE PACKAGE(SX.YSX64P4.(19951227S101702A050763AYSX64P4))
FREE PACKAGE(KD.KD8200.(19951228S101702A050761AKD8200))
FREE PACKAGE(SX.YSX64P4.(19951222S101702A050719AYSX64P4))
FREE PACKAGE(SX.YSX8103.(19951222S101702A050719AYSX8103))
FREE PACKAGE(SX.YSX8104.(19951222S101702A050719AYSX8104))
FREE PACKAGE(VP.YVPUP01.(19960104S101702A050753AYVPUP01))
FREE PACKAGE(SX.YSX64P4.(19960116S101702A051197AYSX64P4))
FREE PACKAGE(SX.YSX64P4.(19960111S101702M000654AYSX64P4))
FREE PACKAGE(SX.YSX6404.(19960111S101702M000654AYSX6404))
FREE PACKAGE(SX.YSX6404.(19960117S101702A051254AYSX6404))
FREE PACKAGE(SX.YSX64P4.(19960117S101702A051254AYSX64P4))
FREE PACKAGE(KD.YKD0500.(19960118S101702A051288AYKD0500))
FREE PACKAGE(SX.YSX8104.(19960509084907S101702Z247322AYSX8104))
FREE PACKAGE(SA.YSA0235.(19960509132030S101702A053971AYSA0235))
FREE PACKAGE(SA.YSA0234.(19960509132033S101702A053971AYSA0234))
FREE PACKAGE(SA.YSA0232.(19960509132032S101702A053971AYSA0232))
FREE PACKAGE(SA.YSA0231.(19960509132031S101702A053971AYSA0231))
FREE PACKAGE(SA.YSA0233.(19960509132033S101702A053971AYSA0233))
FREE PACKAGE(SX.YSX8104.(19960509133253S101702A054073AYSX8104))
FREE PACKAGE(NP.NP0360.(19960506182034S101702A053948ANP0360))
FREE PACKAGE(NP.NP0380.(19960506182034S101702A053948ANP0380))
FREE PACKAGE(CD.YCDCIFD.(19960515145654S101702A054064AYCDCIFD))
FREE PACKAGE(CD.YCDCIFD.(19960515142952S101702A054064AYCDCIFD))
FREE PACKAGE(KD.YKD0642.(19960515152932S101702M000684AYKD0642))
FREE PACKAGE(EM.YEM0065.(19960515152930S101702M000684AYEM0065))
FREE PACKAGE(KD.YKDV81.(19960515152935S101702M000684AYKDV81))
FREE PACKAGE(EM.YEM0064.(19960515152934S101702M000684AYEM0064))
FREE PACKAGE(EM.YEM0061.(19960515152929S101702M000684AYEM0061))
FREE PACKAGE(EA.YEA0001.(19960515152936S101702M000684AYEA0001))
FREE PACKAGE(CD.YKDX81.(19960515152931S101702M000684AYKDX81))
FREE PACKAGE(KD.YKDX81.(19960515152931S101702M000684AYKDX81))
FREE PACKAGE(KS.YKSMODU.(19960515160306S101702M000686AYKSMODU))
FREE PACKAGE(SX.YSX6404.(19960515160308S101702M000686AYSX6404))
FREE PACKAGE(EA.YEA0001.(19960513164908S101702Z248111AYEA0001))
FREE PACKAGE(EA.YEA0001.(19960521133901S101702Z249308AYEA0001))
FREE PACKAGE(VP.YVP7403.(19960522110825S101702Z249496AYVP7403))
FREE PACKAGE(SX.YSX6404.(19960518092523S101702Z248849AYSX6404))
FREE PACKAGE(SX.YSX6404.(19960520134651S101702A054281AYSX6404))
FREE PACKAGE(SX.YSX64P4.(19960520134654S101702A054281AYSX64P4))
FREE PACKAGE(EA.YEA0001.(19960523145633S101702A054318AYEA0001))
FREE PACKAGE(VP.YVP7403.(19960524122957S101702Z249868AYVP7403))
FREE PACKAGE(KD.YKD0643.(19960529163059S101702Z250540AYKD0643))
FREE PACKAGE(KD.YKD0500.(19960605164059S101702Z251552AYKD0500))
FREE PACKAGE(AT.AT9000.(19960606140803S101702A054557AAT9000))
FREE PACKAGE(AT.AT9010.(19960606140801S101702A054557AAT9010))
FREE PACKAGE(AT.AT9002.(19960606140805S101702A054557AAT9002))
FREE PACKAGE(SX.YSX8103.(19960606144323S101702A054730AYSX8103))
FREE PACKAGE(SX.YSX5104.(19960606144321S101702A054730AYSX5104))
FREE PACKAGE(SX.YSX8104.(19960606144310S101702A054730AYSX8104))
FREE PACKAGE(BX.YBXBI01.(19960606171752S101702A054723AYBXBI01))
FREE PACKAGE(FC.FC0110.(19960607085733S101702A054822AFC0110))
FREE PACKAGE(CD.FC0100.(19960607085733S101702A054822AFC0100))
FREE PACKAGE(KD.YKD0642.(19960307140103S101702A052143AYKD0642))
FREE PACKAGE(KD.YKD0641.(19960307140103S101702A052143AYKD0641))
FREE PACKAGE(KD.YKD0640.(19960307140102S101702A052143AYKD0640))
FREE PACKAGE(KD.YKDV81.(19960314161746S101702M000666AYKDV81))
FREE PACKAGE(KD.YKD0642.(19960314161748S101702M000666AYKD0642))
FREE PACKAGE(CD.YCDCIFD.(19960314161808S101702M000666AYCDCIFD))
FREE PACKAGE(CI.YCI009A.(19960314161448S101702M000666AYCI009A))
FREE PACKAGE(EM.YEM0061.(19960314161545S101702M000666AYEM0061))
FREE PACKAGE(EM.YEM0064.(19960314161635S101702M000666AYEM0064))
FREE PACKAGE(CD.YCDUP10.(19960314161929S101702M000666AYCDUP10))
FREE PACKAGE(CD.YCDUP14.(19960314161951S101702M000666AYCDUP14))
FREE PACKAGE(AT.AT7060.(19960314140003S101702A052607AAT7060))
FREE PACKAGE(SX.YSX64P4.(19960314140358S101702A052714AYSX64P4))
FREE PACKAGE(SA.SA0240.(19960314140753S101702A052714ASA0240))
FREE PACKAGE(SX.YSX64P4.(19960322153819S101702A053005AYSX64P4))
FREE PACKAGE(KX.YKX002.(19960401150805S101702A053178AYKX002))
FREE PACKAGE(BX.YBX0312.(19960327101618S101702Z240638AYBX0312))
FREE PACKAGE(BX.YBX0313.(19960327101619S101702Z240638AYBX0313))
FREE PACKAGE(BX.YBX0311.(19960327101616S101702Z240638AYBX0311))
FREE PACKAGE(BX.YBX0383.(19960327110526S101702Z240662AYBX0383))
FREE PACKAGE(BX.YBX0382.(19960327110525S101702Z240662AYBX0382))
FREE PACKAGE(BX.YBX0381.(19960327110524S101702Z240662AYBX0381))
FREE PACKAGE(BX.YBX0322.(19960327141624S101702Z240750AYBX0322))
FREE PACKAGE(BX.YBX0321.(19960327142142S101702Z240756AYBX0321))
FREE PACKAGE(BX.YBX0323.(19960327142214S101702Z240758AYBX0323))
FREE PACKAGE(OE.YOE001.(19960328143211S101702A052974AYOE001))
FREE PACKAGE(SX.YSX6404.(19960328144309S101702A053092AYSX6404))
FREE PACKAGE(SX.YSX6404.(19960328155251S101702A053092AYSX6404))
FREE PACKAGE(SX.YSX6404.(19960328165756S101702A053092AYSX6404))
FREE PACKAGE(VP.YVPUP01.(19960328175023S101702A053067AYVPUP01))
FREE PACKAGE(CD.YCD0020.(19960328175022S101702A053067AYCD0020))
FREE PACKAGE(BX.YBX0323.(19960413134151S101702Z243379AYBX0323))
FREE PACKAGE(BX.YBX0321.(19960413134150S101702Z243379AYBX0321))
FREE PACKAGE(BX.YBX0322.(19960413134151S101702Z243379AYBX0322))
FREE PACKAGE(BX.YBX0321.(19960413163905S101702Z243384AYBX0321))
FREE PACKAGE(KS.YKSMODU.(19960409173948S101702A053018AYKSMODU))
FREE PACKAGE(CD.YCDCIFD.(19960411140629S101702A053344AYCDCIFD))
FREE PACKAGE(OE.OE0122.(19960411140916S101702A053315AOE0122))
FREE PACKAGE(AT.AT7060.(19960411135637S101702A053258AAT7060))
FREE PACKAGE(BX.YBX0363.(19960411160921S101702A053228AYBX0363))
FREE PACKAGE(BX.YBX0383.(19960411160927S101702A053228AYBX0383))
FREE PACKAGE(BX.YBX0361.(19960411160919S101702A053228AYBX0361))
FREE PACKAGE(BX.YBX0323.(19960411160918S101702A053228AYBX0323))
FREE PACKAGE(BX.YBX0321.(19960411160914S101702A053228AYBX0321))
FREE PACKAGE(BX.YBXBI03.(19960411160937S101702A053228AYBXBI03))
FREE PACKAGE(BX.YBX0382.(19960411160923S101702A053228AYBX0382))
FREE PACKAGE(BX.YBX0313.(19960411160913S101702A053228AYBX0313))
FREE PACKAGE(BX.YBX0322.(19960411160917S101702A053228AYBX0322))
FREE PACKAGE(BX.YBX0381.(19960411160922S101702A053228AYBX0381))
FREE PACKAGE(BX.YBX0312.(19960411160910S101702A053228AYBX0312))
FREE PACKAGE(BX.YBX0362.(19960411160920S101702A053228AYBX0362))
FREE PACKAGE(BX.YBX0121.(19960411160906S101702A053228AYBX0121))
FREE PACKAGE(BX.YBX0311.(19960411160908S101702A053228AYBX0311))
FREE PACKAGE(BX.YBXBI01.(19960411160928S101702A053228AYBXBI01))
FREE PACKAGE(BX.YBXBI03.(19960411170957S101702A053228AYBXBI03))
FREE PACKAGE(BX.YBX0323.(19960411170953S101702A053228AYBX0323))
FREE PACKAGE(BX.YBX0312.(19960411170951S101702A053228AYBX0312))
FREE PACKAGE(BX.YBX0313.(19960411170951S101702A053228AYBX0313))
FREE PACKAGE(BX.YBX0381.(19960411170955S101702A053228AYBX0381))
FREE PACKAGE(BX.YBX0321.(19960411170952S101702A053228AYBX0321))
FREE PACKAGE(BX.YBXBI01.(19960411170957S101702A053228AYBXBI01))
FREE PACKAGE(BX.YBX0311.(19960411170950S101702A053228AYBX0311))
FREE PACKAGE(BX.YBX0383.(19960411170956S101702A053228AYBX0383))
FREE PACKAGE(BX.YBX0121.(19960411170949S101702A053228AYBX0121))
FREE PACKAGE(BX.YBX0361.(19960411170954S101702A053228AYBX0361))
FREE PACKAGE(BX.YBX0363.(19960411170955S101702A053228AYBX0363))
FREE PACKAGE(BX.YBX0382.(19960411170956S101702A053228AYBX0382))
FREE PACKAGE(BX.YBX0362.(19960411170954S101702A053228AYBX0362))
FREE PACKAGE(BX.YBX0322.(19960411170953S101702A053228AYBX0322))
FREE PACKAGE(BX.YBX0311.(19960415141359S101702Z243570AYBX0311))
FREE PACKAGE(VT.VT7799.(19960415140717S101702A053434AVT7799))
FREE PACKAGE(BX.YBX0311.(19960415164333S101702Z243618AYBX0311))
FREE PACKAGE(BX.YBX0311.(19960415180232S101702Z243633AYBX0311))
FREE PACKAGE(BX.YBX0311.(19960415191722S101702Z243644AYBX0311))
FREE PACKAGE(BX.YBX0311.(19960416151429S101702Z243806AYBX0311))
FREE PACKAGE(BX.YBX0311.(19960417131431S101702Z244080AYBX0311))
FREE PACKAGE(BX.YBX0311.(19960418095238S101702Z244223AYBX0311))
FREE PACKAGE(EM.YEM0061.(19960418134157S101702M000672AYEM0061))
FREE PACKAGE(KD.YKD0642.(19960418134159S101702M000672AYKD0642))
FREE PACKAGE(KS.YKSMODU.(19960418140921S101702A053458AYKSMODU))
FREE PACKAGE(CD.YCDCIFD.(19960418152009S101702M000680AYCDCIFD))
FREE PACKAGE(CE.YCDCIFD.(19960418152009S101702M000680AYCDCIFD))
FREE PACKAGE(BX.YBX0311.(19960422101406S101702Z244648AYBX0311))
FREE PACKAGE(BX.YBX0311.(19960422110638S101702Z244671AYBX0311))
FREE PACKAGE(EA.YEA0001.(19960502135830S101702A053286AYEA0001))
FREE PACKAGE(BX.YBX0323.(19960502144751S101702A053763AYBX0323))
FREE PACKAGE(BX.YBXBI01.(19960502144752S101702A053763AYBXBI01))
FREE PACKAGE(BX.YBX0312.(19960502144754S101702A053763AYBX0312))
FREE PACKAGE(BX.YBX0382.(19960502144752S101702A053763AYBX0382))
FREE PACKAGE(BX.YBX0311.(19960502144753S101702A053763AYBX0311))
FREE PACKAGE(BX.YBX0322.(19960502144750S101702A053763AYBX0322))
FREE PACKAGE(BX.YBX0321.(19960502144748S101702A053763AYBX0321))
FREE PACKAGE(VP.YVP7403.(19960502160807S101702A053816AYVP7403))
FREE PACKAGE(CD.YKDX81.(19960502160759S101702A053827AYKDX81))
FREE PACKAGE(KD.YKDX81.(19960502160759S101702A053827AYKDX81))
FREE PACKAGE(CD.YKDX81.(19960430144759S101702Z245908AYKDX81))
FREE PACKAGE(KD.YKDX81.(19960430144759S101702Z245908AYKDX81))
FREE PACKAGE(CD.YKDX81.(19960430145417S101702Z245908AYKDX81))
FREE PACKAGE(KD.YKDX81.(19960430145417S101702Z245908AYKDX81))
FREE PACKAGE(CONVERT.ASUCONV.(V6102))
FREE PACKAGE(WA.YWAPOS.(A06M012041))
FREE PACKAGE(WA.YWAPOSA.(A06M012041))
FREE PACKAGE(YY.YYWBMON.(19980416233210S101702M000838AYYWBMON))
FREE PACKAGE(BB.BB0610.(19980416171757S101702M000874ABB0610))
FREE PACKAGE(EC.YECRT.(19980416190514S101702M000898AYECRT))
FREE PACKAGE(EC.YECRTV.(19980416190514S101702M000898AYECRTV))
FREE PACKAGE(EC.YECRPV.(19980416190513S101702M000898AYECRPV))
FREE PACKAGE(EC.YECRPA.(19980416190512S101702M000898AYECRPA))
FREE PACKAGE(EC.YECRPAV.(19980416190513S101702M000898AYECRPAV))
FREE PACKAGE(EC.YECCLC.(19980416190502S101702M000898AYECCLC))
FREE PACKAGE(EC.YECCRC.(19980416190505S101702M000898AYECCRC))
FREE PACKAGE(EC.YECCRV.(19980416190508S101702M000898AYECCRV))
FREE PACKAGE(EC.YECCRAR.(19980416190504S101702M000898AYECCRAR))
FREE PACKAGE(EC.YECCLV.(19980416190502S101702M000898AYECCLV))
FREE PACKAGE(EC.YECAV.(19980416190501S101702M000898AYECAV))
FREE PACKAGE(KX.YKX002.(19980416190522S101702M000898AYKX002))
FREE PACKAGE(EC.YECSL.(19980416190516S101702M000898AYECSL))
FREE PACKAGE(EC.YECSFPR.(19980416190515S101702M000898AYECSFPR))
FREE PACKAGE(EC.YECCRL.(19980416190507S101702M000898AYECCRL))
FREE PACKAGE(EC.YECCRCR.(19980416190505S101702M000898AYECCRCR))
FREE PACKAGE(EC.YECRP.(19980416190511S101702M000898AYECRP))
FREE PACKAGE(EC.YECDCI.(19980416190509S101702M000898AYECDCI))
FREE PACKAGE(EC.YECIN.(19980416190510S101702M000898AYECIN))
FREE PACKAGE(EC.YECCLAR.(19980416190501S101702M000898AYECCLAR))
FREE PACKAGE(EA.YEA0010.(19980416190746S101702M000898AYEA0010))
FREE PACKAGE(EC.YECCR.(19980416190503S101702M000898AYECCR))
FREE PACKAGE(EC.YECCL.(19980416190801S101702M000898AYECCL))
FREE PACKAGE(A1P.YKD0500.(19980416190530S101702M000898AYKD0500))
FREE PACKAGE(A2P.YKD0500.(19980416190530S101702M000898AYKD0500))
FREE PACKAGE(KD.YKD0500.(19980416190530S101702M000898AYKD0500))
FREE PACKAGE(EA.YEA0001.(19980416190745S101702M000898AYEA0001))
FREE PACKAGE(EA.YEA0011.(19980416190755S101702M000898AYEA0011))
FREE PACKAGE(SX.YSX6405.(19980416190913S101702M000898AYSX6405))
FREE PACKAGE(TE.YTEF021.(19980417011040S101702A071217AYTEF021))
FREE PACKAGE(TE.YTEF022.(19980417011041S101702A071217AYTEF022))
FREE PACKAGE(YY.YYWBMON.(19980417152423S101702M000838AYYWBMON))
FREE PACKAGE(EC.YECDCI.(19980420091008S101702A071906AYECDCI))
FREE PACKAGE(EC.YECDCI.(19980427160238S101702A072040AYECDCI))
FREE PACKAGE(EC.YECSL.(19980427160239S101702A072040AYECSL))
FREE PACKAGE(TK.TK0120.(19980507163249S101702A072127ATK0120))
FREE PACKAGE(OD.OD7290.(19980507163236S101702A072127AOD7290))
FREE PACKAGE(TK.TK0130.(19980507163251S101702A072127ATK0130))
FREE PACKAGE(TK.TK0110.(19980507163244S101702A072127ATK0110))
FREE PACKAGE(TK.TK0160.(19980507163219S101702A072127ATK0160))
FREE PACKAGE(RT.RT8411.(19980512142538S101702A072415ART8411))
FREE PACKAGE(RT.RT8300.(19980513171122S101702A072545ART8300))
FREE PACKAGE(TE.YTEF021.(19980514175259S101702A072358AYTEF021))
FREE PACKAGE(TE.YTEF022.(19980514175300S101702A072358AYTEF022))
FREE PACKAGE(EA.YEA0010.(19980514155250S101702M000913AYEA0010))
FREE PACKAGE(WI.YWISTIN.(19980515094949S101702M000839AYWISTIN))
FREE PACKAGE(YY.YYWBMON.(19980515095747S101702M000839AYYWBMON))
FREE PACKAGE(SX.YSX6405.(19980520140320S101702M000912AYSX6405))
FREE PACKAGE(SX.YSX64P5.(19980520140318S101702M000912AYSX64P5))
FREE PACKAGE(BX.YBX0323.(19980520145201S101702A072692AYBX0323))
FREE PACKAGE(BX.YBX0313.(19980520145159S101702A072692AYBX0313))
FREE PACKAGE(EC.YECSHD1.(19980216165227S101702A070496AYECSHD1))
FREE PACKAGE(EC.YECSHD2.(19980216165227S101702A070496AYECSHD2))
FREE PACKAGE(YY.YYECGR2.(19980216165215S101702A070496AYYECGR2))
FREE PACKAGE(EC.YECGR2.(19980216165226S101702A070496AYECGR2))
FREE PACKAGE(EC.YECGR2.(19980216165226CGS101702A070496AYECGR2))
FREE PACKAGE(YY.YYECGR2.(19980216165215CGS101702A070496AYYECGR2))
FREE PACKAGE(EC.YECSHD1.(19980216095837S101702Z360013AYECSHD1))
FREE PACKAGE(KX.YKX002.(19980212144153S101702M000834AYKX002))
FREE PACKAGE(EA.YEA0011.(19980212144147S101702M000834AYEA0011))
FREE PACKAGE(EA.YEA0010.(19980212144146S101702M000834AYEA0010))
FREE PACKAGE(YY.YYWBMON.(19980212172010S101702M000836AYYWBMON))
FREE PACKAGE(EC.YECGR2.(19980212125839S101702A069923AYECGR2))
FREE PACKAGE(YY.YYECGR2.(19980212125840S101702A069923AYYECGR2))
FREE PACKAGE(EC.YECGR2.(19980212125839CGS101702A069923AYECGR2))
FREE PACKAGE(YY.YYECGR2.(19980212125840CGS101702A069923AYYECGR2))
FREE PACKAGE(A2P.FD0350.(19980213133248S101702A070466AFD0350))
FREE PACKAGE(EC.YECSES.(19980213132036S101702A070420AYECSES))
FREE PACKAGE(EC.YECSZS.(19980213132043S101702A070420AYECSZS))
FREE PACKAGE(EC.YECSFO.(19980213132037S101702A070420AYECSFO))
FREE PACKAGE(EC.YECSBR.(19980213132030S101702A070420AYECSBR))
FREE PACKAGE(EC.YECSAN.(19980213132028S101702A070420AYECSAN))
FREE PACKAGE(EC.YECSDH.(19980213132030S101702A070420AYECSDH))
FREE PACKAGE(EC.YECSHD2.(19980213132039S101702A070420AYECSHD2))
FREE PACKAGE(EC.YECSDOC.(19980213132031S101702A070420AYECSDOC))
FREE PACKAGE(A1P.YECGRI.(19980213132027S101702A070420AYECGRI))
FREE PACKAGE(A2P.YECGRI.(19980213132027S101702A070420AYECGRI))
FREE PACKAGE(EC.YECGRI.(19980213132027S101702A070420AYECGRI))
FREE PACKAGE(EC.YECSAS.(19980213132029S101702A070420AYECSAS))
FREE PACKAGE(YY.YECSAS.(19980213132029S101702A070420AYECSAS))
FREE PACKAGE(EC.YECMUPD.(19980213132028S101702A070420AYECMUPD))
FREE PACKAGE(EC.YECSL.(19980213132041S101702A070420AYECSL))
FREE PACKAGE(EC.YECSHD1.(19980213132039S101702A070420AYECSHD1))
FREE PACKAGE(EC.YECSEX.(19980213132037S101702A070420AYECSEX))
FREE PACKAGE(EC.YECAV.(19980213132027S101702A070420AYECAV))
FREE PACKAGE(EC.YECSEG.(19980213132031S101702A070420AYECSEG))
FREE PACKAGE(EC.YECSDS.(19980213132031S101702A070420AYECSDS))
FREE PACKAGE(EC.YECSLV.(19980213132041S101702A070420AYECSLV))
FREE PACKAGE(A1P.YKD0500.(19980213132025S101702A070420AYKD0500))
FREE PACKAGE(A2P.YKD0500.(19980213132025S101702A070420AYKD0500))
FREE PACKAGE(KD.YKD0500.(19980213132025S101702A070420AYKD0500))
FREE PACKAGE(BB.BB0610.(19980305141209S101702A070764ABB0610))
FREE PACKAGE(OD.OD7030.(19980312133154S101702A070916AOD7030))
FREE PACKAGE(OD.OD7020.(19980312133153S101702A070916AOD7020))
FREE PACKAGE(EC.YECCL.(19980312162548S101702A070997AYECCL))
FREE PACKAGE(EC.YECIN.(19980312162534S101702A070997AYECIN))
FREE PACKAGE(EC.YECRPAV.(19980312162536S101702A070997AYECRPAV))
FREE PACKAGE(EC.YECSFO.(19980312162543S101702A070997AYECSFO))
FREE PACKAGE(EC.YECSDOC.(19980312162536S101702A070997AYECSDOC))
FREE PACKAGE(EC.YECCRL.(19980312162647S101702A070997AYECCRL))
FREE PACKAGE(EC.YECSHD2.(19980312162544S101702A070997AYECSHD2))
FREE PACKAGE(EC.YECCRC.(19980312162645S101702A070997AYECCRC))
FREE PACKAGE(EC.YECSL.(19980312162545S101702A070997AYECSL))
FREE PACKAGE(EC.YECAV.(19980312162542S101702A070997AYECAV))
FREE PACKAGE(EC.YECSBR.(19980312162539S101702A070997AYECSBR))
FREE PACKAGE(EC.YECSAN.(19980312162538S101702A070997AYECSAN))
FREE PACKAGE(EC.YECRPA.(19980312162535S101702A070997AYECRPA))
FREE PACKAGE(EC.YECGRI.(19980312162534S101702A070997AYECGRI))
FREE PACKAGE(EC.YECRTV.(19980312162537S101702A070997AYECRTV))
FREE PACKAGE(EC.YECCRV.(19980312162532S101702A070997AYECCRV))
FREE PACKAGE(EC.YECRT.(19980312162537S101702A070997AYECRT))
FREE PACKAGE(EC.YECRP.(19980312162535S101702A070997AYECRP))
FREE PACKAGE(EC.YECSDS.(19980312162540S101702A070997AYECSDS))
FREE PACKAGE(EC.YECSAS.(19980312162539S101702A070997AYECSAS))
FREE PACKAGE(YY.YECSAS.(19980312162539S101702A070997AYECSAS))
FREE PACKAGE(EC.YECDCI.(19980312162533S101702A070997AYECDCI))
FREE PACKAGE(EC.YECSDH.(19980312162540S101702A070997AYECSDH))
FREE PACKAGE(EC.YECSEG.(19980312162541S101702A070997AYECSEG))
FREE PACKAGE(EC.YECSZS.(19980312162547S101702A070997AYECSZS))
FREE PACKAGE(EC.YECSHD1.(19980312162544S101702A070997AYECSHD1))
FREE PACKAGE(EC.YECSEX.(19980312162543S101702A070997AYECSEX))
FREE PACKAGE(EC.YECSES.(19980312162542S101702A070997AYECSES))
FREE PACKAGE(EC.YECCR.(19980312162559S101702A070997AYECCR))
FREE PACKAGE(EC.YECSLV.(19980312162546S101702A070997AYECSLV))
FREE PACKAGE(KD.YKD0500.(19980312162639S101702A070997AYKD0500))
FREE PACKAGE(EC.YECSFO.(19980312175719S101702A070997AYECSFO))
FREE PACKAGE(EC.YECDCI.(19980312175704S101702A070997AYECDCI))
FREE PACKAGE(EC.YECRPA.(19980312175706S101702A070997AYECRPA))
FREE PACKAGE(EC.YECSAS.(19980312175709S101702A070997AYECSAS))
FREE PACKAGE(YY.YECSAS.(19980312175709S101702A070997AYECSAS))
FREE PACKAGE(EC.YECIN.(19980312175705S101702A070997AYECIN))
FREE PACKAGE(EC.YECCR.(19980312175737S101702A070997AYECCR))
FREE PACKAGE(EC.YECRP.(19980312175706S101702A070997AYECRP))
FREE PACKAGE(A1P.YECGRI.(19980312175705S101702A070997AYECGRI))
FREE PACKAGE(A2P.YECGRI.(19980312175705S101702A070997AYECGRI))
FREE PACKAGE(EC.YECGRI.(19980312175705S101702A070997AYECGRI))
FREE PACKAGE(EC.YECRT.(19980312175708S101702A070997AYECRT))
FREE PACKAGE(EC.YECRTV.(19980312175708S101702A070997AYECRTV))
FREE PACKAGE(EC.YECCRL.(19980312175741S101702A070997AYECCRL))
FREE PACKAGE(EC.YECCRC.(19980312175740S101702A070997AYECCRC))
FREE PACKAGE(EC.YECSBR.(19980312175714S101702A070997AYECSBR))
FREE PACKAGE(EC.YECRPAV.(19980312175707S101702A070997AYECRPAV))
FREE PACKAGE(A1P.YKD0500.(19980312175740S101702A070997AYKD0500))
FREE PACKAGE(A2P.YKD0500.(19980312175740S101702A070997AYKD0500))
FREE PACKAGE(KD.YKD0500.(19980312175740S101702A070997AYKD0500))
FREE PACKAGE(EC.YECSDOC.(19980312175707S101702A070997AYECSDOC))
FREE PACKAGE(EC.YECSDH.(19980312175716S101702A070997AYECSDH))
FREE PACKAGE(EC.YECSAN.(19980312175709S101702A070997AYECSAN))
FREE PACKAGE(EC.YECCRV.(19980312175704S101702A070997AYECCRV))
FREE PACKAGE(EC.YECSZS.(19980312175724S101702A070997AYECSZS))
FREE PACKAGE(EC.YECAV.(19980312175718S101702A070997AYECAV))
FREE PACKAGE(EC.YECSL.(19980312175721S101702A070997AYECSL))
FREE PACKAGE(EC.YECSEG.(19980312175717S101702A070997AYECSEG))
FREE PACKAGE(EC.YECSHD2.(19980312175720S101702A070997AYECSHD2))
FREE PACKAGE(EC.YECSHD1.(19980312175720S101702A070997AYECSHD1))
FREE PACKAGE(EC.YECSDS.(19980312175716S101702A070997AYECSDS))
FREE PACKAGE(EC.YECSES.(19980312175717S101702A070997AYECSES))
FREE PACKAGE(EC.YECSEX.(19980312175719S101702A070997AYECSEX))
FREE PACKAGE(EC.YECSLV.(19980312175723S101702A070997AYECSLV))
FREE PACKAGE(EC.YECCL.(19980312175726S101702A070997AYECCL))
FREE PACKAGE(LV.YLV0024.(19980318172336S101702Z365489AYLV0024))
FREE PACKAGE(EC.YECCR.(19980319142423S101702A071130AYECCR))
FREE PACKAGE(EC.EC8067.(19980319142758S101702A071130AEC8067))
FREE PACKAGE(SA.SA0370.(19980319145840S101702M000893ASA0370))
FREE PACKAGE(EC.YECCR.(19980323165535S101702A071245AYECCR))
FREE PACKAGE(EC.YECSL.(19980323165535S101702A071245AYECSL))
FREE PACKAGE(SX.YSX6405.(19980402145252S101702M000899AYSX6405))
FREE PACKAGE(SX.YSX64P5.(19980402154907S101702M000899AYSX64P5))
FREE PACKAGE(SX.YSX64P5.(19980402172907S101702M000899AYSX64P5))
FREE PACKAGE(SX.YSX6405.(19980402172908S101702M000899AYSX6405))
FREE PACKAGE(EC.YECRPAV.(19980403141053S101702A071472AYECRPAV))
FREE PACKAGE(EC.YECRPV.(19980403141036S101702A071472AYECRPV))
FREE PACKAGE(EC.YECDCI.(19980403141051S101702A071472AYECDCI))
FREE PACKAGE(EC.YECSFPR.(19980403141055S101702A071472AYECSFPR))
FREE PACKAGE(EC.YECRTV.(19980403141054S101702A071472AYECRTV))
FREE PACKAGE(EC.YECSL.(19980403141055S101702A071472AYECSL))
FREE PACKAGE(A1P.YKD0500.(19980403141032S101702A071472AYKD0500))
FREE PACKAGE(A2P.YKD0500.(19980403141032S101702A071472AYKD0500))
FREE PACKAGE(KD.YKD0500.(19980403141032S101702A071472AYKD0500))
FREE PACKAGE(EC.YECCRV.(19980403141050S101702A071472AYECCRV))
FREE PACKAGE(EC.YECCRL.(19980403141049S101702A071472AYECCRL))
FREE PACKAGE(EC.YECCRCR.(19980403141049S101702A071472AYECCRCR))
FREE PACKAGE(EC.YECCLAR.(19980403141045S101702A071472AYECCLAR))
FREE PACKAGE(EC.YECCLV.(19980403141033S101702A071472AYECCLV))
FREE PACKAGE(EC.YECCRC.(19980403141048S101702A071472AYECCRC))
FREE PACKAGE(EC.YECCRAR.(19980403141048S101702A071472AYECCRAR))
FREE PACKAGE(EC.YECCLC.(19980403141046S101702A071472AYECCLC))
FREE PACKAGE(EC.YECAV.(19980403141043S101702A071472AYECAV))
FREE PACKAGE(EC.YECRT.(19980403141054S101702A071472AYECRT))
FREE PACKAGE(EC.YECIN.(19980403141052S101702A071472AYECIN))
FREE PACKAGE(EC.YECRPA.(19980403141052S101702A071472AYECRPA))
FREE PACKAGE(EC.YECSHD2.(19980403141037S101702A071472AYECSHD2))
FREE PACKAGE(EC.YECRP.(19980403141052S101702A071472AYECRP))
FREE PACKAGE(EC.YECCL.(19980403141044S101702A071472AYECCL))
FREE PACKAGE(EC.YECCR.(19980403141046S101702A071472AYECCR))
FREE PACKAGE(EC.EC8698.(19980403135200S101702A071490AEC8698))
FREE PACKAGE(LV.YLV0024.(19980331072213S101702Z367531AYLV0024))
FREE PACKAGE(LV.YLV0024.(19980331180350S101702Z367531AYLV0024))
FREE PACKAGE(LV.YLV0024.(19980331190659S101702Z367531AYLV0024))
FREE PACKAGE(SX.YSX64P5.(19980408132103S101702A071600AYSX64P5))
FREE PACKAGE(LV.YLV0024.(19980408135941S101702A071564AYLV0024))
FREE PACKAGE(SX.YSX64P5.(19980409192934S101702A071661AYSX64P5))
FREE PACKAGE(SX.YSX6405.(19980406150643S101702A071524AYSX6405))
FREE PACKAGE(SX.YSX64P5.(19980406150642S101702A071524AYSX64P5))
FREE PACKAGE(EC.YECRPA.(19980414134151S101702A071717AYECRPA))
FREE PACKAGE(EC.YECRPV.(19980414134152S101702A071717AYECRPV))
FREE PACKAGE(A1P.KD0540.(CRMC000003))
FREE PACKAGE(A2P.KD0540.(CRMC000003))
FREE PACKAGE(A1P.YKD0500.(CRMC000003))
FREE PACKAGE(A2P.YKD0500.(CRMC000003))
FREE PACKAGE(A1P.YKD0500.(CRMA000067))
FREE PACKAGE(A2P.YKD0500.(CRMA000067))
FREE PACKAGE(SA.YSAT301.(A16M000011))
FREE PACKAGE(SX.YSX6405.(19980529125649S101702A072818AYSX6405))
FREE PACKAGE(SX.YSX6405.(19980525142836S101702A072728AYSX6405))
FREE PACKAGE(EC.YECRP.(19980528135618S101702A072724AYECRP))
FREE PACKAGE(EC.YECCR.(19980528135617S101702A072724AYECCR))
FREE PACKAGE(BX.BX6750.(19980604135635S101702A072837ABX6750))
FREE PACKAGE(BX.BX6700.(19980604135634S101702A072837ABX6700))
FREE PACKAGE(BX.BX8110.(19980604135636S101702A072837ABX8110))
FREE PACKAGE(EC.YECCL.(19980605154804S101702A072938AYECCL))
FREE PACKAGE(SX.YSX6405.(19980611134538S101702M000921AYSX6405))
FREE PACKAGE(YY.YYWBMON.(19980611154027S101702M000840AYYWBMON))
FREE PACKAGE(EA.YEA0011.(19980612054603S101702M000922AYEA0011))
FREE PACKAGE(EA.YEA0010.(19980612054603S101702M000922AYEA0010))
FREE PACKAGE(A1P.YKD0500.(19980612054559S101702M000922AYKD0500))
FREE PACKAGE(A2P.YKD0500.(19980612054559S101702M000922AYKD0500))
FREE PACKAGE(KD.YKD0500.(19980612054559S101702M000922AYKD0500))
FREE PACKAGE(AT.AT9000.(19980608102520S101702Z377704AAT9000))
FREE PACKAGE(AT.AT9000.(19980609134214S101702Z377955AAT9000))
FREE PACKAGE(A1P.YKD0500.(19980618141748S101702A073266AYKD0500))
FREE PACKAGE(A2P.YKD0500.(19980618141748S101702A073266AYKD0500))
FREE PACKAGE(KD.YKD0500.(19980618141748S101702A073266AYKD0500))
FREE PACKAGE(TK.TK0180.(19980618135727S101702A073194ATK0180))
FREE PACKAGE(A1P.YKD0500.(19980613074807S101702Z378634AYKD0500))
FREE PACKAGE(A2P.YKD0500.(19980613074807S101702Z378634AYKD0500))
FREE PACKAGE(KD.YKD0500.(19980613074807S101702Z378634AYKD0500))
FREE PACKAGE(SX.YSXT231.(19980625130147S101702A073376AYSXT231))
FREE PACKAGE(OD.OD7030.(19980625145545S101702A073365AOD7030))
FREE PACKAGE(OD.OD7020.(19980625145544S101702A073365AOD7020))
FREE PACKAGE(A1P.YKD0500.(19980701111931S101702A073364AYKD0500))
FREE PACKAGE(A2P.YKD0500.(19980701111931S101702A073364AYKD0500))
FREE PACKAGE(KD.YKD0500.(19980701111931S101702A073364AYKD0500))
FREE PACKAGE(A1P.YKD0500.(19980701133922S101702A073364AYKD0500))
FREE PACKAGE(A2P.YKD0500.(19980701133922S101702A073364AYKD0500))
FREE PACKAGE(KD.YKD0500.(19980701133922S101702A073364AYKD0500))
FREE PACKAGE(A1P.KD0540.(19980701134213S101702A073364AKD0540))
FREE PACKAGE(A2P.KD0540.(19980701134213S101702A073364AKD0540))
FREE PACKAGE(EC.YECSDOC.(19980626164741S101702A073406AYECSDOC))
FREE PACKAGE(EC.YECSHD2.(19980626164742S101702A073406AYECSHD2))
FREE PACKAGE(EC.YECSES.(19980626164741S101702A073406AYECSES))
FREE PACKAGE(EC.YECSLV.(19980626164742S101702A073406AYECSLV))
FREE PACKAGE(A1P.YKD0500.(19980702175321S101702Z381719AYKD0500))
FREE PACKAGE(A2P.YKD0500.(19980702175321S101702Z381719AYKD0500))
FREE PACKAGE(KD.YKD0500.(19980702175321S101702Z381719AYKD0500))
FREE PACKAGE(EC.YECSHD1.(19980703152440S101702A073255AYECSHD1))
FREE PACKAGE(EC.YECSLV.(19980703152443S101702A073255AYECSLV))
FREE PACKAGE(EC.YECSDS.(19980703152438S101702A073255AYECSDS))
FREE PACKAGE(EC.YECCRL.(19980703152444S101702A073255AYECCRL))
FREE PACKAGE(EC.YECSAN.(19980703152435S101702A073255AYECSAN))
FREE PACKAGE(EC.YECSDH.(19980703152437S101702A073255AYECSDH))
FREE PACKAGE(EC.YECSHD2.(19980703152441S101702A073255AYECSHD2))
FREE PACKAGE(EC.YECCR.(19980703152441S101702A073255AYECCR))
FREE PACKAGE(EC.YECCRCR.(19980703152444S101702A073255AYECCRCR))
FREE PACKAGE(EC.YECSZS.(19980703152434S101702A073255AYECSZS))
FREE PACKAGE(EC.YECRT.(19980703152433S101702A073255AYECRT))
FREE PACKAGE(EC.YECMUPD.(19980703152435S101702A073255AYECMUPD))
FREE PACKAGE(EC.YECSFO.(19980703152440S101702A073255AYECSFO))
FREE PACKAGE(EC.YECSDOC.(19980703152437S101702A073255AYECSDOC))
FREE PACKAGE(EC.YECSAS.(19980703152436S101702A073255AYECSAS))
FREE PACKAGE(YY.YECSAS.(19980703152436S101702A073255AYECSAS))
FREE PACKAGE(EC.YECSEX.(19980703152439S101702A073255AYECSEX))
FREE PACKAGE(EC.YECSEG.(19980703152438S101702A073255AYECSEG))
FREE PACKAGE(EC.YECSES.(19980703152438S101702A073255AYECSES))
FREE PACKAGE(EC.YECCL.(19980703152436S101702A073255AYECCL))
FREE PACKAGE(SA.YSAT006.(A16M000011))
FREE PACKAGE(EA.YEA0010.(19980709194554S101702M000923AYEA0010))
FREE PACKAGE(EA.YEA0011.(19980709194555S101702M000923AYEA0011))
FREE PACKAGE(EA.YEA0001.(19980709194601S101702M000923AYEA0001))
FREE PACKAGE(BX.BX8000.(19980709201829S101702A073668ABX8000))
FREE PACKAGE(KV.BX0130.(19980709201828S101702A073668ABX0130))
FREE PACKAGE(BX.YBXBI02.(19980709201648S101702A073668AYBXBI02))
FREE PACKAGE(BX.YBXBI01.(19980709201647S101702A073668AYBXBI01))
FREE PACKAGE(SX.YSX64P5.(19980709134005S101702M000924AYSX64P5))
FREE PACKAGE(SA.YSAT011.(19980709133841S101702M000924AYSAT011))
FREE PACKAGE(OD.OD7330.(19980709142526S101702A073729AOD7330))
FREE PACKAGE(A1P.YKD0500.(19980709142935S101702A073757AYKD0500))
FREE PACKAGE(A2P.YKD0500.(19980709142935S101702A073757AYKD0500))
FREE PACKAGE(KD.YKD0500.(19980709142935S101702A073757AYKD0500))
FREE PACKAGE(TK.TK0180.(19980709140354S101702A073643ATK0180))
FREE PACKAGE(AV.AV8810.(19980710144536S101702M000841AAV8810))
FREE PACKAGE(BX.YBXBI01.(19980710082952S101702A073668AYBXBI01))
FREE PACKAGE(BX.YBXBI02.(19980710082953S101702A073668AYBXBI02))
FREE PACKAGE(KV.BX0130.(19980710083334S101702A073668ABX0130))
FREE PACKAGE(BX.BX8000.(19980710083334S101702A073668ABX8000))
FREE PACKAGE(AT.AT7010.(19980710095644S101702Z382648AAT7010))
FREE PACKAGE(EA.YEA0011.(19980710093659S101702M000923AYEA0011))
FREE PACKAGE(EA.YEA0010.(19980710093614S101702M000923AYEA0010))
FREE PACKAGE(EA.YEA0001.(19980710093842S101702M000923AYEA0001))
FREE PACKAGE(AT.AT7010.(19980710102939S101702Z382654AAT7010))
FREE PACKAGE(A1P.YKD0500.(19980717194602S101702Z383292AYKD0500))
FREE PACKAGE(A2P.YKD0500.(19980717194602S101702Z383292AYKD0500))
FREE PACKAGE(KD.YKD0500.(19980717194602S101702Z383292AYKD0500))
FREE PACKAGE(KD.YKD0500.(19980717193307S101702Z383289AYKD0500))
FREE PACKAGE(A1P.KD0540.(19980717170619S101702Z383268AKD0540))
FREE PACKAGE(A2P.KD0540.(19980717170619S101702Z383268AKD0540))
FREE PACKAGE(A1P.YKD0500.(CRMA000128))
FREE PACKAGE(A2P.YKD0500.(CRMA000128))
FREE PACKAGE(A1P.YKD0500.(CRMD000263))
FREE PACKAGE(A2P.YKD0500.(CRMD000263))
FREE PACKAGE(A1P.YKD0500.(CRMD000281))
FREE PACKAGE(A2P.YKD0500.(CRMD000281))
FREE PACKAGE(A1P.YKD0500.(CRMD000283))
FREE PACKAGE(A2P.YKD0500.(CRMD000283))
FREE PACKAGE(M21SAMT2.SP1BS7T.())
FREE PACKAGE(M21SAMT2.SP1BS9T.())
FREE PACKAGE(M23SAMT2.SP1BS1T.())
FREE PACKAGE(M23SAMT2.SP1BS3T.())
FREE PACKAGE(M23SAMT2.SP1BS7T.())
FREE PACKAGE(M23SAMT2.SP1BS9T.())
FREE PACKAGE(WI.YWIASL.(A06M002543))
FREE PACKAGE(PV.B5POCNTL.(1999-12-28-14.08.56.649262))
FREE PACKAGE(PV.A5PO058.(2000-05-08-16.07.25.035712))
FREE PACKAGE(PV.YPV760B.(A18Q000770))
FREE PACKAGE(CD.CD7060.())
FREE PACKAGE(NK.YNKUMW.())
FREE PACKAGE(GE.YGE0001.())
FREE PACKAGE(PC.YPC9997.())
FREE PACKAGE(CO.CO5000.())
FREE PACKAGE(RT.RT5411.())
FREE PACKAGE(CO.CO0040.())
FREE PACKAGE(KS.KS0600.())
FREE PACKAGE(GE.YGE0002.())
FREE PACKAGE(OE.YOEUP12.())
FREE PACKAGE(OE.YOEUP77.())
FREE PACKAGE(OE.YOEUP04.())
FREE PACKAGE(WB.WB0030.())
FREE PACKAGE(BW.YBWAHD4.())
FREE PACKAGE(BW.YBWAEWG.())
FREE PACKAGE(BW.YBWAEW2.())
FREE PACKAGE(BW.YBWAEW6.())
FREE PACKAGE(BW.YBWAEWN.())
FREE PACKAGE(BW.YBWAO3W.())
FREE PACKAGE(RT.RT5030.())
FREE PACKAGE(SA.YSA0235.())
FREE PACKAGE(SA.YSA0232.())
FREE PACKAGE(SA.YSA0233.())
FREE PACKAGE(SA.YSA0236.())
FREE PACKAGE(SA.YSA0234.())
FREE PACKAGE(SA.YSA0231.())
FREE PACKAGE(KS.YKS0031.())
FREE PACKAGE(BW.YBWAH57.())
FREE PACKAGE(BW.YBWAAGE.())
FREE PACKAGE(RT.RT5930.())
FREE PACKAGE(SX.YSX0610.())
FREE PACKAGE(NP.NP5410.())
FREE PACKAGE(SY.SY9230.())
FREE PACKAGE(YY.YYNHBS.())
FREE PACKAGE(KS.KS8000.())
FREE PACKAGE(KS.KS8900.())
FREE PACKAGE(BP.YBP7020.())
FREE PACKAGE(BP.YBPSHBP.())
FREE PACKAGE(UP.YUP09.())
FREE PACKAGE(UP.YUP12.())
FREE PACKAGE(UP.YUP03.())
FREE PACKAGE(UP.YUP06.())
FREE PACKAGE(UP.YUP11.())
FREE PACKAGE(UP.YUP04.())
FREE PACKAGE(UP.YUP29.())
FREE PACKAGE(UP.YUP44.())
FREE PACKAGE(UP.YUP46.())
FREE PACKAGE(UP.YUP24.())
FREE PACKAGE(UP.YUP10.())
FREE PACKAGE(UP.YUP22.())
FREE PACKAGE(UP.YUP25.())
FREE PACKAGE(UP.YUP40.())
FREE PACKAGE(UP.YUP39.())
FREE PACKAGE(UP.YUP45.())
FREE PACKAGE(UP.YUP77.())
FREE PACKAGE(NV.NVO019.(A))
FREE PACKAGE(BW.YBWAAGF.(19960815141412S101702A056402AYBWAAGF))
FREE PACKAGE(BW.YBWAPVY.(19960815141415S101702A056402AYBWAPVY))
FREE PACKAGE(BW.YBWAXLQ.(19960815141411S101702A056402AYBWAXLQ))
FREE PACKAGE(BW.YBWAH56.(19960815141413S101702A056402AYBWAH56))
FREE PACKAGE(BW.YBWAPVZ.(19960815141410S101702A056402AYBWAPVZ))
FREE PACKAGE(KEIN.NS0890.(19960815142208S101702A056403ANS0890))
FREE PACKAGE(NS.NS0890.(19960815142208S101702A056403ANS0890))
FREE PACKAGE(RR.RR7150.(19960815131413S101702A055629ARR7150))
FREE PACKAGE(WK.YWKLUBO.(19960815172257S101702M000658AYWKLUBO))
FREE PACKAGE(SM.SMJCLEX2.())
FREE PACKAGE(BP.BP7030.(19960822140553S101702A056579ABP7030))
FREE PACKAGE(SA.YSAL001.(19960822140801S101702A056643AYSAL001))
FREE PACKAGE(SA.YSAL002.(19960822140803S101702A056643AYSAL002))
FREE PACKAGE(VT.YVT0809.(19960822140730S101702A056608AYVT0809))
FREE PACKAGE(SX.YSX5104.(19960822140944S101702A056633AYSX5104))
FREE PACKAGE(KEIN.NS0890.(19960822141851S101702A056667ANS0890))
FREE PACKAGE(NS.NS0890.(19960822141851S101702A056667ANS0890))
FREE PACKAGE(SX.SX0540.(19960822142339S101702A056633ASX0540))
FREE PACKAGE(NK.NK8040.(19960822153011S101702A056584ANK8040))
FREE PACKAGE(PHPSPTA.H1116R.())
FREE PACKAGE(PHPS53.H1116R.())
FREE PACKAGE(PHPSPTA.H1046R.())
FREE PACKAGE(PHPS53.H1046R.())
FREE PACKAGE(PHPSPTA.H0106R.())
FREE PACKAGE(PHPS53.H0106R.())
FREE PACKAGE(PHPSPTA.H0091R.())
FREE PACKAGE(PHPS53.H0091R.())
FREE PACKAGE(PHPSPTA.H0093R.())
FREE PACKAGE(PHPS53.H0093R.())
FREE PACKAGE(PHPSPTA.H0092R.())
FREE PACKAGE(PHPS53.H0092R.())
FREE PACKAGE(PHPSPTA.H0096R.())
FREE PACKAGE(PHPS53.H0096R.())
FREE PACKAGE(PHPSPTA.H0094R.())
FREE PACKAGE(PHPS53.H0094R.())
FREE PACKAGE(PHPSPTA.H0095R.())
FREE PACKAGE(PHPS53.H0095R.())
FREE PACKAGE(PHPSPTA.H0097R.())
FREE PACKAGE(PHPS53.H0097R.())
FREE PACKAGE(PHPSPTA.H0098R.())
FREE PACKAGE(PHPS53.H0098R.())
FREE PACKAGE(PHPSPTA.H0100R.())
FREE PACKAGE(PHPS53.H0100R.())
FREE PACKAGE(PHPSPTA.H0099R.())
FREE PACKAGE(PHPS53.H0099R.())
FREE PACKAGE(PHPSPTA.H0101R.())
FREE PACKAGE(PHPS53.H0101R.())
FREE PACKAGE(PHPSPTA.H0102R.())
FREE PACKAGE(PHPS53.H0102R.())
FREE PACKAGE(PHPSPTA.H0105R.())
FREE PACKAGE(PHPS53.H0105R.())
FREE PACKAGE(PHPSPTA.H0104R.())
FREE PACKAGE(PHPS53.H0104R.())
FREE PACKAGE(PHPSPTA.H1164R.())
FREE PACKAGE(PHPS53.H1164R.())
FREE PACKAGE(PHPSPTA.H1165R.())
FREE PACKAGE(PHPS53.H1165R.())
FREE PACKAGE(PHPSPTA.H1163R.())
FREE PACKAGE(PHPS53.H1163R.())
FREE PACKAGE(PHPSPTA.H1168R.())
FREE PACKAGE(PHPS53.H1168R.())
FREE PACKAGE(PHPSPTA.H1169R.())
FREE PACKAGE(PHPS53.H1169R.())
FREE PACKAGE(PHPSPTA.H1166R.())
FREE PACKAGE(PHPS53.H1166R.())
FREE PACKAGE(PHPSPTA.H1167R.())
FREE PACKAGE(PHPS53.H1167R.())
FREE PACKAGE(PHPSPTA.H1172R.())
FREE PACKAGE(PHPS53.H1172R.())
FREE PACKAGE(PHPSPTA.H1170R.())
FREE PACKAGE(PHPS53.H1170R.())
FREE PACKAGE(PHPSPTA.H1171R.())
FREE PACKAGE(PHPS53.H1171R.())
FREE PACKAGE(PHPSPTA.H1173R.())
FREE PACKAGE(PHPS53.H1173R.())
FREE PACKAGE(PHPSPTA.H1174R.())
FREE PACKAGE(PHPS53.H1174R.())
FREE PACKAGE(PHPSPTA.H1175R.())
FREE PACKAGE(PHPS53.H1175R.())
FREE PACKAGE(PHPSPTA.H1178R.())
FREE PACKAGE(PHPS53.H1178R.())
FREE PACKAGE(PHPSPTA.H1176R.())
FREE PACKAGE(PHPS53.H1176R.())
FREE PACKAGE(PHPSPTA.H1177R.())
FREE PACKAGE(PHPS53.H1177R.())
FREE PACKAGE(PHPSPTA.H1181R.())
FREE PACKAGE(PHPS53.H1181R.())
FREE PACKAGE(PHPSPTA.H1182R.())
FREE PACKAGE(PHPS53.H1182R.())
FREE PACKAGE(PHPSPTA.H1179R.())
FREE PACKAGE(PHPS53.H1179R.())
FREE PACKAGE(PHPSPTA.H1180R.())
FREE PACKAGE(PHPS53.H1180R.())
FREE PACKAGE(PHPSPTA.H1185R.())
FREE PACKAGE(PHPS53.H1185R.())
FREE PACKAGE(PHPSPTA.H1183R.())
FREE PACKAGE(PHPS53.H1183R.())
FREE PACKAGE(PHPSPTA.H1184R.())
FREE PACKAGE(PHPS53.H1184R.())
FREE PACKAGE(PHPSPTA.H1188R.())
FREE PACKAGE(PHPS53.H1188R.())
FREE PACKAGE(PHPSPTA.H1186R.())
FREE PACKAGE(PHPS53.H1186R.())
FREE PACKAGE(PHPSPTA.H1187R.())
FREE PACKAGE(PHPS53.H1187R.())
FREE PACKAGE(PHPSPTA.H1191R.())
FREE PACKAGE(PHPS53.H1191R.())
FREE PACKAGE(PHPSPTA.H1189R.())
FREE PACKAGE(PHPS53.H1189R.())
FREE PACKAGE(PHPSPTA.H1190R.())
FREE PACKAGE(PHPS53.H1190R.())
FREE PACKAGE(PHPSPTA.H1194R.())
FREE PACKAGE(PHPS53.H1194R.())
FREE PACKAGE(PHPSPTA.H1192R.())
FREE PACKAGE(PHPS53.H1192R.())
FREE PACKAGE(PHPSPTA.H1193R.())
FREE PACKAGE(PHPS53.H1193R.())
FREE PACKAGE(PHPSPTA.H1197R.())
FREE PACKAGE(PHPS53.H1197R.())
FREE PACKAGE(PHPSPTA.H1198R.())
FREE PACKAGE(PHPS53.H1198R.())
FREE PACKAGE(PHPSPTA.H1195R.())
FREE PACKAGE(PHPS53.H1195R.())
FREE PACKAGE(PHPSPTA.H1196R.())
FREE PACKAGE(PHPS53.H1196R.())
FREE PACKAGE(PHPSPTA.H1199R.())
FREE PACKAGE(PHPS53.H1199R.())
FREE PACKAGE(PHPSPTA.H1200R.())
FREE PACKAGE(PHPS53.H1200R.())
FREE PACKAGE(OS.OS7293.(A))
FREE PACKAGE(PHPSPTA.H0103R.())
FREE PACKAGE(PHPS53.H0103R.())
FREE PACKAGE(SX.YSX5104.(19960827154539S101702Z263428AYSX5104))
FREE PACKAGE(SX.YSX5104.(19960829140441S101702A056757AYSX5104))
FREE PACKAGE(OE.OE9250.(19960829140415S101702A056744AOE9250))
FREE PACKAGE(SX.YSX5104.(19960829092947S101702Z263848AYSX5104))
FREE PACKAGE(PHPSPTA.GCCRC01.())
FREE PACKAGE(PHPS53.GCCRC01.())
FREE PACKAGE(NV.NVO020.(A))
FREE PACKAGE(NV.NVO033.(A))
FREE PACKAGE(KD.KD8096.(19960905155004S101702M000711AKD8096))
FREE PACKAGE(KD.KD0630.(19960905154850S101702M000711AKD0630))
FREE PACKAGE(RR.RR7130.(19960905155309S101702M000711ARR7130))
FREE PACKAGE(RR.RR7120.(19960905155309S101702M000711ARR7120))
FREE PACKAGE(RR.RR7150.(19960905155310S101702M000711ARR7150))
FREE PACKAGE(RR.RR7190.(19960905155311S101702M000711ARR7190))
FREE PACKAGE(RR.RR7410.(19960905155313S101702M000711ARR7410))
FREE PACKAGE(VT.YVT0801.(19960905152954S101702M000711AYVT0801))
FREE PACKAGE(VT.YVT0805.(19960905152957S101702M000711AYVT0805))
FREE PACKAGE(VT.YVT0803.(19960905152956S101702M000711AYVT0803))
FREE PACKAGE(VT.YVT0804.(19960905152957S101702M000711AYVT0804))
FREE PACKAGE(VT.YVT0806.(19960905152958S101702M000711AYVT0806))
FREE PACKAGE(VT.YVT0802.(19960905152955S101702M000711AYVT0802))
FREE PACKAGE(CD.YCDUP10.(19960905153351S101702M000711AYCDUP10))
FREE PACKAGE(AT.YAT7010.(19960905133829S101702A056753AYAT7010))
FREE PACKAGE(SE.YSE0301.(19960905133832S101702A056374AYSE0301))
FREE PACKAGE(KD.KD8090.(19960912100713S101702Z265960AKD8090))
FREE PACKAGE(ED.YED0120.(19960912212211S101702A057173AYED0120))
FREE PACKAGE(KS.YKS5553.(19960912155328S101702A057108AYKS5553))
FREE PACKAGE(YY.YYDAISF.(19960912154821S101702A056992AYYDAISF))
FREE PACKAGE(AV.AV8760.(19960912182612S101702M000659AAV8760))
FREE PACKAGE(YY.AV8760.(19960912182612S101702M000659AAV8760))
FREE PACKAGE(WK.YWKLUBO.(19960912180055S101702M000659AYWKLUBO))
FREE PACKAGE(YY.YYEAISM.(19960920115644S101702Z267161AYYEAISM))
FREE PACKAGE(YY.YYDAISM.(19960920121001S101702Z267171AYYDAISM))
FREE PACKAGE(YY.YYEAISM.(19960920121911S101702Z267173AYYEAISM))
FREE PACKAGE(KD.KD8090.(19960916170653S101702Z266453AKD8090))
FREE PACKAGE(PUPG53.HMCCNVT3.())
FREE PACKAGE(PUPG53.HMCCNVT2.())
FREE PACKAGE(PUPG53.HMCCNVK2.())
FREE PACKAGE(PUPG53.HMCCNVS3.())
FREE PACKAGE(PUPG53.HMCCNVS2.())
FREE PACKAGE(PUPG53.HMCCNVI1.())
FREE PACKAGE(KS.KS0720.(19960613175707S101702A054915AKS0720))
FREE PACKAGE(VT.YVT0801.(19960613181338S101702A054978AYVT0801))
FREE PACKAGE(VT.YVT0803.(19960613181234S101702A054978AYVT0803))
FREE PACKAGE(VT.YVT0804.(19960613181241S101702A054978AYVT0804))
FREE PACKAGE(VT.YVT0805.(19960613181244S101702A054978AYVT0805))
FREE PACKAGE(WK.YWKLUBO.(19960613192725S101702M000641AYWKLUBO))
FREE PACKAGE(PHPSPTA.H1116X2.())
FREE PACKAGE(PHPS53.H1116X2.())
FREE PACKAGE(PT.PT8520.(19960613141320S101702M000695APT8520))
FREE PACKAGE(BX.YBXBI02.(19960613145220S101702A054888AYBXBI02))
FREE PACKAGE(OD.OD7200.(19960613145421S101702A054902AOD7200))
FREE PACKAGE(OD.OD7190.(19960613145420S101702A054902AOD7190))
FREE PACKAGE(OD.OD7180.(19960613145428S101702A054902AOD7180))
FREE PACKAGE(FD.FD8100.(19960613143639S101702A054192AFD8100))
FREE PACKAGE(CD.YCDT10.(19960613152928S101702A054996AYCDT10))
FREE PACKAGE(BP.YBP04NS.(19960613153121S101702A055005AYBP04NS))
FREE PACKAGE(SX.YSXFLOG.(19960613151257S101702A054928AYSXFLOG))
FREE PACKAGE(SA.YSAT807.(19960613151306S101702A054928AYSAT807))
FREE PACKAGE(KD.KD8070.(19960613161006S101702A054120AKD8070))
FREE PACKAGE(KD.KD7200.(19960614092516S101702A055036AKD7200))
FREE PACKAGE(BP.BP7040.(19960621120626S101702Z254169ABP7040))
FREE PACKAGE(VP.YVP7401.(19960621113929S101702Z254159AYVP7401))
FREE PACKAGE(VP.YVP7402.(19960621113930S101702Z254159AYVP7402))
FREE PACKAGE(VP.YVP7402.(19960621144555S101702Z254221AYVP7402))
FREE PACKAGE(VP.YVP7401.(19960621144555S101702Z254221AYVP7401))
FREE PACKAGE(VP.YVP7402.(19960617134247S101702Z253094AYVP7402))
FREE PACKAGE(VP.YVP7401.(19960617134246S101702Z253094AYVP7401))
FREE PACKAGE(PHPSPTA.H0025R.())
FREE PACKAGE(PHPS53.H0025R.())
FREE PACKAGE(VP.YVP7402.(19960618163031S101702Z253537AYVP7402))
FREE PACKAGE(VP.YVP7401.(19960618163029S101702Z253537AYVP7401))
FREE PACKAGE(SA.YSAL006.(19960620135031S101702A054814AYSAL006))
FREE PACKAGE(NK.NK8160.(19960620154603S101702A055102ANK8160))
FREE PACKAGE(NK.NK8110.(19960627163246S101702A055267ANK8110))
FREE PACKAGE(NK.NK8820.(19960627163516S101702A055244ANK8820))
FREE PACKAGE(EX.YEXERG.())
FREE PACKAGE(VP.YVP7401.(19960627143107S101702A055358AYVP7401))
FREE PACKAGE(VP.YVP7402.(19960627143109S101702A055358AYVP7402))
FREE PACKAGE(NK.YNKSICH.(19960704165443S101702A055614AYNKSICH))
FREE PACKAGE(SA.YSAL006.(19960702125049S101702A055478AYSAL006))
FREE PACKAGE(PHPSPTA.GCSTATE.())
FREE PACKAGE(PHPS53.GCSTATE.())
FREE PACKAGE(NK.YNKSICH.(19960702173409S101702Z255596AYNKSICH))
FREE PACKAGE(NK.YNKSICH.(19960702182225S101702Z255600AYNKSICH))
FREE PACKAGE(PHPSPTA.GRENDV0.())
FREE PACKAGE(PHPS53.GRENDV0.())
FREE PACKAGE(NK.YNKSICH.(19960703153248S101702Z255754AYNKSICH))
FREE PACKAGE(NK.YNKSICH.(19960703090225S101702Z255632AYNKSICH))
FREE PACKAGE(NK.YNKSICH.(19960703093214S101702Z255641AYNKSICH))
FREE PACKAGE(NK.YNKSICH.(19960703112609S101702Z255691AYNKSICH))
FREE PACKAGE(NK.YNKSICH.(19960703115112S101702Z255698AYNKSICH))
FREE PACKAGE(SA.YSAL006.(19960703124118S101702A055562AYSAL006))
FREE PACKAGE(NK.YNKSICH.(19960703125020S101702Z255709AYNKSICH))
FREE PACKAGE(NK.YNKSICH.(19960703122934S101702Z255706AYNKSICH))
FREE PACKAGE(NK.YNKSICH.(19960703133410S101702Z255717AYNKSICH))
FREE PACKAGE(NK.YNKSICH.(19960703143433S101702Z255741AYNKSICH))
FREE PACKAGE(OD.OD7040.(19960711133939S101702A055623AOD7040))
FREE PACKAGE(NK.YNKSICH.(19960711134332S101702A055711AYNKSICH))
FREE PACKAGE(WK.YWKLUBO.(19960711152018S101702M000657AYWKLUBO))
FREE PACKAGE(ED.YED0034.(19960711161137S101702A055746AYED0034))
FREE PACKAGE(SV.SV7570.(19960711171327S101702A055415ASV7570))
FREE PACKAGE(PHPSPTA.H1160R.())
FREE PACKAGE(PHPS53.H1160R.())
FREE PACKAGE(PHPSPTA.H1159R.())
FREE PACKAGE(PHPS53.H1159R.())
FREE PACKAGE(PHPSPTA.H1161R.())
FREE PACKAGE(PHPS53.H1161R.())
FREE PACKAGE(PHPSPTA.H1162R.())
FREE PACKAGE(PHPS53.H1162R.())
FREE PACKAGE(PHPSPTA.H1099R.())
FREE PACKAGE(PHPS53.H1099R.())
FREE PACKAGE(PHPSPTA.H0090R.())
FREE PACKAGE(PHPS53.H0090R.())
FREE PACKAGE(PHPSPTA.H0035R.())
FREE PACKAGE(PHPS53.H0035R.())
FREE PACKAGE(NK.YNKSICH.(19960708122220S101702Z256269AYNKSICH))
FREE PACKAGE(RP.RP5660.(19960708130856S101702A055658ARP5660))
FREE PACKAGE(NK.NK0030V.(19960709155209S101702Z256616ANK0030V))
FREE PACKAGE(NK.YNKSICH.(19960709100619S101702Z256439AYNKSICH))
FREE PACKAGE(RP.RP5660.(19960717170432S101702A055989ARP5660))
FREE PACKAGE(BW.YBWAEW9.(19960718124101S101702A056012AYBWAEW9))
FREE PACKAGE(BW.YBWAEWL.(19960718124102S101702A056012AYBWAEWL))
FREE PACKAGE(BW.YBWAEWM.(19960718124103S101702A056012AYBWAEWM))
FREE PACKAGE(BW.YBWAE3X.(19960718124102S101702A056012AYBWAE3X))
FREE PACKAGE(BW.YBWAEW1.(19960718124100S101702A056012AYBWAEW1))
FREE PACKAGE(YX.YXNKSIC.(19960718123939S101702A056012AYXNKSIC))
FREE PACKAGE(YY.YNKSICB.(19960718123939S101702A056012AYNKSICB))
FREE PACKAGE(OD.OD7140.(19960718135641S101702A055864AOD7140))
FREE PACKAGE(OD.OD7240.(19960718135643S101702A055864AOD7240))
FREE PACKAGE(EV.EV0600.(19960718135628S101702A055841AEV0600))
FREE PACKAGE(OD.OD7210.(19960718135643S101702A055864AOD7210))
FREE PACKAGE(ED.YED0034.(19960718160812S101702A055858AYED0034))
FREE PACKAGE(ED.YED0034.(19960715110850S101702Z257531AYED0034))
FREE PACKAGE(NV.NVB918.())
FREE PACKAGE(NV.NVB920.())
FREE PACKAGE(NV.NVO021.(A))
FREE PACKAGE(NV.NVO025.(A))
FREE PACKAGE(NV.NVO006.(A))
FREE PACKAGE(NV.NVO010.(A))
FREE PACKAGE(NV.NVO017.(A))
FREE PACKAGE(NV.NVO018.(A))
FREE PACKAGE(NV.NVO026.(A))
FREE PACKAGE(NV.NVO027.(A))
FREE PACKAGE(NV.NVO028.(A))
FREE PACKAGE(NV.NVO029.(A))
FREE PACKAGE(NV.NVO030.(A))
FREE PACKAGE(NV.NVO042.(A))
FREE PACKAGE(NV.NVO043.(A))
FREE PACKAGE(NV.NVO034.(A))
FREE PACKAGE(NV.NVO037.(A))
FREE PACKAGE(NV.NVO038.(A))
FREE PACKAGE(NV.NVO039.(A))
FREE PACKAGE(NV.NVO041.(A))
FREE PACKAGE(NV.NVO053.(A))
FREE PACKAGE(NV.NVO055.(A))
FREE PACKAGE(NV.NVO045.(A))
FREE PACKAGE(NV.NVO046.(A))
FREE PACKAGE(NV.NVO052.(A))
FREE PACKAGE(NV.NVO060.(A))
FREE PACKAGE(NV.NVO064.(A))
FREE PACKAGE(NV.NVO070.(A))
FREE PACKAGE(NV.NVO075.(A))
FREE PACKAGE(NV.NVO076.(A))
FREE PACKAGE(NV.NVO077.(A))
FREE PACKAGE(NV.NVO079.(A))
FREE PACKAGE(NV.NVO080.(A))
FREE PACKAGE(NV.NVO071.(A))
FREE PACKAGE(NV.NVO081.(A))
FREE PACKAGE(NV.NVO082.(A))
FREE PACKAGE(NV.NVO083.(A))
FREE PACKAGE(BW.YBWAEWM.(19960722114429S101702A056037AYBWAEWM))
FREE PACKAGE(BW.YBWAEWL.(19960722114428S101702A056037AYBWAEWL))
FREE PACKAGE(BW.YBWAEW1.(19960722114425S101702A056037AYBWAEW1))
FREE PACKAGE(BW.YBWAE3X.(19960722114427S101702A056037AYBWAE3X))
FREE PACKAGE(BW.YBWAEW9.(19960722114426S101702A056037AYBWAEW9))
FREE PACKAGE(PHPSPTA.HMPBNDM.())
FREE PACKAGE(PHPS53.HMPBNDM.())
FREE PACKAGE(SA.YSAL006.(19960731150427S101702A056186AYSAL006))
FREE PACKAGE(SX.SX0540.(19960731150721S101702A056219ASX0540))
FREE PACKAGE(NV.NVO048.(A))
FREE PACKAGE(NV.NVO049.(A))
FREE PACKAGE(NV.NVO057.(A))
FREE PACKAGE(NV.NVO059.(A))
FREE PACKAGE(NV.NVO072.(A))
FREE PACKAGE(NV.NVO031.(A))
FREE PACKAGE(NV.NVO032.(A))
FREE PACKAGE(NV.NVO047.(A))
FREE PACKAGE(NV.NVO073.(A))
FREE PACKAGE(NV.NVO074.(A))
FREE PACKAGE(EX.EX8888.(19960812102421S101702Z261211AEX8888))
FREE PACKAGE(BP.BP7030.(19960808141137S101702A056223ABP7030))
FREE PACKAGE(KEIN.NS0890.(19960808144239S101702A056331ANS0890))
FREE PACKAGE(NS.NS0890.(19960808144239S101702A056331ANS0890))
FREE PACKAGE(BX.YBXBI02.(19960808183124S101702A056200AYBXBI02))
FREE PACKAGE(YY.YYDEPAY.(19960808183530S101702A056249AYYDEPAY))
FREE PACKAGE(BP.BP7030.(19960809114839S101702Z261082ABP7030))
FREE PACKAGE(KB.KB2010.(19961128144621S101702A059147AKB2010))
FREE PACKAGE(YY.YYWBMOE.(19961128144620S101702A059131AYYWBMOE))
FREE PACKAGE(YY.YYWBMOE.(19961128160532S101702A059131AYYWBMOE))
FREE PACKAGE(ZP.YZPUSER.(19961126141035S101702A059224AYZPUSER))
FREE PACKAGE(RP.RP9010.(19961210181748S101702A059742ARP9010))
FREE PACKAGE(CC.CC5160.(19961212143434S101702A058962ACC5160))
FREE PACKAGE(VT.YVT0731.(19961209174331S101702A059465AYVT0731))
FREE PACKAGE(KS.YKSAUFT.(19961209174335S101702A059465AYKSAUFT))
FREE PACKAGE(KS.YKSMODU.(19961209174338S101702A059465AYKSMODU))
FREE PACKAGE(VT.YVT0809.(19961209174336S101702A059465AYVT0809))
FREE PACKAGE(VP.YVP7401.(19961217152842S101702Z284369AYVP7401))
FREE PACKAGE(VP.YVP7401.(19961217095521S101702Z284200AYVP7401))
FREE PACKAGE(KS.YKSAUFT.(19961218101955S101702A059995AYKSAUFT))
FREE PACKAGE(LB.YLB0113.(19961212161055S101702M000662AYLB0113))
FREE PACKAGE(WK.YWKLUBO.(19961212161508S101702M000662AYWKLUBO))
FREE PACKAGE(YY.YYWBMOE.(19961212173057S101702A059683AYYWBMOE))
FREE PACKAGE(BG.YBG0533.(19961212184920S101702A059774AYBG0533))
FREE PACKAGE(BG.YBG0532.(19961212185135S101702A059774AYBG0532))
FREE PACKAGE(KS.YKSZNID.(19961213190542S101702A059882AYKSZNID))
FREE PACKAGE(KS.YKS5553.(19961213190525S101702A059882AYKS5553))
FREE PACKAGE(VT.YVT0731.(19961213190527S101702A059882AYVT0731))
FREE PACKAGE(KS.YKS5552.(19961213190524S101702A059882AYKS5552))
FREE PACKAGE(KS.YKS5551.(19961213190524S101702A059882AYKS5551))
FREE PACKAGE(KS.KS0720.(19961213190918S101702A059882AKS0720))
FREE PACKAGE(ED.YEDSAM.(19961219133558S101702A059912AYEDSAM))
FREE PACKAGE(PT.PT8650.(19961231141731S101702Z286711APT8650))
FREE PACKAGE(WK.YWK019A.(19961227141204S101702M000749AYWK019A))
FREE PACKAGE(WK.YWKLUBO.(19961227141203S101702M000749AYWKLUBO))
FREE PACKAGE(PT.PT8520.(19961227123142S101702M000758APT8520))
FREE PACKAGE(BW.YBWAAGE.(19961227131948S101702A060345AYBWAAGE))
FREE PACKAGE(BW.YBWAAGF.(19961227131949S101702A060345AYBWAAGF))
FREE PACKAGE(BW.YBWAXLQ.(19961227132033S101702A060345AYBWAXLQ))
FREE PACKAGE(BW.YBWAFI2.(19961227132018S101702A060345AYBWAFI2))
FREE PACKAGE(BW.YBWAFIY.(19961227132014S101702A060345AYBWAFIY))
FREE PACKAGE(BW.YBWAFIW.(19961227132013S101702A060345AYBWAFIW))
FREE PACKAGE(BW.YBWAFI0.(19961227132017S101702A060345AYBWAFI0))
FREE PACKAGE(BW.YBWAFI1.(19961227132018S101702A060345AYBWAFI1))
FREE PACKAGE(BW.YBWAFIX.(19961227132014S101702A060345AYBWAFIX))
FREE PACKAGE(BW.YBWAH57.(19961227132030S101702A060345AYBWAH57))
FREE PACKAGE(BW.YBWAFIZ.(19961227132016S101702A060345AYBWAFIZ))
FREE PACKAGE(BW.YBWAPVY.(19961227132031S101702A060345AYBWAPVY))
FREE PACKAGE(BW.YBWAH56.(19961227132029S101702A060345AYBWAH56))
FREE PACKAGE(BW.YBWAPVZ.(19961227132032S101702A060345AYBWAPVZ))
FREE PACKAGE(RR.RR0240.(19961227132818S101702A060345ARR0240))
FREE PACKAGE(KD.KD0630.(19960926134359S101702A057314AKD0630))
FREE PACKAGE(KD.KD0640.(19960926134359S101702A057314AKD0640))
FREE PACKAGE(NK.NK8110.(19960926162634S101702A057441ANK8110))
FREE PACKAGE(NK.NK8170.(19960926162637S101702A057441ANK8170))
FREE PACKAGE(PHPSPTA.GSELECT.())
FREE PACKAGE(PHPS53.GSELECT.())
FREE PACKAGE(KD.KD0640.(19961003141209S101702A057537AKD0640))
FREE PACKAGE(CD.KD0600.(19961003141208S101702A057537AKD0600))
FREE PACKAGE(KD.KD0600.(19961003141208S101702A057537AKD0600))
FREE PACKAGE(YY.YYDAISM.(19960927122508S101702Z268064AYYDAISM))
FREE PACKAGE(CD.KD0600.(19960927085001S101702Z268024AKD0600))
FREE PACKAGE(KD.KD0600.(19960927085001S101702Z268024AKD0600))
FREE PACKAGE(KD.KD0640.(19960927085317S101702Z268027AKD0640))
FREE PACKAGE(KD.KD8090.(19960927170504S101702Z268138AKD8090))
FREE PACKAGE(YY.YYDAISM.(19960930084648S101702Z268203AYYDAISM))
FREE PACKAGE(YY.YYDAISM.(19960930182222S101702Z268425AYYDAISM))
FREE PACKAGE(ED.YED0120.(19961007201605S101702Z269643AYED0120))
FREE PACKAGE(ED.YED0120.(19961009112903S101702Z269915AYED0120))
FREE PACKAGE(ED.YED0034.(19961009120403S101702Z269920AYED0034))
FREE PACKAGE(ED.YED0120.(19961004122314S101702A057542AYED0120))
FREE PACKAGE(ED.YED0034.(19961004122313S101702A057542AYED0034))
FREE PACKAGE(ED.YED0120.(19961010135243S101702A057713AYED0120))
FREE PACKAGE(ED.YED0034.(19961010135245S101702A057713AYED0034))
FREE PACKAGE(VT.VT5040.(19961010135459S101702A057724AVT5040))
FREE PACKAGE(NK.NK7920.(19961010145703S101702A057697ANK7920))
FREE PACKAGE(NK.NK5240.(19961010145701S101702A057697ANK5240))
FREE PACKAGE(NK.NK7030.(19961010145702S101702A057697ANK7030))
FREE PACKAGE(NK.NK8840.(19961010145703S101702A057697ANK8840))
FREE PACKAGE(KS.YKSMODU.(19961022142351S101702Z272071AYKSMODU))
FREE PACKAGE(KS.YKSAUFT.(19961022142351S101702Z272071AYKSAUFT))
FREE PACKAGE(KS.YKSAUFT.(19961022074124S101702Z271871AYKSAUFT))
FREE PACKAGE(OD.OD7090.(19961016164015S101702Z271012AOD7090))
FREE PACKAGE(EX.YEXERG.(19961016172704S101702A057202AYEXERG))
FREE PACKAGE(EX.EX7010.(19961016172831S101702A057202AEX7010))
FREE PACKAGE(OD.OD7090.(19961017072106S101702Z271040AOD7090))
FREE PACKAGE(KS.YKSMODU.(19961017165521S101702A057903AYKSMODU))
FREE PACKAGE(KS.YKSAUFT.(19961017165520S101702A057903AYKSAUFT))
FREE PACKAGE(YY.YYEAISM.(19961018142720S101702M000660AYYEAISM))
FREE PACKAGE(FI.YFI7201.(19961018112744S101702Z271383AYFI7201))
FREE PACKAGE(YY.YYDAISM.(19961018115328S101702M000660AYYDAISM))
FREE PACKAGE(OD.OD7070.(19961023085719S101702Z272282AOD7070))
FREE PACKAGE(KS.YKSAUFT.(19961024144245S101702A058089AYKSAUFT))
FREE PACKAGE(KS.YKSMODU.(19961024144246S101702A058089AYKSMODU))
FREE PACKAGE(KS.YKSAUFT.(19961025083025S101702Z273139AYKSAUFT))
FREE PACKAGE(KS.YKSAUFT.(19961025105240S101702Z273213AYKSAUFT))
FREE PACKAGE(KS.YKSMODU.(19961025105241S101702Z273213AYKSMODU))
FREE PACKAGE(PHPSPTA.HMCCNVSD.())
FREE PACKAGE(PHPS53.HMCCNVSD.())
FREE PACKAGE(EX.YEXERG.(19961031134918S101702A058312AYEXERG))
FREE PACKAGE(EX.YEXERG.(19961031134918CGS101702A058312AYEXERG))
FREE PACKAGE(ED.YED0034.(19961031145508S101702A058043AYED0034))
FREE PACKAGE(CD.YCDUP10.(19961031150558S101702M000738AYCDUP10))
FREE PACKAGE(PT.YPTBZAC.(19961108140519S101702Z275952AYPTBZAC))
FREE PACKAGE(PT.YPTBAK.(19961108140520S101702Z275952AYPTBAK))
FREE PACKAGE(PT.YPTBER.(19961108140519S101702Z275952AYPTBER))
FREE PACKAGE(PHPSPTA.H0025X2.())
FREE PACKAGE(PHPS53.H0025X2.())
FREE PACKAGE(RP.RP5100.(19961106151732S101702A058507ARP5100))
FREE PACKAGE(NTA1P.AT0070.(CIMA000450))
FREE PACKAGE(GE.GE7620.(19961107194155S101702M000730AGE7620))
FREE PACKAGE(GE.GE7590.(19961107194153S101702M000730AGE7590))
FREE PACKAGE(GE.GE7580.(19961107194153S101702M000730AGE7580))
FREE PACKAGE(WK.YWKATRE.(19961115011453S101702M000661AYWKATRE))
FREE PACKAGE(BF.YBF530A.(19961115010108S101702M000661AYBF530A))
FREE PACKAGE(WK.WK7160.(19961115025420S101702M000661AWK7160))
FREE PACKAGE(SX.YSX5405.(19961114194627S101702M000743AYSX5405))
FREE PACKAGE(SX.YSX5404.(19961114194626S101702M000743AYSX5404))
FREE PACKAGE(CD.YCDUP10.(19961114194602S101702M000743AYCDUP10))
FREE PACKAGE(SX.YSX8104.(19961114194632S101702M000743AYSX8104))
FREE PACKAGE(SX.YSX8105.(19961114194633S101702M000743AYSX8105))
FREE PACKAGE(KS.YKSMODU.(19961114194917S101702M000743AYKSMODU))
FREE PACKAGE(KS.YKSAUFT.(19961114194908S101702M000743AYKSAUFT))
FREE PACKAGE(SX.YSX5104.(19961114194623S101702M000743AYSX5104))
FREE PACKAGE(SA.YSAOBP.(19961114194922S101702M000743AYSAOBP))
FREE PACKAGE(KB.KB2010.(19961114221018S101702A058608AKB2010))
FREE PACKAGE(FC.FC0020.(19961114221845S101702A058752AFC0020))
FREE PACKAGE(KD.FC0020.(19961114221845S101702A058752AFC0020))
FREE PACKAGE(BG.YBG0533.(19961115104534S101702M000774AYBG0533))
FREE PACKAGE(BG.YBG0532.(19961115104536S101702M000774AYBG0532))
FREE PACKAGE(PT.YPTBZAC.(19961115111204S101702A058611AYPTBZAC))
FREE PACKAGE(PT.YPTBER.(19961115111204S101702A058611AYPTBER))
FREE PACKAGE(PT.YPTBAK.(19961115111205S101702A058611AYPTBAK))
FREE PACKAGE(PT.YPTBAK.(19961111225045S101702Z276501AYPTBAK))
FREE PACKAGE(PT.YPTBAK.(19961111232114S101702Z276502AYPTBAK))
FREE PACKAGE(PT.YPTBER.(19961112180916S101702Z276858AYPTBER))
FREE PACKAGE(PT.YPTBZAC.(19961112180917S101702Z276858AYPTBZAC))
FREE PACKAGE(PT.YPTBAK.(19961112180917S101702Z276858AYPTBAK))
FREE PACKAGE(PT.YPTBZAC.(19961113024849S101702Z276869AYPTBZAC))
FREE PACKAGE(PT.YPTBAK.(19961113024850S101702Z276869AYPTBAK))
FREE PACKAGE(CD.YCDUP10.(19961114175618S101702M000743AYCDUP10))
FREE PACKAGE(SX.YSX5104.(19961114144227S101702M000743AYSX5104))
FREE PACKAGE(SX.YSX5404.(19961114144229S101702M000743AYSX5404))
FREE PACKAGE(CD.YCDUP10.(19961114144211S101702M000743AYCDUP10))
FREE PACKAGE(KS.YKSMODU.(19961114144530S101702M000743AYKSMODU))
FREE PACKAGE(SX.YSX5405.(19961114144230S101702M000743AYSX5405))
FREE PACKAGE(SX.YSX8104.(19961114144235S101702M000743AYSX8104))
FREE PACKAGE(SX.YSX8105.(19961114144236S101702M000743AYSX8105))
FREE PACKAGE(KS.YKSAUFT.(19961114144518S101702M000743AYKSAUFT))
FREE PACKAGE(SA.YSAOBP.(19961114144539S101702M000743AYSAOBP))
FREE PACKAGE(SA.YSAT807.(19961121140042S101702M000745AYSAT807))
FREE PACKAGE(SA.YSAOBP.(19961121140042S101702M000745AYSAOBP))
FREE PACKAGE(ED.YED0120.(19961121135415S101702A058872AYED0120))
FREE PACKAGE(ED.YED0034.(19961121135414S101702A058872AYED0034))
FREE PACKAGE(BG.YBG0532.(19961122143048S101702Z278945AYBG0532))
FREE PACKAGE(BG.YBG0533.(19961122143047S101702Z278945AYBG0533))
FREE PACKAGE(KB.KB2010.(19961118082438S101702Z277492AKB2010))
FREE PACKAGE(SX.YSX8105.(19961118110550S101702A058913AYSX8105))
FREE PACKAGE(PHPSPTA.HMCECR5.())
FREE PACKAGE(PHPS53.HMCECR5.())
FREE PACKAGE(KS.YKS5551.(19970306130420S101702A061749AYKS5551))
FREE PACKAGE(SA.YSAT802.(19970306131335S101702M000777AYSAT802))
FREE PACKAGE(EX.YEXERG.(19970306131334S101702A061962AYEXERG))
FREE PACKAGE(EX.YEXERG.(19970306131334CGS101702A061962AYEXERG))
FREE PACKAGE(BG.YBG0533.(19970306174905S101702A062187AYBG0533))
FREE PACKAGE(BG.YBG0532.(19970306174909S101702A062187AYBG0532))
FREE PACKAGE(VT.YVT0804.(19970307192828S101702A062025AYVT0804))
FREE PACKAGE(PHPSPTA.GCADDE.())
FREE PACKAGE(PHPS53.GCADDE.())
FREE PACKAGE(PHPSPTA.GCRDENT.())
FREE PACKAGE(PHPS53.GCRDENT.())
FREE PACKAGE(WK.YWKLUBO.(19970313143807S101702M000717AYWKLUBO))
FREE PACKAGE(YY.YYCXCR.(19970313110131S101702Z301064AYYCXCR))
FREE PACKAGE(RR.RR7420.(19970313122851S101702A061790ARR7420))
FREE PACKAGE(RR.RR7240.(19970313122849S101702A061790ARR7240))
FREE PACKAGE(YY.RR7240.(19970313122849S101702A061790ARR7240))
FREE PACKAGE(RR.RR7260.(19970313122851S101702A061790ARR7260))
FREE PACKAGE(RR.RR8220.(19970313122854S101702A061790ARR8220))
FREE PACKAGE(RR.RR8100.(19970313122854S101702A061790ARR8100))
FREE PACKAGE(WK.YWKLUBO.(19970313192346S101702M000717AYWKLUBO))
FREE PACKAGE(VT.YVT0805.(19970314192907S101702A062471AYVT0805))
FREE PACKAGE(VT.YVT0801.(19970314192907S101702A062471AYVT0801))
FREE PACKAGE(VT.YVT0804.(19970314192907S101702A062471AYVT0804))
FREE PACKAGE(VP.YVP7401.(19970319145619S101702Z302523AYVP7401))
FREE PACKAGE(KD.KD0620.(19970320172119S101702A062566AKD0620))
FREE PACKAGE(BW.YBWAEWJ.(19970320173113S101702A062607AYBWAEWJ))
FREE PACKAGE(RR.RR8300.(19970320173218S101702A062654ARR8300))
FREE PACKAGE(YY.YYDAISF.(19970320153356S101702M000778AYYDAISF))
FREE PACKAGE(YY.YYDEAIS.(19970320153357S101702M000778AYYDEAIS))
FREE PACKAGE(YY.YYDAISM.(19970320153356S101702M000778AYYDAISM))
FREE PACKAGE(YY.YYEAISM.(19970320153358S101702M000778AYYEAISM))
FREE PACKAGE(ED.YED0034.(19970320153410S101702M000778AYED0034))
FREE PACKAGE(ED.YED0120.(19970320153410S101702M000778AYED0120))
FREE PACKAGE(YY.YYDEPAY.(19970320153413S101702M000778AYYDEPAY))
FREE PACKAGE(VT.VT5040.(19970320162702S101702M000778AVT5040))
FREE PACKAGE(PHPSPTA.GTCLUP.())
FREE PACKAGE(PHPS53.GTCLUP.())
FREE PACKAGE(PHPSPTA.GUIVRFY.())
FREE PACKAGE(PHPS53.GUIVRFY.())
FREE PACKAGE(PHPSPTA.GARESET.())
FREE PACKAGE(PHPS53.GARESET.())
FREE PACKAGE(PHPSPTA.GACOLSN.())
FREE PACKAGE(PHPS53.GACOLSN.())
FREE PACKAGE(PT.YPTBER.(19970327164021S101702Z303850AYPTBER))
FREE PACKAGE(PT.YPTBZAC.(19970327164021S101702Z303850AYPTBZAC))
FREE PACKAGE(PT.YPTBAK.(19970327164021S101702Z303850AYPTBAK))
FREE PACKAGE(KD.KD8030.(19970327172217S101702Z303860AKD8030))
FREE PACKAGE(KD.KD8012.(19970404104807S101702Z304584AKD8012))
FREE PACKAGE(KD.KD8012.(19970401154800S101702Z304029AKD8012))
FREE PACKAGE(KD.KD8012.(19970401115710S101702Z304029AKD8012))
FREE PACKAGE(PHPSPTA.HMCGSET.())
FREE PACKAGE(PHPS53.HMCGSET.())
FREE PACKAGE(KS.YKS5553.(19970403145839S101702A062688AYKS5553))
FREE PACKAGE(NK.NK5180.(19970403170629S101702A062868ANK5180))
FREE PACKAGE(NK.NK5200.(19970403170632S101702A062868ANK5200))
FREE PACKAGE(NK.NK7050.(19970403170633S101702A062868ANK7050))
FREE PACKAGE(NK.NK8030.(19970403170634S101702A062868ANK8030))
FREE PACKAGE(NK.NK8060.(19970403170636S101702A062868ANK8060))
FREE PACKAGE(BG.YBG0532.(19970403171955S101702A062906AYBG0532))
FREE PACKAGE(SY.SY9230.(A))
FREE PACKAGE(SA.YSAL011.(19970403142901S101702M000784AYSAL011))
FREE PACKAGE(SA.YSAL002.(19970403142856S101702M000784AYSAL002))
FREE PACKAGE(SA.YSA5282.(19970403142915S101702M000784AYSA5282))
FREE PACKAGE(SA.YSAL006.(19970403142900S101702M000784AYSAL006))
FREE PACKAGE(SA.YSAL010.(19970403142900S101702M000784AYSAL010))
FREE PACKAGE(SA.YSA5281.(19970403142907S101702M000784AYSA5281))
FREE PACKAGE(VT.YVT0802.(19970410142924S101702A063075AYVT0802))
FREE PACKAGE(VT.YVT0806.(19970410142929S101702A063075AYVT0806))
FREE PACKAGE(VT.YVT0803.(19970410142925S101702A063075AYVT0803))
FREE PACKAGE(VT.YVT0809.(19970410142932S101702A063075AYVT0809))
FREE PACKAGE(VT.YVT0805.(19970410142928S101702A063075AYVT0805))
FREE PACKAGE(VT.YVT0801.(19970410142923S101702A063075AYVT0801))
FREE PACKAGE(VT.YVT0804.(19970410142926S101702A063075AYVT0804))
FREE PACKAGE(VT.YVT0801.(19970410150032S101702A063075AYVT0801))
FREE PACKAGE(VT.YVT0804.(19970410150033S101702A063075AYVT0804))
FREE PACKAGE(VT.YVT0805.(19970410150034S101702A063075AYVT0805))
FREE PACKAGE(VT.YVT0803.(19970410150033S101702A063075AYVT0803))
FREE PACKAGE(VT.YVT0809.(19970410150035S101702A063075AYVT0809))
FREE PACKAGE(VT.YVT0802.(19970410150032S101702A063075AYVT0802))
FREE PACKAGE(VT.YVT0806.(19970410150034S101702A063075AYVT0806))
FREE PACKAGE(WB.WB7490.(19970410154641S101702A063035AWB7490))
FREE PACKAGE(VT.YVT0801.(19970407070548S101702Z304742AYVT0801))
FREE PACKAGE(VT.YVT0805.(19970407070836S101702Z304746AYVT0805))
FREE PACKAGE(PT.YPTBAK.(19970101010523S101702Z286736AYPTBAK))
FREE PACKAGE(NK.NK8240.(19970101115054S101702A060411ANK8240))
FREE PACKAGE(NK.NK8840.(19970101115056S101702A060411ANK8840))
FREE PACKAGE(NK.NK7920.(19970101115048S101702A060411ANK7920))
FREE PACKAGE(NK.NK5240.(19970101115037S101702A060411ANK5240))
FREE PACKAGE(NK.NK5030.(19970101115058S101702A060411ANK5030))
FREE PACKAGE(NK.NK7930.(19970101115051S101702A060411ANK7930))
FREE PACKAGE(NK.NK7030.(19970101115041S101702A060411ANK7030))
FREE PACKAGE(BW.YBWAE3X.(19970101115057S101702A060424AYBWAE3X))
FREE PACKAGE(BW.YBWAEW6.(19970101115054S101702A060424AYBWAEW6))
FREE PACKAGE(BW.YBWAEW9.(19970101115056S101702A060424AYBWAEW9))
FREE PACKAGE(NK.NK5040.(19970101115059S101702A060411ANK5040))
FREE PACKAGE(BW.YBWAEWJ.(19970101115100S101702A060424AYBWAEWJ))
FREE PACKAGE(BW.YBWAO3W.(19970101115059S101702A060424AYBWAO3W))
FREE PACKAGE(BW.YBWAEWL.(19970101115101S101702A060424AYBWAEWL))
FREE PACKAGE(BW.YBWAEWM.(19970101115101S101702A060424AYBWAEWM))
FREE PACKAGE(BW.YBWAEW1.(19970101115052S101702A060424AYBWAEW1))
FREE PACKAGE(BW.YBWAEW2.(19970101115053S101702A060424AYBWAEW2))
FREE PACKAGE(BW.YBWAHD4.(19970101115058S101702A060424AYBWAHD4))
FREE PACKAGE(BW.YBWAEWN.(19970101115051S101702A060424AYBWAEWN))
FREE PACKAGE(NK.NK7800.(19970101115537S101702A060424ANK7800))
FREE PACKAGE(NK.NK7810.(19970101115539S101702A060424ANK7810))
FREE PACKAGE(NK.NK8140.(19970101115542S101702A060424ANK8140))
FREE PACKAGE(NK.NK7840.(19970101115540S101702A060424ANK7840))
FREE PACKAGE(NK.NK8040.(19970101115540S101702A060424ANK8040))
FREE PACKAGE(NK.NK8090.(19970101115541S101702A060424ANK8090))
FREE PACKAGE(NK.NK8170.(19970103102547S101702Z287047ANK8170))
FREE PACKAGE(PT.PT8650.(19970103135840S101702Z287197APT8650))
FREE PACKAGE(SA.YSAUEB.(19970109134538S101702A060538AYSAUEB))
FREE PACKAGE(SA.YSAOBP.(19970109133259S101702A060528AYSAOBP))
FREE PACKAGE(SX.YSX8104.(19970109133303S101702A060530AYSX8104))
FREE PACKAGE(SX.YSX8105.(19970109133314S101702A060530AYSX8105))
FREE PACKAGE(YY.YYWBMOE.(19970109154730S101702A060516AYYWBMOE))
FREE PACKAGE(YY.YYDEPAY.(19970110183204S101702Z289912AYYDEPAY))
FREE PACKAGE(NK.NK0200V.(19970113142804S101702Z290221ANK0200V))
FREE PACKAGE(YY.YYDEPAY.(19970114095350S101702Z290455AYYDEPAY))
FREE PACKAGE(YY.YYDEPAY.(19970115095002S101702Z290790AYYDEPAY))
FREE PACKAGE(SX.YSX5405.(19970116105139S101702Z291042AYSX5405))
FREE PACKAGE(WK.YWK019A.(19970116155229S101702M000715AYWK019A))
FREE PACKAGE(BF.BF5210.(19970116152548S101702A059717ABF5210))
FREE PACKAGE(BW.YBWAEW1.(19970116181901S101702A060940AYBWAEW1))
FREE PACKAGE(KD.KD8010.(19970116174423S101702A060854AKD8010))
FREE PACKAGE(YY.YYFIKU1.(19970116181927S101702A060919AYYFIKU1))
FREE PACKAGE(NK.NK7910.(19970116182042S101702A060940ANK7910))
FREE PACKAGE(WK.YWK019A.(19970116200309S101702M000715AYWK019A))
FREE PACKAGE(YY.YYDEPAY.(19970117093023S101702Z291200AYYDEPAY))
FREE PACKAGE(YY.YYWBMOE.(19970124071700S101702A061015AYYWBMOE))
FREE PACKAGE(RT.RE7580.(19970124071623S101702A060807ARE7580))
FREE PACKAGE(NK.NK8240.(19970125095418S101702Z292839ANK8240))
FREE PACKAGE(YY.YYFIKU1.(19970121101133S101702Z291909AYYFIKU1))
FREE PACKAGE(RP.RP9010.(19970122181857S101702A061163ARP9010))
FREE PACKAGE(RT.RE7580.(19970123170243S101702A060807ARE7580))
FREE PACKAGE(KS.YKS5551.(19970123170322S101702A060998AYKS5551))
FREE PACKAGE(KS.YKS5553.(19970123170324S101702A060998AYKS5553))
FREE PACKAGE(NK.NK5030.(19970123175105S101702A061091ANK5030))
FREE PACKAGE(YY.YYWBMOE.(19970123173704S101702A061015AYYWBMOE))
FREE PACKAGE(YY.YYFIKU1.(19970123142101S101702A061123AYYFIKU1))
FREE PACKAGE(YY.YYDEPAY.(19970123135201S101702A061056AYYDEPAY))
FREE PACKAGE(VT.YVT0805.(19970123142208S101702A061139AYVT0805))
FREE PACKAGE(VT.YVT0801.(19970123142207S101702A061139AYVT0801))
FREE PACKAGE(NK.NK8250.(19970130130932S101702A061205ANK8250))
FREE PACKAGE(EV.YEVSICH.(19970130162645S101702A061187AYEVSICH))
FREE PACKAGE(NS.NS7340.(19970130162854S101702A061187ANS7340))
FREE PACKAGE(YY.YYFIKU1.(19970131135524S101702Z294063AYYFIKU1))
FREE PACKAGE(YY.YYFIKU1.(19970131140710S101702Z294063AYYFIKU1))
FREE PACKAGE(PT.YPTBER.(19970131150649S101702A061364AYPTBER))
FREE PACKAGE(PT.YPTBAK.(19970131150650S101702A061364AYPTBAK))
FREE PACKAGE(PT.PT8650.(19970131150927S101702A061364APT8650))
FREE PACKAGE(YY.YYFIKU1.(19970131133354S101702Z294063AYYFIKU1))
FREE PACKAGE(KS.YKS5551.(19970127175027S101702Z293101AYKS5551))
FREE PACKAGE(NK.NK8250.(19970128224355S101702Z293392ANK8250))
FREE PACKAGE(PHPSPTA.H1112X.())
FREE PACKAGE(PHPS53.H1112X.())
FREE PACKAGE(YY.YYFIKU1.(19970129140738S101702Z293531AYYFIKU1))
FREE PACKAGE(KS.YKS0802.(19970205171935S101702A061407AYKS0802))
FREE PACKAGE(SX.YSX8105.(19970206135318S101702A061338AYSX8105))
FREE PACKAGE(SX.YSX5405.(19970206135317S101702A061338AYSX5405))
FREE PACKAGE(KD.KD8014.(19970206141304S101702A061437AKD8014))
FREE PACKAGE(KD.KD8015.(19970206141306S101702A061437AKD8015))
FREE PACKAGE(SA.YSAT806.(19970206143321S101702A061469AYSAT806))
FREE PACKAGE(SA.YSAT807.(19970206143322S101702A061469AYSAT807))
FREE PACKAGE(SA.YSAT801.(19970206143328S101702A061469AYSAT801))
FREE PACKAGE(SA.YSAT802.(19970206143331S101702A061469AYSAT802))
FREE PACKAGE(SA.YSAT805.(19970206143334S101702A061469AYSAT805))
FREE PACKAGE(SA.YSAT803.(19970206143332S101702A061469AYSAT803))
FREE PACKAGE(KS.YKS0802.(19970206151324S101702A061407AYKS0802))
FREE PACKAGE(KD.KD8010.(19970206155033S101702A061213AKD8010))
FREE PACKAGE(KD.KD8011.(19970206155034S101702A061213AKD8011))
FREE PACKAGE(FC.FC0020.(19970206162503S101702A061517AFC0020))
FREE PACKAGE(KD.FC0020.(19970206162503S101702A061517AFC0020))
FREE PACKAGE(RK.RK2400.(19970206160942S101702A061306ARK2400))
FREE PACKAGE(RK.RK2320.(19970206160943S101702A061306ARK2320))
FREE PACKAGE(RK.RK2380.(19970206160944S101702A061306ARK2380))
FREE PACKAGE(RK.RK2390.(19970206160944S101702A061306ARK2390))
FREE PACKAGE(PHPSPTA.H0074R.())
FREE PACKAGE(PHPS53.H0074R.())
FREE PACKAGE(PHPSPTA.H0076R.())
FREE PACKAGE(PHPS53.H0076R.())
FREE PACKAGE(PHPSPTA.H0075R.())
FREE PACKAGE(PHPS53.H0075R.())
FREE PACKAGE(PHPSPTA.H0079R.())
FREE PACKAGE(PHPS53.H0079R.())
FREE PACKAGE(PHPSPTA.H0077R.())
FREE PACKAGE(PHPS53.H0077R.())
FREE PACKAGE(PHPSPTA.H0078R.())
FREE PACKAGE(PHPS53.H0078R.())
FREE PACKAGE(PHPSPTA.H0081R.())
FREE PACKAGE(PHPS53.H0081R.())
FREE PACKAGE(PHPSPTA.H0080R.())
FREE PACKAGE(PHPS53.H0080R.())
FREE PACKAGE(PHPSPTA.H0082R.())
FREE PACKAGE(PHPS53.H0082R.())
FREE PACKAGE(PHPSPTA.H0083R.())
FREE PACKAGE(PHPS53.H0083R.())
FREE PACKAGE(PHPSPTA.H0084R.())
FREE PACKAGE(PHPS53.H0084R.())
FREE PACKAGE(PHPSPTA.H0085R.())
FREE PACKAGE(PHPS53.H0085R.())
FREE PACKAGE(KS.YKS0802.(19970207112844S101702A061561AYKS0802))
FREE PACKAGE(YY.YYFIKU1.(19970207135639S101702Z295237AYYFIKU1))
FREE PACKAGE(YY.YYFIKU1.(19970207162252S101702Z295237AYYFIKU1))
FREE PACKAGE(PT.YPTBAK.(19970202144825S101702Z294216AYPTBAK))
FREE PACKAGE(PT.YPTBER.(19970202144632S101702Z294215AYPTBER))
FREE PACKAGE(NTA1P.BC0003.())
FREE PACKAGE(NTA1P.BC0008.(CRMB000170))
FREE PACKAGE(NTA1P.BC0009.(CRMB000170))
FREE PACKAGE(YY.YYFIKU1.(19970203155055S101702Z294410AYYFIKU1))
FREE PACKAGE(YY.YYFIKU1.(19970203160358S101702Z294410AYYFIKU1))
FREE PACKAGE(YY.YYFIKU1.(19970204094815S101702Z294522AYYFIKU1))
FREE PACKAGE(NTA1P.BC0011.(CRMB000170))
FREE PACKAGE(NTA1P.BC0007.(CRMB000170))
FREE PACKAGE(YY.YYFIKU1.(19970204170805S101702Z294522AYYFIKU1))
FREE PACKAGE(KD.KD8030.(19970212131949S101702Z295927AKD8030))
FREE PACKAGE(KD.KD8512.(19970212075517S101702Z295814AKD8512))
FREE PACKAGE(KD.KD8512.(19970212101134S101702Z295814AKD8512))
FREE PACKAGE(YY.YYFIKU1.(19970213184955S101702A061650AYYFIKU1))
FREE PACKAGE(KS.YKSAUFT.(19970213141858S101702A061515AYKSAUFT))
FREE PACKAGE(VT.YVT0731.(19970213150302S101702A061735AYVT0731))
FREE PACKAGE(YY.YYFIKU1.(19970211103926S101702Z295534AYYFIKU1))
FREE PACKAGE(KD.KD8512.(19970211174525S101702Z295758AKD8512))
FREE PACKAGE(PT.YPTBAK.(19970211152131S101702Z295652AYPTBAK))
FREE PACKAGE(PHPSPTA.HMCECRC.())
FREE PACKAGE(PHPS53.HMCECRC.())
FREE PACKAGE(PHPSPTA.HMCECR2.())
FREE PACKAGE(PHPS53.HMCECR2.())
FREE PACKAGE(PHPSPTA.HMCECR4.())
FREE PACKAGE(PHPS53.HMCECR4.())
FREE PACKAGE(RK.RK2420.(19970220131051S101702A061871ARK2420))
FREE PACKAGE(RK.RK2410.(19970220131049S101702A061871ARK2410))
FREE PACKAGE(YY.YYFIKU1.(19970214141457S101702A061650AYYFIKU1))
FREE PACKAGE(RE.RE7580.(19970214105944S101702A061587ARE7580))
FREE PACKAGE(RE.RE7580.(19970214112718S101702A061587ARE7580))
FREE PACKAGE(RT.RE7580.(19970214112718S101702A061587ARE7580))
FREE PACKAGE(WK.YWKLUBO.(19970214111257S101702M000716AYWKLUBO))
FREE PACKAGE(BF.YBF530C.(19970214113528S101702M000716AYBF530C))
FREE PACKAGE(PHPSPTA.HMCRCR4.())
FREE PACKAGE(PHPS53.HMCRCR4.())
FREE PACKAGE(PHPSPTA.HMCRCR2.())
FREE PACKAGE(PHPS53.HMCRCR2.())
FREE PACKAGE(PHPSPTA.HMCRCR5.())
FREE PACKAGE(PHPS53.HMCRCR5.())
FREE PACKAGE(PHPSPTA.HMCRCRC.())
FREE PACKAGE(PHPS53.HMCRCRC.())
FREE PACKAGE(PUPG53.HMCCNVK.())
FREE PACKAGE(PHPSPTA.H1113X.())
FREE PACKAGE(PHPS53.H1113X.())
FREE PACKAGE(YY.YYWBMOE.(19970220151213S101702A061848AYYWBMOE))
FREE PACKAGE(PT.YPTBZAC.(19970301164109S101702Z298905AYPTBZAC))
FREE PACKAGE(PT.YPTBER.(19970301164107S101702Z298905AYPTBER))
FREE PACKAGE(PT.YPTBAK.(19970301164109S101702Z298905AYPTBAK))
FREE PACKAGE(OE.OE8730.(19970619135856S101702A064828AOE8730))
FREE PACKAGE(VP.YVP7403.(19970619140749S101702A064792AYVP7403))
FREE PACKAGE(RR.RR7110.(19970619140751S101702A064773ARR7110))
FREE PACKAGE(BP.YBPCRM.(19970619134703S101702A064764AYBPCRM))
FREE PACKAGE(CD.KD0600.(19970619134842S101702A064764AKD0600))
FREE PACKAGE(KD.KD0600.(19970619134842S101702A064764AKD0600))
FREE PACKAGE(KD.KD0620.(19970619134843S101702A064764AKD0620))
FREE PACKAGE(BF.YBF530C.(19970619135415S101702A064827AYBF530C))
FREE PACKAGE(BG.YBG0533.(19970619145541S101702A064697AYBG0533))
FREE PACKAGE(RR.RR7110.(19970620091818S101702Z317432ARR7110))
FREE PACKAGE(PHPSPTA.HMCRRE5.())
FREE PACKAGE(PHPS53.HMCRRE5.())
FREE PACKAGE(PT.YPTBZAC.(19970626132432S101702A064909AYPTBZAC))
FREE PACKAGE(PT.YPTBAK.(19970626132441S101702A064909AYPTBAK))
FREE PACKAGE(PT.PT8660.(19970626132652S101702A064909APT8660))
FREE PACKAGE(PT.PT8640.(19970626132656S101702A064909APT8640))
FREE PACKAGE(WK.YWKLUBO.(19970702102459S101702Z319251AYWKLUBO))
FREE PACKAGE(PT.YPTBAK.(19970702114347S101702Z319299AYPTBAK))
FREE PACKAGE(PT.YPTBER.(19970702114345S101702Z319299AYPTBER))
FREE PACKAGE(PT.YPTBZAC.(19970702114346S101702Z319299AYPTBZAC))
FREE PACKAGE(EV.YEVSICH.(19970703125234S101702A064768AYEVSICH))
FREE PACKAGE(SX.YSX5405.(19970703131040S101702M000806AYSX5405))
FREE PACKAGE(RR.RR7110.(19970703133159S101702A064977ARR7110))
FREE PACKAGE(PHPSPTA.H1071X.())
FREE PACKAGE(PHPS53.H1071X.())
FREE PACKAGE(SE.YSE0301.(19970710124842S101702A065149AYSE0301))
FREE PACKAGE(SE.YSE0319.(19970710124845S101702A065149AYSE0319))
FREE PACKAGE(SE.YSE0316.(19970710124842S101702A065149AYSE0316))
FREE PACKAGE(SE.YSE0311.(19970710124837S101702A065149AYSE0311))
FREE PACKAGE(SE.YSE0324.(19970710124850S101702A065149AYSE0324))
FREE PACKAGE(SE.YSE0322.(19970710124848S101702A065149AYSE0322))
FREE PACKAGE(SE.YSE0321.(19970710124847S101702A065149AYSE0321))
FREE PACKAGE(SE.YSE0312.(19970710124838S101702A065149AYSE0312))
FREE PACKAGE(SE.YSE0313.(19970710124839S101702A065149AYSE0313))
FREE PACKAGE(SE.YSE0317.(19970710124843S101702A065149AYSE0317))
FREE PACKAGE(SE.YSE0318.(19970710124844S101702A065149AYSE0318))
FREE PACKAGE(SE.YSE0315.(19970710124841S101702A065149AYSE0315))
FREE PACKAGE(SE.YSE0323.(19970710124849S101702A065149AYSE0323))
FREE PACKAGE(SE.YSE0320.(19970710124845S101702A065149AYSE0320))
FREE PACKAGE(SE.YSE0314.(19970710124840S101702A065149AYSE0314))
FREE PACKAGE(SE.YSE0310.(19970710124852S101702A065149AYSE0310))
FREE PACKAGE(YY.YYAKDAT.(19970710142418S101702M000721AYYAKDAT))
FREE PACKAGE(YY.YYFIKUR.(19970710142449S101702M000721AYYFIKUR))
FREE PACKAGE(WK.YWKLUBO.(19970710141830S101702M000721AYWKLUBO))
FREE PACKAGE(PT.YPTBZAC.(19970710143026S101702A065152AYPTBZAC))
FREE PACKAGE(PT.YPTBAK.(19970710143049S101702A065152AYPTBAK))
FREE PACKAGE(PT.YPTBER.(19970710143019S101702A065152AYPTBER))
FREE PACKAGE(NK.NK5310.(19970710143127S101702A065189ANK5310))
FREE PACKAGE(AV.AV8780.(19970710145440S101702M000721AAV8780))
FREE PACKAGE(WF.WF8010.(19970717145832S101702A065379AWF8010))
FREE PACKAGE(VP.YVP7402.(19970416164056S101702Z306635AYVP7402))
FREE PACKAGE(VP.YVP7403.(19970416164057S101702Z306635AYVP7403))
FREE PACKAGE(VP.YVP7401.(19970416164056S101702Z306635AYVP7401))
FREE PACKAGE(RR.RR7190.(19970417125627S101702A063110ARR7190))
FREE PACKAGE(RR.RR7120.(19970417125620S101702A063110ARR7120))
FREE PACKAGE(RR.RR7130.(19970417125624S101702A063110ARR7130))
FREE PACKAGE(RR.RR7150.(19970417125625S101702A063110ARR7150))
FREE PACKAGE(RR.RR7410.(19970417125638S101702A063110ARR7410))
FREE PACKAGE(ED.YED0120.(19970417134223S101702A063129AYED0120))
FREE PACKAGE(CI.YCI009A.(19970417134327S101702A063176AYCI009A))
FREE PACKAGE(CI.YCI009.(19970417134326S101702A063176AYCI009))
FREE PACKAGE(ED.YED0120.(19970417141749S101702A063129AYED0120))
FREE PACKAGE(CI.YCI009A.(19970417142225S101702A063176AYCI009A))
FREE PACKAGE(CI.YCI009.(19970417142223S101702A063176AYCI009))
FREE PACKAGE(LB.YLB0115.(19970417145740S101702M000718AYLB0115))
FREE PACKAGE(YX.YXBF222.(19970417150642S101702M000718AYXBF222))
FREE PACKAGE(CI.YCI009.(19970417145207S101702A063176AYCI009))
FREE PACKAGE(CI.YCI009A.(19970417145208S101702A063176AYCI009A))
FREE PACKAGE(BF.YBF530A.(19970417151313S101702M000718AYBF530A))
FREE PACKAGE(BF.YBF530C.(19970417152008S101702M000718AYBF530C))
FREE PACKAGE(BG.YBG0533.(19970417152106S101702M000718AYBG0533))
FREE PACKAGE(WK.YWKLUBO.(19970417150052S101702M000718AYWKLUBO))
FREE PACKAGE(BF.BF7155.(19970418123528S101702Z306908ABF7155))
FREE PACKAGE(VP.YVP7401.(19970416100659S101702Z306532AYVP7401))
FREE PACKAGE(FC.FC0030.(19970420133742S101702Z307085AFC0030))
FREE PACKAGE(RP.RP9010.(19970422184816S101702A063443ARP9010))
FREE PACKAGE(PT.YPTBER.(19970430162531S101702Z309430AYPTBER))
FREE PACKAGE(PT.YPTBZAC.(19970430162532S101702Z309430AYPTBZAC))
FREE PACKAGE(PT.YPTBAK.(19970430162533S101702Z309430AYPTBAK))
FREE PACKAGE(PT.PT8640.(19970501112819S101702Z309494APT8640))
FREE PACKAGE(PHPSPTA.GLXSEER.())
FREE PACKAGE(PHPS53.GLXSEER.())
FREE PACKAGE(KS.YKS5553.(19970507131535S101702A063114AYKS5553))
FREE PACKAGE(PT.PT8660.(19970501155240S101702Z309514APT8660))
FREE PACKAGE(KS.YKS0806.(19970520152633S101702A064036AYKS0806))
FREE PACKAGE(KS.YKS0802.(19970520152637S101702A064036AYKS0802))
FREE PACKAGE(KS.YKS0802.(19970515130326S101702A063870AYKS0802))
FREE PACKAGE(RR.RR7410.(19970515123231S101702A063836ARR7410))
FREE PACKAGE(KS.YKS0806.(19970515130321S101702A063870AYKS0806))
FREE PACKAGE(WF.WF8010.(19970515140836S101702A063893AWF8010))
FREE PACKAGE(YY.YYDAISM.(19970515152456S101702M000719AYYDAISM))
FREE PACKAGE(WK.YWKLUBO.(19970515152437S101702M000719AYWKLUBO))
FREE PACKAGE(WF.WF8010.(19970515162454S101702A063893AWF8010))
FREE PACKAGE(VP.YVP7403.(19970516154446S101702A064012AYVP7403))
FREE PACKAGE(VP.YVP7402.(19970516154445S101702A064012AYVP7402))
FREE PACKAGE(VP.YVP7401.(19970516154226S101702A064012AYVP7401))
FREE PACKAGE(SM.SMUPDAT2.())
FREE PACKAGE(YY.YYDAISM.(19970526154815S101702Z312955AYYDAISM))
FREE PACKAGE(PHPSPTA.GCSTKCL.())
FREE PACKAGE(PHPS53.GCSTKCL.())
FREE PACKAGE(OE.YOERFT7.(19970522160854S101702A064061AYOERFT7))
FREE PACKAGE(WK.YWK019A.(19970522081337S101702Z312321AYWK019A))
FREE PACKAGE(OE.YOERFT7.(19970523122650S101702A064061AYOERFT7))
FREE PACKAGE(OE.YOERFT7.(19970523134012S101702A064061AYOERFT7))
FREE PACKAGE(OE.YOERFT7.(19970523141454S101702A064126AYOERFT7))
FREE PACKAGE(OE.YOERFT7.(19970523145200S101702A064126AYOERFT7))
FREE PACKAGE(OE.YOERFT7.(19970523143128S101702A064126AYOERFT7))
FREE PACKAGE(OE.YOERFT7.(19970523154739S101702A064126AYOERFT7))
FREE PACKAGE(WK.YWK019A.(19970529142348S101702M000773AYWK019A))
FREE PACKAGE(WK.YWKLUBO.(19970529142336S101702M000773AYWKLUBO))
FREE PACKAGE(BF.YBF530C.(19970529145110S101702M000773AYBF530C))
FREE PACKAGE(PT.PT8640.(19970530134806S101702Z313782APT8640))
FREE PACKAGE(PT.PT8660.(19970530135311S101702Z313785APT8660))
FREE PACKAGE(PT.YPTBER.(19970530134435S101702Z313781AYPTBER))
FREE PACKAGE(PT.YPTBAK.(19970530134436S101702Z313781AYPTBAK))
FREE PACKAGE(PT.YPTBZAC.(19970530134435S101702Z313781AYPTBZAC))
FREE PACKAGE(VP.YVP7403.(19970606120106S101702Z315108AYVP7403))
FREE PACKAGE(SA.YSAL011.(19970606151531S101702A064474AYSAL011))
FREE PACKAGE(SA.YSAL010.(19970606151531S101702A064474AYSAL010))
FREE PACKAGE(PHPSPTA.GRSCL.())
FREE PACKAGE(PHPS53.GRSCL.())
FREE PACKAGE(PI.PI5330.(19970602171837S101702A064346API5330))
FREE PACKAGE(ED.YED0034.(19970605133549S101702A064376AYED0034))
FREE PACKAGE(ED.YED0120.(19970605133550S101702A064376AYED0120))
FREE PACKAGE(SA.YSAL010.(19970605140228S101702M000795AYSAL010))
FREE PACKAGE(SA.YSAL011.(19970605140229S101702M000795AYSAL011))
FREE PACKAGE(KS.YKS5553.(19970605140318S101702A063951AYKS5553))
FREE PACKAGE(OE.OE8730.(19970605144943S101702A064421AOE8730))
FREE PACKAGE(KD.KD0620.(19970605170251S101702A064138AKD0620))
FREE PACKAGE(PHPSPTA.HMCEREP.())
FREE PACKAGE(PHPS53.HMCEREP.())
FREE PACKAGE(PHPSPTA.HMCERE5.())
FREE PACKAGE(PHPS53.HMCERE5.())
FREE PACKAGE(PHPSPTA.HMCERE2.())
FREE PACKAGE(PHPS53.HMCERE2.())
FREE PACKAGE(PHPSPTA.HMCERE4.())
FREE PACKAGE(PHPS53.HMCERE4.())
FREE PACKAGE(PHPSPTA.HMCRREP.())
FREE PACKAGE(PHPS53.HMCRREP.())
FREE PACKAGE(PHPSPTA.HMCRRE2.())
FREE PACKAGE(PHPS53.HMCRRE2.())
FREE PACKAGE(PHPSPTA.HMCRRE4.())
FREE PACKAGE(PHPS53.HMCRRE4.())
FREE PACKAGE(BG.YBG0533.(19970613143606S101702Z316345AYBG0533))
FREE PACKAGE(VP.VP7411.(19970610075226S101702Z315459AVP7411))
FREE PACKAGE(VP.VP7411.(19970610162936S101702Z315459AVP7411))
FREE PACKAGE(VP.VP7411.(19970610101931S101702Z315459AVP7411))
FREE PACKAGE(VT.YVT0804.(19970611153558S101702A064611AYVT0804))
FREE PACKAGE(WK.YWKLUBO.(19970612164801S101702M000720AYWKLUBO))
FREE PACKAGE(SM.SMDEF002.())
FREE PACKAGE(SX.YSX8105.(19970612134213S101702A064573AYSX8105))
FREE PACKAGE(YY.YYFIBPR.(19970930091036S101702Z336218AYYFIBPR))
FREE PACKAGE(YY.YYFIKUR.(19970930130759S101702Z336339AYYFIKUR))
FREE PACKAGE(YY.YYFIBPR.(19970930131559S101702Z336218AYYFIBPR))
FREE PACKAGE(ED.YED0034.(19970925142356S101702A067006AYED0034))
FREE PACKAGE(LB.YLB0116.(19970925104749S101702Z335520AYLB0116))
FREE PACKAGE(CD.CD8070.(19970925133611S101702A066943ACD8070))
FREE PACKAGE(NK.YNKSIKO.(19970925134637S101702A067064AYNKSIKO))
FREE PACKAGE(PT.YPTBZAC.(19971006103230S101702Z337756AYPTBZAC))
FREE PACKAGE(PT.YPTBER.(19971006103226S101702Z337756AYPTBER))
FREE PACKAGE(PT.YPTBAK.(19971006103232S101702Z337756AYPTBAK))
FREE PACKAGE(RP.RP5100.(19971001203824S101702Z336777ARP5100))
FREE PACKAGE(KS.YKS5553.(19971002124933S101702A067136AYKS5553))
FREE PACKAGE(KS.YKS5551.(19971002124932S101702A067136AYKS5551))
FREE PACKAGE(SX.YSX5405.(19971002130333S101702A067187AYSX5405))
FREE PACKAGE(BF.BF5230.(19971002134524S101702A067141ABF5230))
FREE PACKAGE(BF.BF5210.(19971002134504S101702A067141ABF5210))
FREE PACKAGE(BF.BF5220.(19971002134518S101702A067141ABF5220))
FREE PACKAGE(YY.YYFIBPR.(19971003141148S101702Z337398AYYFIBPR))
FREE PACKAGE(NK.NK8830.(19971003162239S101702Z337521ANK8830))
FREE PACKAGE(RE.RE9930.(19971008084159S101702Z338162ARE9930))
FREE PACKAGE(SE.YSE0315.(19971008172603S101702A067384AYSE0315))
FREE PACKAGE(SE.YSE0314.(19971008172558S101702A067384AYSE0314))
FREE PACKAGE(SE.YSE0320.(19971008172534S101702A067384AYSE0320))
FREE PACKAGE(SE.YSE0324.(19971008172537S101702A067384AYSE0324))
FREE PACKAGE(SE.YSE0317.(19971008172531S101702A067384AYSE0317))
FREE PACKAGE(SE.YSE0311.(19971008172549S101702A067384AYSE0311))
FREE PACKAGE(SE.YSE0310.(19971008172544S101702A067384AYSE0310))
FREE PACKAGE(NF.NF8800.(19971009132420S101702A067383ANF8800))
FREE PACKAGE(NK.NK8830.(19971009142704S101702A067321ANK8830))
FREE PACKAGE(NK.NK7200.(19971010103011S101702Z338761ANK7200))
FREE PACKAGE(VT.YVT0805.(19971010164616S101702A067424AYVT0805))
FREE PACKAGE(VT.YVT0801.(19971010164615S101702A067424AYVT0801))
FREE PACKAGE(YY.YYFIBPR.(19971020081228S101702Z340073AYYFIBPR))
FREE PACKAGE(RT.RT8412.(19971016172138S101702A067105ART8412))
FREE PACKAGE(NK.NK7200.(19971016135112S101702M000847ANK7200))
FREE PACKAGE(OE.OE8730.(19971016135122S101702M000847AOE8730))
FREE PACKAGE(OE.OE8740.(19971016135123S101702M000847AOE8740))
FREE PACKAGE(NK.NK5010.(19971016135110S101702M000847ANK5010))
FREE PACKAGE(LB.YLB0116.(19971017154949S101702M000724AYLB0116))
FREE PACKAGE(YY.YYDAISM.(19971017155755S101702M000724AYYDAISM))
FREE PACKAGE(YY.YYFIKUR.(19971017155855S101702M000724AYYFIKUR))
FREE PACKAGE(WK.YWK019A.(19971017155338S101702M000724AYWK019A))
FREE PACKAGE(YY.YYFIBPR.(19971017155842S101702M000724AYYFIBPR))
FREE PACKAGE(YY.YYFISER.(19971017155900S101702M000724AYYFISER))
FREE PACKAGE(WK.YWKLUBO.(19971017155255S101702M000724AYWKLUBO))
FREE PACKAGE(WK.WK7160.(19971017165350S101702M000724AWK7160))
FREE PACKAGE(YY.YYCXCR.(19971023131100S101702A067654AYYCXCR))
FREE PACKAGE(YY.YYFIBPR.(19971023134013S101702A067763AYYFIBPR))
FREE PACKAGE(WB.WB7580.(19971023144206S101702A067639AWB7580))
FREE PACKAGE(PT.YPTBER.(19971023145207S101702A067699AYPTBER))
FREE PACKAGE(PT.YPTBZAC.(19971023145208S101702A067699AYPTBZAC))
FREE PACKAGE(PT.YPTBAK.(19971023145209S101702A067699AYPTBAK))
FREE PACKAGE(YY.YYFIKUR.(19971024070255S101702Z341447AYYFIKUR))
FREE PACKAGE(YY.YYFIKUR.(19971027121114S101702Z341787AYYFIKUR))
FREE PACKAGE(YY.YYFIBPR.(19971028161241S101702A067870AYYFIBPR))
FREE PACKAGE(YY.YYFIBPR.(19971029135718S101702Z342287AYYFIBPR))
FREE PACKAGE(YY.YYFIKUR.(19971029135652S101702Z342286AYYFIKUR))
FREE PACKAGE(YY.YYFIBPR.(19971029152110S101702A067922AYYFIBPR))
FREE PACKAGE(KS.YKS0806.(19970730130512S101702A065612AYKS0806))
FREE PACKAGE(KS.YKS0802.(19970730130516S101702A065612AYKS0802))
FREE PACKAGE(WK.YWKLUBO.(19970730125913S101702Z325019AYWKLUBO))
FREE PACKAGE(PHPSPTA.GRRBA04.())
FREE PACKAGE(PHPS53.GRRBA04.())
FREE PACKAGE(NK.YNKSIKO.(19970731133829S101702A065623AYNKSIKO))
FREE PACKAGE(PHPSPTA.GRSEED4.())
FREE PACKAGE(PHPS53.GRSEED4.())
FREE PACKAGE(WK.YWKLUBO.(19970806151636S101702Z325846AYWKLUBO))
FREE PACKAGE(VT.YVT0731.(19970807131116S101702A065672AYVT0731))
FREE PACKAGE(KS.KS0720.(19970807131518S101702A065672AKS0720))
FREE PACKAGE(NF.NF5890.(19970807134910S101702A065780ANF5890))
FREE PACKAGE(NK.YNKSIKO.(19970807132139S101702A065737AYNKSIKO))
FREE PACKAGE(PT.YPTBAK.(19970807142356S101702A065756AYPTBAK))
FREE PACKAGE(RR.YRRBLR2.(19970807161543S101702A065814AYRRBLR2))
FREE PACKAGE(RR.YRRBLR2.(19970807161543CGS101702A065814AYRRBLR2))
FREE PACKAGE(NS.NS7340.(19970815165414S101702A066076ANS7340))
FREE PACKAGE(YY.EV0520.(19970815165403S101702A066076AEV0520))
FREE PACKAGE(VT.YVT0731.(19970811170742S101702A065857AYVT0731))
FREE PACKAGE(YY.YYFIBPR.(19970814140833S101702M000800AYYFIBPR))
FREE PACKAGE(NK.YNKSIKO.(19970814133711S101702A066053AYNKSIKO))
FREE PACKAGE(RR.RR8410.(19970814203017S101702A065878ARR8410))
FREE PACKAGE(RR.RR8100.(19970814203006S101702A065878ARR8100))
FREE PACKAGE(RR.RR8220.(19970814203010S101702A065878ARR8220))
FREE PACKAGE(ED.YED0034.(19970814202936S101702A065906AYED0034))
FREE PACKAGE(NK.NK5190.(19970814211257S101702A065977ANK5190))
FREE PACKAGE(NK.NK8160.(19970814211337S101702A065977ANK8160))
FREE PACKAGE(NK.NK5110.(19970814211251S101702A065977ANK5110))
FREE PACKAGE(KD.KD8010.(19970814211634S101702A065956AKD8010))
FREE PACKAGE(NK.NK7910.(19970814211302S101702A065977ANK7910))
FREE PACKAGE(ME.ME0300.(19970814211635S101702A065803AME0300))
FREE PACKAGE(KD.KD8030.(19970814211641S101702A065956AKD8030))
FREE PACKAGE(KD.KD8014.(19970814211637S101702A065956AKD8014))
FREE PACKAGE(KD.KD8015.(19970814211640S101702A065956AKD8015))
FREE PACKAGE(NK.NK8090.(19970814211329S101702A065977ANK8090))
FREE PACKAGE(NK.NK8020.(19970814211307S101702A065977ANK8020))
FREE PACKAGE(YX.YXBF222.(19970814212651S101702A065276AYXBF222))
FREE PACKAGE(NK.NK8010.(19970814211305S101702A065977ANK8010))
FREE PACKAGE(EX.YEXERG.(19970814141321S101702M000800AYEXERG))
FREE PACKAGE(EX.YEXERG.(19970814141321CGS101702M000800AYEXERG))
FREE PACKAGE(SX.YSX5405.(19970814142703S101702M000819AYSX5405))
FREE PACKAGE(VT.YVT0806.(19970814154727S101702M000820AYVT0806))
FREE PACKAGE(VT.YVT0803.(19970814154726S101702M000820AYVT0803))
FREE PACKAGE(VT.YVT0804.(19970814154726S101702M000820AYVT0804))
FREE PACKAGE(VT.YVT0805.(19970814154727S101702M000820AYVT0805))
FREE PACKAGE(VT.YVT0802.(19970814154725S101702M000820AYVT0802))
FREE PACKAGE(KS.YKS5552.(19970814154715S101702M000820AYKS5552))
FREE PACKAGE(KS.YKS5551.(19970814154706S101702M000820AYKS5551))
FREE PACKAGE(VT.YVT0801.(19970814154725S101702M000820AYVT0801))
FREE PACKAGE(KS.YKS5553.(19970814154722S101702M000820AYKS5553))
FREE PACKAGE(SX.YSX5405.(19970814160458S101702M000819AYSX5405))
FREE PACKAGE(YY.YYFIKUR.(19970814173534S101702M000722AYYFIKUR))
FREE PACKAGE(WK.YWKLUBO.(19970814173305S101702M000722AYWKLUBO))
FREE PACKAGE(YY.YYCXCR.(19970814175447S101702M000722AYYCXCR))
FREE PACKAGE(NK.NK8190.(19970822134421S101702Z329315ANK8190))
FREE PACKAGE(YY.YYCXCR.(19970822161513S101702A066301AYYCXCR))
FREE PACKAGE(NK.NK8190.(19970822173219S101702Z329367ANK8190))
FREE PACKAGE(YY.YYFIBPR.(19970818091027S101702Z327662AYYFIBPR))
FREE PACKAGE(SA.YSAOBP.(19970819151336S101702Z328496AYSAOBP))
FREE PACKAGE(SA.YSAOBP.(19970819152851S101702Z328527AYSAOBP))
FREE PACKAGE(SA.YSAOBP.(19970819163654S101702Z328550AYSAOBP))
FREE PACKAGE(NTA1P.BC0010.(CRMB000254))
FREE PACKAGE(PI.PI5330.(19970821145248S101702A066132API5330))
FREE PACKAGE(PT.YPTBAK.(19970821145703S101702A066147AYPTBAK))
FREE PACKAGE(SA.YSAOBP.(19970821140528S101702A066252AYSAOBP))
FREE PACKAGE(YY.YYFIKUR.(19970828135427S101702Z330384AYYFIKUR))
FREE PACKAGE(OE.YOERFT7.(19970828141213S101702A066323AYOERFT7))
FREE PACKAGE(OE.OE8740.(19970828141800S101702A066323AOE8740))
FREE PACKAGE(YY.YYFIKUR.(19970828163505S101702Z330384AYYFIKUR))
FREE PACKAGE(YY.YYFIBPR.(19970825143650S101702Z329469AYYFIBPR))
FREE PACKAGE(YY.YYFIBPR.(19970825094010S101702Z329469AYYFIBPR))
FREE PACKAGE(YY.YYFIKUR.(19970827145220S101702Z330075AYYFIKUR))
FREE PACKAGE(YY.YYFIKUR.(19970903152517S101702Z331381AYYFIKUR))
FREE PACKAGE(NK.YNKSIKO.(19970904132615S101702A066558AYNKSIKO))
FREE PACKAGE(YY.YYFISER.(19970904132828S101702A066559AYYFISER))
FREE PACKAGE(YY.YYFIBPR.(19970904132827S101702A066559AYYFIBPR))
FREE PACKAGE(NK.YNKSIKO.(19970904151013S101702A066558AYNKSIKO))
FREE PACKAGE(YY.YYFIKUR.(19970904113540S101702Z331512AYYFIKUR))
FREE PACKAGE(YY.YYFIBPR.(19970910144408S101702Z332672AYYFIBPR))
FREE PACKAGE(EB.EB9000.(19970911123324S101702A066672AEB9000))
FREE PACKAGE(NK.YNKSIKO.(19970911124743S101702A066744AYNKSIKO))
FREE PACKAGE(NK.NK8300.(19970911124909S101702A066744ANK8300))
FREE PACKAGE(BF.BF5210.(19970911132316S101702A066068ABF5210))
FREE PACKAGE(BF.BF5220.(19970911132317S101702A066068ABF5220))
FREE PACKAGE(WK.YWKLUBO.(19970911135336S101702M000723AYWKLUBO))
FREE PACKAGE(YY.YYFIBPR.(19970911135748S101702M000723AYYFIBPR))
FREE PACKAGE(YY.YYFIBPR.(19970911135707S101702Z332865AYYFIBPR))
FREE PACKAGE(YY.YYFIKUR.(19970911135753S101702M000723AYYFIKUR))
FREE PACKAGE(PT.PT5440.(19970911145557S101702M000825APT5440))
FREE PACKAGE(PT.PT5510.(19970911145559S101702M000825APT5510))
FREE PACKAGE(PI.PI5330.(19970911145900S101702M000825API5330))
FREE PACKAGE(YY.YYFIKUR.(19970911143522S101702Z332879AYYFIKUR))
FREE PACKAGE(YY.YYDEPAY.(19970911143853S101702A066758AYYDEPAY))
FREE PACKAGE(YY.YYFIKUR.(19970911152454S101702Z332879AYYFIKUR))
FREE PACKAGE(YY.YYFIKUR.(19970908141644S101702Z332003AYYFIKUR))
FREE PACKAGE(YY.YYFIKUR.(19970908142100S101702Z332003AYYFIKUR))
FREE PACKAGE(PHPSPTA.HMPFCMP.())
FREE PACKAGE(PHPS53.HMPFCMP.())
FREE PACKAGE(YY.YYFIBPR.(19970908094638S101702Z331899AYYFIBPR))
FREE PACKAGE(PHPSPTA.HMCALDB.())
FREE PACKAGE(PHPS53.HMCALDB.())
FREE PACKAGE(YY.YYFIBPR.(19970909124923S101702Z332260AYYFIBPR))
FREE PACKAGE(YY.YYFIBPR.(19970916150918S101702Z333785AYYFIBPR))
FREE PACKAGE(YY.YYFIBPR.(19970916155634S101702Z333785AYYFIBPR))
FREE PACKAGE(NK.NK5160.(19970918124543S101702A066889ANK5160))
FREE PACKAGE(NK.NK5140.(19970918124542S101702A066889ANK5140))
FREE PACKAGE(PT.YPTBZAC.(19970918132511S101702A066834AYPTBZAC))
FREE PACKAGE(PT.YPTBER.(19970918132507S101702A066834AYPTBER))
FREE PACKAGE(PT.YPTBAK.(19970918132513S101702A066834AYPTBAK))
FREE PACKAGE(VT.YVT0731.(19970912181134S101702A066795AYVT0731))
FREE PACKAGE(WK.YWK019A.(19970915071921S101702Z333341AYWK019A))
FREE PACKAGE(KS.YKS0806.(19970922185347S101702A066941AYKS0806))
FREE PACKAGE(KS.YKS0802.(19970922185351S101702A066941AYKS0802))
FREE PACKAGE(YY.YYFIBPR.(19970918150017S101702Z334213AYYFIBPR))
FREE PACKAGE(PT.YPTBAK.(19980109095256S101702Z354315AYPTBAK))
FREE PACKAGE(PT.YPTBER.(19980109095255S101702Z354315AYPTBER))
FREE PACKAGE(RR.RR8410.(19980109174945S101702Z354478ARR8410))
FREE PACKAGE(RP.RP5100.(19980105165723S101702A069490ARP5100))
FREE PACKAGE(RP.RP7960.(19980105165721S101702A069490ARP7960))
FREE PACKAGE(YY.YYFIBPR.(19980107151625S101702Z353891AYYFIBPR))
FREE PACKAGE(EX.YEXERG.(19980108153340S101702M000886AYEXERG))
FREE PACKAGE(EX.YEXERG.(19980108153340CGS101702M000886AYEXERG))
FREE PACKAGE(EX.EX7010.(19980108153804S101702M000886AEX7010))
FREE PACKAGE(KB.KB2020.(19980108153831S101702M000886AKB2020))
FREE PACKAGE(RR.RR0240.(19980108153902S101702M000886ARR0240))
FREE PACKAGE(RR.RR7260.(19980108153913S101702M000886ARR7260))
FREE PACKAGE(RR.RR0180.(19980108153856S101702M000886ARR0180))
FREE PACKAGE(RR.RR7240.(19980108153908S101702M000886ARR7240))
FREE PACKAGE(EC.YECAVKY.(19980115174842S101702M000856AYECAVKY))
FREE PACKAGE(ED.YED0120.(19980115174927S101702M000856AYED0120))
FREE PACKAGE(ED.YED0034.(19980115174915S101702M000856AYED0034))
FREE PACKAGE(SX.SX0750.(19980115181956S101702M000856ASX0750))
FREE PACKAGE(NZ.NZ0600.(19980115181659S101702M000856ANZ0600))
FREE PACKAGE(SA.YSA67S1.(19980115134658S101702M000890AYSA67S1))
FREE PACKAGE(SA.YSAL001.(19980115134655S101702M000890AYSAL001))
FREE PACKAGE(SA.YSAL002.(19980115134657S101702M000890AYSAL002))
FREE PACKAGE(SA.YSAL006.(19980115134658S101702M000890AYSAL006))
FREE PACKAGE(NK.NK5200.(19980115162118S101702A069682ANK5200))
FREE PACKAGE(NK.NK8140.(19980115162120S101702A069682ANK8140))
FREE PACKAGE(NK.NK5160.(19980115162116S101702A069682ANK5160))
FREE PACKAGE(NK.NK5190.(19980115162118S101702A069682ANK5190))
FREE PACKAGE(NK.NK8120.(19980115162120S101702A069682ANK8120))
FREE PACKAGE(NK.NK5040.(19980115162123S101702A069682ANK5040))
FREE PACKAGE(NK.NK5110.(19980115162114S101702A069682ANK5110))
FREE PACKAGE(NK.NK5050.(19980115162124S101702A069682ANK5050))
FREE PACKAGE(NK.NK5180.(19980115162117S101702A069682ANK5180))
FREE PACKAGE(NK.NK5120.(19980115162114S101702A069682ANK5120))
FREE PACKAGE(NK.NK5140.(19980115162115S101702A069682ANK5140))
FREE PACKAGE(NK.NK8200.(19980115162121S101702A069682ANK8200))
FREE PACKAGE(NK.NK5210.(19980115162119S101702A069682ANK5210))
FREE PACKAGE(NK.NK5130.(19980115162115S101702A069682ANK5130))
FREE PACKAGE(NK.NK5020.(19980115162122S101702A069682ANK5020))
FREE PACKAGE(NK.NK5170.(19980115162116S101702A069682ANK5170))
FREE PACKAGE(YY.YYDEPAY.(19980115174544S101702M000856AYYDEPAY))
FREE PACKAGE(YY.YYEAISM.(19980116135025S101702M000835AYYEAISM))
FREE PACKAGE(YY.YYFIBPR.(19980116135026S101702M000835AYYFIBPR))
FREE PACKAGE(YY.YYDAISM.(19980116135024S101702M000835AYYDAISM))
FREE PACKAGE(YY.YYFIKUR.(19980116135027S101702M000835AYYFIKUR))
FREE PACKAGE(BF.YBF530A.(19980116091802S101702A069606AYBF530A))
FREE PACKAGE(WB.YYWBBPU.(19980116193842S101702A069660AYYWBBPU))
FREE PACKAGE(YY.YYWBBPU.(19980116193842S101702A069660AYYWBBPU))
FREE PACKAGE(KD.KD8040.(19980122133753S101702A069908AKD8040))
FREE PACKAGE(PT.PT8500.(19980122145053S101702A069863APT8500))
FREE PACKAGE(WB.WB7580.(19980122145713S101702A069894AWB7580))
FREE PACKAGE(YY.YYFIBPR.(19980122142859S101702M000889AYYFIBPR))
FREE PACKAGE(AV.YAV0491.(19980122142900S101702M000889AYAV0491))
FREE PACKAGE(AV.YAV0492.(19980122142900S101702M000889AYAV0492))
FREE PACKAGE(PT.YPTBAK.(19980122150833S101702A069955AYPTBAK))
FREE PACKAGE(PT.YPTBER.(19980122150832S101702A069955AYPTBER))
FREE PACKAGE(AV.YAV0492.(19980120134946S101702Z356212AYAV0492))
FREE PACKAGE(NTA1P.BC0007.(CRMB000360))
FREE PACKAGE(NTA1P.BC0009.(CRMB000360))
FREE PACKAGE(NTA1P.BC0003.(CRMB000360))
FREE PACKAGE(NTA1P.BC0011.(CRMB000360))
FREE PACKAGE(NTA1P.BC0010.(CRMB000360))
FREE PACKAGE(KD.KD8040.(19980129132654S101702A070094AKD8040))
FREE PACKAGE(RP.RP7960.(19980126165347S101702A070032ARP7960))
FREE PACKAGE(NK.YNKSIKO.(19980205141607S101702A070186AYNKSIKO))
FREE PACKAGE(CD.YCD110.(19980205134459S101702A070170AYCD110))
FREE PACKAGE(NK.NK8210.(19980205141816S101702A070186ANK8210))
FREE PACKAGE(YY.YYCXCR.(19980205143017S101702A070192AYYCXCR))
FREE PACKAGE(NK.NK7300.(19971106141951S101702A068097ANK7300))
FREE PACKAGE(KS.YKS0806.(19971106141958S101702A068104AYKS0806))
FREE PACKAGE(SX.YSX81S1.(19971106134925S101702M000849AYSX81S1))
FREE PACKAGE(PT.PT5440.(19971106145743S101702A067886APT5440))
FREE PACKAGE(OE.YOERFT7.(19971106151230S101702A068068AYOERFT7))
FREE PACKAGE(EC.YECAVKY.(19971106162740S101702A067704AYECAVKY))
FREE PACKAGE(ED.YED0034.(19971108101340S101702Z343980AYED0034))
FREE PACKAGE(ED.YED0034.(19971108103304S101702Z343980AYED0034))
FREE PACKAGE(RT.RT8412.(19971105123924S101702A068100ART8412))
FREE PACKAGE(PHPSPTA.GEXP004.())
FREE PACKAGE(PHPS53.GEXP004.())
FREE PACKAGE(AV.PB7100.(19971113142535S101702A068238APB7100))
FREE PACKAGE(RR.RR7260.(19971113140418S101702A067628ARR7260))
FREE PACKAGE(YY.YYFIBPR.(19971113142213S101702A068238AYYFIBPR))
FREE PACKAGE(ED.YED0034.(19971113150814S101702A068155AYED0034))
FREE PACKAGE(YY.YYFIKUR.(19971113101937CGS101702Z344648AYYFIKUR))
FREE PACKAGE(YY.YYFIKUR.(19971113101937S101702Z344648AYYFIKUR))
FREE PACKAGE(YY.YYFIKUR.(19971111063522S101702Z344162AYYFIKUR))
FREE PACKAGE(YY.YYFIKUR.(19971119073725S101702Z345453AYYFIKUR))
FREE PACKAGE(WK.YWKLUBO.(19971120155133S101702M000725AYWKLUBO))
FREE PACKAGE(WK.WK7160.(19971120182636S101702M000725AWK7160))
FREE PACKAGE(KD.FC5000.(19971120133503S101702A068334AFC5000))
FREE PACKAGE(SX.YSX8105.(19971120134349S101702A068352AYSX8105))
FREE PACKAGE(NK.NK8080.(19971120134500S101702A068428ANK8080))
FREE PACKAGE(SA.YSA67S1.(19971120134646S101702A068355AYSA67S1))
FREE PACKAGE(WK.YWK019A.(19971120155139S101702M000725AYWK019A))
FREE PACKAGE(YY.YYFIBPR.(19971120155550S101702M000725AYYFIBPR))
FREE PACKAGE(YY.YYFIKUR.(19971120155600S101702M000725AYYFIKUR))
FREE PACKAGE(YY.YYFIKUR.(19971120155600CGS101702M000725AYYFIKUR))
FREE PACKAGE(KD.FC5000.(19971117083808S101702Z344985AFC5000))
FREE PACKAGE(FC.FC0030.(19971117163042S101702Z345149AFC0030))
FREE PACKAGE(FC.FC0030.(19971117174349S101702Z345149AFC0030))
FREE PACKAGE(YY.YYFIKUR.(19971125132146S101702Z346704AYYFIKUR))
FREE PACKAGE(YY.YYFIKUR.(19971125132146CGS101702Z346704AYYFIKUR))
FREE PACKAGE(YY.YYFIKUR.(19971125071800S101702Z346565AYYFIKUR))
FREE PACKAGE(SX.YSX8105.(19971126102958S101702A068604AYSX8105))
FREE PACKAGE(YY.YYFIKUR.(19971127133906CGS101702A068607AYYFIKUR))
FREE PACKAGE(YY.YYFIBPR.(19971127133905S101702A068607AYYFIBPR))
FREE PACKAGE(YY.YYFIKUR.(19971127133906S101702A068607AYYFIKUR))
FREE PACKAGE(KD.FC5000.(19971121183017S101702Z346058AFC5000))
FREE PACKAGE(YY.YYFIKUR.(19971124075840S101702Z346214AYYFIKUR))
FREE PACKAGE(PI.PI9180.(19971124092916S101702Z346248API9180))
FREE PACKAGE(PI.PI9180.(19971124114227S101702Z346248API9180))
FREE PACKAGE(PI.PI9180.(19971124122047S101702Z346248API9180))
FREE PACKAGE(PT.YPTBZAC.(19971127143519S101702A068552AYPTBZAC))
FREE PACKAGE(PT.YPTBER.(19971127143518S101702A068552AYPTBER))
FREE PACKAGE(PT.YPTBAK.(19971127143521S101702A068552AYPTBAK))
FREE PACKAGE(NTA1P.AT0070.(CIMA000651))
FREE PACKAGE(PT.PT5510.(19971128130923S101702Z347739APT5510))
FREE PACKAGE(SX.YSX8105.(19971128132836S101702A068681AYSX8105))
FREE PACKAGE(SA.YSAUEB.(19971209124732S101702A068954AYSAUEB))
FREE PACKAGE(NK.NK8080.(19971204140627S101702A068796ANK8080))
FREE PACKAGE(YY.YYFIKUR.(19971204165432CGS101702A068818AYYFIKUR))
FREE PACKAGE(TEST.YYFIKUR.(19971204165432S101702A068818AYYFIKUR))
FREE PACKAGE(YY.YYFIKUR.(19971204165432S101702A068818AYYFIKUR))
FREE PACKAGE(PT.PT8060.(19971204163212S101702M000828APT8060))
FREE PACKAGE(VT.YVT0805.(19971204140208S101702A068758AYVT0805))
FREE PACKAGE(VT.YVT0804.(19971204140207S101702A068758AYVT0804))
FREE PACKAGE(VT.YVT0801.(19971204140206S101702A068758AYVT0801))
FREE PACKAGE(SX.SX0750.(19971204133317S101702M000869ASX0750))
FREE PACKAGE(KS.YKSMODU.(19971216133928S101702A069161AYKSMODU))
FREE PACKAGE(EV.YEVSICH.(19971211133042S101702A068862AYEVSICH))
FREE PACKAGE(YY.EV0520.(19971211133228S101702A068862AEV0520))
FREE PACKAGE(VT.YVT0623.(19971211133922S101702M000884AYVT0623))
FREE PACKAGE(YY.YYDEPAY.(19971211134115S101702A068934AYYDEPAY))
FREE PACKAGE(NK.NK7300.(19971211135159S101702A068963ANK7300))
FREE PACKAGE(KS.YKSMODU.(19971211135319S101702A068968AYKSMODU))
FREE PACKAGE(KS.YKSAUFT.(19971211135316S101702A068968AYKSAUFT))
FREE PACKAGE(YX.YXBF224.(19971211145230S101702A068424AYXBF224))
FREE PACKAGE(WK.YWKLUBO.(19971211152904S101702M000726AYWKLUBO))
FREE PACKAGE(LB.YLB0115.(19971211152840S101702M000726AYLB0115))
FREE PACKAGE(LB.YLB0113.(19971211152839S101702M000726AYLB0113))
FREE PACKAGE(LB.YLB0116.(19971211152840S101702M000726AYLB0116))
FREE PACKAGE(YY.YYDAISM.(19971211153706S101702M000726AYYDAISM))
FREE PACKAGE(YY.YYFIKUR.(19971211153730S101702M000726AYYFIKUR))
FREE PACKAGE(YY.YYFIKUR.(19971211153730CGS101702M000726AYYFIKUR))
FREE PACKAGE(KS.YKSMODU.(19971212102013S101702Z350189AYKSMODU))
FREE PACKAGE(VT.VT5120.(19971216174425S101702A069201AVT5120))
FREE PACKAGE(ED.YED0034.(19971218134249S101702A069204AYED0034))
FREE PACKAGE(NZ.NZ0600.(19971218134244S101702A069183ANZ0600))
FREE PACKAGE(ED.YED0120.(19971218134250S101702A069204AYED0120))
FREE PACKAGE(RR.RR7530.(19971218150113S101702A069057ARR7530))
FREE PACKAGE(PT.PT5510.(19971218150836S101702A069263APT5510))
FREE PACKAGE(SA.YSAL010.(19971229123211S101702A069401AYSAL010))
FREE PACKAGE(SA.YSAL011.(19971229123211S101702A069401AYSAL011))
FREE PACKAGE(YY.YYDEPAY.())
FREE PACKAGE(YY.YYGE040.())
FREE PACKAGE(VT.YVT0731.())
FREE PACKAGE(RT.RT5410.())
FREE PACKAGE(RT.RT5400.())
FREE PACKAGE(RT.RT5401.())
FREE PACKAGE(BF.BF5200.())
FREE PACKAGE(CD.YCDGETP.())
FREE PACKAGE(EB.EB5150.())
FREE PACKAGE(BS.BS7630.())
FREE PACKAGE(AC.YACM002.())
FREE PACKAGE(BP.YBPPID.())
FREE PACKAGE(PC.YPC0002.())
FREE PACKAGE(DG.YDGT011.())
FREE PACKAGE(BP.BP5110.())
FREE PACKAGE(KS.YKSMODU.())
FREE PACKAGE(VT.YVT0621.())
FREE PACKAGE(BW.YBWAAGF.(19940216154925S101702A031665A))
FREE PACKAGE(BW.YBWAXLQ.(19940216154937S101702A031665A))
FREE PACKAGE(BW.YBWAPVZ.(19940216154932S101702A031665A))
FREE PACKAGE(BW.YBWAPVY.(19940216154930S101702A031665A))
FREE PACKAGE(BW.YBWAH56.(19940216154927S101702A031665A))
FREE PACKAGE(VT.YVT0809.(19940217154709S101702A031635A))
FREE PACKAGE(VT.YVT0806.(19940217154655S101702A031635A))
FREE PACKAGE(VT.YVT0805.(19940217154651S101702A031635A))
FREE PACKAGE(VT.YVT0802.(19940217154748S101702A031635A))
FREE PACKAGE(VT.YVT0801.(19940217154745S101702A031635A))
FREE PACKAGE(VT.YVT0804.(19940217154640S101702A031635A))
FREE PACKAGE(VT.YVT0803.(19940217154750S101702A031635A))
FREE PACKAGE(SX.YSXFEHL.(19940311013633S101702M000389A))
FREE PACKAGE(SX.YSXRELK.(19940311013634S101702M000389A))
FREE PACKAGE(KS.YKSMODU.(19940310195039S101702A032347A))
FREE PACKAGE(CD.YCDGETJ.(19940317160328S101702A032553AYCDGETJ))
FREE PACKAGE(KS.YKSMODU.(19940317154541S101702A032520AYKSMODU))
FREE PACKAGE(CU.CU8320.(19940317161809S101702A032590ACU8320))
FREE PACKAGE(SX.YSXRELK.(E))
FREE PACKAGE(HP3.ACLQMC.())
FREE PACKAGE(VT.YVT0802.(19940314192641S101702A032472AYVT0802))
FREE PACKAGE(VT.YVT0801.(19940314192641S101702A032472AYVT0801))
FREE PACKAGE(VT.YVT0806.(19940314192645S101702A032472AYVT0806))
FREE PACKAGE(VT.YVT0809.(19940314192648S101702A032472AYVT0809))
FREE PACKAGE(VT.YVT0805.(19940314192644S101702A032472AYVT0805))
FREE PACKAGE(VT.YVT0803.(19940314192642S101702A032472AYVT0803))
FREE PACKAGE(VT.YVT0804.(19940314192643S101702A032472AYVT0804))
FREE PACKAGE(VT.YVT0801.(E))
FREE PACKAGE(VT.YVT0802.(E))
FREE PACKAGE(VT.YVT0804.(E))
FREE PACKAGE(VT.YVT0806.(E))
FREE PACKAGE(VT.YVT0809.(E))
FREE PACKAGE(HP1.RWBC037.())
FREE PACKAGE(HP3.RWBC037.())
FREE PACKAGE(VT.YVT0806.(19940316185341S101702A032544AYVT0806))
FREE PACKAGE(VT.YVT0802.(19940316185332S101702A032544AYVT0802))
FREE PACKAGE(VT.YVT0801.(19940316185331S101702A032544AYVT0801))
FREE PACKAGE(VT.YVT0803.(19940316185334S101702A032544AYVT0803))
FREE PACKAGE(VT.YVT0809.(19940316185345S101702A032544AYVT0809))
FREE PACKAGE(VT.YVT0804.(19940316185336S101702A032544AYVT0804))
FREE PACKAGE(VT.YVT0805.(19940316185339S101702A032544AYVT0805))
FREE PACKAGE(VT.YVT0802.(19940316143210S101702A032544AYVT0802))
FREE PACKAGE(VT.YVT0801.(19940316143208S101702A032544AYVT0801))
FREE PACKAGE(VT.YVT0803.(19940316143212S101702A032544AYVT0803))
FREE PACKAGE(BW.YBWAPVZ.())
FREE PACKAGE(BW.YBWAXLQ.())
FREE PACKAGE(VT.YVT0806.())
FREE PACKAGE(VT.YVT0802.())
FREE PACKAGE(VT.YVT0801.())
FREE PACKAGE(VT.YVT0809.())
FREE PACKAGE(VT.YVT0805.())
FREE PACKAGE(VT.YVT0803.())
FREE PACKAGE(VT.YVT0804.())
FREE PACKAGE(BW.YBWAAGF.())
FREE PACKAGE(BW.YBWAH56.())
FREE PACKAGE(BW.YBWAPVY.())
FREE PACKAGE(BX.YBXBI02.())
FREE PACKAGE(DX.DX5300.())
FREE PACKAGE(BW.YBWAE0H.())
FREE PACKAGE(SX.YSXFEHL.())
FREE PACKAGE(KS.YKSAUFT.(19940602144938S101702A034556AYKSAUFT))
FREE PACKAGE(SA.YSAT801.(19940602152851S101702A034761AYSAT801))
FREE PACKAGE(RE.YREDAT.(19940602200603S101702A034743AYREDAT))
FREE PACKAGE(RE.YREDAT.(19940603141908S101702A034743AYREDAT))
FREE PACKAGE(SX.SX0650.(19940609145031S101702A034927ASX0650))
FREE PACKAGE(YY.YYDEPAY.(19940609162215S101702A034897AYYDEPAY))
FREE PACKAGE(YY.YYDEPAY.(19940609165924S101702A034897AYYDEPAY))
FREE PACKAGE(SA.YSAT807.(19940616144919S101702A034999AYSAT807))
FREE PACKAGE(HP1.RWBC041.())
FREE PACKAGE(HP3.RWBC041.())
FREE PACKAGE(HP1.RWBC048.())
FREE PACKAGE(HP3.RWBC048.())
FREE PACKAGE(HP1.RWBC049.())
FREE PACKAGE(HP1.RWBP007.())
FREE PACKAGE(HP3.RWBP007.())
FREE PACKAGE(WK.WK7140.(19940617193658S101702M000399AWK7140))
FREE PACKAGE(WK.YWKLUBO.(19940617180626S101702M000399AYWKLUBO))
FREE PACKAGE(WK.YWK019A.(19940617175336S101702M000399AYWK019A))
FREE PACKAGE(WK.YWK018A.(19940617175335S101702M000399AYWK018A))
FREE PACKAGE(WK.YWK018C.(19940617175335S101702M000399AYWK018C))
FREE PACKAGE(WK.YWK018D.(19940617175336S101702M000399AYWK018D))
FREE PACKAGE(WK.YWKATRE.(19940617180548S101702M000399AYWKATRE))
FREE PACKAGE(HP1.RWBP022.())
FREE PACKAGE(HP3.RWBP022.())
FREE PACKAGE(HP1.RWBP036.())
FREE PACKAGE(HP1.RWBP026.())
FREE PACKAGE(HP3.RWBP026.())
FREE PACKAGE(HP1.RWBP029.())
FREE PACKAGE(HP3.RWBP029.())
FREE PACKAGE(HP1.RWBP034.())
FREE PACKAGE(HP3.RWBP034.())
FREE PACKAGE(HP1.RWBC024.())
FREE PACKAGE(HP3.RWBC024.())
FREE PACKAGE(HP1.RWBC011.())
FREE PACKAGE(HP3.RWBC011.())
FREE PACKAGE(HP1.RWBC032.())
FREE PACKAGE(HP3.RWBC032.())
FREE PACKAGE(HP1.RWBR043.())
FREE PACKAGE(HP3.RWBR043.())
FREE PACKAGE(YY.YYDEPAY.(19940623183033S101702A035091AYYDEPAY))
FREE PACKAGE(WK.YWKLUBO.(19940623185421S101702M000479AYWKLUBO))
FREE PACKAGE(DX.DX0100.(19940623142418S101702A035172ADX0100))
FREE PACKAGE(YY.YYDEPAY.(19940623162940S101702A035091AYYDEPAY))
FREE PACKAGE(YY.YYDEPAY.(19940623173219S101702A035091AYYDEPAY))
FREE PACKAGE(SA.YSAT801.(19940623170035S101702A035250AYSAT801))
FREE PACKAGE(SX.SX0650.(19940623170137S101702A035250ASX0650))
FREE PACKAGE(KS.YKSMODU.(19940324153841S101702A032785AYKSMODU))
FREE PACKAGE(LB.YLB0113.(19940324154725S101702A032795AYLB0113))
FREE PACKAGE(KS.YKSZNID.(19940323113754S101702A032639AYKSZNID))
FREE PACKAGE(VT.YVT0802.(19940330142123S101702A032942AYVT0802))
FREE PACKAGE(VT.YVT0803.(19940330142140S101702A032942AYVT0803))
FREE PACKAGE(VT.YVT0805.(19940330142220S101702A032942AYVT0805))
FREE PACKAGE(BW.YBWAFIY.(19940330142400S101702A032858AYBWAFIY))
FREE PACKAGE(BW.YBWAFIZ.(19940330142416S101702A032858AYBWAFIZ))
FREE PACKAGE(BW.YBWAFI0.(19940330142436S101702A032858AYBWAFI0))
FREE PACKAGE(BW.YBWAFI2.(19940330142450S101702A032858AYBWAFI2))
FREE PACKAGE(BW.YBWAFIX.(19940330142508S101702A032858AYBWAFIX))
FREE PACKAGE(VT.YVT0801.(19940330142350S101702A032942AYVT0801))
FREE PACKAGE(VT.YVT0804.(19940330142205S101702A032942AYVT0804))
FREE PACKAGE(VT.YVT0806.(19940330142237S101702A032942AYVT0806))
FREE PACKAGE(BW.YBWAFI1.(19940330142442S101702A032858AYBWAFI1))
FREE PACKAGE(BW.YBWAFIW.(19940330142500S101702A032858AYBWAFIW))
FREE PACKAGE(KS.YKSZNID.(19940407150310S101702A032963AYKSZNID))
FREE PACKAGE(YY.YYDEPAY.(19940407150944S101702A032852AYYDEPAY))
FREE PACKAGE(KS.YKSZNID.(19940407164427S101702A032963AYKSZNID))
FREE PACKAGE(YY.YYDEPAY.(19940407165401S101702A032852AYYDEPAY))
FREE PACKAGE(PHPSPTA.HMCEXP3.())
FREE PACKAGE(PHPS53.HMCEXP3.())
FREE PACKAGE(WK.YWKLUBO.(19940408012610S101702M000391AYWKLUBO))
FREE PACKAGE(WK.YWK019A.(19940408012536S101702M000391AYWK019A))
FREE PACKAGE(GE.GE2950.(19940407190123S101702A033023AGE2950))
FREE PACKAGE(YY.YYDEAIS.(19940407192650S101702A032805AYYDEAIS))
FREE PACKAGE(NK.YNKUMW.(19940415123746S101702A032855AYNKUMW))
FREE PACKAGE(RT.RT5030.(19940415122520S101702A032575ART5030))
FREE PACKAGE(RT.RT5930.(19940415122513S101702A032575ART5930))
FREE PACKAGE(YY.YYNHBS.(19940415174407S101702A033339AYYNHBS))
FREE PACKAGE(WK.YWKLUBO.(19940415175633S101702M000426AYWKLUBO))
FREE PACKAGE(NK.YNKUMW.(19940415193036S101702A032855AYNKUMW))
FREE PACKAGE(GE.YYGE040.(19940421143818S101702M000442AYYGE040))
FREE PACKAGE(YY.YYDEPAY.(19940421144515S101702A033531AYYDEPAY))
FREE PACKAGE(GE.YYGE020.(19940421143813S101702M000442AYYGE020))
FREE PACKAGE(PC.YPC0002.(19940421153633S101702M000442AYPC0002))
FREE PACKAGE(YY.YYDEPAY.(19940421171023S101702A033531AYYDEPAY))
FREE PACKAGE(RR.RR7310.(19940421200115S101702M000439ARR7310))
FREE PACKAGE(YX.YXNKSIC.(19940428181933S101702A033825AYXNKSIC))
FREE PACKAGE(BW.YBWAEW6.(19940428182212S101702A033825AYBWAEW6))
FREE PACKAGE(BW.YBWAO3W.(19940428182442S101702A033825AYBWAO3W))
FREE PACKAGE(BW.YBWAEWG.(19940428182459S101702A033825AYBWAEWG))
FREE PACKAGE(BW.YBWAEW2.(19940428182558S101702A033825AYBWAEW2))
FREE PACKAGE(BW.YBWAEWN.(19940428182543S101702A033825AYBWAEWN))
FREE PACKAGE(BW.YBWAEWJ.(19940428182507S101702A033825AYBWAEWJ))
FREE PACKAGE(BW.YBWAHD4.(19940428182421S101702A033825AYBWAHD4))
FREE PACKAGE(VT.VT0610.(19940428145845S101702A033858AVT0610))
FREE PACKAGE(YY.YYDEPAY.(19940505194307S101702A033876AYYDEPAY))
FREE PACKAGE(WK.YWKLUBO.(19940505203528S101702M000394AYWKLUBO))
FREE PACKAGE(VT.YVT0806.(19940505162943S101702A034051AYVT0806))
FREE PACKAGE(VT.YVT0805.(19940505162933S101702A034051AYVT0805))
FREE PACKAGE(VT.YVT0802.(19940505163025S101702A034051AYVT0802))
FREE PACKAGE(VT.YVT0801.(19940505163017S101702A034051AYVT0801))
FREE PACKAGE(VT.YVT0803.(19940505163031S101702A034051AYVT0803))
FREE PACKAGE(VT.YVT0804.(19940505162908S101702A034051AYVT0804))
FREE PACKAGE(BW.YBWAEWG.(19940511190624S101702A034204AYBWAEWG))
FREE PACKAGE(YY.YYDEPAY.(19940511152421S101702A034077AYYDEPAY))
FREE PACKAGE(DX.DX5100.(19940519174204S101702A034366ADX5100))
FREE PACKAGE(DX.DX5300.(19940519174211S101702A034369ADX5300))
FREE PACKAGE(WK.WK7140.(19940519174927S101702A034385AWK7140))
FREE PACKAGE(DX.DX0100.(19940519144614S101702A034343ADX0100))
FREE PACKAGE(KS.YKSAUFT.(19940519152148S101702A034419AYKSAUFT))
FREE PACKAGE(WK.YWK019A.(19940901204355S101702M000463AYWK019A))
FREE PACKAGE(WK.YWKLUBO.(19940901204338S101702M000463AYWKLUBO))
FREE PACKAGE(YY.YYDEPAY.(19940901135024S101702A036991AYYDEPAY))
FREE PACKAGE(YY.YYNFP14.(19940902165842S101702A037061AYYNFP14))
FREE PACKAGE(WK.YWKLUBO.(19940915185724S101702M000465AYWKLUBO))
FREE PACKAGE(WK.YWK019A.(19940915192823S101702M000465AYWK019A))
FREE PACKAGE(YX.YXBF224.(19940915190525S101702M000465AYXBF224))
FREE PACKAGE(HP1.AE85S3.())
FREE PACKAGE(HP3.AE85S3.())
FREE PACKAGE(HP1.AE86S3.())
FREE PACKAGE(HP3.AE86S3.())
FREE PACKAGE(HP3.AA4XTI.())
FREE PACKAGE(HP3.ABISTI.())
FREE PACKAGE(HP3.AE84S3.())
FREE PACKAGE(HP3.ADECS3.())
FREE PACKAGE(HP3.AE9SS3.())
FREE PACKAGE(HP3.AE9TS3.())
FREE PACKAGE(HP3.AE9US3.())
FREE PACKAGE(HP3.AA40TI.())
FREE PACKAGE(HP3.AA4ZTI.())
FREE PACKAGE(HP1.ABWPTI.())
FREE PACKAGE(HP3.ABWPTI.())
FREE PACKAGE(HP1.ADDZS3.())
FREE PACKAGE(HP3.ADDZS3.())
FREE PACKAGE(HP3.ADEBS3.())
FREE PACKAGE(WK.YWKLUBO.(19940922222855S101702M000497AYWKLUBO))
FREE PACKAGE(YY.YYDEPAY.(19940922143400S101702A037561AYYDEPAY))
FREE PACKAGE(SA.YSAT807.(19940922143846S101702A037594AYSAT807))
FREE PACKAGE(NP.NP5450.(19940929140523S101702A037741ANP5450))
FREE PACKAGE(NP.NP5000.(19940929140635S101702A037741ANP5000))
FREE PACKAGE(NP.NP5020.(19940929140638S101702A037741ANP5020))
FREE PACKAGE(NP.NP5450.(19940929153937S101702A037741ANP5450))
FREE PACKAGE(NP.NP5000.(19940929154023S101702A037741ANP5000))
FREE PACKAGE(NP.NP5020.(19940929154025S101702A037741ANP5020))
FREE PACKAGE(NP.NP5450.(19940929164921S101702A037741ANP5450))
FREE PACKAGE(NP.NP8900.(19940929164933S101702A037741ANP8900))
FREE PACKAGE(NP.NP5000.(19940929164946S101702A037741ANP5000))
FREE PACKAGE(NP.NP5020.(19940929164947S101702A037741ANP5020))
FREE PACKAGE(NK.NK5240V.(19940929172932S101702A037879ANK5240V))
FREE PACKAGE(YY.YYDEPAY.(19941006213821S101702M000503AYYDEPAY))
FREE PACKAGE(HP3.AJBTSH.())
FREE PACKAGE(BX.YBXBI02.(19941006193226S101702A037591AYBXBI02))
FREE PACKAGE(ME.ME0300.(19941006195423S101702A037982AME0300))
FREE PACKAGE(WK.YWKLUBO.(19941006204333S101702M000466AYWKLUBO))
FREE PACKAGE(HP1.ACF3Q1.())
FREE PACKAGE(HP3.ACF3Q1.())
FREE PACKAGE(YY.YYDEPAY.(19941006165731S101702M000503AYYDEPAY))
FREE PACKAGE(CD.YCDGETJ.(19940705103237S101702A035214AYCDGETJ))
FREE PACKAGE(CD.YCDUP08.(19940705103248S101702A035214AYCDUP08))
FREE PACKAGE(CD.YCDUP27.(19940705104208S101702A035214AYCDUP27))
FREE PACKAGE(CD.YCDGETJ.(19940705140220S101702A035214AYCDGETJ))
FREE PACKAGE(CD.YCDUP08.(19940705140233S101702A035214AYCDUP08))
FREE PACKAGE(CD.YCDUP27.(19940705140313S101702A035214AYCDUP27))
FREE PACKAGE(CD.YCDUP27.(19940705142545S101702A035214AYCDUP27))
FREE PACKAGE(CD.YCDGETJ.(19940705142430S101702A035214AYCDGETJ))
FREE PACKAGE(CD.YCDUP08.(19940705142445S101702A035214AYCDUP08))
FREE PACKAGE(YY.YYDEPAY.(19940630144158S101702A035293AYYDEPAY))
FREE PACKAGE(YY.YYDEPAY.(19940630151201S101702A035293AYYDEPAY))
FREE PACKAGE(BW.YBWAAJ9.(19940630170745S101702A035238AYBWAAJ9))
FREE PACKAGE(BW.YBWAAJT.(19940630170740S101702A035238AYBWAAJT))
FREE PACKAGE(BW.YBWAAJ2.(19940630170742S101702A035238AYBWAAJ2))
FREE PACKAGE(BW.YBWAAJ8.(19940630170744S101702A035238AYBWAAJ8))
FREE PACKAGE(DX.DX5100.(19940630173128S101702A035317ADX5100))
FREE PACKAGE(CD.YCDUP27.(19940701132626S101702A035214AYCDUP27))
FREE PACKAGE(CD.YCDGETJ.(19940701132442S101702A035214AYCDGETJ))
FREE PACKAGE(NK.YNKUMW.(19940707172102S101702A034690AYNKUMW))
FREE PACKAGE(WK.YWKLUBO.(19940707185047S101702M000457AYWKLUBO))
FREE PACKAGE(YY.YYDEPAY.(19940707133234S101702A035428AYYDEPAY))
FREE PACKAGE(KS.YKSAUFT.(19940707194026S101702M000478AYKSAUFT))
FREE PACKAGE(WK.WK7140.(19940707190603S101702M000457AWK7140))
FREE PACKAGE(WK.YWKLUBO.(19940714204856S101702M000458AYWKLUBO))
FREE PACKAGE(YY.YYDEPAY.(19940714145243S101702A035665AYYDEPAY))
FREE PACKAGE(VT.YVT0801.(19940714151204S101702A035710AYVT0801))
FREE PACKAGE(VT.YVT0809.(19940714151212S101702A035710AYVT0809))
FREE PACKAGE(VT.YVT0802.(19940714151204S101702A035710AYVT0802))
FREE PACKAGE(VT.YVT0803.(19940714151205S101702A035710AYVT0803))
FREE PACKAGE(VT.YVT0806.(19940714151210S101702A035710AYVT0806))
FREE PACKAGE(VT.YVT0805.(19940714151209S101702A035710AYVT0805))
FREE PACKAGE(VT.YVT0804.(19940714151207S101702A035710AYVT0804))
FREE PACKAGE(YY.YYNHBS.(19940714165234S101702A035718AYYNHBS))
FREE PACKAGE(BX.YBXBI02.(19940714172643S101702A035771AYBXBI02))
FREE PACKAGE(VT.YVT0806.(19940714180900S101702A035710AYVT0806))
FREE PACKAGE(VT.YVT0802.(19940714180857S101702A035710AYVT0802))
FREE PACKAGE(VT.YVT0809.(19940714180901S101702A035710AYVT0809))
FREE PACKAGE(VT.YVT0801.(19940714180856S101702A035710AYVT0801))
FREE PACKAGE(VT.YVT0805.(19940714180859S101702A035710AYVT0805))
FREE PACKAGE(VT.YVT0803.(19940714180857S101702A035710AYVT0803))
FREE PACKAGE(VT.YVT0804.(19940714180858S101702A035710AYVT0804))
FREE PACKAGE(SA.YSAT805.(19940715094945S101702A035847AYSAT805))
FREE PACKAGE(SA.YSAT802.(19940715094943S101702A035847AYSAT802))
FREE PACKAGE(SA.YSAT806.(19940715094946S101702A035847AYSAT806))
FREE PACKAGE(SA.YSAT803.(19940715094944S101702A035847AYSAT803))
FREE PACKAGE(WK.YWKLUBO.(19940721173958S101702M000459AYWKLUBO))
FREE PACKAGE(PHPSPTA.RMICKJB.())
FREE PACKAGE(PHPS53.RMICKJB.())
FREE PACKAGE(HP3.AE8GS3.())
FREE PACKAGE(HP3.AE8HS3.())
FREE PACKAGE(HP3.AE8IS3.())
FREE PACKAGE(VT.YVT0803.(19940727175006S101702A036169AYVT0803))
FREE PACKAGE(BP.YBPPID.(19940804183036S101702A036204AYBPPID))
FREE PACKAGE(YY.YYDEPAY.(19940804181158S101702M000486AYYDEPAY))
FREE PACKAGE(BP.BP5110.(19940804181814S101702M000488ABP5110))
FREE PACKAGE(AC.YACM002.(19940804182728S101702A036204AYACM002))
FREE PACKAGE(KS.YKSAUFT.(19940811140925S101702A036426AYKSAUFT))
FREE PACKAGE(KS.YKSAUFT.(19940811195830S101702A036426AYKSAUFT))
FREE PACKAGE(WK.YWKLUBO.(19940811215857S101702M000461AYWKLUBO))
FREE PACKAGE(BW.YBWAAJ8.(19940811231714S101702A036260AYBWAAJ8))
FREE PACKAGE(NH.NH5910.(19940811233300S101702A036480ANH5910))
FREE PACKAGE(NH.NH7100.(19940811233217S101702A036480ANH7100))
FREE PACKAGE(HP3.RWBP004.())
FREE PACKAGE(HP3.RWBP008.())
FREE PACKAGE(HP1.RWBP021.())
FREE PACKAGE(HP3.RWBP021.())
FREE PACKAGE(HP1.RWBC030.())
FREE PACKAGE(HP3.RWBC030.())
FREE PACKAGE(HP1.RWBM007.())
FREE PACKAGE(HP3.RWBM007.())
FREE PACKAGE(GE.GE7580.(19940824154405S101702A036682AGE7580))
FREE PACKAGE(GE.GE7590.(19940824154407S101702A036682AGE7590))
FREE PACKAGE(YY.YYDEPAY.(19940825150144S101702M000491AYYDEPAY))
FREE PACKAGE(OD.OD7210.(19940825152244S101702A036730AOD7210))
FREE PACKAGE(GE.GE7620.(19940825113355S101702A036682AGE7620))
FREE PACKAGE(GE.GE7590.(19940825113352S101702A036682AGE7590))
FREE PACKAGE(GE.GE7580.(19940825113350S101702A036682AGE7580))
FREE PACKAGE(VT.YVT0803.(19940825170749S101702A036783AYVT0803))
FREE PACKAGE(BF.BF5220.(19940825185414S101702A036438ABF5220))
FREE PACKAGE(BF.BF5230.(19940825185417S101702A036438ABF5230))
FREE PACKAGE(WK.YWKLUBO.(19940825190037S101702M000490AYWKLUBO))
FREE PACKAGE(WK.YWKLUBO.(19941215214321S101702M000474AYWKLUBO))
FREE PACKAGE(LB.YLB0113.(19941215214909S101702M000474AYLB0113))
FREE PACKAGE(VT.VT8111.(19941212115358S101702A040321AVT8111))
FREE PACKAGE(KS.YKSAUFT.(19941215164630S101702A040392AYKSAUFT))
FREE PACKAGE(KS.KS0610.(19941215182206S101702A040306AKS0610))
FREE PACKAGE(KS.KS0600.(19941215182205S101702A040306AKS0600))
FREE PACKAGE(KS.YKSAUFT.(19941215182250S101702A040392AYKSAUFT))
FREE PACKAGE(KS.KS0600.(19941215163732S101702A040306AKS0600))
FREE PACKAGE(YX.YXBF222.(19941224125703S101702Z170599AYXBF222))
FREE PACKAGE(VT.YVT0731.(19941219124226S101702A040594AYVT0731))
FREE PACKAGE(WK.YWK018A.(19941229210352S101702M000523AYWK018A))
FREE PACKAGE(WK.YWK018C.(19941229210359S101702M000523AYWK018C))
FREE PACKAGE(WK.YWKLUBO.(19941229204640S101702M000523AYWKLUBO))
FREE PACKAGE(WK.YWK019A.(19941229210426S101702M000523AYWK019A))
FREE PACKAGE(VT.YVT0803.(19950105144947S101702A041005AYVT0803))
FREE PACKAGE(VT.YVT0806.(19950105144954S101702A041005AYVT0806))
FREE PACKAGE(VT.YVT0804.(19950105144951S101702A041005AYVT0804))
FREE PACKAGE(VT.YVT0805.(19950105144952S101702A041005AYVT0805))
FREE PACKAGE(VT.YVT0801.(19950105144958S101702A041005AYVT0801))
FREE PACKAGE(VT.YVT0802.(19950105144959S101702A041005AYVT0802))
FREE PACKAGE(YY.YYSPINS.(19950106063222S101702A041003AYYSPINS))
FREE PACKAGE(VT.YVT0801.(19950112151630S101702A041230AYVT0801))
FREE PACKAGE(HP1.ACDBQ1.())
FREE PACKAGE(HP3.ACDBQ1.())
FREE PACKAGE(WB.YWB5901.(19941013170117S101702A037988AYWB5901))
FREE PACKAGE(HP1.RWBP023.())
FREE PACKAGE(HP3.RWBP023.())
FREE PACKAGE(HP1.RWBC040.())
FREE PACKAGE(HP3.RWBC040.())
FREE PACKAGE(HP1.ADWVQZ.())
FREE PACKAGE(HP3.ADWVQZ.())
FREE PACKAGE(WK.YWKLUBO.(19941020175037S101702M000468AYWKLUBO))
FREE PACKAGE(RE.RE7520.(19941020175514S101702M000502ARE7520))
FREE PACKAGE(RT.RT5000.(19941020143110S101702A038467ART5000))
FREE PACKAGE(SAMDBOF.SAMB0500.())
FREE PACKAGE(OD.OD7130.(19941027161308S101702A038607AOD7130))
FREE PACKAGE(VT.YVT0806.(19941102124427S101702A038864AYVT0806))
FREE PACKAGE(VT.YVT0809.(19941102124430S101702A038864AYVT0809))
FREE PACKAGE(VT.YVT0802.(19941102124425S101702A038864AYVT0802))
FREE PACKAGE(VT.YVT0801.(19941102124425S101702A038864AYVT0801))
FREE PACKAGE(VT.YVT0804.(19941102124426S101702A038864AYVT0804))
FREE PACKAGE(VT.YVT0805.(19941102124427S101702A038864AYVT0805))
FREE PACKAGE(YY.YYDEPAY.(19941103180213S101702A038783AYYDEPAY))
FREE PACKAGE(WK.YWKLUBO.(19941103182227S101702M000469AYWKLUBO))
FREE PACKAGE(VT.VT0610.(E))
FREE PACKAGE(SA.YSAUEB.(19941110174709S101702A039326AYSAUEB))
FREE PACKAGE(WK.YWKLUBO.(19941110191853S101702M000470AYWKLUBO))
FREE PACKAGE(SA.YSAUEB.(19941110133031S101702A039326AYSAUEB))
FREE PACKAGE(VT.YVT0805.(19941110143933S101702A039292AYVT0805))
FREE PACKAGE(YY.YYDEPAY.(19941121140628S101702A039653AYYDEPAY))
FREE PACKAGE(SA.YSAUEB.(19941117140738S101702A039487AYSAUEB))
FREE PACKAGE(RE.RE7520.(19941117161042S101702A039244ARE7520))
FREE PACKAGE(WK.YWKLUBO.(19941117163613S101702M000471AYWKLUBO))
FREE PACKAGE(YY.YYNHBS.(19941117161412S101702A039404AYYNHBS))
FREE PACKAGE(YY.YYDEPAY.(19941117161523S101702A039431AYYDEPAY))
FREE PACKAGE(WK.YWKLUBO.(19941117190715S101702M000471AYWKLUBO))
FREE PACKAGE(VT.VT0610.(19941124145522S101702A039698AVT0610))
FREE PACKAGE(WK.YWKLUBO.(19941124193246S101702M000517AYWKLUBO))
FREE PACKAGE(WK.YWKLUBO.(19941201191819S101702M000472AYWKLUBO))
FREE PACKAGE(LB.YLB0113.(19941201191749S101702M000472AYLB0113))
FREE PACKAGE(EB.EB5150.(19941201140340S101702A039621AEB5150))
FREE PACKAGE(BW.YBWAEWG.(19941201183642S101702A040024AYBWAEWG))
FREE PACKAGE(OD.OD7210.(19941208141347S101702A040106AOD7210))
FREE PACKAGE(VT.YVT0801.(19941208143554S101702A040233AYVT0801))
FREE PACKAGE(VT.YVT0804.(19941208143556S101702A040233AYVT0804))
FREE PACKAGE(VT.YVT0805.(19941208143559S101702A040233AYVT0805))
FREE PACKAGE(VT.YVT0804.(19941208151812S101702A040233AYVT0804))
FREE PACKAGE(VT.YVT0805.(19941208151813S101702A040233AYVT0805))
FREE PACKAGE(VT.YVT0801.(19941208151811S101702A040233AYVT0801))
FREE PACKAGE(WK.YWKLUBO.(19941208160857S101702M000473AYWKLUBO))
FREE PACKAGE(PHPSPTA.HMCAUDT.())
FREE PACKAGE(PHPS53.HMCAUDT.())
FREE PACKAGE(WK.YWKLUBO.(19950403S101702Z183880AYWKLUBO))
FREE PACKAGE(PHPSPTA.HMPSNAM.())
FREE PACKAGE(PHPS53.HMPSNAM.())
FREE PACKAGE(PHPSPTA.H1059R.())
FREE PACKAGE(PHPS53.H1059R.())
FREE PACKAGE(PHPSPTA.H1060R.())
FREE PACKAGE(PHPS53.H1060R.())
FREE PACKAGE(PHPSPTA.H1061R.())
FREE PACKAGE(PHPS53.H1061R.())
FREE PACKAGE(PHPSPTA.H1056R.())
FREE PACKAGE(PHPS53.H1056R.())
FREE PACKAGE(PHPSPTA.H1057R.())
FREE PACKAGE(PHPS53.H1057R.())
FREE PACKAGE(PHPSPTA.H1058R.())
FREE PACKAGE(PHPS53.H1058R.())
FREE PACKAGE(PHPSPTA.H1065R.())
FREE PACKAGE(PHPS53.H1065R.())
FREE PACKAGE(PHPSPTA.H1062R.())
FREE PACKAGE(PHPS53.H1062R.())
FREE PACKAGE(PHPSPTA.H1063R.())
FREE PACKAGE(PHPS53.H1063R.())
FREE PACKAGE(PHPSPTA.H1064R.())
FREE PACKAGE(PHPS53.H1064R.())
FREE PACKAGE(PHPSPTA.H1071R.())
FREE PACKAGE(PHPS53.H1071R.())
FREE PACKAGE(PHPSPTA.H1066R.())
FREE PACKAGE(PHPS53.H1066R.())
FREE PACKAGE(PHPSPTA.H1067R.())
FREE PACKAGE(PHPS53.H1067R.())
FREE PACKAGE(PHPSPTA.H1068R.())
FREE PACKAGE(PHPS53.H1068R.())
FREE PACKAGE(PHPSPTA.H1069R.())
FREE PACKAGE(PHPS53.H1069R.())
FREE PACKAGE(PHPSPTA.H1075R.())
FREE PACKAGE(PHPS53.H1075R.())
FREE PACKAGE(PHPSPTA.H1076R.())
FREE PACKAGE(PHPS53.H1076R.())
FREE PACKAGE(PHPSPTA.H1072R.())
FREE PACKAGE(PHPS53.H1072R.())
FREE PACKAGE(PHPSPTA.H1073R.())
FREE PACKAGE(PHPS53.H1073R.())
FREE PACKAGE(PHPSPTA.H1074R.())
FREE PACKAGE(PHPS53.H1074R.())
FREE PACKAGE(PHPSPTA.H1080R.())
FREE PACKAGE(PHPS53.H1080R.())
FREE PACKAGE(PHPSPTA.H1081R.())
FREE PACKAGE(PHPS53.H1081R.())
FREE PACKAGE(PHPSPTA.H1077R.())
FREE PACKAGE(PHPS53.H1077R.())
FREE PACKAGE(PHPSPTA.H1078R.())
FREE PACKAGE(PHPS53.H1078R.())
FREE PACKAGE(PHPSPTA.H1079R.())
FREE PACKAGE(PHPS53.H1079R.())
FREE PACKAGE(PHPSPTA.H1083R.())
FREE PACKAGE(PHPS53.H1083R.())
FREE PACKAGE(PHPSPTA.H1084R.())
FREE PACKAGE(PHPS53.H1084R.())
FREE PACKAGE(PHPSPTA.H1082R.())
FREE PACKAGE(PHPS53.H1082R.())
FREE PACKAGE(PHPSPTA.H1003R.())
FREE PACKAGE(PHPS53.H1003R.())
FREE PACKAGE(PHPSPTA.H1004R.())
FREE PACKAGE(PHPS53.H1004R.())
FREE PACKAGE(PHPSPTA.H1001R.())
FREE PACKAGE(PHPS53.H1001R.())
FREE PACKAGE(PHPSPTA.H1002R.())
FREE PACKAGE(PHPS53.H1002R.())
FREE PACKAGE(PHPSPTA.H1009R.())
FREE PACKAGE(PHPS53.H1009R.())
FREE PACKAGE(PHPSPTA.H1006R.())
FREE PACKAGE(PHPS53.H1006R.())
FREE PACKAGE(PHPSPTA.H1007R.())
FREE PACKAGE(PHPS53.H1007R.())
FREE PACKAGE(PHPSPTA.H1008R.())
FREE PACKAGE(PHPS53.H1008R.())
FREE PACKAGE(PHPSPTA.H1014R.())
FREE PACKAGE(PHPS53.H1014R.())
FREE PACKAGE(PHPSPTA.H1010R.())
FREE PACKAGE(PHPS53.H1010R.())
FREE PACKAGE(PHPSPTA.H1012R.())
FREE PACKAGE(PHPS53.H1012R.())
FREE PACKAGE(PHPSPTA.H1013R.())
FREE PACKAGE(PHPS53.H1013R.())
FREE PACKAGE(PHPSPTA.H1019R.())
FREE PACKAGE(PHPS53.H1019R.())
FREE PACKAGE(PHPSPTA.H1020R.())
FREE PACKAGE(PHPS53.H1020R.())
FREE PACKAGE(PHPSPTA.H1015R.())
FREE PACKAGE(PHPS53.H1015R.())
FREE PACKAGE(PHPSPTA.H1016R.())
FREE PACKAGE(PHPS53.H1016R.())
FREE PACKAGE(PHPSPTA.H1017R.())
FREE PACKAGE(PHPS53.H1017R.())
FREE PACKAGE(PHPSPTA.H1018R.())
FREE PACKAGE(PHPS53.H1018R.())
FREE PACKAGE(PHPSPTA.H1024R.())
FREE PACKAGE(PHPS53.H1024R.())
FREE PACKAGE(PHPSPTA.H1025R.())
FREE PACKAGE(PHPS53.H1025R.())
FREE PACKAGE(PHPSPTA.H1021R.())
FREE PACKAGE(PHPS53.H1021R.())
FREE PACKAGE(PHPSPTA.H1022R.())
FREE PACKAGE(PHPS53.H1022R.())
FREE PACKAGE(PHPSPTA.H1023R.())
FREE PACKAGE(PHPS53.H1023R.())
FREE PACKAGE(PHPSPTA.H1031R.())
FREE PACKAGE(PHPS53.H1031R.())
FREE PACKAGE(PHPSPTA.H1026R.())
FREE PACKAGE(PHPS53.H1026R.())
FREE PACKAGE(PHPSPTA.H1027R.())
FREE PACKAGE(PHPS53.H1027R.())
FREE PACKAGE(PHPSPTA.H1028R.())
FREE PACKAGE(PHPS53.H1028R.())
FREE PACKAGE(PHPSPTA.H1029R.())
FREE PACKAGE(PHPS53.H1029R.())
FREE PACKAGE(PHPSPTA.H1034R.())
FREE PACKAGE(PHPS53.H1034R.())
FREE PACKAGE(PHPSPTA.H1035R.())
FREE PACKAGE(PHPS53.H1035R.())
FREE PACKAGE(PHPSPTA.H1032R.())
FREE PACKAGE(PHPS53.H1032R.())
FREE PACKAGE(PHPSPTA.H1033R.())
FREE PACKAGE(PHPS53.H1033R.())
FREE PACKAGE(PHPSPTA.H1039R.())
FREE PACKAGE(PHPS53.H1039R.())
FREE PACKAGE(PHPSPTA.H1040R.())
FREE PACKAGE(PHPS53.H1040R.())
FREE PACKAGE(PHPSPTA.H1037R.())
FREE PACKAGE(PHPS53.H1037R.())
FREE PACKAGE(PHPSPTA.H1038R.())
FREE PACKAGE(PHPS53.H1038R.())
FREE PACKAGE(PHPSPTA.H1043R.())
FREE PACKAGE(PHPS53.H1043R.())
FREE PACKAGE(PHPSPTA.H1044R.())
FREE PACKAGE(PHPS53.H1044R.())
FREE PACKAGE(PHPSPTA.H1041R.())
FREE PACKAGE(PHPS53.H1041R.())
FREE PACKAGE(PHPSPTA.H1042R.())
FREE PACKAGE(PHPS53.H1042R.())
FREE PACKAGE(PHPSPTA.H1048R.())
FREE PACKAGE(PHPS53.H1048R.())
FREE PACKAGE(PHPSPTA.H1047R.())
FREE PACKAGE(PHPS53.H1047R.())
FREE PACKAGE(PHPSPTA.H1088R.())
FREE PACKAGE(PHPS53.H1088R.())
FREE PACKAGE(PHPSPTA.H1085R.())
FREE PACKAGE(PHPS53.H1085R.())
FREE PACKAGE(PHPSPTA.H1086R.())
FREE PACKAGE(PHPS53.H1086R.())
FREE PACKAGE(PHPSPTA.H1087R.())
FREE PACKAGE(PHPS53.H1087R.())
FREE PACKAGE(PHPSPTA.H1089R.())
FREE PACKAGE(PHPS53.H1089R.())
FREE PACKAGE(PHPSPTA.H1090R.())
FREE PACKAGE(PHPS53.H1090R.())
FREE PACKAGE(PHPSPTA.H1091R.())
FREE PACKAGE(PHPS53.H1091R.())
FREE PACKAGE(PHPSPTA.H1095R.())
FREE PACKAGE(PHPS53.H1095R.())
FREE PACKAGE(PHPSPTA.H1096R.())
FREE PACKAGE(PHPS53.H1096R.())
FREE PACKAGE(PHPSPTA.H1092R.())
FREE PACKAGE(PHPS53.H1092R.())
FREE PACKAGE(PHPSPTA.H1093R.())
FREE PACKAGE(PHPS53.H1093R.())
FREE PACKAGE(PHPSPTA.H1094R.())
FREE PACKAGE(PHPS53.H1094R.())
FREE PACKAGE(PHPSPTA.H1097R.())
FREE PACKAGE(PHPS53.H1097R.())
FREE PACKAGE(PHPSPTA.H1113R.())
FREE PACKAGE(PHPS53.H1113R.())
FREE PACKAGE(PHPSPTA.H1117R.())
FREE PACKAGE(PHPS53.H1117R.())
FREE PACKAGE(PHPSPTA.H1118R.())
FREE PACKAGE(PHPS53.H1118R.())
FREE PACKAGE(PHPSPTA.RMIPDAD.())
FREE PACKAGE(PHPS53.RMIPDAD.())
FREE PACKAGE(PHPSPTA.RMISTUP.())
FREE PACKAGE(PHPS53.RMISTUP.())
FREE PACKAGE(PHPSPTA.RMISTAD.())
FREE PACKAGE(PHPS53.RMISTAD.())
FREE PACKAGE(SX.YSXFLOG.(19950330S101702A043182AYSXFLOG))
FREE PACKAGE(BW.YBWAEW1.(19950411095234S101702A043641AYBWAEW1))
FREE PACKAGE(PHPSPTA.GCDTTM0.())
FREE PACKAGE(PHPS53.GCDTTM0.())
FREE PACKAGE(BW.YBWAFI1.(19950406143559S101702A043513AYBWAFI1))
FREE PACKAGE(BW.YBWAFI0.(19950406143555S101702A043513AYBWAFI0))
FREE PACKAGE(SX.YSXFLOG.(19950406S101702A043381AYSXFLOG))
FREE PACKAGE(KB.KB2020.(19950406154743S101702A043366AKB2020))
FREE PACKAGE(KD.KD5020.(19950406S101702A043419AKD5020))
FREE PACKAGE(PHPSPTA.GCGENID.())
FREE PACKAGE(PHPS53.GCGENID.())
FREE PACKAGE(RK.RK2360.(19950407212049S101702Z184806ARK2360))
FREE PACKAGE(RK.RK2340.(19950407211920S101702Z184804ARK2340))
FREE PACKAGE(WK.YWKLUBO.(19950412S101702M000541AYWKLUBO))
FREE PACKAGE(BX.YBXBI02.(19950412S101702A043533AYBXBI02))
FREE PACKAGE(PHPSPTA.GRTBIND.())
FREE PACKAGE(PHPS53.GRTBIND.())
FREE PACKAGE(VT.VT5121.(19950419S101702A043804AVT5121))
FREE PACKAGE(RR.RR7310.(19950420S101702A043312ARR7310))
FREE PACKAGE(VT.VT5121.(19950425S101702A043947AVT5121))
FREE PACKAGE(KS.YKS5551.(19950427S101702A043905AYKS5551))
FREE PACKAGE(KS.YKS5552.(19950427S101702A043905AYKS5552))
FREE PACKAGE(DE.YDE0860.(19950427S101702A044022AYDE0860))
FREE PACKAGE(KEIN.KD8014.(19950119173805S101702A041425AKD8014))
FREE PACKAGE(KEIN.KD8015.(19950119173805S101702A041425AKD8015))
FREE PACKAGE(SA.YSAT802.(19950119145806S101702A041204AYSAT802))
FREE PACKAGE(VT.YVT0731.(19950119144820S101702M000551AYVT0731))
FREE PACKAGE(YY.YYDEPAY.(19950119144822S101702M000551AYYDEPAY))
FREE PACKAGE(BW.YBWAEWL.(19950119153152S101702A041437AYBWAEWL))
FREE PACKAGE(BW.YBWAE3X.(19950119153151S101702A041437AYBWAE3X))
FREE PACKAGE(BW.YBWAEWM.(19950119153154S101702A041437AYBWAEWM))
FREE PACKAGE(BW.YBWAEW9.(19950119153157S101702A041437AYBWAEW9))
FREE PACKAGE(RP.RP7000.(19950202152307S101702A041708ARP7000))
FREE PACKAGE(KS.YKSAUFT.(19950202142636S101702A041794AYKSAUFT))
FREE PACKAGE(BF.BF6093.(19950210132753S101702Z176750ABF6093))
FREE PACKAGE(KS.YKSAUFT.(19950216142447S101702A042149AYKSAUFT))
FREE PACKAGE(WK.YWKLUBO.(19950216164131S101702M000536AYWKLUBO))
FREE PACKAGE(WK.YWK018A.(19950216165749S101702M000536AYWK018A))
FREE PACKAGE(WK.YWK018C.(19950216165754S101702M000536AYWK018C))
FREE PACKAGE(WK.YWK019A.(19950216165801S101702M000536AYWK019A))
FREE PACKAGE(WK.WK8320.(19950216173938S101702M000536AWK8320))
FREE PACKAGE(CT.CT8500.(19950302125634S101702Z179508ACT8500))
FREE PACKAGE(VT.VT5040.(19950302185840S101702A042571AVT5040))
FREE PACKAGE(CT.CT8500.(19950301194008S101702Z179440ACT8500))
FREE PACKAGE(CT.CT8500.(19950301194935S101702Z179441ACT8500))
FREE PACKAGE(SX.YSXFLOG.(19950309140310S101702A042692AYSXFLOG))
FREE PACKAGE(BW.YBWAFI1.(19950316130445S101702A042903AYBWAFI1))
FREE PACKAGE(RM.RM9020.(19950316S101702A042838ARM9020))
FREE PACKAGE(KS.ZKSFTXT.(19950316145243S101702A042669AZKSFTXT))
FREE PACKAGE(VT.YVT0801.(19950323125517S101702A043107AYVT0801))
FREE PACKAGE(OD.OD7130.(19950323140241S101702A043077AOD7130))
FREE PACKAGE(KB.KB5010.(19950707S101702Z198701AKB5010))
FREE PACKAGE(RP.RP7290.(19950703S101702Z197678ARP7290))
FREE PACKAGE(ED.YED0034.(19950706S101702A045878AYED0034))
FREE PACKAGE(VT.YVT0802.(19950706S101702A045888AYVT0802))
FREE PACKAGE(VT.YVT0731.(19950706S101702A045888AYVT0731))
FREE PACKAGE(VT.YVT0803.(19950706S101702A045888AYVT0803))
FREE PACKAGE(VT.YVT0801.(19950706S101702A045888AYVT0801))
FREE PACKAGE(VT.YVT0804.(19950706S101702A045888AYVT0804))
FREE PACKAGE(VT.YVT0806.(19950706S101702A045888AYVT0806))
FREE PACKAGE(VT.YVT0809.(19950706S101702A045888AYVT0809))
FREE PACKAGE(VT.YVT0805.(19950706S101702A045888AYVT0805))
FREE PACKAGE(RK.RK2330.(19950706150906S101702A045904ARK2330))
FREE PACKAGE(YX.YXWB52M.(19950706S101702Z198507AYXWB52M))
FREE PACKAGE(DE.YDE0860.(19950706S101702A045780AYDE0860))
FREE PACKAGE(YX.YXWB52M.(19950706S101702A045845AYXWB52M))
FREE PACKAGE(ED.YED0120.(19950714S101702A045968AYED0120))
FREE PACKAGE(ED.YED0034.(19950714S101702A045968AYED0034))
FREE PACKAGE(YX.YXWB52M.(19950714S101702Z200133AYXWB52M))
FREE PACKAGE(DE.YDE0860.(19950713S101702A046130AYDE0860))
FREE PACKAGE(VT.YVT0805.(19950713S101702A046105AYVT0805))
FREE PACKAGE(VT.YVT0804.(19950713S101702A046105AYVT0804))
FREE PACKAGE(SX.YSXFLOG.(19950713S101702A046089AYSXFLOG))
FREE PACKAGE(SA.YSAL002.(19950713S101702A046133AYSAL002))
FREE PACKAGE(SA.YSAL001.(19950713S101702A046133AYSAL001))
FREE PACKAGE(YX.YXWB52M.(19950720S101702A046231AYXWB52M))
FREE PACKAGE(YY.YYDEPAY.(19950720S101702A046223AYYDEPAY))
FREE PACKAGE(YX.YXBF224.(19950719S101702Z200752AYXBF224))
FREE PACKAGE(YY.YYPTM12.(19950727S101702A046364AYYPTM12))
FREE PACKAGE(YX.YXWB52M.(19950724S101702Z201292AYXWB52M))
FREE PACKAGE(YY.YYPTM12.(19950803S101702A046538AYYPTM12))
FREE PACKAGE(WK.YWKLUBO.(19950803S101702M000562AYWKLUBO))
FREE PACKAGE(ED.YED0120.(19950803S101702A046536AYED0120))
FREE PACKAGE(ED.YED0034.(19950803S101702A046536AYED0034))
FREE PACKAGE(YX.YXWB52M.(19950803S101702A046454AYXWB52M))
FREE PACKAGE(DE.YDE0860.(19950803S101702A046600AYDE0860))
FREE PACKAGE(ED.YED0120.(19950810S101702A046695AYED0120))
FREE PACKAGE(ED.YED0034.(19950810S101702A046695AYED0034))
FREE PACKAGE(WK.YWKLUBO.(19950810S101702Z203284AYWKLUBO))
FREE PACKAGE(WK.YWKLUBO.(19950807S101702Z202630AYWKLUBO))
FREE PACKAGE(RK.RK2350.(19950504142834S101702A043469ARK2350))
FREE PACKAGE(RK.RK2420.(19950504142901S101702A043469ARK2420))
FREE PACKAGE(RK.RK2360.(19950504142837S101702A043469ARK2360))
FREE PACKAGE(RK.RK2400.(19950504142846S101702A043469ARK2400))
FREE PACKAGE(RK.RK2380.(19950504142840S101702A043469ARK2380))
FREE PACKAGE(RK.RK2320.(19950504142910S101702A043469ARK2320))
FREE PACKAGE(RK.RK2330.(19950504142915S101702A043469ARK2330))
FREE PACKAGE(RK.RK2410.(19950504142854S101702A043469ARK2410))
FREE PACKAGE(RK.RK2390.(19950504142842S101702A043469ARK2390))
FREE PACKAGE(RK.RK2340.(19950504142921S101702A043469ARK2340))
FREE PACKAGE(DE.YDE0860.(19950511S101702Z189239AYDE0860))
FREE PACKAGE(KS.YKSAUFT.(19950511S101702A044324AYKSAUFT))
FREE PACKAGE(WK.YWKLUBO.(19950518S101702M000545AYWKLUBO))
FREE PACKAGE(LB.YLB0113.(19950518S101702M000545AYLB0113))
FREE PACKAGE(WK.WK8320.(19950518S101702M000545AWK8320))
FREE PACKAGE(DE.YDE0860.(19950518S101702A044277AYDE0860))
FREE PACKAGE(KB.KB5010.(19950515S101702Z189864AKB5010))
FREE PACKAGE(KB.KB5010.(19950516S101702Z190008AKB5010))
FREE PACKAGE(DE.YDE0860.(19950522S101702Z190760AYDE0860))
FREE PACKAGE(VT.YVT0806.(19950601S101702M000585AYVT0806))
FREE PACKAGE(VT.YVT0809.(19950601S101702M000585AYVT0809))
FREE PACKAGE(VT.YVT0805.(19950601S101702M000585AYVT0805))
FREE PACKAGE(KS.YKSAUFT.(19950601S101702M000585AYKSAUFT))
FREE PACKAGE(VT.YVT0731.(19950601S101702M000585AYVT0731))
FREE PACKAGE(VT.YVT0802.(19950601S101702M000585AYVT0802))
FREE PACKAGE(VT.YVT0804.(19950601S101702M000585AYVT0804))
FREE PACKAGE(VT.YVT0803.(19950601S101702M000585AYVT0803))
FREE PACKAGE(VT.YVT0801.(19950601S101702M000585AYVT0801))
FREE PACKAGE(PHPSPTA.GARD000.())
FREE PACKAGE(PHPS53.GARD000.())
FREE PACKAGE(DE.YDE0860.(19950601S101702A044799AYDE0860))
FREE PACKAGE(PHPSPTA.H1115R.())
FREE PACKAGE(PHPS53.H1115R.())
FREE PACKAGE(VT.YVT0801.(19950608S101702A045087AYVT0801))
FREE PACKAGE(VT.YVT0805.(19950608S101702A045087AYVT0805))
FREE PACKAGE(VT.YVT0804.(19950608S101702A045087AYVT0804))
FREE PACKAGE(YY.YYDEAIS.(19950608S101702M000546AYYDEAIS))
FREE PACKAGE(YY.YYDAISF.(19950608S101702M000546AYYDAISF))
FREE PACKAGE(DE.YDE0860.(19950608S101702A045100AYDE0860))
FREE PACKAGE(YY.YYDEPAY.(19950608S101702A045100AYYDEPAY))
FREE PACKAGE(ED.YED0034.(19950609S101702A044988AYED0034))
FREE PACKAGE(RR.RR7120.(19950615S101702A044661ARR7120))
FREE PACKAGE(SA.YSAL001.(19950615S101702A044787AYSAL001))
FREE PACKAGE(RR.RR7190.(19950615S101702A044803ARR7190))
FREE PACKAGE(RR.RR7310.(19950615S101702A044803ARR7310))
FREE PACKAGE(DE.YDE0860.(19950615S101702M000591AYDE0860))
FREE PACKAGE(YY.YYDEPAY.(19950615S101702M000591AYYDEPAY))
FREE PACKAGE(PHPSPTA.GCCOMON.())
FREE PACKAGE(PHPS53.GCCOMON.())
FREE PACKAGE(RE.RE7580.(19950622S101702A045483ARE7580))
FREE PACKAGE(RP.RP7000.(19950622S101702M000595ARP7000))
FREE PACKAGE(SA.YSAL001.(19950622S101702A045506AYSAL001))
FREE PACKAGE(ED.YED0034.(19950622S101702M000590AYED0034))
FREE PACKAGE(YY.YYDAISF.(19950622S101702M000590AYYDAISF))
FREE PACKAGE(YY.YYDEAIS.(19950622S101702M000590AYYDEAIS))
FREE PACKAGE(DE.YDE0860.(19950622S101702M000590AYDE0860))
FREE PACKAGE(YY.YYDEPAY.(19950622S101702M000590AYYDEPAY))
FREE PACKAGE(ED.YED0120.(19950622S101702A045513AYED0120))
FREE PACKAGE(RP.RP7000.(19950622S101702A045509ARP7000))
FREE PACKAGE(RK.RK2330.(19950628151450S101702Z197041ARK2330))
FREE PACKAGE(YX.YXWB52M.(19950630S101702Z197290AYXWB52M))
FREE PACKAGE(YX.YXWB52M.(19950630S101702Z197327AYXWB52M))
FREE PACKAGE(YX.YXWB52M.(19950630S101702Z197319AYXWB52M))
FREE PACKAGE(YX.YXWB52M.(19950630S101702Z197332AYXWB52M))
FREE PACKAGE(SA.YSAL001.(19951019S101702M000626AYSAL001))
FREE PACKAGE(YY.YYPTM12.(19951013S101702Z212652AYYPTM12))
FREE PACKAGE(EX.YEXERG.(19951016S101702Z213055AYEXERG))
FREE PACKAGE(NF.YNFCGB1.(19951023S101702Z214285AYNFCGB1))
FREE PACKAGE(NF.YNFCGB1.(19951023S101702Z214260AYNFCGB1))
FREE PACKAGE(NF.YNFCGB1.(19951024S101702Z214404AYNFCGB1))
FREE PACKAGE(KD.KD7000.(19951019S101702M000621AKD7000))
FREE PACKAGE(KD.KD0670.(19951019S101702M000621AKD0670))
FREE PACKAGE(KD.KD5020.(19951019S101702M000621AKD5020))
FREE PACKAGE(YY.KD5020.(19951019S101702M000621AKD5020))
FREE PACKAGE(AT.YAT7010.(19951019S101702A047927AYAT7010))
FREE PACKAGE(SX.SX0780.(19951020S101702Z213845ASX0780))
FREE PACKAGE(SX.SX0780.(19951020S101702Z213858ASX0780))
FREE PACKAGE(SX.SX0780.(19951020S101702A048835ASX0780))
FREE PACKAGE(KD.KD7000.(19951026S101702A048919AKD7000))
FREE PACKAGE(BP.YBP01NS.(19951026S101702Z214855AYBP01NS))
FREE PACKAGE(YY.YYCXCR.(19951026S101702A048908AYYCXCR))
FREE PACKAGE(KD.KD5040.(19951027S101702Z214879AKD5040))
FREE PACKAGE(BP.YBP01NS.(19951027S101702Z214995AYBP01NS))
FREE PACKAGE(PHPSPTA.HMCCFGX.())
FREE PACKAGE(PHPS53.HMCCFGX.())
FREE PACKAGE(EX.YEXERG.(19951106S101702Z216751AYEXERG))
FREE PACKAGE(NS.NS7340.(19951102S101702A049013ANS7340))
FREE PACKAGE(BP.YBP01NS.(19951102S101702A049016AYBP01NS))
FREE PACKAGE(EX.YEXERG.(19951102S101702A049197AYEXERG))
FREE PACKAGE(BX.YBXBI02.(19951102S101702A048803AYBXBI02))
FREE PACKAGE(WK.YWK019A.(19951102S101702M000606AYWK019A))
FREE PACKAGE(WK.YWK018C.(19951102S101702M000606AYWK018C))
FREE PACKAGE(WK.YWK018A.(19951102S101702M000606AYWK018A))
FREE PACKAGE(WK.YWKLUBO.(19951102S101702M000606AYWKLUBO))
FREE PACKAGE(WK.WK8320.(19951102S101702M000606AWK8320))
FREE PACKAGE(ED.YED0034.(19951102S101702M000602AYED0034))
FREE PACKAGE(ED.YED0120.(19951102S101702M000602AYED0120))
FREE PACKAGE(EX.YEXERG.(19951103S101702Z216005AYEXERG))
FREE PACKAGE(SA.YSAL001.(19951109S101702A049380AYSAL001))
FREE PACKAGE(NF.NF8800.(19951109S101702A049436ANF8800))
FREE PACKAGE(KD.KD5040.(19951109S101702A049329AKD5040))
FREE PACKAGE(YY.YYDEPAY.(19951109S101702A049367AYYDEPAY))
FREE PACKAGE(WK.YWKLUBO.(19951110S101702M000609AYWKLUBO))
FREE PACKAGE(KD.KD5040.(19951110S101702A049329AKD5040))
FREE PACKAGE(YY.YYDEPAY.(19951110S101702A049367AYYDEPAY))
FREE PACKAGE(YY.YYWBPOS.(19951109S101702A049203AYYWBPOS))
FREE PACKAGE(YY.YYWBPOS.(19951110S101702A049203AYYWBPOS))
FREE PACKAGE(AT.YAT7010.(19951114S101702Z218883AYAT7010))
FREE PACKAGE(NF.NF8800.(19951116S101702M000633ANF8800))
FREE PACKAGE(EX.YEXERG.(19951116S101702A049464AYEXERG))
FREE PACKAGE(WK.YWKLUBO.(19950816S101702Z204003AYWKLUBO))
FREE PACKAGE(ED.YEDSAM.(19950810S101702A046615AYEDSAM))
FREE PACKAGE(WK.YWKLUBO.(19950821S101702Z204586AYWKLUBO))
FREE PACKAGE(YY.YYPTM12.(19950822S101702Z204939AYYPTM12))
FREE PACKAGE(WK.YWKLUBO.(19950817S101702M000563AYWKLUBO))
FREE PACKAGE(YX.YXWB52M.(19950817S101702A046882AYXWB52M))
FREE PACKAGE(YX.YXBF224.(19950817S101702A046685AYXBF224))
FREE PACKAGE(YY.YYPTM12.(19950818S101702A047074AYYPTM12))
FREE PACKAGE(YY.YYPTM12.(19950827S101702Z205430AYYPTM12))
FREE PACKAGE(YY.YYPTM12.(19950828S101702Z205430AYYPTM12))
FREE PACKAGE(YY.YYPTM12.(19950828S101702Z205582AYYPTM12))
FREE PACKAGE(WK.YWKLUBO.(19950828S101702Z205521AYWKLUBO))
FREE PACKAGE(YY.YYPTM12.(19950829S101702Z205736AYYPTM12))
FREE PACKAGE(WK.YWKLUBO.(19950829S101702Z205812AYWKLUBO))
FREE PACKAGE(WK.YWKLUBO.(19950823S101702Z205049AYWKLUBO))
FREE PACKAGE(AL.AL7501.(19950824S101702A047042AAL7501))
FREE PACKAGE(KS.YKSAUFT.(19950824S101702A047164AYKSAUFT))
FREE PACKAGE(KD.KD8011.(19950824S101702M000598AKD8011))
FREE PACKAGE(WK.YWKLUBO.(19950824S101702Z205219AYWKLUBO))
FREE PACKAGE(YY.YYPTM12.(19950825S101702Z205416AYYPTM12))
FREE PACKAGE(YY.YYPTM12.(19950826S101702Z205430AYYPTM12))
FREE PACKAGE(WK.YWKLUBO.(19950904S101702Z205812AYWKLUBO))
FREE PACKAGE(WK.YWKLUBO.(19950830S101702Z205812AYWKLUBO))
FREE PACKAGE(YY.YYPTM12.(19950830S101702Z206096AYYPTM12))
FREE PACKAGE(YY.YYPTM12.(19950831S101702Z206167AYYPTM12))
FREE PACKAGE(WK.YWKLUBO.(19950831S101702M000564AYWKLUBO))
FREE PACKAGE(YY.YYPTM12.(19950901S101702Z206288AYYPTM12))
FREE PACKAGE(WK.YWKLUBO.(19950901S101702Z205812AYWKLUBO))
FREE PACKAGE(WK.YWKLUBO.(19950905S101702Z205812AYWKLUBO))
FREE PACKAGE(YY.YYPTM12.(19950905S101702Z206837AYYPTM12))
FREE PACKAGE(YY.YYPTM12.(19950906S101702Z206973AYYPTM12))
FREE PACKAGE(WK.YWKLUBO.(19950906S101702Z205812AYWKLUBO))
FREE PACKAGE(ED.YED0034.(19950907S101702A047537AYED0034))
FREE PACKAGE(YY.YYPTM12.(19950907S101702A047466AYYPTM12))
FREE PACKAGE(ED.YED0120.(19950907S101702A047537AYED0120))
FREE PACKAGE(YY.YYPTM12.(19950908S101702Z207435AYYPTM12))
FREE PACKAGE(ED.YED0120.(19950912S101702Z207810AYED0120))
FREE PACKAGE(ED.YED0034.(19950912S101702Z207809AYED0034))
FREE PACKAGE(ED.YED0120.(19950914S101702A047657AYED0120))
FREE PACKAGE(ED.YED0034.(19950914S101702A047657AYED0034))
FREE PACKAGE(KS.YKSAUFT.(19950914S101702A047692AYKSAUFT))
FREE PACKAGE(WK.YWKLUBO.(19950914S101702M000565AYWKLUBO))
FREE PACKAGE(PT.PT8520.(19950922S101702Z209475APT8520))
FREE PACKAGE(DN.DN8020.(19950922S101702Z209425ADN8020))
FREE PACKAGE(PT.PT5310.(19950922S101702Z209539APT5310))
FREE PACKAGE(PI.PT5310.(19950923S101702Z209544APT5310))
FREE PACKAGE(PT.PT5310.(19950923S101702Z209544APT5310))
FREE PACKAGE(PT.PT5500.(19950923S101702Z209546APT5500))
FREE PACKAGE(PT.PT5500.(19950923S101702Z209545APT5500))
FREE PACKAGE(PT.PT5500.(19950923S101702Z209548APT5500))
FREE PACKAGE(PI.PT5500.(19950923S101702Z209547APT5500))
FREE PACKAGE(PT.PT5500.(19950923S101702Z209547APT5500))
FREE PACKAGE(PT.PT5500.(19950923S101702Z209550APT5500))
FREE PACKAGE(PI.PT5500.(19950923S101702Z209549APT5500))
FREE PACKAGE(PT.PT5500.(19950923S101702Z209549APT5500))
FREE PACKAGE(PI.PT5500.(19950923S101702Z209554APT5500))
FREE PACKAGE(PT.PT5500.(19950923S101702Z209554APT5500))
FREE PACKAGE(PT.PT8520.(19950923S101702Z209553APT8520))
FREE PACKAGE(PT.PT5500.(19950923S101702Z209551APT5500))
FREE PACKAGE(WK.YWKLUBO.(19950918S101702Z208465AYWKLUBO))
FREE PACKAGE(RR.RR0010.(19950919S101702Z208678ARR0010))
FREE PACKAGE(SAMDBOF.SP1BS5T.())
FREE PACKAGE(SAMDBOF.SP1BS6T.())
FREE PACKAGE(SAMDBOF.SP1TS1T.())
FREE PACKAGE(SAMDBOF.SP1US1T.())
FREE PACKAGE(SAMDBOF.SP1BS2T.())
FREE PACKAGE(SAMDBOF.SP1BS1T.())
FREE PACKAGE(SAMDBOF.SP1BS4T.())
FREE PACKAGE(SAMDBOF.SP1BS3T.())
FREE PACKAGE(SAMDBOF.SP1US2T.())
FREE PACKAGE(PT.PT5500.(19950921S101702Z209329APT5500))
FREE PACKAGE(PI.PT5500.(19950921S101702Z209353APT5500))
FREE PACKAGE(PT.PT5500.(19950921S101702Z209353APT5500))
FREE PACKAGE(BW.YBWAAJT.(19950921172720S101702A047654AYBWAAJT))
FREE PACKAGE(BW.YBWAAJ8.(19950921172725S101702A047654AYBWAAJ8))
FREE PACKAGE(BW.YBWAAJ2.(19950921172723S101702A047654AYBWAAJ2))
FREE PACKAGE(BW.YBWAAJ9.(19950921172726S101702A047654AYBWAAJ9))
FREE PACKAGE(PI.PT5500.(19950921S101702Z209344APT5500))
FREE PACKAGE(PT.PT5500.(19950921S101702Z209344APT5500))
FREE PACKAGE(PI.PT5500.(19950921S101702Z209365APT5500))
FREE PACKAGE(PT.PT5500.(19950921S101702Z209365APT5500))
FREE PACKAGE(DE.YDE0860.(19950921S101702A047786AYDE0860))
FREE PACKAGE(WK.YWKLUBO.(19950921S101702Z208465AYWKLUBO))
FREE PACKAGE(SA.YSAL001.(19950921S101702A047844AYSAL001))
FREE PACKAGE(SA.YSAL002.(19950921S101702A047844AYSAL002))
FREE PACKAGE(BP.YBP7020.(19950928S101702A048040AYBP7020))
FREE PACKAGE(BP.YBP01NS.(19950928S101702A048005AYBP01NS))
FREE PACKAGE(NK.NK8120.(19950928S101702A048069ANK8120))
FREE PACKAGE(KD.KD7098.(19950929S101702Z210568AKD7098))
FREE PACKAGE(YY.YYPTM12.(19950925S101702Z209742AYYPTM12))
FREE PACKAGE(YY.YYDEAIS.(19951004S101702Z211189AYYDEAIS))
FREE PACKAGE(YY.YYPTM12.(19951005S101702A048161AYYPTM12))
FREE PACKAGE(KD.KD7098.(19951005S101702A048223AKD7098))
FREE PACKAGE(EX.YEXERG.(19951005S101702A048266AYEXERG))
FREE PACKAGE(FD.FD8100.(19951005S101702M000617AFD8100))
FREE PACKAGE(WK.YWKLUBO.(19951005S101702M000566AYWKLUBO))
FREE PACKAGE(NK.NK7810.(19951005S101702A048293ANK7810))
FREE PACKAGE(SAMDBOF.SP1BS9T.())
FREE PACKAGE(WK.YWKLUBO.(19951002S101702Z208465AYWKLUBO))
FREE PACKAGE(KD.KD7098.(19951002S101702Z210762AKD7098))
FREE PACKAGE(YY.YYDEPAY.(19951002S101702Z210818AYYDEPAY))
FREE PACKAGE(YY.YYPTM12.(19951011S101702Z212376AYYPTM12))
FREE PACKAGE(YY.YYPTM12.(19951011S101702Z212285AYYPTM12))
FREE PACKAGE(YY.YYPTM12.(19951011S101702Z212295AYYPTM12))
FREE PACKAGE(YY.YYDEPAY.(19951012S101702A048532AYYDEPAY))
FREE PACKAGE(OD.OD7182.(19951012S101702A047632AOD7182))
FREE PACKAGE(OD.OD7181.(19951012S101702A047632AOD7181))
FREE PACKAGE(OD.OD7184.(19951012S101702A047632AOD7184))
FREE PACKAGE(OD.OD7183.(19951012S101702A047632AOD7183))
FREE PACKAGE(PT.YYPTM12.(19951012S101702A048386AYYPTM12))
FREE PACKAGE(YY.YYPTM12.(19951012S101702A048386AYYPTM12))
FREE PACKAGE(DE.YDE0860.(19951012S101702M000615AYDE0860))
FREE PACKAGE(NR.NR8000.(19951012S101702M000624ANR8000))
FREE PACKAGE(NTA1P.NR7110.(19951012S101702M000624ANR7110))
FREE PACKAGE(YY.YYCXCR.(19951012S101702A048616AYYCXCR))
FREE PACKAGE(YY.YYPTM12.(19951009S101702Z211751AYYPTM12))
FREE PACKAGE(YY.YYPTM12.(19951010S101702Z212019AYYPTM12))
FREE PACKAGE(VT.YVT0802.(19960129S101702Z231662AYVT0802))
FREE PACKAGE(VT.YVT0806.(19960129S101702Z231662AYVT0806))
FREE PACKAGE(VT.YVT0809.(19960129S101702Z231662AYVT0809))
FREE PACKAGE(VT.YVT0801.(19960129S101702Z231662AYVT0801))
FREE PACKAGE(VT.YVT0805.(19960129S101702Z231662AYVT0805))
FREE PACKAGE(VT.YVT0804.(19960129S101702Z231662AYVT0804))
FREE PACKAGE(VT.YVT0806.(19960124S101702A051425AYVT0806))
FREE PACKAGE(VT.YVT0802.(19960124S101702A051425AYVT0802))
FREE PACKAGE(VT.YVT0801.(19960124S101702A051425AYVT0801))
FREE PACKAGE(VT.YVT0804.(19960124S101702A051425AYVT0804))
FREE PACKAGE(VT.YVT0805.(19960124S101702A051425AYVT0805))
FREE PACKAGE(VT.YVT0809.(19960124S101702A051425AYVT0809))
FREE PACKAGE(PUPG53.HMCCNVTR.())
FREE PACKAGE(PUPG53.HMCCNVTE.())
FREE PACKAGE(EV.EV7130.(19960125S101702A051501AEV7130))
FREE PACKAGE(EV.EV0600.(19960125S101702A051501AEV0600))
FREE PACKAGE(PHPSPTA.H1139R.())
FREE PACKAGE(PHPS53.H1139R.())
FREE PACKAGE(PHPSPTA.H1036R.())
FREE PACKAGE(PHPS53.H1036R.())
FREE PACKAGE(VT.YVT0731.(19960202S101702A051729AYVT0731))
FREE PACKAGE(VT.YVT0805.(19960202S101702A051729AYVT0805))
FREE PACKAGE(VT.YVT0802.(19960202S101702A051729AYVT0802))
FREE PACKAGE(VT.YVT0801.(19960202S101702A051729AYVT0801))
FREE PACKAGE(VT.YVT0806.(19960202S101702A051729AYVT0806))
FREE PACKAGE(VT.YVT0809.(19960202S101702A051729AYVT0809))
FREE PACKAGE(VT.YVT0804.(19960202S101702A051729AYVT0804))
FREE PACKAGE(PT.PT8520.(19960130S101702Z232085APT8520))
FREE PACKAGE(VT.YVT0802.(19960206S101702A051780AYVT0802))
FREE PACKAGE(VT.YVT0801.(19960206S101702A051780AYVT0801))
FREE PACKAGE(VT.YVT0805.(19960206S101702A051780AYVT0805))
FREE PACKAGE(VT.YVT0731.(19960206S101702A051780AYVT0731))
FREE PACKAGE(VT.YVT0804.(19960206S101702A051780AYVT0804))
FREE PACKAGE(VT.YVT0806.(19960206S101702A051780AYVT0806))
FREE PACKAGE(VT.YVT0809.(19960206S101702A051780AYVT0809))
FREE PACKAGE(SX.SX0540.(19960208S101702A051698ASX0540))
FREE PACKAGE(YY.YYDEPAY.(19960215141014S101702A051716AYYDEPAY))
FREE PACKAGE(YX.YXBF222.(19960213S101702Z233885AYXBF222))
FREE PACKAGE(YY.YYDEPAY.(19960222143313S101702A052141AYYDEPAY))
FREE PACKAGE(ED.YED0034.(19960222141003S101702A052082AYED0034))
FREE PACKAGE(YX.YXBF222.(19960222171023S101702A052072AYXBF222))
FREE PACKAGE(BF.YBF530C.(19960222171021S101702A052072AYBF530C))
FREE PACKAGE(BF.YBF530A.(19960222171024S101702A052072AYBF530A))
FREE PACKAGE(PHPSPTA.STKCLON.())
FREE PACKAGE(PHPS53.STKCLON.())
FREE PACKAGE(EX.YEXERG.(19960228145027S101702A052419AYEXERG))
FREE PACKAGE(EX.YEXERG.(19960228151903S101702A052419AYEXERG))
FREE PACKAGE(EX.YEXERG.(19960228155542S101702A052419AYEXERG))
FREE PACKAGE(EX.YEXERG.(19960228161103S101702A052419AYEXERG))
FREE PACKAGE(OD.OD7040.(19960229135951S101702Z236394AOD7040))
FREE PACKAGE(EX.YEXERG.(A))
FREE PACKAGE(KD.KD0068.(19960226131303S101702Z235794AKD0068))
FREE PACKAGE(EX.YEXERG.(19960226170142S101702A052326AYEXERG))
FREE PACKAGE(AT.YAT7010.(19951123S101702A049711AYAT7010))
FREE PACKAGE(WK.YWKLUBO.(19951123S101702Z220705AYWKLUBO))
FREE PACKAGE(KS.YKS5551.(19951123S101702A049861AYKS5551))
FREE PACKAGE(KS.YKS5552.(19951123S101702A049861AYKS5552))
FREE PACKAGE(KS.YKS5551.(19951201S101702A050046AYKS5551))
FREE PACKAGE(KS.YKS5552.(19951201S101702A050046AYKS5552))
FREE PACKAGE(PHPSPTA.SEDTRNS.())
FREE PACKAGE(PHPS53.SEDTRNS.())
FREE PACKAGE(PHPSPTA.H1051X.())
FREE PACKAGE(PHPS53.H1051X.())
FREE PACKAGE(PHPSPTA.H1100X.())
FREE PACKAGE(PHPS53.H1100X.())
FREE PACKAGE(PHPSPTA.H1101X.())
FREE PACKAGE(PHPS53.H1101X.())
FREE PACKAGE(WK.YWKLUBO.(19951130S101702M000610AYWKLUBO))
FREE PACKAGE(YY.YYCXCR.(19951130S101702A049675AYYCXCR))
FREE PACKAGE(NK.NK7800.(19951130S101702A049919ANK7800))
FREE PACKAGE(SA.YSAL001.(19951207S101702A050221AYSAL001))
FREE PACKAGE(BF.YBF530A.(19951207S101702M000634AYBF530A))
FREE PACKAGE(BF.YBF530C.(19951207S101702M000634AYBF530C))
FREE PACKAGE(YY.YYPTM12.(19951213S101702Z224731AYYPTM12))
FREE PACKAGE(YY.YYPTM12.(19951213S101702Z224682AYYPTM12))
FREE PACKAGE(YY.YYPTM12.(19951214S101702A050352AYYPTM12))
FREE PACKAGE(YY.YYCXCR.(19951214S101702A050270AYYCXCR))
FREE PACKAGE(AL.AL7501.(19951214S101702A050076AAL7501))
FREE PACKAGE(ED.YED0034.(19951214S101702A050106AYED0034))
FREE PACKAGE(WK.YWKLUBO.(19951214S101702M000611AYWKLUBO))
FREE PACKAGE(FC.FC0130.(19951214S101702A050488AFC0130))
FREE PACKAGE(FC.FC0110.(19951214S101702A050488AFC0110))
FREE PACKAGE(KS.YKS5551.(19951214S101702A050423AYKS5551))
FREE PACKAGE(KS.YKS5552.(19951214S101702A050423AYKS5552))
FREE PACKAGE(YY.YYPTM12.(19951214S101702Z224779AYYPTM12))
FREE PACKAGE(KS.YKSAUFT.(19951214S101702Z224822AYKSAUFT))
FREE PACKAGE(KS.YKSAUFT.(19951214S101702M000648AYKSAUFT))
FREE PACKAGE(PHPSPTA.H1115X2.())
FREE PACKAGE(PHPS53.H1115X2.())
FREE PACKAGE(KD.KD8096.(19951211S101702Z223940AKD8096))
FREE PACKAGE(BF.YBF530C.(19951212S101702Z224164AYBF530C))
FREE PACKAGE(YY.YYPTM12.(19951212S101702Z224373AYYPTM12))
FREE PACKAGE(PHPSPTA.H1051R.())
FREE PACKAGE(PHPS53.H1051R.())
FREE PACKAGE(PHPSPTA.H1112R.())
FREE PACKAGE(PHPS53.H1112R.())
FREE PACKAGE(PHPSPTA.H1101R.())
FREE PACKAGE(PHPS53.H1101R.())
FREE PACKAGE(PHPSPTA.H1100R.())
FREE PACKAGE(PHPS53.H1100R.())
FREE PACKAGE(PHPSPTA.H1102R.())
FREE PACKAGE(PHPS53.H1102R.())
FREE PACKAGE(PT.PT5500.(19951221S101702Z226191APT5500))
FREE PACKAGE(ED.YED0034.(19951221S101702A050529AYED0034))
FREE PACKAGE(NK.NK7050.(19951221S101702A050630ANK7050))
FREE PACKAGE(PT.PT5500.(19951217S101702Z225217APT5500))
FREE PACKAGE(KD.KD0630.(19951228S101702A050783AKD0630))
FREE PACKAGE(VT.VT5040.(19951231S101702Z227061AVT5040))
FREE PACKAGE(CD.YCDT10.(19960104S101702A050732AYCDT10))
FREE PACKAGE(NV.NVB903.())
FREE PACKAGE(PHPSPTA.H1145R.())
FREE PACKAGE(PHPS53.H1145R.())
FREE PACKAGE(PHPSPTA.H1143R.())
FREE PACKAGE(PHPS53.H1143R.())
FREE PACKAGE(PHPSPTA.H1144R.())
FREE PACKAGE(PHPS53.H1144R.())
FREE PACKAGE(PHPSPTA.H1148R.())
FREE PACKAGE(PHPS53.H1148R.())
FREE PACKAGE(PHPSPTA.H1149R.())
FREE PACKAGE(PHPS53.H1149R.())
FREE PACKAGE(PHPSPTA.H1146R.())
FREE PACKAGE(PHPS53.H1146R.())
FREE PACKAGE(PHPSPTA.H1147R.())
FREE PACKAGE(PHPS53.H1147R.())
FREE PACKAGE(PHPSPTA.H1152R.())
FREE PACKAGE(PHPS53.H1152R.())
FREE PACKAGE(PHPSPTA.H1150R.())
FREE PACKAGE(PHPS53.H1150R.())
FREE PACKAGE(PHPSPTA.H1151R.())
FREE PACKAGE(PHPS53.H1151R.())
FREE PACKAGE(PHPSPTA.H1155R.())
FREE PACKAGE(PHPS53.H1155R.())
FREE PACKAGE(PHPSPTA.H1156R.())
FREE PACKAGE(PHPS53.H1156R.())
FREE PACKAGE(PHPSPTA.H1153R.())
FREE PACKAGE(PHPS53.H1153R.())
FREE PACKAGE(PHPSPTA.H1154R.())
FREE PACKAGE(PHPS53.H1154R.())
FREE PACKAGE(PHPSPTA.H1157R.())
FREE PACKAGE(PHPS53.H1157R.())
FREE PACKAGE(PHPSPTA.H1158R.())
FREE PACKAGE(PHPS53.H1158R.())
FREE PACKAGE(PHPSPTA.H1122R.())
FREE PACKAGE(PHPS53.H1122R.())
FREE PACKAGE(PHPSPTA.H1120R.())
FREE PACKAGE(PHPS53.H1120R.())
FREE PACKAGE(PHPSPTA.H1121R.())
FREE PACKAGE(PHPS53.H1121R.())
FREE PACKAGE(PHPSPTA.H1125R.())
FREE PACKAGE(PHPS53.H1125R.())
FREE PACKAGE(PHPSPTA.H1123R.())
FREE PACKAGE(PHPS53.H1123R.())
FREE PACKAGE(PHPSPTA.H1124R.())
FREE PACKAGE(PHPS53.H1124R.())
FREE PACKAGE(PHPSPTA.H1128R.())
FREE PACKAGE(PHPS53.H1128R.())
FREE PACKAGE(PHPSPTA.H1126R.())
FREE PACKAGE(PHPS53.H1126R.())
FREE PACKAGE(PHPSPTA.H1127R.())
FREE PACKAGE(PHPS53.H1127R.())
FREE PACKAGE(PHPSPTA.H1131R.())
FREE PACKAGE(PHPS53.H1131R.())
FREE PACKAGE(PHPSPTA.H1132R.())
FREE PACKAGE(PHPS53.H1132R.())
FREE PACKAGE(PHPSPTA.H1129R.())
FREE PACKAGE(PHPS53.H1129R.())
FREE PACKAGE(PHPSPTA.H1130R.())
FREE PACKAGE(PHPS53.H1130R.())
FREE PACKAGE(PHPSPTA.H1135R.())
FREE PACKAGE(PHPS53.H1135R.())
FREE PACKAGE(PHPSPTA.H1133R.())
FREE PACKAGE(PHPS53.H1133R.())
FREE PACKAGE(PHPSPTA.H1134R.())
FREE PACKAGE(PHPS53.H1134R.())
FREE PACKAGE(PHPSPTA.H1136R.())
FREE PACKAGE(PHPS53.H1136R.())
FREE PACKAGE(PHPSPTA.H1137R.())
FREE PACKAGE(PHPS53.H1137R.())
FREE PACKAGE(PHPSPTA.H1142R.())
FREE PACKAGE(PHPS53.H1142R.())
FREE PACKAGE(PHPSPTA.H1140R.())
FREE PACKAGE(PHPS53.H1140R.())
FREE PACKAGE(PHPSPTA.H1141R.())
FREE PACKAGE(PHPS53.H1141R.())
FREE PACKAGE(FD.FD8100.(19960111S101702A051006AFD8100))
FREE PACKAGE(CD.YCDT10.(19960111S101702A050979AYCDT10))
FREE PACKAGE(WK.YWKLUBO.(19960111S101702M000636AYWKLUBO))
FREE PACKAGE(VT.YVT0731.(19960121S101702Z230461AYVT0731))
FREE PACKAGE(SX.YSXFLOG.(19960118S101702A051283AYSXFLOG))
FREE PACKAGE(RR.RR7130.(19960118S101702M000635ARR7130))
FREE PACKAGE(RP.RP7290.(19960119S101702A051340ARP7290))
FREE PACKAGE(BW.YBWAEW2.(19960509194857S101702A053995AYBWAEW2))
FREE PACKAGE(BW.YBWAEW9.(19960509194858S101702A053995AYBWAEW9))
FREE PACKAGE(BW.YBWAEW6.(19960509194857S101702A053995AYBWAEW6))
FREE PACKAGE(BW.YBWAE3X.(19960509194859S101702A053995AYBWAE3X))
FREE PACKAGE(BW.YBWAEW1.(19960509194856S101702A053995AYBWAEW1))
FREE PACKAGE(BW.YBWAEWN.(19960509194904S101702A053995AYBWAEWN))
FREE PACKAGE(BW.YBWAEWL.(19960509194902S101702A053995AYBWAEWL))
FREE PACKAGE(BW.YBWAEWM.(19960509194903S101702A053995AYBWAEWM))
FREE PACKAGE(BW.YBWAEWG.(19960509194901S101702A053995AYBWAEWG))
FREE PACKAGE(BW.YBWAO3W.(19960509194901S101702A053995AYBWAO3W))
FREE PACKAGE(BW.YBWAHD4.(19960509194900S101702A053995AYBWAHD4))
FREE PACKAGE(BX.YBXBI02.(19960509133250S101702A054054AYBXBI02))
FREE PACKAGE(WK.YWKLUBO.(19960509161344S101702M000640AYWKLUBO))
FREE PACKAGE(WB.YWB5901.(19960504154552S101702A053306AYWB5901))
FREE PACKAGE(WB.WB7460.(19960504154757S101702A053306AWB7460))
FREE PACKAGE(BF.BF6090.(19960514130419S101702Z248334ABF6090))
FREE PACKAGE(BF.BF6090.(19960514142627S101702Z248334ABF6090))
FREE PACKAGE(BF.BF6090.(19960514141319S101702Z248334ABF6090))
FREE PACKAGE(WK.YWKLUBO.(19960514071832S101702Z248142AYWKLUBO))
FREE PACKAGE(YY.YYDEAIS.(19960515132404S101702A054107AYYDEAIS))
FREE PACKAGE(YY.YYDAISF.(19960515132403S101702A054107AYYDAISF))
FREE PACKAGE(WK.YWKLUBO.(19960515160311S101702M000686AYWKLUBO))
FREE PACKAGE(VT.YVT0803.(19960515160337S101702M000686AYVT0803))
FREE PACKAGE(KS.YKSAUFT.(19960515160557S101702M000686AYKSAUFT))
FREE PACKAGE(VT.YVT0806.(19960515160339S101702M000686AYVT0806))
FREE PACKAGE(VT.YVT0805.(19960515160338S101702M000686AYVT0805))
FREE PACKAGE(VT.YVT0804.(19960515160338S101702M000686AYVT0804))
FREE PACKAGE(VT.YVT0809.(19960515160340S101702M000686AYVT0809))
FREE PACKAGE(VT.YVT0802.(19960515160337S101702M000686AYVT0802))
FREE PACKAGE(VT.YVT0801.(19960515160336S101702M000686AYVT0801))
FREE PACKAGE(KD.KD8096.(19960515153311S101702M000684AKD8096))
FREE PACKAGE(VT.YVT0803.(19960521160920S101702A054328AYVT0803))
FREE PACKAGE(VT.YVT0801.(19960521160919S101702A054328AYVT0801))
FREE PACKAGE(VT.YVT0805.(19960521160921S101702A054328AYVT0805))
FREE PACKAGE(VT.YVT0804.(19960521160920S101702A054328AYVT0804))
FREE PACKAGE(RP.RP7280.(19960521105717S101702Z249265ARP7280))
FREE PACKAGE(VP.YVP7402.(19960522110825S101702Z249496AYVP7402))
FREE PACKAGE(VP.YVP7401.(19960522110824S101702Z249496AYVP7401))
FREE PACKAGE(PHPSPTA.H0024R.())
FREE PACKAGE(PHPS53.H0024R.())
FREE PACKAGE(BF.BF6094.(19960528143214S101702Z250204ABF6094))
FREE PACKAGE(BF.BF6094.(19960528154545S101702Z250204ABF6094))
FREE PACKAGE(VP.YVP7401.(19960524122955S101702Z249868AYVP7401))
FREE PACKAGE(VP.YVP7402.(19960524122955S101702Z249868AYVP7402))
FREE PACKAGE(WK.YWKLUBO.(19960530161041S101702M000689AYWKLUBO))
FREE PACKAGE(BF.BF6094.(19960531144954S101702Z250854ABF6094))
FREE PACKAGE(BX.YBXBI02.(19960610091341S101702Z251974AYBXBI02))
FREE PACKAGE(OD.OD7180.(19960605122405S101702Z251474AOD7180))
FREE PACKAGE(OD.OD7180.(19960605130003S101702Z251474AOD7180))
FREE PACKAGE(OD.OD7190.(19960605160459S101702Z251541AOD7190))
FREE PACKAGE(OD.OD7200.(19960605162215S101702Z251546AOD7200))
FREE PACKAGE(RK.RK2390.(19960606134538S101702A053734ARK2390))
FREE PACKAGE(SA.YSAOBP.(19960606144320S101702A054730AYSAOBP))
FREE PACKAGE(OD.OD7190.(19960606075419S101702Z251583AOD7190))
FREE PACKAGE(OD.OD7200.(19960606082803S101702Z251591AOD7200))
FREE PACKAGE(FC.FC0130.(19960607085734S101702A054822AFC0130))
FREE PACKAGE(EX.YEXERG.(19960306164420S101702A052579AYEXERG))
FREE PACKAGE(OD.OD7040.(19960301130327S101702Z236556AOD7040))
FREE PACKAGE(BF.YBF530A.(19960302112542S101702Z236662AYBF530A))
FREE PACKAGE(EX.EX8888.(19960304133631S101702Z236837AEX8888))
FREE PACKAGE(EX.EX8888.(19960304163609S101702Z236837AEX8888))
FREE PACKAGE(RP.RP7280.(19960313181104S101702Z238416ARP7280))
FREE PACKAGE(BF.YBF530A.(19960307154206S101702Z237597AYBF530A))
FREE PACKAGE(ED.YEDSAM.(19960314161457S101702M000666AYEDSAM))
FREE PACKAGE(YY.YYDEAIS.(19960314161502S101702M000666AYYDEAIS))
FREE PACKAGE(YY.YYDAISF.(19960314161501S101702M000666AYYDAISF))
FREE PACKAGE(YY.YYDEPAY.(19960314161503S101702M000666AYYDEPAY))
FREE PACKAGE(VT.YVT0804.(19960314140008S101702A052610AYVT0804))
FREE PACKAGE(PHPSPTA.H0006R.())
FREE PACKAGE(PHPS53.H0006R.())
FREE PACKAGE(PHPSPTA.H0008R.())
FREE PACKAGE(PHPS53.H0008R.())
FREE PACKAGE(PHPSPTA.H0007R.())
FREE PACKAGE(PHPS53.H0007R.())
FREE PACKAGE(PHPSPTA.H0009R.())
FREE PACKAGE(PHPS53.H0009R.())
FREE PACKAGE(PHPSPTA.H0010R.())
FREE PACKAGE(PHPS53.H0010R.())
FREE PACKAGE(PHPSPTA.H0013R.())
FREE PACKAGE(PHPS53.H0013R.())
FREE PACKAGE(PHPSPTA.H0011R.())
FREE PACKAGE(PHPS53.H0011R.())
FREE PACKAGE(PHPSPTA.H0012R.())
FREE PACKAGE(PHPS53.H0012R.())
FREE PACKAGE(PHPSPTA.H0016R.())
FREE PACKAGE(PHPS53.H0016R.())
FREE PACKAGE(PHPSPTA.H0014R.())
FREE PACKAGE(PHPS53.H0014R.())
FREE PACKAGE(PHPSPTA.H0015R.())
FREE PACKAGE(PHPS53.H0015R.())
FREE PACKAGE(EX.YEXERG.(19960314141339S101702A052439AYEXERG))
FREE PACKAGE(PHPSPTA.H0002R.())
FREE PACKAGE(PHPS53.H0002R.())
FREE PACKAGE(PHPSPTA.H0003R.())
FREE PACKAGE(PHPS53.H0003R.())
FREE PACKAGE(PHPSPTA.H0005R.())
FREE PACKAGE(PHPS53.H0005R.())
FREE PACKAGE(PHPSPTA.H0004R.())
FREE PACKAGE(PHPS53.H0004R.())
FREE PACKAGE(PHPSPTA.H0058R.())
FREE PACKAGE(PHPS53.H0058R.())
FREE PACKAGE(PHPSPTA.H0056R.())
FREE PACKAGE(PHPS53.H0056R.())
FREE PACKAGE(PHPSPTA.H0057R.())
FREE PACKAGE(PHPS53.H0057R.())
FREE PACKAGE(PHPSPTA.H0061R.())
FREE PACKAGE(PHPS53.H0061R.())
FREE PACKAGE(PHPSPTA.H0059R.())
FREE PACKAGE(PHPS53.H0059R.())
FREE PACKAGE(PHPSPTA.H0060R.())
FREE PACKAGE(PHPS53.H0060R.())
FREE PACKAGE(PHPSPTA.H0065R.())
FREE PACKAGE(PHPS53.H0065R.())
FREE PACKAGE(PHPSPTA.H0062R.())
FREE PACKAGE(PHPS53.H0062R.())
FREE PACKAGE(PHPSPTA.H0063R.())
FREE PACKAGE(PHPS53.H0063R.())
FREE PACKAGE(PHPSPTA.H0068R.())
FREE PACKAGE(PHPS53.H0068R.())
FREE PACKAGE(PHPSPTA.H0066R.())
FREE PACKAGE(PHPS53.H0066R.())
FREE PACKAGE(PHPSPTA.H0067R.())
FREE PACKAGE(PHPS53.H0067R.())
FREE PACKAGE(PHPSPTA.H0072R.())
FREE PACKAGE(PHPS53.H0072R.())
FREE PACKAGE(PHPSPTA.H0069R.())
FREE PACKAGE(PHPS53.H0069R.())
FREE PACKAGE(PHPSPTA.H0070R.())
FREE PACKAGE(PHPS53.H0070R.())
FREE PACKAGE(PHPSPTA.H0019R.())
FREE PACKAGE(PHPS53.H0019R.())
FREE PACKAGE(PHPSPTA.H0017R.())
FREE PACKAGE(PHPS53.H0017R.())
FREE PACKAGE(PHPSPTA.H0018R.())
FREE PACKAGE(PHPS53.H0018R.())
FREE PACKAGE(PHPSPTA.H0022R.())
FREE PACKAGE(PHPS53.H0022R.())
FREE PACKAGE(PHPSPTA.H0020R.())
FREE PACKAGE(PHPS53.H0020R.())
FREE PACKAGE(PHPSPTA.H0021R.())
FREE PACKAGE(PHPS53.H0021R.())
FREE PACKAGE(PHPSPTA.H0023R.())
FREE PACKAGE(PHPS53.H0023R.())
FREE PACKAGE(PHPSPTA.H0033R.())
FREE PACKAGE(PHPS53.H0033R.())
FREE PACKAGE(PHPSPTA.H0026R.())
FREE PACKAGE(PHPS53.H0026R.())
FREE PACKAGE(PHPSPTA.H0039R.())
FREE PACKAGE(PHPS53.H0039R.())
FREE PACKAGE(PHPSPTA.H0034R.())
FREE PACKAGE(PHPS53.H0034R.())
FREE PACKAGE(PHPSPTA.H0038R.())
FREE PACKAGE(PHPS53.H0038R.())
FREE PACKAGE(PHPSPTA.H0042R.())
FREE PACKAGE(PHPS53.H0042R.())
FREE PACKAGE(PHPSPTA.H0040R.())
FREE PACKAGE(PHPS53.H0040R.())
FREE PACKAGE(PHPSPTA.H0041R.())
FREE PACKAGE(PHPS53.H0041R.())
FREE PACKAGE(PHPSPTA.H0045R.())
FREE PACKAGE(PHPS53.H0045R.())
FREE PACKAGE(PHPSPTA.H0043R.())
FREE PACKAGE(PHPS53.H0043R.())
FREE PACKAGE(PHPSPTA.H0044R.())
FREE PACKAGE(PHPS53.H0044R.())
FREE PACKAGE(PHPSPTA.H0048R.())
FREE PACKAGE(PHPS53.H0048R.())
FREE PACKAGE(PHPSPTA.H0046R.())
FREE PACKAGE(PHPS53.H0046R.())
FREE PACKAGE(PHPSPTA.H0047R.())
FREE PACKAGE(PHPS53.H0047R.())
FREE PACKAGE(PHPSPTA.H0053R.())
FREE PACKAGE(PHPS53.H0053R.())
FREE PACKAGE(PHPSPTA.H0051R.())
FREE PACKAGE(PHPS53.H0051R.())
FREE PACKAGE(PHPSPTA.H0052R.())
FREE PACKAGE(PHPS53.H0052R.())
FREE PACKAGE(PHPSPTA.H0055R.())
FREE PACKAGE(PHPS53.H0055R.())
FREE PACKAGE(PHPSPTA.H0054R.())
FREE PACKAGE(PHPS53.H0054R.())
FREE PACKAGE(GE.GE7620.(19960314200328S101702A052811AGE7620))
FREE PACKAGE(WK.YWKLUBO.(19960314201344S101702M000638AYWKLUBO))
FREE PACKAGE(YY.YYCXCR.(19960321135238S101702A052860AYYCXCR))
FREE PACKAGE(WK.YWK019A.(19960321174238S101702A052874AYWK019A))
FREE PACKAGE(KS.YKSAUFT.(19960409173948S101702A053018AYKSAUFT))
FREE PACKAGE(KS.YKSAUFT.(19960410132144S101702Z242748AYKSAUFT))
FREE PACKAGE(KS.YKSAUFT.(19960410140945S101702Z242764AYKSAUFT))
FREE PACKAGE(KS.YKSAUFT.(19960410154724S101702Z242818AYKSAUFT))
FREE PACKAGE(RE.RE8020.(19960411154156S101702A052875ARE8020))
FREE PACKAGE(WK.YWKLUBO.(19960411152854S101702M000639AYWKLUBO))
FREE PACKAGE(BX.YBXBI02.(19960411160932S101702A053228AYBXBI02))
FREE PACKAGE(BX.YBXBI02.(19960411170957S101702A053228AYBXBI02))
FREE PACKAGE(BF.YBF530A.(19960411173314S101702A053271AYBF530A))
FREE PACKAGE(WK.YWKLUBO.(19960411200336S101702M000639AYWKLUBO))
FREE PACKAGE(PHPSPTA.H1138R.())
FREE PACKAGE(PHPS53.H1138R.())
FREE PACKAGE(BW.YBWAEW1.(19960416143108S101702Z243792AYBWAEW1))
FREE PACKAGE(BX.YBXBI02.(19960417121909S101702Z244065AYBXBI02))
FREE PACKAGE(PHPSPTA.HMPGPNL.())
FREE PACKAGE(PHPS53.HMPGPNL.())
FREE PACKAGE(BW.YBWAEW1.(19960417141232S101702A053473AYBWAEW1))
FREE PACKAGE(BW.YBWAEW1.(19960417144123S101702A053473AYBWAEW1))
FREE PACKAGE(PHPSPTA.H0001R.())
FREE PACKAGE(PHPS53.H0001R.())
FREE PACKAGE(BW.YBWAEWM.(19960418160307S101702A053532AYBWAEWM))
FREE PACKAGE(BW.YBWAEW9.(19960418160310S101702A053532AYBWAEW9))
FREE PACKAGE(BW.YBWAE3X.(19960418160311S101702A053532AYBWAE3X))
FREE PACKAGE(BW.YBWAEWL.(19960418160303S101702A053532AYBWAEWL))
FREE PACKAGE(DX.DX0100.(19960418134338S101702M000672ADX0100))
FREE PACKAGE(FD.FD8100.(19960418134339S101702M000672AFD8100))
FREE PACKAGE(YY.YYCXCR.(19960418135815S101702A053388AYYCXCR))
FREE PACKAGE(KS.YKSAUFT.(19960418140918S101702A053458AYKSAUFT))
FREE PACKAGE(CD.YCDT10.(19960418140935S101702A053432AYCDT10))
FREE PACKAGE(YY.YYDAISF.(19960418152010S101702M000680AYYDAISF))
FREE PACKAGE(YY.YYDEAIS.(19960418152010S101702M000680AYYDEAIS))
FREE PACKAGE(BW.YBWAFIW.(19960425142258S101702A053631AYBWAFIW))
FREE PACKAGE(BW.YBWAFIY.(19960425142302S101702A053631AYBWAFIY))
FREE PACKAGE(BW.YBWAFIX.(19960425142301S101702A053631AYBWAFIX))
FREE PACKAGE(BW.YBWAFI2.(19960425142305S101702A053631AYBWAFI2))
FREE PACKAGE(BW.YBWAFI0.(19960425142303S101702A053631AYBWAFI0))
FREE PACKAGE(BW.YBWAFIZ.(19960425142302S101702A053631AYBWAFIZ))
FREE PACKAGE(BW.YBWAAGE.(19960425142305S101702A053631AYBWAAGE))
FREE PACKAGE(BW.YBWAPVY.(19960425142311S101702A053631AYBWAPVY))
FREE PACKAGE(BW.YBWAH56.(19960425142306S101702A053631AYBWAH56))
FREE PACKAGE(BW.YBWAFI1.(19960425142304S101702A053631AYBWAFI1))
FREE PACKAGE(BW.YBWAH57.(19960425142307S101702A053631AYBWAH57))
FREE PACKAGE(BW.YBWAPVZ.(19960425142311S101702A053631AYBWAPVZ))
FREE PACKAGE(BW.YBWAAGF.(19960425142315S101702A053631AYBWAAGF))
FREE PACKAGE(BW.YBWAXLQ.(19960425142313S101702A053631AYBWAXLQ))
FREE PACKAGE(OS.OS7240.(A))
FREE PACKAGE(KS.YKSAUFT.(19960423154952S101702A053648AYKSAUFT))
FREE PACKAGE(SAMDBOF.SP1SK1T.())
FREE PACKAGE(SAMDBOF.SP1SK3T.())
FREE PACKAGE(SAMDBOF.SP1SK2T.())
FREE PACKAGE(SAMDBOF.SP1SK5T.())
FREE PACKAGE(SAMDBOF.SP1SK4T.())
FREE PACKAGE(YY.YYDEPAY.(19960502135824S101702A053253AYYDEPAY))
FREE PACKAGE(BX.YBXBI02.(19960502144753S101702A053763AYBXBI02))
FREE PACKAGE(VP.YVP7401.(19960502160759S101702A053816AYVP7401))
FREE PACKAGE(VP.YVP7402.(19960502160803S101702A053816AYVP7402))
FREE PACKAGE(OS.DB2EBS01.(P))
FREE PACKAGE(A1P.PARTANA1.(A18Q000804))
FREE PACKAGE(BF.BF8651.(A06M015279))
FREE PACKAGE(SE.SE0560.(A20Y000523))
FREE PACKAGE(PHPSPTA.GARD001.())
FREE PACKAGE(PHPS53.GARD001.())
FREE PACKAGE(FRNIBMCL.FRNPLLQ1.())
FREE PACKAGE(BP.BP7120.(A20Y000665))
FREE PACKAGE(A2P.YKS0801.(A13X000702))
FREE PACKAGE(A1P.KS5780.(A13X000732))
FREE PACKAGE(A2P.KS5780.(A13X000732))
FREE PACKAGE(A1P.KS5800.(A13X000732))
FREE PACKAGE(A2P.KS5800.(A13X000732))
FREE PACKAGE(A1P.KS5330.(A13X000735))
FREE PACKAGE(A2P.KS5330.(A13X000735))
FREE PACKAGE(A1P.KS5330.(A13X000740))
FREE PACKAGE(A2P.KS5330.(A13X000740))
FREE PACKAGE(A1P.KS5800.(A13X000740))
FREE PACKAGE(A2P.KS5800.(A13X000740))
FREE PACKAGE(A1P.KS5780.(A13X000740))
FREE PACKAGE(A2P.KS5780.(A13X000740))
FREE PACKAGE(BP.BP7130.(A20Y000665))
FREE PACKAGE(BP.BP7042.(A20Y000615))
FREE PACKAGE(DAA400_D_MAIN.PSEBN13.(V3201))
FREE PACKAGE(BP.BP7200.(A20Y000648))
FREE PACKAGE(DB.DB2REORG.(PROD))
FREE PACKAGE(A1P.KS5780.(A13X000746))
FREE PACKAGE(A2P.KS5780.(A13X000746))
FREE PACKAGE(A1P.KS5800.(A13X000746))
FREE PACKAGE(A2P.KS5800.(A13X000746))
FREE PACKAGE(FRNCOL01.FRNA0010.())
FREE PACKAGE(FRNCOL01.FRNA0090.())
FREE PACKAGE(A2P.YKS0801.(A13X000736))
FREE PACKAGE(FRNCOL01.FRNV0010.())
FREE PACKAGE(BF.BF8651.(A06M018600))
FREE PACKAGE(BF.BF8655.(A06M018600))
FREE PACKAGE(MF.MF8150.(A06M020109))
FREE PACKAGE(MF.MF8900.(A06M020109))
FREE PACKAGE(MF.MF8230.(A06M020109))
FREE PACKAGE(GROUP00.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP01.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP02.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP03.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP04.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP05.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP06.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP07.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP08.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP09.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP10.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP11.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP12.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP13.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP14.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP15.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP16.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP17.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP18.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP19.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP20.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP21.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP22.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP23.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP24.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP25.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP26.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP27.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP28.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP29.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP30.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP31.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP32.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP33.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP34.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP35.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP36.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP37.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP38.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP39.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP40.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP41.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP42.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP43.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP44.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP45.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP46.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP47.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP48.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP49.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP50.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP51.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP52.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP53.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP54.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP55.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP56.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP57.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP58.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP59.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP60.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP61.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP62.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP63.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP64.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP65.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP66.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP67.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP68.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP69.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP70.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP71.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP72.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP73.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP74.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP75.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP76.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP77.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP78.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP79.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP80.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP81.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP82.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP83.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP84.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP85.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP86.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP87.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP88.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP89.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP90.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP91.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP92.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP93.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP94.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP95.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP96.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP97.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP98.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP99.CBRHDBS.(399935218383464102))
FREE PACKAGE(GROUP00.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP01.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP02.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP03.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP04.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP05.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP06.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP07.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP08.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP09.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP10.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP11.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP12.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP13.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP14.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP15.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP16.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP17.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP18.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP19.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP20.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP21.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP22.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP23.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP24.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP25.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP26.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP27.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP28.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP29.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP30.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP31.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP32.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP33.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP34.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP35.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP36.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP37.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP38.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP39.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP40.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP41.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP42.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP43.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP44.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP45.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP46.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP47.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP48.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP49.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP50.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP51.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP52.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP53.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP54.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP55.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP56.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP57.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP58.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP59.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP60.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP61.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP62.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP63.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP64.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP65.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP66.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP67.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP68.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP69.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP70.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP71.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP72.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP73.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP74.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP75.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP76.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP77.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP78.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP79.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP80.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP81.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP82.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP83.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP84.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP85.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP86.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP87.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP88.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP89.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP90.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP91.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP92.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP93.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP94.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP95.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP96.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP97.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP98.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(GROUP99.CBRIDBS.(UW83215HDZ11F0))
FREE PACKAGE(CBRHTBSV.CBRHTBSV.(2001-10-13-07.42.57.947861))
FREE PACKAGE(CBRKCMT.CBRKCMT.(496778316382894076))
FREE PACKAGE(CBRKCMI.CBRKCMI.(2001-10-13-07.52.05.021153))
FREE PACKAGE(CBRKCME.CBRKCME.(2001-10-13-07.52.05.555969))
FREE PACKAGE(CBRKISQL.CBRKISQL.(2001-10-13-07.52.02.718127))
FREE PACKAGE(CBRKCMF.CBRKCMF.(2001-10-13-07.52.03.537835))
FREE PACKAGE(CBRKCMR.CBRKCMR.(2001-10-13-07.52.07.338503))
FREE PACKAGE(CBRKCMD.CBRKCMD.(2001-10-13-07.52.12.042110))
FREE PACKAGE(CBRHCLMK.CBRHCLMK.(2001-10-13-07.27.03.676666))
FREE PACKAGE(CBRHCLSG.CBRHCLSG.(2001-10-13-07.27.08.841977))
FREE PACKAGE(CBRHCAUD.CBRHCAUD.(2001-10-13-07.26.46.301597))
FREE PACKAGE(CBRHCLLU.CBRHCLLU.(2001-10-13-07.26.46.343786))
FREE PACKAGE(CBRHCLDL.CBRHCLDL.(2001-10-13-07.26.50.951657))
FREE PACKAGE(GROUP00.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP01.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP02.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP03.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP04.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP05.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP06.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP07.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP08.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP09.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP10.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP11.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP12.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP13.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP14.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP15.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP16.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP17.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP18.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP19.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP20.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP21.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP22.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP23.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP24.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP25.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP26.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP27.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP28.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP29.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP30.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP31.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP32.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP33.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP34.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP35.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP36.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP37.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP38.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP39.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP40.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP41.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP42.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP43.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP44.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP45.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP46.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP47.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP48.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP49.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP50.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP51.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP52.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP53.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP54.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP55.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP56.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP57.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP58.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP59.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP60.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP61.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP62.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP63.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP64.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP65.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP66.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP67.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP68.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP69.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP70.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP71.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP72.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP73.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP74.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP75.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP76.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP77.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP78.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP79.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP80.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP81.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP82.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP83.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP84.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP85.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP86.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP87.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP88.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP89.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP90.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP91.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP92.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP93.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP94.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP95.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP96.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP97.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP98.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP99.CBRHDBCV.(294249629382893950))
FREE PACKAGE(GROUP00.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP01.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP02.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP03.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP04.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP05.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP06.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP07.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP08.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP09.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP10.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP11.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP12.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP13.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP14.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP15.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP16.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP17.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP18.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP19.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP20.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP21.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP22.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP23.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP24.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP25.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP26.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP27.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP28.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP29.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP30.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP31.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP32.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP33.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP34.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP35.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP36.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP37.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP38.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP39.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP40.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP41.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP42.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP43.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP44.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP45.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP46.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP47.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP48.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP49.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP50.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP51.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP52.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP53.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP54.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP55.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP56.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP57.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP58.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP59.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP60.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP61.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP62.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP63.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP64.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP65.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP66.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP67.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP68.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP69.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP70.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP71.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP72.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP73.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP74.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP75.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP76.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP77.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP78.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP79.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP80.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP81.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP82.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP83.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP84.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP85.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP86.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP87.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP88.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP89.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP90.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP91.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP92.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP93.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP94.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP95.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP96.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP97.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP98.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP99.CBRHDBSD.(118038573382893951))
FREE PACKAGE(GROUP00.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP01.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP02.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP03.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP04.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP05.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP06.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP07.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP08.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP09.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP10.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP11.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP12.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP13.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP14.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP15.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP16.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP17.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP18.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP19.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP20.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP21.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP22.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP23.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP24.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP25.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP26.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP27.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP28.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP29.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP30.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP31.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP32.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP33.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP34.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP35.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP36.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP37.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP38.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP39.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP40.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP41.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP42.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP43.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP44.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP45.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP46.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP47.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP48.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP49.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP50.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP51.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP52.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP53.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP54.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP55.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP56.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP57.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP58.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP59.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP60.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP61.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP62.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP63.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP64.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP65.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP66.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP67.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP68.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP69.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP70.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP71.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP72.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP73.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP74.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP75.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP76.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP77.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP78.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP79.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP80.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP81.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP82.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP83.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP84.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP85.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP86.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP87.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP88.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP89.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP90.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP91.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP92.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP93.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP94.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP95.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP96.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP97.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP98.CBRHDBS.(368069393382893951))
FREE PACKAGE(GROUP99.CBRHDBS.(368069393382893951))
FREE PACKAGE(CZ.CZ6060.(CRME000713))
FREE PACKAGE(SE.SE0560.(A20Y000517))
FREE PACKAGE(SE.SE0560.(A20Y000936))
FREE PACKAGE(DAA400_D_MAIN.PSSRULE.(V3401))
FREE PACKAGE(FRNCOL01.FRNV0090.())
FREE PACKAGE(DAA400_D_MAIN.PSSHSQL.(V4000))
FREE PACKAGE(DAA400_D_MAIN.PSSIMPC.(V4000))
FREE PACKAGE(BF.YBF530A.(19980416230450S101702M000838AYBF530A))
FREE PACKAGE(AV.YAV0491.(19980416230442S101702M000838AYAV0491))
FREE PACKAGE(AV.YAV0492.(19980416230443S101702M000838AYAV0492))
FREE PACKAGE(BF.YBF530C.(19980416230451S101702M000838AYBF530C))
FREE PACKAGE(WK.YWKLUBO.(19980416231747S101702M000838AYWKLUBO))
FREE PACKAGE(WK.YWK019A.(19980416231839S101702M000838AYWK019A))
FREE PACKAGE(YY.YYFIKUR.(19980416232808S101702M000838AYYFIKUR))
FREE PACKAGE(YY.YYFIBPR.(19980416232803S101702M000838AYYFIBPR))
FREE PACKAGE(YY.YYFIKUR.(19980416232808CGS101702M000838AYYFIKUR))
FREE PACKAGE(BG.BG5030.(19980417004708S101702M000838ABG5030))
FREE PACKAGE(VT.YVTAFS.(19980416170514S101702M000874AYVTAFS))
FREE PACKAGE(SA.SA0980.(19980416172032S101702M000874ASA0980))
FREE PACKAGE(RR.RR8050.(19980416192336S101702M000898ARR8050))
FREE PACKAGE(RR.RR0210.(19980416192021S101702M000898ARR0210))
FREE PACKAGE(RR.RR0180.(19980416191920S101702M000898ARR0180))
FREE PACKAGE(ED.YED0034.(19980416190527S101702M000898AYED0034))
FREE PACKAGE(RR.RR8100.(19980416191507S101702M000898ARR8100))
FREE PACKAGE(RR.RR8220.(19980416191508S101702M000898ARR8220))
FREE PACKAGE(RR.RR0060.(19980416191916S101702M000898ARR0060))
FREE PACKAGE(BG.BG5030.(19980417164021S101702M000838ABG5030))
FREE PACKAGE(WK.YWK019A.(19980417151206S101702M000838AYWK019A))
FREE PACKAGE(YY.YYFIBPR.(19980417151921S101702M000838AYYFIBPR))
FREE PACKAGE(YY.YYFIKUR.(19980417151937S101702M000838AYYFIKUR))
FREE PACKAGE(BF.YBF530A.(19980417145719S101702M000838AYBF530A))
FREE PACKAGE(BF.YBF530C.(19980417145719S101702M000838AYBF530C))
FREE PACKAGE(AV.YAV0492.(19980417145714S101702M000838AYAV0492))
FREE PACKAGE(AV.YAV0491.(19980417145713S101702M000838AYAV0491))
FREE PACKAGE(YY.YYFIKUR.(19980417151937CGS101702M000838AYYFIKUR))
FREE PACKAGE(WK.YWKLUBO.(19980417151059S101702M000838AYWKLUBO))
FREE PACKAGE(WK.YWKLUBO.(19980424142817S101702Z371584AYWKLUBO))
FREE PACKAGE(AV.PB7100.(19980429143617S101702Z372375APB7100))
FREE PACKAGE(RM.RM9200.(19980430141653S101702A072046ARM9200))
FREE PACKAGE(EC.EC8140.(19980430141651S101702A072032AEC8140))
FREE PACKAGE(PT.PT8490.(19980430141812S101702A072050APT8490))
FREE PACKAGE(PHPSPTA.HAXPRST.())
FREE PACKAGE(PHPS53.HAXPRST.())
FREE PACKAGE(WB.WB7430.(19980507164320S101702A072243AWB7430))
FREE PACKAGE(WB.WB7530.(19980507164321S101702A072243AWB7530))
FREE PACKAGE(KS.YKS5551.(19980507134024S101702A072187AYKS5551))
FREE PACKAGE(NTA1P.AT0090.(CIMA000675))
FREE PACKAGE(KS.YKS0813.(19980516114927S101702Z374928AYKS0813))
FREE PACKAGE(PHPSPTA.GLCNVRT.())
FREE PACKAGE(PHPS53.GLCNVRT.())
FREE PACKAGE(NTA1P.BC0008.(CRMB000360))
FREE PACKAGE(NF.NF5800.(19980514184411S101702A072505ANF5800))
FREE PACKAGE(KS.YKS0813.(19980514190151S101702A072512AYKS0813))
FREE PACKAGE(KS.YKS0806.(19980514190144S101702A072512AYKS0806))
FREE PACKAGE(KS.YKS0802.(19980514190209S101702A072512AYKS0802))
FREE PACKAGE(EX.YEXERG.(19980514135917S101702A072308AYEXERG))
FREE PACKAGE(EX.YEXERG.(19980514135917CGS101702A072308AYEXERG))
FREE PACKAGE(KS.YKS5551.(19980514140042S101702A072309AYKS5551))
FREE PACKAGE(PT.PT8550.(19980514142122S101702A072418APT8550))
FREE PACKAGE(CI.YCI009.(19980514165332S101702M000860AYCI009))
FREE PACKAGE(CI.YCI009A.(19980514165332S101702M000860AYCI009A))
FREE PACKAGE(NK.NK8060.(19980514170635S101702M000860ANK8060))
FREE PACKAGE(NK.NK7000.(19980514170631S101702M000860ANK7000))
FREE PACKAGE(NK.NK5130.(19980514170630S101702M000860ANK5130))
FREE PACKAGE(NK.NK8010.(19980514170632S101702M000860ANK8010))
FREE PACKAGE(NK.NK8050.(19980514170633S101702M000860ANK8050))
FREE PACKAGE(NK.NK8030.(19980514170633S101702M000860ANK8030))
FREE PACKAGE(CD.CD7360.(19980514170508S101702M000860ACD7360))
FREE PACKAGE(AS.AS8992.(19980514171537S101702M000860AAS8992))
FREE PACKAGE(AT.AT7225.(19980514171958S101702A072293AAT7225))
FREE PACKAGE(NK.NK8180.(19980514170648S101702M000860ANK8180))
FREE PACKAGE(NK.NK5020.(19980514170627S101702M000860ANK5020))
FREE PACKAGE(NK.NK5010.(19980514170627S101702M000860ANK5010))
FREE PACKAGE(NK.NK5120.(19980514170629S101702M000860ANK5120))
FREE PACKAGE(NK.NK5170.(19980514170630S101702M000860ANK5170))
FREE PACKAGE(NK.NK5050.(19980514170628S101702M000860ANK5050))
FREE PACKAGE(BF.YBF530C.(19980514171120S101702A072190AYBF530C))
FREE PACKAGE(BF.YBF530A.(19980514170908S101702A072190AYBF530A))
FREE PACKAGE(WK.YWKLUBO.(19980515095019S101702M000839AYWKLUBO))
FREE PACKAGE(YY.YYFISER.(19980515095453S101702M000839AYYFISER))
FREE PACKAGE(BG.BG5030.(19980515101751S101702M000839ABG5030))
FREE PACKAGE(AV.AV8780.(19980515101750S101702M000839AAV8780))
FREE PACKAGE(AV.YAV0491.(19980520132114S101702M000911AYAV0491))
FREE PACKAGE(KS.YKS5552.(19980520132122S101702A072626AYKS5552))
FREE PACKAGE(AV.YAV0492.(19980520132114S101702M000911AYAV0492))
FREE PACKAGE(SX.YSX8105.(19980520140317S101702M000912AYSX8105))
FREE PACKAGE(PT.YPTBAK.(19980520142938S101702A072384AYPTBAK))
FREE PACKAGE(AV.YAV0491.(19980216163702S101702Z360000AYAV0491))
FREE PACKAGE(AV.YAV0492.(19980216094354S101702Z360001AYAV0492))
FREE PACKAGE(AV.YAV0491.(19980216094309S101702Z360000AYAV0491))
FREE PACKAGE(AV.YAV0491.(19980216232923S101702Z360000AYAV0491))
FREE PACKAGE(AV.YAV0492.(19980217190815S101702Z360615AYAV0492))
FREE PACKAGE(AV.YAV0491.(19980217190729S101702Z360614AYAV0491))
FREE PACKAGE(VT.YVT0623.(19980217150354S101702A070537AYVT0623))
FREE PACKAGE(YY.YYFIKUR.(19980212144259S101702M000834AYYFIKUR))
FREE PACKAGE(KS.YKSMODU.(19980212144151S101702M000834AYKSMODU))
FREE PACKAGE(KS.YKSAUFT.(19980212144151S101702M000834AYKSAUFT))
FREE PACKAGE(YY.YYFIKUR.(19980212144259CGS101702M000834AYYFIKUR))
FREE PACKAGE(AV.YAV0492.(19980212144910S101702M000834AYAV0492))
FREE PACKAGE(AV.YAV0491.(19980212144909S101702M000834AYAV0491))
FREE PACKAGE(NF.NF5890.(19980212145537S101702M000834ANF5890))
FREE PACKAGE(RR.RR8050.(19980212150044S101702M000834ARR8050))
FREE PACKAGE(WK.YWKLUBO.(19980212171239S101702M000836AYWKLUBO))
FREE PACKAGE(SA.YSA0234.(19980212130815S101702M000885AYSA0234))
FREE PACKAGE(SA.YSA0235.(19980212130815S101702M000885AYSA0235))
FREE PACKAGE(SA.YSA0231.(19980212130817S101702M000885AYSA0231))
FREE PACKAGE(SA.YSA0232.(19980212130817S101702M000885AYSA0232))
FREE PACKAGE(SA.YSA0233.(19980212130818S101702M000885AYSA0233))
FREE PACKAGE(DU.DU7070.(19980212134113S101702A070276ADU7070))
FREE PACKAGE(VT.YVT0802.(19980212134231S101702A070371AYVT0802))
FREE PACKAGE(VT.YVT0806.(19980212134234S101702A070371AYVT0806))
FREE PACKAGE(VT.YVT0809.(19980212134236S101702A070371AYVT0809))
FREE PACKAGE(VT.YVT0805.(19980212134233S101702A070371AYVT0805))
FREE PACKAGE(VT.YVT0801.(19980212134230S101702A070371AYVT0801))
FREE PACKAGE(VT.YVT0804.(19980212134232S101702A070371AYVT0804))
FREE PACKAGE(VT.YVT0803.(19980212134231S101702A070371AYVT0803))
FREE PACKAGE(SA.YSAOBP.(19980212191614S101702M000891AYSAOBP))
FREE PACKAGE(SX.SX0750.(19980212191931S101702M000891ASX0750))
FREE PACKAGE(AV.YAV0491.(19980218153923S101702Z360822AYAV0491))
FREE PACKAGE(NK.NK8150.(19980219182538S101702A070555ANK8150))
FREE PACKAGE(KS.YKS5553.(19980219190855S101702A070545AYKS5553))
FREE PACKAGE(AV.YAV0492.(19980219191324S101702A070586AYAV0492))
FREE PACKAGE(AV.YAV0491.(19980219191321S101702A070586AYAV0491))
FREE PACKAGE(VT.VT7798.(19980220130604S101702A070613AVT7798))
FREE PACKAGE(VP.YVP7401.(19980220093422S101702Z360998AYVP7401))
FREE PACKAGE(KS.YKS5553.(19980220190032S101702A070545AYKS5553))
FREE PACKAGE(VT.YVT0731.(19980302164021S101702A070775AYVT0731))
FREE PACKAGE(VP.YVP7401.(19980226131233S101702A070664AYVP7401))
FREE PACKAGE(NK.NK8300.(19980226131317S101702A070680ANK8300))
FREE PACKAGE(AV.YAV0492.(19980226131307S101702A070685AYAV0492))
FREE PACKAGE(AV.YAV0491.(19980226131304S101702A070685AYAV0491))
FREE PACKAGE(YY.YYCXCR.(19980226131415S101702A070718AYYCXCR))
FREE PACKAGE(YY.YYDEPAY.(19980226135927S101702A070724AYYDEPAY))
FREE PACKAGE(LB.YLB0115.(19980305182800S101702M000837AYLB0115))
FREE PACKAGE(AV.YAV0492.(19980305182323S101702M000837AYAV0492))
FREE PACKAGE(WK.YWKLUBO.(19980305180826S101702M000837AYWKLUBO))
FREE PACKAGE(AV.YAV0491.(19980305182245S101702M000837AYAV0491))
FREE PACKAGE(LB.YLB0113.(19980305182743S101702M000837AYLB0113))
FREE PACKAGE(VT.YVT0623.(19980305141315S101702A070824AYVT0623))
FREE PACKAGE(SE.YSE0310.(19980312140704S101702A071005AYSE0310))
FREE PACKAGE(KS.YKS0802.(19980312140727S101702A071004AYKS0802))
FREE PACKAGE(KS.YKS0806.(19980312140715S101702A071004AYKS0806))
FREE PACKAGE(EC.YECAVKY.(19980312162557S101702A070997AYECAVKY))
FREE PACKAGE(EC.YECAVKY.(19980312175734S101702A070997AYECAVKY))
FREE PACKAGE(SX.YSX8105.(19980320112646S101702A071216AYSX8105))
FREE PACKAGE(SX.YSX5405.(19980320071931S101702Z365731AYSX5405))
FREE PACKAGE(SX.YSX5405.(19980320083218S101702A071206AYSX5405))
FREE PACKAGE(PI.PT5310.(19980316142018S101702A071106APT5310))
FREE PACKAGE(PT.PT5310.(19980316142018S101702A071106APT5310))
FREE PACKAGE(PI.PT5500.(19980316142018S101702A071106APT5500))
FREE PACKAGE(PT.PT5500.(19980316142018S101702A071106APT5500))
FREE PACKAGE(PI.PT5310.(19980316145200S101702A071106APT5310))
FREE PACKAGE(PT.PT5310.(19980316145200S101702A071106APT5310))
FREE PACKAGE(PI.PT5500.(19980316145200S101702A071106APT5500))
FREE PACKAGE(PT.PT5500.(19980316145200S101702A071106APT5500))
FREE PACKAGE(PI.PT5500.(19980316155306S101702A071106APT5500))
FREE PACKAGE(PT.PT5500.(19980316155306S101702A071106APT5500))
FREE PACKAGE(PI.PT5310.(19980316155305S101702A071106APT5310))
FREE PACKAGE(PT.PT5310.(19980316155305S101702A071106APT5310))
FREE PACKAGE(AV.YAV0492.(19980316171625S101702Z365003AYAV0492))
FREE PACKAGE(AV.YAV0491.(19980316171545S101702Z365002AYAV0491))
FREE PACKAGE(NTA1P.AT0070.(CIMA000663))
FREE PACKAGE(EV.EV5080.(19980319140048S101702A070940AEV5080))
FREE PACKAGE(YY.EV0520.(19980319140102S101702A070940AEV0520))
FREE PACKAGE(SX.YSXFLOG.(19980319145352S101702M000893AYSXFLOG))
FREE PACKAGE(SA.YSA67S1.(19980319145252S101702M000893AYSA67S1))
FREE PACKAGE(SX.YSX5405.(19980319145256S101702M000893AYSX5405))
FREE PACKAGE(SX.YSX81S1.(19980319145410S101702M000893AYSX81S1))
FREE PACKAGE(SX.YSX8105.(19980319145430S101702M000893AYSX8105))
FREE PACKAGE(RR.RR0240.(19980319142249S101702A071155ARR0240))
FREE PACKAGE(RR.RR0180.(19980319142247S101702A071155ARR0180))
FREE PACKAGE(RR.RR0210.(19980319142248S101702A071155ARR0210))
FREE PACKAGE(SA.SA5170.(19980319145848S101702M000893ASA5170))
FREE PACKAGE(AV.YAV0491.(19980319155434S101702M000894AYAV0491))
FREE PACKAGE(AV.YAV0492.(19980319155435S101702M000894AYAV0492))
FREE PACKAGE(RR.RR0060.(19980326141010S101702A071251ARR0060))
FREE PACKAGE(VP.VP7410.(19980401210424S101702Z367944AVP7410))
FREE PACKAGE(VP.VP7410.(19980402142025S101702A071473AVP7410))
FREE PACKAGE(SX.YSX8105.(19980402142035S101702A071385AYSX8105))
FREE PACKAGE(SX.YSX81S1.(19980402142033S101702A071385AYSX81S1))
FREE PACKAGE(SA.SA0980.(19980402142445S101702A071385ASA0980))
FREE PACKAGE(RR.RR0060.(19980402140829S101702A071359ARR0060))
FREE PACKAGE(RR.RR8050.(19980402140836S101702A071359ARR8050))
FREE PACKAGE(YY.YYWBTMS.(19980402145954S101702A071235AYYWBTMS))
FREE PACKAGE(AV.YAV0491.(19980402152529S101702A071451AYAV0491))
FREE PACKAGE(AV.YAV0492.(19980402152532S101702A071451AYAV0492))
FREE PACKAGE(RR.RR7510.(19980402152456S101702A071430ARR7510))
FREE PACKAGE(RR.RR7530.(19980402152459S101702A071430ARR7530))
FREE PACKAGE(CD.CD7360.(19980402152138S101702A071420ACD7360))
FREE PACKAGE(RR.RR7510.(19980402174722S101702A071430ARR7510))
FREE PACKAGE(AV.YAV0492.(19980402174757S101702A071451AYAV0492))
FREE PACKAGE(EC.EC8140.(19980402174847S101702A071444AEC8140))
FREE PACKAGE(RR.RR7530.(19980402174728S101702A071430ARR7530))
FREE PACKAGE(AV.YAV0491.(19980402174755S101702A071451AYAV0491))
FREE PACKAGE(CD.CD7360.(19980402174642S101702A071420ACD7360))
FREE PACKAGE(YY.YYWBTMS.(19980402173431S101702A071235AYYWBTMS))
FREE PACKAGE(YY.YYWBTMS.(19980402184148S101702A071235AYYWBTMS))
FREE PACKAGE(SX.YSX5405.(19980403101803S101702A071482AYSX5405))
FREE PACKAGE(SX.YSX5405.(19980403085402S101702Z368118AYSX5405))
FREE PACKAGE(EC.YECAVKY.(19980403141026S101702A071472AYECAVKY))
FREE PACKAGE(YY.YYWBTMS.(19980403150226S101702A071235AYYWBTMS))
FREE PACKAGE(KS.YKS5551.(19980403151109S101702Z368246AYKS5551))
FREE PACKAGE(RR.RR7510.(19980330165030S101702Z367465ARR7510))
FREE PACKAGE(VT.YVTAFS.(19980409113931S101702Z369138AYVTAFS))
FREE PACKAGE(SA.YSAT805.(19980409192933S101702A071661AYSAT805))
FREE PACKAGE(SA.YSAT803.(19980409192932S101702A071661AYSAT803))
FREE PACKAGE(SA.YSAT801.(19980409192934S101702A071661AYSAT801))
FREE PACKAGE(SA.YSAT802.(19980409192934S101702A071661AYSAT802))
FREE PACKAGE(SA.YSA67S1.(19980409192933S101702A071661AYSA67S1))
FREE PACKAGE(PHPSPTA.HMPBNDR4.())
FREE PACKAGE(PHPS53.HMPBNDR4.())
FREE PACKAGE(PHPSPTA.GTTOGGL.())
FREE PACKAGE(PHPS53.GTTOGGL.())
FREE PACKAGE(YY.YYWBTMS.(19980406113742S101702A071510AYYWBTMS))
FREE PACKAGE(SA.YSA67S1.(A16M000011))
FREE PACKAGE(AS.AS8992.(A15T000038))
FREE PACKAGE(FRNIBMCL.FRNMHB10.())
FREE PACKAGE(FRNIBMCL.FRNMHB12.())
FREE PACKAGE(FRNIBMCL.FRNPLLQ3.())
FREE PACKAGE(FRNIBMCL.FRNPLLUQ.())
FREE PACKAGE(FRNIBMCL.FRNPLLQ4.())
FREE PACKAGE(PHPSPTA.HMCCFGV.())
FREE PACKAGE(PHPS53.HMCCFGV.())
FREE PACKAGE(PHPSPTA.H0038.())
FREE PACKAGE(PHPS53.H0038.())
FREE PACKAGE(PHPSPTA.H0039.())
FREE PACKAGE(PHPS53.H0039.())
FREE PACKAGE(PHPSPTA.H0026.())
FREE PACKAGE(PHPS53.H0026.())
FREE PACKAGE(PHPSPTA.H0033.())
FREE PACKAGE(PHPS53.H0033.())
FREE PACKAGE(PHPSPTA.H0034.())
FREE PACKAGE(PHPS53.H0034.())
FREE PACKAGE(PHPSPTA.H0035.())
FREE PACKAGE(PHPS53.H0035.())
FREE PACKAGE(PHPSPTA.H0043.())
FREE PACKAGE(PHPS53.H0043.())
FREE PACKAGE(PHPSPTA.H0044.())
FREE PACKAGE(PHPS53.H0044.())
FREE PACKAGE(PHPSPTA.H0040.())
FREE PACKAGE(PHPS53.H0040.())
FREE PACKAGE(PHPSPTA.H0041.())
FREE PACKAGE(PHPS53.H0041.())
FREE PACKAGE(PHPSPTA.H0042.())
FREE PACKAGE(PHPS53.H0042.())
FREE PACKAGE(PHPSPTA.H0048.())
FREE PACKAGE(PHPS53.H0048.())
FREE PACKAGE(PHPSPTA.H0045.())
FREE PACKAGE(PHPS53.H0045.())
FREE PACKAGE(PHPSPTA.H0046.())
FREE PACKAGE(PHPS53.H0046.())
FREE PACKAGE(PHPSPTA.H0047.())
FREE PACKAGE(PHPS53.H0047.())
FREE PACKAGE(PHPSPTA.H0002.())
FREE PACKAGE(PHPS53.H0002.())
FREE PACKAGE(PHPSPTA.H0005.())
FREE PACKAGE(PHPS53.H0005.())
FREE PACKAGE(PHPSPTA.H0006.())
FREE PACKAGE(PHPS53.H0006.())
FREE PACKAGE(PHPSPTA.H0003.())
FREE PACKAGE(PHPS53.H0003.())
FREE PACKAGE(PHPSPTA.H0004.())
FREE PACKAGE(PHPS53.H0004.())
FREE PACKAGE(PHPSPTA.H0007.())
FREE PACKAGE(PHPS53.H0007.())
FREE PACKAGE(PHPSPTA.H0008.())
FREE PACKAGE(PHPS53.H0008.())
FREE PACKAGE(PHPSPTA.H0009.())
FREE PACKAGE(PHPS53.H0009.())
FREE PACKAGE(PHPSPTA.H0015.())
FREE PACKAGE(PHPS53.H0015.())
FREE PACKAGE(PHPSPTA.H0011.())
FREE PACKAGE(PHPS53.H0011.())
FREE PACKAGE(PHPSPTA.H0012.())
FREE PACKAGE(PHPS53.H0012.())
FREE PACKAGE(PHPSPTA.H0013.())
FREE PACKAGE(PHPS53.H0013.())
FREE PACKAGE(PHPSPTA.H0019.())
FREE PACKAGE(PHPS53.H0019.())
FREE PACKAGE(PHPSPTA.H0016.())
FREE PACKAGE(PHPS53.H0016.())
FREE PACKAGE(PHPSPTA.H0017.())
FREE PACKAGE(PHPS53.H0017.())
FREE PACKAGE(PHPSPTA.H0018.())
FREE PACKAGE(PHPS53.H0018.())
FREE PACKAGE(PHPSPTA.H0025.())
FREE PACKAGE(PHPS53.H0025.())
FREE PACKAGE(PHPSPTA.H0020.())
FREE PACKAGE(PHPS53.H0020.())
FREE PACKAGE(PHPSPTA.H0021.())
FREE PACKAGE(PHPS53.H0021.())
FREE PACKAGE(PHPSPTA.H0022.())
FREE PACKAGE(PHPS53.H0022.())
FREE PACKAGE(PHPSPTA.H0023.())
FREE PACKAGE(PHPS53.H0023.())
FREE PACKAGE(PHPSPTA.H0105.())
FREE PACKAGE(PHPS53.H0105.())
FREE PACKAGE(PHPSPTA.H0106.())
FREE PACKAGE(PHPS53.H0106.())
FREE PACKAGE(PHPSPTA.H0102.())
FREE PACKAGE(PHPS53.H0102.())
FREE PACKAGE(PHPSPTA.H0103.())
FREE PACKAGE(PHPS53.H0103.())
FREE PACKAGE(PHPSPTA.H0104.())
FREE PACKAGE(PHPS53.H0104.())
FREE PACKAGE(PHPSPTA.H0051.())
FREE PACKAGE(PHPS53.H0051.())
FREE PACKAGE(PHPSPTA.H0052.())
FREE PACKAGE(PHPS53.H0052.())
FREE PACKAGE(PHPSPTA.H0056.())
FREE PACKAGE(PHPS53.H0056.())
FREE PACKAGE(PHPSPTA.H0057.())
FREE PACKAGE(PHPS53.H0057.())
FREE PACKAGE(PHPSPTA.H0053.())
FREE PACKAGE(PHPS53.H0053.())
FREE PACKAGE(PHPSPTA.H0054.())
FREE PACKAGE(PHPS53.H0054.())
FREE PACKAGE(PHPSPTA.H0055.())
FREE PACKAGE(PHPS53.H0055.())
FREE PACKAGE(PHPSPTA.H0062.())
FREE PACKAGE(PHPS53.H0062.())
FREE PACKAGE(PHPSPTA.H0063.())
FREE PACKAGE(PHPS53.H0063.())
FREE PACKAGE(PHPSPTA.H0058.())
FREE PACKAGE(PHPS53.H0058.())
FREE PACKAGE(PHPSPTA.H0059.())
FREE PACKAGE(PHPS53.H0059.())
FREE PACKAGE(PHPSPTA.H0060.())
FREE PACKAGE(PHPS53.H0060.())
FREE PACKAGE(PHPSPTA.H0061.())
FREE PACKAGE(PHPS53.H0061.())
FREE PACKAGE(PHPSPTA.H0068.())
FREE PACKAGE(PHPS53.H0068.())
FREE PACKAGE(PHPSPTA.H0069.())
FREE PACKAGE(PHPS53.H0069.())
FREE PACKAGE(PHPSPTA.H0065.())
FREE PACKAGE(PHPS53.H0065.())
FREE PACKAGE(PHPSPTA.H0066.())
FREE PACKAGE(PHPS53.H0066.())
FREE PACKAGE(PHPSPTA.H0067.())
FREE PACKAGE(PHPS53.H0067.())
FREE PACKAGE(PHPSPTA.H0075.())
FREE PACKAGE(PHPS53.H0075.())
FREE PACKAGE(PHPSPTA.H0076.())
FREE PACKAGE(PHPS53.H0076.())
FREE PACKAGE(PHPSPTA.H0070.())
FREE PACKAGE(PHPS53.H0070.())
FREE PACKAGE(PHPSPTA.H0072.())
FREE PACKAGE(PHPS53.H0072.())
FREE PACKAGE(PHPSPTA.H0074.())
FREE PACKAGE(PHPS53.H0074.())
FREE PACKAGE(PHPSPTA.H0081.())
FREE PACKAGE(PHPS53.H0081.())
FREE PACKAGE(PHPSPTA.H0077.())
FREE PACKAGE(PHPS53.H0077.())
FREE PACKAGE(PHPSPTA.H0078.())
FREE PACKAGE(PHPS53.H0078.())
FREE PACKAGE(PHPSPTA.H0079.())
FREE PACKAGE(PHPS53.H0079.())
FREE PACKAGE(PHPSPTA.H0080.())
FREE PACKAGE(PHPS53.H0080.())
FREE PACKAGE(PHPSPTA.H0085.())
FREE PACKAGE(PHPS53.H0085.())
FREE PACKAGE(PHPSPTA.H0090.())
FREE PACKAGE(PHPS53.H0090.())
FREE PACKAGE(PHPSPTA.H0082.())
FREE PACKAGE(PHPS53.H0082.())
FREE PACKAGE(PHPSPTA.H0083.())
FREE PACKAGE(PHPS53.H0083.())
FREE PACKAGE(PHPSPTA.H0084.())
FREE PACKAGE(PHPS53.H0084.())
FREE PACKAGE(PHPSPTA.H0094.())
FREE PACKAGE(PHPS53.H0094.())
FREE PACKAGE(PHPSPTA.H0095.())
FREE PACKAGE(PHPS53.H0095.())
FREE PACKAGE(PHPSPTA.H0091.())
FREE PACKAGE(PHPS53.H0091.())
FREE PACKAGE(PHPSPTA.H0092.())
FREE PACKAGE(PHPS53.H0092.())
FREE PACKAGE(PHPSPTA.H0093.())
FREE PACKAGE(PHPS53.H0093.())
FREE PACKAGE(PHPSPTA.H0100.())
FREE PACKAGE(PHPS53.H0100.())
FREE PACKAGE(PHPSPTA.H0101.())
FREE PACKAGE(PHPS53.H0101.())
FREE PACKAGE(PHPSPTA.H0096.())
FREE PACKAGE(PHPS53.H0096.())
FREE PACKAGE(PHPSPTA.H0097.())
FREE PACKAGE(PHPS53.H0097.())
FREE PACKAGE(PHPSPTA.H0098.())
FREE PACKAGE(PHPS53.H0098.())
FREE PACKAGE(PHPSPTA.H0099.())
FREE PACKAGE(PHPS53.H0099.())
FREE PACKAGE(PHPSPTA.H1001.())
FREE PACKAGE(PHPS53.H1001.())
FREE PACKAGE(PHPSPTA.H1008.())
FREE PACKAGE(PHPS53.H1008.())
FREE PACKAGE(PHPSPTA.H1009.())
FREE PACKAGE(PHPS53.H1009.())
FREE PACKAGE(PHPSPTA.H1003.())
FREE PACKAGE(PHPS53.H1003.())
FREE PACKAGE(PHPSPTA.H1004.())
FREE PACKAGE(PHPS53.H1004.())
FREE PACKAGE(PHPSPTA.H1006.())
FREE PACKAGE(PHPS53.H1006.())
FREE PACKAGE(PHPSPTA.H1012.())
FREE PACKAGE(PHPS53.H1012.())
FREE PACKAGE(PHPSPTA.H1021.())
FREE PACKAGE(PHPS53.H1021.())
FREE PACKAGE(PHPSPTA.H1022.())
FREE PACKAGE(PHPS53.H1022.())
FREE PACKAGE(PHPSPTA.H1018.())
FREE PACKAGE(PHPS53.H1018.())
FREE PACKAGE(PHPSPTA.H1019.())
FREE PACKAGE(PHPS53.H1019.())
FREE PACKAGE(PHPSPTA.H1027.())
FREE PACKAGE(PHPS53.H1027.())
FREE PACKAGE(PHPSPTA.H1028.())
FREE PACKAGE(PHPS53.H1028.())
FREE PACKAGE(PHPSPTA.H1029.())
FREE PACKAGE(PHPS53.H1029.())
FREE PACKAGE(PHPSPTA.H1023.())
FREE PACKAGE(PHPS53.H1023.())
FREE PACKAGE(PHPSPTA.H1024.())
FREE PACKAGE(PHPS53.H1024.())
FREE PACKAGE(PHPSPTA.H1025.())
FREE PACKAGE(PHPS53.H1025.())
FREE PACKAGE(PHPSPTA.H1026.())
FREE PACKAGE(PHPS53.H1026.())
FREE PACKAGE(PHPSPTA.H1035.())
FREE PACKAGE(PHPS53.H1035.())
FREE PACKAGE(PHPSPTA.H1036.())
FREE PACKAGE(PHPS53.H1036.())
FREE PACKAGE(PHPSPTA.H1031.())
FREE PACKAGE(PHPS53.H1031.())
FREE PACKAGE(PHPSPTA.H1032.())
FREE PACKAGE(PHPS53.H1032.())
FREE PACKAGE(PHPSPTA.H1033.())
FREE PACKAGE(PHPS53.H1033.())
FREE PACKAGE(PHPSPTA.H1034.())
FREE PACKAGE(PHPS53.H1034.())
FREE PACKAGE(PHPSPTA.H1041.())
FREE PACKAGE(PHPS53.H1041.())
FREE PACKAGE(PHPSPTA.H1042.())
FREE PACKAGE(PHPS53.H1042.())
FREE PACKAGE(PHPSPTA.H1038.())
FREE PACKAGE(PHPS53.H1038.())
FREE PACKAGE(PHPSPTA.H1039.())
FREE PACKAGE(PHPS53.H1039.())
FREE PACKAGE(PHPSPTA.H1040.())
FREE PACKAGE(PHPS53.H1040.())
FREE PACKAGE(PHPSPTA.H1051.())
FREE PACKAGE(PHPS53.H1051.())
FREE PACKAGE(PHPSPTA.H1043.())
FREE PACKAGE(PHPS53.H1043.())
FREE PACKAGE(PHPSPTA.H1044.())
FREE PACKAGE(PHPS53.H1044.())
FREE PACKAGE(PHPSPTA.H1046.())
FREE PACKAGE(PHPS53.H1046.())
FREE PACKAGE(PHPSPTA.H1047.())
FREE PACKAGE(PHPS53.H1047.())
FREE PACKAGE(PHPSPTA.H1056.())
FREE PACKAGE(PHPS53.H1056.())
FREE PACKAGE(PHPSPTA.H1057.())
FREE PACKAGE(PHPS53.H1057.())
FREE PACKAGE(PHPSPTA.H1058.())
FREE PACKAGE(PHPS53.H1058.())
FREE PACKAGE(PHPSPTA.H1062.())
FREE PACKAGE(PHPS53.H1062.())
FREE PACKAGE(PHPSPTA.H1063.())
FREE PACKAGE(PHPS53.H1063.())
FREE PACKAGE(PHPSPTA.H1059.())
FREE PACKAGE(PHPS53.H1059.())
FREE PACKAGE(PHPSPTA.H1060.())
FREE PACKAGE(PHPS53.H1060.())
FREE PACKAGE(PHPSPTA.H1061.())
FREE PACKAGE(PHPS53.H1061.())
FREE PACKAGE(PHPSPTA.H1067.())
FREE PACKAGE(PHPS53.H1067.())
FREE PACKAGE(PHPSPTA.H1065.())
FREE PACKAGE(PHPS53.H1065.())
FREE PACKAGE(PHPSPTA.H1066.())
FREE PACKAGE(PHPS53.H1066.())
FREE PACKAGE(PHPSPTA.H1073.())
FREE PACKAGE(PHPS53.H1073.())
FREE PACKAGE(PHPSPTA.H1074.())
FREE PACKAGE(PHPS53.H1074.())
FREE PACKAGE(PHPSPTA.H1069.())
FREE PACKAGE(PHPS53.H1069.())
FREE PACKAGE(PHPSPTA.H1071.())
FREE PACKAGE(PHPS53.H1071.())
FREE PACKAGE(PHPSPTA.H1072.())
FREE PACKAGE(PHPS53.H1072.())
FREE PACKAGE(PHPSPTA.H1148.())
FREE PACKAGE(PHPS53.H1148.())
FREE PACKAGE(PHPSPTA.H1149.())
FREE PACKAGE(PHPS53.H1149.())
FREE PACKAGE(PHPSPTA.H1150.())
FREE PACKAGE(PHPS53.H1150.())
FREE PACKAGE(PHPSPTA.H1153.())
FREE PACKAGE(PHPS53.H1153.())
FREE PACKAGE(PHPSPTA.H1154.())
FREE PACKAGE(PHPS53.H1154.())
FREE PACKAGE(PHPSPTA.H1155.())
FREE PACKAGE(PHPS53.H1155.())
FREE PACKAGE(PHPSPTA.H1151.())
FREE PACKAGE(PHPS53.H1151.())
FREE PACKAGE(PHPSPTA.H1152.())
FREE PACKAGE(PHPS53.H1152.())
FREE PACKAGE(PHPSPTA.H1160.())
FREE PACKAGE(PHPS53.H1160.())
FREE PACKAGE(PHPSPTA.H1156.())
FREE PACKAGE(PHPS53.H1156.())
FREE PACKAGE(PHPSPTA.H1157.())
FREE PACKAGE(PHPS53.H1157.())
FREE PACKAGE(PHPSPTA.H1158.())
FREE PACKAGE(PHPS53.H1158.())
FREE PACKAGE(PHPSPTA.H1165.())
FREE PACKAGE(PHPS53.H1165.())
FREE PACKAGE(PHPSPTA.H1166.())
FREE PACKAGE(PHPS53.H1166.())
FREE PACKAGE(PHPSPTA.H1162.())
FREE PACKAGE(PHPS53.H1162.())
FREE PACKAGE(PHPSPTA.H1163.())
FREE PACKAGE(PHPS53.H1163.())
FREE PACKAGE(PHPSPTA.H1164.())
FREE PACKAGE(PHPS53.H1164.())
FREE PACKAGE(PHPSPTA.H1170.())
FREE PACKAGE(PHPS53.H1170.())
FREE PACKAGE(PHPSPTA.H1171.())
FREE PACKAGE(PHPS53.H1171.())
FREE PACKAGE(PHPSPTA.H1172.())
FREE PACKAGE(PHPS53.H1172.())
FREE PACKAGE(PHPSPTA.H1167.())
FREE PACKAGE(PHPS53.H1167.())
FREE PACKAGE(PHPSPTA.H1168.())
FREE PACKAGE(PHPS53.H1168.())
FREE PACKAGE(PHPSPTA.H1169.())
FREE PACKAGE(PHPS53.H1169.())
FREE PACKAGE(PHPSPTA.H1176.())
FREE PACKAGE(PHPS53.H1176.())
FREE PACKAGE(PHPSPTA.H1177.())
FREE PACKAGE(PHPS53.H1177.())
FREE PACKAGE(PHPSPTA.H1178.())
FREE PACKAGE(PHPS53.H1178.())
FREE PACKAGE(PHPSPTA.H1173.())
FREE PACKAGE(PHPS53.H1173.())
FREE PACKAGE(PHPSPTA.H1174.())
FREE PACKAGE(PHPS53.H1174.())
FREE PACKAGE(PHPSPTA.H1175.())
FREE PACKAGE(PHPS53.H1175.())
FREE PACKAGE(PHPSPTA.H1079.())
FREE PACKAGE(PHPS53.H1079.())
FREE PACKAGE(PHPSPTA.H1080.())
FREE PACKAGE(PHPS53.H1080.())
FREE PACKAGE(PHPSPTA.H1075.())
FREE PACKAGE(PHPS53.H1075.())
FREE PACKAGE(PHPSPTA.H1076.())
FREE PACKAGE(PHPS53.H1076.())
FREE PACKAGE(PHPSPTA.H1077.())
FREE PACKAGE(PHPS53.H1077.())
FREE PACKAGE(PHPSPTA.H1078.())
FREE PACKAGE(PHPS53.H1078.())
FREE PACKAGE(PHPSPTA.H1081.())
FREE PACKAGE(PHPS53.H1081.())
FREE PACKAGE(PHPSPTA.H1082.())
FREE PACKAGE(PHPS53.H1082.())
FREE PACKAGE(PHPSPTA.H1083.())
FREE PACKAGE(PHPS53.H1083.())
FREE PACKAGE(PHPSPTA.H1084.())
FREE PACKAGE(PHPS53.H1084.())
FREE PACKAGE(PHPSPTA.H1091.())
FREE PACKAGE(PHPS53.H1091.())
FREE PACKAGE(PHPSPTA.H1092.())
FREE PACKAGE(PHPS53.H1092.())
FREE PACKAGE(PHPSPTA.H1087.())
FREE PACKAGE(PHPS53.H1087.())
FREE PACKAGE(PHPSPTA.H1088.())
FREE PACKAGE(PHPS53.H1088.())
FREE PACKAGE(PHPSPTA.H1089.())
FREE PACKAGE(PHPS53.H1089.())
FREE PACKAGE(PHPSPTA.H1090.())
FREE PACKAGE(PHPS53.H1090.())
FREE PACKAGE(PHPSPTA.H1099.())
FREE PACKAGE(PHPS53.H1099.())
FREE PACKAGE(PHPSPTA.H1100.())
FREE PACKAGE(PHPS53.H1100.())
FREE PACKAGE(PHPSPTA.H1093.())
FREE PACKAGE(PHPS53.H1093.())
FREE PACKAGE(PHPSPTA.H1094.())
FREE PACKAGE(PHPS53.H1094.())
FREE PACKAGE(PHPSPTA.H1095.())
FREE PACKAGE(PHPS53.H1095.())
FREE PACKAGE(PHPSPTA.H1115.())
FREE PACKAGE(PHPS53.H1115.())
FREE PACKAGE(PHPSPTA.H1101.())
FREE PACKAGE(PHPS53.H1101.())
FREE PACKAGE(PHPSPTA.H1102.())
FREE PACKAGE(PHPS53.H1102.())
FREE PACKAGE(PHPSPTA.H1112.())
FREE PACKAGE(PHPS53.H1112.())
FREE PACKAGE(PHPSPTA.H1121.())
FREE PACKAGE(PHPS53.H1121.())
FREE PACKAGE(PHPSPTA.H1122.())
FREE PACKAGE(PHPS53.H1122.())
FREE PACKAGE(PHPSPTA.H1116.())
FREE PACKAGE(PHPS53.H1116.())
FREE PACKAGE(PHPSPTA.H1117.())
FREE PACKAGE(PHPS53.H1117.())
FREE PACKAGE(PHPSPTA.H1120.())
FREE PACKAGE(PHPS53.H1120.())
FREE PACKAGE(PHPSPTA.H1127.())
FREE PACKAGE(PHPS53.H1127.())
FREE PACKAGE(PHPSPTA.H1128.())
FREE PACKAGE(PHPS53.H1128.())
FREE PACKAGE(PHPSPTA.H1123.())
FREE PACKAGE(PHPS53.H1123.())
FREE PACKAGE(PHPSPTA.H1124.())
FREE PACKAGE(PHPS53.H1124.())
FREE PACKAGE(PHPSPTA.H1125.())
FREE PACKAGE(PHPS53.H1125.())
FREE PACKAGE(PHPSPTA.H1126.())
FREE PACKAGE(PHPS53.H1126.())
FREE PACKAGE(PHPSPTA.H1133.())
FREE PACKAGE(PHPS53.H1133.())
FREE PACKAGE(PHPSPTA.H1134.())
FREE PACKAGE(PHPS53.H1134.())
FREE PACKAGE(PHPSPTA.H1129.())
FREE PACKAGE(PHPS53.H1129.())
FREE PACKAGE(PHPSPTA.H1130.())
FREE PACKAGE(PHPS53.H1130.())
FREE PACKAGE(PHPSPTA.H1131.())
FREE PACKAGE(PHPS53.H1131.())
FREE PACKAGE(PHPSPTA.H1132.())
FREE PACKAGE(PHPS53.H1132.())
FREE PACKAGE(PHPSPTA.H1139.())
FREE PACKAGE(PHPS53.H1139.())
FREE PACKAGE(PHPSPTA.H1140.())
FREE PACKAGE(PHPS53.H1140.())
FREE PACKAGE(PHPSPTA.H1135.())
FREE PACKAGE(PHPS53.H1135.())
FREE PACKAGE(PHPSPTA.H1136.())
FREE PACKAGE(PHPS53.H1136.())
FREE PACKAGE(PHPSPTA.H1137.())
FREE PACKAGE(PHPS53.H1137.())
FREE PACKAGE(PHPSPTA.H1138.())
FREE PACKAGE(PHPS53.H1138.())
FREE PACKAGE(PHPSPTA.H1146.())
FREE PACKAGE(PHPS53.H1146.())
FREE PACKAGE(PHPSPTA.H1147.())
FREE PACKAGE(PHPS53.H1147.())
FREE PACKAGE(PHPSPTA.H1141.())
FREE PACKAGE(PHPS53.H1141.())
FREE PACKAGE(PHPSPTA.H1142.())
FREE PACKAGE(PHPS53.H1142.())
FREE PACKAGE(PHPSPTA.H1143.())
FREE PACKAGE(PHPS53.H1143.())
FREE PACKAGE(PHPSPTA.H1144.())
FREE PACKAGE(PHPS53.H1144.())
FREE PACKAGE(PHPSPTA.H1145.())
FREE PACKAGE(PHPS53.H1145.())
FREE PACKAGE(PHPSPTA.H1183.())
FREE PACKAGE(PHPS53.H1183.())
FREE PACKAGE(PHPSPTA.H1184.())
FREE PACKAGE(PHPS53.H1184.())
FREE PACKAGE(PHPSPTA.H1179.())
FREE PACKAGE(PHPS53.H1179.())
FREE PACKAGE(PHPSPTA.H1180.())
FREE PACKAGE(PHPS53.H1180.())
FREE PACKAGE(PHPSPTA.H1181.())
FREE PACKAGE(PHPS53.H1181.())
FREE PACKAGE(PHPSPTA.H1182.())
FREE PACKAGE(PHPS53.H1182.())
FREE PACKAGE(PHPSPTA.H1189.())
FREE PACKAGE(PHPS53.H1189.())
FREE PACKAGE(PHPSPTA.H1190.())
FREE PACKAGE(PHPS53.H1190.())
FREE PACKAGE(PHPSPTA.H1191.())
FREE PACKAGE(PHPS53.H1191.())
FREE PACKAGE(PHPSPTA.H1185.())
FREE PACKAGE(PHPS53.H1185.())
FREE PACKAGE(PHPSPTA.H1186.())
FREE PACKAGE(PHPS53.H1186.())
FREE PACKAGE(PHPSPTA.H1187.())
FREE PACKAGE(PHPS53.H1187.())
FREE PACKAGE(PHPSPTA.H1188.())
FREE PACKAGE(PHPS53.H1188.())
FREE PACKAGE(PHPSPTA.H1196.())
FREE PACKAGE(PHPS53.H1196.())
FREE PACKAGE(PHPSPTA.H1197.())
FREE PACKAGE(PHPS53.H1197.())
FREE PACKAGE(PHPSPTA.H1192.())
FREE PACKAGE(PHPS53.H1192.())
FREE PACKAGE(PHPSPTA.H1193.())
FREE PACKAGE(PHPS53.H1193.())
FREE PACKAGE(PHPSPTA.H1194.())
FREE PACKAGE(PHPS53.H1194.())
FREE PACKAGE(PHPSPTA.H1195.())
FREE PACKAGE(PHPS53.H1195.())
FREE PACKAGE(PHPSPTA.H1198.())
FREE PACKAGE(PHPS53.H1198.())
FREE PACKAGE(PHPSPTA.H1199.())
FREE PACKAGE(PHPS53.H1199.())
FREE PACKAGE(PHPSPTA.H1200.())
FREE PACKAGE(PHPS53.H1200.())
FREE PACKAGE(PHPSPTA.HMCPRSX.())
FREE PACKAGE(PHPS53.HMCPRSX.())
FREE PACKAGE(KS.KS8050.(19980528140608S101702A072741AKS8050))
FREE PACKAGE(KS.YKS5553.(19980604135613S101702A072797AYKS5553))
FREE PACKAGE(PT.YPTBAK.(19980603182259S101702Z377284AYPTBAK))
FREE PACKAGE(PT.YPTBAK.(19980611141330S101702A072986AYPTBAK))
FREE PACKAGE(SX.YSX81S1.(19980611134539S101702M000921AYSX81S1))
FREE PACKAGE(AV.YAV0491.(19980611154441S101702M000840AYAV0491))
FREE PACKAGE(LB.YLB0103.(19980611152558S101702M000840AYLB0103))
FREE PACKAGE(LB.YLB0105.(19980611152558S101702M000840AYLB0105))
FREE PACKAGE(WK.YWKLUBO.(19980611152859S101702M000840AYWKLUBO))
FREE PACKAGE(YY.YYAKDAT.(19980611153615S101702M000840AYYAKDAT))
FREE PACKAGE(YY.YYFIBPR.(19980611153657S101702M000840AYYFIBPR))
FREE PACKAGE(YY.YYFIKUR.(19980611153705S101702M000840AYYFIKUR))
FREE PACKAGE(YY.YYFIKUR.(19980611153705CGS101702M000840AYYFIKUR))
FREE PACKAGE(SV.SV7810.(19980611190040S101702A073120ASV7810))
FREE PACKAGE(AV.YAV0491.(19980617085448S101702Z379436AYAV0491))
FREE PACKAGE(YY.YYFIKUR.(19980618174544S101702A072820AYYFIKUR))
FREE PACKAGE(AV.YAV0491.(19980618174545S101702A072820AYAV0491))
FREE PACKAGE(YY.YYFIKUR.(19980618174544CGS101702A072820AYYFIKUR))
FREE PACKAGE(RR.RR0210.(19980618141924S101702A072843ARR0210))
FREE PACKAGE(A1P.YKS0813.(19980618144536S101702A073286AYKS0813))
FREE PACKAGE(A2P.YKS0813.(19980618144536S101702A073286AYKS0813))
FREE PACKAGE(KS.YKS0813.(19980618144536S101702A073286AYKS0813))
FREE PACKAGE(AV.YAV0491.(19980618153333S101702A072820AYAV0491))
FREE PACKAGE(YY.YYFIKUR.(19980618153331S101702A072820AYYFIKUR))
FREE PACKAGE(YY.YYFIKUR.(19980618153331CGS101702A072820AYYFIKUR))
FREE PACKAGE(KS.YKS5551.(19980613150900S101702Z378654AYKS5551))
FREE PACKAGE(EC.EC8063.(19980623143831S101702Z380538AEC8063))
FREE PACKAGE(EC.EC8062.(19980623143853S101702Z380537AEC8062))
FREE PACKAGE(EC.EC8062.(19980624103834S101702Z380638AEC8062))
FREE PACKAGE(EC.EC8063.(19980624103859S101702Z380639AEC8063))
FREE PACKAGE(EC.EC8063.(19980622145205S101702Z380283AEC8063))
FREE PACKAGE(EC.EC8062.(19980622145120S101702Z380281AEC8062))
FREE PACKAGE(PHPSPTA.HMCPRUP.())
FREE PACKAGE(PHPS53.HMCPRUP.())
FREE PACKAGE(KS.YKS5553.(19980701133926S101702Z381523AYKS5553))
FREE PACKAGE(YY.YYFIKUR.(19980626131600S101702A073395AYYFIKUR))
FREE PACKAGE(YY.YYFIKUR.(19980626131600CGS101702A073395AYYFIKUR))
FREE PACKAGE(YY.YYFIKUR.(19980626134607S101702A073395AYYFIKUR))
FREE PACKAGE(YY.YYFIKUR.(19980626134607CGS101702A073395AYYFIKUR))
FREE PACKAGE(YY.YYFIKUR.(19980626140918S101702A073395AYYFIKUR))
FREE PACKAGE(YY.YYFIKUR.(19980626140918CGS101702A073395AYYFIKUR))
FREE PACKAGE(YY.YYFIKUR.(19980626151056S101702A073401AYYFIKUR))
FREE PACKAGE(YY.YYFIKUR.(19980626151056CGS101702A073401AYYFIKUR))
FREE PACKAGE(FARDX.DLLST1.())
FREE PACKAGE(PT.YPTBAK.(19980706170353S101702Z382086AYPTBAK))
FREE PACKAGE(VP.VP7400.(19980713121941S101702Z382775AVP7400))
FREE PACKAGE(EX.YEXERG.(19980709132140S101702A073235AYEXERG))
FREE PACKAGE(YY.YYFIKU1.(19980709132109S101702Z382599AYYFIKU1))
FREE PACKAGE(VT.YVT0801.(19980709133842S101702M000924AYVT0801))
FREE PACKAGE(VT.YVTAFS.(19980709134007S101702M000924AYVTAFS))
FREE PACKAGE(EX.YEXERG.(19980709132140CGS101702A073235AYEXERG))
FREE PACKAGE(KS.YKS5551.(19980709132913S101702A073491AYKS5551))
FREE PACKAGE(KS.YKS5553.(19980709132913S101702A073491AYKS5553))
FREE PACKAGE(SA.YSA5282.(19980709133946S101702M000924AYSA5282))
FREE PACKAGE(VT.YVT0806.(19980709133843S101702M000924AYVT0806))
FREE PACKAGE(VT.YVT0803.(19980709133843S101702M000924AYVT0803))
FREE PACKAGE(VT.YVT0802.(19980709133842S101702M000924AYVT0802))
FREE PACKAGE(SA.YSAT035.(19980709133855S101702M000924AYSAT035))
FREE PACKAGE(SA.YSA5281.(19980709133945S101702M000924AYSA5281))
FREE PACKAGE(VT.YVT0804.(19980709133843S101702M000924AYVT0804))
FREE PACKAGE(SX.YSX8105.(19980709134006S101702M000924AYSX8105))
FREE PACKAGE(SA.YSAT009.(19980709134033S101702M000924AYSAT009))
FREE PACKAGE(SA.YSAT015.(19980709133846S101702M000924AYSAT015))
FREE PACKAGE(WK.YWKLUBO.(19980710141605S101702M000841AYWKLUBO))
FREE PACKAGE(YY.YYAKDAT.(19980710084846S101702M000841AYYAKDAT))
FREE PACKAGE(YY.YYFIKUR.(19980710084900CGS101702M000841AYYFIKUR))
FREE PACKAGE(YY.YYFIKUR.(19980710084900S101702M000841AYYFIKUR))
FREE PACKAGE(WB.WB1010.(19980710082854S101702A073636AWB1010))
FREE PACKAGE(LB.YLB0113.(19980710083933S101702M000841AYLB0113))
FREE PACKAGE(LB.YLB0116.(19980710083934S101702M000841AYLB0116))
FREE PACKAGE(LB.YLB0115.(19980710083934S101702M000841AYLB0115))
FREE PACKAGE(WK.YWKLUBO.(19980710084245S101702M000841AYWKLUBO))
FREE PACKAGE(YY.YYCXOLD.(19980710085313S101702A073727AYYCXOLD))
FREE PACKAGE(LB.YLB0113.(19980710141321S101702M000841AYLB0113))
FREE PACKAGE(LB.YLB0116.(19980710141322S101702M000841AYLB0116))
FREE PACKAGE(LB.YLB0115.(19980710141321S101702M000841AYLB0115))
FREE PACKAGE(YY.YYAKDAT.(19980710142111S101702M000841AYYAKDAT))
FREE PACKAGE(WB.WB9993.(A06M000357))
FREE PACKAGE(CZ.CZ6014.(19980717195822S101702Z383277ACZ6014))
FREE PACKAGE(EC.YECAVKY.(19980717193302S101702Z383289AYECAVKY))
FREE PACKAGE(EC.YECAVKY.(19980717194554S101702Z383292AYECAVKY))
FREE PACKAGE(CZ.CZ6014.(19980717205332S101702Z383277ACZ6014))
FREE PACKAGE(KD.KD0540.(19980717170619S101702Z383268AKD0540))
FREE PACKAGE(CZ.CZ6014.(19980718113921S101702Z383299ACZ6014))
FREE PACKAGE(PHPSPTA.GCSTMIG.())
FREE PACKAGE(PHPS53.GCSTMIG.())
FREE PACKAGE(PHPSPTA.GCBTOGL.())
FREE PACKAGE(PHPS53.GCBTOGL.())
FREE PACKAGE(SA.YSX8105.(A16M000011))
FREE PACKAGE(PHPSPTA.HMCPRUS.())
FREE PACKAGE(PHPS53.HMCPRUS.())
FREE PACKAGE(SA.YSX81S1.(A16M000011))
FREE PACKAGE(VT.YVT0578.(A15S000165))
FREE PACKAGE(PHPSPTA.HMCXRLE.())
FREE PACKAGE(PHPS53.HMCXRLE.())
FREE PACKAGE(PHPSPTA.GRINSPT.())
FREE PACKAGE(PHPS53.GRINSPT.())
FREE PACKAGE(PHPSPTA.H0024.())
FREE PACKAGE(PHPS53.H0024.())
FREE PACKAGE(PHPSPTA.GRVRF00.())
FREE PACKAGE(PHPS53.GRVRF00.())
FREE PACKAGE(PHPSPTA.GUPDENT.())
FREE PACKAGE(PHPS53.GUPDENT.())
FREE PACKAGE(A1P.YKS5553.(A13X000194))
FREE PACKAGE(A2P.YKS5553.(A13X000194))
FREE PACKAGE(PHPSPTA.GTLMC00.())
FREE PACKAGE(PHPS53.GTLMC00.())
FREE PACKAGE(A1P.YKS5551.(A13X000194))
FREE PACKAGE(A2P.YKS5551.(A13X000194))
FREE PACKAGE(A1P.YKS5551.(A13X000153))
FREE PACKAGE(A2P.YKS5551.(A13X000153))
FREE PACKAGE(A1P.YKS5552.(A13X000153))
FREE PACKAGE(A2P.YKS5552.(A13X000153))
FREE PACKAGE(A1P.YKS5553.(A13X000153))
FREE PACKAGE(A2P.YKS5553.(A13X000153))
FREE PACKAGE(PHPSPTA.HMPGDDL.())
FREE PACKAGE(PHPS53.HMPGDDL.())
FREE PACKAGE(PHPSPTA.HMPDCLG.())
FREE PACKAGE(PHPS53.HMPDCLG.())
FREE PACKAGE(PHPSPTA.HMPGENP.())
FREE PACKAGE(PHPS53.HMPGENP.())
FREE PACKAGE(A1P.YKS5551.(A13X000155))
FREE PACKAGE(A2P.YKS5551.(A13X000155))
FREE PACKAGE(A1P.YKS5553.(A13X000155))
FREE PACKAGE(A2P.YKS5553.(A13X000155))
FREE PACKAGE(A1P.YKS5552.(A13X000155))
FREE PACKAGE(A2P.YKS5552.(A13X000155))
FREE PACKAGE(FRNIBMCL.FRNA0070.())
FREE PACKAGE(FRNIBMCL.FRNA0050.())
FREE PACKAGE(FRNIBMCL.FRNA0060.())
FREE PACKAGE(FRNIBMCL.FRNA0020.())
FREE PACKAGE(FRNIBMCL.FRNA0010.())
FREE PACKAGE(FRNIBMCL.FRNA0030.())
FREE PACKAGE(FRNIBMCL.FRNA0040.())
FREE PACKAGE(A1P.YKS0813.(A13X000041))
FREE PACKAGE(A2P.YKS0813.(A13X000041))
FREE PACKAGE(PHPSPTA.GLMP000.())
FREE PACKAGE(PHPS53.GLMP000.())
FREE PACKAGE(PHPSPTA.HMPUTRN.())
FREE PACKAGE(PHPS53.HMPUTRN.())
FREE PACKAGE(PHPSPTA.GRCLUP.())
FREE PACKAGE(PHPS53.GRCLUP.())
FREE PACKAGE(PHPSPTA.GRSEED0.())
FREE PACKAGE(PHPS53.GRSEED0.())
FREE PACKAGE(A1P.YKS5551.(A13X000177))
FREE PACKAGE(A2P.YKS5551.(A13X000177))
FREE PACKAGE(A1P.YKS5553.(A13X000177))
FREE PACKAGE(A2P.YKS5553.(A13X000177))
FREE PACKAGE(PHPSPTA.HMCSIG3.())
FREE PACKAGE(PHPS53.HMCSIG3.())
FREE PACKAGE(PHPSPTA.GRRPT00.())
FREE PACKAGE(PHPS53.GRRPT00.())
FREE PACKAGE(PHPSPTA.GCEXTAT.())
FREE PACKAGE(PHPS53.GCEXTAT.())
FREE PACKAGE(A1P.YKS5551.(A13X000321))
FREE PACKAGE(A2P.YKS5551.(A13X000321))
FREE PACKAGE(A2P.RR8270.(CRMA000504))
FREE PACKAGE(PHPSPTA.HMCQRY.())
FREE PACKAGE(PHPS53.HMCQRY.())
FREE PACKAGE(PHPSPTA.HMCQRY4.())
FREE PACKAGE(PHPS53.HMCQRY4.())
FREE PACKAGE(PHPSPTA.HMCQRY2.())
FREE PACKAGE(PHPS53.HMCQRY2.())
FREE PACKAGE(PHPSPTA.HMCQRY5.())
FREE PACKAGE(PHPS53.HMCQRY5.())
FREE PACKAGE(PHPSPTA.GCUPDRES.())
FREE PACKAGE(PHPS53.GCUPDRES.())
FREE PACKAGE(NTA1P.BC0009.(CRMB000430))
FREE PACKAGE(NTA1P.BC0003.(CRMB000430))
FREE PACKAGE(NTA1P.BC0007.(CRMB000430))
FREE PACKAGE(NTA1P.BC0010.(CRMB000430))
FREE PACKAGE(NTA1P.BC0008.(CRMB000430))
FREE PACKAGE(NTA1P.BC0011.(CRMB000430))
FREE PACKAGE(A1P.CI8520.(A12M001522))
FREE PACKAGE(A2P.CI8520.(A12M001522))
FREE PACKAGE(A1P.CI8520.(A12M001531))
FREE PACKAGE(A2P.CI8520.(A12M001531))
FREE PACKAGE(AT.AT8100.(A12M001566))
FREE PACKAGE(PHPSPTA.GRPREP0.())
FREE PACKAGE(PHPS53.GRPREP0.())
FREE PACKAGE(A1P.YKS5553.(A13X000249))
FREE PACKAGE(A2P.YKS5553.(A13X000249))
FREE PACKAGE(A1P.YKS5551.(A13X000269))
FREE PACKAGE(A2P.YKS5551.(A13X000269))
FREE PACKAGE(AT.AT0090.(A12M001166))
FREE PACKAGE(A1P.YKS5553.(A13X000279))
FREE PACKAGE(A2P.YKS5553.(A13X000279))
FREE PACKAGE(A2P.YSAT061.(A16M000359))
FREE PACKAGE(AT.AT8100.(A12M001144))
FREE PACKAGE(A1P.YSAT058.(A16M000359))
FREE PACKAGE(A2P.YSAT058.(A16M000359))
FREE PACKAGE(A1P.RR8420.(CRMA000539))
FREE PACKAGE(A2P.RR8420.(CRMA000539))
FREE PACKAGE(PHPSPTA.GEXP000.())
FREE PACKAGE(PHPS53.GEXP000.())
FREE PACKAGE(A1P.YKS0813.(A13X000301))
FREE PACKAGE(A2P.YKS0813.(A13X000301))
FREE PACKAGE(PHPSPTA.GRBNDLK.())
FREE PACKAGE(PHPS53.GRBNDLK.())
FREE PACKAGE(PHPSPTA.HMCCOS1.())
FREE PACKAGE(PHPS53.HMCCOS1.())
FREE PACKAGE(AT.AT8100.(A12M001366))
FREE PACKAGE(A1P.RR8420.(CRMA000574))
FREE PACKAGE(A2P.RR8420.(CRMA000574))
FREE PACKAGE(PHPSPTA.HMCTRAN.())
FREE PACKAGE(PHPS53.HMCTRAN.())
FREE PACKAGE(PHPSPTA.H1037.())
FREE PACKAGE(PHPS53.H1037.())
FREE PACKAGE(PHPSPTA.HMPGCB.())
FREE PACKAGE(PHPS53.HMPGCB.())
FREE PACKAGE(FRNIBMCL.FRNPLLI4.())
FREE PACKAGE(FRNIBMCL.FRNMHBP8.())
FREE PACKAGE(FRNIBMCL.FRNPLLQ2.())
FREE PACKAGE(A1P.XP8600.(CRME000264))
FREE PACKAGE(A2P.XP8600.(CRME000264))
FREE PACKAGE(PHPSPTA.GRRSTAT.())
FREE PACKAGE(PHPS53.GRRSTAT.())
FREE PACKAGE(A1P.XP8600.(CRME000268))
FREE PACKAGE(A2P.XP8600.(CRME000268))
FREE PACKAGE(A1P.XP8600.(CRME000269))
FREE PACKAGE(A2P.XP8600.(CRME000269))
FREE PACKAGE(A1P.YKS5553.(A13X000339))
FREE PACKAGE(A2P.YKS5553.(A13X000339))
FREE PACKAGE(PHPSPTA.GTDELTA.())
FREE PACKAGE(PHPS53.GTDELTA.())
FREE PACKAGE(A1P.YKS0813.(A13X000362))
FREE PACKAGE(A2P.YKS0813.(A13X000362))
FREE PACKAGE(A1P.YKS5551.(A13X000368))
FREE PACKAGE(A2P.YKS5551.(A13X000368))
FREE PACKAGE(FRNCOL01.FRNV0030.())
FREE PACKAGE(A1P.YKS0813.(A13X000352))
FREE PACKAGE(A2P.YKS0813.(A13X000352))
FREE PACKAGE(FRNCOL01.FRNV0060.())
FREE PACKAGE(FRNCOL01.FRNV0020.())
FREE PACKAGE(A1P.CI8520.(A12M001797))
FREE PACKAGE(A2P.CI8520.(A12M001797))
FREE PACKAGE(A2P.RR8270.(CRMA001016))
FREE PACKAGE(A1P.RR8420.(CRMA001016))
FREE PACKAGE(A2P.RR8420.(CRMA001016))
FREE PACKAGE(A1P.YKS0813.(A13X000436))
FREE PACKAGE(A2P.YKS0813.(A13X000436))
FREE PACKAGE(FRNIBMCL.FRNPLLI2.())
FREE PACKAGE(BP.BP7090.(A20Y000082))
FREE PACKAGE(PHPSPTA.GAMI000.())
FREE PACKAGE(PHPS53.GAMI000.())
FREE PACKAGE(A1P.KS5320.(A13X000536))
FREE PACKAGE(A2P.KS5320.(A13X000536))
FREE PACKAGE(BF.BF8655.(A06M010498))
FREE PACKAGE(PHPSPTA.HMCSRVR.())
FREE PACKAGE(PHPS53.HMCSRVR.())
FREE PACKAGE(PHPSPTA.H0026X.())
FREE PACKAGE(PHPS53.H0026X.())
FREE PACKAGE(PHPSPTA.GCMIGDEL.())
FREE PACKAGE(PHPS53.GCMIGDEL.())
FREE PACKAGE(AT.AT0090.(A20Y000239))
FREE PACKAGE(AT.AT7224.(A20Y000111))
FREE PACKAGE(PHPSPTA.GTREP00.())
FREE PACKAGE(PHPS53.GTREP00.())
FREE PACKAGE(PHPSPTA.GCCRC00.())
FREE PACKAGE(PHPS53.GCCRC00.())
FREE PACKAGE(PHPSPTA.GIMP000.())
FREE PACKAGE(PHPS53.GIMP000.())
FREE PACKAGE(A1P.YCI009A.(A12M002427))
FREE PACKAGE(A2P.YCI009A.(A12M002427))
FREE PACKAGE(A1P.YCI009.(A12M002427))
FREE PACKAGE(A2P.YCI009.(A12M002427))
FREE PACKAGE(A1P.YKS0813.(A13X000530))
FREE PACKAGE(A2P.YKS0813.(A13X000530))
FREE PACKAGE(PHPSPTA.GRRBA00.())
FREE PACKAGE(PHPS53.GRRBA00.())
FREE PACKAGE(A1P.YKS0813.(A13X000508))
FREE PACKAGE(A2P.YKS0813.(A13X000508))
FREE PACKAGE(PHPSPTA.GCTMTH.())
FREE PACKAGE(PHPS53.GCTMTH.())
FREE PACKAGE(PHPSPTA.GRINST0.())
FREE PACKAGE(PHPS53.GRINST0.())
FREE PACKAGE(FRNCOL01.FRNV0040.())
FREE PACKAGE(FRNCOL01.FRNV0050.())
FREE PACKAGE(FRNIBMCL.FRNPLLI3.())
FREE PACKAGE(VT.YVT0801.(A15S000580))
FREE PACKAGE(VT.YVT0802.(A15S000580))
FREE PACKAGE(VT.YVT0803.(A15S000580))
FREE PACKAGE(VT.YVT0804.(A15S000580))
FREE PACKAGE(VT.YVT0805.(A15S000580))
FREE PACKAGE(VT.YVT0806.(A15S000580))
FREE PACKAGE(VT.YVT0809.(A15S000580))
FREE PACKAGE(KS.YKSAUFT.(A15S000557))
FREE PACKAGE(AT.AT7222.(A20Y000328))
FREE PACKAGE(AT.AT7224.(A20Y000328))
FREE PACKAGE(AT.AT7225.(A20Y000328))
FREE PACKAGE(FRNIBMCL.FRNPLLI1.())
FREE PACKAGE(AT.AT0090.(A20Y000364))
FREE PACKAGE(GROUP00.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP01.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP02.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP03.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP04.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP05.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP06.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP07.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP08.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP09.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP10.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP11.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP12.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP13.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP14.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP15.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP16.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP17.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP18.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP19.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP20.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP21.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP22.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP23.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP24.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP25.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP26.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP27.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP28.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP29.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP30.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP31.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP32.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP33.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP34.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP35.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP36.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP37.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP38.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP39.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP40.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP41.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP42.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP43.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP44.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP45.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP46.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP47.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP48.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP49.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP50.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP51.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP52.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP53.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP54.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP55.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP56.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP57.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP58.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP59.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP60.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP61.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP62.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP63.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP64.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP65.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP66.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP67.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP68.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP69.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP70.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP71.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP72.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP73.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP74.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP75.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP76.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP77.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP78.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP79.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP80.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP81.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP82.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP83.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP84.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP85.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP86.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP87.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP88.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP89.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP90.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP91.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP92.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP93.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP94.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP95.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP96.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP97.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP98.CBRHDBS.(327975575377873514))
FREE PACKAGE(GROUP99.CBRHDBS.(327975575377873514))
FREE PACKAGE(CBRKCMT.CBRKCMT.(439276300377892470))
FREE PACKAGE(GROUP00.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP01.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP02.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP03.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP04.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP05.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP06.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP07.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP08.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP09.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP10.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP11.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP12.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP13.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP14.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP15.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP16.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP17.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP18.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP19.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP20.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP21.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP22.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP23.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP24.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP25.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP26.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP27.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP28.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP29.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP30.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP31.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP32.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP33.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP34.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP35.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP36.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP37.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP38.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP39.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP40.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP41.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP42.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP43.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP44.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP45.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP46.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP47.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP48.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP49.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP50.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP51.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP52.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP53.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP54.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP55.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP56.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP57.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP58.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP59.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP60.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP61.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP62.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP63.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP64.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP65.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP66.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP67.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP68.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP69.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP70.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP71.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP72.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP73.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP74.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP75.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP76.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP77.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP78.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP79.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP80.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP81.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP82.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP83.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP84.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP85.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP86.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP87.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP88.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP89.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP90.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP91.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP92.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP93.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP94.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP95.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP96.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP97.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP98.CBRHDBS.(042982409377892471))
FREE PACKAGE(GROUP99.CBRHDBS.(042982409377892471))
FREE PACKAGE(PHPSPTA.HMPRBDR.())
FREE PACKAGE(PHPS53.HMPRBDR.())
FREE PACKAGE(CBRKCMI.CBRKCMI.(UW71236HDZ11F0))
FREE PACKAGE(CBRKCMR.CBRKCMR.(UW71236HDZ11F0))
FREE PACKAGE(CBRKISQL.CBRKISQL.(UW71236HDZ11F0))
FREE PACKAGE(GROUP00.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP01.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP02.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP03.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP04.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP05.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP06.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP07.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP08.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP09.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP10.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP11.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP12.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP13.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP14.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP15.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP16.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP17.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP18.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP19.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP20.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP21.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP22.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP23.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP24.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP25.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP26.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP27.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP28.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP29.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP30.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP31.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP32.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP33.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP34.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP35.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP36.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP37.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP38.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP39.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP40.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP41.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP42.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP43.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP44.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP45.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP46.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP47.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP48.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP49.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP50.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP51.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP52.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP53.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP54.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP55.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP56.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP57.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP58.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP59.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP60.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP61.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP62.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP63.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP64.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP65.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP66.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP67.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP68.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP69.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP70.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP71.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP72.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP73.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP74.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP75.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP76.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP77.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP78.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP79.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP80.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP81.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP82.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP83.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP84.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP85.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP86.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP87.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP88.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP89.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP90.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP91.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP92.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP93.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP94.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP95.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP96.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP97.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP98.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP99.CBRIDBS.(UW71235HDZ11E0))
FREE PACKAGE(GROUP00.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP01.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP02.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP03.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP04.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP05.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP06.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP07.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP08.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP09.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP10.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP11.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP12.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP13.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP14.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP15.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP16.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP17.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP18.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP19.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP20.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP21.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP22.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP23.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP24.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP25.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP26.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP27.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP28.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP29.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP30.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP31.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP32.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP33.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP34.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP35.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP36.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP37.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP38.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP39.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP40.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP41.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP42.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP43.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP44.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP45.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP46.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP47.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP48.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP49.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP50.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP51.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP52.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP53.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP54.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP55.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP56.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP57.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP58.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP59.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP60.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP61.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP62.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP63.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP64.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP65.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP66.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP67.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP68.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP69.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP70.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP71.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP72.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP73.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP74.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP75.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP76.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP77.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP78.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP79.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP80.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP81.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP82.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP83.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP84.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP85.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP86.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP87.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP88.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP89.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP90.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP91.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP92.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP93.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP94.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP95.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP96.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP97.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP98.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(GROUP99.CBRIDBS.(UW71236HDZ11F0))
FREE PACKAGE(CBRKCMD.CBRKCMD.(UW71236HDZ11F0))
FREE PACKAGE(CBRKCME.CBRKCME.(UW71236HDZ11F0))
FREE PACKAGE(CBRKCMF.CBRKCMF.(UW71236HDZ11F0))
FREE PACKAGE(CBRHCAUD.CBRHCAUD.(UW71236HDZ11F0))
FREE PACKAGE(CBRHCLDL.CBRHCLDL.(UW71236HDZ11F0))
FREE PACKAGE(CBRHCLLU.CBRHCLLU.(UW71236HDZ11F0))
FREE PACKAGE(CBRHCLMK.CBRHCLMK.(UW71236HDZ11F0))
FREE PACKAGE(CBRHCLSG.CBRHCLSG.(UW71236HDZ11F0))
FREE PACKAGE(CBRHTBSV.CBRHTBSV.(UW71236HDZ11F0))
FREE PACKAGE(A1P.KS5330.(A13X000546))
FREE PACKAGE(A2P.KS5330.(A13X000546))
FREE PACKAGE(A1P.KS5320.(A13X000532))
FREE PACKAGE(A2P.KS5320.(A13X000532))
FREE PACKAGE(A1P.KS5310.(A13X000472))
FREE PACKAGE(A2P.KS5310.(A13X000472))
FREE PACKAGE(BF.BF8651.(A06M014649))
FREE PACKAGE(BP.BP7200.(A20Y000403))
FREE PACKAGE(BF.BF8655.(A06M014649))
FREE PACKAGE(A1P.KS5310.(A13X000651))
FREE PACKAGE(A2P.KS5310.(A13X000651))
FREE PACKAGE(A1P.YKS5551.(A13X000597))
FREE PACKAGE(A2P.YKS5551.(A13X000597))
FREE PACKAGE(A1P.YKS5553.(A13X000597))
FREE PACKAGE(A2P.YKS5553.(A13X000597))
FREE PACKAGE(A1P.YKS5552.(A13X000597))
FREE PACKAGE(A2P.YKS5552.(A13X000597))
FREE PACKAGE(PHPSPTA.GADRELS.())
FREE PACKAGE(PHPS53.GADRELS.())
FREE PACKAGE(A1P.KS5310.(A13X000591))
FREE PACKAGE(A2P.KS5310.(A13X000591))
FREE PACKAGE(A1P.KS5320.(A13X000591))
FREE PACKAGE(A2P.KS5320.(A13X000591))
FREE PACKAGE(A1P.YKS0813.(A13X000591))
FREE PACKAGE(A2P.YKS0813.(A13X000591))
FREE PACKAGE(AT.AT0100.(A20Y000431))
FREE PACKAGE(DAA400_D_MAIN.PSEBN12.(V3201))
FREE PACKAGE(IS.ISLP24.(DML0000006))
FREE PACKAGE(CZ.CZ9991.(KUAN000019))
FREE PACKAGE(CZ.CZ7021.(KUAN000023))
FREE PACKAGE(WP.YWPR2PX.(DBH0000023558AA4ED))
FREE PACKAGE(IS.ISLP93.(DML0000011))
FREE PACKAGE(CZ.CZ7740.(KUAN000029))
FREE PACKAGE(SE.SE7120.(IMS0000024))
FREE PACKAGE(SE.SE7130.(IMS0000024))
FREE PACKAGE(IS.ISLP23.(DML0000014))
FREE PACKAGE(IS.ISLP88.(DML0000014))
FREE PACKAGE(RM.RM7280.(PARS000047))
FREE PACKAGE(TR.TR5360.(DERI000022))
FREE PACKAGE(LQ.LQ8090.(LIQ0000015))
FREE PACKAGE(EX.EX0500.(EXPN000020))
FREE PACKAGE(PR.PR0700I.(PMRT00003856C451BC))
FREE PACKAGE(PR.PR0730I.(PMRT00003856C451C9))
FREE PACKAGE(YY.YYNFP17.(NBSI000070))
FREE PACKAGE(VT.VT0880.(VTX0000018))
FREE PACKAGE(WB.WB1280.(WS8B000188))
FREE PACKAGE(FRNCOL01.FRNA0080.())
FREE PACKAGE(WB.WB1140.(WSTS000032))
FREE PACKAGE(RM.YRMR025.(PARS0000505666A2A0))
FREE PACKAGE(RM.YRMR075.(PARS0000505666A2CB))
FREE PACKAGE(RM.YRMR11O.(PARS0000505666A3C3))
FREE PACKAGE(CZ.CZ7740.(KUAN000028))
FREE PACKAGE(EK.EK6841.(EMA0000030))
FREE PACKAGE(EK.EK6413.(EMA0000030))
FREE PACKAGE(NI.YNI0201.(IPC0000123568132CD))
FREE PACKAGE(NI.YNI0212.(IPC0000123568132CE))
FREE PACKAGE(NI.YNI0202.(IPC0000123568132CD))
FREE PACKAGE(NI.YNI0211.(IPC0000123568132CD))
FREE PACKAGE(NJ.NJ7180.(QMS0000016))
FREE PACKAGE(CD.YCDCL01.(CIIN000149))
FREE PACKAGE(AN.ANNA001.(CIIN000149MVS))
FREE PACKAGE(VT.YVT0509.(VTX00000185697B44F))
FREE PACKAGE(EF.EF5940.(NOST000168))
FREE PACKAGE(EV.EV7040.(EKVS000010))
FREE PACKAGE(VT.YVT0532.(VTX0000018569F3DAA))
FREE PACKAGE(CK.YCKMAPL.(DCA0000079))
FREE PACKAGE(CK.YCKMASI.(DCA0000079569F57AA))
FREE PACKAGE(CK.YCKMABC.(DCA0000079569F57C5))
FREE PACKAGE(CK.YCKMABB.(DCA0000079569F57BF))
FREE PACKAGE(CK.YCKMASL.(DCA0000079569F582F))
FREE PACKAGE(CK.YCKMABU.(DCA0000079569F5810))
FREE PACKAGE(CK.YCKMASG.(DCA0000079569F57E1))
FREE PACKAGE(CK.YCKMASD.(DCA0000079569F5827))
FREE PACKAGE(NJ.YNJ050.(QMS000001656A8CDEA))
FREE PACKAGE(EC.YECDMAE.(SYNC00001056A8EDE4))
FREE PACKAGE(EC.YECDMAE.(SYNC00001056A8EDE4CICS))
FREE PACKAGE(VT.YVTBRVI.(VTX000001856AA20FB))
FREE PACKAGE(VT.YVTCSFP.(VTX000001856AA210A))
FREE PACKAGE(VT.YVTVWAH.(VTX000001856AA2122))
FREE PACKAGE(VT.YVT0502.(VTX000001856AA212B))
FREE PACKAGE(VT.YVT0531.(VTX000001856AA214A))
FREE PACKAGE(VT.YVTDTEX.(VTX000001856A4C5D9))
FREE PACKAGE(RT.YRT0001.(RFT000000956A4A79F))
FREE PACKAGE(RM.RM7930.(PARS000047))
FREE PACKAGE(VP.VP0010.(VIP0000008))
FREE PACKAGE(RM.RM7220.(PARS000047))
FREE PACKAGE(BF.BF7110.(DBH0000054))
FREE PACKAGE(AS.AS0100.(KABG000030))
FREE PACKAGE(AS.AS0610.(KABG000030))
FREE PACKAGE(CZ.CZ6030.(KINF000006))
FREE PACKAGE(CZ.CZ7740.(KINF000006))
FREE PACKAGE(YY.YYNFP17.(NBSI00006156ADD502))
FREE PACKAGE(NF.NF5910.(NBSI000061))
FREE PACKAGE(EC.YECDMAU.(SYNC00001056AF4229))
FREE PACKAGE(RM.YRM2680.(PARS00004756AF6A17))
FREE PACKAGE(RM.YRM2670.(PARS00004756AF6A14))
FREE PACKAGE(TN.TN5003.(OTXO000036))
FREE PACKAGE(TN.TN8910.(OTXO000036))
FREE PACKAGE(AV.AV8730.(PMRT000038))
FREE PACKAGE(RM.YRM0760.(PARS00005056AF7949))
FREE PACKAGE(EX.EX8030.(EXPN000020))
FREE PACKAGE(WB.WB1140.(WSTS000025))
FREE PACKAGE(TR.YTRT061.(RRA000003156B09495))
FREE PACKAGE(TR.TR7040.(DERI000022))
FREE PACKAGE(RM.RM7190.(PARS000047))
FREE PACKAGE(CZ.CZ7270.(HOT0000021))
FREE PACKAGE(WP.YWPXBJF.(DBH0000068575EE14B))
FREE PACKAGE(WP.YWPXBJI.(DBH0000068575EE1AA))
FREE PACKAGE(WP.YWPXBJH.(DBH0000068575EE1C6))
FREE PACKAGE(WP.YWPXBJG.(DBH0000068575EE1D9))
FREE PACKAGE(WP.YWPXB1G.(DBH0000068575EE2B1))
FREE PACKAGE(WP.YWPXB1I.(DBH0000068575EE2ED))
FREE PACKAGE(WP.YWPXB1F.(DBH0000068575EE2BB))
FREE PACKAGE(WP.YWPXB1H.(DBH0000068575EE2F7))
FREE PACKAGE(FRNCOL01.FRNV0080.())
FREE PACKAGE(RT.RT5200.(RFT0000015))
FREE PACKAGE(RT.RT5500.(RFT0000015))
FREE PACKAGE(RT.RT8400.(RFT0000015))
FREE PACKAGE(RT.RT8410.(RFT0000015))
FREE PACKAGE(IT.IT5000.(RFT0000015))
FREE PACKAGE(RT.RT5050.(RFT0000015))
FREE PACKAGE(RT.YRT0011.(RFT000001556F2A4B0))
FREE PACKAGE(EK.EK7661.(EMA0000039))
FREE PACKAGE(EK.EK7664.(EMA0000039))
FREE PACKAGE(EK.EK7668.(EMA0000039))
FREE PACKAGE(EK.EK7660.(EMA0000039))
FREE PACKAGE(EK.EK7666.(EMA0000039))
FREE PACKAGE(EK.EK7667.(EMA0000039))
FREE PACKAGE(RM.YRM2670.(PARS00005456FD4E7D))
FREE PACKAGE(RM.YRM2680.(PARS00005456FD4E81))
FREE PACKAGE(NJ.YNJ050.(QMS000001956F7B92C))
FREE PACKAGE(EC.EC7420.(KAUS000011))
FREE PACKAGE(SV.SV7820.(WSSV000087))
FREE PACKAGE(EK.EK6710.(EMA0000039))
FREE PACKAGE(EK.EK6482.(EMA0000039))
FREE PACKAGE(EK.EK6603.(EMA0000039))
FREE PACKAGE(EK.EK7663.(EMA0000039))
FREE PACKAGE(EK.EK7618.(EMA0000039))
FREE PACKAGE(EK.EK6520.(EMA0000039))
FREE PACKAGE(EK.EK7681.(EMA0000039))
FREE PACKAGE(NF.NF7330.(NBSI000089))
FREE PACKAGE(PR.PR0700I.(PMRT00004756FBDF9D))
FREE PACKAGE(PR.PR0730I.(PMRT00004756FBDFA6))
FREE PACKAGE(NF.NF5900.(NBSI000089))
FREE PACKAGE(NF.NF5910.(NBSI000089))
FREE PACKAGE(RM.RM7210.(PARS000056))
FREE PACKAGE(WB.WB1140.(WSTS000035))
FREE PACKAGE(TR.TR7040.(DERI000026))
FREE PACKAGE(DI.DI8290.(DI00000034))
FREE PACKAGE(DI.YDIDB2.(DI00000034570623C3))
FREE PACKAGE(RM.RM7220.(PARS000054))
FREE PACKAGE(AV.AV8730.(PMRT000047))
FREE PACKAGE(RM.YRM0760.(PARS00005557010BE4))
FREE PACKAGE(EK.EK6510.(EMA0000039))
FREE PACKAGE(AS.AS0101I.(KABG0000325702815B))
FREE PACKAGE(AS.AS0100.(KABG000032))
FREE PACKAGE(AS.AS0610.(KABG000032))
FREE PACKAGE(CK.CK8560.(DCA0000087))
FREE PACKAGE(CZ.CZ7270.(HOT0000018))
FREE PACKAGE(RM.RM7280.(PARS000054))
FREE PACKAGE(CZ.CZ7740.(KUAN000033))
FREE PACKAGE(DI.YDIT015.(DI00000042571F1C16CICS))
FREE PACKAGE(CZ.YCZBCAL.(ACP0000063571F51A9))
FREE PACKAGE(TR.TR5360.(DERI000026))
FREE PACKAGE(WB.WB1280.(TOFF000059))
FREE PACKAGE(WB.WB7720.(TOFF000059))
FREE PACKAGE(NJ.NJ7180.(QMS0000021))
FREE PACKAGE(EK.EK7681.(EMA0000048))
FREE PACKAGE(VV.YVVZZJR.(VDPS00008557CC1B89))
FREE PACKAGE(DP.DP7010.(DP00000050))
FREE PACKAGE(AU.YAU180F.(AURA00005057D6BBB7))
FREE PACKAGE(AU.YAU180U.(AURA00005057D6BBC5))
FREE PACKAGE(AU.YAU181F.(AURA00005057D6BBD9))
FREE PACKAGE(AU.YAU181U.(AURA00005057D6BBE0))
FREE PACKAGE(AU.YAU190F.(AURA00005057D6BC0A))
FREE PACKAGE(AU.YAU190U.(AURA00005057D6BC0D))
FREE PACKAGE(AU.YAU191F.(AURA00005057D6BC1D))
FREE PACKAGE(AU.YAU191U.(AURA00005057D6BC27))
FREE PACKAGE(WB.YWB709.(WS8B00031857D6C4E1))
FREE PACKAGE(VV.YVVZZ21.(VDPS00008557D16DF0))
FREE PACKAGE(EK.EK6413.(EMA0000048))
FREE PACKAGE(EK.EK6520.(EMA0000048))
FREE PACKAGE(EK.EK7660.(EMA0000048))
FREE PACKAGE(EK.EK7668.(EMA0000048))
FREE PACKAGE(EC.YECDMAE.(SYNC00001957EA4559))
FREE PACKAGE(EC.YECDMAE.(SYNC00001957EA4559CICS))
FREE PACKAGE(TR.YTRT061.(RRA000004357E3D5C4))
FREE PACKAGE(NJ.NJ7180.(QMS0000023))
FREE PACKAGE(CZ.CZ7270.(HOT0000023))
FREE PACKAGE(SF.SF7990.(GDIR000033))
FREE PACKAGE(LC.LC0510I.(TFBM0000255772715A))
FREE PACKAGE(AV.AV8730.(PMRT000051))
FREE PACKAGE(NJ.YNJ050.(QMS000002157703E45))
FREE PACKAGE(EK.EK7681.(EMA0000034))
FREE PACKAGE(EK.EK6413.(EMA0000034))
FREE PACKAGE(EK.EK6481.(EMA0000034))
FREE PACKAGE(EK.EK6510.(EMA0000034))
FREE PACKAGE(EK.EK6520.(EMA0000034))
FREE PACKAGE(EK.EK6710.(EMA0000034))
FREE PACKAGE(EK.EK6482.(EMA0000034))
FREE PACKAGE(EK.EK6603.(EMA0000034))
FREE PACKAGE(EK.EK7618.(EMA0000034))
FREE PACKAGE(EK.EK7663.(EMA0000034))
FREE PACKAGE(EK.EK7672.(EMA0000034))
FREE PACKAGE(EK.EK7661.(EMA0000034))
FREE PACKAGE(EK.EK7666.(EMA0000034))
FREE PACKAGE(EK.EK7664.(EMA0000034))
FREE PACKAGE(EK.EK7660.(EMA0000034))
FREE PACKAGE(EK.EK7667.(EMA0000034))
FREE PACKAGE(EK.EK7668.(EMA0000034))
FREE PACKAGE(AS.AS0100.(KABG000038))
FREE PACKAGE(EK.EK6430.(EMA0000034))
FREE PACKAGE(EK.EK6866.(EMA0000034))
FREE PACKAGE(LQ.LQ8090.(LIQ0000019))
FREE PACKAGE(ER.YERDCU0.(EAMR000003))
FREE PACKAGE(ER.YERDUP0.(EAMR000003))
FREE PACKAGE(ER.YERDIN0.(EAMR000003))
FREE PACKAGE(ER.YERDGE0.(EAMR000003))
FREE PACKAGE(SV.SV7820.(WSSV000116))
FREE PACKAGE(TR.TR7040.(DERI000030))
FREE PACKAGE(CZ.CZ7270.(HOT0000024))
FREE PACKAGE(CZ.CZ7270.(HOT0000025))
FREE PACKAGE(WB.WB5320.(TOFF000067))
FREE PACKAGE(WB.WB1140.(WSTS000039))
FREE PACKAGE(TN.TN8920.(OTXO000054))
FREE PACKAGE(TN.TN5003.(OTXO000054))
FREE PACKAGE(TR.TR5360.(DERI000030))
FREE PACKAGE(ER.YERDUP0.(EAMR000005))
FREE PACKAGE(ER.YERDIN0.(EAMR000005))
FREE PACKAGE(ER.YERDCU0.(EAMR000005))
FREE PACKAGE(ER.YERDGE0.(EAMR000005))
FREE PACKAGE(SN.YSN110S.(NOST000268586EA52F))
FREE PACKAGE(SN.YSN111S.(NOST0002685873C750))
FREE PACKAGE(TR.TR5360.(DERI000033))
FREE PACKAGE(AV.AV8730.(PMRT000061))
FREE PACKAGE(BP.BP5020.(BPST000045))
FREE PACKAGE(GROUP00.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP01.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP02.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP03.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP04.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP05.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP06.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP07.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP08.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP09.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP10.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP11.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP12.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP13.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP14.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP15.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP16.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP17.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP18.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP19.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP20.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP21.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP22.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP23.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP24.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP25.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP26.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP27.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP28.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP29.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP30.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP31.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP32.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP33.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP34.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP35.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP36.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP37.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP38.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP39.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP40.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP41.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP42.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP43.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP44.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP45.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP46.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP47.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP48.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP49.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP50.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP51.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP52.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP53.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP54.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP55.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP56.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP57.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP58.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP59.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP60.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP61.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP62.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP63.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP64.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP65.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP66.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP67.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP68.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP69.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP70.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP71.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP72.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP73.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP74.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP75.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP76.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP77.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP78.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP79.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP80.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP81.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP82.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP83.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP84.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP85.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP86.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP87.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP88.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP89.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP90.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP91.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP92.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP93.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP94.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP95.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP96.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP97.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP98.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(GROUP99.CBRIDBS.(UW95199HDZ11G0))
FREE PACKAGE(DAA400_D_MAIN.PSSCSQL.(V4000))
FREE PACKAGE(PSSSICH.PSSCSQL.(V4000))
FREE PACKAGE(OS.DB2EBS01.(A18Q001546))
FREE PACKAGE(OS.DB2EBS03.(A18Q001546))
FREE PACKAGE(OS.DB2REORG.(A18Q001546))
FREE PACKAGE(OS.DB2EBS01.(PROD))
FREE PACKAGE(OS.DB2EBS03.(PROD))
FREE PACKAGE(OS.DB2REORG.(PROD))
FREE PACKAGE(YY.YYHECO.(A06M022888))
FREE PACKAGE(WA.WK9000.(A06M012041))
FREE PACKAGE(GROUP00.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP01.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP02.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP03.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP04.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP05.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP06.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP07.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP08.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP09.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP10.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP11.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP12.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP13.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP14.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP15.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP16.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP17.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP18.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP19.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP20.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP21.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP22.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP23.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP24.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP25.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP26.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP27.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP28.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP29.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP30.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP31.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP32.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP33.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP34.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP35.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP36.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP37.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP38.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP39.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP40.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP41.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP42.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP43.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP44.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP45.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP46.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP47.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP48.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP49.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP50.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP51.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP52.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP53.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP54.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP55.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP56.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP57.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP58.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP59.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP60.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP61.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP62.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP63.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP64.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP65.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP66.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP67.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP68.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP69.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP70.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP71.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP72.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP73.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP74.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP75.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP76.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP77.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP78.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP79.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP80.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP81.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP82.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP83.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP84.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP85.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP86.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP87.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP88.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP89.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP90.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP91.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP92.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP93.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP94.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP95.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP96.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP97.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP98.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(GROUP99.CBRIDBS.(UA03047HDZ11G0))
FREE PACKAGE(SE.SE0560.(A20Y001226))
FREE PACKAGE(DAA400_D_MAIN.PSSCSQL.(V4100))
FREE PACKAGE(IS.ISLP89.(A06M024770))
FREE PACKAGE(SE.SE0560.(A20Y001357))
FREE PACKAGE(IS.ISLP87.(A06M025140))
FREE PACKAGE(GROUP00.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP01.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP02.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP03.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP04.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP05.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP06.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP07.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP08.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP09.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP10.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP11.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP12.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP13.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP14.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP15.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP16.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP17.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP18.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP19.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP20.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP21.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP22.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP23.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP24.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP25.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP26.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP27.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP28.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP29.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP30.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP31.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP32.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP33.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP34.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP35.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP36.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP37.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP38.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP39.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP40.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP41.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP42.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP43.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP44.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP45.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP46.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP47.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP48.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP49.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP50.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP51.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP52.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP53.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP54.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP55.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP56.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP57.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP58.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP59.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP60.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP61.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP62.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP63.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP64.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP65.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP66.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP67.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP68.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP69.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP70.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP71.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP72.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP73.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP74.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP75.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP76.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP77.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP78.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP79.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP80.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP81.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP82.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP83.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP84.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP85.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP86.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP87.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP88.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP89.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP90.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP91.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP92.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP93.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP94.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP95.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP96.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP97.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP98.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP99.CBRHDBSD.(319441973392039077))
FREE PACKAGE(GROUP00.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP01.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP02.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP03.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP04.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP05.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP06.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP07.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP08.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP09.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP10.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP11.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP12.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP13.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP14.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP15.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP16.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP17.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP18.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP19.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP20.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP21.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP22.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP23.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP24.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP25.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP26.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP27.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP28.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP29.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP30.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP31.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP32.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP33.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP34.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP35.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP36.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP37.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP38.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP39.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP40.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP41.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP42.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP43.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP44.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP45.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP46.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP47.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP48.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP49.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP50.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP51.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP52.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP53.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP54.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP55.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP56.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP57.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP58.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP59.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP60.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP61.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP62.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP63.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP64.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP65.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP66.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP67.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP68.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP69.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP70.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP71.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP72.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP73.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP74.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP75.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP76.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP77.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP78.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP79.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP80.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP81.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP82.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP83.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP84.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP85.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP86.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP87.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP88.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP89.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP90.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP91.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP92.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP93.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP94.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP95.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP96.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP97.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP98.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP99.CBRHDBS.(441624379392039079))
FREE PACKAGE(GROUP00.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP01.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP02.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP03.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP04.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP05.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP06.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP07.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP08.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP09.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP10.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP11.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP12.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP13.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP14.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP15.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP16.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP17.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP18.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP19.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP20.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP21.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP22.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP23.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP24.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP25.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP26.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP27.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP28.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP29.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP30.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP31.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP32.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP33.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP34.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP35.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP36.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP37.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP38.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP39.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP40.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP41.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP42.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP43.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP44.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP45.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP46.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP47.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP48.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP49.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP50.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP51.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP52.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP53.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP54.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP55.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP56.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP57.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP58.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP59.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP60.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP61.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP62.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP63.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP64.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP65.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP66.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP67.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP68.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP69.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP70.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP71.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP72.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP73.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP74.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP75.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP76.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP77.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP78.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP79.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP80.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP81.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP82.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP83.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP84.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP85.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP86.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP87.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP88.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP89.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP90.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP91.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP92.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP93.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP94.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP95.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP96.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP97.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP98.CBRHDBCV.(051332294392039080))
FREE PACKAGE(GROUP99.CBRHDBCV.(051332294392039080))
FREE PACKAGE(CBRHTBSV.CBRHTBSV.(2004-03-19-05.19.54.152123))
FREE PACKAGE(GROUP00.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP01.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP02.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP03.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP04.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP05.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP06.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP07.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP08.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP09.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP10.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP11.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP12.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP13.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP14.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP15.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP16.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP17.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP18.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP19.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP20.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP21.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP22.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP23.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP24.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP25.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP26.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP27.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP28.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP29.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP30.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP31.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP32.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP33.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP34.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP35.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP36.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP37.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP38.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP39.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP40.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP41.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP42.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP43.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP44.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP45.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP46.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP47.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP48.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP49.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP50.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP51.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP52.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP53.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP54.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP55.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP56.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP57.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP58.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP59.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP60.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP61.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP62.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP63.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP64.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP65.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP66.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP67.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP68.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP69.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP70.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP71.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP72.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP73.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP74.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP75.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP76.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP77.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP78.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP79.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP80.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP81.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP82.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP83.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP84.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP85.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP86.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP87.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP88.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP89.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP90.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP91.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP92.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP93.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP94.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP95.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP96.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP97.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP98.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(GROUP99.CBRIDBS.(2004-03-19-05.20.09.717597))
FREE PACKAGE(CBRKCMF.CBRKCMF.(2004-03-19-05.24.25.989125))
FREE PACKAGE(CBRKCMD.CBRKCMD.(2004-03-19-05.24.23.684781))
FREE PACKAGE(CBRKCMI.CBRKCMI.(2004-03-19-05.24.26.340864))
FREE PACKAGE(CBRKCME.CBRKCME.(2004-03-19-05.24.26.563442))
FREE PACKAGE(CBRKISQL.CBRKISQL.(2004-03-19-05.25.14.674538))
FREE PACKAGE(CBRHCAUD.CBRHCAUD.(2004-03-19-05.11.59.464087))
FREE PACKAGE(CBRHCLDL.CBRHCLDL.(2004-03-19-05.12.02.836637))
FREE PACKAGE(CBRHCLLU.CBRHCLLU.(2004-03-19-05.12.15.137411))
FREE PACKAGE(CBRHCLMK.CBRHCLMK.(2004-03-19-05.12.19.187980))
FREE PACKAGE(CBRHCLSG.CBRHCLSG.(2004-03-19-05.12.43.102236))
FREE PACKAGE(KS.YKSFTXT.(A14S002412533962A5))
FREE PACKAGE(DAA420_D_MAIN.PSSCSQL.(V4100))
FREE PACKAGE(SE.YSE09D0.(A20Y00142753971B62))
FREE PACKAGE(CK.YCKMABU.(A12M005710534404B9))
FREE PACKAGE(DAA420_D_MAIN.PSSHSQL.(V4200))
FREE PACKAGE(SE.SE8710.(A12M006478))
FREE PACKAGE(IT.IT5501.(A20Y001508))
FREE PACKAGE(CZ.CZ5600.(CRMA003972))
FREE PACKAGE(CBRKCMR.CBRKCMR.(UA12772HDZ11J0))
FREE PACKAGE(CBRKCMT.CBRKCMT.(518446089393395349))
FREE PACKAGE(NL.YNLG030.(BALR00000154735D18))
FREE PACKAGE(IS.ISLP20.(DML0000004))
FREE PACKAGE(SV.SV0930.(WSSV000188))
FREE PACKAGE(CZ.YCZJ323.(GSER00017058D7E6D6))
FREE PACKAGE(CZ.YCZJ431.(GSER00017058D7E73D))
FREE PACKAGE(YY.YYUWI.(PSMF00001758EE0EC7))
FREE PACKAGE(PU.PU7334.(JCLB000014))
FREE PACKAGE(DE.DE9992.(DE00000043))
FREE PACKAGE(FI.FI1900.(BKUR000052))
FREE PACKAGE(VV.YVVZZAR.(VDPS00009958921A13))
FREE PACKAGE(WB.WB1350.(WSTS000046))
FREE PACKAGE(WB.WB1060.(WSTS000046))
FREE PACKAGE(VV.YVVZZ2R.(VDPS00009958933BBC))
FREE PACKAGE(ER.YERPRI.(EAMR000022))
FREE PACKAGE(VV.YVVZZ09.(VDPS000099589B3FC8))
FREE PACKAGE(NI.YNICOFM.(IPC000017558A323CC))
FREE PACKAGE(FI.FI5067.(BKUR000052))
FREE PACKAGE(ER.YERPRI.(EAMR000029))
FREE PACKAGE(DG.YDGPORT.(DEPG000064))
FREE PACKAGE(YY.YYGETCS.(TOFF0001095953C065))
FREE PACKAGE(YY.YYGETCS.(TOFF0001095953C065MVS))
FREE PACKAGE(WB.WB0720.(WS8B000473))
FREE PACKAGE(DE.DE5031.(DE00000066))
FREE PACKAGE(DE.DE9992.(DE00000066))
FREE PACKAGE(FC.FC0010.(KLOM000062))
FREE PACKAGE(WC.WC7100.(OTXO000070))
FREE PACKAGE(TN.TN8920.(OTXO000070))
FREE PACKAGE(WC.WC7104.(OTXO000070))
FREE PACKAGE(WC.WC7105.(OTXO000070))
FREE PACKAGE(WC.WC7106.(OTXO000070))
FREE PACKAGE(WC.WC7400.(OTXO000070))
FREE PACKAGE(WC.WC7402.(OTXO000070))
FREE PACKAGE(WC.WC7403.(OTXO000070))
FREE PACKAGE(SN.YSND006.(SAVS0000055960CF65))
FREE PACKAGE(TN.YTN0180.(OTXO0000705965FEAFMVS))
FREE PACKAGE(TN.YTN0190.(OTXO0000705965FEBFMVS))
FREE PACKAGE(WC.WC7109.(OTXO000070))
FREE PACKAGE(WC.WC7404.(OTXO000070))
FREE PACKAGE(WC.WC7405.(OTXO000070))
FREE PACKAGE(WC.WC7108.(OTXO000070))
FREE PACKAGE(WB.WB7720.(TOFF000109))
FREE PACKAGE(AV.AV8710.(PMRT000087))
FREE PACKAGE(SE.SE8300.(IMS0000057))
FREE PACKAGE(SE.SE8310.(IMS0000057))
FREE PACKAGE(NL.YNLG140.(BALR0000745979E99AMVS))
FREE PACKAGE(NL.YNLG050.(BALR0000745979E97F))
FREE PACKAGE(NL.YNLG040.(BALR0000745979E97EMVS))
FREE PACKAGE(NL.YNLG060.(BALR0000745979E986))
FREE PACKAGE(NL.YNLG060.(BALR0000745979E986MVS))
FREE PACKAGE(NL.YNLG050.(BALR0000745979E97FMVS))
FREE PACKAGE(NL.YNLG121.(BALR0000745979E992))
FREE PACKAGE(NL.YNLG130.(BALR0000745979E995MVS))
FREE PACKAGE(NL.YNLG03M.(BALR0000745979E978MVS))
FREE PACKAGE(NL.YNLG030.(BALR0000745979E975))
FREE PACKAGE(NL.YNLG030.(BALR0000745979E975MVS))
FREE PACKAGE(NL.YNLG021.(BALR0000745979E970))
FREE PACKAGE(ED.ED5231.(ED00000052))
FREE PACKAGE(DE.DE5080.(DE00000061))
FREE PACKAGE(DE.DE9992.(DE00000061))
FREE PACKAGE(WB.WB0720.(WS8B000411))
FREE PACKAGE(CZ.CZ5494.(ACP0000107))
FREE PACKAGE(WB.WB0720.(WS8B000441))
FREE PACKAGE(PU.PU7334.(JCLB000021))
FREE PACKAGE(VV.YVVZZ06.(VDPS000114594269AF))
FREE PACKAGE(VV.YVVZZ30.(VDPS00011459426994))
FREE PACKAGE(VV.YVVZZ15.(VDPS00011459426A38))
FREE PACKAGE(VV.YVVZZ06.(VDPS000114594269AFMVS))
FREE PACKAGE(VV.YVVZZ08.(VDPS000114594269CD))
FREE PACKAGE(VV.YVVZZ21.(VDPS00011459426A44))
FREE PACKAGE(VV.YVVZZ12.(VDPS00011459426A35))
FREE PACKAGE(VV.YVVZZ1R.(VDPS00011459426A3E))
FREE PACKAGE(VV.YVVZZ1R.(VDPS00011459426A3EMVS))
FREE PACKAGE(VV.YVVZZJR.(VDPS00011459426A61))
FREE PACKAGE(VV.YVVZZ16.(VDPS00011459426A5D))
FREE PACKAGE(VV.YVVZZAR.(VDPS00011459426A66))
FREE PACKAGE(VV.YVVZZ23.(VDPS00011459426A7F))
FREE PACKAGE(VV.YVVZZ24.(VDPS00011459426A82))
FREE PACKAGE(VV.YVVZZ09.(VDPS00011459426A6C))
FREE PACKAGE(VV.YVVZZ2R.(VDPS0001145947F3D5MVS))
FREE PACKAGE(VV.YVVZZ2R.(VDPS0001145947F3D5))
FREE PACKAGE(VV.YVVZZ3R.(VDPS0001145947F471))
FREE PACKAGE(VV.YVVZZ18.(VDPS0001145947F613))
FREE PACKAGE(VV.YVVZZ05.(VDPS0001145947F5B1))
FREE PACKAGE(VV.YVVZZ14.(VDPS0001145947F5C7))
FREE PACKAGE(VV.YVVZZ17.(VDPS0001145947F5E0))
FREE PACKAGE(VV.YVVZZFR.(VDPS0001145947F698))
FREE PACKAGE(VV.YVVZZFR.(VDPS0001145947F698MVS))
FREE PACKAGE(VV.YVVZZ25.(VDPS0001145947F674))
FREE PACKAGE(VV.YVVZZ29.(VDPS0001145947F759))
FREE PACKAGE(VV.YVVZZ03.(VDPS000114594A9918))
FREE PACKAGE(VV.YVVZZ03.(VDPS000114594A9918MVS))
FREE PACKAGE(BP.YBPMUT.(BPST000079594A969E))
FREE PACKAGE(VV.YVVZZ27.(VDPS0001145946AEC8))
FREE PACKAGE(YY.YYWBKUR.(BKUR000080594658B8))
FREE PACKAGE(VV.YVVZZQR.(VDPS000114595120D5))
FREE PACKAGE(VV.YVVZZ10.(VDPS00011459525BC8))
FREE PACKAGE(WB.WB0720.(WS8B000468))
FREE PACKAGE(YX.YXWB231.(WSTS000055594BF1B9))
FREE PACKAGE(YX.YXWB011.(WSTS000055594BF1D5))
FREE PACKAGE(VW.YVWB641.(WSTS000055594BF359))
FREE PACKAGE(YY.YYWBERR.(WSTS000055594BF0A8))
FREE PACKAGE(DI.YDITBTB.(DI00000068594F7FC8CICSMVS))
FREE PACKAGE(DI.YDITBTB.(DI00000068594F7FC8MVS))
FREE PACKAGE(DI.YDITBTB.(DI00000068594F7FC8))
FREE PACKAGE(DI.YDIT015.(DI00000068594F823D))
FREE PACKAGE(DI.YDIT015.(DI00000068594F823DMVS))
FREE PACKAGE(DI.YDIT015.(DI00000068594F823DCICSMVS))
FREE PACKAGE(VV.YVVZZ19.(VDPS00011759DB8665))
FREE PACKAGE(VV.YVVZZ27.(VDPS00011759DB8776))
FREE PACKAGE(PC.YPC0870.(IVN000003559DD0082))
FREE PACKAGE(EQ.YEQISRK.(EAGL00002459DCE1D0CICSMVS))
FREE PACKAGE(VV.YVVZZ10.(VDPS00011759E342BE))
FREE PACKAGE(VV.YVVZZ22.(VDPS00011759EDC6D8))
FREE PACKAGE(VV.YVVZZ28.(VDPS00011759EDC6FA))
FREE PACKAGE(DP.DP0320.(DP00000071))
FREE PACKAGE(VV.YVV3EIP.(VDPS0001175A00A470MVS))
FREE PACKAGE(FI.YFIWMKG.(BKUR0001165A008305))
FREE PACKAGE(VV.YVVZZ33.(VDPS00011759FB4F83))
FREE PACKAGE(WB.WB0720.(WS8B000471))
FREE PACKAGE(TN.TN8920.(OTXO000081))
FREE PACKAGE(WB.WB0720.(WS8B000540))
FREE PACKAGE(VV.YVV3EIP.(VDPS0001565A0883F9))
FREE PACKAGE(WB.WB0720.(WS8B000535))
FREE PACKAGE(WB.WB0720.(WS8B000443))
FREE PACKAGE(WB.WB0720.(WS8I000307))
FREE PACKAGE(BP.YBPMUT.(BPST000087599ECB6F))
FREE PACKAGE(LC.YLCTF03.(TFBM00003359B6B138MVS))
FREE PACKAGE(LC.YLCTF02.(TFBM00003359B6B121MVS))
FREE PACKAGE(WB.WB0720.(WS8B000493))
FREE PACKAGE(WB.WB0720.(WS8B000476))
FREE PACKAGE(WP.YWPLBP1.(DBH000012659B8E57E))
FREE PACKAGE(WP.YWPLBP1.(DBH000012659B8E57EMVS))
FREE PACKAGE(WP.YWPL6P1.(DBH000012659B8E72D))
FREE PACKAGE(WP.YWPR1QX.(DBH000012659B8E877))
FREE PACKAGE(WP.YWPR3PX.(DBH000012659B8E97F))
FREE PACKAGE(WP.YWPR5PX.(DBH000012659B8E9C1))
FREE PACKAGE(WP.YWPRCPX.(DBH000012659B8FAB2))
FREE PACKAGE(WP.YWPR6PX.(DBH000012659B8FB2E))
FREE PACKAGE(WP.YWPR7PX.(DBH000012659B8FB4B))
FREE PACKAGE(WP.YWPRAPX.(DBH000012659B90365))
FREE PACKAGE(WP.YWPLAP1.(DBH000012659B91C65))
FREE PACKAGE(WP.YWPLAP1.(DBH000012659B91C65MVS))
FREE PACKAGE(VV.YVVZZ2R.(VDPS00011759C7AE13))
FREE PACKAGE(VV.YVVZZ2R.(VDPS00011759C7AE13MVS))
FREE PACKAGE(DI.YDIU015.(DI0000007059C7A76B))
FREE PACKAGE(DI.YDIU015.(DI0000007059C7A76BMVS))
FREE PACKAGE(DI.YDIU016.(DI0000007059C7A7B9))
FREE PACKAGE(DI.YDIU016.(DI0000007059C7A7B9MVS))
FREE PACKAGE(LC.LC0511I.(TFBM00003359C2729FMVS))
FREE PACKAGE(VV.YVVZZ12.(VDPS00011759D0EFDA))
FREE PACKAGE(EQ.YEQKDGP.(GSER00018759C91710))
FREE PACKAGE(TN.YTN0201.(OTXO00008159CA241A))
FREE PACKAGE(VV.YVVZZ14.(VDPS00011759D2568E))
FREE PACKAGE(VV.YVVZZ05.(VDPS00011759D36248))
FREE PACKAGE(WB.WB8720.(WSTS000061))
FREE PACKAGE(WC.WC7103.(WSTS000061))
FREE PACKAGE(WC.WC7102.(WSTS000061))
FREE PACKAGE(WB.WB7030.(WSTS000061))
FREE PACKAGE(WC.WC8403.(WSTS000061))
FREE PACKAGE(WC.WC8402.(WSTS000061))
FREE PACKAGE(WB.WB0060.(TOFF000122))
FREE PACKAGE(WB.WB0720.(WS8B000548))
FREE PACKAGE(RB.YRBUXY1.(RBK00000185A1D6D88MVS))
FREE PACKAGE(VV.YVVZZ06.(VDPS0001185A1E8803))
FREE PACKAGE(VV.YVVZZ06.(VDPS0001185A1E8803MVS))
FREE PACKAGE(VV.YVVZZ21.(VDPS0001185A1E8890))
FREE PACKAGE(VV.YVVZZ18.(VDPS0001185A1E8884MVS))
FREE PACKAGE(VV.YVVZZ28.(VDPS0001185A1E88A3))
FREE PACKAGE(WB.WB0720.(WS8B000524))
FREE PACKAGE(BX.YBXADBR.(CLOS0001835A25007A))
FREE PACKAGE(GM.YGMSTEU.(GM000001605A2E77C8))
FREE PACKAGE(WF.YWFM537.(WSSW0001055A2EA204))
FREE PACKAGE(YX.YXWB231.(WSTS0000615A39A8B6))
FREE PACKAGE(YY.YYWBERR.(WSTS0000615A39A896))
FREE PACKAGE(CK.YCKE025.(DCA0000188))
FREE PACKAGE(CK.YCKE020.(DCA0000188))
FREE PACKAGE(SN.SN5001.(SAVS000018))
FREE PACKAGE(SN.SN5902.(SAVS000018))
FREE PACKAGE(SN.SN5910.(SAVS000018))
FREE PACKAGE(DE.YDE0021.(DE000000775A53475E))
FREE PACKAGE(YY.YYFIKST.(BKUR0000965A5DE9E3))
FREE PACKAGE(FI.FI5600.(BKUR000096))
FREE PACKAGE(VV.YVV5070.(VDPS0001185A5DDB5D))
FREE PACKAGE(VV.YVV5070.(VDPS0001185A5DDB5DMVS))
FREE PACKAGE(VV.YVVZZFR.(VDPS0001185A5DDA78))
FREE PACKAGE(VV.YVVZZFR.(VDPS0001185A5DDA78MVS))
FREE PACKAGE(DE.DE9992.(DE00000077))
FREE PACKAGE(CZ.YCZJABW.(GSER0002225A9C2BE5))
FREE PACKAGE(SV.SV8410.(WSSV000151))
FREE PACKAGE(SV.SV5940.(WSSV000151))
FREE PACKAGE(SV.SV0950.(WSSV000151))
FREE PACKAGE(SV.SV0250.(WSSV000151))
FREE PACKAGE(PC.PC7040.(IVN0000028))
FREE PACKAGE(VV.YVVZZNR.(VDPS000099587E0594))
FREE PACKAGE(VV.YVVZZ25.(VDPS000099587E2698))
FREE PACKAGE(CZ.CZ5494.(ACP0000103))
FREE PACKAGE(VV.YVVZZ21.(VDPS00011459426A44MVS))
FREE PACKAGE(VV.YVVZZ21.(VDPS00011759D24460MVS))
FREE PACKAGE(CZ.CZ5991.(GSER000191))
FREE PACKAGE(WQ.WQ6000.(CUBE000112))
FREE PACKAGE(RT.RT5550.(TABS000080))
FREE PACKAGE(NL.NL7590.(BALR000076))
FREE PACKAGE(WQ.WQ6000.(CUBE000118))
FREE PACKAGE(CZ.CZ6400.(GSER000206))
FREE PACKAGE(WP.YWPR2PX.(DBH000012659B8E89C))
FREE PACKAGE(VV.YVVZZJR.(VDPS00011459426A61MVS))
FREE PACKAGE(VV.YVVZZ15.(VDPS00011759EDC6CA))
FREE PACKAGE(WF.YWFCB02.(WSSW0001055A2E9AD7))
FREE PACKAGE(WF.YWFSWC.(WSSW000073))
FREE PACKAGE(MF.MF8950.(MFR0000049))
FREE PACKAGE(MF.MF7750.(MFR0000073))
FREE PACKAGE(WF.WF5410.(WSSW000073))
FREE PACKAGE(WP.YWPXBGE.(A06M0263755379E562))
FREE PACKAGE(WP.YWPXBYC.(A06M0263755379E9BB))
FREE PACKAGE(WF.YWFSWC.(WS8B000357))
FREE PACKAGE(CE.CE8440.(COPE000034))
FREE PACKAGE(VP.VP5340.(VIP0000015))
FREE PACKAGE(TN.TN7020.(OTXO000036))
FREE PACKAGE(WP.YWPR5PX.(DBH000006857593EAD))
FREE PACKAGE(TN.YTN5012.(OTXO0000545766A6D3))
FREE PACKAGE(TN.YTN5013.(OTXO00005457A1E413))
FREE PACKAGE(TN.TN7004.(OTXO000054))
FREE PACKAGE(WP.YWPYBDD.(DBH000002254EDE1C2))
FREE PACKAGE(IT.YITGTR.(TABS0000535613D1F0))
FREE PACKAGE(EB.EB8374.(KLOM000043))
FREE PACKAGE(EB.EB8375.(KLOM000049))
FREE PACKAGE(TN.TN7067.(OTXO000045))
FREE PACKAGE(TN.TN7068.(OTXO000045))
FREE PACKAGE(TN.TN7065.(OTXO000045))
FREE PACKAGE(CZ.CZ7510.(APEN000036))
FREE PACKAGE(CZ.CZ8010.(APEN000032))
FREE PACKAGE(TN.TN7066.(OTXO000054))
FREE PACKAGE(BP.BP7161.(BPST000037))
FREE PACKAGE(WP.YWPXB1D.(DBH0000068575EE2D0))
FREE PACKAGE(SV.SV5750.(WSSV000116))
FREE PACKAGE(VT.VT0120.(EBZV000009))
FREE PACKAGE(WF.YWFSWC.(WSSW000074))
FREE PACKAGE(WF.WF5410.(WSSW000074))
FREE PACKAGE(EV.EV8100.(EKVS000006))
FREE PACKAGE(RT.RT5110.(RFT0000004))
FREE PACKAGE(MF.MF7010.(MFR0000049))
FREE PACKAGE(NF.NF5710.(NBSI000050))
FREE PACKAGE(TN.YTNW100.(OTXO0000235628CC9D))
FREE PACKAGE(DE.DE7120.(DE00000023))
FREE PACKAGE(MF.MF7801.(MFR0000078))
FREE PACKAGE(GE.GE7770.(FFOR000021))
FREE PACKAGE(WP.YWPXB1E.(DBH0000068575EE2C6))
FREE PACKAGE(PC01.PC5070.(IVN0000021))
FREE PACKAGE(PC02.PC5070.(IVN0000021))
FREE PACKAGE(PC03.PC5070.(IVN0000021))
FREE PACKAGE(PC04.PC5070.(IVN0000021))
FREE PACKAGE(PC05.PC5070.(IVN0000021))
FREE PACKAGE(PC06.PC5070.(IVN0000021))
FREE PACKAGE(CZ.CZ5280.(KLOM000049))
FREE PACKAGE(VV.YVVZZ04.(VDPS000077576AD450))
FREE PACKAGE(MF.MF7000.(MFR0000082))
FREE PACKAGE(TN.YTNBOPH.(OTXO0000545766A5BA))
FREE PACKAGE(RT.RT5090.(RFT0000015))
FREE PACKAGE(RT.RT5120.(RFT0000015))
FREE PACKAGE(RT.RT5060.(RFT0000015))
FREE PACKAGE(RT.RT5140.(RFT0000015))
FREE PACKAGE(RT.RT5170.(RFT0000015))
FREE PACKAGE(RT.RT5020.(RFT0000015))
FREE PACKAGE(RT.RT5160.(RFT0000015))
FREE PACKAGE(TN.TN8900.(OTXO000045))
FREE PACKAGE(YY.YYFILOD.(BKUR00003857C69CB7))
FREE PACKAGE(CZ.CZ6300.(GSER000128))
FREE PACKAGE(WB.WB5570.(WS8B000334))
FREE PACKAGE(ER.YERDUPD.(EAMR00000557C5BAD0))
FREE PACKAGE(WB.WB5340.(WS8B000345))
FREE PACKAGE(WF.YWFM537.(WSSW00007157D57C31))
FREE PACKAGE(CU.CU9000.(CIFS000122))
FREE PACKAGE(TN.YTNW170.(OTXO00005457724BD1))
FREE PACKAGE(MF.MF7210.(MFR0000082))
FREE PACKAGE(AS.AS0050.(KABG000038))
FREE PACKAGE(WF.YWF64CA.(WSSW000064577A9CFA))
FREE PACKAGE(KS.KS5685.(EBVV000187))
FREE PACKAGE(SV.SV5150.(WSSV000116))
FREE PACKAGE(SV.SV5710.(WSSV000116))
FREE PACKAGE(SV.SV5740.(WSSV000116))
FREE PACKAGE(SV.SV5790.(WSSV000116))
FREE PACKAGE(SV.SV5600.(WSSV000116))
FREE PACKAGE(SV.SV5210.(WSSV000116))
FREE PACKAGE(MF.MF8703.(MFR0000082))
FREE PACKAGE(MF.MF8706.(MFR0000082))
FREE PACKAGE(MF.MF8710.(MFR0000082))
FREE PACKAGE(MF.MF8719.(MFR0000082))
FREE PACKAGE(EV.EV7030.(EKVS000013))
FREE PACKAGE(DE.DE5690.(DE00000033))
FREE PACKAGE(FF.FF5000.(FFOR000021))
FREE PACKAGE(PC.PC5090.(IVN0000021))
FREE PACKAGE(KS.YKS5512.(CSED00002257821E43))
FREE PACKAGE(AZ.AZ0210.(AWZA000036))
FREE PACKAGE(SV.SV8150.(WSSV000116))
FREE PACKAGE(DE.DE5600.(DE00000033))
FREE PACKAGE(SV.SV5760.(WSSV000116))
FREE PACKAGE(YY.YYWBERX.(TOFF00006757A1E2F4))
FREE PACKAGE(WB.WB5280.(WSTS000039))
FREE PACKAGE(TN.TN5016.(OTXO000054))
FREE PACKAGE(TN.TN5010.(OTXO000054))
FREE PACKAGE(CZ.CZ5150.(KLOM000049))
FREE PACKAGE(PC01.PC5060.(AIS0000110))
FREE PACKAGE(PC02.PC5060.(AIS0000110))
FREE PACKAGE(PC03.PC5060.(AIS0000110))
FREE PACKAGE(PC04.PC5060.(AIS0000110))
FREE PACKAGE(PC05.PC5060.(AIS0000110))
FREE PACKAGE(PC06.PC5060.(AIS0000110))
FREE PACKAGE(DI.DI5200.(DI00000046))
FREE PACKAGE(WF.YWFCB02.(WSSW00003857BC040B))
FREE PACKAGE(WQ.WQ5950.(CUBE000058))
FREE PACKAGE(WF.YWFSWC.(WSSW000075))
FREE PACKAGE(HP1.AAFYWR.(HPSVP2AAFYWR))
FREE PACKAGE(VT.YVTBEDR.(A14S00248553A57407))
FREE PACKAGE(WP.YWPXBKF.(A06M0264235370BC96))
FREE PACKAGE(WP.YWPXBME.(A06M0264235370BD2A))
FREE PACKAGE(WP.YWPXBMA.(A06M0264235370BCCF))
FREE PACKAGE(WP.YWPXBMD.(A06M0264235370BCE8))
FREE PACKAGE(WP.YWPXBMB.(A06M0264235370BD02))
FREE PACKAGE(WP.YWPXBPA.(A06M0263755379E68B))
FREE PACKAGE(WP.YWPXBPB.(A06M0263755379E690))
FREE PACKAGE(WP.YWPXBPC.(A06M0263755379E696))
FREE PACKAGE(WP.YWPXBPD.(A06M0263755379E69D))
FREE PACKAGE(WP.YWPXBPE.(A06M0263755379E6A2))
FREE PACKAGE(WP.YWPXBPF.(A06M0263755379E6A8))
FREE PACKAGE(WP.YWPXBPG.(A06M0263755379E6AC))
FREE PACKAGE(WP.YWPXBPH.(A06M0263755379E6B1))
FREE PACKAGE(WP.YWPXBPI.(A06M0263755379E6B5))
FREE PACKAGE(WP.YWPXBQB.(A06M0263755379E78F))
FREE PACKAGE(WP.YWPXBQA.(A06M0263755379E6B9))
FREE PACKAGE(WP.YWPXBQE.(A06M0263755379E79C))
FREE PACKAGE(WP.YWPXBQD.(A06M0263755379E797))
FREE PACKAGE(WP.YWPXBQF.(A06M0263755379E7A0))
FREE PACKAGE(WP.YWPXBQG.(A06M0263755379E7A5))
FREE PACKAGE(WP.YWPYBAC.(A06M0263755379FA86))
FREE PACKAGE(WP.YWPYBAD.(A06M0263755379FA8A))
FREE PACKAGE(WP.YWPYBAE.(A06M0263755379FA8F))
FREE PACKAGE(WP.YWPYBAF.(A06M0263755379FA93))
FREE PACKAGE(WP.YWPYBAG.(A06M0263755379FA97))
FREE PACKAGE(EV.EV8220.(A19R002528))
FREE PACKAGE(YY.YYWBKUR.(A06M027333543018CE))
FREE PACKAGE(VT.YVTDTAT.(A14S00262754901C5B))
FREE PACKAGE(VV.YVV5070.(VDPS00001455081B63))
FREE PACKAGE(RT.RT5130.(RFT0000003))
FREE PACKAGE(MF.YMFC118.(MFR0000083575FEE4D))
FREE PACKAGE(HPS.ZANJIVS.(HPSVP2ZANJIVS))
FREE PACKAGE(HP1.ZANJIVS.(HPSVP2ZANJIVS))
FREE PACKAGE(HPS.ZAJVAVS.(HPSVP2ZAJVAVS))
FREE PACKAGE(HP1.ZAJVAVS.(HPSVP2ZAJVAVS))
FREE PACKAGE(HPS.ZAJOIVS.(HPSVP2ZAJOIVS))
FREE PACKAGE(HP1.ZAJOIVS.(HPSVP2ZAJOIVS))
FREE PACKAGE(HP1.AA6VV6.(HPSVP2AA6VV6))
FREE PACKAGE(HP3.AA6VV6.(HPSVP2AA6VV6))
FREE PACKAGE(HP1.ABMXVN.(HPSVP2ABMXVN))
FREE PACKAGE(HP3.ABMXVN.(HPSVP2ABMXVN))
FREE PACKAGE(HP1.AAFZWR.(HPSVP2AAFZWR))
FREE PACKAGE(HP3.AAFZWR.(HPSVP2AAFZWR))
FREE PACKAGE(HP1.AJ0EWS.(HPSVP2AJ0EWS))
FREE PACKAGE(HP3.AJ0EWS.(HPSVP2AJ0EWS))
FREE PACKAGE(HP1.AGXNLE.(HPSVP2AGXNLE))
FREE PACKAGE(HP3.AGXNLE.(HPSVP2AGXNLE))
FREE PACKAGE(HP1.ABC8QY.(HPSVP2ABC8QY))
FREE PACKAGE(HP3.ABC8QY.(HPSVP2ABC8QY))
FREE PACKAGE(WQ.YWQREPI.(CUBE000003555B64DD))
FREE PACKAGE(NF.NF8610.(NBSC000008))
FREE PACKAGE(AV.YAVTOTX.(AIS000002855827B69))
FREE PACKAGE(WP.YWPXBXE.(DBH00000195582B30B))
FREE PACKAGE(WP.YWPXBXA.(DBH00000195582B1B3))
FREE PACKAGE(WP.YWPXBXB.(DBH00000195582B1DA))
FREE PACKAGE(WP.YWPXBXC.(DBH00000195582B1F3))
FREE PACKAGE(WP.YWPXBXD.(DBH00000195582B20D))
FREE PACKAGE(EQ.YEQWAEC.(APEN000014558BE31D))
FREE PACKAGE(WC.WC7230.(OTXO000014))
FREE PACKAGE(WB.WB0990.(TOFF000026))
FREE PACKAGE(MF.MF7240.(MFR0000060))
FREE PACKAGE(MF.MF7260.(MFR0000060))
FREE PACKAGE(MF.MF7930.(MFR0000060))
FREE PACKAGE(MF.MF8630.(MFR0000060))
FREE PACKAGE(NTA1P.CZA0199.(A02E00053855E028A9))
FREE PACKAGE(MF.YMFINFO.(MFR0000050560270B4))
FREE PACKAGE(MF.YMFINFO.(MFR0000050560270B4CICS))
FREE PACKAGE(MF.MF7120.(MFR0000049))
FREE PACKAGE(MF.MF7550.(MFR0000049))
FREE PACKAGE(MF.MF8610.(MFR0000049))
FREE PACKAGE(CZ.YCZJ323.(GSER000027560AC099))
FREE PACKAGE(CZ.YCZM435.(BEWI000004560A9276))
FREE PACKAGE(NF.YNFIB03.(IB00000013560BA1BD))
FREE PACKAGE(MF.MF7902.(MFR0000049))
FREE PACKAGE(MF.MF7580.(MFR0000049))
FREE PACKAGE(VV.YVVZZ15.(VDPS000052561CE2B7))
FREE PACKAGE(MF.MF7590.(MFR0000049))
FREE PACKAGE(MF.YMFC219.(MFR000006656C33628))
FREE PACKAGE(MF.YMFC220.(MFR000006656C33B6B))
FREE PACKAGE(NL.NL8060.(PSFG000032))
FREE PACKAGE(MF.MF7110.(MFR0000065))
FREE PACKAGE(MF.MF7220.(MFR0000065))
FREE PACKAGE(YY.YYWB101.(WS8B00018756D6FC76))
FREE PACKAGE(DP.DP7010.(DP00000041))
FREE PACKAGE(WQ.YWQ1502.(CUBE0000305677E85A))
FREE PACKAGE(WQ.YWQ1501.(CUBE0000305677F9BE))
FREE PACKAGE(BP.BP9060.(BPST000037))
FREE PACKAGE(WP.YWPRCBX.(DBH0000054569E140F))
FREE PACKAGE(YY.YYDB2FK.(TOFF00004856AA0B30))
FREE PACKAGE(TN.YTNDEP.(OTXO00003656AA11D9))
FREE PACKAGE(MF.MF7320.(MFR0000065))
FREE PACKAGE(MF.MF7380.(MFR0000065))
FREE PACKAGE(MF.MF7570.(MFR0000065))
FREE PACKAGE(NG.YNGKWEL.(PROK00006556B0E9D0))
FREE PACKAGE(NG.YNGPWEL.(PROK00006556B0EA50))
FREE PACKAGE(MF.YMFC209.(MFR0000079574192C4))
FREE PACKAGE(MF.YMFC217.(MFR000007957419FF1))
FREE PACKAGE(MF.YMFC202.(MFR0000079574189AF))
FREE PACKAGE(MF.YMFC211.(MFR000007957418AC3))
FREE PACKAGE(MF.YMFC203.(MFR000007957418A72))
FREE PACKAGE(WP.YWPR1PX.(DBH000006857444F52))
FREE PACKAGE(WP.YWPR2PX.(DBH000006857444F62))
FREE PACKAGE(WP.YWPRCPX.(DBH000006857444F41))
FREE PACKAGE(WP.YWPRBPX.(DBH000006857444F3E))
FREE PACKAGE(WP.YWPRAPX.(DBH000006857444F3A))
FREE PACKAGE(WP.YWPR6PX.(DBH000006857444FA1))
FREE PACKAGE(WP.YWPR3PX.(DBH000006857444F88))
FREE PACKAGE(AV.YAVNV10.(AIS0000095574D8EE1))
FREE PACKAGE(AV.YAVNV50.(AIS0000095574D922B))
FREE PACKAGE(RT.RT5100.(RFT0000016))
FREE PACKAGE(MF.YMFC106.(MFR000008357583124))
FREE PACKAGE(MF.YMFC108.(MFR0000083575831C8))
FREE PACKAGE(MF.YMFC107.(MFR00000835757D747))
FREE PACKAGE(BP.YBPMUT.(BPST00004857589C3C))
FREE PACKAGE(PC.YPC0570.(IVN000002157629DE6))
FREE PACKAGE(PC01.YPC0740.(IVN000002157629A15))
FREE PACKAGE(PC02.YPC0740.(IVN000002157629A15))
FREE PACKAGE(PC03.YPC0740.(IVN000002157629A15))
FREE PACKAGE(PC04.YPC0740.(IVN000002157629A15))
FREE PACKAGE(PC05.YPC0740.(IVN000002157629A15))
FREE PACKAGE(PC06.YPC0740.(IVN000002157629A15))
FREE PACKAGE(PC01.YPC0730.(IVN000002157629A14))
FREE PACKAGE(PC02.YPC0730.(IVN000002157629A14))
FREE PACKAGE(PC03.YPC0730.(IVN000002157629A14))
FREE PACKAGE(PC04.YPC0730.(IVN000002157629A14))
FREE PACKAGE(PC05.YPC0730.(IVN000002157629A14))
FREE PACKAGE(PC06.YPC0730.(IVN000002157629A14))
FREE PACKAGE(WB.YWBCTA.(WS8B000286575E9C03))
FREE PACKAGE(WB.YWBMAS.(WS8B000286575E9E49))
FREE PACKAGE(NZ.NZSRV07.(NZV0000086))
FREE PACKAGE(WP.YWPXBJA.(DBH0000068575EE13F))
FREE PACKAGE(WP.YWPXBJE.(DBH0000068575EE157))
FREE PACKAGE(WP.YWPXBJD.(DBH0000068575EE163))
FREE PACKAGE(WP.YWPXBJC.(DBH0000068575EE17C))
FREE PACKAGE(WP.YWPXBJB.(DBH0000068575EE18E))
FREE PACKAGE(WP.YWPXB1A.(DBH0000068575EE2A7))
FREE PACKAGE(WP.YWPXB1B.(DBH0000068575EE2E4))
FREE PACKAGE(WP.YWPXB1C.(DBH0000068575EE2D9))
FREE PACKAGE(WB.YWBIO.(WS8B000286575EE61A))
FREE PACKAGE(LB.YLB0090.(AIS0000095576AAD56))
FREE PACKAGE(CZ.CZ5270.(KLOM000049))
FREE PACKAGE(WB.YWBEBSM.(WSTS00003957669F37))
FREE PACKAGE(YY.YYWBVIN.(WSTS00003957669F10))
FREE PACKAGE(TN.YTNSICH.(OTXO0000545766A5D8))
FREE PACKAGE(SA.SA0160.(CSVE000051))
FREE PACKAGE(SA.SA0470.(CSVE000051))
FREE PACKAGE(MF.YMFC110.(MFR00000835767C4BD))
FREE PACKAGE(MF.YMFC112.(MFR00000835767C4C4))
FREE PACKAGE(MF.YMFC113.(MFR00000835767C4CA))
FREE PACKAGE(MF.YMFC116.(MFR00000835767C4E0))
FREE PACKAGE(MF.YMFX155.(MFR00000835767C612))
FREE PACKAGE(AU.YAU180S.(AURA00004356F3E645))
FREE PACKAGE(AU.YAU180D.(AURA00004356F3E622))
FREE PACKAGE(AU.YAU180I.(AURA00004356F3E638))
FREE PACKAGE(AU.YAU181D.(AURA00004356F3E6C6))
FREE PACKAGE(AU.YAU181I.(AURA00004356F3E6CB))
FREE PACKAGE(AU.YAU181S.(AURA00004356F3E6CC))
FREE PACKAGE(AU.YAU190D.(AURA00004356F3E6FA))
FREE PACKAGE(AU.YAU190S.(AURA00004356F3E700))
FREE PACKAGE(AU.YAU190I.(AURA00004356F3E6FF))
FREE PACKAGE(AU.YAU191D.(AURA00004356F3E705))
FREE PACKAGE(AU.YAU191I.(AURA00004356F3E71C))
FREE PACKAGE(AU.YAU191S.(AURA00004356F3E71C))
FREE PACKAGE(WQ.YWQEXCP.(CUBE00003956FD4720))
FREE PACKAGE(WQ.YWQ1101.(CUBE00003556FA509B))
FREE PACKAGE(MF.MF8310.(MFR0000073))
FREE PACKAGE(NF.YNF0101.(NBSI00005657010320))
FREE PACKAGE(MF.MF7250.(MFR0000073))
FREE PACKAGE(KS.KS5500.(CSED000019))
FREE PACKAGE(YY.YYVPSVF.(VIP00000145704EE3B))
FREE PACKAGE(WC.WC7280.(OTXO000045))
FREE PACKAGE(CZ.YCZTPRT.(BEWI000009570E6247))
FREE PACKAGE(WB.WB5040.(WS8B000222))
FREE PACKAGE(WB.YWBITV.(TOFF0000595721BC72))
FREE PACKAGE(MF.MF7330.(MFR0000078))
FREE PACKAGE(KR.YKRBCAL.(ACP00000725735CCA5))
FREE PACKAGE(FI.FI5200.(BKUR000038))
FREE PACKAGE(NI.YNICS01.(IPC000015457C2DE87))
FREE PACKAGE(CE.CE5200.(COPE000034))
FREE PACKAGE(DE.DE0420.(DE00000029))
FREE PACKAGE(DE.DE0820.(DE00000029))
FREE PACKAGE(DE.DE0090.(DE00000029))
FREE PACKAGE(DE.DE0030.(DE00000029))
FREE PACKAGE(DE.DE0050.(DE00000029))
FREE PACKAGE(EX.YEX0003.(EXPN00005357CDA468))
FREE PACKAGE(NI.NI0040.(IPC0000181))
FREE PACKAGE(EB.EB6480.(EXPN000054))
FREE PACKAGE(CZ.YCZPABW.(BEWI00001957D171E9))
FREE PACKAGE(EX.EX5020.(EXPN000052))
FREE PACKAGE(WB.WB1290.(WS8B000345))
FREE PACKAGE(WB.WB0980.(WS8B000345))
FREE PACKAGE(AP.YAPUTGK.(APEN00003657D67A8A))
FREE PACKAGE(ER.YERDCUR.(EAMR00001257D69A33))
FREE PACKAGE(ER.YERDGET.(EAMR00001257D69A21))
FREE PACKAGE(WM.WM0010.(WSIN000037))
FREE PACKAGE(ER.YERBER.(EAMR000012))
FREE PACKAGE(NI.YNILBPL.(IPC000017057DA8022))
FREE PACKAGE(NI.YNILBP2.(IPC000017057DA8023))
FREE PACKAGE(NI.NI0010.(IPC0000170))
FREE PACKAGE(NO.NO0970.(NO00000030))
FREE PACKAGE(LC.YLCTF03.(TFBM00002557727387))
FREE PACKAGE(LC.YLCTF01.(TFBM0000255772734D))
FREE PACKAGE(LC.YLCTF02.(TFBM00002557727367))
FREE PACKAGE(WB.YWBSA2.(WS8B00028657721F2F))
FREE PACKAGE(CI.CI0090.(GEGE000015))
FREE PACKAGE(CD.CD2590.(UPDS000031))
FREE PACKAGE(YY.YYNLCPO.(MOD0000021577299E0))
FREE PACKAGE(MF.MF7300.(MFR0000082))
FREE PACKAGE(MF.MF7340.(MFR0000082))
FREE PACKAGE(MF.MF7310.(MFR0000082))
FREE PACKAGE(MF.MF7360.(MFR0000082))
FREE PACKAGE(CZ.YCZGETP.(KUAN0000375773DDC4))
FREE PACKAGE(NTA1P.CZA0183.(A02E000561576FB9C6))
FREE PACKAGE(CI.CI0100.(GEGE000017))
FREE PACKAGE(WF.WF0300.(WSSW000064))
FREE PACKAGE(WF.WF0280.(WSSW000064))
FREE PACKAGE(WF.WF0310.(WSSW000064))
FREE PACKAGE(WF.WF0320.(WSSW000064))
FREE PACKAGE(WF.WF0350.(WSSW000064))
FREE PACKAGE(UU.UU5170.(RS20000050))
FREE PACKAGE(LB.YLB0095.(AIS000009557712672))
FREE PACKAGE(DE.YDELSTO.(DE00000033577144E4))
FREE PACKAGE(VD.VDGLH00.(DSPV000030))
FREE PACKAGE(VD.VDDBM15.(DSPV000030))
FREE PACKAGE(EK.EK6841.(EMA0000034))
FREE PACKAGE(SV.SV0950.(WSSV000116))
FREE PACKAGE(SV.SV0930.(WSSV000116))
FREE PACKAGE(SV.SV0240.(WSSV000116))
FREE PACKAGE(SV.SV5780.(WSSV000116))
FREE PACKAGE(SV.SV5910.(WSSV000116))
FREE PACKAGE(VP.VP5310.(VIP0000015))
FREE PACKAGE(VP.VP5300.(VIP0000015))
FREE PACKAGE(VP.VP5330.(VIP0000015))
FREE PACKAGE(KS.YKS5511.(CSED000022577CE9CC))
FREE PACKAGE(TN.YTN0021.(OTXO000054577CC9AE))
FREE PACKAGE(TN.YTN0100.(OTXO000054577CC97A))
FREE PACKAGE(NF.YNFIB07.(IB0000002257752C1E))
FREE PACKAGE(SV.SV8620.(WSSV000116))
FREE PACKAGE(SV.SV5940.(WSSV000116))
FREE PACKAGE(SV.SV8630.(WSSV000116))
FREE PACKAGE(NL.NL7310.(BALR000041))
FREE PACKAGE(SV.SV0250.(WSSV000116))
FREE PACKAGE(SV.SV8300.(WSSV000116))
FREE PACKAGE(MF.MF7020.(MFR0000082))
FREE PACKAGE(RT.RT0200.(RFT0000016))
FREE PACKAGE(WI.YWI0087.(WS8B000313577A4B43))
FREE PACKAGE(SV.SV7770.(WSSV000116))
FREE PACKAGE(EX.EX5030.(EXPN000039))
FREE PACKAGE(VT.VT5130.(EBZV000009))
FREE PACKAGE(FZ.FZ0820.(FZ00000007))
FREE PACKAGE(DE.DE0400.(DE00000033))
FREE PACKAGE(DE.DE0490.(DE00000033))
FREE PACKAGE(DE.DE0830.(DE00000033))
FREE PACKAGE(CZ.CZ6500.(GSER000112))
FREE PACKAGE(CZ.CZ6400.(GSER000112))
FREE PACKAGE(DP.DP0920.(DP00000043))
FREE PACKAGE(CZ.YCZJABW.(GSER0001115785141E))
FREE PACKAGE(MF.YMFLPID.(MFR0000082577E5826))
FREE PACKAGE(MF.MF7510.(MFR0000082))
FREE PACKAGE(MF.MF7500.(MFR0000082))
FREE PACKAGE(MF.MF7230.(MFR0000082))
FREE PACKAGE(MF.MF8500.(MFR0000082))
FREE PACKAGE(MF.MF8600.(MFR0000082))
FREE PACKAGE(MF.MF8620.(MFR0000082))
FREE PACKAGE(SV.YSVAUHI.(WSSV000116578CB6A6))
FREE PACKAGE(MF.MF8110.(MFR0000082))
FREE PACKAGE(MF.YMFC101.(MFR0000083578E3B26))
FREE PACKAGE(MF.YMFC104.(MFR0000083578E3B39))
FREE PACKAGE(MF.YMFC105.(MFR0000083578E3B49))
FREE PACKAGE(MF.YMFC114.(MFR0000083578E4191))
FREE PACKAGE(MF.MF8120.(MFR0000082))
FREE PACKAGE(MF.MF8130.(MFR0000082))
FREE PACKAGE(WQ.WQ6010.(CUBE000052))
FREE PACKAGE(FF.FF0010.(FFOR000021))
FREE PACKAGE(ED.ED0950.(ED00000036))
FREE PACKAGE(FI.FI2100.(BKUR000020))
FREE PACKAGE(CE.YCE1000.(COPE00002957962ADA))
FREE PACKAGE(WP.YWPR7PX.(DBH0000068578E578A))
FREE PACKAGE(BX.BX8280.(CLOS000125))
FREE PACKAGE(VP.VP0030.(VIP0000015))
FREE PACKAGE(WQ.YWQBERI.(CUBE00005257979BE0))
FREE PACKAGE(DE.DE0430.(DE00000033))
FREE PACKAGE(FI.FI5260.(BKUR000018))
FREE PACKAGE(DE.DE0410.(DE00000033))
FREE PACKAGE(AV.AV0210.(PMRT000051))
FREE PACKAGE(AV.AV0220.(PMRT000051))
FREE PACKAGE(AV.AV0150.(PMRT000051))
FREE PACKAGE(AV.AV0160.(PMRT000051))
FREE PACKAGE(AV.AV0310.(PMRT000051))
FREE PACKAGE(AV.AV0410.(PMRT000051))
FREE PACKAGE(EC.EC5130.(KLOM000049))
FREE PACKAGE(AV.AV0170.(PMRT000051))
FREE PACKAGE(MF.MF8210.(MFR0000082))
FREE PACKAGE(AV.AV0190.(PMRT000051))
FREE PACKAGE(LB.YLB0091.(AIS000009557A7320F))
FREE PACKAGE(DE.YDE0021.(DE0000003357A0E330))
FREE PACKAGE(DE.DE0810.(DE00000033))
FREE PACKAGE(DE.DE5130.(DE00000033))
FREE PACKAGE(CZ.CZ5400.(PIG0000008))
FREE PACKAGE(WB.YWBBODA.(WS8B00028657A1D413))
FREE PACKAGE(WB.YWBN100.(WS8B00028657A1D54A))
FREE PACKAGE(WB.YWBSUM.(WS8B00028657A1DB75))
FREE PACKAGE(WB.WB0330.(WS8B000316))
FREE PACKAGE(TN.YTNOTF.(OTXO00005457A1E392))
FREE PACKAGE(WB.YWB530.(WS8B000312))
FREE PACKAGE(WB.WB0680.(WSTS000039))
FREE PACKAGE(WB.WB0840.(WSTS000039))
FREE PACKAGE(WB.WB1130.(WSTS000039))
FREE PACKAGE(WB.WB0550.(WSTS000039))
FREE PACKAGE(WB.WB0630.(WSTS000039))
FREE PACKAGE(WB.WB5260.(WSTS000039))
FREE PACKAGE(WC.WC5010.(OTXO000054))
FREE PACKAGE(WC.WC5050.(OTXO000054))
FREE PACKAGE(WC.WC8401.(OTXO000054))
FREE PACKAGE(WC.WC8410.(OTXO000054))
FREE PACKAGE(WB.WB0520.(WSTS000039))
FREE PACKAGE(WB.WB0530.(WSTS000039))
FREE PACKAGE(WB.WB0570.(WSTS000039))
FREE PACKAGE(WB.WB0510.(WSTS000039))
FREE PACKAGE(WB.WB0870.(WSTS000039))
FREE PACKAGE(WB.WB0580.(WSTS000039))
FREE PACKAGE(WB.WB0600.(WSTS000039))
FREE PACKAGE(WB.WB0620.(WSTS000039))
FREE PACKAGE(WB.WB0660.(WSTS000039))
FREE PACKAGE(WB.WB0830.(WSTS000039))
FREE PACKAGE(WB.WB0940.(WSTS000039))
FREE PACKAGE(WB.WB0950.(WSTS000039))
FREE PACKAGE(TN.TN0530.(OTXO000054))
FREE PACKAGE(RI.RI0820.(RI00000012))
FREE PACKAGE(WB.WB1110.(WSTS000039))
FREE PACKAGE(WB.WB1310.(WSTS000039))
FREE PACKAGE(WB.WB1340.(WSTS000039))
FREE PACKAGE(WB.WB0970.(WSTS000039))
FREE PACKAGE(WB.WB1020.(WSTS000039))
FREE PACKAGE(WB.WB1030.(WSTS000039))
FREE PACKAGE(WB.WB1040.(WSTS000039))
FREE PACKAGE(WB.WB1050.(WSTS000039))
FREE PACKAGE(WB.WB1070.(WSTS000039))
FREE PACKAGE(WB.WB5270.(WSTS000039))
FREE PACKAGE(WB.WB5290.(WSTS000039))
FREE PACKAGE(WB.WB1080.(TOFF000067))
FREE PACKAGE(WB.WB1090.(TOFF000067))
FREE PACKAGE(WB.WB1100.(TOFF000067))
FREE PACKAGE(TN.YTNUPD.(OTXO00005457A33001))
FREE PACKAGE(CE.YCEWIAP.(COPE00002957A34674))
FREE PACKAGE(SV.SV5650.(WSSV000116))
FREE PACKAGE(PC01.PC5120.(IVN0000021))
FREE PACKAGE(PC02.PC5120.(IVN0000021))
FREE PACKAGE(PC03.PC5120.(IVN0000021))
FREE PACKAGE(PC04.PC5120.(IVN0000021))
FREE PACKAGE(PC05.PC5120.(IVN0000021))
FREE PACKAGE(PC06.PC5120.(IVN0000021))
FREE PACKAGE(CI.CI0070.(KUGE000031))
FREE PACKAGE(CI.CI0080.(KUGE000031))
FREE PACKAGE(DE.DE0440.(DE00000033))
FREE PACKAGE(KA.KA0030.(KOAB000039))
FREE PACKAGE(CZ.CZ8980.(KLOM000049))
FREE PACKAGE(MF.MF7200.(MFR0000090))
FREE PACKAGE(PC01.YPC0520.(AIS000011157ADCAC2))
FREE PACKAGE(PC02.YPC0520.(AIS000011157ADCAC2))
FREE PACKAGE(PC03.YPC0520.(AIS000011157ADCAC2))
FREE PACKAGE(PC04.YPC0520.(AIS000011157ADCAC2))
FREE PACKAGE(PC05.YPC0520.(AIS000011157ADCAC2))
FREE PACKAGE(PC06.YPC0520.(AIS000011157ADCAC2))
FREE PACKAGE(AV.AV0250.(PMRT000051))
FREE PACKAGE(WB.YWBBOPR.(WS8B00032957AC99AE))
FREE PACKAGE(LC.LC0511I.(TFBM00002757AC7BB6))
FREE PACKAGE(AV.AV0180.(PMRT000064))
FREE PACKAGE(CE.CE5230.(COPE000040))
FREE PACKAGE(LB.YLB0120.(IPC000015457B202A2))
FREE PACKAGE(CZ.CZ5190.(GSER000131))
FREE PACKAGE(NF.NF8620.(NBSC000023))
FREE PACKAGE(KE.YKEA082.(EBVV00022157B31F45))
FREE PACKAGE(KE.YKEA083.(EBVV00022157B31F59))
FREE PACKAGE(ED.ED0830.(ED00000043))
FREE PACKAGE(WB.YWB0082.(WSTS00004457B43111))
FREE PACKAGE(BP.YBPMUT.(BPST00005757B43238))
FREE PACKAGE(GA.GA0110I.(KAUT00003357B43EE9))
FREE PACKAGE(ED.ED0960.(ED00000039))
FREE PACKAGE(FF.YFF0004.(FFOR00002257B98070))
FREE PACKAGE(FF.FF0030.(FFOR000022))
FREE PACKAGE(FF.FF0020.(FFOR000022))
FREE PACKAGE(GM.GM0850.(GM00000092))
FREE PACKAGE(EX.EX6010.(EXPN000050))
FREE PACKAGE(RI.RI0810.(RI00000013))
FREE PACKAGE(TP.TP0800.(TP00000006))
FREE PACKAGE(ER.YERDINS.(EAMR00000557BD6545))
FREE PACKAGE(CE.CE5300.(COPE000034))
FREE PACKAGE(WF.WF5410.(WSSW000075))
FREE PACKAGE(HP1.AUPDVU.(HPSVP2AUPDVU))
FREE PACKAGE(HP1.ADJQR5.(HPSVP2ADJQR5))
FREE PACKAGE(HPS.AGOWVT.(HPSVP2AGOWVT))
FREE PACKAGE(HP1.AGOWVT.(HPSVP2AGOWVT))
FREE PACKAGE(HPS.AD5WV6.(HPSVP2AD5WV6))
FREE PACKAGE(HP1.AD5WV6.(HPSVP2AD5WV6))
FREE PACKAGE(RP.YRPMCOD.(A12W00063052D54ED2))
FREE PACKAGE(WP.YWPXBLC.(A06M0263755398650C))
FREE PACKAGE(WP.YWPXBAE.(A06M0264235370B1AE))
FREE PACKAGE(WP.YWPXBAD.(A06M0264235370B1E6))
FREE PACKAGE(WP.YWPXBAC.(A06M0264235370B10A))
FREE PACKAGE(WP.YWPXBBB.(A06M0264235370B45A))
FREE PACKAGE(WP.YWPXBBE.(A06M0264235370B480))
FREE PACKAGE(WP.YWPXBBD.(A06M0264235370B547))
FREE PACKAGE(WP.YWPXBBA.(A06M0264235370B3E8))
FREE PACKAGE(WP.YWPXBBC.(A06M0264235370B429))
FREE PACKAGE(WP.YWPXBDA.(A06M0264235370B94F))
FREE PACKAGE(WP.YWPXBDC.(A06M0264235370B829))
FREE PACKAGE(WP.YWPXBDB.(A06M0264235370B8E2))
FREE PACKAGE(WP.YWPXBDG.(A06M0264235370B9BD))
FREE PACKAGE(WP.YWPXBDF.(A06M0264235370B9D2))
FREE PACKAGE(WP.YWPXBIB.(A06M0264235370BAE8))
FREE PACKAGE(WP.YWPXBIA.(A06M0264235370BB01))
FREE PACKAGE(WP.YWPXBIC.(A06M0264235370BB24))
FREE PACKAGE(WP.YWPXBID.(A06M0264235370BB38))
FREE PACKAGE(WP.YWPXBIE.(A06M0264235370BB6C))
FREE PACKAGE(WP.YWPXBKA.(A06M0264235370BC46))
FREE PACKAGE(WP.YWPXBKD.(A06M0264235370BC5C))
FREE PACKAGE(WP.YWPXBKC.(A06M0264235370BC67))
FREE PACKAGE(WP.YWPXBKB.(A06M0264235370BC7D))
FREE PACKAGE(WP.YWPXBKE.(A06M0264235370BCA4))
FREE PACKAGE(WP.YWPXBMC.(A06M0264235370BCF8))
FREE PACKAGE(WP.YWPXBTE.(A06M0264235370BDF5))
FREE PACKAGE(WP.YWPXBTB.(A06M0264235370BD79))
FREE PACKAGE(WP.YWPXBTA.(A06M0264235370BD89))
FREE PACKAGE(WP.YWPXBTD.(A06M0264235370BD90))
FREE PACKAGE(WP.YWPXBTC.(A06M0264235370BD99))
FREE PACKAGE(WP.YWPXBUC.(A06M0264235370BE52))
FREE PACKAGE(WP.YWPXBGA.(A06M0263755379E553))
FREE PACKAGE(WP.YWPXBGB.(A06M0263755379E557))
FREE PACKAGE(WP.YWPXBGC.(A06M0263755379E55B))
FREE PACKAGE(WP.YWPXBCA.(A06M0263755379E4F0))
FREE PACKAGE(WP.YWPXBCB.(A06M0263755379E4FF))
FREE PACKAGE(WP.YWPXBCC.(A06M0263755379E503))
FREE PACKAGE(WP.YWPXBCD.(A06M0263755379E50A))
FREE PACKAGE(WP.YWPXBCE.(A06M0263755379E510))
FREE PACKAGE(WP.YWPXBNC.(A06M0263755379E5BF))
FREE PACKAGE(WP.YWPXBNA.(A06M0263755379E5B7))
FREE PACKAGE(WP.YWPXBNB.(A06M0263755379E5BB))
FREE PACKAGE(WP.YWPXBNE.(A06M0263755379E649))
FREE PACKAGE(WP.YWPXBND.(A06M0263755379E63F))
FREE PACKAGE(WP.YWPXBNG.(A06M0263755379E652))
FREE PACKAGE(WP.YWPXBNF.(A06M0263755379E64D))
FREE PACKAGE(WP.YWPXBNH.(A06M0263755379E656))
FREE PACKAGE(WP.YWPXBNI.(A06M0263755379E65B))
FREE PACKAGE(WP.YWPXBOA.(A06M0263755379E660))
FREE PACKAGE(WP.YWPXBOB.(A06M0263755379E665))
FREE PACKAGE(WP.YWPXBOC.(A06M0263755379E669))
FREE PACKAGE(WP.YWPXBQC.(A06M0263755379E793))
FREE PACKAGE(WP.YWPYBCA.(A06M0263755379FC8E))
FREE PACKAGE(WP.YWPYBCB.(A06M0263755379FC94))
FREE PACKAGE(WP.YWPYBCC.(A06M0263755379FC9A))
FREE PACKAGE(WP.YWPYBCD.(A06M0263755379FCA0))
FREE PACKAGE(WP.YWPYBAA.(A06M0263755379FA7F))
FREE PACKAGE(WP.YWPYBAB.(A06M0263755379FA83))
FREE PACKAGE(WP.YWPYBCE.(A06M0263755379FE40))
FREE PACKAGE(CZ.CZ5200.(CRMA004099))
FREE PACKAGE(WC.WC7250.(A06M027069))
FREE PACKAGE(EC.YECLOK.(CRMA003976543BA4EF))
FREE PACKAGE(EC.YECLOK.(CRMA003976543BA4EFCICS))
FREE PACKAGE(SV.YSVBUID.(A06M02547153F08CAD))
FREE PACKAGE(EQ.YEQISRK.(CRMA00418654106690))
FREE PACKAGE(EQ.YEQRFT.(GSER00001454ABF60E))
FREE PACKAGE(CZ.YCZT421.(GSER00001454ABD271))
FREE PACKAGE(WB.YWBSYM.(WS8B00001654B22C92))
FREE PACKAGE(NF.NF7700.(NBSI000016))
FREE PACKAGE(EQ.YEQKDGP.(CRMA004309546CDAE6))
FREE PACKAGE(WP.YWPYBDC.(DBH000002254EDE1AB))
FREE PACKAGE(FF.YFF0015.(FFOR00000554F6CFF5))
FREE PACKAGE(CZ.YCZGETP.(KUAN00001255101F7D))
FREE PACKAGE(WB.YWBEBSM.(WSTS00004357E1024F))
FREE PACKAGE(WQ.YWQ1502.(CUBE00005657E14527))
FREE PACKAGE(WQ.YWQ1501.(CUBE00005657E144E3))
FREE PACKAGE(EK.EK6841.(EMA0000048))
FREE PACKAGE(WB.WB0870.(WSTS000043))
FREE PACKAGE(FF.FF0010.(FFOR000023))
FREE PACKAGE(FF.FF0020.(FFOR000023))
FREE PACKAGE(FF.FF0030.(FFOR000023))
FREE PACKAGE(RI.RI0820.(RI00000014))
FREE PACKAGE(DE.DE0410.(DE00000038))
FREE PACKAGE(WQ.WQ5950.(CUBE000056))
FREE PACKAGE(ED.ED0830.(ED00000040))
FREE PACKAGE(DE.DE0820.(DE00000038))
FREE PACKAGE(DE.DE0030.(DE00000038))
FREE PACKAGE(GM.GM0850.(GM00000105))
FREE PACKAGE(WB.WB0680.(WS8B000320))
FREE PACKAGE(WB.WB0630.(WS8B000320))
FREE PACKAGE(ED.ED0960.(ED00000040))
FREE PACKAGE(WB.WB0720.(WS8B000370))
FREE PACKAGE(WB.YWBEBSM.(WSTS0000485828352D))
FREE PACKAGE(WB.WB0630.(WSTS000048))
FREE PACKAGE(WB.WB0680.(WSTS000048))
FREE PACKAGE(GM.GM0850.(GM00000118))
FREE PACKAGE(PC01.PC5120.(IVN0000024))
FREE PACKAGE(PC02.PC5120.(IVN0000024))
FREE PACKAGE(PC03.PC5120.(IVN0000024))
FREE PACKAGE(PC04.PC5120.(IVN0000024))
FREE PACKAGE(PC05.PC5120.(IVN0000024))
FREE PACKAGE(PC06.PC5120.(IVN0000024))
FREE PACKAGE(WB.YWB0082.(WSTS00004357FCFAC3))
FREE PACKAGE(CZ.YCZJABW.(GSER0001095811EEAB))
FREE PACKAGE(CE.CE5300.(NOST000271))
FREE PACKAGE(WB.WB0840.(NOST000271))
FREE PACKAGE(WB.WB1130.(NOST000271))
FREE PACKAGE(WB.WB0720.(WS8B000373))
FREE PACKAGE(WF.YWF64CA.(WSSW00004357DEA0AA))
FREE PACKAGE(WB.WB1300.(TOFF000076))
FREE PACKAGE(WF.YWFSWC.(WSSW000043))
FREE PACKAGE(WB.WB0720.(WS8B000374))
FREE PACKAGE(WP.YWPXBED.(A06M0263755379E538))
FREE PACKAGE(WP.YWPXBEE.(A06M0263755379E53D))
FREE PACKAGE(WP.YWPXBEF.(A06M0263755379E540))
FREE PACKAGE(WP.YWPXBEG.(A06M0263755379E545))
FREE PACKAGE(WP.YWPXBEA.(A06M0263755379E52A))
FREE PACKAGE(WP.YWPXBEB.(A06M0263755379E52F))
FREE PACKAGE(WP.YWPXBEC.(A06M0263755379E534))
FREE PACKAGE(CZ.YCZPABW.(GSER00010957ED4FDC))
FREE PACKAGE(WF.WF0310.(WSSW000043))
FREE PACKAGE(WF.WF0300.(WSSW000043))
FREE PACKAGE(WF.WF0320.(WSSW000043))
FREE PACKAGE(WF.WF0280.(WSSW000043))
FREE PACKAGE(WF.WF0350.(WSSW000043))
FREE PACKAGE(FC.FC0050.(KLOM000050))
FREE PACKAGE(WF.WF5410.(WSSW000043))
FREE PACKAGE(GM.GM0850.(GM00000117))
FREE PACKAGE(WF.YWFM537.(WSSW0000435808F092))
FREE PACKAGE(SV.SV5770.(WSSV000121))
FREE PACKAGE(WB.WB0720.(WS8B000376))
FREE PACKAGE(WI.YWI0087.(TOFF00007657F28089))
FREE PACKAGE(DE.DE0050.(DE00000038))
FREE PACKAGE(DE.DE0090.(DE00000038))
FREE PACKAGE(TN.YTNUPD.(OTXO00005857FBEABF))
FREE PACKAGE(FZ.FZ0820.(FZ00000010))
FREE PACKAGE(DE.DE0420.(DE00000038))
FREE PACKAGE(DE.DE0810.(DE00000038))
FREE PACKAGE(DE.DE0030.(DE00000052))
FREE PACKAGE(ED.ED0960.(DE00000052))
FREE PACKAGE(DE.DE0820.(DE00000052))
FREE PACKAGE(RI.RI0820.(DE00000052))
FREE PACKAGE(SV.SV0240.(WSSV000121))
FREE PACKAGE(CZ.YCZJABW.(GSER000148582846ED))
FREE PACKAGE(CZ.YCZPABW.(ACP0000086582DDBB5))
FREE PACKAGE(DE.DE0030.(DE00000049))
FREE PACKAGE(DE.DE0810.(DE00000049))
FREE PACKAGE(DE.DE0420.(DE00000049))
FREE PACKAGE(WB.WB0720.(WS8B000379))
FREE PACKAGE(WP.YWPRDPX.(DBH000006857444F45))
FREE PACKAGE(CE.CE8200.(COPE000034))
FREE PACKAGE(CE.CE8500.(COPE000034))
FREE PACKAGE(ER.YERBER.(EAMR000010))
FREE PACKAGE(WF.YWFSWC.(WSSW000046))
FREE PACKAGE(WP.YWPXBAA.(A06M0264235370B066))
FREE PACKAGE(WP.YWPXBAB.(A06M0264235370B182))
FREE PACKAGE(HPS.AHJFRK.(HPSVP2AHJFRK))
FREE PACKAGE(HP1.AHJFRK.(HPSVP2AHJFRK))
FREE PACKAGE(HP3.AHJFRK.(HPSVP2AHJFRK))
FREE PACKAGE(WF.WF5410.(WSSW000046))
FREE PACKAGE(FF.FF0030.(FFOR000027))
FREE PACKAGE(FF.FF0020.(FFOR000027))
FREE PACKAGE(WB.WB0720.(WS8B000386))
FREE PACKAGE(HP1.ABAIRK.(HPSVP2ABAIRK))
FREE PACKAGE(HP3.ABAIRK.(HPSVP2ABAIRK))
FREE PACKAGE(PHPSPTA.H0014.())
FREE PACKAGE(PHPS53.H0014.())
FREE PACKAGE(MF.MF8930.(MFR0000086))
FREE PACKAGE(FI.FI5067.(BKUR000041))
FREE PACKAGE(FI.FI1900.(BKUR000041))
FREE PACKAGE(VT.VT5110.(EBZV000007))
FREE PACKAGE(WB.WB0720.(WS8B000383))
FREE PACKAGE(CZ.CZ6300.(KLOM000058))
FREE PACKAGE(WB.WB5340.(TOFF000076))
FREE PACKAGE(PHPSPTA.H1007.())
FREE PACKAGE(PHPS53.H1007.())
FREE PACKAGE(PHPSPTA.H1002.())
FREE PACKAGE(PHPS53.H1002.())
FREE PACKAGE(PHPSPTA.H1015.())
FREE PACKAGE(PHPS53.H1015.())
FREE PACKAGE(PHPSPTA.H1016.())
FREE PACKAGE(PHPS53.H1016.())
FREE PACKAGE(PHPSPTA.H1010.())
FREE PACKAGE(PHPS53.H1010.())
FREE PACKAGE(PHPSPTA.H1013.())
FREE PACKAGE(PHPS53.H1013.())
FREE PACKAGE(PHPSPTA.H1014.())
FREE PACKAGE(PHPS53.H1014.())
FREE PACKAGE(PHPSPTA.H1017.())
FREE PACKAGE(PHPS53.H1017.())
FREE PACKAGE(PHPSPTA.H1020.())
FREE PACKAGE(PHPS53.H1020.())
FREE PACKAGE(PHPSPTA.H1048.())
FREE PACKAGE(PHPS53.H1048.())
FREE PACKAGE(PHPSPTA.H1068.())
FREE PACKAGE(PHPS53.H1068.())
FREE PACKAGE(PHPSPTA.H1064.())
FREE PACKAGE(PHPS53.H1064.())
FREE PACKAGE(PHPSPTA.H1159.())
FREE PACKAGE(PHPS53.H1159.())
FREE PACKAGE(PHPSPTA.H1161.())
FREE PACKAGE(PHPS53.H1161.())
FREE PACKAGE(PHPSPTA.H1085.())
FREE PACKAGE(PHPS53.H1085.())
FREE PACKAGE(PHPSPTA.H1086.())
FREE PACKAGE(PHPS53.H1086.())
FREE PACKAGE(PHPSPTA.H1097.())
FREE PACKAGE(PHPS53.H1097.())
FREE PACKAGE(PHPSPTA.H1096.())
FREE PACKAGE(PHPS53.H1096.())
FREE PACKAGE(PHPSPTA.H1113.())
FREE PACKAGE(PHPS53.H1113.())
FREE PACKAGE(PHPSPTA.H1118.())
FREE PACKAGE(PHPS53.H1118.())
FREE PACKAGE(PHPSPTA.HMPBTBL.())
FREE PACKAGE(PHPS53.HMPBTBL.())
FREE PACKAGE(RT.YRT0002.(RFT000000956A4A7F6))
FREE PACKAGE(RM.YRMORGB.(PARS000054570220C1))
FREE PACKAGE(MF.MF8706.(MFR0000086))
FREE PACKAGE(MF.MF8719.(MFR0000086))
FREE PACKAGE(MF.MF8710.(MFR0000086))
FREE PACKAGE(DE.DE7120.(DE00000038))
FREE PACKAGE(FF.FF5000.(FFOR000023))
FREE PACKAGE(VV.YVVZZ19.(VDPS000077576FD3D1))
FREE PACKAGE(MF.MF8717.(MFR0000082))
FREE PACKAGE(DE.DE9992.(DE00000033))
FREE PACKAGE(TN.YTN0180.(OTXO00005457A1E3A8))
FREE PACKAGE(TN.YTN0190.(OTXO00005457A1E3AF))
FREE PACKAGE(CE.CE8440.(COPE000042))
FREE PACKAGE(KS.KS5685.(EBVV000233))
FREE PACKAGE(CZ.CZ6300.(KLOM000050))
FREE PACKAGE(SV.SV5790.(WSSV000121))
FREE PACKAGE(SV.SV5760.(WSSV000121))
FREE PACKAGE(SV.SV5750.(WSSV000121))
FREE PACKAGE(SV.SV5740.(WSSV000121))
FREE PACKAGE(VT.YVTDTAT.(EBZV000010580CDB55))
FREE PACKAGE(SV.SV5600.(WSSV000121))
FREE PACKAGE(WQ.WQ5950.(CUBE000069))
FREE PACKAGE(DE.DE0030.(DE00000058))
FREE PACKAGE(DE.DE0420.(DE00000058))
FREE PACKAGE(DE.DE0810.(DE00000058))
FREE PACKAGE(ER.YERBER.(EAMR000020))
FREE PACKAGE(WF.YWFSWC.(WSSW000078))
FREE PACKAGE(WB.WB0720.(WS8B000390))
FREE PACKAGE(PU.PU7334.(A18Q002532))
FREE PACKAGE(HP1.RWBR040.(HPSVP2RWBR040))
FREE PACKAGE(HP3.RWBR040.(HPSVP2RWBR040))
FREE PACKAGE(HP1.RWBM003.(HPSVP1RWBM003))
FREE PACKAGE(NF.NF7670.(NBSI000061))
FREE PACKAGE(VT.YVTEINS.(EBZV00000756FEA457))
FREE PACKAGE(AV.YAVNV50.(AIS000009757D9753E))
FREE PACKAGE(NI.YNI0161.(IPC000017957D662DA))
FREE PACKAGE(SV.SV0930.(WSSV000121))
FREE PACKAGE(AV.YAVNV10.(AIS000009757F15171))
FREE PACKAGE(CE.YCE1000.(COPE00004257F22347))
FREE PACKAGE(VT.VT0120.(EBZV000010))
FREE PACKAGE(VT.VT5130.(EBZV000010))
FREE PACKAGE(VT.YVTVALU.(EBZV000009577112CD))
FREE PACKAGE(AS.AS0610.(KABG000038))
FREE PACKAGE(NO.NO0960.(NO00000024))
FREE PACKAGE(CE.CE0100.(COPE000029))
FREE PACKAGE(CE.CE5730.(COPE000029))
FREE PACKAGE(VV.YVVZZ20.(VDPS00008757BAFE47))
FREE PACKAGE(NI.NI0010.(IPC0000156))
FREE PACKAGE(NTA1P.CZA0199.(A02E00056457FA4F4F))
FREE PACKAGE(NI.NI0040.(IPC0000156))
FREE PACKAGE(NI.YNILBP2.(IPC000015657F3CF6B))
FREE PACKAGE(CZ.CZ6500.(GSER000109))
FREE PACKAGE(ED.ED0950.(ED00000040))
FREE PACKAGE(ER.YERDUPD.(EAMR000010580383BA))
FREE PACKAGE(CE.CE8500.(COPE000042))
FREE PACKAGE(CE.CE5230.(COPE000042))
FREE PACKAGE(ER.YERDCUR.(EAMR00001057FE19A1))
FREE PACKAGE(ER.YERDINS.(EAMR00001057FFAD64))
FREE PACKAGE(NO.NO0970.(NO00000027))
FREE PACKAGE(EB.EB6480.(EXPN000051))
FREE PACKAGE(RI.RI0810.(RI00000014))
FREE PACKAGE(CZ.CZ6400.(GSER000123))
FREE PACKAGE(CE.YCEWIAP.(COPE0000425806405E))
FREE PACKAGE(CE.CE5200.(COPE000042))
FREE PACKAGE(SV.SV5780.(WSSV000121))
FREE PACKAGE(SV.SV5940.(WSSV000121))
FREE PACKAGE(WQ.WQ6010.(CUBE000056))
FREE PACKAGE(ER.YERDGET.(EAMR000010580E1012))
FREE PACKAGE(SV.SV0250.(WSSV000121))
FREE PACKAGE(SV.SV0950.(WSSV000121))
FREE PACKAGE(WB.YWBBOPR.(WS8B000318581B1EC5))
FREE PACKAGE(CE.CE8200.(COPE000042))
FREE PACKAGE(WM.WM0010.(WSIN000032))
FREE PACKAGE(WF.WF0350.(WSSW000046))
FREE PACKAGE(WF.WF0280.(WSSW000046))
FREE PACKAGE(WF.WF0310.(WSSW000046))
FREE PACKAGE(WF.WF0320.(WSSW000046))
FREE PACKAGE(KA.KA0030.(KOAB000047))
FREE PACKAGE(FF.FF0010.(FFOR000027))
FREE PACKAGE(ED.ED0830.(ED00000049))
FREE PACKAGE(CE.CE5300.(NOST000275))
FREE PACKAGE(GM.GM0850.(GM00000129))
FREE PACKAGE(ED.ED0960.(DE00000049))
FREE PACKAGE(WF.WF5410.(WSSW000078))
FREE PACKAGE(FF.FF0020.(FFOR000029))
FREE PACKAGE(FF.FF0030.(FFOR000029))
FREE PACKAGE(WB.WB0720.(MKUR000032))
FREE PACKAGE(NL.NL7310.(BALR000054))
FREE PACKAGE(WQ.WQ5950.(CUBE000063))
FREE PACKAGE(WB.WB0840.(NOST000275))
FREE PACKAGE(WB.WB1130.(NOST000275))
FREE PACKAGE(CE.CE5300.(COPE000046))
FREE PACKAGE(CE.CE8200.(COPE000046))
FREE PACKAGE(WB.WB0720.(WS8B000382))
FREE PACKAGE(WB.YWBIO.(WS8B00031857DFC9A9))
FREE PACKAGE(WB.YWBIO.(WS8B00040058525D43))
FREE PACKAGE(WB.WB0720.(WS8B000400))
FREE PACKAGE(HP1.ZVKUYRI.(HPSVP2ZVKUYRI))
FREE PACKAGE(HP3.ZVKUYRI.(HPSVP2ZVKUYRI))
FREE PACKAGE(SV.SV5150.(WSSV000121))
FREE PACKAGE(HP1.ACUHQ1.())
FREE PACKAGE(HP3.ACUHQ1.())
FREE PACKAGE(HPS.AG5JS8.(HPSVP2AG5JS8))
FREE PACKAGE(HP1.AG5JS8.(HPSVP2AG5JS8))
FREE PACKAGE(HP3.AG5JS8.(HPSVP2AG5JS8))
FREE PACKAGE(EX.EX5020.(EXPN000051))
FREE PACKAGE(ER.YERDCUR.(EAMR0000175829D861))
FREE PACKAGE(ER.YERBER.(EAMR000017))
FREE PACKAGE(WQ.WQ6000.(CUBE000063))
FREE PACKAGE(ER.YERDUPD.(EAMR0000175829D7DB))
FREE PACKAGE(NF.YNFNACL.(NBSI00002455269B5B))
FREE PACKAGE(EX.EX6010.(EXPN000051))
FREE PACKAGE(WF.YWFM537.(WSSW0000465829B0E1))
FREE PACKAGE(ER.ER8020.(EAMR000017))
FREE PACKAGE(MF.MF7340.(MFR0000086))
FREE PACKAGE(MF.MF7360.(MFR0000086))
FREE PACKAGE(EB.EB8374.(KLOM000054))
FREE PACKAGE(EB.EB8375.(KLOM000054))
FREE PACKAGE(DE.DE7120.(DE00000030))
FREE PACKAGE(HP1.DFWYAA.(HPSVP2DFWYAA))
FREE PACKAGE(HP3.DFWYAA.(HPSVP2DFWYAA))
FREE PACKAGE(WB.WB0060.(TOFF000076))
FREE PACKAGE(SV.SV7520.(WSSV000121))
FREE PACKAGE(HP1.DOSBN5.(HPSVP2DOSBN5))
FREE PACKAGE(HP3.DOSBN5.(HPSVP2DOSBN5))
FREE PACKAGE(ER.YERBER.(EAMR000018))
FREE PACKAGE(YX.YXA171C.(TOFF00007657E8092C))
FREE PACKAGE(RA.RA7240.(EGB0000020))
FREE PACKAGE(TN.TN7004.(OTXO000058))
FREE PACKAGE(WF.YWFSWC.(WSSW000077))
FREE PACKAGE(WF.WF5410.(WSSW000077))
FREE PACKAGE(VV.YVVZZ04.(VDPS00008557E2D980))
FREE PACKAGE(SV.SV5210.(WSSV000121))
FREE PACKAGE(WQ.WQ5950.(CUBE000075))
FREE PACKAGE(ER.ER5080.(EAMR000018))
FREE PACKAGE(TN.YTNW100.(OTXO00005857FE1E9A))
FREE PACKAGE(SV.SV8410.(WSSV000121))
FREE PACKAGE(SV.SV5600.(WSSV000146))
FREE PACKAGE(SV.SV5940.(WSSV000146))
FREE PACKAGE(WB.WB5340.(MKUR000032))
FREE PACKAGE(SV.SV5740.(WSSV000146))
FREE PACKAGE(SV.SV5760.(WSSV000146))
FREE PACKAGE(SV.SV5770.(WSSV000146))
FREE PACKAGE(WF.YWFSWC.(WSSW000083))
FREE PACKAGE(ER.YERBER.(EAMR000024))
FREE PACKAGE(VV.YVVZZ12.(VDPS00007356F4415D))
FREE PACKAGE(CZ.YCZTPRT.(BEWI00001057D55677))
FREE PACKAGE(VP.VP0030.(VIP0000018))
FREE PACKAGE(WB.WB1110.(WSTS000043))
FREE PACKAGE(WB.WB0950.(WSTS000043))
FREE PACKAGE(WB.WB0830.(WSTS000043))
FREE PACKAGE(WB.WB0620.(WSTS000043))
FREE PACKAGE(WB.WB0520.(WSTS000043))
FREE PACKAGE(WB.WB1070.(WSTS000043))
FREE PACKAGE(WQ.YWQBERI.(CUBE00005657ECFA12))
FREE PACKAGE(CE.CE5300.(NOST000288))
FREE PACKAGE(CE.CE8200.(COPE000049))
FREE PACKAGE(WB.WB1130.(NOST000288))
FREE PACKAGE(WB.WB0840.(NOST000288))
FREE PACKAGE(WB.WB0720.(WS8B000401))
FREE PACKAGE(TN.TN0530.(OTXO000058))
FREE PACKAGE(AP.YAPUTGK.(APEN00003558075175))
FREE PACKAGE(WB.WB0940.(WSTS000043))
FREE PACKAGE(WB.WB0970.(WSTS000043))
FREE PACKAGE(WB.WB0530.(WSTS000043))
FREE PACKAGE(WB.YWBMOV.(WS8B0003185811C948))
FREE PACKAGE(SV.SV8300.(WSSV000121))
FREE PACKAGE(SV.SV0230.(WSSV000121))
FREE PACKAGE(WB.WB1290.(TOFF000076))
FREE PACKAGE(SV.SV5780.(WSSV000146))
FREE PACKAGE(WB.YWBEBSM.(WSTS000049582849AF))
FREE PACKAGE(WB.WB0630.(WSTS000049))
FREE PACKAGE(WB.WB0680.(WSTS000049))
FREE PACKAGE(WB.YWB0082.(WSTS00004758282BE3))
FREE PACKAGE(SV.SV5790.(WSSV000146))
FREE PACKAGE(WI.YWI0087.(TOFF0000875833150E))
FREE PACKAGE(WB.YWBBOPR.(WS8B000386583462DC))
FREE PACKAGE(CZ.YCZPABW.(GSER00015158317679))
FREE PACKAGE(SV.SV0250.(WSSV000146))
FREE PACKAGE(CZ.CZ6400.(GSER000039))
FREE PACKAGE(FF.FF0030.(FFOR000024))
FREE PACKAGE(FF.FF0020.(FFOR000024))
FREE PACKAGE(WQ.WQ6010.(CUBE000063))
FREE PACKAGE(SV.SV5750.(WSSV000146))
FREE PACKAGE(SV.SV0950.(WSSV000146))
FREE PACKAGE(BC.BC0004.(A20Y001119507E65B1))
FREE PACKAGE(BC.BC0005.(A20Y001119507E65BC))
FREE PACKAGE(WF.WF5410.(WSSW000083))
FREE PACKAGE(AZ.AZ0210.(AWZA000054))
FREE PACKAGE(VP.VP5310.(VIP0000018))
FREE PACKAGE(WP.YWPL9P1.(DBH000006857444F33))
FREE PACKAGE(SV.SV7520.(WSSV000148))
FREE PACKAGE(WB.WB1290.(TOFF000090))
FREE PACKAGE(WB.WB0970.(WSTS000050))
FREE PACKAGE(KS.YKS5512.(CSED000026580C796C))
FREE PACKAGE(KS.YKS5511.(CSED000026581723E4))
FREE PACKAGE(KS.YKS5512.(CSED0000315892F832))
FREE PACKAGE(KS.YKS5511.(CSED0000315892F81B))
FREE PACKAGE(FI.FI5067.(BKUR000047))
FREE PACKAGE(WB.WB1100.(TOFF000076))
FREE PACKAGE(WI.YWI0087.(TOFF0000905880CA48))
FREE PACKAGE(WB.WB0720.(WS8B000359))
FREE PACKAGE(RT.YRT025M.(RFT000001556F2A4F3))
FREE PACKAGE(WF.YWFSWC.(WSSW000005))
FREE PACKAGE(WF.WF5410.(WSSW000005))
FREE PACKAGE(NTA1P.CZA0255.(A02E00054455928C30))
FREE PACKAGE(DAA420_D_MAIN.PSSRULE.(V4100))
FREE PACKAGE(DAA420_D_MAIN.PSSXSQL.(V4200))
FREE PACKAGE(WB.WB0720.(WS8B000413))
FREE PACKAGE(BP.YBPALTR.(A12M00647953E783C0))
FREE PACKAGE(FI.FI5066.(BKUR000041))
FREE PACKAGE(AV.YAV1002.(AIS0000095577015F3))
FREE PACKAGE(FC.FC0010.(CRMA003935))
FREE PACKAGE(BP.BP9060.(BPST000055))
FREE PACKAGE(DI.DI7510.(DI00000045))
FREE PACKAGE(TR.TR5310.(DERI000033))
FREE PACKAGE(SV.SV5150.(WSSV000148))
FREE PACKAGE(TR.TR5330.(DERI000033))
FREE PACKAGE(DP.DP0320.(DI00000057))
FREE PACKAGE(YX.YXA171C.(TOFF00009858871D68))
FREE PACKAGE(CZ.CZ7000.(IPRI000007))
FREE PACKAGE(CZ.CZ6020.(LOFT000035))
FREE PACKAGE(TR.TR5320.(DERI000033))
FREE PACKAGE(CE.CE8460.(COPS000019))
FREE PACKAGE(WL.WL7390.(WSAW000059))
FREE PACKAGE(WP.YWPR5PX.(DBH000007557CEF45B))
FREE PACKAGE(MF.MF8940.(MFR0000086))
FREE PACKAGE(MF.MF6020.(MFR0000086))
FREE PACKAGE(TR.TR5340.(DERI000033))
FREE PACKAGE(MF.MF6010.(MFR0000086))
FREE PACKAGE(MF.MF6000.(MFR0000086))
FREE PACKAGE(MF.MF8930.(MFR0000094))
FREE PACKAGE(CZ.CZ5494.(ACP0000090))
FREE PACKAGE(MF.MF8950.(MFR0000086))
FREE PACKAGE(WB.WB5120.(WSTS000039))
FREE PACKAGE(TN.TN7004.(OTXO000063))
FREE PACKAGE(WC.WC8170.(OTXO000058))
FREE PACKAGE(TN.TN7020.(OTXO000058))
FREE PACKAGE(VD.VDUTI41.(DSPV000030))
FREE PACKAGE(CZ.CZ8010.(APEN000035))
FREE PACKAGE(NF.YNFNACL.(NBSI00005557160D8E))
FREE PACKAGE(ER.ER8020.(EAMR000019))
FREE PACKAGE(BP.YBPSTAM.(BPST00002254FC858F))
FREE PACKAGE(WQ.WQ6000.(CUBE000066))
FREE PACKAGE(WQ.WQ6000.(CUBE000084))
FREE PACKAGE(WP.YWPR4PX.(DBH000007557CEF45A))
FREE PACKAGE(DE.DE5130.(DE00000038))
FREE PACKAGE(CI.CI0100.(GEGE000019))
FREE PACKAGE(DE.DE0190.(DE00000038))
FREE PACKAGE(HP1.ACF3Q1.(HPSVP2ACF3Q1))
FREE PACKAGE(HP3.ACF3Q1.(HPSVP2ACF3Q1))
FREE PACKAGE(WB.WB0060.(TOFF000100))
FREE PACKAGE(NF.YNFDEAL.(NBSI0000505607A92A))
FREE PACKAGE(RT.YRT0023.(RFT000001556F2A4CC))
FREE PACKAGE(WP.YWPR3PX.(DBH000007557CEF458))
FREE PACKAGE(DE.DE5690.(DE00000038))
FREE PACKAGE(WB.WB1310.(WSTS000043))
FREE PACKAGE(WP.YWPU1P5.(DBH000006857750BA6))
FREE PACKAGE(BS.BS5030.(BUT0000006))
FREE PACKAGE(TN.TN5004.(OTXO000054))
FREE PACKAGE(CZ.CZ6300.(GSER000156))
FREE PACKAGE(SV.SV5760.(WSSV000148))
FREE PACKAGE(SV.SV5770.(WSSV000148))
FREE PACKAGE(SV.SV5740.(WSSV000148))
FREE PACKAGE(SV.SV0230.(WSSV000148))
FREE PACKAGE(SV.SV5940.(WSSV000148))
FREE PACKAGE(WF.YWFM537.(WSSW000081586E4AEB))
FREE PACKAGE(NF.YNFNACL.(NBSI000122586CD99C))
FREE PACKAGE(SV.SV5600.(WSSV000148))
FREE PACKAGE(HB.HB5000.(ASIA000070))
FREE PACKAGE(DE.DE5600.(DE00000038))
FREE PACKAGE(PC01.PC5060.(IVN0000024))
FREE PACKAGE(PC02.PC5060.(IVN0000024))
FREE PACKAGE(PC03.PC5060.(IVN0000024))
FREE PACKAGE(PC04.PC5060.(IVN0000024))
FREE PACKAGE(PC05.PC5060.(IVN0000024))
FREE PACKAGE(PC06.PC5060.(IVN0000024))
FREE PACKAGE(TN.TN5016.(OTXO000058))
FREE PACKAGE(WQ.YWQ5601.(CUBE0000565808D243))
FREE PACKAGE(WF.YWFCB02.(WSSW0000435808F0DA))
FREE PACKAGE(NF.NF8620.(NBSC000021))
FREE PACKAGE(WB.WB5570.(WS8B000319))
FREE PACKAGE(KS.KS5685.(EBVV000245))
FREE PACKAGE(FF.FF5000.(FFOR000024))
FREE PACKAGE(MF.MF8710.(MFR0000094))
FREE PACKAGE(MF.MF8706.(MFR0000094))
FREE PACKAGE(MF.MF8717.(MFR0000094))
FREE PACKAGE(MF.MF8719.(MFR0000094))
FREE PACKAGE(CE.CE8440.(COPE000046))
FREE PACKAGE(PC01.PC5120.(AIS0000124))
FREE PACKAGE(PC02.PC5120.(AIS0000124))
FREE PACKAGE(PC03.PC5120.(AIS0000124))
FREE PACKAGE(PC04.PC5120.(AIS0000124))
FREE PACKAGE(PC05.PC5120.(AIS0000124))
FREE PACKAGE(PC06.PC5120.(AIS0000124))
FREE PACKAGE(SV.SV8410.(WSSV000148))
FREE PACKAGE(NF.NF7650.(NF0Y000530))
FREE PACKAGE(AP.YAPUTGK.(APEN0000385880DAE5))
FREE PACKAGE(PC01.YPC0520.(IVN0000024580DE88D))
FREE PACKAGE(PC06.YPC0520.(IVN0000024580DE88D))
FREE PACKAGE(SV.YSVTXOG.(WSSV0001215819E262))
FREE PACKAGE(EC.YECCRAC.(SYNC0000085638D27E))
FREE PACKAGE(VV.YVVZZGR.(VDPS00006256547738))
FREE PACKAGE(VV.YVVZZ1R.(VDPS0000525613E28D))
FREE PACKAGE(YY.YYNFWRG.(NBSI000050))
FREE PACKAGE(VV.YVVZZ13.(VDPS000052561CE2B1))
FREE PACKAGE(WQ.YWQEVEO.(CUBE00003256BB4250))
FREE PACKAGE(WI.YWI5954.(WS8I00015256E570C7))
FREE PACKAGE(VV.YVVZZ15.(VDPS00006756A9EE3E))
FREE PACKAGE(WB.WB7730.(WSTS000025))
FREE PACKAGE(BX.YBXADBR.(CLOS000090573B1F04))
FREE PACKAGE(AT.AT7500.(ACS0000009))
FREE PACKAGE(WP.YWPL3P1.(DBH000006857444F1D))
FREE PACKAGE(WP.YWPL4P1.(DBH000006857444F20))
FREE PACKAGE(WP.YWPL5P1.(DBH000006857444F23))
FREE PACKAGE(WP.YWPR1QX.(DBH000006857444F5A))
FREE PACKAGE(WP.YWPL7P1.(DBH000006857444F2C))
FREE PACKAGE(WP.YWPL8P1.(DBH000006857444F2F))
FREE PACKAGE(WP.YWPL1P1.(DBH000006857572669))
FREE PACKAGE(WP.YWPLEP1.(DBH000006857572E3A))
FREE PACKAGE(NZ.NZDBM83.(ZVBI000015))
FREE PACKAGE(YY.YYDMAKD.(WSIN000023))
FREE PACKAGE(WB.YWBDGP.(WS8B000286576A566C))
FREE PACKAGE(WB.YWBDGP2.(WS8B000286576A5674))
FREE PACKAGE(VV.YVVZZ18.(VDPS000077576AC41A))
FREE PACKAGE(VD.YVD0721.(DSPV00003057691EEA))
FREE PACKAGE(VD.YVD0722.(DSPV00003057691F8F))
FREE PACKAGE(AZ.YAZ0906.(AWZA00003556FCFB81))
FREE PACKAGE(YY.YYNFP15.(NBSI000056))
FREE PACKAGE(VV.YVVZZ10.(VDPS00007357051B7A))
FREE PACKAGE(WB.WB7420.(WSTS000035))
FREE PACKAGE(WC.WC7500.(OTXO000045))
FREE PACKAGE(KS.YKSBKST.(CSED000019570B579E))
FREE PACKAGE(WP.YWPRDPX.(DBH000007557CEF450))
FREE PACKAGE(WB.YWBSA2.(WS8B00031857D6B537))
FREE PACKAGE(FI.FI2100.(BKUR000041))
FREE PACKAGE(WP.YWPRCPX.(DBH000007557D6F7AF))
FREE PACKAGE(MF.MF8600.(MFR0000086))
FREE PACKAGE(MF.MF8620.(MFR0000086))
FREE PACKAGE(WP.YWPRAPX.(DBH000007557D56C23))
FREE PACKAGE(WP.YWPR7PX.(DBH000007557D56C68))
FREE PACKAGE(RT.RT0200.(TABS000119))
FREE PACKAGE(WP.YWPRBPX.(DBH000007557D6A43E))
FREE PACKAGE(DE.YDELSTO.(DE0000003857DFBD27))
FREE PACKAGE(TN.YTNDEP.(OTXO00005857DFCD1D))
FREE PACKAGE(TN.YTN0100.(OTXO00005857DFCD28))
FREE PACKAGE(TN.YTNSICH.(OTXO00005857DFCD1F))
FREE PACKAGE(WB.YWBCTA.(WS8B00031857DFC824))
FREE PACKAGE(KE.YKEA082.(EBVV00023557E108BE))
FREE PACKAGE(KE.YKEA083.(EBVV00023557E108D7))
FREE PACKAGE(DE.YDE0021.(DE0000003857E11728))
FREE PACKAGE(WQ.YWQ1101.(CUBE00005657E144AF))
FREE PACKAGE(SV.SV8630.(WSSV000121))
FREE PACKAGE(PC01.PC5070.(IVN0000024))
FREE PACKAGE(PC02.PC5070.(IVN0000024))
FREE PACKAGE(PC03.PC5070.(IVN0000024))
FREE PACKAGE(PC04.PC5070.(IVN0000024))
FREE PACKAGE(PC05.PC5070.(IVN0000024))
FREE PACKAGE(PC06.PC5070.(IVN0000024))
FREE PACKAGE(VD.VDDBM15.(DSPV000034))
FREE PACKAGE(CD.CD2590.(UPDS000033))
FREE PACKAGE(LC.LC0511I.(TFBM00002857EA823C))
FREE PACKAGE(DE.DE0400.(DE00000038))
FREE PACKAGE(DE.DE0490.(DE00000038))
FREE PACKAGE(FI.FI5260.(BKUR000041))
FREE PACKAGE(YY.YYNLCPB.(MOD000002657E253F8))
FREE PACKAGE(YY.YYNLCPO.(MOD000002657E25407))
FREE PACKAGE(DP.DP0920.(DP00000050))
FREE PACKAGE(MF.MF7380.(MFR0000086))
FREE PACKAGE(WB.WB1040.(WSTS000043))
FREE PACKAGE(WB.WB1030.(WSTS000043))
FREE PACKAGE(WB.WB0580.(WSTS000043))
FREE PACKAGE(WB.WB0570.(WSTS000043))
FREE PACKAGE(WB.WB1050.(WSTS000043))
FREE PACKAGE(WB.WB0660.(WSTS000043))
FREE PACKAGE(WB.WB5270.(WSTS000043))
FREE PACKAGE(WB.WB0600.(WSTS000043))
FREE PACKAGE(WB.WB1020.(WSTS000043))
FREE PACKAGE(WB.WB1340.(WSTS000043))
FREE PACKAGE(WB.WB5280.(WSTS000043))
FREE PACKAGE(WB.WB0510.(WSTS000043))
FREE PACKAGE(CI.CI0090.(GEGE000019))
FREE PACKAGE(TP.TP0800.(TP00000011))
FREE PACKAGE(FF.YFF0004.(FFOR00002357ED17E7))
FREE PACKAGE(CZ.CZ5280.(KLOM000050))
FREE PACKAGE(TR.TR0810.(AITR000024))
FREE PACKAGE(DE.DE0940.(DE00000033))
FREE PACKAGE(GM.GM0870.(GM00000084))
FREE PACKAGE(IT.IT0010.(TABS000102))
FREE PACKAGE(DE.DE7800.(DE00000033))
FREE PACKAGE(DE.DE0060.(DE00000033))
FREE PACKAGE(DE.DE0100.(DE00000033))
FREE PACKAGE(TN.TN7080.(OTXO000054))
FREE PACKAGE(WB.WB5090.(WSTS000039))
FREE PACKAGE(WB.WB8010.(TOFF000067))
FREE PACKAGE(EX.EX6020.(EXPN000050))
FREE PACKAGE(WB.YWB0082.(WSTS000050584D1824))
FREE PACKAGE(WB.YWBEBSM.(WSTS00005058480203))
FREE PACKAGE(WB.YWBIO.(WS8B0004015856440E))
FREE PACKAGE(FF.FF0020.(FFOR000030))
FREE PACKAGE(FF.FF0030.(FFOR000030))
FREE PACKAGE(NL.NL7310.(BALR000068))
FREE PACKAGE(SV.SV5750.(WSSV000148))
FREE PACKAGE(SV.SV0250.(WSSV000148))
FREE PACKAGE(SV.SV5790.(WSSV000148))
FREE PACKAGE(CZ.CZ6400.(GSER000157))
FREE PACKAGE(CZ.YCZPABW.(GSER00015758629BAC))
FREE PACKAGE(CE.CE8200.(COPE000052))
FREE PACKAGE(CE.CE5300.(COPE000052))
FREE PACKAGE(MF.MF7360.(MFR0000107))
FREE PACKAGE(MF.MF7340.(MFR0000107))
FREE PACKAGE(EX.EX6010.(EXPN000062))
FREE PACKAGE(EX.EX5020.(EXPN000062))
FREE PACKAGE(VV.YVVZZ12.(VDPS000103586D3B12))
FREE PACKAGE(SV.SV5780.(WSSV000148))
FREE PACKAGE(KS.KS5500.(CSED000026))
FREE PACKAGE(CZ.CZ5190.(LOMN000025))
FREE PACKAGE(UU.UU5170.(RS20000055))
FREE PACKAGE(DE.DE0430.(DE00000038))
FREE PACKAGE(DE.DE0830.(DE00000038))
FREE PACKAGE(NF.YNFIB07.(IB0000002357F3A607))
FREE PACKAGE(YY.YYWBERX.(TOFF00007657F3B1EE))
FREE PACKAGE(NI.YNILBP3.(IPC000015657F3CF7F))
FREE PACKAGE(LB.YLB0120.(IPC000015657F3CF5C))
FREE PACKAGE(NI.YNILBPL.(IPC000015657F3CF61))
FREE PACKAGE(MF.YMFC110.(MFR000008757F52498))
FREE PACKAGE(WQ.YWQ4502.(CUBE00005657F65AA1))
FREE PACKAGE(DE.DE0440.(DE00000038))
FREE PACKAGE(CZ.CZ8980.(KLOM000050))
FREE PACKAGE(EC.EC5130.(KLOM000050))
FREE PACKAGE(EX.EX5030.(EXPN000051))
FREE PACKAGE(MF.MF7510.(MFR0000086))
FREE PACKAGE(PC.PC5090.(IVN0000024))
FREE PACKAGE(WB.WB0550.(WSTS000043))
FREE PACKAGE(WB.WB5260.(WSTS000043))
FREE PACKAGE(YY.YYWBVIN.(WSTS00004357FCB166))
FREE PACKAGE(FI.FI5200.(BKUR000041))
FREE PACKAGE(VD.VDGLH00.(DSPV000034))
FREE PACKAGE(PC01.YPC0730.(IVN000002457FF4BEB))
FREE PACKAGE(PC02.YPC0730.(IVN000002457FF4BEB))
FREE PACKAGE(PC03.YPC0730.(IVN000002457FF4BEB))
FREE PACKAGE(PC04.YPC0730.(IVN000002457FF4BEB))
FREE PACKAGE(PC05.YPC0730.(IVN000002457FF4BEB))
FREE PACKAGE(PC06.YPC0730.(IVN000002457FF4BEB))
FREE PACKAGE(PC01.YPC0740.(IVN000002457FF4BFF))
FREE PACKAGE(PC02.YPC0740.(IVN000002457FF4BFF))
FREE PACKAGE(PC03.YPC0740.(IVN000002457FF4BFF))
FREE PACKAGE(PC04.YPC0740.(IVN000002457FF4BFF))
FREE PACKAGE(PC05.YPC0740.(IVN000002457FF4BFF))
FREE PACKAGE(PC06.YPC0740.(IVN000002457FF4BFF))
FREE PACKAGE(WC.WC8401.(OTXO000058))
FREE PACKAGE(WC.WC5050.(OTXO000058))
FREE PACKAGE(WC.WC5010.(OTXO000058))
FREE PACKAGE(MF.MF7230.(MFR0000086))
FREE PACKAGE(CZ.CZ5150.(KLOM000054))
FREE PACKAGE(EX.YEX0003.(EXPN00005158075739))
FREE PACKAGE(NI.YNICS01.(IPC000015658079777))
FREE PACKAGE(MF.MF7330.(MFR0000086))
FREE PACKAGE(MF.MF7320.(MFR0000086))
FREE PACKAGE(MF.MF7200.(MFR0000086))
FREE PACKAGE(WC.WC8410.(OTXO000058))
FREE PACKAGE(WB.WB0980.(TOFF000076))
FREE PACKAGE(WB.WB1090.(TOFF000076))
FREE PACKAGE(WB.WB1080.(TOFF000076))
FREE PACKAGE(MF.YMFC113.(MFR0000087580E1D38))
FREE PACKAGE(PC02.YPC0520.(IVN0000024580DE88D))
FREE PACKAGE(PC03.YPC0520.(IVN0000024580DE88D))
FREE PACKAGE(PC04.YPC0520.(IVN0000024580DE88D))
FREE PACKAGE(PC05.YPC0520.(IVN0000024580DE88D))
FREE PACKAGE(BP.YBPMUT.(BPST000055580F38EA))
FREE PACKAGE(WB.WB5290.(WSTS000043))
FREE PACKAGE(ED.ED0950.(ED00000044))
FREE PACKAGE(FF.FF0010.(FFOR000024))
FREE PACKAGE(WF.WF0300.(WSSW000046))
FREE PACKAGE(ED.ED0830.(ED00000044))
FREE PACKAGE(CE.CE8500.(COPE000046))
FREE PACKAGE(CE.CE5230.(COPE000046))
FREE PACKAGE(DE.DE0410.(DE00000053))
FREE PACKAGE(WB.WB0870.(WS8B000373))
FREE PACKAGE(CZ.CZ6500.(GSER000039))
FREE PACKAGE(WF.YWF64CA.(WSSW0000465829B0C2))
FREE PACKAGE(NI.YNI0161.(IPC00001715832F542))
FREE PACKAGE(RI.RI0810.(RI00000015))
FREE PACKAGE(EB.EB6480.(EXPN000058))
FREE PACKAGE(CZ.YCZJABW.(GSER000151582DC263))
FREE PACKAGE(WM.WM0010.(WSIN000038))
FREE PACKAGE(NI.NI0010.(IPC0000171))
FREE PACKAGE(GM.GM0850.(GM00000123))
FREE PACKAGE(RI.RI0820.(DE00000049))
FREE PACKAGE(DE.DE0050.(DE00000049))
FREE PACKAGE(DE.DE0090.(DE00000049))
FREE PACKAGE(CE.CE5730.(COPE000046))
FREE PACKAGE(WF.WF0350.(WSSW000077))
FREE PACKAGE(WF.WF0280.(WSSW000077))
FREE PACKAGE(WF.WF0320.(WSSW000077))
FREE PACKAGE(WF.WF0310.(WSSW000077))
FREE PACKAGE(FZ.FZ0820.(FZ00000013))
FREE PACKAGE(DE.DE0820.(DE00000049))
FREE PACKAGE(AV.YAVNV10.(AIS0000118583C5023))
FREE PACKAGE(AV.YAVNV50.(AIS0000118583C503B))
FREE PACKAGE(NO.NO0960.(NO00000029))
FREE PACKAGE(DE.DE0420.(AITR000030))
FREE PACKAGE(DE.DE0810.(AITR000030))
FREE PACKAGE(DE.DE0030.(AITR000030))
FREE PACKAGE(CE.YCEWIAP.(COPE000046583EB13F))
FREE PACKAGE(CE.YCE1000.(COPE000046583EB25C))
FREE PACKAGE(ED.ED0960.(ED00000044))
FREE PACKAGE(CE.CE5200.(COPE000046))
FREE PACKAGE(NO.NO0970.(NO00000029))
FREE PACKAGE(WB.YWBWRK.(WS8B00039058400836))
FREE PACKAGE(NI.NI0040.(IPC0000171))
FREE PACKAGE(KC.YKCWFVU.(A12M0061415321E5B0))
FREE PACKAGE(NZ.YNZGSEL.(A14S00239353427E48))
FREE PACKAGE(BP.YBPSUCH.(A12M00647953E786E4))
FREE PACKAGE(BP.YBPSUCH.(A12M00647953E786E4CICS))
FREE PACKAGE(AT.AT0099.(A20Y001519544E5A50))
FREE PACKAGE(NTA1P.CZA0257.(A02E0005225471ACDA))
FREE PACKAGE(NTA1P.CZA0219.(A02E00053555100C98))
FREE PACKAGE(NTA1P.CZA0213.(A02E00053555100C8A))
FREE PACKAGE(WB.YWBMOV.(WS8B000359587F3CA8))
FREE PACKAGE(WB.WB5340.(TOFF000090))
FREE PACKAGE(WB.WB0530.(WSTS000050))
FREE PACKAGE(WB.WB0940.(WSTS000050))
FREE PACKAGE(WB.WB0680.(WSTS000050))
FREE PACKAGE(WB.WB0630.(WSTS000050))
FREE PACKAGE(WB.WB0620.(WSTS000050))
FREE PACKAGE(WB.WB0950.(WSTS000050))
FREE PACKAGE(WB.WB0830.(WSTS000050))
FREE PACKAGE(WB.WB1070.(WSTS000050))
FREE PACKAGE(WB.WB1110.(WSTS000050))
FREE PACKAGE(WB.WB0520.(WSTS000050))
FREE PACKAGE(WQ.YWQBERI.(CUBE000066587FB128))
FREE PACKAGE(WB.WB1130.(WSTS000050))
FREE PACKAGE(WB.WB0840.(WSTS000050))
FREE PACKAGE(WQ.WQ6010.(CUBE000066))
FREE PACKAGE(WQ.WQ5950.(CUBE000066))
FREE PACKAGE(SV.SV0950.(WSSV000148))
FREE PACKAGE(WB.WB0970.(WSTS000052))
FREE PACKAGE(WB.WB1290.(TOFF000100))
FREE PACKAGE(VP.VP5310.(VIP0000023))
FREE PACKAGE(WI.YWI0087.(TOFF0001015896D63B))
FREE PACKAGE(WB.WB1100.(TOFF000101))
FREE PACKAGE(KS.YKS5512.(CSED0000325896E4BF))
FREE PACKAGE(KS.YKS5511.(CSED0000325896E675))
FREE PACKAGE(WF.YWFSWC.(WSSW000084))
FREE PACKAGE(WF.WF5410.(WSSW000084))
FREE PACKAGE(WB.WB0720.(WS8B000415))
FREE PACKAGE(WB.YWB0083.(WSTS00005458AEAFE5))
FREE PACKAGE(NF.YNFBUG.(NBSI00005056091E27))
FREE PACKAGE(WB.YWBBOPR.(WS8B000359587F3ED3))
FREE PACKAGE(VV.YVVZZ11.(VDPS00006756A9E387))
FREE PACKAGE(WP.YWPR1PX.(DBH000007557CEF455))
FREE PACKAGE(RT.RT5910.(RFT0000016))
FREE PACKAGE(VV.YVVZZ3R.(VDPS0000295586D7EF))
FREE PACKAGE(YY.YYFILOD.(BKUR00004157EB8F97))
FREE PACKAGE(EK.EK8710.(EMA0000034))
FREE PACKAGE(WB.WB7330.(A06M025453))
FREE PACKAGE(WB.WB7320.(A06M025453))
FREE PACKAGE(WB.WB7340.(A06M025453))
FREE PACKAGE(SE.SE0870.(A20Y001521))
FREE PACKAGE(ER.YERBER.(EAMR000019))
FREE PACKAGE(ER.ER5080.(EAMR000019))
FREE PACKAGE(AT.AT7500.(ACS0000011))
FREE PACKAGE(CU.CU9000.(CIFS000142))
FREE PACKAGE(SV.SV5740.(WSSV000151))
FREE PACKAGE(SV.SV5760.(WSSV000151))
FREE PACKAGE(AT.AT8500.(ACS0000012))
FREE PACKAGE(AT.AT8500.(ACS0000011))
FREE PACKAGE(ER.YERDUPD.(EAMR0000185857FA28))
FREE PACKAGE(ER.YERDINS.(EAMR0000175829D73A))
FREE PACKAGE(WB.YWB0082.(WSTS00004658931E2C))
FREE PACKAGE(ER.YERDCUR.(EAMR000018585BE7D9))
FREE PACKAGE(ER.YERDGET.(EAMR000017583D54F9))
FREE PACKAGE(WB.YWBSYM.(WS8B00038058A17C05))
FREE PACKAGE(WI.YWI0087.(TOFF00008858A1871A))
FREE PACKAGE(WP.YWPR6PX.(DBH000007557CEF45D))
FREE PACKAGE(NO.NO0970.(NO00000031))
FREE PACKAGE(SN.SN5901.(NOST000268))
FREE PACKAGE(SN.SN5004.(NOST000268))
FREE PACKAGE(UU.UU5170.(RS20000066))
FREE PACKAGE(WQ.WQ5950.(CUBE000067))
FREE PACKAGE(SN.SN5004.(SAVS000002))
FREE PACKAGE(WB.WB1030.(WSTS000046))
FREE PACKAGE(WB.WB1040.(WSTS000046))
FREE PACKAGE(WP.YWPR2PX.(DBH000007557CEF456))
FREE PACKAGE(ER.ER5080.(EAMR000022))
FREE PACKAGE(ER.YERBER.(EAMR000022))
FREE PACKAGE(YX.YXA171C.(TOFF00008858A1B300))
FREE PACKAGE(DE.DE0430.(DE00000043))
FREE PACKAGE(DE.DE0440.(DE00000043))
FREE PACKAGE(DE.DE0050.(DE00000043))
FREE PACKAGE(DE.DE0820.(DE00000043))
FREE PACKAGE(YY.YYNLCPB.(MOD000002157729A19))
FREE PACKAGE(DE.DE0420.(DE00000043))
FREE PACKAGE(DE.DE0810.(DE00000043))
FREE PACKAGE(DE.DE0090.(DE00000043))
FREE PACKAGE(DE.DE0030.(DE00000043))
FREE PACKAGE(DI.DI7510.(DI00000054))
FREE PACKAGE(DP.DP0320.(DP00000059))
FREE PACKAGE(ED.ED0960.(ED00000047))
FREE PACKAGE(GM.GM0850.(GM00000113))
FREE PACKAGE(DE.DE5900.(DE00000043))
FREE PACKAGE(WQ.WQ6000.(CUBE000067))
FREE PACKAGE(XP.XP7200.(A19R002479))
FREE PACKAGE(SN.SN5903.(NOST000268))
FREE PACKAGE(DE.DE5080.(DE00000043))
FREE PACKAGE(WF.WF5410.(WSSW000069))
FREE PACKAGE(WF.YWFSWC.(WSSW000069))
FREE PACKAGE(ER.YERBER.(EAMR000029))
FREE PACKAGE(WB.YWBSA4.(WS8B00038058B3F8A5))
FREE PACKAGE(HP1.AOYURK.(HPSVP2AOYURK))
FREE PACKAGE(HP3.AOYURK.(HPSVP2AOYURK))
FREE PACKAGE(HP1.AC7ZRK.(HPSVP2AC7ZRK))
FREE PACKAGE(HP3.AC7ZRK.(HPSVP2AC7ZRK))
FREE PACKAGE(HP1.AAIORK.(HPSVP2AAIORK))
FREE PACKAGE(HP3.AAIORK.(HPSVP2AAIORK))
FREE PACKAGE(SN.YSN111U.(NOST000268586EA538))
FREE PACKAGE(WB.WB5340.(TOFF000088))
FREE PACKAGE(TN.YTNOTF.(OTXO00005857DFCC76))
FREE PACKAGE(YY.YYWBERX.(TOFF00008858906FB5))
FREE PACKAGE(WB.WB1290.(TOFF000088))
FREE PACKAGE(WF.WF5410.(WSSW000091))
FREE PACKAGE(WF.YWFSWC.(WSSW000091))
FREE PACKAGE(WQ.YWQ4502.(CUBE0000675896F3D8))
FREE PACKAGE(WQ.YWQ5601.(CUBE0000675896F3F9))
FREE PACKAGE(HP1.ACZRQ2.(HPSVP2ACZRQ2))
FREE PACKAGE(HP3.ACZRQ2.(HPSVP2ACZRQ2))
FREE PACKAGE(HP1.AF3TQ1.(HPSVP2AF3TQ1))
FREE PACKAGE(HP3.AF3TQ1.(HPSVP2AF3TQ1))
FREE PACKAGE(HP1.ACDBQ1.(HPSVP1ACDBQ1))
FREE PACKAGE(HP3.ACDBQ1.(HPSVP1ACDBQ1))
FREE PACKAGE(HP1.ABWZQ2.(HPSVP2ABWZQ2))
FREE PACKAGE(HP3.ABWZQ2.(HPSVP2ABWZQ2))
FREE PACKAGE(SV.SV5770.(WSSV000151))
FREE PACKAGE(SV.SV5600.(WSSV000151))
FREE PACKAGE(SV.SV5790.(WSSV000151))
FREE PACKAGE(DE.DE0190.(DE00000043))
FREE PACKAGE(DE.DE5130.(DE00000043))
FREE PACKAGE(CZ.CZ5494.(ACP0000084))
FREE PACKAGE(MF.MF8940.(MFR0000096))
FREE PACKAGE(MF.MF8930.(MFR0000096))
FREE PACKAGE(WL.WL7390.(WSAW000086))
FREE PACKAGE(TN.TN7080.(OTXO000060))
FREE PACKAGE(MF.MF8950.(MFR0000096))
FREE PACKAGE(HP1.RWBR030.(HPSVP1RWBR030))
FREE PACKAGE(HP3.RWBR030.(HPSVP1RWBR030))
FREE PACKAGE(ER.ER8020.(EAMR000022))
FREE PACKAGE(AZ.AZ0210.(AWZA000052))
FREE PACKAGE(TN.TN7004.(OTXO000060))
FREE PACKAGE(WC.WC8170.(OTXO000060))
FREE PACKAGE(CZ.CZ7510.(APEN000035))
FREE PACKAGE(CZ.CZ8020.(APEN000032))
FREE PACKAGE(CZ.CZ8010.(APEN000039))
FREE PACKAGE(WP.YWPL2P1.(DBH00000685766559B))
FREE PACKAGE(HP1.AB7STL.(HPSVP2AB7STL))
FREE PACKAGE(HP3.AB7STL.(HPSVP2AB7STL))
FREE PACKAGE(WQ.YWQ4101.(CUBE00006758AC2DF1))
FREE PACKAGE(SV.SV5750.(WSSV000151))
FREE PACKAGE(SN.YSN201I.(NOST000268586EA569))
FREE PACKAGE(EC.EC7204.(DLGR000022))
FREE PACKAGE(EC.EC7206.(DLGR000022))
FREE PACKAGE(DE.DE7120.(DE00000064))
FREE PACKAGE(VV.YVVZZ19.(VDPS000090582B5250))
FREE PACKAGE(MF.MF7010.(MFR0000096))
FREE PACKAGE(AP.YAPUTGK.(APEN000039588E05DF))
FREE PACKAGE(DE.DE5600.(DE00000043))
FREE PACKAGE(CZ.CZ6300.(KLOM000057))
FREE PACKAGE(TN.TN5016.(OTXO000060))
FREE PACKAGE(PC01.PC5060.(IVN0000028))
FREE PACKAGE(PC02.PC5060.(IVN0000028))
FREE PACKAGE(PC03.PC5060.(IVN0000028))
FREE PACKAGE(PC04.PC5060.(IVN0000028))
FREE PACKAGE(PC05.PC5060.(IVN0000028))
FREE PACKAGE(PC06.PC5060.(IVN0000028))
FREE PACKAGE(PC07.PC5060.(IVN0000028))
FREE PACKAGE(DE.DE5690.(DE00000043))
FREE PACKAGE(GM.GM7910.(GM00000065))
FREE PACKAGE(CZ.YCZM113.(KINF00000656A66022))
FREE PACKAGE(FI.YFI0140.(BKUR00003857BB18F4))
FREE PACKAGE(WB.WB0990.(TOFF000076))
FREE PACKAGE(DE.DE0030.(DE00000065))
FREE PACKAGE(DE.DE0050.(DE00000065))
FREE PACKAGE(DE.DE0090.(DE00000065))
FREE PACKAGE(DE.DE0420.(DE00000065))
FREE PACKAGE(DE.DE0430.(DE00000065))
FREE PACKAGE(DE.DE0440.(DE00000065))
FREE PACKAGE(DE.DE0810.(DE00000065))
FREE PACKAGE(DE.DE0820.(DE00000065))
FREE PACKAGE(SN.SN5004.(SAVS000004))
FREE PACKAGE(GM.GM0850.(GM00000131))
FREE PACKAGE(ED.ED0960.(ED00000058))
FREE PACKAGE(ER.YERBER.(EAMR000033))
FREE PACKAGE(WF.WF5410.(WSSW000092))
FREE PACKAGE(WF.YWFSWC.(WSSW000092))
FREE PACKAGE(WB.WB5340.(TOFF000110))
FREE PACKAGE(WB.WB1290.(TOFF000110))
FREE PACKAGE(WB.WB0970.(WSTS000046))
FREE PACKAGE(WF.WF0320.(WSSW000069))
FREE PACKAGE(WF.WF0350.(WSSW000069))
FREE PACKAGE(WB.WB0550.(WSTS000046))
FREE PACKAGE(GM.GM0870.(GM00000113))
FREE PACKAGE(SV.SV5150.(WSSV000151))
FREE PACKAGE(WB.WB1100.(TOFF000088))
FREE PACKAGE(WB.WB0060.(TOFF000088))
FREE PACKAGE(WB.WB0980.(TOFF000088))
FREE PACKAGE(WB.WB1130.(WSTS000046))
FREE PACKAGE(WF.WF0310.(WSSW000069))
FREE PACKAGE(WB.YWB0083.(WS8B00038058B41EE5))
FREE PACKAGE(SN.SN5901.(SAVS000002))
FREE PACKAGE(UU.UU5170.(GSER000169))
FREE PACKAGE(WB.YWB0082.(WS8B00042658C556F1))
FREE PACKAGE(WI.YWI0087.(WS8B00042858C6D5CA))
FREE PACKAGE(NO.NO0970.(NO00000043))
FREE PACKAGE(ER.ER5080.(EAMR000029))
FREE PACKAGE(WQ.WQ5950.(CUBE000090))
FREE PACKAGE(SV.SV5600.(WSSV000222))
FREE PACKAGE(SV.SV5790.(WSSV000222))
FREE PACKAGE(TN.TN7080.(OTXO000072))
FREE PACKAGE(WF.WF0300.(WSSW000069))
FREE PACKAGE(PC.YPC0570.(IVN000002457FF4E06))
FREE PACKAGE(FI.FI2100.(BKUR000052))
FREE PACKAGE(MF.YMFC110.(MFR000009758A985D8))
FREE PACKAGE(NTA1P.CZA0181.(A02E00047752976218))
FREE PACKAGE(WB.WB0820.(WSTS000014))
FREE PACKAGE(DE.DE0100.(DE00000043))
FREE PACKAGE(DE.DE0490.(DE00000043))
FREE PACKAGE(WB.WB0840.(WSTS000046))
FREE PACKAGE(SN.YSN111I.(NOST000268586EA533))
FREE PACKAGE(WB.YWBSA2.(WS8B00038058930202))
FREE PACKAGE(EX.EX5020.(EXPN000059))
FREE PACKAGE(VD.VDDBM15.(DSPV000040))
FREE PACKAGE(WB.YWBCTA.(WS8B00038058930814))
FREE PACKAGE(WF.WF0280.(WSSW000069))
FREE PACKAGE(RI.RI0820.(RI00000016))
FREE PACKAGE(YY.YYFILOD.(BKUR00005258935183))
FREE PACKAGE(VV.YVVZZ05.(VDPS0000775794D107))
FREE PACKAGE(TN.TN0530.(OTXO000063))
FREE PACKAGE(WB.WB7561.(WSTS000019))
FREE PACKAGE(WB.WB7560.(WSTS000034))
FREE PACKAGE(NI.YNIYTLG.(IPC0000141576AA733))
FREE PACKAGE(NI01.YNIYTLG.(IPC0000141576AA733))
FREE PACKAGE(NI02.YNIYTLG.(IPC0000141576AA733))
FREE PACKAGE(NI.YNI0161.(IPC0000175588646FA))
FREE PACKAGE(CZ.CZ5280.(KLOM000057))
FREE PACKAGE(CZ.CZ6400.(GSER000152))
FREE PACKAGE(WB.WB5280.(WSTS000046))
FREE PACKAGE(NO.NO0960.(NO00000031))
FREE PACKAGE(TP.TP0800.(TP00000016))
FREE PACKAGE(FZ.FZ0820.(FZ00000014))
FREE PACKAGE(CZ.CZ5150.(KLOM000057))
FREE PACKAGE(EC.EC5130.(KLOM000057))
FREE PACKAGE(CZ.CZ6500.(GSER000152))
FREE PACKAGE(WQ.YWQBERI.(CUBE00006758A48C9B))
FREE PACKAGE(CZ.YCZMLIM.(KLOM00005758ADB2E7))
FREE PACKAGE(FI.FI5200.(BKUR000052))
FREE PACKAGE(CK.YCKT025.(DCA0000026))
FREE PACKAGE(MF.MF7901.(MFR0000065))
FREE PACKAGE(DE.DE0860.(DE00000028))
FREE PACKAGE(AU.YAU190I.(AURA00005057D6BC0B))
FREE PACKAGE(AU.YAU190D.(AURA00005057D6BC08))
FREE PACKAGE(AU.YAU191D.(AURA00005057D6BC0E))
FREE PACKAGE(AU.YAU191I.(AURA00005057D6BC20))
FREE PACKAGE(MF.MF7550.(MFR0000086))
FREE PACKAGE(MF.MF7570.(MFR0000086))
FREE PACKAGE(WC.WC8120.(OTXO000054))
FREE PACKAGE(NTA1P.CZA0199.(A02E0005675847D69B))
FREE PACKAGE(TN.YTN0021.(OTXO0000585804AD7B))
FREE PACKAGE(WB.WB7690.(A06M025453))
FREE PACKAGE(NI.YNILBPL.(IPC000017558864653))
FREE PACKAGE(DE.DE0400.(DE00000043))
FREE PACKAGE(DP.DP0920.(DP00000059))
FREE PACKAGE(NL.NL7310.(BALR000059))
FREE PACKAGE(WB.WB0520.(WSTS000046))
FREE PACKAGE(WB.WB0530.(WSTS000046))
FREE PACKAGE(WB.WB5290.(WSTS000046))
FREE PACKAGE(WB.WB5270.(WSTS000046))
FREE PACKAGE(WF.YWF64CA.(WSSW00006958931268))
FREE PACKAGE(WB.WB5260.(WSTS000046))
FREE PACKAGE(DE.DE0830.(DE00000043))
FREE PACKAGE(EX.EX6020.(EXPN000059))
FREE PACKAGE(EX.EX6010.(EXPN000059))
FREE PACKAGE(CZ.CZ8980.(KLOM000057))
FREE PACKAGE(CZ.CZ5190.(LOMN000028))
FREE PACKAGE(MF.MF7230.(MFR0000096))
FREE PACKAGE(MF.MF7320.(MFR0000096))
FREE PACKAGE(MF.MF8620.(MFR0000096))
FREE PACKAGE(MF.MF7330.(MFR0000096))
FREE PACKAGE(PC01.YPC0830.(IVN000002858A43FD4))
FREE PACKAGE(PC02.YPC0830.(IVN000002858A43FD4))
FREE PACKAGE(PC03.YPC0830.(IVN000002858A43FD4))
FREE PACKAGE(PC04.YPC0830.(IVN000002858A43FD4))
FREE PACKAGE(PC05.YPC0830.(IVN000002858A43FD4))
FREE PACKAGE(PC06.YPC0830.(IVN000002858A43FD4))
FREE PACKAGE(PC07.YPC0830.(IVN000002858A43FD4))
FREE PACKAGE(SV.SV5780.(WSSV000151))
FREE PACKAGE(WQ.WQ6010.(CUBE000067))
FREE PACKAGE(NL.NL7810.(BALR000059))
FREE PACKAGE(WC.WC8410.(OTXO000060))
FREE PACKAGE(SN.YSND008.(NOST00026858AEF9FA))
FREE PACKAGE(NI.YNICS01.(IPC000017558AED477))
FREE PACKAGE(WB.WB5570.(WS8B000362))
FREE PACKAGE(EX.EX5030.(EXPN000059))
FREE PACKAGE(SV.SV5740.(WSSV000207))
FREE PACKAGE(SV.SV5760.(WSSV000207))
FREE PACKAGE(TR.YTRHISP.(AITR000012568CED33))
FREE PACKAGE(WB.YWBMAS.(WS8B00031857D6B290))
FREE PACKAGE(LC.YLCTF03.(TFBM00002857EA8045))
FREE PACKAGE(LC.YLCTF02.(TFBM00002857ED0D2F))
FREE PACKAGE(WB.YWBSUM.(WS8B0003185804B0D3))
FREE PACKAGE(WB.YWB530.(WS8B000320))
FREE PACKAGE(ER.YERDINS.(EAMR000022588F62B1))
FREE PACKAGE(EC.YECCRAC.(SYNC0000205890AF4C))
FREE PACKAGE(PC01.YPC0520.(IVN000002858904D09))
FREE PACKAGE(PC02.YPC0520.(IVN000002858904D09))
FREE PACKAGE(PC03.YPC0520.(IVN000002858904D09))
FREE PACKAGE(PC04.YPC0520.(IVN000002858904D09))
FREE PACKAGE(PC05.YPC0520.(IVN000002858904D09))
FREE PACKAGE(PC06.YPC0520.(IVN000002858904D09))
FREE PACKAGE(PC07.YPC0520.(IVN000002858904D09))
FREE PACKAGE(WB.WB0950.(WSTS000046))
FREE PACKAGE(WB.WB0940.(WSTS000046))
FREE PACKAGE(WB.YWBWRK.(WS8B0003805893075A))
FREE PACKAGE(WB.YWBEBSM.(WSTS00004658931E1A))
FREE PACKAGE(LC.LC0511I.(TFBM000029589B10A0))
FREE PACKAGE(WB.WB1080.(TOFF000088))
FREE PACKAGE(WB.WB0630.(WSTS000046))
FREE PACKAGE(WB.WB0680.(WSTS000046))
FREE PACKAGE(WB.YWBMOV.(WS8B0003805899DEB4))
FREE PACKAGE(TR.YTREDBM.(AITR0000155603CD16))
FREE PACKAGE(VV.YVVZZ03.(VDPS00007357041232))
FREE PACKAGE(AU.YAU180D.(AURA00005057D6BBB4))
FREE PACKAGE(AU.YAU180I.(AURA00005057D6BBBE))
FREE PACKAGE(AU.YAU181D.(AURA00005057D6BBD6))
FREE PACKAGE(AU.YAU181I.(AURA00005057D6BBDA))
FREE PACKAGE(AU.YAU181S.(AURA00005057D6BBDE))
FREE PACKAGE(SN.YSND003.(NOST000268586EA49A))
FREE PACKAGE(SN.YSN110I.(NOST000268586EA52B))
FREE PACKAGE(SN.YSN110U.(NOST000268586EA531))
FREE PACKAGE(DE.YDE0021.(DE0000004358849D3C))
FREE PACKAGE(ER.YERDUPD.(EAMR000022588F76E9))
FREE PACKAGE(TR.TR0810.(AITR000031))
FREE PACKAGE(DE.DE0060.(DE00000043))
FREE PACKAGE(RI.RI0810.(RI00000016))
FREE PACKAGE(DE.DE0410.(DE00000043))
FREE PACKAGE(MF.YMFC113.(MFR000009758B2D4AC))
FREE PACKAGE(DE.DE0940.(DE00000043))
FREE PACKAGE(TN.YTN0100.(OTXO00006058BD4694))
FREE PACKAGE(VP.VP5310.(VIP0000022))
FREE PACKAGE(ER.YERDGET.(EAMR00002258A9A437))
FREE PACKAGE(WF.YWFM537.(WSSW00006958A48155))
FREE PACKAGE(ER.YERDCUR.(EAMR00002258AD7708))
FREE PACKAGE(WF.YWFCB02.(WSSW00006958AEA2AC))
FREE PACKAGE(AU.YAU180S.(AURA00005057D6BBC2))
FREE PACKAGE(AU.YAU190S.(AURA00005057D6BC0C))
FREE PACKAGE(AU.YAU191S.(AURA00005057D6BC24))
FREE PACKAGE(OE.YOE0610.(OE00000010578762EB))
FREE PACKAGE(TN.YTNBOPH.(OTXO00005857DFCC97))
FREE PACKAGE(TN.YTNW170.(OTXO00005857FE65F4))
FREE PACKAGE(WC.WC5010.(OTXO000060))
FREE PACKAGE(WC.WC8401.(OTXO000060))
FREE PACKAGE(ED.ED0950.(ED00000047))
FREE PACKAGE(WN.YWNOLOG.(FOND00002455FA71E6))
FREE PACKAGE(WB.YWBBODA.(WS8B00031857D6ADA9))
FREE PACKAGE(WB.YWBBOPR.(WS8B00038058930376))
FREE PACKAGE(WB.YWBIO.(WS8B000380589300E4))
FREE PACKAGE(SN.SN5920.(SAVS000001))
FREE PACKAGE(SN.SN5920.(SAVS000008))
FREE PACKAGE(SN.SN5920.(SAVS000006))
FREE PACKAGE(CD.CD2590.(UPDS000037))
FREE PACKAGE(TN.TN5030.(OTXO000054))
FREE PACKAGE(RT.RT5910.(TABS000134))
FREE PACKAGE(CZ.CZ7510.(APEN000040))
FREE PACKAGE(SV.SV0280.(WSSV000188))
FREE PACKAGE(WQ.WQ5950.(CUBE000081))
FREE PACKAGE(AP.YAPUTGK.(APEN0000405901FCB8))
FREE PACKAGE(WQ.WQ5950.(CUBE000100))
FREE PACKAGE(TN.TN7080.(OTXO000066))
FREE PACKAGE(TN.TN7080.(OTXO000075))
FREE PACKAGE(WQ.WQ5950.(CUBE000101))
FREE PACKAGE(WC.WC8170.(OTXO000066))
FREE PACKAGE(CZ.CZ5494.(ACP0000098))
FREE PACKAGE(CZ.CZ8010.(APEN000040))
FREE PACKAGE(SV.SV5770.(WSSV000188))
FREE PACKAGE(KA.KA0030.(KOAB000046))
FREE PACKAGE(WB.YWB5403.(A06M02510853AC4207))
FREE PACKAGE(WB.YWB5402.(A06M02510853AC420A))
FREE PACKAGE(SV.SV5750.(WSSV000188))
FREE PACKAGE(ER.YERPRI.(EAMR000028))
FREE PACKAGE(CZ.CZ7030.(APEN000014))
FREE PACKAGE(ER.YERBER.(EAMR000028))
FREE PACKAGE(ER.ER5080.(EAMR000028))
FREE PACKAGE(WI.YWI0087.(TOFF00009958EF63C0))
FREE PACKAGE(WB.YWB0083.(WSTS00005158EF63E7))
FREE PACKAGE(WB.YWB0082.(WSTS00005158FC9483))
FREE PACKAGE(WB.WB0840.(WSTS000051))
FREE PACKAGE(WB.WB0550.(WSTS000051))
FREE PACKAGE(WB.WB0970.(WSTS000051))
FREE PACKAGE(WB.WB0820.(WSTS000051))
FREE PACKAGE(WB.WB1100.(TOFF000099))
FREE PACKAGE(WB.WB1130.(WSTS000051))
FREE PACKAGE(WB.WB1290.(TOFF000099))
FREE PACKAGE(WB.WB5340.(TOFF000099))
FREE PACKAGE(SV.SV5940.(WSSV000207))
FREE PACKAGE(WB.YWB530.(WS8B000411))
FREE PACKAGE(WB.WB0600.(WSTS000046))
FREE PACKAGE(WB.WB0950.(WSTS000051))
FREE PACKAGE(WB.WB0630.(WSTS000051))
FREE PACKAGE(WB.WB0680.(WSTS000051))
FREE PACKAGE(WB.WB0530.(WSTS000051))
FREE PACKAGE(WB.WB0520.(WSTS000051))
FREE PACKAGE(WB.WB0940.(WSTS000051))
FREE PACKAGE(SV.SV5740.(WSSV000188))
FREE PACKAGE(SV.SV5760.(WSSV000188))
FREE PACKAGE(SV.SV0280.(WSSV000225))
FREE PACKAGE(MF.MF8620.(MFR0000110))
FREE PACKAGE(VV.YVVZZ28.(VDPS00010858F5FD2B))
FREE PACKAGE(WC.WC8410.(OTXO000066))
FREE PACKAGE(WB.WB5570.(WS8B000411))
FREE PACKAGE(NI.YNILBPL.(IPC000019258FF52EF))
FREE PACKAGE(DE.DE0420.(DE00000061))
FREE PACKAGE(DE.DE0030.(DE00000061))
FREE PACKAGE(BP.YBPMUT.(BPST000045588075D1))
FREE PACKAGE(VV.YVVZZ04.(VDPS0001035857FF0A))
FREE PACKAGE(CZ.YCZMLIM.(KLOM00006158D0FB62))
FREE PACKAGE(WB.YWBBOPR.(WS8B00040958FDB730))
FREE PACKAGE(DE.DE0810.(DE00000061))
FREE PACKAGE(WF.WF5410.(WSSW000085))
FREE PACKAGE(GM.GM0850.(GM00000132))
FREE PACKAGE(DE.DE0820.(DE00000061))
FREE PACKAGE(WC.WC5010.(OTXO000066))
FREE PACKAGE(WC.WC8401.(OTXO000066))
FREE PACKAGE(WC.WC8120.(OTXO000066))
FREE PACKAGE(WB.YWBEBSM.(WSTS00005158EF63FE))
FREE PACKAGE(TN.YTNUPD.(OTXO0000615832C7DD))
FREE PACKAGE(WQ.WQ5950.(CUBE000103))
FREE PACKAGE(WB.WB5280.(WSTS000051))
FREE PACKAGE(TN.TN7080.(OTXO000076))
FREE PACKAGE(WC.WC5010.(OTXO000073))
FREE PACKAGE(CZ.CZ7510.(APEN000046))
FREE PACKAGE(WB.YWBBOPR.(WS8B00044159256574))
FREE PACKAGE(TN.TN8900.(OTXO000066))
FREE PACKAGE(TN.YTN0160.(OTXO00005457A1E399))
FREE PACKAGE(CZ.YCZPABW.(GSER000152588F2812))
FREE PACKAGE(CZ.YCZJABW.(GSER0001525891A6AF))
FREE PACKAGE(HP1.AB0ORK.(HPSVP2AB0ORK))
FREE PACKAGE(HP3.AB0ORK.(HPSVP2AB0ORK))
FREE PACKAGE(TN.TN5015.(OTXO000036))
FREE PACKAGE(WC.WC8170.(OTXO000073))
FREE PACKAGE(DE.DE5130.(DE00000061))
FREE PACKAGE(WB.YWBSA4.(WS8B00040958DBA2D3))
FREE PACKAGE(WB.WB7441.(WSTS000035))
FREE PACKAGE(WB.WB7440.(WSTS000035))
FREE PACKAGE(WB.WB5570.(WS8B000441))
FREE PACKAGE(WB.WB5280.(WSTS000056))
FREE PACKAGE(ER.YERPRI.(EAMR000034))
FREE PACKAGE(TN.TN5004.(OTXO000060))
FREE PACKAGE(WB.YWB0082.(WSTS000056592FFC68))
FREE PACKAGE(WB.YWB0083.(WSTS000056592FFC72))
FREE PACKAGE(WB.WB0820.(WSTS000056))
FREE PACKAGE(WB.WB1130.(WSTS000056))
FREE PACKAGE(WB.WB0970.(WSTS000056))
FREE PACKAGE(WB.WB0840.(WSTS000056))
FREE PACKAGE(WB.WB0550.(WSTS000056))
FREE PACKAGE(WI.YWI0087.(TOFF000111593004B5))
FREE PACKAGE(TN.TN0530.(OTXO000066))
FREE PACKAGE(WB.WB0630.(WSTS000056))
FREE PACKAGE(WB.WB5270.(WSTS000051))
FREE PACKAGE(WB.WB5290.(WSTS000051))
FREE PACKAGE(ER.YERBER.(EAMR000034))
FREE PACKAGE(WC.WC8401.(OTXO000073))
FREE PACKAGE(WC.WC8120.(OTXO000073))
FREE PACKAGE(WB.WB0530.(WS8B000441))
FREE PACKAGE(WC.WC5010.(OTXO000077))
FREE PACKAGE(WB.YWBBOPR.(WS8B000465593D32E5))
FREE PACKAGE(WB.WB0680.(WSTS000056))
FREE PACKAGE(WB.WB0940.(WSTS000056))
FREE PACKAGE(WB.WB0950.(WSTS000056))
FREE PACKAGE(WB.WB0520.(WS8B000441))
FREE PACKAGE(WB.YWBEBSM.(WS8B000441592FF6DF))
FREE PACKAGE(WB.WB0060.(TOFF000099))
FREE PACKAGE(HPS.AANQUP.(HPSVP2AANQUP))
FREE PACKAGE(HP1.AANQUP.(HPSVP2AANQUP))
FREE PACKAGE(HP3.AANQUP.(HPSVP2AANQUP))
FREE PACKAGE(AT.AT0097.(IMS0000013))
FREE PACKAGE(WP.YWPL9P1.(DBH00000835872CF09))
FREE PACKAGE(WQ.YWQBERI.(CUBE0000815900BA99))
FREE PACKAGE(SV.SV7520.(WSSV000151))
FREE PACKAGE(HP1.AG23LZ.(HPSVP2AG23LZ))
FREE PACKAGE(HPS.AA00WM.(HPSVP2AA00WM))
FREE PACKAGE(HP1.AA00WM.(HPSVP2AA00WM))
FREE PACKAGE(HP3.AA00WM.(HPSVP2AA00WM))
FREE PACKAGE(HP3.AG23LZ.(HPSVP2AG23LZ))
FREE PACKAGE(CZ.YCZJABW.(GSER000181593D7A96))
FREE PACKAGE(WB.WB7230.(A06M025453))
FREE PACKAGE(ER.ER5080.(EAMR000034))
FREE PACKAGE(DE.DE0190.(DE00000061))
FREE PACKAGE(IT.YITGT.(TABS0000535613E056))
FREE PACKAGE(YY.YYITST.(A20Y00132952D3C3E7))
FREE PACKAGE(IT.YITD02.(A20Y001509542022D1))
FREE PACKAGE(IT.YITD01.(A20Y001509542022FD))
FREE PACKAGE(DP.DP0320.(DP00000065))
FREE PACKAGE(DI.YDIU016.(A06M02710553F33A2E))
FREE PACKAGE(DI.YDIU015.(A06M02710553F33A22))
FREE PACKAGE(DI.DI7510.(DI00000058))
FREE PACKAGE(RA.RA7240.(EGB0000025))
FREE PACKAGE(DI.DI5200.(DI00000047))
FREE PACKAGE(NL.NL7590.(BALR000005))
FREE PACKAGE(WQ.WQ6000.(CUBE000081))
FREE PACKAGE(SN.SN5903.(SAVS000001))
FREE PACKAGE(KS.YKSFTXT.(A14S002412533962A5CICS))
FREE PACKAGE(YY.YYUWI.(A19R0024915378C4EF))
FREE PACKAGE(VV.YVVZZ08.(VDPS00005256377304))
FREE PACKAGE(CZ.YCZT724.(ACP000005657711403))
FREE PACKAGE(CZ.YCZT726.(ACP0000056577D3D5C))
FREE PACKAGE(MF.MF8930.(MFR0000110))
FREE PACKAGE(CZ.CZ5494.(ACP0000111))
FREE PACKAGE(WP.YWPR4PX.(DBH00000835872A6ED))
FREE PACKAGE(YY.YYPRAD0.(A20Y001521))
FREE PACKAGE(ER.YERPRI.(EAMR000042))
FREE PACKAGE(WP.YWPR5PX.(DBH00000835872A738))
FREE PACKAGE(TN.YTN5012.(OTXO00005857DFCCA4))
FREE PACKAGE(TN.YTN5013.(OTXO0000585804AD84))
FREE PACKAGE(ER.ER8020.(EAMR000028))
FREE PACKAGE(TN.TN7004.(OTXO000066))
FREE PACKAGE(TN.TN5015.(WS8B000468))
FREE PACKAGE(WC.WC8170.(WS8B000468))
FREE PACKAGE(WB.WB8720.(WSTS000035))
FREE PACKAGE(WB.WB7030.(A06M025453))
FREE PACKAGE(WB.WB7020.(WSTS000039))
FREE PACKAGE(WB.WB7360.(A06M025453))
FREE PACKAGE(WB.WB5120.(WSTS000046))
FREE PACKAGE(CZ.CZ8020.(APEN000040))
FREE PACKAGE(CZ.CZ8010.(APEN000044))
FREE PACKAGE(CZ.CZ7510.(APEN000047))
FREE PACKAGE(VD.VDUTI41.(DSPV000040))
FREE PACKAGE(RT.YRT0002.(TABS0001305877A804))
FREE PACKAGE(SV.SV5770.(WSSV000195))
FREE PACKAGE(WQ.YWQ5601.(CUBE0000815900BC28))
FREE PACKAGE(SV.SV5150.(WSSV000188))
FREE PACKAGE(YY.YYWBMTU.(A06M02510853AC4233))
FREE PACKAGE(WF.WF0310.(WSSW000085))
FREE PACKAGE(WF.WF0320.(WSSW000085))
FREE PACKAGE(TN.TN5004.(WS8B000468))
FREE PACKAGE(WB.WB7441.(WS8B000468))
FREE PACKAGE(WB.WB7440.(WS8B000468))
FREE PACKAGE(FI.YFI0110.(A06M02733354301877))
FREE PACKAGE(WB.YWB5417.(A06M02510853AC422D))
FREE PACKAGE(WB.WB7770.(WSTS000035))
FREE PACKAGE(TN.TN5014.(OTXO000045))
FREE PACKAGE(RT.RT5120.(TABS000121))
FREE PACKAGE(EC.EC7204.(DLGR000039))
FREE PACKAGE(EC.EC7206.(DLGR000039))
FREE PACKAGE(MF.MF7010.(MFR0000110))
FREE PACKAGE(CZ.CZ6300.(KLOM000061))
FREE PACKAGE(SN.SN5001.(SAVS000001))
FREE PACKAGE(DE.DE5600.(DE00000061))
FREE PACKAGE(DE.DE7120.(DE00000061))
FREE PACKAGE(DE.DE5690.(DE00000061))
FREE PACKAGE(RT.RT5110.(TABS000121))
FREE PACKAGE(RT.RT5130.(TABS000121))
FREE PACKAGE(RT.RT5140.(TABS000121))
FREE PACKAGE(WB.WB7470.(A06M025453))
FREE PACKAGE(PC01.PC5060.(IVN0000030))
FREE PACKAGE(PC02.PC5060.(IVN0000030))
FREE PACKAGE(PC03.PC5060.(IVN0000030))
FREE PACKAGE(PC04.PC5060.(IVN0000030))
FREE PACKAGE(PC05.PC5060.(IVN0000030))
FREE PACKAGE(PC06.PC5060.(IVN0000030))
FREE PACKAGE(PC07.PC5060.(IVN0000030))
FREE PACKAGE(PC.PC5150.(IVN0000028))
FREE PACKAGE(TN.TN5016.(OTXO000066))
FREE PACKAGE(SV.SV0280.(WSSV000195))
FREE PACKAGE(ER.YERDCUR.(EAMR00002858FE0AE8))
FREE PACKAGE(BX.YBXADBR.(CLOS00014958A5761B))
FREE PACKAGE(SN.YSN100I.(NOST000268586EA4F0))
FREE PACKAGE(SN.YSND002.(NOST000268586EA494))
FREE PACKAGE(SN.YSN120.(NOST000268586EA53A))
FREE PACKAGE(SN.YSN187S.(NOST0002685889C70D))
FREE PACKAGE(SN.YSN187I.(NOST0002685891E82E))
FREE PACKAGE(SN.YSN110I.(SAVS00000159020504))
FREE PACKAGE(SN.YSND003.(SAVS00000159020C56))
FREE PACKAGE(WP.YWPR1QX.(DBH00000835872A5A5))
FREE PACKAGE(SN.YSN110U.(SAVS0000015902056A))
FREE PACKAGE(WB.WB0900.(WSTS000014))
FREE PACKAGE(WB.WB1120.(WSTS000014))
FREE PACKAGE(DI.YDITBTB.(DI000000425741C710))
FREE PACKAGE(VV.YVVZZ22.(VDPS00008757CEED15))
FREE PACKAGE(WB.WB1270.(TOFF000067))
FREE PACKAGE(WB.WB5040.(WS8B000319))
FREE PACKAGE(HP1.AN96RI.(HPSVP2AN96RI))
FREE PACKAGE(HP3.AN96RI.(HPSVP2AN96RI))
FREE PACKAGE(WB.WB0910.(A06M025453))
FREE PACKAGE(PC.YPC0570.(IVN000003058D9279F))
FREE PACKAGE(WF.WF0350.(WSSW000085))
FREE PACKAGE(YY.YYWBERX.(TOFF00011058F89C03))
FREE PACKAGE(WB.WB0620.(WSTS000046))
FREE PACKAGE(WB.WB0570.(WSTS000046))
FREE PACKAGE(WB.WB1050.(WSTS000046))
FREE PACKAGE(WB.WB1310.(WSTS000046))
FREE PACKAGE(WB.WB1020.(WSTS000046))
FREE PACKAGE(WB.WB1070.(WSTS000046))
FREE PACKAGE(ER.YERBER.(EAMR000042))
FREE PACKAGE(WQ.YWQBERI.(CUBE0001085961F18D))
FREE PACKAGE(CZ.YCZJABW.(GSER000185596765E3))
FREE PACKAGE(ER.ER5080.(EAMR000044))
FREE PACKAGE(ER.YERPRI.(EAMR000045))
FREE PACKAGE(WQ.YWQ4502.(CUBE0000815900BDEA))
FREE PACKAGE(SN.YSN111U.(SAVS00000159020621))
FREE PACKAGE(GM.GM7910.(GM00000132))
FREE PACKAGE(DE.DE0060.(DE00000061))
FREE PACKAGE(CZ.CZ8980.(KLOM000061))
FREE PACKAGE(WB.WB1100.(TOFF000111))
FREE PACKAGE(WB.WB5340.(TOFF000111))
FREE PACKAGE(WB.WB1290.(TOFF000111))
FREE PACKAGE(WI.YWI0087.(WS8B00046859510C2E))
FREE PACKAGE(WB.YWB0082.(WS8B00046859510BA3))
FREE PACKAGE(WB.YWB0083.(WS8B00046859510BA9))
FREE PACKAGE(WB.WB0820.(WS8B000468))
FREE PACKAGE(WB.WB0970.(WS8B000468))
FREE PACKAGE(WB.WB1130.(WS8B000468))
FREE PACKAGE(WB.WB0840.(WS8B000468))
FREE PACKAGE(WB.WB5290.(WS8B000468))
FREE PACKAGE(WB.WB5270.(WS8B000468))
FREE PACKAGE(WB.WB5570.(WS8B000468))
FREE PACKAGE(WC.WC5010.(WS8B000468))
FREE PACKAGE(WC.WC8401.(WS8B000468))
FREE PACKAGE(WC.WC8120.(WS8B000468))
FREE PACKAGE(WB.WB0550.(WS8B000468))
FREE PACKAGE(YX.YXWB021.(A06M02422851AF2DFE))
FREE PACKAGE(YY.YYWBPRI.(A06M02422851AF2E54))
FREE PACKAGE(YY.YYWBESM.(A06M02510853AC4238))
FREE PACKAGE(VV.YVVZZ24.(VDPS00008557E27B46))
FREE PACKAGE(DE.YDELSTO.(DE0000004358849D33))
FREE PACKAGE(MF.YMFC110.(MFR0000111590212E8))
FREE PACKAGE(DE.DE0430.(DE00000061))
FREE PACKAGE(DE.DE0440.(DE00000061))
FREE PACKAGE(LC.LC0511I.(TFBM00002658C94A27))
FREE PACKAGE(WF.WF0300.(WSSW000085))
FREE PACKAGE(WF.WF0280.(WSSW000085))
FREE PACKAGE(WP.YWPR3PX.(DBH00000835872A69A))
FREE PACKAGE(WB.YWBSA2.(WS8B00040958C964D3))
FREE PACKAGE(WB.WB0580.(WSTS000046))
FREE PACKAGE(DE.DE0100.(DE00000061))
FREE PACKAGE(DE.DE0050.(DE00000061))
FREE PACKAGE(KS.YKSISOC.(CSED00000554AD468E))
FREE PACKAGE(DE.DE0490.(DE00000061))
FREE PACKAGE(SV.SV5780.(WSSV000188))
FREE PACKAGE(SV.SV0950.(WSSV000208))
FREE PACKAGE(SV.SV5790.(WSSV000188))
FREE PACKAGE(SV.SV5940.(WSSV000195))
FREE PACKAGE(VD.YVD0721.(DSPV000040585AB2F8))
FREE PACKAGE(TN.YTNW100.(OTXO00006358569ED9))
FREE PACKAGE(TN.YTN0021.(OTXO00006658D8D017))
FREE PACKAGE(TN.YTNW170.(OTXO00006658DA8107))
FREE PACKAGE(TN.YTNSICH.(OTXO00006058AC46FF))
FREE PACKAGE(TN.YTNBOPH.(OTXO00006658C7C906))
FREE PACKAGE(WB.WB0990.(TOFF000099))
FREE PACKAGE(WB.WB0980.(TOFF000099))
FREE PACKAGE(VV.YVVZZ04.(VDPS00011259258C31))
FREE PACKAGE(TN.YTNUPD.(OTXO00007359300B05))
FREE PACKAGE(EQ.YEQKDGP.(GSER00010957DA8BC7))
FREE PACKAGE(VV.YVVZZ11.(VDPS0000995880ACAB))
FREE PACKAGE(WB.YWBDGP2.(WS8B0003805892FBD7))
FREE PACKAGE(WB.YWBDGP.(WS8B0003805892FBB2))
FREE PACKAGE(VV.YVVZZ03.(VDPS00010858CFFF3B))
FREE PACKAGE(VV.YVVZZ15.(VDPS0000995880ACF1))
FREE PACKAGE(VV.YVVZZ1R.(VDPS00009958933B9C))
FREE PACKAGE(WB.WB7520.(WSTS000023))
FREE PACKAGE(CZ.YCZT397.(GSER000027560ABEC3))
FREE PACKAGE(CZ.YCZT235.(GSER000027560AC600))
FREE PACKAGE(KR.YKRT511.(KAUF000015560AEBA9))
FREE PACKAGE(RM.YRMORGP.(PARS00004956A88B07))
FREE PACKAGE(CZ.YCZT385.(GSER00004756F975B2))
FREE PACKAGE(WB.WB7871.(WSTS000035))
FREE PACKAGE(WB.WB7040.(WSTS000035))
FREE PACKAGE(WB.WB7370.(WSTS000035))
FREE PACKAGE(WB.WB7390.(WSTS000035))
FREE PACKAGE(YY.YYWB101.(WS8B00031857D7E845))
FREE PACKAGE(WB.YWBITV.(TOFF00007657E100DB))
FREE PACKAGE(WQ.YWQEXCP.(CUBE00005657EA7F5E))
FREE PACKAGE(YY.YYDB2FK.(TOFF00007657E396C1))
FREE PACKAGE(WB.YWB551.(WS8B00028657977132))
FREE PACKAGE(CZ.YCZJ323.(GSER00010957B4790C))
FREE PACKAGE(VD.YVD0722.(DSPV000040585AB301))
FREE PACKAGE(WP.YWPRCPX.(DBH00000835872A3BB))
FREE PACKAGE(WP.YWPRBPX.(DBH00000835872A0E8))
FREE PACKAGE(WP.YWPRAPX.(DBH00000835872A114))
FREE PACKAGE(CZ.YCZJ431.(GSER00012257FD2866))
FREE PACKAGE(YX.YXWB116.(A06M02422851AF2D8E))
FREE PACKAGE(YX.YXWB231.(A06M02422851AF2E38))
FREE PACKAGE(YX.YXWB011.(A06M02422851AF2DED))
FREE PACKAGE(YY.YYFIKST.(A06M027333543018B2))
FREE PACKAGE(KX.YKXO002.(CRMA00397654311C87))
FREE PACKAGE(WB.WB7290.(A06M025453))
FREE PACKAGE(WB.WB7650.(A06M025453))
FREE PACKAGE(WB.WB7880.(A06M025453))
FREE PACKAGE(VD.VDINI01.(DSPV000001))
FREE PACKAGE(WB.WB7540.(WSTS000001))
FREE PACKAGE(VW.YVWB641.(WSTS000003552FE2D3))
FREE PACKAGE(WB.YWBBODA.(WS8B00040958CE50CE))
FREE PACKAGE(TR.YTRHISP.(AITR00003558D103CA))
FREE PACKAGE(EC.EC5130.(KLOM000061))
FREE PACKAGE(DE.YDE0021.(DE0000006158D9002C))
FREE PACKAGE(WF.YWFCB02.(WSSW00008558E39EB2))
FREE PACKAGE(WF.YWFM537.(WSSW00008558E39EB7))
FREE PACKAGE(CD.CD2590.(UPDS000043))
FREE PACKAGE(TN.YTNOTF.(OTXO00007158F7898E))
FREE PACKAGE(WB.WB0830.(WSTS000046))
FREE PACKAGE(WB.WB1340.(WSTS000046))
FREE PACKAGE(WB.WB0660.(WSTS000046))
FREE PACKAGE(VV.YVVZZ12.(VDPS000099589B48CE))
FREE PACKAGE(VV.YVVZZ10.(VDPS000099589B784A))
FREE PACKAGE(WB.YWBIO.(WS8B00040958C6898F))
FREE PACKAGE(ED.ED0950.(ED00000052))
FREE PACKAGE(RI.RI0810.(RI00000019))
FREE PACKAGE(WB.WB7561.(WSTS000051))
FREE PACKAGE(WB.WB7560.(WSTS000051))
FREE PACKAGE(CZ.CZ5280.(KLOM000061))
FREE PACKAGE(CZ.CZ6400.(GSER000162))
FREE PACKAGE(CZ.CZ6500.(GSER000162))
FREE PACKAGE(DE.DE0940.(DE00000061))
FREE PACKAGE(DE.DE0860.(DE00000061))
FREE PACKAGE(DE.DE0400.(DE00000061))
FREE PACKAGE(WF.YWFSWC.(WSSW000085))
FREE PACKAGE(CZ.CZ5150.(KLOM000061))
FREE PACKAGE(WB.YWB530.(WS8B000441))
FREE PACKAGE(WF.WF5410.(WSSW000090))
FREE PACKAGE(WB.WB0600.(WSTS000056))
FREE PACKAGE(GM.GM0850.(GM00000144))
FREE PACKAGE(DE.DE0810.(DE00000063))
FREE PACKAGE(DE.DE0030.(DE00000063))
FREE PACKAGE(WQ.WQ5950.(CUBE000083))
FREE PACKAGE(WB.YWBEBSM.(WS8B00046859510C08))
FREE PACKAGE(WB.YWBBOPR.(WS8B000468595251AE))
FREE PACKAGE(WB.WB0680.(WS8B000468))
FREE PACKAGE(WB.WB0940.(WS8B000468))
FREE PACKAGE(WB.WB5280.(WS8B000468))
FREE PACKAGE(WB.WB0630.(WS8B000468))
FREE PACKAGE(TN.TN0530.(WS8B000468))
FREE PACKAGE(WB.WB0530.(WS8B000468))
FREE PACKAGE(CZ.YCZT328.(GSER00009056AE4211))
FREE PACKAGE(WB.WB7270.(WSTS000035))
FREE PACKAGE(VD.VDREC00.(DSPV000030))
FREE PACKAGE(WB.WB7730.(WSTS000046))
FREE PACKAGE(WC.WC8410.(OTXO000073))
FREE PACKAGE(DI.YDIT015.(DI00000042571F1C16))
FREE PACKAGE(DE.DE0090.(DE00000061))
FREE PACKAGE(GM.YGMSTEU.(GM0000003655EEF7FB))
FREE PACKAGE(TN.YTN0210.(OTXO000045570CE08E))
FREE PACKAGE(WP.YWPR1PX.(DBH00000835872A4ED))
FREE PACKAGE(WB.YWBCTA.(WS8B00040958CE5AAC))
FREE PACKAGE(WB.YWBSUM.(WS8B00040958C69AFA))
FREE PACKAGE(WB.WB0960.(WSTS000014))
FREE PACKAGE(SN.YSN100S.(NOST000268586EA518))
FREE PACKAGE(SN.YSN183I.(NOST000268586EA543))
FREE PACKAGE(WP.YWPU1P5.(DBH0000083587689E2))
FREE PACKAGE(WP.YWPR2PX.(DBH00000835872A647))
FREE PACKAGE(WF.YWF64CA.(WSSW00008558CEB299))
FREE PACKAGE(SN.YSND007.(SAVS00000159020CA9))
FREE PACKAGE(SN.YSND008.(SAVS00000159020CEE))
FREE PACKAGE(SN.YSN202I.(SAVS00000159020731))
FREE PACKAGE(SN.YSND010.(SAVS0000015908BC89))
FREE PACKAGE(NI.YNIPREU.(IPC00001235677F09E))
FREE PACKAGE(VV.YVVZZ17.(VDPS00007757694F83))
FREE PACKAGE(VV.YVVZZ14.(VDPS00007356F13EBD))
FREE PACKAGE(WB.WB7410.(WSTS000035))
FREE PACKAGE(WB.WB7280.(WSTS000035))
FREE PACKAGE(WC.WC7220.(OTXO000045))
FREE PACKAGE(WB.WB8650.(TOFF000059))
FREE PACKAGE(VV.YVVZZ23.(VDPS00008557F15BB7))
FREE PACKAGE(NI.YNIPACU.(IPC00001415784E6AB))
FREE PACKAGE(NI01.YNIPACU.(IPC00001415784E6AB))
FREE PACKAGE(NI02.YNIPACU.(IPC00001415784E6AB))
FREE PACKAGE(PC.PC7030.(IVN0000028))
FREE PACKAGE(PC.PC8000.(IVN0000028))
FREE PACKAGE(WP.YWPRDPX.(DBH00000835872A45F))
FREE PACKAGE(VV.YVVZZ20.(VDPS00009057FCFF37))
FREE PACKAGE(WC.WC7280.(OTXO000058))
FREE PACKAGE(WC.WC7240.(A06M027069))
FREE PACKAGE(WC.WC7530.(A06M027069))
FREE PACKAGE(WC.WC7310.(A06M027069))
FREE PACKAGE(WC.WC7320.(A06M027069))
FREE PACKAGE(WU.YWUGBUB.(TU0000001154AE45DF))
FREE PACKAGE(WC.WC7260.(OTXO000008))
FREE PACKAGE(ER.YERDINS.(EAMR00002858D1311B))
FREE PACKAGE(NI.YNICL01.(IPC000019258D0EAF8))
FREE PACKAGE(UU.UU5170.(RS20000072))
FREE PACKAGE(NI.YNICS01.(IPC000019258DA340A))
FREE PACKAGE(MF.MF7550.(MFR0000110))
FREE PACKAGE(MF.MF7901.(MFR0000110))
FREE PACKAGE(MF.MF7230.(MFR0000110))
FREE PACKAGE(VV.YVVZZQR.(VDPS00010858F4F5CB))
FREE PACKAGE(VV.YVVZZ19.(VDPS00010858F51A6F))
FREE PACKAGE(VV.YVVZZ27.(VDPS00010858EF71CF))
FREE PACKAGE(VV.YVVZZ18.(VDPS0000995880B2BF))
FREE PACKAGE(PC.PC5090.(IVN0000028))
FREE PACKAGE(YY.YYWBVIN.(WSTS000046589071B4))
FREE PACKAGE(WB.WB7420.(WSTS000046))
FREE PACKAGE(VV.YVVZZGR.(VDPS00009958933B61))
FREE PACKAGE(WB.WB5090.(WSTS000046))
FREE PACKAGE(WC.WC7500.(OTXO000060))
FREE PACKAGE(WC.WC5050.(OTXO000060))
FREE PACKAGE(NL.NL7810.(BALR000067))
FREE PACKAGE(VV.YVVZZ29.(VDPS0001085900B473))
FREE PACKAGE(WB.WB5260.(WSTS000051))
FREE PACKAGE(SN.YSN111I.(SAVS000001590205C6))
FREE PACKAGE(SN.YSND012.(SAVS00000159020DCD))
FREE PACKAGE(SN.YSND013.(SAVS00000159020E14))
FREE PACKAGE(WQ.WQ6010.(CUBE000081))
FREE PACKAGE(SN.SN5003.(SAVS000001))
FREE PACKAGE(SN.SN5004.(SAVS000001))
FREE PACKAGE(SN.SN5006.(SAVS000001))
FREE PACKAGE(SV.SV5600.(WSSV000188))
FREE PACKAGE(CZ.CZ5190.(LOMN000029))
FREE PACKAGE(TN.TN5030.(OTXO000074))
FREE PACKAGE(AP.YAPUTGK.(APEN000046591DA6B5))
FREE PACKAGE(SV.SV5750.(WSSV000195))
FREE PACKAGE(SV.SV5760.(WSSV000195))
FREE PACKAGE(SV.SV5740.(WSSV000195))
FREE PACKAGE(MF.MF8620.(MFR0000127))
FREE PACKAGE(VV.YVVZZ28.(VDPS00011259247724))
FREE PACKAGE(TN.TN7080.(OTXO000078))
FREE PACKAGE(VV.YVVZZ16.(VDPS00007356FD77D1))
FREE PACKAGE(RT.YRTKOMB.(A20Y001346532AA546))
FREE PACKAGE(WB.WB0510.(WSTS000046))
FREE PACKAGE(DE.DE0830.(DE00000061))
FREE PACKAGE(DE.DE0410.(DE00000061))
FREE PACKAGE(DE.DE0420.(DE00000063))
FREE PACKAGE(TN.YTN0200.(OTXO000054577CC9B6))
FREE PACKAGE(TN.YTN0170.(OTXO00005457A1E39F))
FREE PACKAGE(EC.YECCRAC.(SYNC00002558DA4B2A))
FREE PACKAGE(WQ.YWQ4501.(CUBE00005657F65A9E))
FREE PACKAGE(FI.YFI0120.(A06M02733354301880))
FREE PACKAGE(PC01.YPC0830.(IVN000003058D930ED))
FREE PACKAGE(PC02.YPC0830.(IVN000003058D930ED))
FREE PACKAGE(PC03.YPC0830.(IVN000003058D930ED))
FREE PACKAGE(PC04.YPC0830.(IVN000003058D930ED))
FREE PACKAGE(PC05.YPC0830.(IVN000003058D930ED))
FREE PACKAGE(PC06.YPC0830.(IVN000003058D930ED))
FREE PACKAGE(PC07.YPC0830.(IVN000003058D930ED))
FREE PACKAGE(WB.WB1110.(WSTS000046))
FREE PACKAGE(ER.YERDGET.(EAMR000028590F474F))
FREE PACKAGE(DE.DE0820.(DE00000063))
FREE PACKAGE(TN.YTN0041.(OTXO000054577A2CD6))
FREE PACKAGE(WB.WB0920.(WSTS000014))
FREE PACKAGE(NL.NL7750.(BALR000023))
FREE PACKAGE(YY.YYWBERR.(A06M02422851AF2E43))
FREE PACKAGE(WN.YWNOLOG.(FOND00008558D0FF8B))
FREE PACKAGE(TN.YTN0100.(OTXO00006658D78025))
FREE PACKAGE(PC01.YPC0520.(IVN000003058D92770))
FREE PACKAGE(PC02.YPC0520.(IVN000003058D92770))
FREE PACKAGE(PC03.YPC0520.(IVN000003058D92770))
FREE PACKAGE(PC04.YPC0520.(IVN000003058D92770))
FREE PACKAGE(PC05.YPC0520.(IVN000003058D92770))
FREE PACKAGE(PC06.YPC0520.(IVN000003058D92770))
FREE PACKAGE(PC07.YPC0520.(IVN000003058D92770))
FREE PACKAGE(NL.NL7310.(BALR000067))
FREE PACKAGE(WB.WB0870.(WSTS000046))
FREE PACKAGE(WB.WB0950.(WS8B000468))
FREE PACKAGE(WB.WB0520.(WS8B000468))
FREE PACKAGE(CZ.YCZT435.(BEWI000004560A927D))
FREE PACKAGE(CZ.YCZM435.(BEWI00001057FE35BE))
FREE PACKAGE(VV.YVVZZ13.(VDPS00009958887C3E))
FREE PACKAGE(WB.WB1090.(TOFF000088))
FREE PACKAGE(WB.YWBMAS.(WS8B00040958C68B0C))
FREE PACKAGE(WB.YWBWRK.(WS8B00040958C69CFF))
FREE PACKAGE(WB.WB1080.(TOFF000099))
FREE PACKAGE(NI.YNILBPL.(IPC0000199591B2776))
FREE PACKAGE(CD.YCDOGEM.(KUBE000026))
FREE PACKAGE(WP.YWPL4P1.(DBH00000835872CDB3))
FREE PACKAGE(WP.YWPL3P1.(DBH00000835872D08A))
FREE PACKAGE(TN.TN7004.(OTXO000070))
FREE PACKAGE(SN.SN5902.(SAVS000005))
FREE PACKAGE(SN.SN5910.(SAVS000005))
FREE PACKAGE(SN.SN5920.(SAVS000005))
FREE PACKAGE(VD.VDDBM15.(DSPV000041))
FREE PACKAGE(VV.YVVZZ05.(VDPS00010858D375E2))
FREE PACKAGE(VV.YVVZZ3R.(VDPS00009958933BE0))
FREE PACKAGE(YX.YXA171C.(TOFF00010858D2AB30))
FREE PACKAGE(NTA1P.CZA0215.(A02E00054455928C16))
FREE PACKAGE(CD.YCDOGEC.(KUBE000026))
FREE PACKAGE(WB.WB7400.(WSTS000035))
FREE PACKAGE(VD.VDDBM01.(DSPV000030))
FREE PACKAGE(WP.YWPL5P1.(DBH00000835872CDF6))
FREE PACKAGE(WP.YWPL8P1.(DBH00000835872CECA))
FREE PACKAGE(VD.VDDBM04.(A14S002541))
FREE PACKAGE(VD.VDGLH00.(DSPV000040))
FREE PACKAGE(NZ.NZDBM83.(ZVBI000016))
FREE PACKAGE(WB.WB8010.(TOFF000088))
FREE PACKAGE(KR.YKRT385.(VEFO000008560AE85C))
FREE PACKAGE(KR.YKRT397.(VEFO000008560AE862))
FREE PACKAGE(WB.WB7381.(A06M025453))
FREE PACKAGE(WB.WB7380.(A06M025453))
FREE PACKAGE(WB.WB7340.(WSTS000046))
FREE PACKAGE(WB.WB7320.(WSTS000046))
FREE PACKAGE(WB.WB7330.(WSTS000046))
FREE PACKAGE(NTA1P.CZA0213.(A02E00056858886BDA))
FREE PACKAGE(WB.YWBEBSM.(WSTS000055595220FAMVS))
FREE PACKAGE(WB.WB0680.(WSTS000055))
FREE PACKAGE(WB.WB0630.(WSTS000055))
FREE PACKAGE(HP1.ZDIYURI.(HPSVP2ZDIYURI))
FREE PACKAGE(HP3.ZDIYURI.(HPSVP2ZDIYURI))
FREE PACKAGE(SV.SV5640.(WSSV000196))
FREE PACKAGE(TN.YTNUPD.(OTXO00007059791B5C))
FREE PACKAGE(SV.SV5760.(WSSV000196))
FREE PACKAGE(SN.SN5000.(SAVS000005))
FREE PACKAGE(SV.SV5640.(WSSV000239))
FREE PACKAGE(WB.WB0970.(WSTS000055))
FREE PACKAGE(FC.FC0050.(KLOM000062))
FREE PACKAGE(WB.WB5340.(TOFF000109))
FREE PACKAGE(RT.YRT075M.(RFT000001556F2A505))
FREE PACKAGE(WC.WC5010.(OTXO000070))
FREE PACKAGE(WC.WC8401.(OTXO000070))
FREE PACKAGE(WB.WB5570.(WS8B000444))
FREE PACKAGE(WB.WB1290.(TOFF000109))
FREE PACKAGE(WB.WB1100.(TOFF000109))
FREE PACKAGE(WB.WB1130.(WSTS000055))
FREE PACKAGE(WB.WB0840.(WSTS000055))
FREE PACKAGE(WB.WB0680.(WS8B000479))
FREE PACKAGE(WB.WB0630.(WS8B000479))
FREE PACKAGE(WB.YWB530.(WS8B000443))
FREE PACKAGE(WB.YWB5427.(WSTS000055594BF219MVS))
FREE PACKAGE(HP1.AAAERK.(HPSVP2AAAERK))
FREE PACKAGE(HP3.AAAERK.(HPSVP2AAAERK))
FREE PACKAGE(HP1.AN97RI.(HPSVP2AN97RI))
FREE PACKAGE(HP3.AN97RI.(HPSVP2AN97RI))
FREE PACKAGE(WB.YWB5425.(WSTS000055594BF204MVS))
FREE PACKAGE(WB.YWBSA4.(WS8B0004425958EE28MVS))
FREE PACKAGE(WB.YWB0083.(WSTS000055596E3C20MVS))
FREE PACKAGE(HPS.ADWVQZ.(HPSVP2ADWVQZ))
FREE PACKAGE(HP1.ADWVQZ.(HPSVP2ADWVQZ))
FREE PACKAGE(HP3.ADWVQZ.(HPSVP2ADWVQZ))
FREE PACKAGE(DP.DP0320.(DP00000067))
FREE PACKAGE(HP1.RWBR032.(HPSVP1RWBR032))
FREE PACKAGE(HP3.RWBR032.(HPSVP1RWBR032))
FREE PACKAGE(SN.SN5903.(SAVS000005))
FREE PACKAGE(WQ.WQ6000.(CUBE000092))
FREE PACKAGE(HP1.ABZJLS.(HPSVP2ABZJLS))
FREE PACKAGE(HP1.ACEQL4.(HPSVP2ACEQL4))
FREE PACKAGE(HP3.ACEQL4.(HPSVP2ACEQL4))
FREE PACKAGE(HP3.ABZJLS.(HPSVP2ABZJLS))
FREE PACKAGE(WB.WB5570.(WS8I000307))
FREE PACKAGE(WQ.YWQ4502.(CUBE000092595E40BC))
FREE PACKAGE(WB.WB0840.(WS8I000307))
FREE PACKAGE(WB.WB1130.(WS8I000307))
FREE PACKAGE(WB.WB1100.(WS8I000307))
FREE PACKAGE(WB.WB1290.(WS8I000307))
FREE PACKAGE(WB.WB5340.(WS8I000307))
FREE PACKAGE(WB.WB0630.(WS8I000307))
FREE PACKAGE(WB.WB0680.(WS8I000307))
FREE PACKAGE(WB.YWB530.(WS8I000307))
FREE PACKAGE(WC.WC8170.(OTXO000070))
FREE PACKAGE(WB.WB5120.(WSTS000055))
FREE PACKAGE(WB.WB7020.(WSTS000055))
FREE PACKAGE(IT.IT5001.(RFT0000015))
FREE PACKAGE(WB.YWB0083.(WS8B00049859A7FB84MVS))
FREE PACKAGE(SV.SV5770.(WSSV000196))
FREE PACKAGE(RT.RT5210.(RFT0000015))
FREE PACKAGE(RT.RT5020.(TABS000121))
FREE PACKAGE(RT.RT5060.(TABS000121))
FREE PACKAGE(RT.RT5170.(TABS000121))
FREE PACKAGE(RT.RT5160.(TABS000121))
FREE PACKAGE(RT.RT5090.(TABS000121))
FREE PACKAGE(SN.YSNB002.(SAVS0000055965F526))
FREE PACKAGE(SN.YSND010.(SAVS0000055978AA6A))
FREE PACKAGE(AP.YAPUTGK.(APEN000042594BAB6AMVS))
FREE PACKAGE(SN.SN5000.(SAVS000014))
FREE PACKAGE(SV.SV5740.(WSSV000196))
FREE PACKAGE(YY.YYWBERX.(TOFF0001095953C073MVS))
FREE PACKAGE(WB.WB0630.(WS8B000493))
FREE PACKAGE(WB.WB1290.(WS8B000493))
FREE PACKAGE(WB.WB0840.(WS8B000493))
FREE PACKAGE(WB.WB0680.(WS8B000493))
FREE PACKAGE(WB.WB1130.(WS8B000493))
FREE PACKAGE(WB.WB1100.(WS8B000493))
FREE PACKAGE(WB.WB5570.(WS8B000493))
FREE PACKAGE(WB.YWB530.(WS8B000493))
FREE PACKAGE(WB.WB5340.(WS8B000493))
FREE PACKAGE(RT.YRT0006.(RFT000001556F2A499))
FREE PACKAGE(WF.WF0300.(WSSW000089))
FREE PACKAGE(SV.SV5750.(WSSV000196))
FREE PACKAGE(GM.GM0850.(GM00000145))
FREE PACKAGE(RT.YRT0007.(RFT000000956A4A858))
FREE PACKAGE(YX.YXA171C.(TOFF0001095966040A))
FREE PACKAGE(RT.RT5100.(TABS000121))
FREE PACKAGE(WC.WC5050.(OTXO000070))
FREE PACKAGE(WC.WC7220.(OTXO000070))
FREE PACKAGE(WC.WC7240.(OTXO000070))
FREE PACKAGE(WC.WC7260.(OTXO000070))
FREE PACKAGE(WC.WC7530.(OTXO000070))
FREE PACKAGE(WC.WC7310.(OTXO000070))
FREE PACKAGE(WC.WC7320.(OTXO000070))
FREE PACKAGE(WC.WC7500.(OTXO000070))
FREE PACKAGE(SN.SN5004.(SAVS000005))
FREE PACKAGE(SN.SN5005.(SAVS000005))
FREE PACKAGE(SN.SN5901.(SAVS000005))
FREE PACKAGE(SN.SN5006.(SAVS000005))
FREE PACKAGE(SN.YSND013.(SAVS0000055978AA76))
FREE PACKAGE(SN.YSND012.(SAVS000005597A035F))
FREE PACKAGE(SN.SN5100.(SAVS000005))
FREE PACKAGE(WF.YWF64CA.(WSSW000089594F9457))
FREE PACKAGE(WC.WC8410.(OTXO000070))
FREE PACKAGE(WC.WC8401.(WS8I000307))
FREE PACKAGE(WC.WC5010.(WS8I000307))
FREE PACKAGE(MF.MF8620.(MFR0000124))
FREE PACKAGE(WF.WF0280.(WSSW000089))
FREE PACKAGE(SV.SV5760.(WSSV000240))
FREE PACKAGE(IT.YIT0022.(A20Y001569547AFE2B))
FREE PACKAGE(IT.IT0010.(TABS000131))
FREE PACKAGE(RT.YRT0008.(RFT000000956A4A893))
FREE PACKAGE(RT.RT0100.(RFT0000012))
FREE PACKAGE(RT.RT0200.(TABS000130))
FREE PACKAGE(BP.YBPMUT.(BPST000079594A969EMVS))
FREE PACKAGE(AT.AT0099.(ACS00000115891FA54))
FREE PACKAGE(AT.AT0099.(ACS0000015595529B8))
FREE PACKAGE(SN.YSNI003.(SAVS0000055960D01A))
FREE PACKAGE(WQ.WQ5950.(CUBE000092))
FREE PACKAGE(IT.IT8481.(TABS000160))
FREE PACKAGE(WF.YWFSWC.(WSSW000089))
FREE PACKAGE(WF.WF5410.(WSSW000089))
FREE PACKAGE(SN.YSNA005.(SAVS000005597F4F58))
FREE PACKAGE(SN.SN0200.(SAVS000005))
FREE PACKAGE(TN.YTNUPD.(OTXO00008259906C81))
FREE PACKAGE(RT.RT5910.(TABS000145))
FREE PACKAGE(TN.TN7080.(OTXO000070))
FREE PACKAGE(WB.WB7520.(WSTS000055))
FREE PACKAGE(WQ.WQ5950.(CUBE000112))
FREE PACKAGE(SN.SN5902.(SAVS000013))
FREE PACKAGE(SN.SN5920.(SAVS000013))
FREE PACKAGE(WB.WB7440.(WSTS000055))
FREE PACKAGE(IT.IT5503.(RFT0000015))
FREE PACKAGE(RT.RT8401.(A20Y001508))
FREE PACKAGE(WF.YWFSWC.(WSSW000086))
FREE PACKAGE(HP1.RWBK029.(HPSVP2RWBK029))
FREE PACKAGE(HP3.RWBK029.(HPSVP2RWBK029))
FREE PACKAGE(SN.SN5000.(SAVS000013))
FREE PACKAGE(DI.YDIU015.(DI0000006459535F3EMVS))
FREE PACKAGE(DI.YDIU016.(DI0000006459535FDDMVS))
FREE PACKAGE(DP.DP0320.(DP00000072))
FREE PACKAGE(CZ.CZ5991.(GSER000200))
FREE PACKAGE(SN.SN5910.(SAVS000013))
FREE PACKAGE(SN.SN5902.(SAVS000016))
FREE PACKAGE(SN.SN5920.(SAVS000016))
FREE PACKAGE(WP.YWPL9P1.(DBH00000965935C01FMVS))
FREE PACKAGE(HP1.RWBR009.(HPSVP2RWBR009))
FREE PACKAGE(HP3.RWBR009.(HPSVP2RWBR009))
FREE PACKAGE(HP1.AO2QRK.(HPSVP2AO2QRK))
FREE PACKAGE(HP3.AO2QRK.(HPSVP2AO2QRK))
FREE PACKAGE(RT.YRT0002.(TABS000163599ACDD3))
FREE PACKAGE(VV.YVVZZ09.(VDPS00011459426A6CMVS))
FREE PACKAGE(WB.YWB5419.(WSTS000055594BF2C6MVS))
FREE PACKAGE(WB.WB0910.(WSTS000055))
FREE PACKAGE(DE.DE5130.(DE00000066))
FREE PACKAGE(SV.SV5770.(WSSV000199))
FREE PACKAGE(WF.WF0350.(WSSW000089))
FREE PACKAGE(WF.WF0310.(WSSW000089))
FREE PACKAGE(WF.WF0320.(WSSW000089))
FREE PACKAGE(HP1.ACA0RK.(HPSVP2ACA0RK))
FREE PACKAGE(HP3.ACA0RK.(HPSVP2ACA0RK))
FREE PACKAGE(WF.WF0280.(WSSW000086))
FREE PACKAGE(WF.WF0300.(WSSW000086))
FREE PACKAGE(WQ.YWQBERI.(CUBE000092595E3A2E))
FREE PACKAGE(WF.WF5410.(WSSW000086))
FREE PACKAGE(WF.YWF64CA.(WSSW00008659B00DFB))
FREE PACKAGE(WF.YWFSWC.(WSSW000104))
FREE PACKAGE(WF.YWFCB02.(WSSW000089594FBA69MVS))
FREE PACKAGE(WF.YWFM537.(WSSW000089594FB758MVS))
FREE PACKAGE(SN.SN5001.(SAVS000013))
FREE PACKAGE(DP.DP0320.(DP00000076))
FREE PACKAGE(OE.YOE2BP1.(A12M0057985263A8B2))
FREE PACKAGE(WB.YWBSA4.(WS8B00047659B12272MVS))
FREE PACKAGE(NL.NL7590.(BALR000073))
FREE PACKAGE(WQ.WQ6000.(CUBE000114))
FREE PACKAGE(BP.YBPMUT.(BPST0000805926ACAC))
FREE PACKAGE(TN.YTN0160.(OTXO0000705965FE8DMVS))
FREE PACKAGE(WP.YWPR4PX.(DBH00000965935AA4BMVS))
FREE PACKAGE(MF.MF8940.(MFR0000110))
FREE PACKAGE(MF.MF8930.(MFR0000124))
FREE PACKAGE(WP.YWPR5PX.(DBH00000965935AB22MVS))
FREE PACKAGE(RT.YRT0006.(TABS000163599ACE06))
FREE PACKAGE(RB.YRBUXY1.(RBK0000001594291B9))
FREE PACKAGE(VV.YVVZZ08.(VDPS000114594269CDMVS))
FREE PACKAGE(RT.YRT0007.(TABS000163599ACE23))
FREE PACKAGE(RT.RT0200.(TABS000163))
FREE PACKAGE(CZ.CZ5494.(ACP0000114))
FREE PACKAGE(TN.TN7004.(OTXO000082))
FREE PACKAGE(WC.WC8170.(OTXO000085))
FREE PACKAGE(TN.TN5015.(OTXO000070))
FREE PACKAGE(TN.YTN5012.(OTXO000070594BD57CMVS))
FREE PACKAGE(TN.YTN5013.(OTXO000070594BD582MVS))
FREE PACKAGE(WB.WB7020.(WSTS000058))
FREE PACKAGE(RT.RT5910.(TABS000163))
FREE PACKAGE(MF.MF8810.(MFR0000132))
FREE PACKAGE(IT.IT5002.(RFT0000015))
FREE PACKAGE(CZ.CZ8020.(APEN000042))
FREE PACKAGE(CZ.CZ8010.(APEN000042))
FREE PACKAGE(BP.BP9060.(BPST000045))
FREE PACKAGE(WQ.YWQ5601.(CUBE000092595E40C8))
FREE PACKAGE(WB.WB0060.(TOFF000109))
FREE PACKAGE(ER.ER8020.(EAMR000035))
FREE PACKAGE(SV.SV5750.(WSSV000199))
FREE PACKAGE(WB.YWB0082.(WSTS00005559660E59MVS))
FREE PACKAGE(CD.CD8130.(CIFS000202))
FREE PACKAGE(WP.YWPL1W1.(A06M024666527F73FE))
FREE PACKAGE(MF.MF7010.(MFR0000124))
FREE PACKAGE(WB.YWBCTA.(WS8B0004425959F984))
FREE PACKAGE(TN.TN0530.(OTXO000070))
FREE PACKAGE(SV.SV0280.(WSSV000196))
FREE PACKAGE(TN.YTN0041.(OTXO0000705965FE73))
FREE PACKAGE(IT.IT5010.(RFT0000015))
FREE PACKAGE(IT.IT5003.(RFT0000015))
FREE PACKAGE(IT.YITD00.(A20Y001509542023A5))
FREE PACKAGE(DE.DE5600.(DE00000066))
FREE PACKAGE(CZ.CZ6300.(KLOM000062))
FREE PACKAGE(TN.YTN0170.(OTXO0000705965FE9DMVS))
FREE PACKAGE(DE.DE0830.(DE00000066))
FREE PACKAGE(WB.YWBSA2.(WS8B00044259752FC0MVS))
FREE PACKAGE(VV.YVVZZ30.(VDPS00011459426994MVS))
FREE PACKAGE(PC01.PC5060.(IVN0000032))
FREE PACKAGE(PC02.PC5060.(IVN0000032))
FREE PACKAGE(PC03.PC5060.(IVN0000032))
FREE PACKAGE(PC04.PC5060.(IVN0000032))
FREE PACKAGE(PC05.PC5060.(IVN0000032))
FREE PACKAGE(PC06.PC5060.(IVN0000032))
FREE PACKAGE(PC07.PC5060.(IVN0000032))
FREE PACKAGE(DE.DE7120.(DE00000066))
FREE PACKAGE(TN.TN5014.(OTXO000070))
FREE PACKAGE(TN.TN5004.(OTXO000070))
FREE PACKAGE(TN.TN5016.(OTXO000070))
FREE PACKAGE(VV.YVVZZ19.(VDPS00011459600648MVS))
FREE PACKAGE(VV.YVVZZ16.(VDPS00011459426A5DMVS))
FREE PACKAGE(SV.SV5640.(WSSV000240))
FREE PACKAGE(SV.SV5740.(WSSV000199))
FREE PACKAGE(SV.SV5760.(WSSV000199))
FREE PACKAGE(LC.LC0511I.(TFBM000030595A0ED9))
FREE PACKAGE(MF.YMFC110.(MFR000012559785D3C))
FREE PACKAGE(EQ.YEQKDGP.(GSER0001775933E982))
FREE PACKAGE(WP.YWPL4P1.(DBH00000965935BE8EMVS))
FREE PACKAGE(WP.YWPRBPX.(DBH00000965935A7D3MVS))
FREE PACKAGE(WP.YWPL3P1.(DBH00000965935B6F3MVS))
FREE PACKAGE(VV.YVVZZ22.(VDPS0001145947F743MVS))
FREE PACKAGE(WQ.YWQBERI.(CUBE00011159ECC4D5))
FREE PACKAGE(WC.WC5010.(OTXO000090))
FREE PACKAGE(WB.WB0970.(WSTS000059))
FREE PACKAGE(WB.WB1130.(WSTS000058))
FREE PACKAGE(WB.YWB0083.(WSTS00005859AFBB9DMVS))
FREE PACKAGE(WF.YWFM537.(WSSW00009959C24789MVS))
FREE PACKAGE(WF.YWFCB02.(WSSW00009959C3F210MVS))
FREE PACKAGE(LC.YLCTF02.(TFBM00002658E22FB0))
FREE PACKAGE(LC.YLCTF03.(TFBM00002658C94AB4))
FREE PACKAGE(WP.YWPR3PX.(DBH00000965935AA2CMVS))
FREE PACKAGE(DE.DE0100.(DE00000066))
FREE PACKAGE(WB.YWBIO.(WS8B0004425958E985MVS))
FREE PACKAGE(VD.YVDDFA.(DSPV00002357029E3F))
FREE PACKAGE(WN.YWNOLOG.(FOND000087595D1286MVS))
FREE PACKAGE(TN.YTN0101.(OTXO00007059747939))
FREE PACKAGE(WB.WB0980.(TOFF000109))
FREE PACKAGE(WB.WB0530.(WSTS000055))
FREE PACKAGE(TN.YTNW100.(OTXO00007059525387MVS))
FREE PACKAGE(TN.YTNW170.(OTXO000070594BD553MVS))
FREE PACKAGE(VD.VDDBM01.(DSPV000042))
FREE PACKAGE(VD.VDGLH00.(DSPV000042))
FREE PACKAGE(WB.WB0680.(WSTS000058))
FREE PACKAGE(WB.WB0940.(WSTS000055))
FREE PACKAGE(VD.VDINI01.(DSPV000042))
FREE PACKAGE(WB.YWBEBSM.(WS8B000479598D6B36))
FREE PACKAGE(WB.WB0630.(WSTS000058))
FREE PACKAGE(TN.YTNBOPH.(OTXO0000705959FCD2MVS))
FREE PACKAGE(DE.DE0420.(DE00000066))
FREE PACKAGE(DE.DE0410.(DE00000066))
FREE PACKAGE(DE.DE0400.(DE00000066))
FREE PACKAGE(CD.CD2590.(UPDS000044))
FREE PACKAGE(CZ.YCZM025.(LOFT000019560AE739))
FREE PACKAGE(EC.YECUCRK.(SYNC00001156FD2111))
FREE PACKAGE(WP.YWPL2P1.(DBH00000835872CD6B))
FREE PACKAGE(CZ.YCZMLIM.(KLOM00006458F49F2E))
FREE PACKAGE(WB.YWBBODA.(WS8B0004425958DDB0MVS))
FREE PACKAGE(VV.YVVZZ13.(VDPS0001145958CE5FMVS))
FREE PACKAGE(WB.YWBITV.(TOFF0001095953C015MVS))
FREE PACKAGE(CZ.CZ6400.(GSER000177))
FREE PACKAGE(NTA1P.CZA0215.(A02E000575595D269F))
FREE PACKAGE(CZ.CZ5280.(KLOM000062))
FREE PACKAGE(CZ.CZ5150.(KLOM000062))
FREE PACKAGE(EC.EC5130.(KLOM000062))
FREE PACKAGE(RI.RI0810.(RI00000021))
FREE PACKAGE(TN.YTN0021.(OTXO0000705965FE66))
FREE PACKAGE(CZ.CZ6500.(GSER000177))
FREE PACKAGE(DE.DE0860.(DE00000066))
FREE PACKAGE(DE.DE0810.(DE00000066))
FREE PACKAGE(DE.DE0820.(DE00000066))
FREE PACKAGE(DE.DE0940.(DE00000066))
FREE PACKAGE(WB.WB8010.(TOFF000109))
FREE PACKAGE(AT.AT0099.(ACS0000017597A0EC1))
FREE PACKAGE(WP.YWPU1P5.(DBH000009659306727MVS))
FREE PACKAGE(WP.YWPRAPX.(DBH00000965933E137MVS))
FREE PACKAGE(WP.YWPL5P1.(DBH00000965935BEC1MVS))
FREE PACKAGE(WP.YWPL8P1.(DBH00000965935BF94MVS))
FREE PACKAGE(WP.YWPRDPX.(DBH00000965935A9DDMVS))
FREE PACKAGE(WP.YWPRCPX.(DBH00000965935A7F9MVS))
FREE PACKAGE(VV.YVVZZ11.(VDPS00011459426A05MVS))
FREE PACKAGE(VV.YVVZZ12.(VDPS00011459426A35MVS))
FREE PACKAGE(VV.YVVZZ04.(VDPS0001145949721BMVS))
FREE PACKAGE(GM.YGMSTEU.(GM000001455946A9BF))
FREE PACKAGE(PC01.YPC0520.(IVN00000325950CA4A))
FREE PACKAGE(PC02.YPC0520.(IVN00000325950CA4A))
FREE PACKAGE(PC03.YPC0520.(IVN00000325950CA4A))
FREE PACKAGE(PC04.YPC0520.(IVN00000325950CA4A))
FREE PACKAGE(PC05.YPC0520.(IVN00000325950CA4A))
FREE PACKAGE(PC06.YPC0520.(IVN00000325950CA4A))
FREE PACKAGE(PC07.YPC0520.(IVN00000325950CA4A))
FREE PACKAGE(VV.YVVZZ10.(VDPS00011459525BC8MVS))
FREE PACKAGE(TN.YTNUPD.(OTXO000085599AC00E))
FREE PACKAGE(VV.YVVZZ07.(VDPS00013759A46E34MVS))
FREE PACKAGE(SN.YSNA005.(SAVS00001359A589EE))
FREE PACKAGE(SN.SN0200.(SAVS000013))
FREE PACKAGE(YX.YXA171C.(TOFF00011759A53A43))
FREE PACKAGE(GM.GM0850.(GM00000150))
FREE PACKAGE(WQ.WQ5950.(CUBE000114))
FREE PACKAGE(TN.YTNSICH.(OTXO000070594BD52D))
FREE PACKAGE(DE.DE0050.(DE00000066))
FREE PACKAGE(DE.DE0440.(DE00000066))
FREE PACKAGE(AT.AT7110.(A20Y001564))
FREE PACKAGE(MF.MF7550.(MFR0000124))
FREE PACKAGE(MF.MF7901.(MFR0000124))
FREE PACKAGE(NTA1P.CZA0255.(A02E00057158A18784))
FREE PACKAGE(NTA1P.CZA0213.(A02E000575595D2527))
FREE PACKAGE(VV.YVVZZ24.(VDPS00011459426A82MVS))
FREE PACKAGE(ER.YERPRI.(EAMR000035))
FREE PACKAGE(ER.YERDCUR.(EAMR00003559186E33MVS))
FREE PACKAGE(ER.YERDGET.(EAMR00003559186E6CMVS))
FREE PACKAGE(WB.WB0820.(WSTS000055))
FREE PACKAGE(BX.YBXADBR.(CLOS0001705952328DMVS))
FREE PACKAGE(SV.YSVVORM.(WSSV000199))
FREE PACKAGE(WB.WB0840.(WSTS000058))
FREE PACKAGE(FI.YFI0120.(BKUR0000805946509A))
FREE PACKAGE(FI.YFI0110.(BKUR0000805946506C))
FREE PACKAGE(DE.DE0060.(DE00000066))
FREE PACKAGE(DE.DE0430.(DE00000066))
FREE PACKAGE(DE.YDE0021.(DE000000665965EE7CMVS))
FREE PACKAGE(DE.DE0090.(DE00000066))
FREE PACKAGE(DE.DE0030.(DE00000066))
FREE PACKAGE(SV.SV5940.(WSSV000196))
FREE PACKAGE(WQ.YWQ4501.(CUBE000092595E40B8))
FREE PACKAGE(SV.SV5790.(WSSV000196))
FREE PACKAGE(VD.VDDBM15.(DSPV000042))
FREE PACKAGE(CD.YCDUPH0.(UPDS000044))
FREE PACKAGE(WB.YWBSUM.(WS8B0004425958F075MVS))
FREE PACKAGE(SV.SV0950.(WSSV000196))
FREE PACKAGE(TN.YTN0201.(OTXO0000705974793F))
FREE PACKAGE(EC.YECCRAC.(SYNC000028595120A9))
FREE PACKAGE(WB.WB5340.(TOFF000117))
FREE PACKAGE(WB.YWB530.(WS8B000476))
FREE PACKAGE(SN.SN5000.(SAVS000016))
FREE PACKAGE(BP.BP5030.(BPST000037))
FREE PACKAGE(BP.BP5060.(BPST000037))
FREE PACKAGE(NL.YNLG010.(A12P00279953023EDA))
FREE PACKAGE(AT.AT8500.(ACS0000013))
FREE PACKAGE(PC.PC8000.(IVN0000032))
FREE PACKAGE(CZ.CZ8980.(KLOM000062))
FREE PACKAGE(VV.YVVZZ20.(VDPS000114595E2936MVS))
FREE PACKAGE(UU.UU5170.(RS20000077))
FREE PACKAGE(WQ.WQ6010.(CUBE000092))
FREE PACKAGE(MF.MF7230.(MFR0000124))
FREE PACKAGE(TN.TN5030.(OTXO000070))
FREE PACKAGE(WC.WC7280.(OTXO000070))
FREE PACKAGE(WC.WC8120.(OTXO000070))
FREE PACKAGE(ED.ED0950.(ED00000056))
FREE PACKAGE(WB.WB1090.(TOFF000109))
FREE PACKAGE(WB.WB1080.(TOFF000109))
FREE PACKAGE(WI.YWI0087.(TOFF000109596F6A5DMVS))
FREE PACKAGE(ER.ER5080.(EAMR000035))
FREE PACKAGE(VV.YVVZZ28.(VDPS00011459763336MVS))
FREE PACKAGE(CZ.CZ5190.(LOMN000030))
FREE PACKAGE(ER.YERBER.(EAMR000035))
FREE PACKAGE(ER.YERDUPD.(EAMR000028590F467B))
FREE PACKAGE(VV.YVVZZ23.(VDPS00011459426A7FMVS))
FREE PACKAGE(VV.YVVZZ17.(VDPS0001145947F5E0MVS))
FREE PACKAGE(VV.YVVZZ14.(VDPS0001145947F5C7MVS))
FREE PACKAGE(VV.YVVZZ18.(VDPS0001145947F613MVS))
FREE PACKAGE(VV.YVVZZ29.(VDPS0001145947F759MVS))
FREE PACKAGE(VV.YVVZZ27.(VDPS0001145946AEC8MVS))
FREE PACKAGE(NI.YNIPACU.(IPC0000196594FE57D))
FREE PACKAGE(NI01.YNIPACU.(IPC0000196594FE57D))
FREE PACKAGE(NI02.YNIPACU.(IPC0000196594FE57D))
FREE PACKAGE(NI.YNIPREU.(IPC000019659870E1AMVS))
FREE PACKAGE(AP.YAPUTGK.(APEN000048599D816AMVS))
FREE PACKAGE(YY.YYWBERX.(TOFF000117599AA4C0MVS))
FREE PACKAGE(WL.WL8600.(WSAW000106))
FREE PACKAGE(MF.MF8620.(MFR0000132))
FREE PACKAGE(SN.SN5100.(SAVS000013))
FREE PACKAGE(MF.MF8800.(MFR0000132))
FREE PACKAGE(WB.WB5570.(WS8B000476))
FREE PACKAGE(TN.TN7080.(OTXO000085))
FREE PACKAGE(WC.WC5010.(OTXO000085))
FREE PACKAGE(WC.WC5050.(OTXO000085))
FREE PACKAGE(WC.WC8410.(OTXO000085))
FREE PACKAGE(WC.WC8401.(OTXO000085))
FREE PACKAGE(WB.WB1290.(TOFF000117))
FREE PACKAGE(WB.WB1100.(TOFF000117))
FREE PACKAGE(TN.YTN0100.(OTXO000070596B8607MVS))
FREE PACKAGE(NL.YNLG121.(A12P0028275309D6A8))
FREE PACKAGE(NL.YNLG140.(A12P0027995306112C))
FREE PACKAGE(NL.YNLG03M.(A12P002799530610F5))
FREE PACKAGE(NL.YNLG040.(A12P00279953061102))
FREE PACKAGE(NL.YNLG120.(A12P0027995306110F))
FREE PACKAGE(NL.YNLG130.(BALR00000154735D32))
FREE PACKAGE(AT.AT0620.(A20Y001564))
FREE PACKAGE(NL.YNLG020.(BALR00001254E5FBC3))
FREE PACKAGE(NL.YNLG021.(BALR00001254E5FBC9))
FREE PACKAGE(NL.NL5000.(BALR000012))
FREE PACKAGE(WB.YWBMAS.(WS8B0004425958EA9AMVS))
FREE PACKAGE(WB.YWBWRK.(WS8B0004425959FAC1))
FREE PACKAGE(MF.YMFC113.(MFR0000111590212EB))
FREE PACKAGE(NL.NL7310.(BALR000073))
FREE PACKAGE(WP.YWPR1QX.(DBH00000965935ABFFMVS))
FREE PACKAGE(WP.YWPR7PX.(DBH00000965935ABE2MVS))
FREE PACKAGE(NL.NL7810.(BALR000073))
FREE PACKAGE(NL.NL7750.(BALR000073))
FREE PACKAGE(VV.YVVZZ15.(VDPS00011459426A38MVS))
FREE PACKAGE(VV.YVVZZ05.(VDPS0001145947F5B1MVS))
FREE PACKAGE(WC.WC5010.(OTXO000081))
FREE PACKAGE(WC.WC8401.(OTXO000081))
FREE PACKAGE(DE.DE0820.(DE00000070))
FREE PACKAGE(WB.WB1130.(WSTS000057))
FREE PACKAGE(WB.WB1290.(TOFF000112))
FREE PACKAGE(WB.WB0840.(WSTS000057))
FREE PACKAGE(TN.YTN0202.(OTXO00008159FDDDF0MVS))
FREE PACKAGE(WB.WB1100.(TOFF000112))
FREE PACKAGE(WB.WB0680.(WSTS000057))
FREE PACKAGE(WB.WB0630.(WSTS000057))
FREE PACKAGE(DE.DE0820.(DE00000075))
FREE PACKAGE(WB.WB5340.(TOFF000112))
FREE PACKAGE(WC.WC5010.(WS8B000535))
FREE PACKAGE(WC.WC8410.(OTXO000081))
FREE PACKAGE(TN.TN7004.(OTXO000081))
FREE PACKAGE(TN.YTNUPD.(OTXO00008159C7784F))
FREE PACKAGE(TN.YTNW100.(OTXO00008159E36F73MVS))
FREE PACKAGE(WQ.YWQ4502.(CUBE00009459EF685F))
FREE PACKAGE(WB.WB0840.(WS8B000540))
FREE PACKAGE(WB.WB0970.(WSTS000057))
FREE PACKAGE(WB.WB1100.(WS8B000540))
FREE PACKAGE(WB.WB5340.(WS8B000540))
FREE PACKAGE(WB.WB1290.(WS8B000540))
FREE PACKAGE(YY.YYWBERX.(TOFF00011259C7788CMVS))
FREE PACKAGE(YY.YYDB2FK.(TOFF0001095953C05BMVS))
FREE PACKAGE(WB.WB0990.(TOFF000109))
FREE PACKAGE(WB.WB1090.(TOFF000112))
FREE PACKAGE(WB.WB1080.(TOFF000112))
FREE PACKAGE(WB.WB0980.(TOFF000112))
FREE PACKAGE(WB.WB0820.(WSTS000057))
FREE PACKAGE(WB.WB7650.(TOFF000109))
FREE PACKAGE(WB.WB0840.(WSTS000063))
FREE PACKAGE(CZ.CZ8980.(KLOM000067))
FREE PACKAGE(HPS.ZDEWERI.(HPSVP2ZDEWERI))
FREE PACKAGE(HP1.ZDEWERI.(HPSVP2ZDEWERI))
FREE PACKAGE(WB.YWB5403.(WSTS000055594BF33EMVS))
FREE PACKAGE(WB.YWB5402.(WSTS000055594BF347MVS))
FREE PACKAGE(WQ.WQ6000.(CUBE000094))
FREE PACKAGE(VV.YVVZZ08.(VDPS00011759EDC6B6MVS))
FREE PACKAGE(RB.YRBUXY1.(RBK000000659E48F65MVS))
FREE PACKAGE(WP.YWPLEP1.(DBH00000835872CCA2))
FREE PACKAGE(WB.WB0910.(WSTS000057))
FREE PACKAGE(HB.YHBK011.(ASIA00007957F22639))
FREE PACKAGE(SN.SN5001.(SAVS000015))
FREE PACKAGE(ER.YERPRI.(EAMR000048))
FREE PACKAGE(WB.YWB0083.(WSTS00005759C7789EMVS))
FREE PACKAGE(WB.WB1130.(WS8B000540))
FREE PACKAGE(WC.WC8401.(WS8B000535))
FREE PACKAGE(WB.WB5340.(TOFF000119))
FREE PACKAGE(WB.WB0840.(WSTS000064))
FREE PACKAGE(BP.YBPMUT.(BPST000087599ECB6FMVS))
FREE PACKAGE(SV.SV0950.(WSSV000200))
FREE PACKAGE(WB.WB7650.(TOFF000119))
FREE PACKAGE(ER.YERBER.(EAMR000048))
FREE PACKAGE(ER.ER8020.(EAMR000048))
FREE PACKAGE(WC.WC8410.(WS8B000540))
FREE PACKAGE(WC.WC5010.(WS8B000540))
FREE PACKAGE(BP.YBPMUT.(BPST00008859CA1D14MVS))
FREE PACKAGE(RI.RI0810.(RI00000024))
FREE PACKAGE(WB.WB0630.(WS8B000540))
FREE PACKAGE(WB.WB0680.(WS8B000540))
FREE PACKAGE(BP.YBPMUT.(BPST00008859CA1D14))
FREE PACKAGE(WQ.WQ5950.(CUBE000094))
FREE PACKAGE(VV.YVVZZ25.(VDPS0001145947F674MVS))
FREE PACKAGE(WB.WB5270.(WSTS000055))
FREE PACKAGE(WB.WB5290.(WSTS000055))
FREE PACKAGE(KX.YKXO002.(TLBO00002358D13DB6MVS))
FREE PACKAGE(WB.WB0060.(TOFF000112))
FREE PACKAGE(DE.DE5130.(DE00000070))
FREE PACKAGE(WB.WB7230.(TOFF000109))
FREE PACKAGE(ER.ER8020.(EAMR000053))
FREE PACKAGE(VV.YVV3EIP.(VDPS0001565A0883F9MVS))
FREE PACKAGE(WP.YWPR6PX.(DBH00000965935AB34MVS))
FREE PACKAGE(VV.YVVZZ09.(VDPS00011759D118C6MVS))
FREE PACKAGE(BP.BP7161.(BPST000055))
FREE PACKAGE(BP.YBPACF2.(A12M0061025318300D))
FREE PACKAGE(WQ.WQ6000.(CUBE000116))
FREE PACKAGE(NL.NL7590.(BALR000074))
FREE PACKAGE(WC.WC8170.(OTXO000081))
FREE PACKAGE(TN.YTN5012.(OTXO00008159C777B6MVS))
FREE PACKAGE(TN.TN7004.(OTXO000094))
FREE PACKAGE(WB.WB7360.(WSTS000055))
FREE PACKAGE(WB.WB5120.(WSTS000058))
FREE PACKAGE(WB.WB7020.(WSTS000057))
FREE PACKAGE(WB.WB7030.(WSTS000055))
FREE PACKAGE(WB.WB8720.(WSTS000055))
FREE PACKAGE(CZ.CZ5494.(ACP0000112))
FREE PACKAGE(MF.MF8940.(MFR0000135))
FREE PACKAGE(CZ.CZ8010.(APEN000049))
FREE PACKAGE(CZ.CZ8020.(APEN000049))
FREE PACKAGE(MF.MF8950.(MFR0000110))
FREE PACKAGE(MF.MF8810.(MFR0000135))
FREE PACKAGE(DI.DI5200.(DI00000064))
FREE PACKAGE(TN.YTN0100.(OTXO00008159C90F4FMVS))
FREE PACKAGE(WB.WB1310.(WSTS000055))
FREE PACKAGE(WB.WB1070.(WSTS000055))
FREE PACKAGE(LC.YLCTF03.(TFBM00003359B6B138))
FREE PACKAGE(WB.YWB0082.(WSTS00005759C7789AMVS))
FREE PACKAGE(WB.YWB0083.(WSTS0000625A13F154MVS))
FREE PACKAGE(WB.WB0970.(TOFF000119))
FREE PACKAGE(YY.YYUWI.(PSMF00001758EE0EC7MVS))
FREE PACKAGE(WQ.YWQ5601.(CUBE00009459EF6729))
FREE PACKAGE(WB.WB0620.(WSTS000055))
FREE PACKAGE(CD.YCDT115.(UPDS000006))
FREE PACKAGE(CD.CD8130.(CIFS000210))
FREE PACKAGE(RA.RA7240.(EGB0000034))
FREE PACKAGE(DE.DE0030.(DE00000070))
FREE PACKAGE(FI.YFI0110.(BKUR00009559B932C8MVS))
FREE PACKAGE(WB.WB7770.(WSTS000055))
FREE PACKAGE(WB.WB7440.(WSTS000060))
FREE PACKAGE(DE.DE5600.(DE00000070))
FREE PACKAGE(CZ.CZ6300.(KLOM000067))
FREE PACKAGE(DE.DE5690.(DE00000066))
FREE PACKAGE(WB.WB7441.(WSTS000055))
FREE PACKAGE(WB.WB7470.(WSTS000055))
FREE PACKAGE(SN.SN5000.(SAVS000015))
FREE PACKAGE(TN.TN5016.(OTXO000081))
FREE PACKAGE(TN.TN5004.(OTXO000081))
FREE PACKAGE(SN.YSNB002.(SAVS00001359A58A06))
FREE PACKAGE(AP.YAPUTGK.(APEN00004959CA802BMVS))
FREE PACKAGE(CZ.YCZM025.(LOFT000049599C053FMVS))
FREE PACKAGE(WB.WB0900.(WSTS000055))
FREE PACKAGE(WB.WB1120.(WSTS000055))
FREE PACKAGE(GM.GM7910.(GM00000145))
FREE PACKAGE(WB.WB1050.(WSTS000055))
FREE PACKAGE(WB.WB1020.(WSTS000055))
FREE PACKAGE(WB.WB0570.(WSTS000055))
FREE PACKAGE(WB.WB1270.(TOFF000109))
FREE PACKAGE(LC.YLCTF02.(TFBM00003359B6B121))
FREE PACKAGE(MF.YMFC110.(MFR000013659CA812D))
FREE PACKAGE(ER.ER8020.(EAMR000063))
FREE PACKAGE(VV.YVVZZ33.(VDPS0001685A708DD5MVS))
FREE PACKAGE(WB.WB0980.(TOFF000119))
FREE PACKAGE(WB.WB1290.(TOFF000119))
FREE PACKAGE(WB.WB0990.(TOFF000119))
FREE PACKAGE(WB.WB1100.(TOFF000119))
FREE PACKAGE(WB.WB1080.(TOFF000119))
FREE PACKAGE(YY.YYWBERX.(TOFF0001195A16AFD3MVS))
FREE PACKAGE(WB.WB0820.(TOFF000119))
FREE PACKAGE(WB.WB1090.(TOFF000119))
FREE PACKAGE(WB.WB1130.(WSTS000062))
FREE PACKAGE(WB.YWB5417.(WSTS000055594BF2BEMVS))
FREE PACKAGE(NL.YNL0200.(BALR00003156B0CC3B))
FREE PACKAGE(WB.WB1110.(WSTS000055))
FREE PACKAGE(NTA1P.CZA0213.(A02E00058259CD0967))
FREE PACKAGE(WB.WB0830.(WSTS000055))
FREE PACKAGE(WQ.YWQBERI.(CUBE00009459EF6722))
FREE PACKAGE(DE.DE0050.(DE00000070))
FREE PACKAGE(DE.DE0440.(DE00000070))
FREE PACKAGE(DE.DE0490.(DE00000066))
FREE PACKAGE(FI.YFI0120.(BKUR00009559B932CCMVS))
FREE PACKAGE(DE.DE0090.(DE00000070))
FREE PACKAGE(DE.DE0060.(DE00000070))
FREE PACKAGE(DE.DE0100.(DE00000070))
FREE PACKAGE(CK.YCKT020.(DCA0000026))
FREE PACKAGE(CK.YCKT025.(DCA0000157))
FREE PACKAGE(DE.YDE0021.(DE0000007059FB22DBMVS))
FREE PACKAGE(WB.WB0840.(WSTS000062))
FREE PACKAGE(WQ.YWQEXCP.(CUBE000092595E3C05))
FREE PACKAGE(WB.WB7040.(WSTS000055))
FREE PACKAGE(WB.WB7370.(WSTS000055))
FREE PACKAGE(WB.WB7540.(WSTS000055))
FREE PACKAGE(WB.WB5280.(WSTS000055))
FREE PACKAGE(WB.WB7290.(WSTS000055))
FREE PACKAGE(WB.WB7730.(WSTS000055))
FREE PACKAGE(WB.WB7560.(WSTS000055))
FREE PACKAGE(WB.WB7871.(WSTS000055))
FREE PACKAGE(WB.WB7390.(WSTS000055))
FREE PACKAGE(WB.WB7561.(WSTS000055))
FREE PACKAGE(WB.WB0950.(WSTS000055))
FREE PACKAGE(WB.WB0960.(WSTS000055))
FREE PACKAGE(WB.WB0920.(WSTS000055))
FREE PACKAGE(WB.WB1340.(WSTS000055))
FREE PACKAGE(WB.WB0870.(WSTS000055))
FREE PACKAGE(WB.WB0660.(WSTS000055))
FREE PACKAGE(WB.WB0600.(WSTS000055))
FREE PACKAGE(WB.WB0580.(WSTS000055))
FREE PACKAGE(WB.WB0520.(WSTS000055))
FREE PACKAGE(WB.WB0510.(WSTS000055))
FREE PACKAGE(PC01.YPC0830.(IVN00000325970E7C8))
FREE PACKAGE(PC02.YPC0830.(IVN00000325970E7C8))
FREE PACKAGE(PC03.YPC0830.(IVN00000325970E7C8))
FREE PACKAGE(PC04.YPC0830.(IVN00000325970E7C8))
FREE PACKAGE(PC05.YPC0830.(IVN00000325970E7C8))
FREE PACKAGE(PC06.YPC0830.(IVN00000325970E7C8))
FREE PACKAGE(PC07.YPC0830.(IVN00000325970E7C8))
FREE PACKAGE(KR.YKRT511.(KAUF00003859160EE7MVS))
FREE PACKAGE(PC.YPC0570.(IVN0000032593FDD43))
FREE PACKAGE(YY.YYFIKST.(BKUR00008059465507MVS))
FREE PACKAGE(WB.YWB551.(WS8B00044259510292MVS))
FREE PACKAGE(NZ.NZDBM83.(ZVBI000019))
FREE PACKAGE(YY.YYWBERR.(WSTS000055594BF0A8MVS))
FREE PACKAGE(YX.YXWB231.(WSTS000055594BF1B9MVS))
FREE PACKAGE(CZ.YCZMLIM.(KLOM00006759DCDE22MVS))
FREE PACKAGE(WN.YWNOLOG.(FOND00009559DDEF94MVS))
FREE PACKAGE(VV.YVVZZ13.(VDPS00011759E75A9CMVS))
FREE PACKAGE(VV.YVVZZ11.(VDPS00011759EDC6C1MVS))
FREE PACKAGE(WB.YWBEBSM.(WSTS00005759EEEEAF))
FREE PACKAGE(DE.DE0810.(DE00000070))
FREE PACKAGE(WF.YWFCB02.(WSSW00010059F604C2MVS))
FREE PACKAGE(WF.YWFM537.(WSSW00010059F6038CMVS))
FREE PACKAGE(GM.GM0850.(GM00000153))
FREE PACKAGE(DE.DE0820.(DE00000080))
FREE PACKAGE(ER.YERPRI.(EAMR000053))
FREE PACKAGE(BP.YBPMUT.(BPST0000925A086E14MVS))
FREE PACKAGE(WB.WB5040.(WS8B000444))
FREE PACKAGE(WB.WB7520.(WSTS000058))
FREE PACKAGE(MF.YMFC113.(MFR000013659C7A3DF))
FREE PACKAGE(PC01.YPC0520.(IVN000003559D0F5B8))
FREE PACKAGE(PC02.YPC0520.(IVN000003559D0F5B8))
FREE PACKAGE(PC03.YPC0520.(IVN000003559D0F5B8))
FREE PACKAGE(PC04.YPC0520.(IVN000003559D0F5B8))
FREE PACKAGE(PC05.YPC0520.(IVN000003559D0F5B8))
FREE PACKAGE(PC06.YPC0520.(IVN000003559D0F5B8))
FREE PACKAGE(PC07.YPC0520.(IVN000003559D0F5B8))
FREE PACKAGE(VV.YVVZZ32.(VDPS00011759D0C30EMVS))
FREE PACKAGE(EC.EC5130.(KLOM000067))
FREE PACKAGE(CZ.CZ6500.(GSER000187))
FREE PACKAGE(CZ.CZ6400.(GSER000187))
FREE PACKAGE(CZ.CZ5280.(KLOM000067))
FREE PACKAGE(DE.DE0940.(DE00000070))
FREE PACKAGE(DE.DE0830.(DE00000070))
FREE PACKAGE(CZ.CZ5150.(KLOM000067))
FREE PACKAGE(DE.DE0860.(DE00000070))
FREE PACKAGE(WB.WB0940.(WSTS000057))
FREE PACKAGE(WB.WB0530.(WSTS000057))
FREE PACKAGE(TN.YTNUPD.(OTXO0000945A12B0F8))
FREE PACKAGE(RI.RI0810.(RI00000026))
FREE PACKAGE(WB.WB7650.(TOFF000126))
FREE PACKAGE(WB.WB0630.(WSTS000062))
FREE PACKAGE(WB.WB0680.(WSTS000062))
FREE PACKAGE(WQ.WQ5950.(CUBE000116))
FREE PACKAGE(WB.WB7270.(WSTS000055))
FREE PACKAGE(WB.WB0550.(WSTS000055))
FREE PACKAGE(SN.SN5100.(SAVS000015))
FREE PACKAGE(WQ.YWQ4501.(CUBE00009459EF6858))
FREE PACKAGE(VD.VDGLH00.(DSPV000044))
FREE PACKAGE(DE.DE0420.(DE00000070))
FREE PACKAGE(VV.YVVZZ12.(VDPS00011759D0EFDAMVS))
FREE PACKAGE(DE.DE0430.(DE00000070))
FREE PACKAGE(DE.DE0410.(DE00000070))
FREE PACKAGE(DE.DE0400.(DE00000070))
FREE PACKAGE(TR.YTRHISP.(AITR000041594B870D))
FREE PACKAGE(TN.YTN0101.(OTXO00008159DCBCA0))
FREE PACKAGE(EC.YECCRAC.(SYNC00003059F9A49E))
FREE PACKAGE(WB.WB5340.(TOFF000126))
FREE PACKAGE(EQ.YEQISRK.(EAGL00001857CFFEDB))
FREE PACKAGE(PC.PC5090.(IVN0000032))
FREE PACKAGE(PC.PC5150.(IVN0000032))
FREE PACKAGE(YY.YYWBVIN.(WSTS0000555953702BMVS))
FREE PACKAGE(WB.WB7420.(WSTS000055))
FREE PACKAGE(WB.WB7410.(WSTS000055))
FREE PACKAGE(WB.WB5090.(WSTS000055))
FREE PACKAGE(WB.WB7280.(WSTS000055))
FREE PACKAGE(WB.WB5260.(WSTS000055))
FREE PACKAGE(WB.WB8650.(TOFF000109))
FREE PACKAGE(NI.YNIPREU.(IPC000020959ECC21DMVS))
FREE PACKAGE(WQ.WQ6010.(CUBE000094))
FREE PACKAGE(WL.WL8600.(WSAW000104))
FREE PACKAGE(CZ.CZ5190.(LOMN000034))
FREE PACKAGE(WC.WC7280.(OTXO000081))
FREE PACKAGE(WC.WC5050.(OTXO000081))
FREE PACKAGE(SN.SN5006.(SAVS000013))
FREE PACKAGE(WC.WC7260.(OTXO000085))
FREE PACKAGE(WC.WC7530.(OTXO000085))
FREE PACKAGE(WC.WC7220.(OTXO000085))
FREE PACKAGE(WC.WC7310.(OTXO000085))
FREE PACKAGE(WC.WC7240.(OTXO000085))
FREE PACKAGE(WC.WC7500.(OTXO000085))
FREE PACKAGE(WC.WC7320.(OTXO000085))
FREE PACKAGE(TN.YTNSICH.(OTXO00008159C777D9))
FREE PACKAGE(MF.MF7230.(MFR0000135))
FREE PACKAGE(MF.MF8620.(MFR0000135))
FREE PACKAGE(NI.YNIPACU.(IPC000020959C14A76MVS))
FREE PACKAGE(NI01.YNIPACU.(IPC000020959C14A76MVS))
FREE PACKAGE(NI02.YNIPACU.(IPC000020959C14A76MVS))
FREE PACKAGE(MF.MF7770.(MFR0000135))
FREE PACKAGE(MF.MF8800.(MFR0000135))
FREE PACKAGE(ER.ER5080.(EAMR000048))
FREE PACKAGE(PC.PC7100.(IVN0000035))
FREE PACKAGE(PC01.PC5060.(IVN0000035))
FREE PACKAGE(PC02.PC5060.(IVN0000035))
FREE PACKAGE(PC03.PC5060.(IVN0000035))
FREE PACKAGE(PC04.PC5060.(IVN0000035))
FREE PACKAGE(PC05.PC5060.(IVN0000035))
FREE PACKAGE(PC06.PC5060.(IVN0000035))
FREE PACKAGE(PC07.PC5060.(IVN0000035))
FREE PACKAGE(GM.YGMSTEU.(GM0000015359CCE121MVS))
FREE PACKAGE(PC.PC8000.(IVN0000035))
FREE PACKAGE(UU.UU5170.(RS20000079))
FREE PACKAGE(VV.YVVZZ17.(VDPS00011759D21EC1MVS))
FREE PACKAGE(VV.YVVZZ25.(VDPS00011759D246F2MVS))
FREE PACKAGE(NL.NL5000.(BALR000074))
FREE PACKAGE(BP.BP5030.(BPST000092))
FREE PACKAGE(CZ.CZ8980.(GSER000211))
FREE PACKAGE(SV.SV0950.(WSSV000246))
FREE PACKAGE(WC.WC8410.(WSTS000062))
FREE PACKAGE(WC.WC8401.(WSTS000062))
FREE PACKAGE(WC.WC5010.(WSTS000062))
FREE PACKAGE(WB.WB5270.(WSTS000065))
FREE PACKAGE(WB.WB5290.(WSTS000065))
FREE PACKAGE(TN.YTN0210.(OTXO00007059747A48))
FREE PACKAGE(TN.YTN0202.(OTXO0000925A098A8AMVS))
FREE PACKAGE(NTA1P.CZA0219.(A02E000568586CDE37))
FREE PACKAGE(ED.ED0950.(ED00000062))
FREE PACKAGE(WI.YWI0087.(TOFF00011259D10C51MVS))
FREE PACKAGE(BP.YBPMUT.(BPST0000925A086E14))
FREE PACKAGE(NTA1P.CZA0013.(A02E00056056EFE947))
FREE PACKAGE(CZ.YCZJABW.(GSER000170596C7E08MVS))
FREE PACKAGE(CZ.YCZPABW.(GSER000181593FC3E5))
FREE PACKAGE(TN.YTNW170.(OTXO00008159DB43A5MVS))
FREE PACKAGE(BX.YBXADBR.(CLOS0001805989B493MVS))
FREE PACKAGE(VV.YVVZZ04.(VDPS00011759C9027DMVS))
FREE PACKAGE(NTA1P.CZA0215.(A02E00058259CD097C))
FREE PACKAGE(TN.YTNW100.(OTXO0000945A12AF80MVS))
FREE PACKAGE(WB.WB7400.(WSTS000055))
FREE PACKAGE(WB.WB7380.(WSTS000055))
FREE PACKAGE(WB.WB7330.(WSTS000055))
FREE PACKAGE(WB.WB7381.(WSTS000055))
FREE PACKAGE(WB.WB7320.(WSTS000055))
FREE PACKAGE(WB.WB7340.(WSTS000055))
FREE PACKAGE(VV.YVVZZ3R.(VDPS0001145947F471MVS))
FREE PACKAGE(WB.WB0970.(TOFF000122))
FREE PACKAGE(WB.WB0630.(WSTS000061))
FREE PACKAGE(WB.WB0680.(WSTS000061))
FREE PACKAGE(WB.YWBEBSM.(WSTS0000615A39A815MVS))
FREE PACKAGE(VV.YVVZZ33.(VDPS00011759FB4F83MVS))
FREE PACKAGE(VD.VDGLH00.(DSPV000047))
FREE PACKAGE(WQ.YWQ4501.(CUBE0001185A52231D))
FREE PACKAGE(TN.TN7004.(CSQS000007))
FREE PACKAGE(WB.WB5120.(WSTS000061))
FREE PACKAGE(WB.WB7360.(WSTS000061))
FREE PACKAGE(WB.WB7020.(WSTS000061))
FREE PACKAGE(CZ.CZ8020.(APEN000050))
FREE PACKAGE(CZ.CZ8010.(APEN000050))
FREE PACKAGE(WB.WB0910.(WSTS000061))
FREE PACKAGE(WQ.YWQBERI.(CUBE0001185A5220FD))
FREE PACKAGE(RA.RA7240.(EGB0000036))
FREE PACKAGE(CZ.YCZPABW.(GSER0001995A37D687MVS))
FREE PACKAGE(WQ.YWQ4501.(CUBE0001325A843C30))
FREE PACKAGE(WB.WB1070.(WSTS000061))
FREE PACKAGE(WB.WB0620.(WSTS000061))
FREE PACKAGE(WB.WB1270.(TOFF000122))
FREE PACKAGE(WB.WB0970.(WSTS000069))
FREE PACKAGE(DE.DE0030.(DE00000077))
FREE PACKAGE(WB.WB7440.(WSTS000061))
FREE PACKAGE(WB.WB7770.(WSTS000061))
FREE PACKAGE(CZ.CZ6300.(KLOM000069))
FREE PACKAGE(WB.WB7470.(WSTS000061))
FREE PACKAGE(WB.WB7441.(WSTS000061))
FREE PACKAGE(DE.DE5690.(DE00000077))
FREE PACKAGE(DE.DE5600.(DE00000077))
FREE PACKAGE(SN.SN5000.(SAVS000018))
FREE PACKAGE(WB.WB0820.(TOFF000122))
FREE PACKAGE(WB.WB7040.(WSTS000061))
FREE PACKAGE(WB.WB7390.(WSTS000061))
FREE PACKAGE(DE.DE0830.(DE00000077))
FREE PACKAGE(WB.WB0830.(WSTS000061))
FREE PACKAGE(WB.WB1110.(WSTS000061))
FREE PACKAGE(WB.WB1050.(WSTS000061))
FREE PACKAGE(WB.WB0570.(WSTS000061))
FREE PACKAGE(WB.WB0870.(WSTS000061))
FREE PACKAGE(WB.WB0550.(WSTS000061))
FREE PACKAGE(WB.WB1020.(WSTS000061))
FREE PACKAGE(WB.WB1310.(WSTS000061))
FREE PACKAGE(WB.WB1120.(WSTS000061))
FREE PACKAGE(WB.WB1100.(TOFF000122))
FREE PACKAGE(WB.WB0980.(TOFF000122))
FREE PACKAGE(WB.WB1290.(TOFF000122))
FREE PACKAGE(WB.WB5340.(TOFF000122))
FREE PACKAGE(WB.WB1130.(WSTS000061))
FREE PACKAGE(CZ.CZ6400.(GSER000219))
FREE PACKAGE(WB.WB0630.(WSTS000069))
FREE PACKAGE(WB.WB0680.(WSTS000069))
FREE PACKAGE(DE.DE0430.(DE00000077))
FREE PACKAGE(DE.DE0440.(DE00000077))
FREE PACKAGE(DE.DE0090.(DE00000077))
FREE PACKAGE(DE.DE0050.(DE00000077))
FREE PACKAGE(WB.WB0510.(WSTS000061))
FREE PACKAGE(WB.WB0600.(WSTS000061))
FREE PACKAGE(WB.WB0660.(WSTS000061))
FREE PACKAGE(WB.WB1340.(WSTS000061))
FREE PACKAGE(WB.WB0940.(WSTS000061))
FREE PACKAGE(WB.WB0920.(WSTS000061))
FREE PACKAGE(WB.WB0520.(WSTS000061))
FREE PACKAGE(DE.DE0420.(DE00000077))
FREE PACKAGE(WB.WB5270.(WSTS000061))
FREE PACKAGE(WB.WB5260.(WSTS000061))
FREE PACKAGE(WC.WC7500.(WSTS000061))
FREE PACKAGE(WB.WB7280.(WSTS000061))
FREE PACKAGE(WC.WC5050.(WSTS000061))
FREE PACKAGE(WB.WB7410.(WSTS000061))
FREE PACKAGE(WB.WB7420.(WSTS000061))
FREE PACKAGE(WC.WC7240.(WSTS000061))
FREE PACKAGE(WC.WC7310.(WSTS000061))
FREE PACKAGE(WB.WB5090.(WSTS000061))
FREE PACKAGE(WC.WC7320.(WSTS000061))
FREE PACKAGE(WC.WC7260.(WSTS000061))
FREE PACKAGE(WB.WB5290.(WSTS000061))
FREE PACKAGE(WC.WC7220.(WSTS000061))
FREE PACKAGE(WC.WC7280.(WSTS000061))
FREE PACKAGE(WC.WC7530.(WSTS000061))
FREE PACKAGE(WB.WB0580.(WSTS000061))
FREE PACKAGE(WB.WB0950.(WSTS000061))
FREE PACKAGE(WB.WB0530.(WSTS000061))
FREE PACKAGE(WC.WC5010.(WSTS000061))
FREE PACKAGE(WB.WB0960.(WSTS000061))
FREE PACKAGE(WC.WC8401.(WSTS000061))
FREE PACKAGE(WB.WB8650.(TOFF000122))
FREE PACKAGE(WC.WC8410.(WSTS000061))
FREE PACKAGE(WQ.WQ6010.(CUBE000118))
FREE PACKAGE(WL.WL8600.(WSAW000110))
FREE PACKAGE(WQ.WQ5950.(CUBE000118))
FREE PACKAGE(CZ.CZ8980.(KLOM000069))
FREE PACKAGE(CZ.CZ5190.(LOMN000038))
FREE PACKAGE(SN.SN5100.(SAVS000018))
FREE PACKAGE(WB.WB1090.(TOFF000122))
FREE PACKAGE(NL.NL5000.(BALR000076))
FREE PACKAGE(WB.WB0840.(WSTS000061))
FREE PACKAGE(WB.WB1080.(TOFF000122))
FREE PACKAGE(WB.WB7270.(WSTS000061))
FREE PACKAGE(WB.WB7560.(WSTS000061))
FREE PACKAGE(WB.WB7380.(WSTS000061))
FREE PACKAGE(WB.WB7561.(WSTS000061))
FREE PACKAGE(WB.WB7871.(WSTS000061))
FREE PACKAGE(WB.WB7370.(WSTS000061))
FREE PACKAGE(WB.WB5280.(WSTS000061))
FREE PACKAGE(WB.WB7400.(WSTS000061))
FREE PACKAGE(WB.WB7540.(WSTS000061))
FREE PACKAGE(WB.WB7520.(WSTS000061))
FREE PACKAGE(WB.WB7730.(WSTS000061))
FREE PACKAGE(WB.WB7381.(WSTS000061))
FREE PACKAGE(WB.WB7290.(WSTS000061))
FREE PACKAGE(CZ.CZ6500.(GSER000206))
FREE PACKAGE(WB.WB7650.(TOFF000122))
FREE PACKAGE(WB.WB5040.(WS8B000520))
FREE PACKAGE(EC.EC5130.(KLOM000069))
FREE PACKAGE(WB.WB7320.(WSTS000061))
FREE PACKAGE(WB.WB7340.(WSTS000061))
FREE PACKAGE(WB.WB7330.(WSTS000061))
FREE PACKAGE(CZ.CZ5150.(KLOM000069))
FREE PACKAGE(DE.DE0400.(DE00000077))
FREE PACKAGE(ED.ED0950.(ED00000071))
FREE PACKAGE(DE.DE0940.(DE00000077))
FREE PACKAGE(DE.DE0820.(DE00000077))
FREE PACKAGE(DE.DE0810.(DE00000077))
FREE PACKAGE(DE.DE0410.(DE00000077))
FREE PACKAGE(RI.RI0810.(RI00000027))
FREE PACKAGE(DE.DE0860.(DE00000077))
FREE PACKAGE(ER.ER8020.(EAMR000061))
FREE PACKAGE(CZ.YCZJABW.(GSER0001995A2FFFC5MVS))
FREE PACKAGE(PHPSPTA.HMCXRL4.())
FREE PACKAGE(PHPS53.HMCXRL4.())
FREE PACKAGE(PHPSPTA.HMCBCRD.())
FREE PACKAGE(PHPS53.HMCBCRD.())
FREE PACKAGE(PHPSPTA.H0001.())
FREE PACKAGE(PHPS53.H0001.())
FREE PACKAGE(PHPSPTA.RMIGNID.())
FREE PACKAGE(PHPS53.RMIGNID.())
FREE PACKAGE(PHPSPTA.HMPGENX.())
FREE PACKAGE(PHPS53.HMPGENX.())
FREE PACKAGE(PHPSPTA.HMPBNDR.())
FREE PACKAGE(PHPS53.HMPBNDR.())
FREE PACKAGE(PHPSPTA.HMCRES.())
FREE PACKAGE(PHPS53.HMCRES.())
FREE PACKAGE(BP.BP9060.(BPST000082))
FREE PACKAGE(WB.YWB0083.(WSTS0000615A39A80BMVS))
FREE PACKAGE(AP.YAPUTGK.(APEN0000505A38FBC3MVS))
FREE PACKAGE(CZ.YCZPABW.(VEFO0000455A8AF898MVS))
FREE PACKAGE(WI.YWI0087.(TOFF0001225A68637AMVS))
FREE PACKAGE(WB.YWB0082.(WSTS0000615A39A807MVS))
FREE PACKAGE(NTA1P.CZA0255.(A02E00058259CD092F))
FREE PACKAGE(NTA1P.CZA0215.(A02E0005745A4E0589))
FREE PACKAGE(ER.YERBER.(EAMR000053))
FREE PACKAGE(NZ.NZDBM83.(ZVBI000021))
FREE PACKAGE(WB.YWBEBSM.(WSTS0000695A80713EMVS))
FREE PACKAGE(WN.YWNOLOG.(FOND0001065A4CBEB4MVS))
FREE PACKAGE(WP.YWPL9P1.(DBH000012659B8E75BMVS))
FREE PACKAGE(HP1.AC7VRK.(HPSVP2AC7VRK))
FREE PACKAGE(HP3.AC7VRK.(HPSVP2AC7VRK))
FREE PACKAGE(HP1.AATSRK.(HPSVP2AATSRK))
FREE PACKAGE(HP3.AATSRK.(HPSVP2AATSRK))
FREE PACKAGE(MF.YMFC010.(MFR00001495A537D96))
FREE PACKAGE(WP.YWPL6P1.(DBH000012659B8E72DMVS))
FREE PACKAGE(WB.YWB5402.(WSTS0000615A39A826MVS))
FREE PACKAGE(WB.YWB5403.(WSTS0000615A39A82CMVS))
FREE PACKAGE(SN.SN5903.(SAVS000013))
FREE PACKAGE(WP.YWPR5PX.(DBH000012659B8E9C1MVS))
FREE PACKAGE(RB.YRBUXY1.(RBK00000185A1D6D88))
FREE PACKAGE(MF.MF8940.(MFR0000148))
FREE PACKAGE(CZ.CZ5494.(ACP0000115))
FREE PACKAGE(SN.SN6007.(SAVS000018))
FREE PACKAGE(MF.MF8930.(MFR0000135))
FREE PACKAGE(WP.YWPR1PX.(DBH000012659B8E86B))
FREE PACKAGE(MF.MF8810.(MFR0000148))
FREE PACKAGE(MF.MF8950.(MFR0000148))
FREE PACKAGE(CZ.CZ7510.(APEN000042))
FREE PACKAGE(VD.VDUTI41.(DSPV000042))
FREE PACKAGE(ER.YERDCUR.(EAMR00004859B80521MVS))
FREE PACKAGE(VV.YVV3EIP.(VDPS0001185A68985A))
FREE PACKAGE(YY.YYWBMTU.(WSTS000055594BF093MVS))
FREE PACKAGE(KR.YKRT397.(VEFO00003458E0E01BMVS))
FREE PACKAGE(SN.YSND007.(SAVS0000055960CF6D))
FREE PACKAGE(SN.YSND008.(SAVS0000055960CF75))
FREE PACKAGE(SN.YSN202I.(SAVS0000055970BC9A))
FREE PACKAGE(SN.YSND011.(SAVS0000055970BD39))
FREE PACKAGE(VV.YVVZZ19.(VDPS00011759DB8665MVS))
FREE PACKAGE(VV.YVVZZ30.(VDPS00011759EDC710MVS))
FREE PACKAGE(MF.MF7010.(MFR0000135))
FREE PACKAGE(MF.MF7901.(MFR0000135))
FREE PACKAGE(SN.YSND010.(SAVS00001359A58A57))
FREE PACKAGE(SN.YSN183I.(SAVS0000055960D087))
FREE PACKAGE(SN.YSN102I.(SAVS0000055960D048))
FREE PACKAGE(SN.YSN111I.(SAVS0000055960D060))
FREE PACKAGE(SN.YSN201I.(SAVS00000559663EDB))
FREE PACKAGE(ER.YERPRI.(EAMR000061))
FREE PACKAGE(SN.YSNB002.(SAVS0000185A5C7C5F))
FREE PACKAGE(DE.YDELSTO.(DE00000066594B8B81))
FREE PACKAGE(WP.YWPR4PX.(DBH000012659B8E9A0MVS))
FREE PACKAGE(MF.YMFC113.(MFR00001495A3298BA))
FREE PACKAGE(HP1.ZADOKRL.(HPSVP2ZADOKRL))
FREE PACKAGE(HP3.ZADOKRL.(HPSVP2ZADOKRL))
FREE PACKAGE(WP.YWPL3P1.(DBH000012659B8E6F0MVS))
FREE PACKAGE(WP.YWPL4P1.(DBH000012659B8E702MVS))
FREE PACKAGE(WP.YWPRBPX.(DBH000012659B8FA95MVS))
FREE PACKAGE(WB.WB0900.(WSTS000061))
FREE PACKAGE(WB.WB0990.(TOFF000122))
FREE PACKAGE(WQ.YWQ5601.(CUBE0001185A522360))
FREE PACKAGE(WQ.YWQ4502.(CUBE0001185A522322))
FREE PACKAGE(DE.DE0490.(DE00000077))
FREE PACKAGE(PC.YPC0570.(IVN00000385A2538BCMVS))
FREE PACKAGE(YX.YXWB021.(WSTS000055594BF1C2MVS))
FREE PACKAGE(WB.YWB5417.(WSTS0000615A39A861MVS))
FREE PACKAGE(VV.YVVZZ12.(VDPS0001185A5DDF82))
FREE PACKAGE(CK.YCKT025.(DCA0000188))
FREE PACKAGE(SV.SV0950.(WSSV000248))
FREE PACKAGE(KR.YKRT385.(VEFO00003458E0E00AMVS))
FREE PACKAGE(WB.WB7880.(WSTS000055))
FREE PACKAGE(SN.YSN120.(SAVS0000055960D067))
FREE PACKAGE(SN.YSN187I.(SAVS0000055960D095))
FREE PACKAGE(SN.YSN110I.(SAVS0000055960D1C4))
FREE PACKAGE(SN.YSND003.(SAVS0000055960CF4C))
FREE PACKAGE(SN.YSND004.(SAVS0000055960CF54))
FREE PACKAGE(SN.YSND005.(SAVS0000055960CF5D))
FREE PACKAGE(SN.YSND014.(SAVS0000055960CFBC))
FREE PACKAGE(SN.YSND015.(SAVS0000055960CFC3))
FREE PACKAGE(SN.YSNI001.(SAVS0000055960CFCC))
FREE PACKAGE(SN.YSN100I.(SAVS0000055960D039))
FREE PACKAGE(SN.YSN101I.(SAVS0000055960D042))
FREE PACKAGE(SN.YSN103I.(SAVS0000055960D050))
FREE PACKAGE(SN.YSND001.(SAVS000005597F4D78))
FREE PACKAGE(WB.YWBDGP.(WS8B0004425950FA22MVS))
FREE PACKAGE(YX.YXWB116.(WSTS000055594BF1B0MVS))
FREE PACKAGE(YY.YYWBESM.(WSTS000055594BF1CCMVS))
FREE PACKAGE(YX.YXWB011.(WSTS000055594BF1D5MVS))
FREE PACKAGE(VW.YVWB641.(WSTS000055594BF359MVS))
FREE PACKAGE(SN.YSNA005.(SAVS00001559F06462))
FREE PACKAGE(SN.SN0200.(SAVS000015))
FREE PACKAGE(SN.YSNI003.(SAVS00001359A58A67))
FREE PACKAGE(WP.YWPL5P1.(DBH000012659B8E717MVS))
FREE PACKAGE(WP.YWPL8P1.(DBH000012659B8E744MVS))
FREE PACKAGE(WP.YWPR2PX.(DBH000012659B8E89CMVS))
FREE PACKAGE(WP.YWPRCPX.(DBH000012659B8FAB2MVS))
FREE PACKAGE(WP.YWPRDPX.(DBH000012659B8FAC3))
FREE PACKAGE(WP.YWPR7PX.(DBH000012659B8FB4BMVS))
FREE PACKAGE(WP.YWPR6PX.(DBH000012659B8FB2EMVS))
FREE PACKAGE(WP.YWPRAPX.(DBH000012659B90365MVS))
FREE PACKAGE(VV.YVVZZ07.(VDPS00011759D24F27MVS))
FREE PACKAGE(EC.YECUCRK.(SYNC00003059D501A0MVS))
FREE PACKAGE(VD.YVDRES.(VDSS00010259D6229C))
FREE PACKAGE(VV.YVV3EIP.(VDPS0001185A68985AMVS))
FREE PACKAGE(TR.YTRHISP.(AITR0000475A11C803MVS))
FREE PACKAGE(VV.YVVZZ32.(VDPS0001185A1E88B5MVS))
FREE PACKAGE(BX.YBXADBR.(CLOS0001835A25007AMVS))
FREE PACKAGE(YY.YYWBERX.(TOFF0001225A39A7DFMVS))
FREE PACKAGE(YX.YXWB231.(WSTS0000615A39A8B6MVS))
FREE PACKAGE(YY.YYWBERR.(WSTS0000615A39A896MVS))
FREE PACKAGE(TN.YTNW100.(CSQS0000075A39A4F1MVS))
FREE PACKAGE(CZ.CZ5280.(KLOM000069))
FREE PACKAGE(YY.YYFIKST.(BKUR0000965A5DE9E3MVS))
FREE PACKAGE(VV.YVVZZ04.(VDPS0001185A5DF2D6MVS))
FREE PACKAGE(WQ.YWQ4501.(CUBE0001295A8BFE05))
FREE PACKAGE(MF.YMFC110.(MFR00001495A5F0CE2))
FREE PACKAGE(WQ.YWQBERI.(CUBE0001295A8BFDDF))
FREE PACKAGE(WB.WB7300.(A06M025453))
FREE PACKAGE(WB.YWBDGP2.(WS8B0004425950FA29MVS))
FREE PACKAGE(VD.VDDBM15.(DSPV000044))
FREE PACKAGE(VV.YVVZZGR.(VDPS0001145947F6A7MVS))
FREE PACKAGE(VV.YVVZZQR.(VDPS000114595120D5MVS))
FREE PACKAGE(VV.YVVZZ27.(VDPS00011759DB8776MVS))
FREE PACKAGE(VV.YVVZZ28.(VDPS00011759EDC6FAMVS))
FREE PACKAGE(VV.YVVZZ23.(VDPS00011759EDC6E4MVS))
FREE PACKAGE(VV.YVVZZ18.(VDPS0001175A017B9CMVS))
FREE PACKAGE(VV.YVVZZ20.(VDPS0001175A017C26MVS))
FREE PACKAGE(WP.YWPRDPX.(DBH000012659B8FAC3MVS))
FREE PACKAGE(VV.YVVZZ14.(VDPS00011759D2568EMVS))
FREE PACKAGE(NL.NL7810.(BALR000074))
FREE PACKAGE(NL.NL7310.(BALR000074))
FREE PACKAGE(VV.YVVZZ33.(VDPS0001745A83012DMVS))
FREE PACKAGE(ER.ER5080.(EAMR000061))
FREE PACKAGE(VV.YVVZZ17.(VDPS0001185A5DEDE3MVS))
FREE PACKAGE(ER.ER8020.(EAMR000069))
FREE PACKAGE(SN.SN5003.(SAVS000005))
FREE PACKAGE(NI.YNIPREU.(IPC000022959F88B30MVS))
FREE PACKAGE(NI.YNIPACU.(IPC000022959F8874AMVS))
FREE PACKAGE(NI01.YNIPACU.(IPC000022959F8874AMVS))
FREE PACKAGE(NI02.YNIPACU.(IPC000022959F8874AMVS))
FREE PACKAGE(MF.MF7550.(MFR0000135))
FREE PACKAGE(SN.YSND012.(SAVS00001359A58A5C))
FREE PACKAGE(SN.YSND013.(SAVS00001359A58A61))
FREE PACKAGE(SN.SN5004.(SAVS000013))
FREE PACKAGE(SN.SN5005.(SAVS000013))
FREE PACKAGE(SN.SN5901.(SAVS000013))
FREE PACKAGE(PC.PC7100.(IVN0000038))
FREE PACKAGE(PC.PC8000.(IVN0000038))
FREE PACKAGE(MF.MF8800.(MFR0000148))
FREE PACKAGE(EC.YECCRAC.(SYNC0000325A2E6436))
FREE PACKAGE(UU.UU5170.(RS20000080))
FREE PACKAGE(YY.YYWBVIN.(WSTS0000615A39A89AMVS))
FREE PACKAGE(PC01.PC5060.(IVN0000038))
FREE PACKAGE(PC02.PC5060.(IVN0000038))
FREE PACKAGE(PC03.PC5060.(IVN0000038))
FREE PACKAGE(PC04.PC5060.(IVN0000038))
FREE PACKAGE(PC05.PC5060.(IVN0000038))
FREE PACKAGE(PC06.PC5060.(IVN0000038))
FREE PACKAGE(PC07.PC5060.(IVN0000038))
FREE PACKAGE(MF.MF7230.(MFR0000148))
FREE PACKAGE(MF.MF8620.(MFR0000148))
FREE PACKAGE(SN.SN5006.(SAVS000018))
FREE PACKAGE(SN.SN6005.(SAVS000018))
FREE PACKAGE(PC.PC5090.(IVN0000038))
FREE PACKAGE(PC.PC5150.(IVN0000038))
FREE PACKAGE(CZ.YCZM435.(BEWI00002658E13572MVS))
FREE PACKAGE(WP.YWPR1QX.(DBH000012659B8E877MVS))
FREE PACKAGE(ER.YERDUPD.(EAMR00004859BAAA26))
FREE PACKAGE(YY.YYDB2FK.(TOFF00011259D3E46AMVS))
FREE PACKAGE(PC01.YPC0520.(IVN00000385A2535B3MVS))
FREE PACKAGE(PC02.YPC0520.(IVN00000385A2535B3MVS))
FREE PACKAGE(PC03.YPC0520.(IVN00000385A2535B3MVS))
FREE PACKAGE(PC04.YPC0520.(IVN00000385A2535B3MVS))
FREE PACKAGE(PC05.YPC0520.(IVN00000385A2535B3MVS))
FREE PACKAGE(PC06.YPC0520.(IVN00000385A2535B3MVS))
FREE PACKAGE(PC07.YPC0520.(IVN00000385A2535B3MVS))
FREE PACKAGE(CK.YCKT020.(DCA0000188))
FREE PACKAGE(PC01.YPC0830.(IVN00000385A5B39A6MVS))
FREE PACKAGE(PC02.YPC0830.(IVN00000385A5B39A6MVS))
FREE PACKAGE(PC03.YPC0830.(IVN00000385A5B39A6MVS))
FREE PACKAGE(PC04.YPC0830.(IVN00000385A5B39A6MVS))
FREE PACKAGE(PC05.YPC0830.(IVN00000385A5B39A6MVS))
FREE PACKAGE(PC06.YPC0830.(IVN00000385A5B39A6MVS))
FREE PACKAGE(PC07.YPC0830.(IVN00000385A5B39A6MVS))
FREE PACKAGE(WB.YWBITV.(TOFF00011259D3E350MVS))
FREE PACKAGE(WP.YWPR3PX.(DBH000012659B8E97FMVS))
FREE PACKAGE(VD.VDREC00.(DSPV000042))
FREE PACKAGE(VD.VDDBM04.(DSPV000042))
FREE PACKAGE(VD.YVDDFA.(DSPV00004459AE7FA5MVS))
FREE PACKAGE(VD.VDDBM01.(DSPV000044))
FREE PACKAGE(VD.VDINI01.(DSPV000044))
FREE PACKAGE(VV.YVVZZ05.(VDPS00011759D36248MVS))
FREE PACKAGE(VD.VDGLH00.(DSPV000050))
FREE PACKAGE(VV.YVVZZ3R.(VDPS0001185A5DDB06MVS))
FREE PACKAGE(VV.YVVZZ12.(VDPS0001185A5DDF82MVS))
FREE PACKAGE(WP.YWPR6PX.(DBH00000835872A791))
FREE PACKAGE(VV.YVVZZ16.(VDPS00011759D3AED0MVS))
FREE PACKAGE(VV.YVVZZ16.(VDPS00011759D3AED0))
FREE PACKAGE(VV.YVVZZ22.(VDPS00011759EDC6D8MVS))
FREE PACKAGE(HP1.AB70RG.(HPSVP2AB70RG))
FREE PACKAGE(HP3.AB70RG.(HPSVP2AB70RG))
FREE PACKAGE(HP1.AOBWRI.(HPSVP2AOBWRI))
FREE PACKAGE(HP3.AOBWRI.(HPSVP2AOBWRI))
FREE PACKAGE(HP1.AOBARI.(HPSVP2AOBARI))
FREE PACKAGE(HP3.AOBARI.(HPSVP2AOBARI))
FREE PACKAGE(HP1.AOCLRI.(HPSVP2AOCLRI))
FREE PACKAGE(HP3.AOCLRI.(HPSVP2AOCLRI))
FREE PACKAGE(WP.YWPR7PX.(DBH00000835872A809))
FREE PACKAGE(ER.YERDGET.(EAMR00004859B7AC83MVS))
FREE PACKAGE(ER.YERDCUR.(EAMR0000615A5F2EBCMVS))
FREE PACKAGE(ER.YERDINS.(EAMR00003559186E95MVS))
FREE PACKAGE(HP1.ALS0RI.(HPSVP2ALS0RI))
FREE PACKAGE(HP3.ALS0RI.(HPSVP2ALS0RI))
FREE PACKAGE(HP1.ALSZRI.(HPSVP2ALSZRI))
FREE PACKAGE(HP3.ALSZRI.(HPSVP2ALSZRI))
FREE PACKAGE(SN.SN6006.(SAVS000018))
FREE PACKAGE(HB.YHBK011.(ASIA00013259B6A096))
FREE PACKAGE(VV.YVVZZ19.(VDPS0001185A1E888B))
FREE PACKAGE(LC.YLCTF02.(TFBM0000375A26E226))
FREE PACKAGE(DE.DE0060.(DE00000077))
FREE PACKAGE(CZ.YCZT397.(GSER00017058D3A132))
FREE PACKAGE(YY.YYWBPRI.(WSTS000055594BF0FFMVS))
FREE PACKAGE(YY.YYWBERX.(TOFF0001225A39A7DF))
FREE PACKAGE(EQ.YEQISRK.(EAGL00002459DCE1D0MVS))
FREE PACKAGE(DE.YDE0021.(DE000000775A53475EMVS))
FREE PACKAGE(DE.DE0100.(DE00000077))
FREE PACKAGE(CZ.YCZJ323.(GSER00017058D7E6D6MVS))
FREE PACKAGE(CZ.YCZT435.(BEWI00002658E1347CMVS))
FREE PACKAGE(VV.YVVZZ10.(VDPS00011759E342BEMVS))
FREE PACKAGE(VV.YVVZZ07.(VDPS00011759D24F27))
FREE PACKAGE(WF.YWFM537.(WSSW0001055A2EA204MVS))
FREE PACKAGE(WQ.YWQEXCP.(CUBE0001185A52216F))
FREE PACKAGE(VV.YVVZZ14.(VDPS0001185A1E887D))
FREE PACKAGE(VV.YVVZZ11.(VDPS0001185A5DED1EMVS))
FREE PACKAGE(FI.YFI0110.(BKUR0000965A5DE7BDMVS))
FREE PACKAGE(CZ.YCZT328.(GSER00017058D39F5FMVS))
FREE PACKAGE(GM.YGMSTEU.(GM000001605A2E77C8MVS))
FREE PACKAGE(CZ.YCZT397.(GSER00017058D3A132MVS))
FREE PACKAGE(CZ.YCZJ431.(GSER00017058D7E73DMVS))
FREE PACKAGE(VV.YVVZZ09.(VDPS0001185A1E8862MVS))
FREE PACKAGE(VV.YVVZZAR.(VDPS00011459426A66MVS))
FREE PACKAGE(VV.YVVZZNR.(VDPS0001145947F723MVS))
FREE PACKAGE(VV.YVVZZ29.(VDPS00011759EDC703MVS))
FREE PACKAGE(VV.YVVZZ31.(VDPS00011759D26946MVS))
FREE PACKAGE(VV.YVVZZ27.(VDPS0001185A1E889E))
FREE PACKAGE(VV.YVVZZ25.(VDPS0001185A1E8896MVS))
FREE PACKAGE(MF.MF7770.(MFR0000148))
FREE PACKAGE(FI.YFI0120.(BKUR0000965A5DE7D4MVS))
FREE PACKAGE(VV.YVVZZ11.(VDPS0001185A5DED1E))
FREE PACKAGE(VV.YVVZZ15.(VDPS00011759EDC6CAMVS))
FREE PACKAGE(VV.YVVZZ13.(VDPS0001185A37A9AAMVS))
FREE PACKAGE(GM.GM7910.(GM00000160))
FREE PACKAGE(CZ.YCZT328.(GSER00017058D39F5F))
FREE PACKAGE(WP.YWPR1PX.(DBH000012659B8E86BMVS))
FREE PACKAGE(HP1.RWBW050.(HPSVP2RWBW050))
FREE PACKAGE(HP3.RWBW050.(HPSVP2RWBW050))
FREE PACKAGE(ER.YERDINS.(EAMR00003559186E95))
FREE PACKAGE(ER.YERDCUR.(EAMR0000615A5F2EBC))
FREE PACKAGE(ER.YERDGET.(EAMR00004859B7AC83))
FREE PACKAGE(HP1.RWBT008.(HPSVP2RWBT008))
FREE PACKAGE(HP3.RWBT008.(HPSVP2RWBT008))
FREE PACKAGE(VV.YVVZZ21.(VDPS0001185A1E8890MVS))
FREE PACKAGE(KR.YKRT511.(KAUF00004059DA50DA))
FREE PACKAGE(HP1.AGX3RB.(HPSVP2AGX3RB))
FREE PACKAGE(HP3.AGX3RB.(HPSVP2AGX3RB))
FREE PACKAGE(HP1.RWBZ010.(HPSVP2RWBZ010))
FREE PACKAGE(HP3.RWBZ010.(HPSVP2RWBZ010))
FREE PACKAGE(HP1.RWBZ050.(HPSVP2RWBZ050))
FREE PACKAGE(HP3.RWBZ050.(HPSVP2RWBZ050))
FREE PACKAGE(VV.YVVZZ08.(VDPS00011759EDC6B6))
FREE PACKAGE(CZ.YCZT235.(GSER00017058D39E3D))
FREE PACKAGE(HP1.RWBP032.(HPSVP2RWBP032))
FREE PACKAGE(HP3.RWBP032.(HPSVP2RWBP032))
FREE PACKAGE(HPS.RWBP026.(HPSVP2RWBP026))
FREE PACKAGE(HP1.RWBP026.(HPSVP2RWBP026))
FREE PACKAGE(HP3.RWBP026.(HPSVP2RWBP026))
FREE PACKAGE(CZ.YCZMLIM.(KLOM0000695A2956D9))
FREE PACKAGE(EQ.YEQKDGP.(GSER00018759C91710MVS))
FREE PACKAGE(TN.YTNW100.(CSQS0000075A39A4F1))
FREE PACKAGE(HBDTEST.YVVZZ04.(VDPS0001185A5DF2D6))
FREE PACKAGE(VV.YVVZZ04.(VDPS0001185A5DF2D6))
FREE PACKAGE(WP.YWPLEP1.(DBH000012659B8F8B5MVS))
FREE PACKAGE(WB.YWB551.(WS8B0005185A39AE85MVS))
FREE PACKAGE(CZ.YCZT385.(GSER00017058D3A09CMVS))
FREE PACKAGE(CZ.YCZT235.(GSER00017058D39E3DMVS))
FREE PACKAGE(KR.YKRT511.(KAUF00004059DA50DAMVS))
FREE PACKAGE(EQ.YEQISRK.(EAGL00002459DCE1D0))
FREE PACKAGE(CZ.YCZMLIM.(KLOM0000695A2956D9MVS))
FREE PACKAGE(WF.YWFCB02.(WSSW0001055A2E9AD7MVS))
FREE PACKAGE(WB.YWB551.(WS8B0005185A39AE85))
FREE PACKAGE(VV.YVVZZ24.(VDPS00011759EDC6EDMVS))
FREE PACKAGE(YY.YYWBPRI.(WSTS000055594BF0FF))
FREE PACKAGE(WP.YWPL2P1.(DBH000012659B91C6CMVS))
FREE PACKAGE(HPS.AKEGRI.(HPSVP2AKEGRI))
FREE PACKAGE(HP1.AKEGRI.(HPSVP2AKEGRI))
FREE PACKAGE(LC.LC0511I.(TFBM00003359C2729F))
FREE PACKAGE(HP1.AOYQRK.(HPSVP2AOYQRK))
FREE PACKAGE(HP3.AOYQRK.(HPSVP2AOYQRK))
FREE PACKAGE(HP1.AOAVRI.(HPSVP2AOAVRI))
FREE PACKAGE(HP3.AOAVRI.(HPSVP2AOAVRI))
FREE PACKAGE(HP1.AOBPRI.(HPSVP2AOBPRI))
FREE PACKAGE(HP3.AOBPRI.(HPSVP2AOBPRI))
FREE PACKAGE(HP1.RWBW058.(HPSVP2RWBW058))
FREE PACKAGE(HP3.RWBW058.(HPSVP2RWBW058))
$#out 20100623 14:55:08
}¢--- A540769.WK.REXX.O13(DRDALASC) cre=2010-06-23 mod=2010-06-23-14.27.58 A540769 ---
call sqlConnect DBOC
se = "select translate('789A4512', char(lastUsed), '123456789A')"
wh = 'where pck_id = ? and PCK_CONSIST_TOKEN = ?'
call sqlPrepare 1, se 'from RZ2.TACCT_PKGUSED' wh
call sqlPrepare 2, se 'from RR2.TACCT_PKGUSED' wh
st = 0
$;
$<A540769.WK.REXX(DRDACOMP) $>A540769.WK.TEXW(DRDALASC)
$@for li $@¢
if abbrev($li, $'$#out') then do
if st = 1 then
leave
st = 1
iterate
end
if st = 0 then
iterate
parse value $li with vo con coll pkg vers .
/* say 'vo' vo 'con' con 'coll' coll 'pkg' pkg 'vers' vers'|' */
prod = left('00never', 8)
pta = prod
call sqlOpen 1, pkg, con
call sqlFetchInto 1, ':prod'
call sqlClose 1
call sqlOpen 2, pkg, con
call sqlFetchInto 2, ':pta'
call sqlClose 2
$$- prod pta $li
$!
call sqlDisconnect
$#out 20100623 14:27:12
$#out 20100623 14:15:35
$#out 20100623 12:29:54
$#out 20100621 14:14:38
$#out 20100623 12:26:49
never never NY 164DE2480C0C3FEF A1P CI8520 A12M001522
never never NY 164E114300A2F5AF A1P CI8520 A12M001531
never never NY 1655E97B1D4F063E A1P CI8520 A12M001797
never never NN 15C5EB241FB02C12 A1P KD0500 19970207084703S101702A06140
never never NN 1615EEB7011D2F50 A1P KD0540 19980701134213S101702A07336
never never NN 161878261BA05DF7 A1P KD0540 19980717170619S101702Z38326
never never NN 161A571710CA3A50 A1P KD0540 CRMC000003
never never NY 168970141A69707D A1P KS5310 A13X000472
never never NY 16958203060813AF A1P KS5310 A13X000591
never never NY 169F460705B0D87F A1P KS5310 A13X000651
never never NY 16882B0B0AD331E7 A1P KS5320 A13X000532
never never NY 167AFE2009CED156 A1P KS5320 A13X000536
never never NY 169582050BAA22D4 A1P KS5320 A13X000591
never never NY 1687667206659803 A1P KS5330 A13X000546
never never NY 16BCF7E30CCDA0BA A1P KS5330 A13X000735
never never NY 16BE63EE1EE8EF03 A1P KS5330 A13X000740
never never NY 16BA31CF077C15DB A1P KS5780 A13X000732
never never NY 16BE63E31073D6CF A1P KS5780 A13X000740
never never NY 16C0A07C10EB4AFD A1P KS5780 A13X000746
never never NY 16BA31E4006FBFBF A1P KS5800 A13X000732
never never NY 16BE63E213025363 A1P KS5800 A13X000740
never never NY 16C0A0810A5B6988 A1P KS5800 A13X000746
never never NY 16A152110B9FF6A6 A1P PARTANA1 A18Q000804
never never NY 164516BC0D280818 A1P RR8420 CRMA000539
never never NY 1648353F07EC4E1F A1P RR8420 CRMA000574
never never NY 166D04F50F6980D8 A1P RR8420 CRMA001016
never never NY 165CB0F905C59250 A1P XP8600 CRME000264
never never NY 165D75940B31D4EC A1P XP8600 CRME000268
never never NY 165D8AE21837148F A1P XP8600 CRME000269
never never NY 1676EF371EFB3B51 A1P YCI009 A12M002427
never never NY 1676EF371BB2AF9C A1P YCI009A A12M002427
never never NN 15FF2F5A02CF9692 A1P YECGRI 19980206175312S101702A07022
never never NN 160041540F0188B0 A1P YECGRI 19980213132027S101702A07042
never never NN 1604875E13ACF042 A1P YECGRI 19980312175705S101702A07099
never never NN 15C5EB1509074F78 A1P YKD0500 19970207084459S101702A0614
never never NN 15C7FD8D1B047776 A1P YKD0500 19970220131055S101702A0618
never never NN 15CD85F103D59AAC A1P YKD0500 19970327180544S101702A0627
never never NN 15E37FE91C7B23D4 A1P YKD0500 19970814140402S101702M0008
never never NN 15E6CEF11FA4B640 A1P YKD0500 19970904152318S101702A0660
never never NN 15E88BA11939633E A1P YKD0500 19970915163933S101702A0668
never never NN 15E8FE3F13644320 A1P YKD0500 19970918130127S101702A0668
never never NN 15F2EEB91D073CD8 A1P YKD0500 19971120185108S101702M0008
never never NN 15F3646E1EA25C0A A1P YKD0500 19971123170525S101702Z3461
never never NN 15F3662E1D147D34 A1P YKD0500 19971123180702S101702Z3461
never never NN 15F369CE0D0F47CA A1P YKD0500 19971123194631S101702Z3461
never never NN 15F3AC9012C73DA2 A1P YKD0500 19971125120634S101702Z3467
never never NN 15F51AAE092A4BFA A1P YKD0500 19971204142946S101702Z3488
never never NN 15F5E973080E51E4 A1P YKD0500 19971209175158S101702Z3496
never never NN 15F603781AF2232E A1P YKD0500 19971210092215S101702Z3497
never never NN 15FBBA170A2A671E A1P YKD0500 19980115174941S101702M0008
never never NN 15FF2F5D15AE1F82 A1P YKD0500 19980206175332S101702A0702
never never NN 1600415710BDCF88 A1P YKD0500 19980213132025S101702A0704
never never NN 16048755010B03D8 A1P YKD0500 19980312175740S101702A0709
never never NN 1607F2CF0A1FA4F4 A1P YKD0500 19980403141032S101702A0714
never never NN 160A06261A472F65 A1P YKD0500 19980416190530S101702M0008
never never NN 1612E4F30FCA96DA A1P YKD0500 19980612054559S101702M0009
never never NN 161310A30C678722 A1P YKD0500 19980613074807S101702Z3786
never never NN 1613E4AC0B090F20 A1P YKD0500 19980618141748S101702A0732
never never NN 1615EAC01A922BBA A1P YKD0500 19980701111931S101702A0733
never never NN 1615EEA60F9DED86 A1P YKD0500 19980701133922S101702A0733
never never NN 16161DF5150335D8 A1P YKD0500 19980702175321S101702Z3817
never never NN 161731E90D5CB082 A1P YKD0500 19980709142935S101702A0737
never never NN 16187CA10D0C1682 A1P YKD0500 19980717194602S101702Z3832
never never NN 161D4EAD04459518 A1P YKD0500 CRMA000067
never never NN 162D33470952FFA6 A1P YKD0500 CRMA000128
never never NN 161B18A00CA11C64 A1P YKD0500 CRMC000003
never never NN 162D5C5A0908A3AD A1P YKD0500 CRMD000263
never never NN 162E4AD31D2BD121 A1P YKD0500 CRMD000281
never never NN 162E6FE715DC4FF4 A1P YKD0500 CRMD000283
never never NY 1613E56F1740210C A1P YKS0813 19980618144536S101702A0732
never never NY 163491EB01FDB20E A1P YKS0813 A13X000041
never never NY 1646550719DBBDAC A1P YKS0813 A13X000301
never never NY 165330C00D7AB867 A1P YKS0813 A13X000352
never never NY 16513271056C9880 A1P YKS0813 A13X000362
never never NY 166D9AB11FA33E50 A1P YKS0813 A13X000436
never never NY 1677859011B643E5 A1P YKS0813 A13X000508
never never NY 1676E88707F1D935 A1P YKS0813 A13X000530
never never NY 1695821F098DD6EA A1P YKS0813 A13X000591
never never NY 1630A9DA12572F56 A1P YKS5551 A13X000153
never never NY 1634B7A00A6AC118 A1P YKS5551 A13X000155
never never NY 163745B70B5F6610 A1P YKS5551 A13X000177
never never NY 163E846315E5EFF5 A1P YKS5551 A13X000194
never never NY 1640FE87029F28D2 A1P YKS5551 A13X000269
never never NY 164AE8141397EFC6 A1P YKS5551 A13X000321
never never NY 165243271B36AE1D A1P YKS5551 A13X000368
never never NY 16932BF11BF1D6FA A1P YKS5551 A13X000597
never never NY 1630A9DF1565AD62 A1P YKS5552 A13X000153
never never NY 1634B7A9147E2684 A1P YKS5552 A13X000155
never never NY 16932C9D020E69F9 A1P YKS5552 A13X000597
never never NY 1630A9E30D269CF6 A1P YKS5553 A13X000153
never never NY 1634B7A21AFC2256 A1P YKS5553 A13X000155
never never NY 163745CE170BF742 A1P YKS5553 A13X000177
never never NY 163AE0290CA67CFE A1P YKS5553 A13X000194
never never NY 1640DDA6001FB321 A1P YKS5553 A13X000249
never never NY 1643CD8D13A137CA A1P YKS5553 A13X000279
never never NY 16501614117EAAEE A1P YKS5553 A13X000339
never never NY 16932C4511DF1A14 A1P YKS5553 A13X000597
never never NY 164445390715E376 A1P YSAT058 A16M000359
never never NN 15F2EEB81F753348 A1P YYECGRI 19971120185114S101702M0008
never never NN 15F369CC0439D86A A1P YYECGRI 19971123194631S101702Z3461
never never NN 15F519F619C6885F A1P YYECGRI 19971204140411S101702Z3488
never never NN 15FBB9F00F950012 A1P YYECGRI 19980115174545S101702M0008
never never NY 164DE2480C0C3FEF A2P CI8520 A12M001522
never never NY 164E114300A2F5AF A2P CI8520 A12M001531
never never NY 1655E97B1D4F063E A2P CI8520 A12M001797
never never NN 15C467A81072B294 A2P FD0350 19970128173847S101702Z29337
never never NN 15CFB3DA0DA10990 A2P FD0350 19970410145407S101702A06297
never never NN 160041A1013AD3F8 A2P FD0350 19980213133248S101702A07046
never never NN 15C5EB241FB02C12 A2P KD0500 19970207084703S101702A06140
never never NN 1615EEB7011D2F50 A2P KD0540 19980701134213S101702A07336
never never NN 161878261BA05DF7 A2P KD0540 19980717170619S101702Z38326
never never NN 161A571710CA3A50 A2P KD0540 CRMC000003
never never NY 168970141A69707D A2P KS5310 A13X000472
never never NY 16958203060813AF A2P KS5310 A13X000591
never never NY 169F460705B0D87F A2P KS5310 A13X000651
never never NY 16882B0B0AD331E7 A2P KS5320 A13X000532
never never NY 167AFE2009CED156 A2P KS5320 A13X000536
never never NY 169582050BAA22D4 A2P KS5320 A13X000591
never never NY 1687667206659803 A2P KS5330 A13X000546
never never NY 16BCF7E30CCDA0BA A2P KS5330 A13X000735
never never NY 16BE63EE1EE8EF03 A2P KS5330 A13X000740
never never NY 16BA31CF077C15DB A2P KS5780 A13X000732
never never NY 16BE63E31073D6CF A2P KS5780 A13X000740
never never NY 16C0A07C10EB4AFD A2P KS5780 A13X000746
never never NY 16BA31E4006FBFBF A2P KS5800 A13X000732
never never NY 16BE63E213025363 A2P KS5800 A13X000740
never never NY 16C0A0810A5B6988 A2P KS5800 A13X000746
never never NY 164B053E00772199 A2P RR8270 CRMA000504
never never NY 166D04ED01A34479 A2P RR8270 CRMA001016
never never NY 164516BC0D280818 A2P RR8420 CRMA000539
never never NY 1648353F07EC4E1F A2P RR8420 CRMA000574
never never NY 166D04F50F6980D8 A2P RR8420 CRMA001016
never never NY 165CB0F905C59250 A2P XP8600 CRME000264
never never NY 165D75940B31D4EC A2P XP8600 CRME000268
never never NY 165D8AE21837148F A2P XP8600 CRME000269
never never NY 1676EF371EFB3B51 A2P YCI009 A12M002427
never never NY 1676EF371BB2AF9C A2P YCI009A A12M002427
never never NN 15FF2F5A02CF9692 A2P YECGRI 19980206175312S101702A07022
never never NN 160041540F0188B0 A2P YECGRI 19980213132027S101702A07042
never never NN 1604875E13ACF042 A2P YECGRI 19980312175705S101702A07099
never never NN 15C5EB1509074F78 A2P YKD0500 19970207084459S101702A0614
never never NN 15C7FD8D1B047776 A2P YKD0500 19970220131055S101702A0618
never never NN 15CD85F103D59AAC A2P YKD0500 19970327180544S101702A0627
never never NN 15E37FE91C7B23D4 A2P YKD0500 19970814140402S101702M0008
never never NN 15E6CEF11FA4B640 A2P YKD0500 19970904152318S101702A0660
never never NN 15E88BA11939633E A2P YKD0500 19970915163933S101702A0668
never never NN 15E8FE3F13644320 A2P YKD0500 19970918130127S101702A0668
never never NN 15F2EEB91D073CD8 A2P YKD0500 19971120185108S101702M0008
never never NN 15F3646E1EA25C0A A2P YKD0500 19971123170525S101702Z3461
never never NN 15F3662E1D147D34 A2P YKD0500 19971123180702S101702Z3461
never never NN 15F369CE0D0F47CA A2P YKD0500 19971123194631S101702Z3461
never never NN 15F3AC9012C73DA2 A2P YKD0500 19971125120634S101702Z3467
never never NN 15F51AAE092A4BFA A2P YKD0500 19971204142946S101702Z3488
never never NN 15F5E973080E51E4 A2P YKD0500 19971209175158S101702Z3496
never never NN 15F603781AF2232E A2P YKD0500 19971210092215S101702Z3497
never never NN 15FBBA170A2A671E A2P YKD0500 19980115174941S101702M0008
never never NN 15FF2F5D15AE1F82 A2P YKD0500 19980206175332S101702A0702
never never NN 1600415710BDCF88 A2P YKD0500 19980213132025S101702A0704
never never NN 16048755010B03D8 A2P YKD0500 19980312175740S101702A0709
never never NN 1607F2CF0A1FA4F4 A2P YKD0500 19980403141032S101702A0714
never never NN 160A06261A472F65 A2P YKD0500 19980416190530S101702M0008
never never NN 1612E4F30FCA96DA A2P YKD0500 19980612054559S101702M0009
never never NN 161310A30C678722 A2P YKD0500 19980613074807S101702Z3786
never never NN 1613E4AC0B090F20 A2P YKD0500 19980618141748S101702A0732
never never NN 1615EAC01A922BBA A2P YKD0500 19980701111931S101702A0733
never never NN 1615EEA60F9DED86 A2P YKD0500 19980701133922S101702A0733
never never NN 16161DF5150335D8 A2P YKD0500 19980702175321S101702Z3817
never never NN 161731E90D5CB082 A2P YKD0500 19980709142935S101702A0737
never never NN 16187CA10D0C1682 A2P YKD0500 19980717194602S101702Z3832
never never NN 161D4EAD04459518 A2P YKD0500 CRMA000067
never never NN 162D33470952FFA6 A2P YKD0500 CRMA000128
never never NN 161B18A00CA11C64 A2P YKD0500 CRMC000003
never never NN 162D5C5A0908A3AD A2P YKD0500 CRMD000263
never never NN 162E4AD31D2BD121 A2P YKD0500 CRMD000281
never never NN 162E6FE715DC4FF4 A2P YKD0500 CRMD000283
never never NY 16BA30A41C0F6F67 A2P YKS0801 A13X000702
never never NY 16C07605061FBB71 A2P YKS0801 A13X000736
never never NY 1613E56F1740210C A2P YKS0813 19980618144536S101702A0732
never never NY 163491EB01FDB20E A2P YKS0813 A13X000041
never never NY 1646550719DBBDAC A2P YKS0813 A13X000301
never never NY 165330C00D7AB867 A2P YKS0813 A13X000352
never never NY 16513271056C9880 A2P YKS0813 A13X000362
never never NY 166D9AB11FA33E50 A2P YKS0813 A13X000436
never never NY 1677859011B643E5 A2P YKS0813 A13X000508
never never NY 1676E88707F1D935 A2P YKS0813 A13X000530
never never NY 1695821F098DD6EA A2P YKS0813 A13X000591
never never NY 1630A9DA12572F56 A2P YKS5551 A13X000153
never never NY 1634B7A00A6AC118 A2P YKS5551 A13X000155
never never NY 163745B70B5F6610 A2P YKS5551 A13X000177
never never NY 163E846315E5EFF5 A2P YKS5551 A13X000194
never never NY 1640FE87029F28D2 A2P YKS5551 A13X000269
never never NY 164AE8141397EFC6 A2P YKS5551 A13X000321
never never NY 165243271B36AE1D A2P YKS5551 A13X000368
never never NY 16932BF11BF1D6FA A2P YKS5551 A13X000597
never never NY 1630A9DF1565AD62 A2P YKS5552 A13X000153
never never NY 1634B7A9147E2684 A2P YKS5552 A13X000155
never never NY 16932C9D020E69F9 A2P YKS5552 A13X000597
never never NY 1630A9E30D269CF6 A2P YKS5553 A13X000153
never never NY 1634B7A21AFC2256 A2P YKS5553 A13X000155
never never NY 163745CE170BF742 A2P YKS5553 A13X000177
never never NY 163AE0290CA67CFE A2P YKS5553 A13X000194
never never NY 1640DDA6001FB321 A2P YKS5553 A13X000249
never never NY 1643CD8D13A137CA A2P YKS5553 A13X000279
never never NY 16501614117EAAEE A2P YKS5553 A13X000339
never never NY 16932C4511DF1A14 A2P YKS5553 A13X000597
never never NY 164445390715E376 A2P YSAT058 A16M000359
never never NY 16435A6F11693957 A2P YSAT061 A16M000359
never never NN 15F2EEB81F753348 A2P YYECGRI 19971120185114S101702M0008
never never NN 15F369CC0439D86A A2P YYECGRI 19971123194631S101702Z3461
never never NN 15F519F619C6885F A2P YYECGRI 19971204140411S101702Z3488
never never NN 15FBB9F00F950012 A2P YYECGRI 19980115174545S101702M0008
never never NY 150316DB1D65BC0E AC YACM002
never never NY 1535B571062A8382 AC YACM002 19940804182728S101702A03620
never never NY 15722F7818523CAA AL AL7501 19950824S101702A047042AAL750
never never NY 1583CDBC12FD69C8 AL AL7501 19951214S101702A050076AAL750
never never NY 17C52B9F140DD234 AN ANNA001 CIIN000149MVS
never never NY 17C9C23B0EA9675A AS AS0100 KABG000030
never never NY 17D3559116861C28 AS AS0100 KABG000032
never never NY 17E1A51A17E0F50C AS AS0100 KABG000038
never never NY 17D3558A0C154045 AS AS0101I KABG0000325702815B
never never NY 17C9C23C12AF79BC AS AS0610 KABG000030
never never NY 17D3559519C2E6E1 AS AS0610 KABG000032
never never NY 160E69CA19939C46 AS AS8992 19980514171537S101702M000860
never never NY 161B932817CAEAAE AS AS8992 A15T000038
never never NY 1641EA5C07BD0976 AT AT0090 A12M001166
never never NY 16701F2E068440B8 AT AT0090 A20Y000239
never never NY 1684DF0C1CAAE6CA AT AT0090 A20Y000364
never never NY 169584351662C65F AT AT0100 A20Y000431
never never NN 161752A819909F4A AT AT7010 19980710095644S101702Z382648
never never NN 1617536E04B0F3C2 AT AT7010 19980710102939S101702Z382654
never never NN 159216F71F876EB6 AT AT7060 19960314140003S101702A052607
never never NN 15967D67056F4424 AT AT7060 19960411135637S101702A053258
never never NN 15B897D016771B92 AT AT7060 19961114135124S101702A058435
never never NN 15E497E61F0D4E14 AT AT7200 19970821130820S101702A065919
never never NY 16804E200C818C3D AT AT7222 A20Y000328
never never NY 167052EB121BF030 AT AT7224 A20Y000111
never never NY 16804E280E27D697 AT AT7224 A20Y000328
never never NY 160E69CD130FE694 AT AT7225 19980514171958S101702A072293
never never NY 16804E4C09EB407F AT AT7225 A20Y000328
never never NY 1644F3CA173A61B0 AT AT8100 A12M001144
never never NY 1648DBBC02AB08EC AT AT8100 A12M001366
never never NY 164F2A4B0F8D30EC AT AT8100 A12M001566
never never NN 159F4AC31EED2BB6 AT AT9000 19960606140803S101702A054557
never never NN 16124BD61907BF70 AT AT9000 19980608102520S101702Z377704
never never NN 1612799103DC119E AT AT9000 19980609134214S101702Z377955
never never NN 159F4AC41BD178A0 AT AT9002 19960606140805S101702A054557
never never NN 159F4AC31F9F0C82 AT AT9010 19960606140801S101702A054557
never never NY 157B028C0F2080C4 AT YAT7010 19951019S101702A047927AYAT7
never never NY 157F16DF06FB2C46 AT YAT7010 19951114S101702Z218883AYAT7
never never NY 15807BE3061C6BE0 AT YAT7010 19951123S101702A049711AYAT7
never never NY 15AD972311C5029A AT YAT7010 19960905133829S101702A05675
never never NY 17ECA23A0C6EB668 AU YAU180F AURA00005057D6BBB7
never never NY 17ECA23B1FBFA9C1 AU YAU180U AURA00005057D6BBC5
never never NY 17ECA23E0FABF3D8 AU YAU181F AURA00005057D6BBD9
never never NY 17ECA23F0E1D66B0 AU YAU181U AURA00005057D6BBE0
never never NY 17ECA2450050B44A AU YAU190F AURA00005057D6BC0A
never never NY 17ECA245060F76D6 AU YAU190U AURA00005057D6BC0D
never never NY 17ECA2470B09C3B9 AU YAU191F AURA00005057D6BC1D
never never NY 17ECA2481CF2F5C5 AU YAU191U AURA00005057D6BC27
never never NY 181D086E1A4ECCC0 AV AV8710 PMRT000087
never never NY 17C9679213BF125F AV AV8730 PMRT000038
never never NY 17D3270F03D52A4A AV AV8730 PMRT000047
never never NY 17E0D3341267EA4F AV AV8730 PMRT000051
never never NY 17F01A1317E6CC4B AV AV8730 PMRT000061
never never NY 15AEB8D707346442 AV AV8760 19960912182612S101702M000659
never never NY 15DE01241F8A2456 AV AV8780 19970710145440S101702M000721
never never NY 160E86341A290D7D AV AV8780 19980515101750S101702M000839
never never NN 16175AA10B3A7C03 AV AV8810 19980710144536S101702M000841
never never NY 15F1CDA61F5655E8 AV PB7100 19971113142535S101702A068238
never never NY 160C09871F9001F2 AV PB7100 19980429143617S101702Z372375
never never NY 15FCCE141AF5E25E AV YAV0491 19980122142900S101702M00088
never never NY 16001B8F0EA53D76 AV YAV0491 19980212144909S101702M00083
never never NY 1600B3EE11290746 AV YAV0491 19980216094309S101702Z36000
never never NY 1600BF7D1404B85A AV YAV0491 19980216163702S101702Z36000
never never NY 1600CAFD18A258AA AV YAV0491 19980216232923S101702Z36000
never never NY 1600EBE8145E9F50 AV YAV0491 19980217190729S101702Z36061
never never NY 16010E541A175F54 AV YAV0491 19980218153923S101702Z36082
never never NY 16013C930285B008 AV YAV0491 19980219191321S101702A07058
never never NY 16024C24072CD91A AV YAV0491 19980226131304S101702A07068
never never NY 16036E7B169C9BD6 AV YAV0491 19980305182245S101702M00083
never never NY 160527120CD1FE62 AV YAV0491 19980316171545S101702Z36500
never never NY 16059D8E01DEE026 AV YAV0491 19980319155434S101702M00089
never never NY 1607CCAC09C7A50C AV YAV0491 19980402152529S101702A07145
never never NY 1607D0CE0B4721CA AV YAV0491 19980402174755S101702A07145
never never NY 160A0CBE1D77D87E AV YAV0491 19980416230442S101702M00083
never never NY 160A27690E1AAF44 AV YAV0491 19980417145713S101702M00083
never never NY 160F546B090D6BAA AV YAV0491 19980520132114S101702M00091
never never NY 1612CDA703B93646 AV YAV0491 19980611154441S101702M00084
never never NY 1613B369128241CA AV YAV0491 19980617085448S101702Z37943
never never NY 1613E6D00583D5FF AV YAV0491 19980618153333S101702A07282
never never NY 1613EA7F03A57AF7 AV YAV0491 19980618174545S101702A07282
never never NY 15FC7C8015088BF0 AV YAV0492 19980120134946S101702Z35621
never never NY 15FCCE141FD171CA AV YAV0492 19980122142900S101702M00088
never never NY 16001B8E18CF2BEC AV YAV0492 19980212144910S101702M00083
never never NY 1600B3EE109EBF4E AV YAV0492 19980216094354S101702Z36000
never never NY 1600EBED0F410816 AV YAV0492 19980217190815S101702Z36061
never never NY 16013C910AA3ADF6 AV YAV0492 19980219191324S101702A07058
never never NY 16024C2203916548 AV YAV0492 19980226131307S101702A07068
never never NY 16036EA9020D1582 AV YAV0492 19980305182323S101702M00083
never never NY 1605271C18775376 AV YAV0492 19980316171625S101702Z36500
never never NY 16059D8F01CA216B AV YAV0492 19980319155435S101702M00089
never never NY 1607CCAE0F0B319A AV YAV0492 19980402152532S101702A07145
never never NY 1607D0A60D2960CC AV YAV0492 19980402174757S101702A07145
never never NY 160A0CBF09C6F1B4 AV YAV0492 19980416230443S101702M00083
never never NY 160A2768153C9AC8 AV YAV0492 19980417145714S101702M00083
never never NY 160F546709B5FEF6 AV YAV0492 19980520132114S101702M00091
never never NN 15FCEA5A0A642344 BB BB0610 19980123072119S101702A069974
never never NN 160367661777B7FA BB BB0610 19980305141209S101702A070764
never never NN 160A031D0D9A1220 BB BB0610 19980416171757S101702M000874
never never NN 14FEB040124F01EC BB BB0620
never never NN 1525374C1A6758F8 BB BB0620 19940421195008S101702A033635
never never NN 157464C8115986E4 BB BB0630 19950907S101702A047247ABB063
never never NN 15A06AB904A0B1A4 BB BB0630 19960613175401S101702A054931
never never NN 15E38BA81ABEAD50 BB BB0630 19970814210720S101702A065981
never never NN 1522AAC808CA5442 BB0610 BB0610 E
never never NY 150F4BA41E900E9A BF BF5200
never never NY 15C281291C65DA6C BF BF5210 19970116152548S101702A059717
never never NY 15E7E5361957B936 BF BF5210 19970911132316S101702A066068
never never NY 15EB32C21FF75BF7 BF BF5210 19971002134504S101702A067141
never never NY 153902F6137C8A30 BF BF5220 19940825185414S101702A036438
never never NY 15E7E5370F068ADE BF BF5220 19970911132317S101702A066068
never never NY 15EB32C41C4B73B4 BF BF5220 19971002134518S101702A067141
never never NY 153902F700814934 BF BF5230 19940825185417S101702A036438
never never NY 15EB32BF04D1918E BF BF5230 19971002134524S101702A067141
never never NN 15F635010D0A5D46 BF BF5800 19971211145411S101702A068424
never never NN 15DE014E04577D2C BF BF5820 19970710145443S101702M000721
never never NN 15F634FE137FA476 BF BF5820 19971211145412S101702A068424
never never NY 159BAB9B0A182D28 BF BF6090 19960514130419S101702Z248334
never never NY 159BAD8813D65D82 BF BF6090 19960514141319S101702Z248334
never never NY 159BADE616475D14 BF BF6090 19960514142627S101702Z248334
never never NY 155389391E7448C2 BF BF6093 19950210132753S101702Z176750
never never NY 159DE1540BE5E038 BF BF6094 19960528143214S101702Z250204
never never NY 159DE36206C41602 BF BF6094 19960528154545S101702Z250204
never never NY 159E5A841F3B0042 BF BF6094 19960531144954S101702Z250854
never never NY 17C9B91418F8CED6 BF BF7110 DBH0000054
never never NY 15D0F1D91905D620 BF BF7155 19970418123528S101702Z306908
never never NY 169B32D400FC7E4F BF BF8651 A06M014649
never never NY 16A2BF941EFADE7F BF BF8651 A06M015279
never never NY 16C8F25E01CF6F97 BF BF8651 A06M018600
never never NY 167A09691326E76E BF BF8655 A06M010498
never never NY 169C55070A2B53F1 BF BF8655 A06M014649
never never NY 16C919050C1F9F1D BF BF8655 A06M018600
never never NY 1582B4CA08C9FFD8 BF YBF530A 19951207S101702M000634AYBF5
never never NY 158ECF6214B03EEC BF YBF530A 19960222171024S101702A05207
never never NY 15902FD502A31894 BF YBF530A 19960302112542S101702Z23666
never never NY 1591002A01037F40 BF YBF530A 19960307154206S101702Z23759
never never NY 1596837113C0C91A BF YBF530A 19960411173314S101702A05327
never never NY 15B8AA8F02CE70A0 BF YBF530A 19961115010108S101702M00066
never never NY 15D0CE0D19C13B8A BF YBF530A 19970417151313S101702M00071
never never NY 15FBD3FB1547C6FC BF YBF530A 19980116091802S101702A06960
never never NY 160A0CBE0C8067EA BF YBF530A 19980416230450S101702M00083
never never NY 160A275B1FFBCE22 BF YBF530A 19980417145719S101702M00083
never never NY 160E6991020CE58A BF YBF530A 19980514170908S101702A07219
never never NY 1582B4CF107AF85A BF YBF530C 19951207S101702M000634AYBF5
never never NY 158366D90A273776 BF YBF530C 19951212S101702Z224164AYBF5
never never NY 158ECF62134EFED2 BF YBF530C 19960222171021S101702A05207
never never NY 15C70985032B4F18 BF YBF530C 19970214113528S101702M00071
never never NY 15D0CE3F180E9E6C BF YBF530C 19970417152008S101702M00071
never never NY 15D76735093AE61C BF YBF530C 19970529145110S101702M00077
never never NY 15DAB28210DBC286 BF YBF530C 19970619135415S101702A06482
never never NY 160A0CB0047FDAC8 BF YBF530C 19980416230451S101702M00083
never never NY 160A2758111F9E66 BF YBF530C 19980417145719S101702M00083
never never NY 160E699B00605186 BF YBF530C 19980514171120S101702A07219
never never NY 160A0FFB14698DD0 BG BG5030 19980417004708S101702M000838
never never NY 160A2A331314C09A BG BG5030 19980417164021S101702M000838
never never NY 160E86301107EC02 BG BG5030 19980515101751S101702M000839
never never NY 15B8BADD12C21910 BG YBG0532 19961115104536S101702M00077
never never NY 15B9DACA017F6818 BG YBG0532 19961122143048S101702Z27894
never never NY 15BD06F402869D92 BG YBG0532 19961212185135S101702A05977
never never NY 15CA3899152E40AA BG YBG0532 19970306174909S101702A06218
never never NY 15CE9E49181FB8B2 BG YBG0532 19970403171955S101702A06290
never never NY 15B8BADD1AA85D42 BG YBG0533 19961115104534S101702M00077
never never NY 15B9DACB0CF401B4 BG YBG0533 19961122143047S101702Z27894
never never NY 15BD06E10C9D2BCA BG YBG0533 19961212184920S101702A05977
never never NY 15CA389910E791DC BG YBG0533 19970306174905S101702A06218
never never NY 15D0CE4A19DD3F2A BG YBG0533 19970417152106S101702M00071
never never NY 15D9C24213072E21 BG YBG0533 19970613143606S101702Z31634
never never NY 15DAB43604062EC2 BG YBG0533 19970619145541S101702A06469
never never NY 17F6AA560A34ED8A BP BP5020 BPST000045
never never NY 1506668818CF2372 BP BP5110
never never NY 1535B51614B1A26A BP BP5110 19940804181814S101702M000488
never never NN 150666840082209C BP BP5300
never never NN 1577B0C60EBA90F4 BP BP5300 19950928S101702A048040ABP530
never never NN 1515CB39102F3BAC BP BP6000
never never NN 14DEC9231A6F93D6 BP BP6020
never never NN 1515CB251704A156 BP BP6060
never never NN 15F633A91B86136E BP BP7000 19971211140642S101702A069088
never never NN 15F657CF166B9186 BP BP7000 19971212114155S101702Z350210
never never NN 15F721140F5090C2 BP BP7000 19971217114439S101702A069235
never never NY 15A9318801F6F29C BP BP7030 19960808141137S101702A056223
never never NY 15A955C60B512CE8 BP BP7030 19960809114839S101702Z261082
never never NY 15AB64A015540528 BP BP7030 19960822140553S101702A056579
never never NY 15A1A2D81FF23DC8 BP BP7040 19960621120626S101702Z254169
never never NY 16B27B3C1630432F BP BP7042 A20Y000615
never never NN 148919C41FD6B1B4 BP BP7090
never never NN 1577B0C21280B95C BP BP7090 19950928S101702A048040ABP709
never never NY 16675AC9070B1EC2 BP BP7090 A20Y000082
never never NY 16BA2AD11D9A7732 BP BP7120 A20Y000665
never never NY 16BE8CF60D490B16 BP BP7130 A20Y000665
never never NY 169B33C51657A5E1 BP BP7200 A20Y000403
never never NY 16B6B9F81C9E53D1 BP BP7200 A20Y000648
never never NY 1577B01A0ACA6D00 BP YBP01NS 19950928S101702A048005AYBP0
never never NY 157C19F315459D6C BP YBP01NS 19951026S101702Z214855AYBP0
never never NY 157C3E731202D132 BP YBP01NS 19951027S101702Z214995AYBP0
never never NY 157D30D41ECCE710 BP YBP01NS 19951102S101702A049016AYBP0
never never NY 15A066B51EF1FB26 BP YBP04NS 19960613153121S101702A05500
never never NY 147660C41FD5D044 BP YBP7020
never never NY 1577B0B810DBF3CC BP YBP7020 19950928S101702A048040AYBP7
never never NY 15DAB24A0AF3AA74 BP YBPCRM 19970619134703S101702A064764
never never NY 1818F6591AC16718 BP YBPMUT BPST000079594A969E
never never NY 1823001E039F38F8 BP YBPMUT BPST000087599ECB6F
never never NY 150316DC04471502 BP YBPPID
never never NY 1535B5A51890624A BP YBPPID 19940804183036S101702A036204
never never NY 147692731D721634 BP YBPSHBP
never never NY 1503143A0A6B5CA0 BS BS7630
never never NY 14F6FE851244A2C6 BW YBWAAGE
never never NY 1598B165187DA214 BW YBWAAGE 19960425142305S101702A05363
never never NY 15BF591E03C77C20 BW YBWAAGE 19961227131948S101702A06034
never never NY 151167350EB77844 BW YBWAAGF
never never NY 151B218309B9B006 BW YBWAAGF 19940216154925S101702A03166
never never NY 1598B167127A6A6E BW YBWAAGF 19960425142315S101702A05363
never never NY 15AA4B5C1E0F52D4 BW YBWAAGF 19960815141412S101702A05640
never never NY 15BF591F068580AC BW YBWAAGF 19961227131949S101702A06034
never never NY 153032E512219A9E BW YBWAAJ2 19940630170742S101702A03523
never never NY 15769BEC05314EBA BW YBWAAJ2 19950921172723S101702A04765
never never NY 153032E91F1F1E52 BW YBWAAJ8 19940630170744S101702A03523
never never NY 1536D7310C0BC814 BW YBWAAJ8 19940811231714S101702A03626
never never NY 15769BEC0CDAD2FC BW YBWAAJ8 19950921172725S101702A04765
never never NY 153032EE08F705A6 BW YBWAAJ9 19940630170745S101702A03523
never never NY 15769BEC14901608 BW YBWAAJ9 19950921172726S101702A04765
never never NY 153032E317CD9C54 BW YBWAAJT 19940630170740S101702A03523
never never NY 15769BEA0C918E30 BW YBWAAJT 19950921172720S101702A04765
never never NY 1516E59F12C865DE BW YBWAE0H
never never NY 155017A01D39050E BW YBWAE3X 19950119153151S101702A04143
never never NY 15979A8F18623C0A BW YBWAE3X 19960418160311S101702A05353
never never NY 159AEDBB1049E920 BW YBWAE3X 19960509194859S101702A05399
never never NY 15A5E21D16F89B16 BW YBWAE3X 19960718124102S101702A05601
never never NY 15A6817902D78222 BW YBWAE3X 19960722114427S101702A05603
never never NY 15C01FBA0A72BD02 BW YBWAE3X 19970101115057S101702A06042
never never NN 1516E57012F552A4 BW YBWAELC
never never NY 155CF1350B725110 BW YBWAEW1 19950411095234S101702A04364
never never NY 159747811F1E9FA0 BW YBWAEW1 19960416143108S101702Z24379
never never NY 15976F3814F7499E BW YBWAEW1 19960417141232S101702A05347
never never NY 1597700603AB6250 BW YBWAEW1 19960417144123S101702A05347
never never NY 159AEDB910F31422 BW YBWAEW1 19960509194856S101702A05399
never never NY 15A5E21D193721F0 BW YBWAEW1 19960718124100S101702A05601
never never NY 15A68179001193D2 BW YBWAEW1 19960722114425S101702A05603
never never NY 15C01FB316DFC146 BW YBWAEW1 19970101115052S101702A06042
never never NY 15C285FD06034432 BW YBWAEW1 19970116181901S101702A06094
never never NY 14E5629B1F1F866E BW YBWAEW2
never never NY 15264E7F016424EC BW YBWAEW2 19940428182558S101702A03382
never never NY 159AEDBA1E955F56 BW YBWAEW2 19960509194857S101702A05399
never never NY 15C01FB91A932516 BW YBWAEW2 19970101115053S101702A06042
never never NY 14E5629F0B642836 BW YBWAEW6
never never NY 15264E6515A07DBA BW YBWAEW6 19940428182212S101702A03382
never never NY 159AEDBB02A632D0 BW YBWAEW6 19960509194857S101702A05399
never never NY 15C01FBA00CC09A0 BW YBWAEW6 19970101115054S101702A06042
never never NY 1550179903F4E224 BW YBWAEW9 19950119153157S101702A04143
never never NY 15979A8F07D8714A BW YBWAEW9 19960418160310S101702A05353
never never NY 159AEDBB0E0852FC BW YBWAEW9 19960509194858S101702A05399
never never NY 15A5E21C06FFD6FA BW YBWAEW9 19960718124101S101702A05601
never never NY 15A68179062805FA BW YBWAEW9 19960722114426S101702A05603
never never NY 15C01FBA07885BD4 BW YBWAEW9 19970101115056S101702A06042
never never NY 14E5628207E87EB4 BW YBWAEWG
never never NY 15264E7D1743FECA BW YBWAEWG 19940428182459S101702A03382
never never NY 15285AB30043DA0E BW YBWAEWG 19940511190624S101702A03420
never never NY 154869550BD27064 BW YBWAEWG 19941201183642S101702A04002
never never NY 159AEDC61C14E3D0 BW YBWAEWG 19960509194901S101702A05399
never never NY 15264E7402CCD4DA BW YBWAEWJ 19940428182507S101702A03382
never never NY 15C01FB204A6F0BA BW YBWAEWJ 19970101115100S101702A06042
never never NY 15CC6B541DF61FD8 BW YBWAEWJ 19970320173113S101702A06260
never never NY 155017A00C33F4C4 BW YBWAEWL 19950119153152S101702A04143
never never NY 15979A9004882B82 BW YBWAEWL 19960418160303S101702A05353
never never NY 159AEDC509CE74BC BW YBWAEWL 19960509194902S101702A05399
never never NY 15A5E21D11DAD092 BW YBWAEWL 19960718124102S101702A05601
never never NY 15A681781DD12494 BW YBWAEWL 19960722114428S101702A05603
never never NY 15C01FB307AE7E58 BW YBWAEWL 19970101115101S101702A06042
never never NY 1550179F10DDCEF0 BW YBWAEWM 19950119153154S101702A04143
never never NY 15979A8F03A3DFDC BW YBWAEWM 19960418160307S101702A05353
never never NY 159AEDC5105C830E BW YBWAEWM 19960509194903S101702A05399
never never NY 15A5E21D1491CEE0 BW YBWAEWM 19960718124103S101702A05601
never never NY 15A681781B943B82 BW YBWAEWM 19960722114429S101702A05603
never never NY 15C01FB3142ED2E6 BW YBWAEWM 19970101115101S101702A06042
never never NY 14E562940BE19ABA BW YBWAEWN
never never NY 15264E720403AA7E BW YBWAEWN 19940428182543S101702A03382
never never NY 159AEDC50D42395C BW YBWAEWN 19960509194904S101702A05399
never never NY 15C01FB9140339D6 BW YBWAEWN 19970101115051S101702A06042
never never NY 1521B8FD15680B22 BW YBWAFI0 19940330142436S101702A03285
never never NY 155C2FF915283E98 BW YBWAFI0 19950406143555S101702A04351
never never NY 1598B1651EEB8A26 BW YBWAFI0 19960425142303S101702A05363
never never NY 15BF5914191E3E26 BW YBWAFI0 19961227132017S101702A06034
never never NY 1521B8F50DC19804 BW YBWAFI1 19940330142442S101702A03285
never never NY 1558E08C0887E942 BW YBWAFI1 19950316130445S101702A04290
never never NY 155C2FF91F11439A BW YBWAFI1 19950406143559S101702A04351
never never NY 1598B166063D52C8 BW YBWAFI1 19960425142304S101702A05363
never never NY 15BF59150CA67CE0 BW YBWAFI1 19961227132018S101702A06034
never never NY 1521B8FE0A17A64C BW YBWAFI2 19940330142450S101702A03285
never never NY 1598B1651BF11CE2 BW YBWAFI2 19960425142305S101702A05363
never never NY 15BF5913049FE184 BW YBWAFI2 19961227132018S101702A06034
never never NY 1521B8F61DAC2DC2 BW YBWAFIW 19940330142500S101702A03285
never never NY 1598B15B052AFE12 BW YBWAFIW 19960425142258S101702A05363
never never NY 15BF59141287EB16 BW YBWAFIW 19961227132013S101702A06034
never never NY 1521B8FE1F864D24 BW YBWAFIX 19940330142508S101702A03285
never never NY 1598B1641BD08E54 BW YBWAFIX 19960425142301S101702A05363
never never NY 15BF59161F9AD290 BW YBWAFIX 19961227132014S101702A06034
never never NY 1521B8FA1650FBA8 BW YBWAFIY 19940330142400S101702A03285
never never NY 1598B163133B9970 BW YBWAFIY 19960425142302S101702A05363
never never NY 15BF5914081F89C2 BW YBWAFIY 19961227132014S101702A06034
never never NY 1521B8FC087A0EF8 BW YBWAFIZ 19940330142416S101702A03285
never never NY 1598B165105A5288 BW YBWAFIZ 19960425142302S101702A05363
never never NY 15BF591708584444 BW YBWAFIZ 19961227132016S101702A06034
never never NY 1511676B126756D6 BW YBWAH56
never never NY 151B2186118141C4 BW YBWAH56 19940216154927S101702A03166
never never NY 1598B16602F6C07A BW YBWAH56 19960425142306S101702A05363
never never NY 15AA4B58030FFDF6 BW YBWAH56 19960815141413S101702A05640
never never NY 15BF5919053C23EE BW YBWAH56 19961227132029S101702A06034
never never NY 14F6FEE40DDBF7D0 BW YBWAH57
never never NY 1598B16609D15584 BW YBWAH57 19960425142307S101702A05363
never never NY 15BF591703F9FF84 BW YBWAH57 19961227132030S101702A06034
never never NY 14E562FD03599EA6 BW YBWAHD4
never never NY 15264E7907D18426 BW YBWAHD4 19940428182421S101702A03382
never never NY 159AEDC61FBF7C90 BW YBWAHD4 19960509194900S101702A05399
never never NY 15C01FB91D5255E8 BW YBWAHD4 19970101115058S101702A06042
never never NY 14E563410BC15EDC BW YBWAO3W
never never NY 15264E7B164F3C72 BW YBWAO3W 19940428182442S101702A03382
never never NY 159AEDC61DFDA230 BW YBWAO3W 19960509194901S101702A05399
never never NY 15C01FB20734FB6C BW YBWAO3W 19970101115059S101702A06042
never never NY 1511678007403006 BW YBWAPVY
never never NY 151B21860905A464 BW YBWAPVY 19940216154930S101702A03166
never never NY 1598B1660C022D8E BW YBWAPVY 19960425142311S101702A05363
never never NY 15AA4B571D5BBA10 BW YBWAPVY 19960815141415S101702A05640
never never NY 15BF591808145EDA BW YBWAPVY 19961227132031S101702A06034
never never NY 151167A918CC2004 BW YBWAPVZ
never never NY 151B218318AA6790 BW YBWAPVZ 19940216154932S101702A03166
never never NY 1598B1670DBD0A2E BW YBWAPVZ 19960425142311S101702A05363
never never NY 15AA4B581162478C BW YBWAPVZ 19960815141410S101702A05640
never never NY 15BF591908E8C6B4 BW YBWAPVZ 19961227132032S101702A06034
never never NY 151167B01D57144E BW YBWAXLQ
never never NY 151B21831318EFE2 BW YBWAXLQ 19940216154937S101702A03166
never never NY 1598B167191D450E BW YBWAXLQ 19960425142313S101702A05363
never never NY 15AA4B580AE003AE BW YBWAXLQ 19960815141411S101702A05640
never never NY 15BF591F16BCCFC8 BW YBWAXLQ 19961227132033S101702A06034
never never NN 14DDB433139A8DCC BX BX0330
never never NN 1524171A15C1F372 BX BX0330 19940414155938S101702A033405
never never NN 15A938F0027489B2 BX BX0330 19960808183517S101702A056200
never never NN 15E030ED03C2ED60 BX BX5100 19970724125214S101702A065494
never never NN 14EAE56D0E216AAC BX BX5200
never never NN 154A9D950574CA9A BX BX5200 19941215191359S101702A040134
never never NN 15B0E7CC19E4F582 BX BX5200 19960926155311S101702A057383
never never NN 15DF17CE10E3F8E8 BX BX6400 19970717131027S101702A065289
never never NN 1543FD0E0F7E84A6 BX BX6410 19941103151044S101702A038911
never never NN 15B0E7D20E740CF8 BX BX6410 19960926155312S101702A057383
never never NN 15BCFDB81BE1E830 BX BX6410 19961212132749S101702A059703
never never NN 15A8E25E05D16382 BX BX6500 19960806145757S101702Z260717
never never NN 15AFCB4B05BD16DE BX BX6500 19960919140931S101702A057271
never never NN 15BCFDB30A119D48 BX BX6500 19961212132750S101702A059703
never never NN 15AB6A8E1828D382 BX BX6550 19960822173742S101702Z262853
never never NN 15AFCB4C074093F0 BX BX6550 19960919140932S101702A057273
never never NN 15BCFDC10B7D7C14 BX BX6550 19961212132745S101702A059703
never never NN 15AC0710003145C8 BX BX6560 19960826145905S101702Z263181
never never NN 15AFCB4C03BF4D84 BX BX6560 19960919140932S101702A057273
never never NN 15BCFDC31FB936F2 BX BX6560 19961212132746S101702A059703
never never NN 15AEAB4215CC4452 BX BX6570 19960912102108S101702Z265961
never never NN 15AFCB4C04085138 BX BX6570 19960919140933S101702A057273
never never NN 15BCFDC311D7C1C4 BX BX6570 19961212132746S101702A059703
never never NN 15EB32C617030990 BX BX6700 19971002134658S101702A067077
never never NN 1611B0D41D5CB5AE BX BX6700 19980604135634S101702A072837
never never NN 15D3F46103C1645C BX BX6750 19970507161423S101702Z310325
never never NN 15D7638C0B0BA518 BX BX6750 19970529124001S101702A064140
never never NN 1611B0D3162F8C6E BX BX6750 19980604135635S101702A072837
never never NN 15486934015A2970 BX BX7150 19941201183328S101702A039829
never never NN 15609512113BC514 BX BX7150 19950504S101702A044162ABX715
never never NN 15B0E7CC1F685528 BX BX7150 19960926155302S101702A057383
never never NN 14EB001A1851033E BX BX7200
never never NN 14EAFFFB1A72D1FA BX BX7400
never never NN 14EB000B1CEB7EE0 BX BX7410
never never NN 150665481D304842 BX BX7620
never never NN 153F94601E5A8978 BX BX7620 19941006135422S101702A037791
never never NN 15B0E7CE03D083CC BX BX7620 19960926155305S101702A057383
never never NN 14C8C88F1232C564 BX BX7900
never never NN 15EB32D00CA588A2 BX BX8000 19971002134658S101702A067077
never never NN 16173BB6085000B0 BX BX8000 19980709201829S101702A073668
never never NN 1617503911A3AAAD BX BX8000 19980710083334S101702A073668
never never NN 156B92E51CDFF42C BX BX8100 19950713S101702Z199809ABX810
never never NN 156B93B41230F73A BX BX8100 19950713S101702Z199813ABX810
never never NN 15B0E7D1090EA204 BX BX8100 19960926155310S101702A057383
never never NN 15BCFDB90A440BF0 BX BX8110 19961212132748S101702A059703
never never NN 1611B0D51958A307 BX BX8110 19980604135636S101702A072837
never never NN 153F9DD401823670 BX YBX0121 19941006193229S101702A03759
never never NN 155D26370DF7E3B4 BX YBX0121 19950412S101702A043533AYBX0
never never NN 157D3328100B4204 BX YBX0121 19951102S101702A048803AYBX0
never never NN 1596811916897804 BX YBX0121 19960411160906S101702A05322
never never NN 159682C60968F844 BX YBX0121 19960411170949S101702A05322
never never NN 15A938CA1F752144 BX YBX0121 19960808183126S101702A05620
never never NN 15B2001C089B4AAC BX YBX0121 19961003150558S101702A05748
never never NN 15B20298016DEE2C BX YBX0121 19961003163437S101702A05748
never never NN 15BD048619B26D8C BX YBX0121 19961212173258S101702A05967
never never NN 15CFB33D0A70748C BX YBX0121 19970410143059S101702A06303
never never NN 15D8853008179396 BX YBX0121 19970605172720S101702A06422
never never NN 15DCE9521D0702E4 BX YBX0121 19970703160016S101702A06492
never never NN 15DF17F107130182 BX YBX0121 19970717131555S101702A06536
never never NN 15DF18610ECD5B8C BX YBX0121 19970717133108S101702A06536
never never NN 15EF9948056B3B58 BX YBX0121 19971030134551S101702A06783
never never NN 1517FBEA1EB63092 BX YBX0311
never never NN 151B47C60BD65A5E BX YBX0311 19940217143350S101702A03150
never never NN 153264DD01428E8A BX YBX0311 19940714161915S101702A03497
never never NN 1535ADFE06D1EBB8 BX YBX0311 19940804140337S101702A03603
never never NN 153F9DD204C38F38 BX YBX0311 19941006193204S101702A03759
never never NN 1540AEA40F98C7D2 BX YBX0311 19941013141432S101702A03823
never never NN 155D263E1A28B2F2 BX YBX0311 19950412S101702A043533AYBX0
never never NN 155E1710155D711E BX YBX0311 19950418S101702Z185893AYBX0
never never NN 155E80A60D44FFA0 BX YBX0311 19950421S101702Z186279AYBX0
never never NN 15609509084E36C4 BX YBX0311 19950504S101702A044162AYBX0
never never NN 1560C001172F0450 BX YBX0311 19950505S101702Z188373AYBX0
never never NN 15617FC50D017534 BX YBX0311 19950510S101702Z189043AYBX0
never never NN 1561B0C71A8B2706 BX YBX0311 19950511S101702A044343AYBX0
never never NN 157D332D0550BDB2 BX YBX0311 19951102S101702A048803AYBX0
never never NN 15941BBC05159502 BX YBX0311 19960327101616S101702Z24063
never never NN 159681200895446C BX YBX0311 19960411160908S101702A05322
never never NN 159682CC1D267992 BX YBX0311 19960411170950S101702A05322
never never NN 15971ECB1DA3822C BX YBX0311 19960415141359S101702Z24357
never never NN 159722F91585F2FE BX YBX0311 19960415164333S101702Z24361
never never NN 1597252E09386C10 BX YBX0311 19960415180232S101702Z24363
never never NN 15972745155833D2 BX YBX0311 19960415191722S101702Z24364
never never NN 159748B81003BA9E BX YBX0311 19960416151429S101702Z24380
never never NN 15976D991D7CDA82 BX YBX0311 19960417131431S101702Z24408
never never NN 1597903017420BBE BX YBX0311 19960418095238S101702Z24422
never never NN 159831BA0D5EE4DC BX YBX0311 19960422101406S101702Z24464
never never NN 1598332E1C29CC10 BX YBX0311 19960422110638S101702Z24467
never never NN 1599CBB81AE369D0 BX YBX0311 19960502144753S101702A05376
never never NN 15A1335E1F997436 BX YBX0311 19960618173627S101702Z25357
never never NN 15A179A51E86CDC2 BX YBX0311 19960620113120S101702Z25396
never never NN 15A3B56317BBB064 BX YBX0311 19960704163425S101702A05521
never never NN 15A4CA4A0322036E BX YBX0311 19960711134555S101702A05574
never never NN 15A7C1460378D528 BX YBX0311 19960730103037S101702Z25999
never never NN 15A7C6CC1C6A438A BX YBX0311 19960730134827S101702Z25999
never never NN 15A938CD172EC0B0 BX YBX0311 19960808183112S101702A05620
never never NN 15B200200B80CF70 BX YBX0311 19961003150552S101702A05748
never never NN 15B2029D0C7CFC30 BX YBX0311 19961003163431S101702A05748
never never NN 15B2EF2A1ED07B58 BX YBX0311 19961009134202S101702Z26995
never never NN 15B54BB705E80C82 BX YBX0311 19961024141922S101702A05787
never never NN 15BD048D164A21A0 BX YBX0311 19961212173254S101702A05967
never never NN 15CFB346118B6B8C BX YBX0311 19970410143100S101702A06303
never never NN 15D0CBB917158A90 BX YBX0311 19970417134902S101702A06320
never never NN 15D0CCBB06F0E2EA BX YBX0311 19970417142628S101702A06320
never never NN 15D8853D1F056A3A BX YBX0311 19970605172721S101702A06422
never never NN 15DCE95D18BB4012 BX YBX0311 19970703160008S101702A06492
never never NN 15DE1C6210BDD89C BX YBX0311 19970711071158S101702Z32084
never never NN 15DF180005AF0A52 BX YBX0311 19970717131546S101702A06536
never never NN 15DF185A1F941BE4 BX YBX0311 19970717133054S101702A06536
never never NN 15E002C71642A4E4 BX YBX0311 19970723092030S101702Z32387
never never NN 15E030DC18E09A2C BX YBX0311 19970724124832S101702A06549
never never NN 15E6CB4016FAA2EC BX YBX0311 19970904130822S101702A06649
never never NN 15E6CE9801253748 BX YBX0311 19970904151111S101702A06649
never never NN 1517FBD607FD5CC8 BX YBX0312
never never NN 153264EE08043EBE BX YBX0312 19940714161917S101702A03497
never never NN 153F9DD108F4D7C4 BX YBX0312 19941006193205S101702A03759
never never NN 1540AEA618EB03C6 BX YBX0312 19941013141433S101702A03823
never never NN 155D263E150A5D2C BX YBX0312 19950412S101702A043533AYBX0
never never NN 155E622604D35082 BX YBX0312 19950420S101702A043759AYBX0
never never NN 157D332B0A0B7E30 BX YBX0312 19951102S101702A048803AYBX0
never never NN 15941BBB0BF5B9D6 BX YBX0312 19960327101618S101702Z24063
never never NN 1596811F09BF9F52 BX YBX0312 19960411160910S101702A05322
never never NN 159682CB0B2DF134 BX YBX0312 19960411170951S101702A05322
never never NN 1599CBBC015EEAE0 BX YBX0312 19960502144754S101702A05376
never never NN 15A179A51B20272C BX YBX0312 19960620113121S101702Z25396
never never NN 15A3B5630AF705BA BX YBX0312 19960704163425S101702A05521
never never NN 15A4CA510C99DEFE BX YBX0312 19960711134559S101702A05574
never never NN 15A7C1451DC36FD8 BX YBX0312 19960730103038S101702Z25999
never never NN 15A7C6CC16A54468 BX YBX0312 19960730134828S101702Z25999
never never NN 15A938D01CEA5422 BX YBX0312 19960808183113S101702A05620
never never NN 15B2001F0F5C32C2 BX YBX0312 19961003150554S101702A05748
never never NN 15B2029D033D3538 BX YBX0312 19961003163432S101702A05748
never never NN 15C28557101E932E BX YBX0312 19970116175259S101702A06089
never never NN 15CFB33B0B681EE6 BX YBX0312 19970410143101S101702A06303
never never NN 15D0CBB81D354FFA BX YBX0312 19970417134903S101702A06320
never never NN 15D0CCBD1491C23A BX YBX0312 19970417142629S101702A06320
never never NN 15D8853D064FD986 BX YBX0312 19970605172722S101702A06422
never never NN 15D9983E03755D82 BX YBX0312 19970612132948S101702A06457
never never NN 15DCE95A1C555F2A BX YBX0312 19970703160008S101702A06492
never never NN 15DDA34A1971DA6E BX YBX0312 19970708065743S101702Z32010
never never NN 15DDFE000D06E702 BX YBX0312 19970710130348S101702A06520
never never NN 15DF17FF01855A46 BX YBX0312 19970717131547S101702A06536
never never NN 15DF185C07C25A74 BX YBX0312 19970717133055S101702A06536
never never NN 15E002C71946719A BX YBX0312 19970723092031S101702Z32387
never never NN 15E030D51FF9926A BX YBX0312 19970724124835S101702A06549
never never NN 1516E62916E6DCBC BX YBX0313
never never NN 153264EC18C3BC18 BX YBX0313 19940714161918S101702A03497
never never NN 153F9DCF12275A92 BX YBX0313 19941006193206S101702A03759
never never NN 1540AEA70B5A92B4 BX YBX0313 19941013141434S101702A03823
never never NN 155D263D1BB91C1E BX YBX0313 19950412S101702A043533AYBX0
never never NN 157D33291FDAFD5C BX YBX0313 19951102S101702A048803AYBX0
never never NN 1582314E009C9376 BX YBX0313 19951204S101702Z222592AYBX0
never never NN 1582B64D0AF8ABF8 BX YBX0313 19951207S101702A050132AYBX0
never never NN 15941BBB02F08FC2 BX YBX0313 19960327101619S101702Z24063
never never NN 1596811E13F50B5C BX YBX0313 19960411160913S101702A05322
never never NN 159682CB0D6E49BE BX YBX0313 19960411170951S101702A05322
never never NN 15A4CA4F184F10C2 BX YBX0313 19960711134603S101702A05574
never never NN 15A7C1450E3FF328 BX YBX0313 19960730103039S101702Z25999
never never NN 15A7C6CC0CAD717A BX YBX0313 19960730134829S101702Z25999
never never NN 15A938CC16BE299E BX YBX0313 19960808183114S101702A05620
never never NN 15B2001F0323D070 BX YBX0313 19961003150554S101702A05748
never never NN 15B2029C1292CB4A BX YBX0313 19961003163433S101702A05748
never never NN 15CFB34314D5BFF0 BX YBX0313 19970410143102S101702A06303
never never NN 15D0CBB70926EE64 BX YBX0313 19970417134905S101702A06320
never never NN 15D0CCBC1F143758 BX YBX0313 19970417142630S101702A06320
never never NN 15D8853C122DD322 BX YBX0313 19970605172723S101702A06422
never never NN 15DCE95B0CCF5F5A BX YBX0313 19970703160009S101702A06492
never never NN 15DF17FD0DC03A52 BX YBX0313 19970717131547S101702A06536
never never NN 15DF185B19886000 BX YBX0313 19970717133056S101702A06536
never never NN 15E002C711B32726 BX YBX0313 19970723092031S101702Z32387
never never NN 15E030DB1C9062E2 BX YBX0313 19970724124837S101702A06549
never never NN 15EB32B410F0C588 BX YBX0313 19971002134434S101702A06707
never never NN 160F56EE071F7EDA BX YBX0313 19980520145159S101702A07269
never never NN 15B2002000B550CE BX YBX0320 19961003150555S101702A05748
never never NN 15B2029D0345B242 BX YBX0320 19961003163434S101702A05748
never never NN 15C285560E4FEF82 BX YBX0320 19970116175300S101702A06089
never never NN 15CFB35107DA49EC BX YBX0320 19970410143103S101702A06303
never never NN 15D8853800DAC4EA BX YBX0320 19970605172724S101702A06422
never never NN 15DCE95D0B47FDE2 BX YBX0320 19970703160010S101702A06492
never never NN 15DDA4B911D2643C BX YBX0320 19970708074923S101702Z32011
never never NN 15DDA6051ECDC0F6 BX YBX0320 19970708083532S101702Z32012
never never NN 15DDA6A517E6EA46 BX YBX0320 19970708085756S101702Z32012
never never NN 15DDA77B0568987A BX YBX0320 19970708092727S101702Z32013
never never NN 15DDFE071D0A49CE BX YBX0320 19970710130345S101702A06520
never never NN 15DF17FF112F1BE0 BX YBX0320 19970717131548S101702A06536
never never NN 15DF185B0C43B52F BX YBX0320 19970717133057S101702A06536
never never NN 15E002CF0F2B1003 BX YBX0320 19970723092127S101702Z32387
never never NN 15E030D601AD678C BX YBX0320 19970724124839S101702A06549
never never NN 1516E62C137D5C3A BX YBX0321
never never NN 153264EC0AA30052 BX YBX0321 19940714161919S101702A03497
never never NN 153F9DD01CA9EE92 BX YBX0321 19941006193207S101702A03759
never never NN 1540AEA716201D84 BX YBX0321 19941013141435S101702A03823
never never NN 155D263E1244FDDC BX YBX0321 19950412S101702A043533AYBX0
never never NN 157D332A085A6C04 BX YBX0321 19951102S101702A048803AYBX0
never never NN 1594229317A53EF6 BX YBX0321 19960327142142S101702Z24075
never never NN 1596811E0DE1D5D2 BX YBX0321 19960411160914S101702A05322
never never NN 159682CB04B3976A BX YBX0321 19960411170952S101702A05322
never never NN 1596CD6A1F32CB0C BX YBX0321 19960413134150S101702Z24337
never never NN 1596D2641F8A642E BX YBX0321 19960413163905S101702Z24338
never never NN 1599CBC411156162 BX YBX0321 19960502144748S101702A05376
never never NN 15A0662C05DCE642 BX YBX0321 19960613151234S101702A05492
never never NN 15A080C10A9A4BAC BX YBX0321 19960614070338S101702Z25274
never never NN 15A0811E1115DF82 BX YBX0321 19960614071636S101702Z25274
never never NN 15A3B55F01EC0ED2 BX YBX0321 19960704163427S101702A05521
never never NN 15A4CA480F1C4FF0 BX YBX0321 19960711134539S101702A05574
never never NN 15A7C1A2045F6494 BX YBX0321 19960730104336S101702Z25999
never never NN 15A7C6F10DBAC6B4 BX YBX0321 19960730135345S101702Z26005
never never NN 15AA50F2045D52C4 BX YBX0321 19960815173129S101702A05635
never never NN 15B2001B1AD70544 BX YBX0321 19961003150555S101702A05748
never never NN 15B2029A154E50C2 BX YBX0321 19961003163434S101702A05748
never never NN 15CFB3450ED969AC BX YBX0321 19970410143104S101702A06303
never never NN 15D0CBB80FAD6102 BX YBX0321 19970417134905S101702A06320
never never NN 15D0CCBA04FF6F9C BX YBX0321 19970417142631S101702A06320
never never NN 15D885321E817402 BX YBX0321 19970605172725S101702A06422
never never NN 15DCE95B0404DD6C BX YBX0321 19970703160011S101702A06492
never never NN 15DDA4B911C4600E BX YBX0321 19970708074924S101702Z32011
never never NN 15DDA6040C4E5E70 BX YBX0321 19970708083532S101702Z32012
never never NN 15DDA6A512ADDB70 BX YBX0321 19970708085757S101702Z32012
never never NN 15DDA77B023A932A BX YBX0321 19970708092728S101702Z32013
never never NN 15DDFE0713FD52F0 BX YBX0321 19970710130346S101702A06520
never never NN 15DF17F6166F71AF BX YBX0321 19970717131549S101702A06536
never never NN 15DF185B1E67D71A BX YBX0321 19970717133058S101702A06536
never never NN 15E002CE0290DF54 BX YBX0321 19970723092128S101702Z32387
never never NN 15E030D7095E96AF BX YBX0321 19970724124827S101702A06549
never never NN 1516E64C0425C854 BX YBX0322
never never NN 153264ED162856B6 BX YBX0322 19940714161906S101702A03497
never never NN 153F9DD21A270844 BX YBX0322 19941006193208S101702A03759
never never NN 1540AEA40F3B6112 BX YBX0322 19941013141416S101702A03823
never never NN 155D263F0256AA00 BX YBX0322 19950412S101702A043533AYBX0
never never NN 155E622604C3A1C6 BX YBX0322 19950420S101702A043759AYBX0
never never NN 157D332B13FE5C94 BX YBX0322 19951102S101702A048803AYBX0
never never NN 1594226F03985B38 BX YBX0322 19960327141624S101702Z24075
never never NN 1596811F044C267E BX YBX0322 19960411160917S101702A05322
never never NN 159682C916255372 BX YBX0322 19960411170953S101702A05322
never never NN 1596CD6B0BF18AE4 BX YBX0322 19960413134151S101702Z24337
never never NN 1599CBC41E4A5392 BX YBX0322 19960502144750S101702A05376
never never NN 15A0662E03528420 BX YBX0322 19960613151235S101702A05492
never never NN 15A080C10701BF28 BX YBX0322 19960614070339S101702Z25274
never never NN 15A0811119DA5484 BX YBX0322 19960614071450S101702Z25274
never never NN 15A3B5650251D4C0 BX YBX0322 19960704163429S101702A05521
never never NN 15A4CA4811445A0E BX YBX0322 19960711134542S101702A05574
never never NN 15A7C1A208FF7610 BX YBX0322 19960730104336S101702Z25999
never never NN 15A7C6E106F235C2 BX YBX0322 19960730135122S101702Z26005
never never NN 15A938D019271ACC BX YBX0322 19960808183124S101702A05620
never never NN 1516E6481F5112F8 BX YBX0323
never never NN 153264EB1CB75F7E BX YBX0323 19940714161908S101702A03497
never never NN 153F9DD00CED9794 BX YBX0323 19941006193209S101702A03759
never never NN 1540AE9D08925546 BX YBX0323 19941013141420S101702A03823
never never NN 155D263D13F05A5C BX YBX0323 19950412S101702A043533AYBX0
never never NN 157D332A063DC782 BX YBX0323 19951102S101702A048803AYBX0
never never NN 159422991D21EB22 BX YBX0323 19960327142214S101702Z24075
never never NN 1596811C1BFEA9A8 BX YBX0323 19960411160918S101702A05322
never never NN 159682CA10363E50 BX YBX0323 19960411170953S101702A05322
never never NN 1596CD6A1B0448C6 BX YBX0323 19960413134151S101702Z24337
never never NN 1599CBBA1BEBF8CA BX YBX0323 19960502144751S101702A05376
never never NN 15A0662C06291CC2 BX YBX0323 19960613151236S101702A05492
never never NN 15A080C214C15398 BX YBX0323 19960614070339S101702Z25274
never never NN 15A0811E111DEFF2 BX YBX0323 19960614071637S101702Z25274
never never NN 15A3B5621E047D64 BX YBX0323 19960704163416S101702A05521
never never NN 15A4CA491DD17A24 BX YBX0323 19960711134551S101702A05574
never never NN 15A7C1A2007B8B2C BX YBX0323 19960730104336S101702Z25999
never never NN 15A7C6F10B10C57A BX YBX0323 19960730135346S101702Z26005
never never NN 15AA50D313BAACC8 BX YBX0323 19960815173146S101702A05635
never never NN 15B2001C0BCBC75E BX YBX0323 19961003150556S101702A05748
never never NN 15B202990AE69FD4 BX YBX0323 19961003163435S101702A05748
never never NN 15CFB33A0A9B41A8 BX YBX0323 19970410143107S101702A06303
never never NN 15D88538130A01B6 BX YBX0323 19970605172726S101702A06422
never never NN 15DCE94C10359FEE BX YBX0323 19970703160012S101702A06492
never never NN 15DF17F51C4D0118 BX YBX0323 19970717131550S101702A06536
never never NN 15DF186409B3ACAC BX YBX0323 19970717133101S101702A06536
never never NN 15E002CD1DA6D38E BX YBX0323 19970723092129S101702Z32387
never never NN 15E030DB0890851C BX YBX0323 19970724124829S101702A06549
never never NN 15EB32B4148D7FCF BX YBX0323 19971002134435S101702A06707
never never NN 160F56EA11499522 BX YBX0323 19980520145201S101702A07269
never never NN 1524170C0EFD27C2 BX YBX0341 19940414155510S101702A03340
never never NN 1527643A1C7926E6 BX YBX0341 19940505160752S101702A03361
never never NN 153F9DD504C0AC28 BX YBX0341 19941006193211S101702A03759
never never NN 155D263D15F90954 BX YBX0341 19950412S101702A043533AYBX0
never never NN 155FA55E0D51C342 BX YBX0341 19950428S101702Z187241AYBX0
never never NN 15609508105B9CF8 BX YBX0341 19950504S101702A044162AYBX0
never never NN 15A938D0146A0122 BX YBX0341 19960808183116S101702A05620
never never NN 152416F61F5DDD16 BX YBX0342 19940414155516S101702A03340
never never NN 1527643A1702559A BX YBX0342 19940505160753S101702A03361
never never NN 153F9DD306D678DE BX YBX0342 19941006193213S101702A03759
never never NN 155D263D108760DC BX YBX0342 19950412S101702A043533AYBX0
never never NN 15A938CC00667982 BX YBX0342 19960808183116S101702A05620
never never NN 152417031461C6F2 BX YBX0343 19940414155517S101702A03340
never never NN 153F9DD10CA45788 BX YBX0343 19941006193214S101702A03759
never never NN 155D263C149C5570 BX YBX0343 19950412S101702A043533AYBX0
never never NN 15A938CC1579D790 BX YBX0343 19960808183117S101702A05620
never never NN 1516E6321D4DD2A8 BX YBX0361
never never NN 153F9DD40F45E0FE BX YBX0361 19941006193216S101702A03759
never never NN 155D263D1C5CD71E BX YBX0361 19950412S101702A043533AYBX0
never never NN 157D332817D7CE46 BX YBX0361 19951102S101702A048803AYBX0
never never NN 1596811C0257426A BX YBX0361 19960411160919S101702A05322
never never NN 159682C71D836602 BX YBX0361 19960411170954S101702A05322
never never NN 15A1786F08528712 BX YBX0361 19960620104731S101702Z25393
never never NN 15A3B55E1F0385B0 BX YBX0361 19960704163417S101702A05521
never never NN 15A938CE14708904 BX YBX0361 19960808183119S101702A05620
never never NN 1515CC090B9D52AC BX YBX0362
never never NN 153F9DD0057E2130 BX YBX0362 19941006193218S101702A03759
never never NN 155D263C1DA479CE BX YBX0362 19950412S101702A043533AYBX0
never never NN 157D332819D4E5DE BX YBX0362 19951102S101702A048803AYBX0
never never NN 1596811814BBA5A6 BX YBX0362 19960411160920S101702A05322
never never NN 159682C910E9890A BX YBX0362 19960411170954S101702A05322
never never NN 15A1786F07B82056 BX YBX0362 19960620104732S101702Z25393
never never NN 15A3B562165676B2 BX YBX0362 19960704163419S101702A05521
never never NN 15A938D0009B6514 BX YBX0362 19960808183120S101702A05620
never never NN 1515CC08163BC306 BX YBX0363
never never NN 153F9DD017F9257E BX YBX0363 19941006193219S101702A03759
never never NN 155D263E009C9196 BX YBX0363 19950412S101702A043533AYBX0
never never NN 157D33231CD9725A BX YBX0363 19951102S101702A048803AYBX0
never never NN 1596811B0926CAE6 BX YBX0363 19960411160921S101702A05322
never never NN 159682C90FA3739A BX YBX0363 19960411170955S101702A05322
never never NN 15A1786F07ADAD66 BX YBX0363 19960620104733S101702Z25393
never never NN 15A3B55E1EDCD382 BX YBX0363 19960704163424S101702A05521
never never NN 15A938CE11DBCD08 BX YBX0363 19960808183121S101702A05620
never never NN 1516E63609520A58 BX YBX0381
never never NN 153264EC014C1AD0 BX YBX0381 19940714161912S101702A03497
never never NN 153F9DD510104A74 BX YBX0381 19941006193220S101702A03759
never never NN 1540AE9D05DBC006 BX YBX0381 19941013141427S101702A03823
never never NN 155D263F06EDF958 BX YBX0381 19950412S101702A043533AYBX0
never never NN 157D332B0E36B73A BX YBX0381 19951102S101702A048803AYBX0
never never NN 15941D1A1D252970 BX YBX0381 19960327110524S101702Z24066
never never NN 1596811F08577916 BX YBX0381 19960411160922S101702A05322
never never NN 159682CB0E6350B6 BX YBX0381 19960411170955S101702A05322
never never NN 15A938D000ABCED8 BX YBX0381 19960808183121S101702A05620
never never NN 15CFB33A1E6D8108 BX YBX0381 19970410143108S101702A06303
never never NN 15D8853A1C0E90A4 BX YBX0381 19970605172728S101702A06422
never never NN 15DCE95B04C616B4 BX YBX0381 19970703160012S101702A06492
never never NN 15DF17F41751D58E BX YBX0381 19970717131551S101702A06536
never never NN 15DF1862019374D8 BX YBX0381 19970717133103S101702A06536
never never NN 1516E6440D80E304 BX YBX0382
never never NN 151B47D002F8C64A BX YBX0382 19940217143416S101702A03150
never never NN 151FAFB2178CABE6 BX YBX0382 19940317152239S101702A03245
never never NN 153264D21FC2586C BX YBX0382 19940714161913S101702A03497
never never NN 153F9DD5190A965C BX YBX0382 19941006193223S101702A03759
never never NN 1540AE9D0FE4A544 BX YBX0382 19941013141428S101702A03823
never never NN 155D263F0C849DE0 BX YBX0382 19950412S101702A043533AYBX0
never never NN 155E6224079BF6F8 BX YBX0382 19950420S101702A043759AYBX0
never never NN 157D332B1B1D0434 BX YBX0382 19951102S101702A048803AYBX0
never never NN 15941D1A1C21EDD8 BX YBX0382 19960327110525S101702Z24066
never never NN 1596811E1D9F7546 BX YBX0382 19960411160923S101702A05322
never never NN 159682C91FBEB76E BX YBX0382 19960411170956S101702A05322
never never NN 1599CBB7047028D8 BX YBX0382 19960502144752S101702A05376
never never NN 15A938D00AFBECBE BX YBX0382 19960808183122S101702A05620
never never NN 15B2001F1BFA00D6 BX YBX0382 19961003150556S101702A05748
never never NN 15B2029C05524AC2 BX YBX0382 19961003163435S101702A05748
never never NN 15C28556133EC9B8 BX YBX0382 19970116175301S101702A06089
never never NN 15CFB3450E9DAF24 BX YBX0382 19970410143109S101702A06303
never never NN 15D8853C1B6DF5B6 BX YBX0382 19970605172730S101702A06422
never never NN 15DCE94E1744EEAC BX YBX0382 19970703160012S101702A06492
never never NN 15DF17F50CF6D250 BX YBX0382 19970717131552S101702A06536
never never NN 15DF18641CBF3C6A BX YBX0382 19970717133104S101702A06536
never never NN 1516E65801A2C496 BX YBX0383
never never NN 153264EA03C2BE8C BX YBX0383 19940714161914S101702A03497
never never NN 153F9DD5098442D2 BX YBX0383 19941006193225S101702A03759
never never NN 1540AE9C12F0F080 BX YBX0383 19941013141431S101702A03823
never never NN 155D263B02222BD6 BX YBX0383 19950412S101702A043533AYBX0
never never NN 157D33261FE0BCEC BX YBX0383 19951102S101702A048803AYBX0
never never NN 15941D1A084E4444 BX YBX0383 19960327110526S101702Z24066
never never NN 1596811C0CBC01B2 BX YBX0383 19960411160927S101702A05322
never never NN 159682C50C3D2D6A BX YBX0383 19960411170956S101702A05322
never never NN 15A938CF0E5EA55C BX YBX0383 19960808183123S101702A05620
never never NN 15CFB34B19BCF5C2 BX YBX0383 19970410143110S101702A06303
never never NN 15D8853905F17870 BX YBX0383 19970605172732S101702A06422
never never NN 15DCE94C13ACAC67 BX YBX0383 19970703160013S101702A06492
never never NN 15DF17F31C504EAE BX YBX0383 19970717131553S101702A06536
never never NN 15DF18630EA3E700 BX YBX0383 19970717133105S101702A06536
never never NN 15EB32B80159F40A BX YBX0383 19971002134435S101702A06707
never never NY 183301791923BC7D BX YBXADBR CLOS0001835A25007A
never never NN 1515CC1B1AA08BAC BX YBXBI01
never never NN 152442BE014C38E6 BX YBXBI01 19940415175222S101702A03346
never never NN 152497B30A4C17CA BX YBXBI01 19940417194441S101702A03346
never never NN 152764351069AADE BX YBXBI01 19940505160733S101702A03357
never never NN 152856A412790D32 BX YBXBI01 19940511164541S101702A03420
never never NN 152996220CA98AFA BX YBXBI01 19940519151914S101702A03438
never never NN 153266DA1B805386 BX YBXBI01 19940714172642S101702A03577
never never NN 153F9DD60B8A0A02 BX YBXBI01 19941006193210S101702A03759
never never NN 155D263C097BBD46 BX YBXBI01 19950412S101702A043533AYBXB
never never NN 157D332E09B660B6 BX YBXBI01 19951102S101702A048803AYBXB
never never NN 1596812016DBA0C8 BX YBXBI01 19960411160928S101702A05322
never never NN 159682CC01CDCC68 BX YBXBI01 19960411170957S101702A05322
never never NN 1599CBBB03D51896 BX YBXBI01 19960502144752S101702A05376
never never NN 159F500F07FA42C2 BX YBXBI01 19960606171752S101702A05472
never never NN 15A938D10D219114 BX YBXBI01 19960808183118S101702A05620
never never NN 15B2001B1C9286C2 BX YBXBI01 19961003150557S101702A05748
never never NN 15B2029D0BDACE34 BX YBXBI01 19961003163436S101702A05748
never never NN 15BD048D073F608C BX YBXBI01 19961212173255S101702A05967
never never NN 15CFB35405DFBF5A BX YBXBI01 19970410143057S101702A06303
never never NN 15D885391779C6FB BX YBXBI01 19970605172716S101702A06422
never never NN 15DCE95E0156E8B0 BX YBXBI01 19970703160014S101702A06492
never never NN 15DF17F710332F76 BX YBXBI01 19970717131551S101702A06536
never never NN 15DF186511E6C2C8 BX YBXBI01 19970717133102S101702A06536
never never NN 15F80E06112DB78A BX YBXBI01 19971223090545S101702Z35232
never never NN 15FBB2F7122E46C8 BX YBXBI01 19980115133559S101702A06935
never never NN 16173B98043FD920 BX YBXBI01 19980709201647S101702A07366
never never NN 1617501718E9DDFA BX YBXBI01 19980710082952S101702A07366
never never NY 1515CC14146AF5C4 BX YBXBI02
never never NY 153266CC06950520 BX YBXBI02 19940714172643S101702A03577
never never NY 153F9DCF159A5A4A BX YBXBI02 19941006193226S101702A03759
never never NY 155D263A1BE3E226 BX YBXBI02 19950412S101702A043533AYBXB
never never NY 157D3321049912F8 BX YBXBI02 19951102S101702A048803AYBXB
never never NY 1596811E0E952A20 BX YBXBI02 19960411160932S101702A05322
never never NY 159682CA15F0B836 BX YBXBI02 19960411170957S101702A05322
never never NY 15976C0F0BF07EB4 BX YBXBI02 19960417121909S101702Z24406
never never NY 1599CBC303481EC6 BX YBXBI02 19960502144753S101702A05376
never never NY 159AE3411AACAFBC BX YBXBI02 19960509133250S101702A05405
never never NY 159FE3750F03EAA2 BX YBXBI02 19960610091341S101702Z25197
never never NY 15A065A211473E46 BX YBXBI02 19960613145220S101702A05488
never never NY 15A938CD19801C72 BX YBXBI02 19960808183124S101702A05620
never never NN 15B2001A082C1E72 BX YBXBI02 19961003150557S101702A05748
never never NN 15B2029B193C9E98 BX YBXBI02 19961003163436S101702A05748
never never NN 15BD048A0AC623A8 BX YBXBI02 19961212173256S101702A05967
never never NN 15CFB33B1E6D46A0 BX YBXBI02 19970410143058S101702A06303
never never NN 15D8853C0CCE4658 BX YBXBI02 19970605172718S101702A06422
never never NN 15DCE95A166E6354 BX YBXBI02 19970703160014S101702A06492
never never NN 15DF17FF0B5BC3B0 BX YBXBI02 19970717131554S101702A06536
never never NN 15DF18630359F1BA BX YBXBI02 19970717133106S101702A06536
never never NN 15F1CD80042EC1D0 BX YBXBI02 19971113142012S101702A06818
never never NN 16173B960230D682 BX YBXBI02 19980709201648S101702A07366
never never NN 1617502115928024 BX YBXBI02 19980710082953S101702A07366
never never NN 1515CC161CFB69BC BX YBXBI03
never never NN 153266D112454074 BX YBXBI03 19940714172644S101702A03577
never never NN 153F9DD30AA1AE10 BX YBXBI03 19941006193227S101702A03759
never never NN 155D2638146ED044 BX YBXBI03 19950412S101702A043533AYBXB
never never NN 157D332715BEAC82 BX YBXBI03 19951102S101702A048803AYBXB
never never NN 1596811E1CE8D736 BX YBXBI03 19960411160937S101702A05322
never never NN 159682CA0817474A BX YBXBI03 19960411170957S101702A05322
never never NN 15A938CF0B61F9A8 BX YBXBI03 19960808183125S101702A05620
never never NN 15B2001908A2BEF2 BX YBXBI03 19961003150558S101702A05748
never never NN 15B202991591C6E2 BX YBXBI03 19961003163436S101702A05748
never never NN 15BD04871D1AAE42 BX YBXBI03 19961212173257S101702A05967
never never NN 15CFB33513CD2048 BX YBXBI03 19970410143058S101702A06303
never never NN 15D88535191DE38F BX YBXBI03 19970605172719S101702A06422
never never NN 15DCE95503E123A4 BX YBXBI03 19970703160015S101702A06492
never never NN 15DF17FA13612488 BX YBXBI03 19970717131555S101702A06536
never never NN 15DF186406354B8E BX YBXBI03 19970717133107S101702A06536
never never NN 15EF99491675D14D BX YBXBI03 19971030134549S101702A06783
never never NY 16D27F481B54E74C CBRHCAUD CBRHCAUD 2001-10-13-07.26.46.
never never NY 175E0A8A1FBEA5F5 CBRHCAUD CBRHCAUD 2004-03-19-05.11.59.
never never NY 168751910186F7D0 CBRHCAUD CBRHCAUD UW71236HDZ11F0
never never NY 16D27F490D11FA4A CBRHCLDL CBRHCLDL 2001-10-13-07.26.50.
never never NY 175E0A8B0C9C2749 CBRHCLDL CBRHCLDL 2004-03-19-05.12.02.
never never NY 168751920A386B30 CBRHCLDL CBRHCLDL UW71236HDZ11F0
never never NY 16D27F481B7E1A9D CBRHCLLU CBRHCLLU 2001-10-13-07.26.46.
never never NY 175E0A8C1B88A0CC CBRHCLLU CBRHCLLU 2004-03-19-05.12.15.
never never NY 16875193133CA944 CBRHCLLU CBRHCLLU UW71236HDZ11F0
never never NY 16D27F4A1D9CBEA0 CBRHCLMK CBRHCLMK 2001-10-13-07.27.03.
never never NY 175E0A8D0AFC4313 CBRHCLMK CBRHCLMK 2004-03-19-05.12.19.
never never NY 168751941DE271C8 CBRHCLMK CBRHCLMK UW71236HDZ11F0
never never NY 16D27F4B1150FE60 CBRHCLSG CBRHCLSG 2001-10-13-07.27.08.
never never NY 175E0A900636073F CBRHCLSG CBRHCLSG 2004-03-19-05.12.43.
never never NY 1687519609210A50 CBRHCLSG CBRHCLSG UW71236HDZ11F0
never never NY 16D27FBC15DE355A CBRHTBSV CBRHTBSV 2001-10-13-07.42.57.
never never NY 175E0AC312892ED3 CBRHTBSV CBRHTBSV 2004-03-19-05.19.54.
never never NY 168751990A0FFBF0 CBRHTBSV CBRHTBSV UW71236HDZ11F0
never never NY 16D27FFE1791DFB1 CBRKCMD CBRKCMD 2001-10-13-07.52.12.04
never never NY 175E0AE316B8AB51 CBRKCMD CBRKCMD 2004-03-19-05.24.23.68
never never NY 1687519C0D8BBF84 CBRKCMD CBRKCMD UW71236HDZ11F0
never never NY 16D27FFD1ED3C060 CBRKCME CBRKCME 2001-10-13-07.52.05.55
never never NY 175E0AE401B3DC9A CBRKCME CBRKCME 2004-03-19-05.24.26.56
never never NY 1687519E0C2D38C0 CBRKCME CBRKCME UW71236HDZ11F0
never never NY 16D27FFD1720EAF2 CBRKCMF CBRKCMF 2001-10-13-07.52.03.53
never never NY 175E0AE31F83014F CBRKCMF CBRKCMF 2004-03-19-05.24.25.98
never never NY 1687519F1B2CB520 CBRKCMF CBRKCMF UW71236HDZ11F0
never never NY 16D27FFD1CC97878 CBRKCMI CBRKCMI 2001-10-13-07.52.05.02
never never NY 175E0AE400DA8001 CBRKCMI CBRKCMI 2004-03-19-05.24.26.34
never never NY 168751A10E0673A8 CBRKCMI CBRKCMI UW71236HDZ11F0
never never NY 16D27FFE05A081C2 CBRKCMR CBRKCMR 2001-10-13-07.52.07.33
never never NY 1772BC8E068E4349 CBRKCMR CBRKCMR UA12772HDZ11J0
never never NY 168751A30435DE34 CBRKCMR CBRKCMR UW71236HDZ11F0
never never NY 16862E761A2ED30C CBRKCMT CBRKCMT 439276300377892470
never never NY 16D27FFC1D9C3C4C CBRKCMT CBRKCMT 496778316382894076
never never NY 1772BC951EE6DC09 CBRKCMT CBRKCMT 518446089393395349
never never NY 16D27FFD14006BF9 CBRKISQL CBRKISQL 2001-10-13-07.52.02.
never never NY 175E0AE9193B5A99 CBRKISQL CBRKISQL 2004-03-19-05.25.14.
never never NY 168751A4197A2A6C CBRKISQL CBRKISQL UW71236HDZ11F0
never never NY 15BCFF9211D7D5F2 CC CC5160 19961212143434S101702A058962
never never NY 14BBBCEB10562DAC CD CD7060
never never NY 1607CC87009377F2 CD CD7360 19980402152138S101702A071420
never never NY 1607D0CE1E40D76C CD CD7360 19980402174642S101702A071420
never never NY 160E69CA02CA2E04 CD CD7360 19980514170508S101702M000860
never never NN 1579EA0719E61C64 CD CD7400 19951012S101702A048447ACD740
never never NY 15EA18DF00A0C786 CD CD8070 19970925133611S101702A066943
never never NN 159F6A5202352D98 CD FC0100 19960607085733S101702A054822
never never NN 15F74CAA04C50F62 CD FC0100 19971218134434S101702A069142
never never NY 15B104390214625A CD KD0600 19960927085001S101702Z268024
never never NY 15B1FEA60B8D931A CD KD0600 19961003141208S101702A057537
never never NY 15DAB25E0DF199C4 CD KD0600 19970619134842S101702A064764
never never NN 15077C791908E980 CD YCD0020
never never NN 151FB5DB02B76488 CD YCD0020 19940317190318S101702A03246
never never NN 15305500137FDB66 CD YCD0020 19940701132652S101702A03521
never never NN 1530F1710F009558 CD YCD0020 19940705104246S101702A03521
never never NN 1530F70614D77016 CD YCD0020 19940705140411S101702A03521
never never NN 1530F7A51AC00442 CD YCD0020 19940705142646S101702A03521
never never NN 156734E0079F570E CD YCD0020 19950615S101702A045345AYCD0
never never NN 156967FE0AEFA1D0 CD YCD0020 19950629S101702A045492AYCD0
never never NN 157F6A4E085AAA98 CD YCD0020 19951116S101702A049627AYCD0
never never NN 158B83D1176585EC CD YCD0020 19960201S101702A051689AYCD0
never never NN 159450A90E30F3E8 CD YCD0020 19960328175022S101702A05306
never never NN 15A3B5BA1726FE08 CD YCD0020 19960704164722S101702A05552
never never NN 15A3B6F901A7DD12 CD YCD0020 19960704173143S101702A05552
never never NN 15A3CF05023D424A CD YCD0020 19960705075225S101702A05552
never never NN 15AD97B41E3F7E22 CD YCD0020 19960905135843S101702A05681
never never NY 15FF00181D660876 CD YCD110 19980205134459S101702A070170
never never NN 1540AE5C1A55C162 CD YCDCIFD 19941013140654S101702A03815
never never NN 1556AEC90FAD7926 CD YCDCIFD 19950302135905S101702A04246
never never NN 1568502611151630 CD YCDCIFD 19950622S101702M000590AYCDC
never never NN 156FFEBB0A81C644 CD YCDCIFD 19950810S101702A046728AYCDC
never never NN 15921ACF14E4FCE8 CD YCDCIFD 19960314161808S101702M00066
never never NN 15967DA613BB57BC CD YCDCIFD 19960411140629S101702A05334
never never NN 1597995A15E7FACA CD YCDCIFD 19960418152009S101702M00068
never never NN 159BD63C1139329C CD YCDCIFD 19960515142952S101702A05406
never never NN 159BD6FD14A669EE CD YCDCIFD 19960515145654S101702A05406
never never NN 15AD9A581B4F93A6 CD YCDCIFD 19960905153115S101702M00071
never never NN 15B899580C8E1338 CD YCDCIFD 19961114144241S101702M00074
never never NN 15B89EB512A292AE CD YCDCIFD 19961114175616S101702M00074
never never NN 15B8A1D910952E1A CD YCDCIFD 19961114194635S101702M00074
never never NN 15BBE8AC12C0D3EA CD YCDCIFD 19961205161342S101702A05952
never never NN 15C91AA00277CADC CD YCDCIFD 19970227151435S101702A06186
never never NN 15CC68351522E6DA CD YCDCIFD 19970320153542S101702M00077
never never NN 15E3800816237E30 CD YCDCIFD 19970814141023S101702M00080
never never NN 15F2E5D6066FBD54 CD YCDCIFD 19971120133445S101702A06824
never never NN 15FBBA17119631CA CD YCDCIFD 19980115174306S101702M00085
never never NY 17C52B9D06384F83 CD YCDCL01 CIIN000149
never never NN 1514B70C12D99AC6 CD YCDGETJ
never never NY 151FB0AC01F220D4 CD YCDGETJ 19940317160328S101702A03255
never never NY 153054EE18466F2E CD YCDGETJ 19940701132442S101702A03521
never never NY 1530F1490653D362 CD YCDGETJ 19940705103237S101702A03521
never never NY 1530F6DF06087278 CD YCDGETJ 19940705140220S101702A03521
never never NY 1530F7891CBA21E2 CD YCDGETJ 19940705142430S101702A03521
never never NY 1501FC62060A9EE0 CD YCDGETP
never never NN 1501FC601768D118 CD YCDGETV
never never NN 151FB0A70E8B697C CD YCDGETV 19940317160338S101702A03255
never never NN 153054EE141462B6 CD YCDGETV 19940701132444S101702A03521
never never NN 1530F14B1B482D88 CD YCDGETV 19940705103237S101702A03521
never never NN 1530F6DF0AA29580 CD YCDGETV 19940705140221S101702A03521
never never NN 1530F78910EB04BA CD YCDGETV 19940705142431S101702A03521
never never NY 1587169C1C253D90 CD YCDT10 19960104S101702A050732AYCDT1
never never NY 158831A10E76C474 CD YCDT10 19960111S101702A050979AYCDT1
never never NY 159797650F79D1D2 CD YCDT10 19960418140935S101702A053432
never never NY 15A066AD1C558870 CD YCDT10 19960613152928S101702A054996
never never NY 1530F15801C41E26 CD YCDUP08 19940705103248S101702A03521
never never NY 1530F6EB0732D234 CD YCDUP08 19940705140233S101702A03521
never never NY 1530F7941949B6D8 CD YCDUP08 19940705142445S101702A03521
never never NN 1501FC6F0E68F5F8 CD YCDUP10
never never NN 1520C9941AA56AE6 CD YCDUP10 19940324153717S101702A03271
never never NN 1520CF8C0430E5D4 CD YCDUP10 19940324191112S101702A03271
never never NN 1520D16C0A4DF29E CD YCDUP10 19940324201829S101702A03271
never never NN 153054F71D673956 CD YCDUP10 19940701132538S101702A03521
never never NN 1530F15A1892E6A2 CD YCDUP10 19940705103250S101702A03521
never never NN 1530F6F6000FEAD4 CD YCDUP10 19940705140235S101702A03521
never never NN 1530F78816A1F872 CD YCDUP10 19940705142447S101702A03521
never never NN 15921ADC03986FE2 CD YCDUP10 19960314161929S101702M00066
never never NY 15AD9A5E11A26544 CD YCDUP10 19960905153351S101702M00071
never never NY 15B6669C1A565FA0 CD YCDUP10 19961031150558S101702M00073
never never NY 15B8994607BDC728 CD YCDUP10 19961114144211S101702M00074
never never NY 15B89EB501B46BC4 CD YCDUP10 19961114175618S101702M00074
never never NY 15B8A1C010F53106 CD YCDUP10 19961114194602S101702M00074
never never NN 1520C9B40B86C616 CD YCDUP14 19940324153826S101702A03271
never never NN 1520CF8D13D1E3B4 CD YCDUP14 19940324191114S101702A03271
never never NN 1520D16711261DC8 CD YCDUP14 19940324201833S101702A03271
never never NN 153054FB064D3EEE CD YCDUP14 19940701132551S101702A03521
never never NN 1530F15D1D69D956 CD YCDUP14 19940705103255S101702A03521
never never NN 1530F6F81E751416 CD YCDUP14 19940705140239S101702A03521
never never NN 1530F79D1AFD0B1A CD YCDUP14 19940705142451S101702A03521
never never NN 15921ADE0FA3CF08 CD YCDUP14 19960314161951S101702M00066
never never NN 15AD9A321DB80298 CD YCDUP14 19960905152821S101702M00071
never never NN 15B666A81CF5C154 CD YCDUP14 19961031150600S101702M00073
never never NN 15B899461C768258 CD YCDUP14 19961114144213S101702M00074
never never NN 15B89EAC0CC4C672 CD YCDUP14 19961114175620S101702M00074
never never NN 15B8A1C310FEE20E CD YCDUP14 19961114194605S101702M00074
never never NY 153054ED02FB5328 CD YCDUP27 19940701132626S101702A03521
never never NY 1530F1631F6D1C68 CD YCDUP27 19940705104208S101702A03521
never never NY 1530F6FE0EAFF784 CD YCDUP27 19940705140313S101702A03521
never never NY 1530F7A00F4E651A CD YCDUP27 19940705142545S101702A03521
never never NN 15997B3D1157CD8E CD YKDX81 19960430144759S101702Z245908
never never NN 15997B6A10193FCA CD YKDX81 19960430145417S101702Z245908
never never NN 1599CDF318B0CD4E CD YKDX81 19960502160759S101702A053827
never never NN 159BD7E901D3785E CD YKDX81 19960515152931S101702M000684
never never NN 1597995A15E7FACA CE YCDCIFD 19960418152009S101702M00068
never never NN 14ED14B302817AC6 CI YCI009
never never NN 151FB5B81F5D3A2C CI YCI009 19940317190314S101702A032565
never never NN 153054DD0BE4164A CI YCI009 19940701132426S101702A035214
never never NN 1530F13F0C86A2CA CI YCI009 19940705103230S101702A035214
never never NN 1530F6DB02EB253A CI YCI009 19940705140212S101702A035214
never never NN 1530F7790C6C3940 CI YCI009 19940705142422S101702A035214
never never NY 15D0CB8004E979FE CI YCI009 19970417134326S101702A063176
never never NY 15D0CC9915DD70C2 CI YCI009 19970417142223S101702A063176
never never NY 15D0CD6B0DF09770 CI YCI009 19970417145207S101702A063176
never never NY 160E68E812A6A060 CI YCI009 19980514165332S101702M000860
never never NN 14ED14B70AC4C416 CI YCI009A
never never NN 151FB5E613026890 CI YCI009A 19940317190359S101702A03256
never never NN 153054DD11E8AA18 CI YCI009A 19940701132427S101702A03521
never never NN 1530F13C1951842C CI YCI009A 19940705103231S101702A03521
never never NN 1530F6DA1CF9EFDC CI YCI009A 19940705140214S101702A03521
never never NN 1530F77910DB11E8 CI YCI009A 19940705142423S101702A03521
never never NN 15921AC00EE448B4 CI YCI009A 19960314161448S101702M00066
never never NY 15D0CB8004A38E08 CI YCI009A 19970417134327S101702A06317
never never NY 15D0CC9A1FE21D84 CI YCI009A 19970417142225S101702A06317
never never NY 15D0CD6B08B0F534 CI YCI009A 19970417145208S101702A06317
never never NY 160E68FB06CB88F5 CI YCI009A 19980514165332S101702M00086
never never NY 17D4BE6119F0C03B CK CK8560 DCA0000087
never never NY 183634291D0D29A6 CK YCKE020 DCA0000188
never never NY 1836342F07F0041E CK YCKE025 DCA0000188
never never NY 17C7850F18022182 CK YCKMABB DCA0000079569F57BF
never never NY 17C7850F0E39A64E CK YCKMABC DCA0000079569F57C5
never never NY 176112D90A8C7BBC CK YCKMABU A12M005710534404B9
never never NY 17C785100E37D10D CK YCKMABU DCA0000079569F5810
never never NY 17C785A4143B13AB CK YCKMAPL DCA0000079
never never NY 17C785181484066B CK YCKMASD DCA0000079569F5827
never never NY 17C7851206FDAB95 CK YCKMASG DCA0000079569F57E1
never never NY 17C7850F0E23E03B CK YCKMASI DCA0000079569F57AA
never never NY 17C7851A05E79EB0 CK YCKMASL DCA0000079569F582F
never never NN 15547BB204297AD4 CO CO0020 19950216140329S101702A041670
never never NN 1558E09416CC4790 CO CO0020 19950316125817S101702A042779
never never NN 1561AFE40FB3FD46 CO CO0020 19950511142640S101702A044204
never never NN 14DEC79F0F44B9EA CO CO0030
never never NN 15547BB003A9BF52 CO CO0030 19950216140330S101702A041670
never never NY 14DDAE47110134CE CO CO0040
never never NN 15547BB10979E092 CO CO0040 19950216140333S101702A041670
never never NN 1501FD0B1A94F29E CO CO0050
never never NN 15547BB20BB06736 CO CO0050 19950216140336S101702A041670
never never NY 14C9E4321B25BBB2 CO CO5000
never never NN 15547BA211B83AC2 CO CO5000 19950216140316S101702A041670
never never NN 14DDAE4309588CF6 CO CO8000
never never NN 15547BA312BE4728 CO CO8000 19950216140319S101702A041670
never never NN 1516E5C215391FD0 CO CO8100
never never NN 15547BA61C4CC03C CO CO8100 19950216140321S101702A041670
never never NN 1516E5C3182E5E5C CO CO8200
never never NN 15547BA610A13436 CO CO8200 19950216140324S101702A041670
never never NN 16B3997B03D87FD3 CONVERT ASUCONV V6102
never never NN 150BE6781CFED35E CR CR5000
never never NN 155481450ACD38F6 CR CR5000 19950216172233S101702A042017
never never NN 15C5CB77129611DE CR CR5000 19970206135312S101702A061341
never never NN 152442BE014C38E6 CR YBXBI01 19940415175222S101702A03346
never never NN 14DDB3DE0606977A CR YCRAN01
never never NN 152CE1E5112F22D0 CR YCRAN01 19940609143524S101702A03484
never never NN 15A938DC1311D5A6 CR YCRAN01 19960808183350S101702A05620
never never NN 14DDB4541BF70BE6 CR YCRAN02
never never NN 155D23331D1F648A CR YCRAN02 19950412S101702A043707AYCRA
never never NN 15A938EC05F068FA CR YCRAN02 19960808183522S101702A05620
never never NY 1556900E0BBC5E4C CT CT8500 19950301194008S101702Z179440
never never NY 155690511D77C482 CT CT8500 19950301194935S101702Z179441
never never NY 1556AD0313EEBBA4 CT CT8500 19950302125634S101702Z179508
never never NY 151FB1121C7706C8 CU CU8320 19940317161809S101702A032590
never never NN 15497B6012F722AC CU CU8322 19941208140545S101702A040093
never never NY 181435171840D2E8 CZ CZ5494 ACP0000107
never never NY 177D7F491C6F5900 CZ CZ5600 CRMA003972
never never NY 16187CF101BACF70 CZ CZ6014 19980717195822S101702Z383277
never never NY 16187E7D02A03B02 CZ CZ6014 19980717205332S101702Z383277
never never NY 1618973B014362AA CZ CZ6014 19980718113921S101702Z383299
never never NY 17C93DC904E706E9 CZ CZ6030 KINF000006
never never NY 16D9741B01942356 CZ CZ6060 CRME000713
never never NY 17AFA2E61E170B30 CZ CZ7021 KUAN000023
never never NY 17D5CEE8094CE9C8 CZ CZ7270 HOT0000018
never never NY 17DD6191102FC877 CZ CZ7270 HOT0000021
never never NY 17EFEC59032FAAB7 CZ CZ7270 HOT0000023
never never NY 17E519721192463B CZ CZ7270 HOT0000024
never never NY 17E630DD0B59F1F0 CZ CZ7270 HOT0000025
never never NY 17C93DF7180711C4 CZ CZ7740 KINF000006
never never NY 17C18B6710085915 CZ CZ7740 KUAN000028
never never NY 17BEE43413AC55ED CZ CZ7740 KUAN000029
never never NY 17D6A53C06959321 CZ CZ7740 KUAN000033
never never NY 17AB171A0EEBDBA5 CZ CZ9991 KUAN000019
never never NY 17D6C4DE09142BBE CZ YCZBCAL ACP0000063571F51A9
never never NY 180B4A640B9CA6FA CZ YCZJ323 GSER00017058D7E6D6
never never NY 180B4A7105CC60FF CZ YCZJ431 GSER00017058D7E73D
never never NY 1841363C1F8BE2C9 CZ YCZJABW GSER0002225A9C2BE5
never never NY 1699CF290AFBC42A DAA400_D_MAIN PSEBN12 V3201
never never NY 16B5591E07CB67B9 DAA400_D_MAIN PSEBN13 V3201
never never NY 1700981E0C5A22E0 DAA400_D_MAIN PSSCSQL V4000
never never NY 1742296C07BC9A55 DAA400_D_MAIN PSSCSQL V4100
never never NY 16FB8F3D0D70F824 DAA400_D_MAIN PSSHSQL V4000
never never NY 16F72C5202566B34 DAA400_D_MAIN PSSIMPC V4000
never never NY 16E6B6EC07448B74 DAA400_D_MAIN PSSRULE V3401
never never NY 175559D31D3385AB DAA420_D_MAIN PSSCSQL V4100
never never NY 1765B19A01245409 DAA420_D_MAIN PSSHSQL V4200
never never NY 16CFB2AE19427F3B DB DB2REORG PROD
never never NY 181B2AEA04F96F90 DE DE5031 DE00000066
never never NY 1810528F0FB655C8 DE DE5080 DE00000061
never never NN 1511620504EC1CFE DE DE5630
never never NY 1802C8CF128E0800 DE DE9992 DE00000043
never never NY 1810529400FA47BC DE DE9992 DE00000061
never never NY 181B2AF7052B00F4 DE DE9992 DE00000066
never never NY 1839EFDC13261162 DE DE9992 DE00000077
never never NY 183885BB12DD75FC DE YDE0021 DE000000775A53475E
never never NY 155F7C6C1E180AE2 DE YDE0860 19950427S101702A044022AYDE0
never never NY 1561A8500A42762E DE YDE0860 19950511S101702Z189239AYDE0
never never NY 1562D01111457CC8 DE YDE0860 19950518S101702A044277AYDE0
never never NY 156366B61CF57B20 DE YDE0860 19950522S101702Z190760AYDE0
never never NY 15650056151C9842 DE YDE0860 19950601S101702A044799AYDE0
never never NY 1566199E198DE23C DE YDE0860 19950608S101702A045100AYDE0
never never NY 1567330710B49F86 DE YDE0860 19950615S101702M000591AYDE0
never never NY 1568502C1F47F1A0 DE YDE0860 19950622S101702M000590AYDE0
never never NY 156A83DA12D66C94 DE YDE0860 19950706S101702A045780AYDE0
never never NY 156B9C8A0BCE2502 DE YDE0860 19950713S101702A046130AYDE0
never never NY 156EE6770E9F8DF6 DE YDE0860 19950803S101702A046600AYDE0
never never NY 15769C3D10BF06C4 DE YDE0860 19950921S101702A047786AYDE0
never never NY 1579E34600FDC800 DE YDE0860 19951012S101702M000615AYDE0
never never NY 181AFA9508EE4408 DG YDGPORT DEPG000064
never never NY 15054CF11B1A0B6C DG YDGT011
never never NN 14F5E37B1C8D4C66 DG YDGT031
never never NY 17D3C4750C448953 DI DI8290 DI00000034
never never NY 17D3C4770B2D72AC DI YDIDB2 DI00000034570623C3
never never NY 17D6BE7C11CC2785 DI YDIT015 DI00000042571F1C16CICS
never never NY 18198C8304C23945 DI YDIT015 DI00000068594F823D
never never NY 18198C8507892155 DI YDIT015 DI00000068594F823DCICSMVS
never never NY 18198C841D3619BA DI YDIT015 DI00000068594F823DMVS
never never NY 18198C381FD89BCF DI YDITBTB DI00000068594F7FC8
never never NY 18198C3A1D3FE898 DI YDITBTB DI00000068594F7FC8CICSMVS
never never NY 18198C3A137B3E7F DI YDITBTB DI00000068594F7FC8MVS
never never NY 1827DF0B02EABE6E DI YDIU015 DI0000007059C7A76B
never never NY 1827DF0C1186792A DI YDIU015 DI0000007059C7A76BMVS
never never NY 1827DF141AD8064A DI YDIU016 DI0000007059C7A7B9
never never NY 1827DF161093B4F8 DI YDIU016 DI0000007059C7A7B9MVS
never never NY 1576B79804B3E908 DN DN8020 19950922S101702Z209425ADN802
never never NY 182DD5810A5D5CED DP DP0320 DP00000071
never never NY 17EB5ED91BBD159F DP DP7010 DP00000050
never never NY 160019B41D02BD2E DU DU7070 19980212134113S101702A070276
never never NY 152995530C6787B4 DX DX0100 19940519144614S101702A034343
never never NY 152F14DD070D004A DX DX0100 19940623142418S101702A035172
never never NY 159796A512C93048 DX DX0100 19960418134338S101702M000672
never never NY 15299A1D113F3DD4 DX DX5100 19940519174204S101702A034366
never never NY 1530338B0769824C DX DX5100 19940630173128S101702A035317
never never NY 1516E56C0BE01E84 DX DX5300
never never NY 15299A190482F6DA DX DX5300 19940519174211S101702A034369
never never NN 152537051F0FFE2A DX DX5400 19940421194557S101702A033552
never never NN 15D0CA270B156F6C DX DX5400 19970417125527S101702A063250
never never NN 152537120A71395C DX DX5410 19940421194631S101702A033552
never never NN 15D0CA28121AA544 DX DX5410 19970417125528S101702A063250
never never NN 1517FD751514FA70 EA YEA0001
never never NN 15337F06124853A6 EA YEA0001 19940721163813S101702M00043
never never NN 15462E13037918F4 EA YEA0001 19941117135202S101702M00051
never never NN 154A9E690B82CCDC EA YEA0001 19941215193956S101702M00052
never never NN 156A81DD1473F742 EA YEA0001 19950706S101702M000589AYEA0
never never NN 1572335409F1DA52 EA YEA0001 19950824S101702M000598AYEA0
never never NN 1581B8DD06D68B9A EA YEA0001 19951201S101702A049916AYEA0
never never NN 158B83251513C29A EA YEA0001 19960201S101702A051573AYEA0
never never NN 158ECB291091D9D8 EA YEA0001 19960222143902S101702A05219
never never NN 1599CA591992D64E EA YEA0001 19960502135830S101702A05328
never never NN 159B89AA04BBEFA8 EA YEA0001 19960513164908S101702Z24811
never never NN 159BD7ED11EE1660 EA YEA0001 19960515152936S101702M00068
never never NN 159CC6371E2C7964 EA YEA0001 19960521133901S101702Z24930
never never NN 159D18E30AFB83D6 EA YEA0001 19960523145633S101702A05431
never never NN 15A7F086162D4D0C EA YEA0001 19960731143941S101702A05613
never never NN 15AEBE9D15F33A68 EA YEA0001 19960912215250S101702M00071
never never NN 15BD047B01912116 EA YEA0001 19961212173052S101702A05967
never never NN 15BF58D41079A2D0 EA YEA0001 19961227131336S101702A06031
never never NN 15BF5E0017DFF52A EA YEA0001 19961227161942S101702A06031
never never NN 15C5CEC41E1B2A90 EA YEA0001 19970206155025S101702M00076
never never NN 15E38BB20573593B EA YEA0001 19970814210804S101702A06595
never never NN 160A06290BCC9706 EA YEA0001 19980416190745S101702M00089
never never NN 16173AC21148A7DA EA YEA0001 19980709194601S101702M00092
never never NN 1617527B0AF87D0C EA YEA0001 19980710093842S101702M00092
never never NN 15BF58D609596784 EA YEA0010 19961227131338S101702A06031
never never NN 15BF5E040E491842 EA YEA0010 19961227161943S101702A06031
never never NN 15C141DE0C350344 EA YEA0010 19970108165717S101702Z28911
never never NN 15C3983016D1F88C EA YEA0010 19970123135233S101702A06104
never never NN 15C5CECA033765D4 EA YEA0010 19970206155028S101702M00076
never never NN 15CC64A311C97686 EA YEA0010 19970320132759S101702A06255
never never NN 15CE49A71ED235A6 EA YEA0010 19970401145030S101702Z30409
never never NN 15D0CFBD11B65C6C EA YEA0010 19970417154119S101702A06329
never never NN 15D1698617CD912A EA YEA0010 19970421115820S101702Z30734
never never NN 15D16BFE136277A6 EA YEA0010 19970421132703S101702Z30734
never never NN 15D1E41110045C64 EA YEA0010 19970424130254S101702A06345
never never NN 15DF1806085C11CC EA YEA0010 19970717131720S101702A06536
never never NN 15E38BB51B10836F EA YEA0010 19970814210808S101702A06595
never never NN 15E6CF6917BFF48A EA YEA0010 19970904153951S101702A06652
never never NN 15F1CEBE0774381C EA YEA0010 19971113150405S101702A06804
never never NN 15FA9CA40C77607C EA YEA0010 19980108153347S101702M00088
never never NN 15FF02A81B8BDC78 EA YEA0010 19980205151554S101702A07015
never never NN 16001B6906823AE0 EA YEA0010 19980212144146S101702M00083
never never NN 160A062B111DAC8A EA YEA0010 19980416190746S101702M00089
never never NN 160E67361D9AB912 EA YEA0010 19980514155250S101702M00091
never never NN 1612E4FE00148DF8 EA YEA0010 19980612054603S101702M00092
never never NN 16173ABD1E4AD1F6 EA YEA0010 19980709194554S101702M00092
never never NN 161752420B5511C2 EA YEA0010 19980710093614S101702M00092
never never NN 15BF58D4128C7AE8 EA YEA0011 19961227131340S101702A06031
never never NN 15BF5E020D42049A EA YEA0011 19961227161943S101702A06031
never never NN 15C141DC1A13AE6E EA YEA0011 19970108165718S101702Z28911
never never NN 15C3982E0E026572 EA YEA0011 19970123135233S101702A06104
never never NN 15C5CEC502A3D5C8 EA YEA0011 19970206155016S101702M00076
never never NN 15DF17FF001DA882 EA YEA0011 19970717131722S101702A06536
never never NN 15E38BB719377B7C EA YEA0011 19970814210813S101702A06595
never never NN 16001B65158B5B5C EA YEA0011 19980212144147S101702M00083
never never NN 160A063103FDDA9E EA YEA0011 19980416190755S101702M00089
never never NN 1612E4FC061B9217 EA YEA0011 19980612054603S101702M00092
never never NN 16173ABF00107CA0 EA YEA0011 19980709194555S101702M00092
never never NN 1617523017C7E3F2 EA YEA0011 19980710093659S101702M00092
never never NY 150200EA16D66220 EB EB5150
never never NY 154861AB06B76EA8 EB EB5150 19941201140340S101702A039621
never never NY 15E7E3D614E929D4 EB EB9000 19970911123324S101702A066672
never never NN 15F32B6F18A72244 EC EC5099 19971122070527S101702Z346068
never never NN 15F363BB0B30A920 EC EC5099 19971123164056S101702Z346149
never never NN 15FCCEB10C9D55EE EC EC5099 19980122145046S101702A069866
never never NN 15ED681E09A24E46 EC EC7103 19971016150142S101702A067558
never never NN 15F3119B186B71AC EC EC7103 19971121154032S101702A068485
never never NY 17D233BB160F6221 EC EC7420 KAUS000011
never never NY 1614868703298A1A EC EC8062 19980622145120S101702Z380281
never never NY 1614AE6D069F4589 EC EC8062 19980623143853S101702Z380537
never never NY 1614CFEC18313F0C EC EC8062 19980624103834S101702Z380638
never never NY 1614868E1B2D9E84 EC EC8063 19980622145205S101702Z380283
never never NY 1614AE6C0563C024 EC EC8063 19980623143831S101702Z380538
never never NY 1614CFF814886764 EC EC8063 19980624103859S101702Z380639
never never NN 16059B1917DAB9F4 EC EC8067 19980319142758S101702A071130
never never NY 1607D0BC0053FFC6 EC EC8140 19980402174847S101702A071444
never never NY 160C31381514C7A2 EC EC8140 19980430141651S101702A072032
never never NN 1607F23A0D2D8D08 EC EC8698 19980403135200S101702A071490
never never NN 15F0B830135F9E5C EC YECAV 19971106165427S101702A068113A
never never NN 15F0D48B1F4427D2 EC YECAV 19971107094915S101702A068113A
never never NN 15F545B30A0C7088 EC YECAV 19971205161051S101702A068771A
never never NN 15FBBA0E07F43A00 EC YECAV 19980115174314S101702M000856A
never never NN 15FF2F3B1A2C9016 EC YECAV 19980206175259S101702A070225A
never never NN 16004156009EBBC6 EC YECAV 19980213132027S101702A070420A
never never NN 160484CF1FE9F394 EC YECAV 19980312162542S101702A070997A
never never NN 160487610B1F3D9E EC YECAV 19980312175718S101702A070997A
never never NN 1607F2C7192E8D04 EC YECAV 19980403141043S101702A071472A
never never NN 160A061B116002BC EC YECAV 19980416190501S101702M000898A
never never NY 15F0B76E05CF8658 EC YECAVKY 19971106162740S101702A06770
never never NY 15FBBA000FC923D2 EC YECAVKY 19980115174842S101702M00085
never never NY 160484BA031BAB26 EC YECAVKY 19980312162557S101702A07099
never never NY 16048752153D688E EC YECAVKY 19980312175734S101702A07099
never never NY 1607F2C615750B60 EC YECAVKY 19980403141026S101702A07147
never never NY 16187C430C3C3C2C EC YECAVKY 19980717193302S101702Z38328
never never NY 16187C9515EBB6E4 EC YECAVKY 19980717194554S101702Z38329
never never NN 15F0B82D01D418AC EC YECCL 19971106165431S101702A068113A
never never NN 15F0D48C07A3F0A0 EC YECCL 19971107094920S101702A068113A
never never NN 15F545C1006F6182 EC YECCL 19971205161052S101702A068771A
never never NN 15FBB9E8013285E2 EC YECCL 19980115174315S101702M000856A
never never NN 15FF2F5C08CEC51E EC YECCL 19980206175302S101702A070225A
never never NN 160484CB09405DA6 EC YECCL 19980312162548S101702A070997A
never never NN 160487651199F533 EC YECCL 19980312175726S101702A070997A
never never NN 1607F2E713849224 EC YECCL 19980403141044S101702A071472A
never never NN 160A06221E744414 EC YECCL 19980416190801S101702M000898A
never never NN 1611DC2817134B14 EC YECCL 19980605154804S101702A072938A
never never NN 1616421401679618 EC YECCL 19980703152436S101702A073255A
never never NN 15F0B82E094D8612 EC YECCLAR 19971106165420S101702A06811
never never NN 15F0D48B1181760E EC YECCLAR 19971107094906S101702A06811
never never NN 15F545BA054E1286 EC YECCLAR 19971205161053S101702A06877
never never NN 15FBBA06123E0AD2 EC YECCLAR 19980115174315S101702M00085
never never NN 15FF2F4A016A922E EC YECCLAR 19980206175303S101702A07022
never never NN 1607F2C41EA50197 EC YECCLAR 19980403141045S101702A07147
never never NN 160A061805DF2698 EC YECCLAR 19980416190501S101702M00089
never never NN 15F0B830153EB424 EC YECCLC 19971106165420S101702A068113
never never NN 15F0D48B1CA47328 EC YECCLC 19971107094907S101702A068113
never never NN 15F545BB0E124242 EC YECCLC 19971205161054S101702A068771
never never NN 15FF2F5A0246B50E EC YECCLC 19980206175303S101702A070225
never never NN 1607F2C70D40CC2E EC YECCLC 19980403141046S101702A071472
never never NN 160A060C03D40B44 EC YECCLC 19980416190502S101702M000898
never never NN 15F0B82F045E008E EC YECCLV 19971106165421S101702A068113
never never NN 15F0D48B18A41362 EC YECCLV 19971107094908S101702A068113
never never NN 15F545B80366C636 EC YECCLV 19971205161054S101702A068771
never never NN 15FF2F510865C1D4 EC YECCLV 19980206175304S101702A070225
never never NN 1607F2C607AE3242 EC YECCLV 19980403141033S101702A071472
never never NN 160A061B069AA6AE EC YECCLV 19980416190502S101702M000898
never never NN 15F0B83106C6764E EC YECCR 19971106165421S101702A068113A
never never NN 15F0D48A14858024 EC YECCR 19971107094908S101702A068113A
never never NN 15F545C100A253DE EC YECCR 19971205161055S101702A068771A
never never NN 15F71EFE0E9B63C2 EC YECCR 19971217103059S101702Z351294A
never never NN 15F7E7CA0BB619B0 EC YECCR 19971222101649S101702Z352108A
never never NN 15F956E80B940962 EC YECCR 19971231131652S101702Z353056A
never never NN 15FBB9DE1D7488C4 EC YECCR 19980115174315S101702M000856A
never never NN 15FF2F5D03F13F8C EC YECCR 19980206175304S101702A070225A
never never NN 160484D7173C5432 EC YECCR 19980312162559S101702A070997A
never never NN 1604875C12E9E7DC EC YECCR 19980312175737S101702A070997A
never never NN 16059B090567D7A6 EC YECCR 19980319142423S101702A071130A
never never NN 160640260A2A9EBE EC YECCR 19980323165535S101702A071245A
never never NN 1607F2E81A55C2E6 EC YECCR 19980403141046S101702A071472A
never never NN 160A062C1452E3E8 EC YECCR 19980416190503S101702M000898A
never never NN 1610972C0E9C23AC EC YECCR 19980528135617S101702A072724A
never never NN 1616420F068A6102 EC YECCR 19980703152441S101702A073255A
never never NN 15F0B82F1F49F366 EC YECCRAR 19971106165422S101702A06811
never never NN 15F0D48A00CA61E2 EC YECCRAR 19971107094909S101702A06811
never never NN 15F545B409D26B5C EC YECCRAR 19971205161056S101702A06877
never never NN 15FF2F551FB7E5EE EC YECCRAR 19980206175305S101702A07022
never never NN 1607F2C608B1D4A2 EC YECCRAR 19980403141048S101702A07147
never never NN 160A060906D81AD8 EC YECCRAR 19980416190504S101702M00089
never never NN 15F0B82F12EAD36A EC YECCRC 19971106165423S101702A068113
never never NN 15F0D48A144CE4AC EC YECCRC 19971107094910S101702A068113
never never NN 15F545BA0AF8B628 EC YECCRC 19971205161056S101702A068771
never never NN 15FF2F570F10E654 EC YECCRC 19980206175306S101702A070225
never never NN 160484CF1A9BEEBA EC YECCRC 19980312162645S101702A070997
never never NN 160487510980BD14 EC YECCRC 19980312175740S101702A070997
never never NN 1607F2C608BE25AC EC YECCRC 19980403141048S101702A071472
never never NN 160A060D16C49E12 EC YECCRC 19980416190505S101702M000898
never never NN 15F0B8301141ED4C EC YECCRCR 19971106165423S101702A06811
never never NN 15F0D48A12AEF7FA EC YECCRCR 19971107094911S101702A06811
never never NN 15F545B71862DA86 EC YECCRCR 19971205161057S101702A06877
never never NN 15FBB9DE0A10A518 EC YECCRCR 19980115174316S101702M00085
never never NN 15FF2F5B09F0782E EC YECCRCR 19980206175307S101702A07022
never never NN 1607F2C316838156 EC YECCRCR 19980403141049S101702A07147
never never NN 160A061415820813 EC YECCRCR 19980416190505S101702M00089
never never NN 1616421015998925 EC YECCRCR 19980703152444S101702A07325
never never NN 15F0B83007DF8FC4 EC YECCRL 19971106165424S101702A068113
never never NN 15F0D48A07D29C26 EC YECCRL 19971107094912S101702A068113
never never NN 15F545B919345596 EC YECCRL 19971205161057S101702A068771
never never NN 15F6D603188DDDC2 EC YECCRL 19971215145836S101702Z350817
never never NN 15F956B9029215A2 EC YECCRL 19971231130928S101702Z353046
never never NN 15FBB9F819707B6D EC YECCRL 19980115174316S101702M000856
never never NN 15FF2F521788B1CC EC YECCRL 19980206175308S101702A070225
never never NN 160484CE0F9D314B EC YECCRL 19980312162647S101702A070997
never never NN 1604875F13D0FBCB EC YECCRL 19980312175741S101702A070997
never never NN 1607F2C213A6DF6E EC YECCRL 19980403141049S101702A071472
never never NN 160A06131A415106 EC YECCRL 19980416190507S101702M000898
never never NN 1616420D065CE312 EC YECCRL 19980703152444S101702A073255
never never NN 15F0B8300D5ED954 EC YECCRV 19971106165424S101702A068113
never never NN 15F0D4881021850A EC YECCRV 19971107094912S101702A068113
never never NN 15F545BA0B5DB7A2 EC YECCRV 19971205161058S101702A068771
never never NN 15FF2F581FFD9074 EC YECCRV 19980206175309S101702A070225
never never NN 160484C403CA55C4 EC YECCRV 19980312162532S101702A070997
never never NN 1604875901460CBE EC YECCRV 19980312175704S101702A070997
never never NN 1607F2C1176F4294 EC YECCRV 19980403141050S101702A071472
never never NN 160A060E18B95F84 EC YECCRV 19980416190508S101702M000898
never never NN 15F0B8300D7C7056 EC YECDCI 19971106165425S101702A068113
never never NN 15F0D48B136FDD42 EC YECDCI 19971107094913S101702A068113
never never NN 15F545BD0A1D1B02 EC YECDCI 19971205161058S101702A068771
never never NN 15FF2F5B09ED90EC EC YECDCI 19980206175310S101702A070225
never never NN 160484C60554B842 EC YECDCI 19980312162533S101702A070997
never never NN 1604875A091438D8 EC YECDCI 19980312175704S101702A070997
never never NN 1607F2CB07EA886E EC YECDCI 19980403141051S101702A071472
never never NN 160A06170BD33D3A EC YECDCI 19980416190509S101702M000898
never never NN 160A96500BAC1586 EC YECDCI 19980420091008S101702A071906
never never NN 160BBB7A05EF4EA4 EC YECDCI 19980427160238S101702A072040
never never NY 17C8A99219A4B2B0 EC YECDMAE SYNC00001056A8EDE4
never never NY 17C8A993064683A1 EC YECDMAE SYNC00001056A8EDE4CICS
never never NY 17EEF6801E478A10 EC YECDMAE SYNC00001957EA4559
never never NY 17EEF6810A7BE081 EC YECDMAE SYNC00001957EA4559CICS
never never NY 17C96ABA10AE6176 EC YECDMAU SYNC00001056AF4229
never never NN 160018711CE7C5AE EC YECGR2 19980212125839CGS101702A0699
never never NN 1600187000F79F58 EC YECGR2 19980212125839S101702A069923
never never NN 1600BFE91492DA18 EC YECGR2 19980216165226CGS101702A0704
never never NN 1600BFE7162F1488 EC YECGR2 19980216165226S101702A070496
never never NN 15FF2F5A02CF9692 EC YECGRI 19980206175312S101702A070225
never never NN 160041540F0188B0 EC YECGRI 19980213132027S101702A070420
never never NN 160484C40DB4FBC4 EC YECGRI 19980312162534S101702A070997
never never NN 1604875E13ACF042 EC YECGRI 19980312175705S101702A070997
never never NN 15F0B82E10911A5A EC YECIN 19971106165426S101702A068113A
never never NN 15F0D48B0FFBB328 EC YECIN 19971107094915S101702A068113A
never never NN 15F545BD0D1AF412 EC YECIN 19971205161103S101702A068771A
never never NN 15FF2F490C6FF92A EC YECIN 19980206175315S101702A070225A
never never NN 160484CB1E18039A EC YECIN 19980312162534S101702A070997A
never never NN 1604875C0C3A341C EC YECIN 19980312175705S101702A070997A
never never NN 1607F2DC09F82C28 EC YECIN 19980403141052S101702A071472A
never never NN 160A06171232C8CE EC YECIN 19980416190510S101702M000898A
never never NN 15F2EF330D950AE4 EC YECMUPD 19971120190914S101702M00085
never never NN 15F387000255D614 EC YECMUPD 19971124134218S101702Z34640
never never NN 15F3B4610C099D6C EC YECMUPD 19971125164536S101702A06856
never never NN 15F3D3BB0BB4D45C EC YECMUPD 19971126112833S101702A06862
never never NN 15F3D5D401BFFED8 EC YECMUPD 19971126124340S101702Z34706
never never NN 15F545B70FB66FDC EC YECMUPD 19971205161051S101702A06877
never never NN 15FBB9E31019A47F EC YECMUPD 19980115174318S101702M00085
never never NN 15FF2F49181AFB64 EC YECMUPD 19980206175318S101702A07022
never never NN 1600415403E607FA EC YECMUPD 19980213132028S101702A07042
never never NN 161642111D850403 EC YECMUPD 19980703152435S101702A07325
never never NN 15F0B82F152B51B2 EC YECRP 19971106165427S101702A068113A
never never NN 15F0D48B11FC3302 EC YECRP 19971107094916S101702A068113A
never never NN 15F545C01225D6AA EC YECRP 19971205161104S101702A068771A
never never NN 15FF2F49062A0CF8 EC YECRP 19980206175319S101702A070225A
never never NN 160484C41CDD0F82 EC YECRP 19980312162535S101702A070997A
never never NN 1604875E11025398 EC YECRP 19980312175706S101702A070997A
never never NN 1607F2DD0724DE18 EC YECRP 19980403141052S101702A071472A
never never NN 160A061612B29FE8 EC YECRP 19980416190511S101702M000898A
never never NN 1610972B18CC52C4 EC YECRP 19980528135618S101702A072724A
never never NN 15F0B82E04423B7A EC YECRPA 19971106165428S101702A068113
never never NN 15F0D48A1D480570 EC YECRPA 19971107094916S101702A068113
never never NN 15F545BB15A94788 EC YECRPA 19971205161104S101702A068771
never never NN 15FF2F4C007B2C5C EC YECRPA 19980206175319S101702A070225
never never NN 160484C3174DAEC4 EC YECRPA 19980312162535S101702A070997
never never NN 1604875B0FD6041D EC YECRPA 19980312175706S101702A070997
never never NN 1607F2DC1F8EBB30 EC YECRPA 19980403141052S101702A071472
never never NN 1609AC82002786F4 EC YECRPA 19980414134151S101702A071717
never never NN 160A060B1ED165E8 EC YECRPA 19980416190512S101702M000898
never never NN 15F0B82E04E9C92E EC YECRPAV 19971106165428S101702A06811
never never NN 15F0D48B12E16B50 EC YECRPAV 19971107094917S101702A06811
never never NN 15F545C0121A79C6 EC YECRPAV 19971205161105S101702A06877
never never NN 15FF2F4C1F88B18C EC YECRPAV 19980206175320S101702A07022
never never NN 160484CC0635351C EC YECRPAV 19980312162536S101702A07099
never never NN 160487550C717D57 EC YECRPAV 19980312175707S101702A07099
never never NN 1607F2CA16F8C5E6 EC YECRPAV 19980403141053S101702A07147
never never NN 160A060C00394802 EC YECRPAV 19980416190513S101702M00089
never never NN 1607F2CB032AD41C EC YECRPV 19980403141036S101702A071472
never never NN 1609AC820035CA36 EC YECRPV 19980414134152S101702A071717
never never NN 160A060A1E0929E8 EC YECRPV 19980416190513S101702M000898
never never NN 15F0B82E0BF34610 EC YECRT 19971106165428S101702A068113A
never never NN 15F0D48B0467727C EC YECRT 19971107094917S101702A068113A
never never NN 15F545BD0B9C052C EC YECRT 19971205161105S101702A068771A
never never NN 15FF2F590391F820 EC YECRT 19980206175322S101702A070225A
never never NN 160484C403D12582 EC YECRT 19980312162537S101702A070997A
never never NN 1604875F00B82508 EC YECRT 19980312175708S101702A070997A
never never NN 1607F2DC0A208E66 EC YECRT 19980403141054S101702A071472A
never never NN 160A060A034547EE EC YECRT 19980416190514S101702M000898A
never never NN 161642111C8054A1 EC YECRT 19980703152433S101702A073255A
never never NN 15F0B82D15233B98 EC YECRTV 19971106165429S101702A068113
never never NN 15F0D48A070F484A EC YECRTV 19971107094918S101702A068113
never never NN 15F545BC08DAF174 EC YECRTV 19971205161106S101702A068771
never never NN 15FF2F5A037AE4C6 EC YECRTV 19980206175323S101702A070225
never never NN 160484C40DE31684 EC YECRTV 19980312162537S101702A070997
never never NN 1604875F1A3BF29A EC YECRTV 19980312175708S101702A070997
never never NN 1607F2CB17A2D227 EC YECRTV 19980403141054S101702A071472
never never NN 160A060A1E0A437C EC YECRTV 19980416190514S101702M000898
never never NN 15FF2F490A9CA6E4 EC YECSAN 19980206175323S101702A070225
never never NN 1600415017B31312 EC YECSAN 19980213132028S101702A070420
never never NN 160484C313321A88 EC YECSAN 19980312162538S101702A070997
never never NN 160487570783DF34 EC YECSAN 19980312175709S101702A070997
never never NN 1616420E0CE0CFBF EC YECSAN 19980703152435S101702A073255
never never NN 15FF2F4C16BF00A4 EC YECSAS 19980206175324S101702A070225
never never NN 160041540F3D2242 EC YECSAS 19980213132029S101702A070420
never never NN 160484C51A2027F0 EC YECSAS 19980312162539S101702A070997
never never NN 1604875B02B0189E EC YECSAS 19980312175709S101702A070997
never never NN 16164212086E9087 EC YECSAS 19980703152436S101702A073255
never never NN 15FF2F470F39A554 EC YECSBR 19980206175325S101702A070225
never never NN 160041501368CE0A EC YECSBR 19980213132030S101702A070420
never never NN 160484C30329E5AE EC YECSBR 19980312162539S101702A070997
never never NN 160487521B312888 EC YECSBR 19980312175714S101702A070997
never never NN 15FF2F461700EBBA EC YECSDH 19980206175326S101702A070225
never never NN 16004151048CF610 EC YECSDH 19980213132030S101702A070420
never never NN 160484C81DE619D4 EC YECSDH 19980312162540S101702A070997
never never NN 160487570B55B50E EC YECSDH 19980312175716S101702A070997
never never NN 1616420E04FE214A EC YECSDH 19980703152437S101702A073255
never never NN 15FF2F5917BA309C EC YECSDOC 19980206175327S101702A07022
never never NN 160041531948C7A2 EC YECSDOC 19980213132031S101702A07042
never never NN 160484CD1A8B157A EC YECSDOC 19980312162536S101702A07099
never never NN 16048756100F02D3 EC YECSDOC 19980312175707S101702A07099
never never NN 16152AB40D046814 EC YECSDOC 19980626164741S101702A07340
never never NN 1616421115748287 EC YECSDOC 19980703152437S101702A07325
never never NN 15FF2F4F1510811A EC YECSDS 19980206175327S101702A070225
never never NN 160041560954D5F4 EC YECSDS 19980213132031S101702A070420
never never NN 160484C415E8CB7E EC YECSDS 19980312162540S101702A070997
never never NN 160487620F1F3ECA EC YECSDS 19980312175716S101702A070997
never never NN 1616420D04A1C21C EC YECSDS 19980703152438S101702A073255
never never NN 15FF2F5B198212D6 EC YECSEG 19980206175328S101702A070225
never never NN 1600415605BF38C8 EC YECSEG 19980213132031S101702A070420
never never NN 160484C90E7AFB84 EC YECSEG 19980312162541S101702A070997
never never NN 160487611AC4970E EC YECSEG 19980312175717S101702A070997
never never NN 1616421304F698FF EC YECSEG 19980703152438S101702A073255
never never NN 15FF2F5C11BB925C EC YECSES 19980206175329S101702A070225
never never NN 1600414A1DE1C5D6 EC YECSES 19980213132036S101702A070420
never never NN 160484D71DC306BC EC YECSES 19980312162542S101702A070997
never never NN 16048762158B978E EC YECSES 19980312175717S101702A070997
never never NN 16152AB51BABDC72 EC YECSES 19980626164741S101702A073406
never never NN 161642131DB961A4 EC YECSES 19980703152438S101702A073255
never never NN 15FF2F57082A662B EC YECSEX 19980206175329S101702A070225
never never NN 1600415600DF16DE EC YECSEX 19980213132037S101702A070420
never never NN 160484D608E3E36C EC YECSEX 19980312162543S101702A070997
never never NN 1604876415134F29 EC YECSEX 19980312175719S101702A070997
never never NN 161642121348C1C3 EC YECSEX 19980703152439S101702A073255
never never NN 15FF2F590C0AFBCC EC YECSFO 19980206175330S101702A070225
never never NN 160041490F2D5B4A EC YECSFO 19980213132037S101702A070420
never never NN 160484CD0BD3E7AA EC YECSFO 19980312162543S101702A070997
never never NN 1604875A07A87CEA EC YECSFO 19980312175719S101702A070997
never never NN 16164211143C049F EC YECSFO 19980703152440S101702A073255
never never NN 15F0B82E109039FC EC YECSFPR 19971106165429S101702A06811
never never NN 15F0D48A1B6A84DE EC YECSFPR 19971107094918S101702A06811
never never NN 15F545C0125233C2 EC YECSFPR 19971205161106S101702A06877
never never NN 15FF2F47014A4A1C EC YECSFPR 19980206175330S101702A07022
never never NN 1607F2CB121B4943 EC YECSFPR 19980403141055S101702A07147
never never NN 160A06121A4A30AB EC YECSFPR 19980416190515S101702M00089
never never NN 15FF2F5B07A35048 EC YECSHD1 19980206175331S101702A07022
never never NN 16004155185CC706 EC YECSHD1 19980213132039S101702A07042
never never NN 1600B45515A0C3AC EC YECSHD1 19980216095837S101702Z36001
never never NN 1600BFE615815A32 EC YECSHD1 19980216165227S101702A07049
never never NN 160484D31E39BD48 EC YECSHD1 19980312162544S101702A07099
never never NN 1604876116E64CD4 EC YECSHD1 19980312175720S101702A07099
never never NN 1616420C1FB74786 EC YECSHD1 19980703152440S101702A07325
never never NN 15FF2F5B1D6B3BCA EC YECSHD2 19980206175332S101702A07022
never never NN 160041531687EED4 EC YECSHD2 19980213132039S101702A07042
never never NN 1600BFE70F114AA4 EC YECSHD2 19980216165227S101702A07049
never never NN 160484CE162D15E5 EC YECSHD2 19980312162544S101702A07099
never never NN 160487611FCACF76 EC YECSHD2 19980312175720S101702A07099
never never NN 1607F2DD0C724220 EC YECSHD2 19980403141037S101702A07147
never never NN 16152AB50A11958A EC YECSHD2 19980626164742S101702A07340
never never NN 1616420E054F96AE EC YECSHD2 19980703152441S101702A07325
never never NN 15F0B82E012FC6E8 EC YECSL 19971106165430S101702A068113A
never never NN 15F0D48B17AAB044 EC YECSL 19971107094918S101702A068113A
never never NN 15F545BD137FAFF4 EC YECSL 19971205161107S101702A068771A
never never NN 15F7008209FCAAF2 EC YECSL 19971216161903S101702Z351139A
never never NN 15FF2F560DAE488F EC YECSL 19980206175333S101702A070225A
never never NN 160041551E914834 EC YECSL 19980213132041S101702A070420A
never never NN 160484CF1D282D8C EC YECSL 19980312162545S101702A070997A
never never NN 160487610459B650 EC YECSL 19980312175721S101702A070997A
never never NN 160640261681A032 EC YECSL 19980323165535S101702A071245A
never never NN 1607F2CC0AE1ED3F EC YECSL 19980403141055S101702A071472A
never never NN 160A061E042CA1DA EC YECSL 19980416190516S101702M000898A
never never NN 160BBB7B12704280 EC YECSL 19980427160239S101702A072040A
never never NN 15FF2F5C15DC2968 EC YECSLV 19980206175333S101702A070225
never never NN 160041561AAC5290 EC YECSLV 19980213132041S101702A070420
never never NN 160484D806F1F62A EC YECSLV 19980312162546S101702A070997
never never NN 160487650BF685FF EC YECSLV 19980312175723S101702A070997
never never NN 16152AB601D491D6 EC YECSLV 19980626164742S101702A073406
never never NN 1616420D0AD154E0 EC YECSLV 19980703152443S101702A073255
never never NN 15FF2F5516E6C2FB EC YECSZS 19980206175335S101702A070225
never never NN 1600414E00E3ADCA EC YECSZS 19980213132043S101702A070420
never never NN 160484D21BC4957C EC YECSZS 19980312162547S101702A070997
never never NN 160487600B4AF5E8 EC YECSZS 19980312175724S101702A070997
never never NN 161642111CF02726 EC YECSZS 19980703152434S101702A073255
never never NY 1810C2B0193ACBC4 ED ED5231 ED00000052
never never NY 1566417010DB145A ED YED0034 19950609S101702A044988AYED0
never never NY 1568502A12EA53EE ED YED0034 19950622S101702M000590AYED0
never never NY 156A7D740EF1DA36 ED YED0034 19950706S101702A045878AYED0
never never NY 156BBE641F78FDAA ED YED0034 19950714S101702A045968AYED0
never never NY 156EE5DC0F1AEF5E ED YED0034 19950803S101702A046536AYED0
never never NY 156FFEB70D461402 ED YED0034 19950810S101702A046695AYED0
never never NY 157463A6169F0466 ED YED0034 19950907S101702A047537AYED0
never never NY 157528A60F3CE620 ED YED0034 19950912S101702Z207809AYED0
never never NY 15757BFB1CF17C1C ED YED0034 19950914S101702A047657AYED0
never never NY 157D387C01EA2D66 ED YED0034 19951102S101702M000602AYED0
never never NY 1583CDC00E9B18B2 ED YED0034 19951214S101702A050106AYED0
never never NY 1584E3BC0A5C26D6 ED YED0034 19951221S101702A050529AYED0
never never NY 158ECA5B159EFCBC ED YED0034 19960222141003S101702A05208
never never NY 15A4CE65134A8D48 ED YED0034 19960711161137S101702A05574
never never NY 15A566D70ACC5286 ED YED0034 19960715110850S101702Z25753
never never NY 15A5E7E70A73B282 ED YED0034 19960718160812S101702A05585
never never NY 15B223D30ACB242C ED YED0034 19961004122313S101702A05754
never never NY 15B2EC7401143D70 ED YED0034 19961009120403S101702Z26992
never never NY 15B317B91753C5B0 ED YED0034 19961010135245S101702A05771
never never NY 15B666561EEE08D2 ED YED0034 19961031145508S101702A05804
never never NY 15B9B18E0267BF18 ED YED0034 19961121135414S101702A05887
never never NY 15CC68211B0C0B7A ED YED0034 19970320153410S101702M00077
never never NY 15D87EBC1D45DBDB ED YED0034 19970605133549S101702A06437
never never NY 15E38AC400E62ECF ED YED0034 19970814202936S101702A06590
never never NY 15EA1A2B1C06D80E ED YED0034 19970925142356S101702A06700
never never NY 15F0FD7200FFCEE8 ED YED0034 19971108101340S101702Z34398
never never NY 15F0FE010A00B682 ED YED0034 19971108103304S101702Z34398
never never NY 15F1CEDC12072222 ED YED0034 19971113150814S101702A06815
never never NY 15F74CAA1A20C0D8 ED YED0034 19971218134249S101702A06920
never never NY 15FBBA1606AA183C ED YED0034 19980115174915S101702M00085
never never NY 160A062D0B3E9FA4 ED YED0034 19980416190527S101702M00089
never never NY 15685174095D110A ED YED0120 19950622S101702A045513AYED0
never never NY 156BBE640505F766 ED YED0120 19950714S101702A045968AYED0
never never NY 156EE5DB0A2F55CC ED YED0120 19950803S101702A046536AYED0
never never NY 156FFEB6093D4742 ED YED0120 19950810S101702A046695AYED0
never never NY 1574639E0C6EB142 ED YED0120 19950907S101702A047537AYED0
never never NY 157528AE03A5E27A ED YED0120 19950912S101702Z207810AYED0
never never NY 15757BFA0FCEFFB2 ED YED0120 19950914S101702A047657AYED0
never never NY 157D38821A5BA470 ED YED0120 19951102S101702M000602AYED0
never never NY 15AEBDC4015853E2 ED YED0120 19960912212211S101702A05717
never never NY 15B223CF0FEF4474 ED YED0120 19961004122314S101702A05754
never never NY 15B2A9B60121523C ED YED0120 19961007201605S101702Z26964
never never NY 15B2EB730DA6AA98 ED YED0120 19961009112903S101702Z26991
never never NY 15B317B819BBFB8A ED YED0120 19961010135243S101702A05771
never never NY 15B9B18B120E5FA8 ED YED0120 19961121135415S101702A05887
never never NY 15CC68281F88EF0C ED YED0120 19970320153410S101702M00077
never never NY 15D0CB7E085D9D44 ED YED0120 19970417134223S101702A06312
never never NY 15D0CC7117DFCF44 ED YED0120 19970417141749S101702A06312
never never NY 15D87EB8047D5C74 ED YED0120 19970605133550S101702A06437
never never NY 15F74CA2076C224E ED YED0120 19971218134250S101702A06920
never never NY 15FBBA101F5323B4 ED YED0120 19980115174927S101702M00085
never never NY 15700051176AB94C ED YEDSAM 19950810S101702A046615AYEDSA
never never NY 15921AC110CE0074 ED YEDSAM 19960314161457S101702M000666
never never NY 15BE17851035E7FA ED YEDSAM 19961219133558S101702A059912
never never NY 17C7B36A1D8D0FC8 EF EF5940 NOST000168
never never NY 17C1924B0A132399 EK EK6413 EMA0000030
never never NY 17E1A3850FCCF80D EK EK6413 EMA0000034
never never NY 17EEAE84187F09D9 EK EK6413 EMA0000048
never never NY 17E1C2440DC4CD36 EK EK6430 EMA0000034
never never NY 17E1A387132517C3 EK EK6481 EMA0000034
never never NY 17E1A439161BBAA5 EK EK6482 EMA0000034
never never NY 17D25C881E21F8BD EK EK6482 EMA0000039
never never NY 17E1A41C1AE65BF8 EK EK6510 EMA0000034
never never NY 17D347E80EF19A3A EK EK6510 EMA0000039
never never NY 17E1A41D1F2550AD EK EK6520 EMA0000034
never never NY 17D2602F08F76315 EK EK6520 EMA0000039
never never NY 17EEAF4F04638410 EK EK6520 EMA0000048
never never NY 17E1A4400D523B90 EK EK6603 EMA0000034
never never NY 17D25C9601951F3A EK EK6603 EMA0000039
never never NY 17E1A41E02189BE0 EK EK6710 EMA0000034
never never NY 17D25CA61F344B17 EK EK6710 EMA0000039
never never NY 17C18E7F176F0EA2 EK EK6841 EMA0000030
never never NY 17E1C2470F915C7A EK EK6866 EMA0000034
never never NY 17E1A45B0A93338D EK EK7618 EMA0000034
never never NY 17D25D9C0E1F3C1D EK EK7618 EMA0000039
never never NY 17E1A4831D6E96B9 EK EK7660 EMA0000034
never never NY 17D175FF02AB80BE EK EK7660 EMA0000039
never never NY 17EED3EA056D3EC9 EK EK7660 EMA0000048
never never NY 17E1A4821936F725 EK EK7661 EMA0000034
never never NY 17D175B20CB8FC90 EK EK7661 EMA0000039
never never NY 17E1A469191AB638 EK EK7663 EMA0000034
never never NY 17D25DAB1EC924C8 EK EK7663 EMA0000039
never never NY 17E1A48304A4E6CD EK EK7664 EMA0000034
never never NY 17D175B30EB36EF3 EK EK7664 EMA0000039
never never NY 17E1A4830F169014 EK EK7666 EMA0000034
never never NY 17D175FF1EC6E0F1 EK EK7666 EMA0000039
never never NY 17E1A4831742C891 EK EK7667 EMA0000034
never never NY 17D17602053BD87A EK EK7667 EMA0000039
never never NY 17E1A4921C25946D EK EK7668 EMA0000034
never never NY 17D175B51FC7BD65 EK EK7668 EMA0000039
never never NY 17EED42D0FDF9559 EK EK7668 EMA0000048
never never NY 17E1A48F1ABCAAD1 EK EK7672 EMA0000034
never never NY 17E1A35C07A3BE74 EK EK7681 EMA0000034
never never NY 17D2605B1D3CAA78 EK EK7681 EMA0000039
never never NY 17EBAE821DDF05B4 EK EK7681 EMA0000048
never never NN 15EF996A1ACC4EFA EM EM0060 19971030134545S101702A067897
never never NN 15FA9D32110EF5C7 EM EM0060 19980108153802S101702M000886
never never NN 152994E8113CD614 EM EM0070 19940519143412S101702A034287
never never NN 15ECE58705353AA0 EM EM0070 19971013090717S101702A067405
never never NN 15ECE58713D35E82 EM EM0080 19971013090718S101702A067405
never never NN 15A3B13C172C9DF0 EM EM0900 19960704140613S101702A055506
never never NN 15D8849107A9C884 EM EM0900 19970605170247S101702A064138
never never NN 15ECE5851EE2590C EM EM0900 19971013090719S101702A067405
never never NN 1514B83B0DC8CC08 EM YEM0061
never never NN 152994CA0221EF9C EM YEM0061 19940519142707S101702A03428
never never NN 15337F0507367F0C EM YEM0061 19940721163814S101702M00043
never never NN 154A9E681CA1DF62 EM YEM0061 19941215194000S101702M00052
never never NN 1558E4FE0B6522AC EM YEM0061 19950316154216S101702A04291
never never NN 1558EADE19AB5752 EM YEM0061 19950316191311S101702A04291
never never NN 1568502817757B04 EM YEM0061 19950622S101702M000590AYEM0
never never NN 157233531614ADDE EM YEM0061 19950824S101702M000598AYEM0
never never NN 157B01331F7A1DA4 EM YEM0061 19951019S101702M000621AYEM0
never never NN 157C16B3083537D8 EM YEM0061 19951026S101702A048979AYEM0
never never NN 157EEA2C176B6C54 EM YEM0061 19951113S101702A048936AYEM0
never never NN 158197AC147EA2F2 EM YEM0061 19951130S101702A049980AYEM0
never never NN 1584E7221B6BE9A4 EM YEM0061 19951221S101702A050563AYEM0
never never NN 158A0DF90FDFA6AA EM YEM0061 19960123S101702A051440AYEM0
never never NN 15921AC70E6FF484 EM YEM0061 19960314161545S101702M00066
never never NN 159796990F7B0F96 EM YEM0061 19960418134157S101702M00067
never never NN 159BD7EB1ECDB4A0 EM YEM0061 19960515152929S101702M00068
never never NN 15A9321F1B3401E4 EM YEM0061 19960808143147S101702A05627
never never NN 15AD9A501ACCC89C EM YEM0061 19960905153007S101702M00071
never never NN 15AEBEA00B48655E EM YEM0061 19960912215244S101702M00071
never never NN 15B0E4210CE53A2A EM YEM0061 19960926133930S101702A05731
never never NN 15B1047A0F52C930 EM YEM0061 19960927085815S101702Z26803
never never NN 15B1FE8D1C446AB0 EM YEM0061 19961003140825S101702A05753
never never NN 15ECE57809449E14 EM YEM0061 19971013090422S101702A06740
never never NN 15FA9CA80186FA3A EM YEM0061 19980108153349S101702M00088
never never NN 1514B84204A1D5C6 EM YEM0064
never never NN 152994CA18CEA1CC EM YEM0064 19940519142722S101702A03428
never never NN 157233520B29A8F0 EM YEM0064 19950824S101702M000598AYEM0
never never NN 157B013609038C48 EM YEM0064 19951019S101702M000621AYEM0
never never NN 158A0DF909B1805C EM YEM0064 19960123S101702A051440AYEM0
never never NN 158DB1B910807322 EM YEM0064 19960215144640S101702A05202
never never NN 15921AC91B15A402 EM YEM0064 19960314161635S101702M00066
never never NN 159BD7EA0650B316 EM YEM0064 19960515152934S101702M00068
never never NN 15ECE57507CC61FA EM YEM0064 19971013090424S101702A06740
never never NN 1514B84313396AE6 EM YEM0065
never never NN 152994CB19A92F88 EM YEM0065 19940519142723S101702A03428
never never NN 15337F07120015E4 EM YEM0065 19940721163815S101702M00043
never never NN 154A9E6904259C0C EM YEM0065 19941215193958S101702M00052
never never NN 156A81DE172F3BE0 EM YEM0065 19950706S101702M000589AYEM0
never never NN 1572335400A67C02 EM YEM0065 19950824S101702M000598AYEM0
never never NN 157B013619D82A3A EM YEM0065 19951019S101702M000621AYEM0
never never NN 158A0DFA08AE3C46 EM YEM0065 19960123S101702A051440AYEM0
never never NN 159BD7EA0E3015F2 EM YEM0065 19960515152930S101702M00068
never never NN 15AEBEA0003BE012 EM YEM0065 19960912215245S101702M00071
never never NN 15ECE5771F7CE15A EM YEM0065 19971013090419S101702A06740
never never NN 15FA9CA805C4D2E6 EM YEM0065 19980108153339S101702M00088
never never NN 1514B8441565B9E8 EM YEM0900
never never NN 152994CD0210D646 EM YEM0900 19940519142705S101702A03428
never never NN 1558E525004548C8 EM YEM0900 19950316154229S101702A04291
never never NN 1558EB0310B3C374 EM YEM0900 19950316191311S101702A04291
never never NN 1572335610182A54 EM YEM0900 19950824S101702M000598AYEM0
never never NN 157B01371F894A42 EM YEM0900 19951019S101702M000621AYEM0
never never NN 1584E4E90EBBDA2C EM YEM0900 19951221S101702A050710AYEM0
never never NN 158A0DFB046626F6 EM YEM0900 19960123S101702A051440AYEM0
never never NN 15A06A5E082E15C4 EM YEM0900 19960613174145S101702A05488
never never NN 15A17DF715AF230C EM YEM0900 19960620140644S101702A05506
never never NN 15ECE57817CE0694 EM YEM0900 19971013090419S101702A06740
never never NY 182A66E30C7841E8 EQ YEQISRK EAGL00002459DCE1D0CICSMVS
never never NY 18280ADF1B68D8DD EQ YEQKDGP GSER00018759C91710
never never NY 17E1EAC319BE8F5A ER YERDCU0 EAMR000003
never never NY 17E9804F0DE7FF19 ER YERDCU0 EAMR000005
never never NY 17E1EA611713CF7D ER YERDGE0 EAMR000003
never never NY 17E9806817F60985 ER YERDGE0 EAMR000005
never never NY 17E1EA6116ED0BFB ER YERDIN0 EAMR000003
never never NY 17E97A9B07E92630 ER YERDIN0 EAMR000005
never never NY 17E1EA600D19F422 ER YERDUP0 EAMR000003
never never NY 17E97AAC09FDAE7D ER YERDUP0 EAMR000005
never never NY 1803185A0432B3A6 ER YERPRI EAMR000022
never never NY 18089AD00FDD8734 ER YERPRI EAMR000029
never never NY 158A64AE135ACFC6 EV EV0600 19960125S101702A051501AEV060
never never NY 15A5E43C12F2EE58 EV EV0600 19960718135628S101702A055841
never never NY 16059A510FD3BAB4 EV EV5080 19980319140048S101702A070940
never never NY 17C78DE50E100676 EV EV7040 EKVS000010
never never NY 158A64AD02795C50 EV EV7130 19960125S101702A051501AEV713
never never NY 15C4B61C0EE8F8B0 EV YEVSICH 19970130162645S101702A06118
never never NY 15DCE40D038545EA EV YEVSICH 19970703125234S101702A06476
never never NY 15F632A60069883A EV YEVSICH 19971211133042S101702A06886
never never NN 15B9B6B502EF5E20 EW EW7010 19961121165906S101702A058971
never never NN 15BACAC614420C4E EW EW7010 19961128134025S101702A059169
never never NN 15D0C9D1065BD84A EW EW7010 19970417124259S101702A063168
never never NN 15D5300D19A5D517 EW EW7020 19970515123226S101702A063787
never never NN 15D64F5F09BC6D0B EW EW7020 19970522155508S101702A064034
never never NY 17CBEB64122862E6 EX EX0500 EXPN000020
never never NY 15B40F211A48DD32 EX EX7010 19961016172831S101702A057202
never never NY 15FA9CC00F901AA0 EX EX7010 19980108153804S101702M000886
never never NY 17C9756E06D8B8BB EX EX8030 EXPN000020
never never NY 159083F411E8405A EX EX8888 19960304133631S101702Z236837
never never NY 159088F91A7BEC24 EX EX8888 19960304163609S101702Z236837
never never NY 15A9CC1E0CCCFEE8 EX EX8888 19960812102421S101702Z261211
never never NY 15A29B9013B916B6 EX YEXERG
never never NY 1578CA730AC3964E EX YEXERG 19951005S101702A048266AYEXER
never never NY 157A826407C68504 EX YEXERG 19951016S101702Z213055AYEXER
never never NY 157D319A15207EDE EX YEXERG 19951102S101702A049197AYEXER
never never NY 157D584516B499E6 EX YEXERG 19951103S101702Z216005AYEXER
never never NY 157DD3E30ABDF378 EX YEXERG 19951106S101702Z216751AYEXER
never never NY 157F69BD0AD5EEE0 EX YEXERG 19951116S101702A049464AYEXER
never never NY 158F701000527FFA EX YEXERG 19960226170142S101702A052326
never never NY 158FBCDC199B20AE EX YEXERG 19960228145027S101702A052419
never never NY 158FBDA41EE2753E EX YEXERG 19960228151903S101702A052419
never never NY 158FBEAE157623C6 EX YEXERG 19960228155542S101702A052419
never never NY 158FBF1E0FD2FA18 EX YEXERG 19960228161103S101702A052419
never never NY 1590D9AD10744B34 EX YEXERG 19960306164420S101702A052579
never never NY 15921751133DD504 EX YEXERG 19960314141339S101702A052439
never never NY 15B40F150B5CA384 EX YEXERG 19961016172704S101702A057202
never never NY 15B664871C972068 EX YEXERG 19961031134918CGS101702A0583
never never NY 15B6648418AC57A8 EX YEXERG 19961031134918S101702A058312
never never NY 15CA30E416B57CE6 EX YEXERG 19970306131334CGS101702A0619
never never NY 15CA30E217120BC4 EX YEXERG 19970306131334S101702A061962
never never NY 15E3802F06B170EE EX YEXERG 19970814141321CGS101702M0008
never never NY 15E3801A12F6A18E EX YEXERG 19970814141321S101702M000800
never never NY 15FA9CA806B826D0 EX YEXERG 19980108153340CGS101702M0008
never never NY 15FA9CA318EC4E90 EX YEXERG 19980108153340S101702M000886
never never NY 160E640602611798 EX YEXERG 19980514135917CGS101702A0723
never never NY 160E64011C58086F EX YEXERG 19980514135917S101702A072308
never never NY 16173001093E34D9 EX YEXERG 19980709132140CGS101702A0732
never never NY 16172FFF0DFD3771 EX YEXERG 19980709132140S101702A073235
never never NY 158F6C62108FBF68 EX YEXERG A
never never NY 1615952900B52150 FARDX DLLST1
never never NY 181B2C1012D10CA9 FC FC0010 KLOM000062
never never NY 15B8A6000554B20A FC FC0020 19961114221845S101702A058752
never never NY 15C5CFB9066B8104 FC FC0020 19970206162503S101702A061517
never never NY 15D1440911D11632 FC FC0030 19970420133742S101702Z307085
never never NY 15F272141486C8A8 FC FC0030 19971117163042S101702Z345149
never never NY 15F2741C0775176E FC FC0030 19971117174349S101702Z345149
never never NY 1583CFBF17F11168 FC FC0110 19951214S101702A050488AFC011
never never NN 159F6A51192B35CE FC FC0110 19960607085733S101702A054822
never never NY 1583CFBF0E97E704 FC FC0130 19951214S101702A050488AFC013
never never NY 159F6A510105E148 FC FC0130 19960607085734S101702A054822
never never NN 1563BF580033685A FC FC0400 19950524170555S101702A044625
never never NN 1583CFB30C9CFCB8 FC YFCM02 19951214S101702A050488AYFCM0
never never NN 1583CFB315EE2A20 FC YFCM03 19951214S101702A050488AYFCM0
never never NY 1578CC300ECCEEEC FD FD8100 19951005S101702M000617AFD810
never never NY 15883B181CD1D36A FD FD8100 19960111S101702A051006AFD810
never never NY 159796A80233C87A FD FD8100 19960418134339S101702M000672
never never NY 15A0652F089DD038 FD FD8100 19960613143639S101702A054192
never never NY 1802F3FD105F252E FI FI1900 BKUR000052
never never NY 1806166C14EA9FCE FI FI5067 BKUR000052
never never NY 1839CCFE0FD5806C FI FI5600 BKUR000096
never never NY 15B455830C0F1B84 FI YFI7201 19961018112744S101702Z27138
never never NY 182EA7E4060BA193 FI YFIWMKG BKUR0001165A008305
never never NY 16C0C7BD0C245E90 FRNCOL01 FRNA0010
never never NY 17CF71E11BB5D3A3 FRNCOL01 FRNA0080
never never NY 16C0C7BF10256446 FRNCOL01 FRNA0090
never never NY 16C16606141B3A85 FRNCOL01 FRNV0010
never never NY 165453040F28F7E8 FRNCOL01 FRNV0020
never never NY 1653DC83116290ED FRNCOL01 FRNV0030
never never NY 168BCD8815A155A4 FRNCOL01 FRNV0040
never never NY 168BCD9015D3429D FRNCOL01 FRNV0050
never never NY 1654EF7A0DFAA909 FRNCOL01 FRNV0060
never never NY 17D039BC09098D7C FRNCOL01 FRNV0080
never never NY 16FA6C8E1DD8C165 FRNCOL01 FRNV0090
never never NY 1634778217891D68 FRNIBMCL FRNA0010
never never NY 1634778A02168C10 FRNIBMCL FRNA0020
never never NY 1634779117DEC4A8 FRNIBMCL FRNA0030
never never NY 163477991459D64C FRNIBMCL FRNA0040
never never NY 163477A007BAD74C FRNIBMCL FRNA0050
never never NY 163477A70ABC080C FRNIBMCL FRNA0060
never never NY 163477AE0FC131E4 FRNIBMCL FRNA0070
never never NY 161DFEA1095C0F68 FRNIBMCL FRNMHB10
never never NY 161DFEB0106B99CC FRNIBMCL FRNMHB12
never never NY 165B26910A397E28 FRNIBMCL FRNMHBP8
never never NY 1681ADA3093D2D38 FRNIBMCL FRNPLLI1
never never NY 1661E76C10A34DB0 FRNIBMCL FRNPLLI2
never never NY 168B8B19007CF24C FRNIBMCL FRNPLLI3
never never NY 164981C7012F4818 FRNIBMCL FRNPLLI4
never never NY 16A8743D18D8A8DD FRNIBMCL FRNPLLQ1
never never NY 165B277F1B16E244 FRNIBMCL FRNPLLQ2
never never NY 161DFF7710F73994 FRNIBMCL FRNPLLQ3
never never NY 161DFF821A28E6DC FRNIBMCL FRNPLLQ4
never never NY 161DFF8C1176ECCC FRNIBMCL FRNPLLUQ
never never YY 16A874400B85A2B5 FRNIBMCL FRNPLLVS
never never NY 152302E11FA2EA7C GE GE2950 19940407190123S101702A033023
never never NN 1538F6AE04CA1C96 GE GE7550 19940825113402S101702A036682
never never NN 15B787FF08E833F0 GE GE7550 19961107194151S101702M000730
never never NN 15BCFD791EC62704 GE GE7550 19961212131947S101702A059641
never never NY 1538D56D1AADC70C GE GE7580 19940824154405S101702A036682
never never NY 1538F6A60C81791C GE GE7580 19940825113350S101702A036682
never never NY 15B7880710170D42 GE GE7580 19961107194153S101702M000730
never never NY 1538D56E08437268 GE GE7590 19940824154407S101702A036682
never never NY 1538F6A51AEDBAB0 GE GE7590 19940825113352S101702A036682
never never NY 15B788010DB26162 GE GE7590 19961107194153S101702M000730
never never NY 1538F6AA1D334BC4 GE GE7620 19940825113355S101702A036682
never never NY 1592211D031E9F82 GE GE7620 19960314200328S101702A052811
never never NY 15B7880B16521910 GE GE7620 19961107194155S101702M000730
never never NN 1559F9E21ED3131E GE GE7690 19950323125534S101702A043120
never never NY 14CAF9DF119F2210 GE YGE0001
never never NY 14EAE58B114E8DDC GE YGE0002
never never NN 1516E60C0D740706 GE YGESP01
never never NN 152303221BCEECC4 GE YGESP01 19940407191249S101702A03303
never never NN 15501B270ABBB5A0 GE YGESP01 19950119173828S101702A04139
never never NN 1516E60211AB8964 GE YGESP02
never never NN 152303240CE82E84 GE YGESP02 19940407191251S101702A03303
never never NN 1516E61004901A30 GE YGESP04
never never NN 1523032605360DA6 GE YGESP04 19940407191258S101702A03303
never never NN 15501B28137EDB10 GE YGESP04 19950119173814S101702A04139
never never NY 15252E9609AF6D7C GE YYGE020 19940421143813S101702M00044
never never NY 15252EAC0ABF8F78 GE YYGE040 19940421143818S101702M00044
never never NY 1834227511CD1BCA GM YGMSTEU GM000001605A2E77C8
never never NY 175E0AA8030F44C6 GROUP00 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP00 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP00 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP00 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP00 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP00 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP00 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP00 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP00 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP00 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP00 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP00 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP00 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP00 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP00 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP01 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP01 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP01 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP01 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP01 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP01 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP01 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP01 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP01 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP01 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP01 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP01 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP01 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP01 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP01 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP02 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP02 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP02 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP02 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP02 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP02 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP02 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP02 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP02 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP02 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP02 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP02 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP02 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP02 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP02 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP03 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP03 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP03 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP03 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP03 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP03 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP03 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP03 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP03 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP03 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP03 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP03 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP03 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP03 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP03 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP04 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP04 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP04 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP04 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP04 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP04 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP04 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP04 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP04 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP04 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP04 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP04 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP04 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP04 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP04 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP05 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP05 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP05 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP05 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP05 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP05 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP05 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP05 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP05 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP05 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP05 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP05 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP05 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP05 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP05 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP06 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP06 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP06 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP06 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP06 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP06 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP06 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP06 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP06 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP06 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP06 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP06 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP06 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP06 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP06 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP07 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP07 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP07 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP07 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP07 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP07 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP07 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP07 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP07 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP07 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP07 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP07 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP07 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP07 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP07 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP08 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP08 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP08 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP08 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP08 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP08 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP08 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP08 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP08 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP08 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP08 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP08 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP08 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP08 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP08 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP09 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP09 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP09 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP09 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP09 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP09 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP09 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP09 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP09 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP09 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP09 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP09 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP09 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP09 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP09 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP10 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP10 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP10 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP10 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP10 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP10 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP10 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP10 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP10 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP10 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP10 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP10 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP10 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP10 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP10 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP11 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP11 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP11 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP11 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP11 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP11 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP11 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP11 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP11 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP11 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP11 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP11 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP11 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP11 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP11 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP12 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP12 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP12 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP12 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP12 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP12 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP12 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP12 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP12 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP12 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP12 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP12 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP12 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP12 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP12 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP13 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP13 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP13 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP13 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP13 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP13 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP13 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP13 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP13 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP13 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP13 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP13 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP13 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP13 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP13 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP14 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP14 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP14 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP14 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP14 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP14 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP14 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP14 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP14 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP14 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP14 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP14 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP14 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP14 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP14 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP15 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP15 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP15 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP15 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP15 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP15 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP15 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP15 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP15 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP15 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP15 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP15 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP15 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP15 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP15 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP16 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP16 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP16 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP16 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP16 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP16 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP16 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP16 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP16 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP16 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP16 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP16 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP16 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP16 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP16 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP17 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP17 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP17 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP17 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP17 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP17 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP17 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP17 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP17 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP17 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP17 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP17 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP17 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP17 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP17 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP18 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP18 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP18 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP18 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP18 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP18 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP18 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP18 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP18 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP18 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP18 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP18 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP18 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP18 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP18 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP19 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP19 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP19 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP19 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP19 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP19 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP19 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP19 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP19 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP19 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP19 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP19 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP19 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP19 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP19 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP20 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP20 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP20 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP20 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP20 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP20 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP20 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP20 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP20 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP20 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP20 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP20 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP20 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP20 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP20 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP21 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP21 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP21 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP21 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP21 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP21 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP21 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP21 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP21 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP21 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP21 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP21 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP21 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP21 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP21 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP22 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP22 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP22 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP22 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP22 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP22 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP22 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP22 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP22 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP22 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP22 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP22 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP22 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP22 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP22 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP23 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP23 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP23 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP23 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP23 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP23 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP23 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP23 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP23 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP23 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP23 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP23 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP23 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP23 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP23 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP24 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP24 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP24 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP24 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP24 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP24 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP24 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP24 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP24 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP24 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP24 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP24 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP24 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP24 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP24 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP25 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP25 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP25 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP25 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP25 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP25 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP25 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP25 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP25 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP25 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP25 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP25 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP25 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP25 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP25 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP26 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP26 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP26 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP26 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP26 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP26 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP26 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP26 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP26 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP26 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP26 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP26 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP26 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP26 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP26 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP27 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP27 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP27 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP27 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP27 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP27 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP27 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP27 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP27 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP27 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP27 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP27 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP27 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP27 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP27 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP28 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP28 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP28 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP28 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP28 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP28 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP28 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP28 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP28 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP28 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP28 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP28 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP28 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP28 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP28 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP29 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP29 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP29 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP29 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP29 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP29 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP29 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP29 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP29 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP29 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP29 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP29 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP29 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP29 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP29 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP30 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP30 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP30 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP30 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP30 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP30 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP30 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP30 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP30 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP30 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP30 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP30 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP30 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP30 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP30 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP31 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP31 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP31 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP31 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP31 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP31 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP31 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP31 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP31 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP31 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP31 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP31 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP31 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP31 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP31 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP32 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP32 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP32 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP32 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP32 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP32 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP32 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP32 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP32 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP32 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP32 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP32 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP32 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP32 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP32 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP33 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP33 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP33 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP33 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP33 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP33 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP33 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP33 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP33 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP33 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP33 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP33 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP33 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP33 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP33 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP34 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP34 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP34 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP34 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP34 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP34 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP34 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP34 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP34 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP34 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP34 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP34 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP34 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP34 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP34 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP35 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP35 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP35 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP35 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP35 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP35 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP35 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP35 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP35 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP35 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP35 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP35 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP35 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP35 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP35 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP36 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP36 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP36 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP36 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP36 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP36 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP36 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP36 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP36 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP36 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP36 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP36 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP36 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP36 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP36 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP37 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP37 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP37 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP37 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP37 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP37 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP37 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP37 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP37 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP37 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP37 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP37 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP37 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP37 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP37 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP38 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP38 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP38 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP38 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP38 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP38 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP38 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP38 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP38 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP38 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP38 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP38 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP38 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP38 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP38 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP39 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP39 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP39 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP39 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP39 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP39 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP39 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP39 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP39 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP39 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP39 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP39 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP39 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP39 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP39 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP40 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP40 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP40 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP40 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP40 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP40 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP40 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP40 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP40 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP40 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP40 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP40 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP40 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP40 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP40 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP41 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP41 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP41 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP41 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP41 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP41 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP41 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP41 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP41 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP41 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP41 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP41 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP41 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP41 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP41 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP42 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP42 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP42 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP42 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP42 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP42 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP42 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP42 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP42 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP42 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP42 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP42 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP42 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP42 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP42 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP43 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP43 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP43 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP43 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP43 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP43 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP43 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP43 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP43 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP43 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP43 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP43 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP43 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP43 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP43 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP44 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP44 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP44 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP44 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP44 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP44 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP44 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP44 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP44 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP44 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP44 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP44 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP44 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP44 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP44 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP45 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP45 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP45 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP45 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP45 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP45 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP45 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP45 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP45 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP45 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP45 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP45 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP45 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP45 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP45 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP46 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP46 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP46 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP46 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP46 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP46 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP46 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP46 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP46 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP46 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP46 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP46 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP46 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP46 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP46 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP47 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP47 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP47 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP47 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP47 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP47 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP47 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP47 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP47 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP47 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP47 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP47 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP47 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP47 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP47 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP48 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP48 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP48 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP48 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP48 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP48 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP48 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP48 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP48 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP48 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP48 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP48 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP48 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP48 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP48 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP49 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP49 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP49 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP49 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP49 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP49 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP49 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP49 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP49 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP49 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP49 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP49 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP49 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP49 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP49 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP50 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP50 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP50 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP50 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP50 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP50 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP50 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP50 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP50 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP50 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP50 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP50 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP50 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP50 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP50 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP51 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP51 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP51 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP51 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP51 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP51 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP51 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP51 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP51 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP51 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP51 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP51 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP51 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP51 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP51 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP52 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP52 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP52 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP52 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP52 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP52 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP52 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP52 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP52 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP52 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP52 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP52 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP52 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP52 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP52 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP53 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP53 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP53 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP53 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP53 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP53 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP53 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP53 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP53 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP53 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP53 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP53 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP53 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP53 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP53 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP54 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP54 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP54 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP54 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP54 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP54 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP54 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP54 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP54 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP54 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP54 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP54 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP54 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP54 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP54 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP55 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP55 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP55 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP55 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP55 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP55 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP55 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP55 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP55 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP55 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP55 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP55 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP55 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP55 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP55 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP56 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP56 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP56 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP56 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP56 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP56 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP56 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP56 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP56 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP56 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP56 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP56 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP56 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP56 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP56 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP57 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP57 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP57 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP57 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP57 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP57 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP57 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP57 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP57 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP57 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP57 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP57 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP57 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP57 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP57 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP58 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP58 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP58 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP58 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP58 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP58 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP58 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP58 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP58 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP58 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP58 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP58 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP58 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP58 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP58 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP59 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP59 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP59 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP59 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP59 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP59 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP59 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP59 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP59 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP59 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP59 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP59 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP59 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP59 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP59 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP60 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP60 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP60 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP60 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP60 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP60 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP60 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP60 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP60 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP60 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP60 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP60 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP60 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP60 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP60 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP61 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP61 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP61 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP61 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP61 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP61 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP61 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP61 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP61 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP61 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP61 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP61 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP61 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP61 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP61 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP62 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP62 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP62 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP62 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP62 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP62 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP62 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP62 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP62 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP62 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP62 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP62 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP62 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP62 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP62 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP63 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP63 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP63 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP63 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP63 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP63 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP63 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP63 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP63 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP63 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP63 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP63 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP63 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP63 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP63 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP64 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP64 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP64 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP64 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP64 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP64 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP64 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP64 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP64 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP64 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP64 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP64 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP64 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP64 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP64 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP65 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP65 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP65 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP65 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP65 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP65 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP65 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP65 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP65 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP65 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP65 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP65 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP65 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP65 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP65 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP66 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP66 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP66 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP66 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP66 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP66 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP66 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP66 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP66 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP66 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP66 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP66 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP66 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP66 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP66 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP67 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP67 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP67 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP67 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP67 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP67 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP67 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP67 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP67 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP67 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP67 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP67 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP67 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP67 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP67 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP68 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP68 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP68 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP68 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP68 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP68 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP68 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP68 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP68 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP68 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP68 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP68 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP68 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP68 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP68 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP69 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP69 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP69 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP69 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP69 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP69 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP69 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP69 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP69 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP69 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP69 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP69 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP69 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP69 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP69 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP70 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP70 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP70 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP70 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP70 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP70 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP70 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP70 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP70 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP70 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP70 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP70 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP70 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP70 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP70 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP71 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP71 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP71 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP71 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP71 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP71 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP71 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP71 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP71 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP71 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP71 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP71 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP71 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP71 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP71 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP72 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP72 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP72 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP72 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP72 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP72 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP72 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP72 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP72 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP72 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP72 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP72 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP72 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP72 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP72 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP73 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP73 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP73 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP73 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP73 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP73 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP73 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP73 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP73 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP73 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP73 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP73 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP73 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP73 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP73 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP74 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP74 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP74 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP74 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP74 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP74 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP74 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP74 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP74 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP74 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP74 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP74 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP74 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP74 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP74 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP75 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP75 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP75 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP75 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP75 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP75 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP75 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP75 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP75 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP75 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP75 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP75 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP75 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP75 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP75 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP76 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP76 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP76 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP76 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP76 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP76 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP76 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP76 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP76 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP76 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP76 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP76 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP76 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP76 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP76 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP77 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP77 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP77 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP77 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP77 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP77 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP77 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP77 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP77 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP77 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP77 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP77 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP77 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP77 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP77 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP78 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP78 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP78 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP78 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP78 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP78 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP78 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP78 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP78 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP78 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP78 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP78 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP78 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP78 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP78 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP79 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP79 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP79 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP79 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP79 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP79 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP79 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP79 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP79 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP79 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP79 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP79 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP79 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP79 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP79 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP80 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP80 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP80 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP80 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP80 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP80 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP80 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP80 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP80 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP80 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP80 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP80 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP80 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP80 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP80 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP81 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP81 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP81 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP81 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP81 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP81 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP81 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP81 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP81 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP81 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP81 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP81 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP81 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP81 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP81 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP82 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP82 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP82 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP82 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP82 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP82 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP82 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP82 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP82 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP82 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP82 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP82 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP82 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP82 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP82 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP83 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP83 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP83 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP83 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP83 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP83 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP83 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP83 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP83 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP83 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP83 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP83 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP83 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP83 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP83 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP84 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP84 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP84 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP84 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP84 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP84 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP84 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP84 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP84 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP84 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP84 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP84 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP84 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP84 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP84 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP85 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP85 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP85 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP85 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP85 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP85 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP85 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP85 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP85 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP85 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP85 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP85 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP85 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP85 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP85 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP86 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP86 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP86 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP86 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP86 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP86 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP86 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP86 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP86 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP86 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP86 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP86 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP86 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP86 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP86 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP87 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP87 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP87 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP87 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP87 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP87 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP87 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP87 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP87 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP87 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP87 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP87 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP87 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP87 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP87 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP88 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP88 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP88 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP88 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP88 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP88 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP88 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP88 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP88 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP88 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP88 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP88 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP88 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP88 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP88 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP89 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP89 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP89 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP89 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP89 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP89 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP89 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP89 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP89 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP89 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP89 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP89 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP89 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP89 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP89 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP90 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP90 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP90 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP90 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP90 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP90 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP90 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP90 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP90 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP90 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP90 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP90 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP90 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP90 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP90 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP91 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP91 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP91 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP91 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP91 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP91 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP91 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP91 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP91 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP91 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP91 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP91 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP91 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP91 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP91 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP92 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP92 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP92 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP92 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP92 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP92 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP92 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP92 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP92 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP92 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP92 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP92 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP92 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP92 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP92 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP93 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP93 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP93 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP93 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP93 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP93 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP93 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP93 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP93 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP93 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP93 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP93 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP93 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP93 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP93 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP94 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP94 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP94 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP94 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP94 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP94 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP94 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP94 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP94 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP94 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP94 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP94 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP94 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP94 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP94 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP95 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP95 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP95 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP95 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP95 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP95 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP95 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP95 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP95 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP95 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP95 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP95 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP95 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP95 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP95 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP96 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP96 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP96 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP96 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP96 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP96 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP96 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP96 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP96 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP96 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP96 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP96 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP96 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP96 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP96 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP97 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP97 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP97 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP97 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP97 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP97 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP97 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP97 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP97 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP97 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP97 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP97 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP97 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP97 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP97 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP98 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP98 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP98 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP98 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP98 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP98 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP98 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP98 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP98 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP98 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP98 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP98 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP98 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP98 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP98 CBRIDBS UW95199HDZ11G0
never never NY 175E0AA8030F44C6 GROUP99 CBRHDBCV 051332294392039080
never never NY 16D27F7E1189E49D GROUP99 CBRHDBCV 294249629382893950
never never NY 16862E77028FDC09 GROUP99 CBRHDBS 042982409377892471
never never NY 1685E46A138C8297 GROUP99 CBRHDBS 327975575377873514
never never NY 16D27F7F15F04B11 GROUP99 CBRHDBS 368069393382893951
never never NY 16DB32A617D686F2 GROUP99 CBRHDBS 399935218383464102
never never NY 175E0AA71A52A73B GROUP99 CBRHDBS 441624379392039079
never never NY 16D27F7F0709202D GROUP99 CBRHDBSD 118038573382893951
never never NY 175E0AA5130A4C35 GROUP99 CBRHDBSD 319441973392039077
never never NY 175E0AC50DE9D776 GROUP99 CBRIDBS 2004-03-19-05.20.09.71
never never NY 172D6C3000FA1F04 GROUP99 CBRIDBS UA03047HDZ11G0
never never NY 16875152183ED528 GROUP99 CBRIDBS UW71235HDZ11E0
never never NY 1687519A17B3DC28 GROUP99 CBRIDBS UW71236HDZ11F0
never never NY 16DB329B1E00E1AC GROUP99 CBRIDBS UW83215HDZ11F0
never never NY 170E96631BD73BD0 GROUP99 CBRIDBS UW95199HDZ11G0
never never NY 153C6C3E10C0C460 HP1 ABWPTI
never never NY 1540AA0803E417E2 HP1 ACDBQ1
never never NY 153F980E0C205CC8 HP1 ACF3Q1
never never NY 153C6C8F1AF3D322 HP1 ADDZS3
never never NY 154089200AE6C024 HP1 ADWVQZ
never never NY 153C6BBF1C19759C HP1 AE85S3
never never NY 153C6BD70100FAB4 HP1 AE86S3
never never NN 15407F9F0CCB1902 HP1 RWBB022
never never NN 15407FB31729AD6A HP1 RWBB023
never never NY 152FB5701C6932B0 HP1 RWBC011
never never NY 152FB5EE0BEA1C56 HP1 RWBC024
never never NY 1537C0B706E9DE34 HP1 RWBC030
never never NY 152FB61B195716C4 HP1 RWBC032
never never NY 151F7BE70A8C1BFC HP1 RWBC037
never never NY 15407DDD08692D98 HP1 RWBC040
never never NY 152DFCA20786D508 HP1 RWBC041
never never NY 152DFCC804CEFB6A HP1 RWBC048
never never NY 152DFCD404C000FC HP1 RWBC049
never never NY 1537C02E0C9F972C HP1 RWBM007
never never NY 152E1FFC0B491014 HP1 RWBP007
never never NY 1537BF930E473BB4 HP1 RWBP021
never never NY 152FAB140165D1D2 HP1 RWBP022
never never NY 1540631904C31DFA HP1 RWBP023
never never NY 152FAB3B114D87BC HP1 RWBP026
never never NY 152FAB4A02823CEA HP1 RWBP029
never never NN 1538A00914D55CE4 HP1 RWBP030
never never NN 1538A01413F6782A HP1 RWBP032
never never NY 152FAB5719A2830A HP1 RWBP034
never never NY 152FAB2E0B26D1FA HP1 RWBP036
never never NN 1537C09E09539F82 HP1 RWBR040
never never NY 152FB8CA00AF4C9A HP1 RWBR043
never never NN 1537BFBB159E5AE6 HP1 RWBT033
never never NY 153C6C1A1C3B58FE HP3 AA40TI
never never NY 153C6BEA0A6228AE HP3 AA4XTI
never never NY 153C6C26027ABF90 HP3 AA4ZTI
never never NY 153C6BFD0945DAE6 HP3 ABISTI
never never NY 153C6C3E10C0C460 HP3 ABWPTI
never never NY 1540AA0803E417E2 HP3 ACDBQ1
never never NY 153F980E0C205CC8 HP3 ACF3Q1
never never NY 151F3A881767B85C HP3 ACLQMC
never never NY 153C6C8F1AF3D322 HP3 ADDZS3
never never NY 153C6C9D092DCB32 HP3 ADEBS3
never never NY 153C6CAA08F9C4A0 HP3 ADECS3
never never NY 154089200AE6C024 HP3 ADWVQZ
never never NY 153C6B9F12D1BB4C HP3 AE84S3
never never NY 153C6BBF1C19759C HP3 AE85S3
never never NY 153C6BD70100FAB4 HP3 AE86S3
never never NY 153446601A7F2242 HP3 AE8GS3
never never NY 15344679154EDF92 HP3 AE8HS3
never never NY 1534468711EDB08E HP3 AE8IS3
never never NY 153C6CBF107E7C66 HP3 AE9SS3
never never NY 153C6CC91181313E HP3 AE9TS3
never never NY 153C6CD318660C1A HP3 AE9US3
never never NY 153F160509A1F5E8 HP3 AJBTSH
never never NN 1540D52D072A8A1C HP3 RWBB004
never never NN 1540D5B902BD3748 HP3 RWBB015
never never NN 1540D5C8167A26DE HP3 RWBB019
never never NN 1540D5D804C10A84 HP3 RWBB020
never never NN 15407F9F0CCB1902 HP3 RWBB022
never never NN 15407FB31729AD6A HP3 RWBB023
never never NY 152FB5701C6932B0 HP3 RWBC011
never never NY 152FB5EE0BEA1C56 HP3 RWBC024
never never NY 1537C0B706E9DE34 HP3 RWBC030
never never NY 152FB61B195716C4 HP3 RWBC032
never never NY 151F7BE70A8C1BFC HP3 RWBC037
never never NY 15407DDD08692D98 HP3 RWBC040
never never NY 152DFCA20786D508 HP3 RWBC041
never never NY 152DFCC804CEFB6A HP3 RWBC048
never never NN 1540A7B71375BA42 HP3 RWBM003
never never NY 1537C02E0C9F972C HP3 RWBM007
never never NY 1537BF70086EBD5E HP3 RWBP004
never never NY 152E1FFC0B491014 HP3 RWBP007
never never NY 1537BF8712B0D1C8 HP3 RWBP008
never never NY 1537BF930E473BB4 HP3 RWBP021
never never NY 152FAB140165D1D2 HP3 RWBP022
never never NY 1540631904C31DFA HP3 RWBP023
never never NY 152FAB3B114D87BC HP3 RWBP026
never never NY 152FAB4A02823CEA HP3 RWBP029
never never NN 1538A00914D55CE4 HP3 RWBP030
never never NN 1538A01413F6782A HP3 RWBP032
never never NY 152FAB5719A2830A HP3 RWBP034
never never NN 1537C09E09539F82 HP3 RWBR040
never never NY 152FB8CA00AF4C9A HP3 RWBR043
never never NN 15407E8D1F133F46 HP3 RWBT027
never never NN 1540D57708047726 HP3 RWBW032
never never NN 1540D5870CB279C6 HP3 RWBZ014
never never NN 1540D5990AC82F9E HP3 RWBZ015
never never NN 1540D53C19C96B78 HP3 RWBZ033
never never NN 1540D54D190FFB2C HP3 RWBZ034
never never NY 1793CF0C06D87AE9 IS ISLP20 DML0000004
never never NY 17B1B2461C68A334 IS ISLP23 DML0000014
never never NY 17AB0ED618CF9F61 IS ISLP24 DML0000006
never never NY 175EB87A0046401E IS ISLP87 A06M025140
never never NY 17B299AF1547470C IS ISLP88 DML0000014
never never NY 17465B0D02D59615 IS ISLP89 A06M024770
never never NY 17A867CF1027FFEA IS ISLP93 DML0000011
never never NY 17D16E691E9EC1CE IT IT5000 RFT0000015
never never NY 177C9DD11A871B48 IT IT5501 A20Y001508
never never NY 15B8A5E81D691C64 KB KB2010 19961114221018S101702A058608
never never NY 15B92FA10D1799D0 KB KB2010 19961118082438S101702Z277492
never never NY 15BACCA11C862B22 KB KB2010 19961128144621S101702A059147
never never NY 155C31F619477AAA KB KB2020 19950406154743S101702A043366
never never NY 15FA9CDA00594348 KB KB2020 19980108153831S101702M000886
never never NY 156259B200F60008 KB KB5010 19950515S101702Z189864AKB501
never never NY 156273BC149B0D46 KB KB5010 19950516S101702Z190008AKB501
never never NY 156AB0B11D491CE2 KB KB5010 19950707S101702Z198701AKB501
never never NY 15B8A6000554B20A KD FC0020 19961114221845S101702A058752
never never NY 15C5CFB9066B8104 KD FC0020 19970206162503S101702A061517
never never NY 15F264DE161D7C18 KD FC5000 19971117083808S101702Z344985
never never NY 15F2E5E2114F55C6 KD FC5000 19971120133503S101702A068334
never never NY 15F3165B1CF1E4D4 KD FC5000 19971121183017S101702Z346058
never never NY 158F69AA0EA4C302 KD KD0068 19960226131303S101702Z235794
never never NY 161878261BA05DF7 KD KD0540 19980717170619S101702Z383268
never never NY 15B104390214625A KD KD0600 19960927085001S101702Z268024
never never NY 15B1FEA60B8D931A KD KD0600 19961003141208S101702A057537
never never NY 15DAB25E0DF199C4 KD KD0600 19970619134842S101702A064764
never never NY 15CC6B18173BBEC6 KD KD0620 19970320172119S101702A062566
never never NY 15D8848F16F2D0C2 KD KD0620 19970605170251S101702A064138
never never NY 15DAB2591D03FCEE KD KD0620 19970619134843S101702A064764
never never NY 1585FD900D3959B0 KD KD0630 19951228S101702A050783AKD063
never never NY 15AD9AE0108393F0 KD KD0630 19960905154850S101702M000711
never never NY 15B0E4331D085892 KD KD0630 19960926134359S101702A057314
never never NY 15B0E4360F49A806 KD KD0640 19960926134359S101702A057314
never never NY 15B1044C1D3B5666 KD KD0640 19960927085317S101702Z268027
never never NY 15B1FEA00F75F5FA KD KD0640 19961003141209S101702A057537
never never NY 157B014C1A9528B6 KD KD0670 19951019S101702M000621AKD067
never never NY 155C323703EB05A2 KD KD5020 19950406S101702A043419AKD502
never never NY 157B014C12699D0A KD KD5020 19951019S101702M000621AKD502
never never NY 157C2E08114EF1AC KD KD5040 19951027S101702Z214879AKD504
never never NY 157E4FDB0D153F30 KD KD5040 19951109S101702A049329AKD504
never never NY 157E5C6E013FDBE8 KD KD5040 19951110S101702A049329AKD504
never never NY 157B014C05F1EFD4 KD KD7000 19951019S101702M000621AKD700
never never NY 157C161D12025286 KD KD7000 19951026S101702A048919AKD700
never never NY 1577DCD711F06A74 KD KD7098 19950929S101702Z210568AKD709
never never NY 15784CB413F1E26E KD KD7098 19951002S101702Z210762AKD709
never never NY 1578CA630B64679E KD KD7098 19951005S101702A048223AKD709
never never NY 15A084B61057ECFC KD KD7200 19960614092516S101702A055036
never never NY 15C285030193C06A KD KD8010 19970116174423S101702A060854
never never NY 15C5CEC01010BD42 KD KD8010 19970206155033S101702A061213
never never NY 15E38BF50169C18A KD KD8010 19970814211634S101702A065956
never never NY 1572336409D76370 KD KD8011 19950824S101702M000598AKD801
never never NY 15C5CEC108DF46DC KD KD8011 19970206155034S101702A061213
never never NY 15CE44D016153D5C KD KD8012 19970401115710S101702Z304029
never never NY 15CE4B401A011FA0 KD KD8012 19970401154800S101702Z304029
never never NY 15CEBB92073E4C12 KD KD8012 19970404104807S101702Z304584
never never NY 15C5CC090DF64506 KD KD8014 19970206141304S101702A061437
never never NY 15E38C1F1BA0260A KD KD8014 19970814211637S101702A065956
never never NY 15C5CC091133ABDE KD KD8015 19970206141306S101702A061437
never never NY 15E38C230DB7BDEC KD KD8015 19970814211640S101702A065956
never never NY 15C6BBEB01E36862 KD KD8030 19970212131949S101702Z295927
never never NY 15CD84B711145636 KD KD8030 19970327172217S101702Z303860
never never NY 15E38C0905BCFF08 KD KD8030 19970814211641S101702A065956
never never NY 15FCCCAA036D0FEA KD KD8040 19980122133753S101702A069908
never never NY 15FDE5FE0314BA2E KD KD8040 19980129132654S101702A070094
never never NY 15A067CB119AD1EC KD KD8070 19960613161006S101702A054120
never never NY 15AEAADF1C7E1118 KD KD8090 19960912100713S101702Z265960
never never NY 15AF57861B8B8DDE KD KD8090 19960916170653S101702Z266453
never never NY 15B1120A06301B18 KD KD8090 19960927170504S101702Z268138
never never NY 15834A2D135F83E0 KD KD8096 19951211S101702Z223940AKD809
never never NY 159BD80404846662 KD KD8096 19960515153311S101702M000684
never never NY 15AD9ADE0046B79C KD KD8096 19960905155004S101702M000711
never never NN 1583CFC0008CCFE0 KD KD8200 19951214S101702A050488AKD820
never never NN 1585FD791FFF0AEA KD KD8200 19951228S101702A050761AKD820
never never NY 15C69B1A1FCADB2E KD KD8512 19970211174525S101702Z295758
never never NY 15C6B2D912026632 KD KD8512 19970212075517S101702Z295814
never never NY 15C6B6A814B7A556 KD KD8512 19970212101134S101702Z295814
never never NN 155C32451E87F830 KD YKD0500 19950406S101702A043450AYKD0
never never NN 1563BCFD0EDB2042 KD YKD0500 19950524S101702A044691AYKD0
never never NN 1568EAFE0D5A3F90 KD YKD0500 19950626S101702A045713AYKD0
never never NN 1572335406D0308E KD YKD0500 19950824S101702M000598AYKD0
never never NN 15894B480F964A0E KD YKD0500 19960118S101702A051288AYKD0
never never NN 158ECAFF138EEB44 KD YKD0500 19960222143318S101702A05216
never never NN 159F26CD05C1FA22 KD YKD0500 19960605164059S101702Z25155
never never NN 15A17DF80F05374E KD YKD0500 19960620140638S101702A05506
never never NN 15AD1AFC03B5B9C2 KD YKD0500 19960902113434S101702Z26425
never never NN 15AD9A511B94EA2E KD YKD0500 19960905153037S101702M00071
never never NN 15C5EB1509074F78 KD YKD0500 19970207084459S101702A06140
never never NN 15C7FD8D1B047776 KD YKD0500 19970220131055S101702A06185
never never NN 15CD59581F868D66 KD YKD0500 19970326152928S101702A06277
never never NN 15CD85F103D59AAC KD YKD0500 19970327180544S101702A06277
never never NN 15E37FE91C7B23D4 KD YKD0500 19970814140402S101702M00080
never never NN 15E6CEF11FA4B640 KD YKD0500 19970904152318S101702A06608
never never NN 15E88BA11939633E KD YKD0500 19970915163933S101702A06682
never never NN 15E8FE3F13644320 KD YKD0500 19970918130127S101702A06687
never never NN 15F2EEB91D073CD8 KD YKD0500 19971120185108S101702M00081
never never NN 15F35ED91227D75A KD YKD0500 19971123134508S101702Z34613
never never NN 15F362DB077F0C56 KD YKD0500 19971123160833S101702Z34614
never never NN 15F3646E1EA25C0A KD YKD0500 19971123170525S101702Z34614
never never NN 15F3662E1D147D34 KD YKD0500 19971123180702S101702Z34615
never never NN 15F369CE0D0F47CA KD YKD0500 19971123194631S101702Z34616
never never NN 15F3AC9012C73DA2 KD YKD0500 19971125120634S101702Z34670
never never NN 15F51AAE092A4BFA KD YKD0500 19971204142946S101702Z34881
never never NN 15F5E973080E51E4 KD YKD0500 19971209175158S101702Z34969
never never NN 15F603000BF7D730 KD YKD0500 19971210090526S101702Z34976
never never NN 15F603781AF2232E KD YKD0500 19971210092215S101702Z34979
never never NN 15FBBA170A2A671E KD YKD0500 19980115174941S101702M00085
never never NN 15FF2F5D15AE1F82 KD YKD0500 19980206175332S101702A07022
never never NN 1600415710BDCF88 KD YKD0500 19980213132025S101702A07042
never never NN 160484D90C45D320 KD YKD0500 19980312162639S101702A07099
never never NN 16048755010B03D8 KD YKD0500 19980312175740S101702A07099
never never NN 1607F2CF0A1FA4F4 KD YKD0500 19980403141032S101702A07147
never never NN 160A06261A472F65 KD YKD0500 19980416190530S101702M00089
never never NN 1612E4F30FCA96DA KD YKD0500 19980612054559S101702M00092
never never NN 161310A30C678722 KD YKD0500 19980613074807S101702Z37863
never never NN 1613E4AC0B090F20 KD YKD0500 19980618141748S101702A07326
never never NN 1615EAC01A922BBA KD YKD0500 19980701111931S101702A07336
never never NN 1615EEA60F9DED86 KD YKD0500 19980701133922S101702A07336
never never NN 16161DF5150335D8 KD YKD0500 19980702175321S101702Z38171
never never NN 161731E90D5CB082 KD YKD0500 19980709142935S101702A07375
never never NN 16187C441D650656 KD YKD0500 19980717193307S101702Z38328
never never NN 16187CA10D0C1682 KD YKD0500 19980717194602S101702Z38329
never never NN 157B01301557EAE2 KD YKD0640 19951019S101702M000621AYKD0
never never NN 157EEA2B0B614E78 KD YKD0640 19951113S101702A048936AYKD0
never never NN 1590FD5E01CE84F8 KD YKD0640 19960307140102S101702A05214
never never NN 15A17DF50EA9DEEA KD YKD0640 19960620140639S101702A05506
never never NN 15B0E4230CBCBF48 KD YKD0640 19960926133932S101702A05731
never never NN 157B013102691596 KD YKD0641 19951019S101702M000621AYKD0
never never NN 157EEA2B006453EC KD YKD0641 19951113S101702A048936AYKD0
never never NN 1590FD5D0499C14E KD YKD0641 19960307140103S101702A05214
never never NN 15A17DF50EB09798 KD YKD0641 19960620140639S101702A05506
never never NN 15B0E41008853F86 KD YKD0641 19960926133927S101702A05731
never never NN 157B013103143876 KD YKD0642 19951019S101702M000621AYKD0
never never NN 157EEA2C118B488E KD YKD0642 19951113S101702A048936AYKD0
never never NN 158197AC1508C70A KD YKD0642 19951130S101702A049980AYKD0
never never NN 1590FD5C1E039004 KD YKD0642 19960307140103S101702A05214
never never NN 15921ACD0C53E05C KD YKD0642 19960314161748S101702M00066
never never NN 1597969911B74380 KD YKD0642 19960418134159S101702M00067
never never NN 159BD7EA0A2201E4 KD YKD0642 19960515152932S101702M00068
never never NN 15A932370B9BDBC6 KD YKD0642 19960808143158S101702A05627
never never NN 15AD9A60060A0F4E KD YKD0642 19960905153039S101702M00071
never never NN 15B0E420059B0CC4 KD YKD0642 19960926133928S101702A05731
never never NN 15B1044114608070 KD YKD0642 19960927085133S101702Z26802
never never NN 15B1FE8700AD7DF0 KD YKD0642 19961003140829S101702A05753
never never NN 157B01300CD380D0 KD YKD0643 19951019S101702M000621AYKD0
never never NN 157EEA2B04950E2A KD YKD0643 19951113S101702A048936AYKD0
never never NN 159E0CE1082F7438 KD YKD0643 19960529163059S101702Z25054
never never NN 15A473800933E026 KD YKD0643 19960709095917S101702Z25643
never never NN 15A5E43F034B9320 KD YKD0643 19960718135640S101702A05586
never never NN 15B0E41605439978 KD YKD0643 19960926133929S101702A05731
never never NN 157B013314A80B84 KD YKDC91 19951019S101702M000621AYKDC9
never never NN 155C323E135E2824 KD YKDH00 19950406S101702A043450AYKDH0
never never NN 15CD59540ABCE1C8 KD YKDH00 19970326152925S101702A062772
never never NN 15CD85F10E6A5B02 KD YKDH00 19970327180543S101702A062772
never never NN 155C3243073ED954 KD YKDH01 19950406S101702A043450AYKDH0
never never NN 155C3243037F14D4 KD YKDH02 19950406S101702A043450AYKDH0
never never NN 155C32430C15DA0E KD YKDH03 19950406S101702A043450AYKDH0
never never NN 15E3801909B1647C KD YKDH03 19970814141325S101702M000800
never never NN 155C323C1F691A1C KD YKDH04 19950406S101702A043450AYKDH0
never never NN 155C323D0BF5FB1C KD YKDH05 19950406S101702A043450AYKDH0
never never NN 155C323D1FDE6A50 KD YKDH06 19950406S101702A043450AYKDH0
never never NN 155C323D1DB64B6E KD YKDH50 19950406S101702A043450AYKDH5
never never NN 155C323E13450388 KD YKDH51 19950406S101702A043450AYKDH5
never never NN 155C323E13F52FD8 KD YKDH52 19950406S101702A043450AYKDH5
never never NN 155C323F1DA6EE94 KD YKDH53 19950406S101702A043450AYKDH5
never never NN 155C323F15AD8A24 KD YKDH58 19950406S101702A043450AYKDH5
never never NN 155C324019D2BF54 KD YKDH59 19950406S101702A043450AYKDH5
never never NN 155C32410F7AEF26 KD YKDH60 19950406S101702A043450AYKDH6
never never NN 155C32410922D810 KD YKDH61 19950406S101702A043450AYKDH6
never never NN 155C324215629C66 KD YKDH91 19950406S101702A043450AYKDH9
never never NN 15BACC9313B278D8 KD YKDH91 19961128144447S101702A059147
never never NN 155C3242044DC582 KD YKDH92 19950406S101702A043450AYKDH9
never never NN 157B0133172455E4 KD YKDR00 19951019S101702M000621AYKDR0
never never NN 157B01331881AB60 KD YKDR01 19951019S101702M000621AYKDR0
never never NN 157B013407DC7C62 KD YKDR03 19951019S101702M000621AYKDR0
never never NN 157B013510F9BF94 KD YKDR04 19951019S101702M000621AYKDR0
never never NN 157B01350071D5B8 KD YKDR06 19951019S101702M000621AYKDR0
never never NN 157B01360C742192 KD YKDR16 19951019S101702M000621AYKDR1
never never NN 157B013608401B52 KD YKDR17 19951019S101702M000621AYKDR1
never never NN 157B01360F463884 KD YKDR18 19951019S101702M000621AYKDR1
never never NN 157B01360F346934 KD YKDR19 19951019S101702M000621AYKDR1
never never NN 157B013702C1292E KD YKDR20 19951019S101702M000621AYKDR2
never never NN 157B01360FA330A0 KD YKDR21 19951019S101702M000621AYKDR2
never never NN 157B013711EC162A KD YKDR22 19951019S101702M000621AYKDR2
never never NN 157B013703BE3850 KD YKDR50 19951019S101702M000621AYKDR5
never never NN 157B013715FBC704 KD YKDR51 19951019S101702M000621AYKDR5
never never NN 157B013710BC5C4A KD YKDR53 19951019S101702M000621AYKDR5
never never NN 157B0138152B6542 KD YKDR59 19951019S101702M000621AYKDR5
never never NN 157B013D1BB7A3FA KD YKDR60 19951019S101702M000621AYKDR6
never never NN 157B013C1712294C KD YKDR61 19951019S101702M000621AYKDR6
never never NN 157B013E07B45500 KD YKDR67 19951019S101702M000621AYKDR6
never never NN 157B012B1FE83E02 KD YKDR68 19951019S101702M000621AYKDR6
never never NN 157B012F1074D6D2 KD YKDR73 19951019S101702M000621AYKDR7
never never NN 157B012D0425CD12 KD YKDR74 19951019S101702M000621AYKDR7
never never NN 157B012D03F7BFF2 KD YKDR75 19951019S101702M000621AYKDR7
never never NN 157B012B19851ABA KD YKDR78 19951019S101702M000621AYKDR7
never never NN 15B0E40F07484198 KD YKDR78 19960926133932S101702A057314
never never NN 157B012B0A684DD8 KD YKDR88 19951019S101702M000621AYKDR8
never never NN 157B012B1A32EC8C KD YKDR89 19951019S101702M000621AYKDR8
never never NN 157B012B11253B60 KD YKDR91 19951019S101702M000621AYKDR9
never never NN 157B012F17B71458 KD YKDR92 19951019S101702M000621AYKDR9
never never NN 157B012D1E69E1EC KD YKDR93 19951019S101702M000621AYKDR9
never never NN 157B012E0D3DCD80 KD YKDR97 19951019S101702M000621AYKDR9
never never NN 157B012E10191FDA KD YKDR98 19951019S101702M000621AYKDR9
never never NN 155C32440D013D8C KD YKDS91 19950406S101702A043450AYKDS9
never never NN 15CD85F013C52902 KD YKDS91 19970327180544S101702A062772
never never NN 157B012E1793B91C KD YKDT00 19951019S101702M000621AYKDT0
never never NN 15A932271B75D182 KD YKDT00 19960808143156S101702A056273
never never NN 157B012F13FEF75A KD YKDV81 19951019S101702M000621AYKDV8
never never NN 157B9F2C1C4E9826 KD YKDV81 19951023S101702Z214190AYKDV8
never never NN 157BC01D0B0D5624 KD YKDV81 19951024S101702Z214339AYKDV8
never never NN 157BC607119387BA KD YKDV81 19951024S101702Z214421AYKDV8
never never NN 157EEA2B00BA6AE2 KD YKDV81 19951113S101702A048936AYKDV8
never never NN 158147710CCE6808 KD YKDV81 19951128S101702Z221489AYKDV8
never never NN 158197A91A6277CE KD YKDV81 19951130S101702A049980AYKDV8
never never NN 15921ACA1E8A2146 KD YKDV81 19960314161746S101702M000666
never never NN 159BD7EA06A58A10 KD YKDV81 19960515152935S101702M000684
never never NN 15A9321C1348F6C4 KD YKDV81 19960808143159S101702A056273
never never NN 15AD9A511306D3F8 KD YKDV81 19960905153031S101702M000711
never never NN 15B0E41A07BB2F12 KD YKDV81 19960926133929S101702A057314
never never NN 15B104221CBF2376 KD YKDV81 19960927084725S101702Z268022
never never NN 15B1FE8707CC76AE KD YKDV81 19961003140832S101702A057537
never never NN 15997B3D1157CD8E KD YKDX81 19960430144759S101702Z245908
never never NN 15997B6A10193FCA KD YKDX81 19960430145417S101702Z245908
never never NN 1599CDF318B0CD4E KD YKDX81 19960502160759S101702A053827
never never NN 159BD7E901D3785E KD YKDX81 19960515152931S101702M000684
never never NY 15501B1D1894F578 KEIN KD8014 19950119173805S101702A0414
never never NY 15501B1F12A18210 KEIN KD8015 19950119173805S101702A0414
never never NY 15A93269122828C2 KEIN NS0890 19960808144239S101702A0563
never never NY 15AA4B82062790A6 KEIN NS0890 19960815142208S101702A0564
never never NY 15AB65010A6D2094 KEIN NS0890 19960822141851S101702A0566
never never NY 14DD80E91611F964 KS KS0600
never never NY 154A994901A34B88 KS KS0600 19941215163732S101702A040306
never never NY 154A9C390108A038 KS KS0600 19941215182205S101702A040306
never never NY 154A9C3C0B81E13E KS KS0610 19941215182206S101702A040306
never never NY 15A06AC81EDFD8D2 KS KS0720 19960613175707S101702A054915
never never NY 15BD2F7B06D4DCDE KS KS0720 19961213190918S101702A059882
never never NY 15E264D91A9172D8 KS KS0720 19970807131518S101702A065672
never never NY 146931EA089B3C10 KS KS8000
never never NY 161097811AD2C3B8 KS KS8050 19980528140608S101702A072741
never never NY 1469311008FAC394 KS KS8900
never never NY 14F07EEA108A9BFE KS YKS0031
never never NY 15C5A9021D11D1B0 KS YKS0802 19970205171935S101702A06140
never never NY 15C5CDB80290E4FC KS YKS0802 19970206151324S101702A06140
never never NY 15C5EFAE046AC4F4 KS YKS0802 19970207112844S101702A06156
never never NY 15D530F806BAC2AF KS YKS0802 19970515130326S101702A06387
never never NY 15D5FE1E087A8967 KS YKS0802 19970520152637S101702A06403
never never NY 15E122B6100B6608 KS YKS0802 19970730130516S101702A06561
never never NY 15E9A9080C11DC3A KS YKS0802 19970922185351S101702A06694
never never NY 160480F70195E1E2 KS YKS0802 19980312140727S101702A07100
never never NY 160E6C9414C2B25E KS YKS0802 19980514190209S101702A07251
never never NY 15D531011C2714A2 KS YKS0806 19970515130321S101702A06387
never never NY 15D5FE1E06E0015E KS YKS0806 19970520152633S101702A06403
never never NY 15E122B215B0F988 KS YKS0806 19970730130512S101702A06561
never never NY 15E9A9080B234082 KS YKS0806 19970922185347S101702A06694
never never NY 15F0B3E204C81A5E KS YKS0806 19971106141958S101702A06810
never never NY 160480F704784A38 KS YKS0806 19980312140715S101702A07100
never never NY 160E6C9215393F5C KS YKS0806 19980514190144S101702A07251
never never NN 15D530FE0FDD980E KS YKS0809 19970515130322S101702A06387
never never NN 15D5FE1D18543E3B KS YKS0809 19970520152634S101702A06403
never never NY 160E6C8E1CEFC334 KS YKS0813 19980514190151S101702A07251
never never NY 160EB0D40F5D0D0E KS YKS0813 19980516114927S101702Z37492
never never NY 1613E56F1740210C KS YKS0813 19980618144536S101702A07328
never never NY 155F7CCB14535948 KS YKS5551 19950427S101702A043905AYKS5
never never NY 15807C8F0A393196 KS YKS5551 19951123S101702A049861AYKS5
never never NY 1581BC9B17CE2FBC KS YKS5551 19951201S101702A050046AYKS5
never never NY 1583CF950A954152 KS YKS5551 19951214S101702A050423AYKS5
never never NY 15BD2F690661B65C KS YKS5551 19961213190524S101702A05988
never never NY 15C39D880FA90CA2 KS YKS5551 19970123170322S101702A06099
never never NY 15C43FC108E725F4 KS YKS5551 19970127175027S101702Z29310
never never NY 15CA30A11FB83D46 KS YKS5551 19970306130420S101702A06174
never never NY 15E382E11FD1313C KS YKS5551 19970814154706S101702M00082
never never NY 15EB3140182E11DE KS YKS5551 19971002124932S101702A06713
never never NY 1607F47213DDE91A KS YKS5551 19980403151109S101702Z36824
never never NY 160D49D91657B8F8 KS YKS5551 19980507134024S101702A07218
never never NY 160E641E15A66F6B KS YKS5551 19980514140042S101702A07230
never never NY 16131CF0132EF012 KS YKS5551 19980613150900S101702Z37865
never never NY 1617303B115B2127 KS YKS5551 19980709132913S101702A07349
never never NY 155F7CCB1751D630 KS YKS5552 19950427S101702A043905AYKS5
never never NY 15807C91122733AE KS YKS5552 19951123S101702A049861AYKS5
never never NY 1581BC9C16B9BFB4 KS YKS5552 19951201S101702A050046AYKS5
never never NY 1583CF961ED82F84 KS YKS5552 19951214S101702A050423AYKS5
never never NY 15BD2F681AE16098 KS YKS5552 19961213190524S101702A05988
never never NY 15E382E11DAE20C0 KS YKS5552 19970814154715S101702M00082
never never NY 160F546507A4E9F8 KS YKS5552 19980520132122S101702A07262
never never NY 15AEB4BE0882A382 KS YKS5553 19960912155328S101702A05710
never never NY 15BD2F6A06FD2C8A KS YKS5553 19961213190525S101702A05988
never never NY 15C39D8815111DC2 KS YKS5553 19970123170324S101702A06099
never never NY 15CE9A5317318254 KS YKS5553 19970403145839S101702A06268
never never NY 15D3EF6706F673D4 KS YKS5553 19970507131535S101702A06311
never never NY 15D87F81108E9D1C KS YKS5553 19970605140318S101702A06395
never never NY 15E382E218DDB9A6 KS YKS5553 19970814154722S101702M00082
never never NY 15EB3133182C165A KS YKS5553 19971002124933S101702A06713
never never NY 16013C6610826A82 KS YKS5553 19980219190855S101702A07054
never never NY 1601646C0EAA38C2 KS YKS5553 19980220190032S101702A07054
never never NY 1611B0D9040F1E43 KS YKS5553 19980604135613S101702A07279
never never NY 1615EEA81940ABD3 KS YKS5553 19980701133926S101702Z38152
never never NY 1617303D133A78E8 KS YKS5553 19980709132913S101702A07349
never never NN 150CFBA511783720 KS YKSAUFT
never never NN 151E9D6D18BC86E4 KS YKSAUFT 19940310195022S101702A03234
never never NN 151FB036173F5ACA KS YKSAUFT 19940317154525S101702A03252
never never NN 1520C9B3183C5B60 KS YKSAUFT 19940324153804S101702A03278
never never NN 152648891D64FB0E KS YKSAUFT 19940428145413S101702A03378
never never NY 1529963E17645A12 KS YKSAUFT 19940519152148S101702A03441
never never NY 152BC8D10ECBBD12 KS YKSAUFT 19940602144938S101702A03455
never never NY 153150E30C41AED0 KS YKSAUFT 19940707194026S101702M00047
never never NY 1536C7C71622437C KS YKSAUFT 19940811140925S101702A03642
never never NY 1536D1C90537339C KS YKSAUFT 19940811195830S101702A03642
never never NY 154A9A510B790ED4 KS YKSAUFT 19941215164630S101702A04039
never never NY 154A9C40009D10C8 KS YKSAUFT 19941215182250S101702A04039
never never NY 155249051560D374 KS YKSAUFT 19950202142636S101702A04179
never never NY 15547C421718CC92 KS YKSAUFT 19950216142447S101702A04214
never never NY 1561B0C50FB84470 KS YKSAUFT 19950511S101702A044324AYKSA
never never NY 1564FD5A1A35CDA6 KS YKSAUFT 19950601S101702M000585AYKSA
never never NY 157230400F815CA8 KS YKSAUFT 19950824S101702A047164AYKSA
never never NY 15757C0513447D46 KS YKSAUFT 19950914S101702A047692AYKSA
never never NY 1583C99706009534 KS YKSAUFT 19951214S101702M000648AYKSA
never never NY 1583C51515E20594 KS YKSAUFT 19951214S101702Z224822AYKSA
never never NY 159633290999DBF2 KS YKSAUFT 19960409173948S101702A05301
never never NY 1596542B19C2BDBC KS YKSAUFT 19960410132144S101702Z24274
never never NY 15965583058DD2EA KS YKSAUFT 19960410140945S101702Z24276
never never NY 1596583D1FA84186 KS YKSAUFT 19960410154724S101702Z24281
never never NY 159797631046EF48 KS YKSAUFT 19960418140918S101702A05345
never never NY 159863560871884C KS YKSAUFT 19960423154952S101702A05364
never never NY 159BD8ED1B350282 KS YKSAUFT 19960515160557S101702M00068
never never NY 15B43678023ED9C8 KS YKSAUFT 19961017165520S101702A05790
never never NY 15B4F01F0A5E5F86 KS YKSAUFT 19961022074124S101702Z27187
never never NY 15B4FB5F1C8B104C KS YKSAUFT 19961022142351S101702Z27207
never never NY 15B54C5A0137E976 KS YKSAUFT 19961024144245S101702A05808
never never NY 15B56A3105C55AE0 KS YKSAUFT 19961025083025S101702Z27313
never never NY 15B56E2A17DA35EA KS YKSAUFT 19961025105240S101702Z27321
never never NY 15B8996708F1EF16 KS YKSAUFT 19961114144518S101702M00074
never never NY 15B8A1DE0F9BDBD2 KS YKSAUFT 19961114194908S101702M00074
never never NY 15BC8C2E175FC006 KS YKSAUFT 19961209174335S101702A05946
never never NY 15BDE9D711B2E6CA KS YKSAUFT 19961218101955S101702A05999
never never NY 15C6E5C918C07FF4 KS YKSAUFT 19970213141858S101702A06151
never never NY 15F6334F1B6852B8 KS YKSAUFT 19971211135316S101702A06896
never never NY 16001B63183B2DD4 KS YKSAUFT 19980212144151S101702M00083
never never NY 168DD4C201466813 KS YKSAUFT A15S000557
never never NY 175FCE5A0CFDC6CD KS YKSFTXT A14S002412533962A5
never never NN 14F17F570C179124 KS YKSLFNR
never never NN 154A99271F6F15FA KS YKSLFNR 19941215163239S101702A04030
never never NN 154A9C1014114058 KS YKSLFNR 19941215181826S101702A04030
never never NY 1509AEAE1561F664 KS YKSMODU
never never NY 151E9D6A0132D42C KS YKSMODU 19940310195039S101702A03234
never never NY 151FB0320BB17792 KS YKSMODU 19940317154541S101702A03252
never never NY 1520C9C70B72BB8A KS YKSMODU 19940324153841S101702A03278
never never NN 152648861B54F39A KS YKSMODU 19940428145414S101702A03378
never never NN 152996380925ED74 KS YKSMODU 19940519152202S101702A03441
never never NN 152BC8CC09049F8C KS YKSMODU 19940602145024S101702A03455
never never NN 153150E2172DF882 KS YKSMODU 19940707194027S101702M00047
never never NN 1536C7BD13F3E0B8 KS YKSMODU 19940811140924S101702A03642
never never NN 1536D1B018842212 KS YKSMODU 19940811195758S101702A03642
never never NN 154A9A4F0D858DAC KS YKSMODU 19941215164631S101702A04039
never never NN 154A9C3E15381990 KS YKSMODU 19941215182251S101702A04039
never never NN 155249031B3E8EF4 KS YKSMODU 19950202142637S101702A04179
never never NN 15547C421CBF9A46 KS YKSMODU 19950216142448S101702A04214
never never NN 1561B0C21E8AAE32 KS YKSMODU 19950511S101702A044324AYKSM
never never NN 1572303E1E0F82E0 KS YKSMODU 19950824S101702A047164AYKSM
never never NN 1583C997096B3DC0 KS YKSMODU 19951214S101702M000648AYKSM
never never NN 1596332906AE8548 KS YKSMODU 19960409173948S101702A05301
never never NN 159797630E3B1B3A KS YKSMODU 19960418140921S101702A05345
never never NN 159BD8DC1077A2DA KS YKSMODU 19960515160306S101702M00068
never never NY 15B43677179A5E04 KS YKSMODU 19961017165521S101702A05790
never never NY 15B4FB5F07CE385C KS YKSMODU 19961022142351S101702Z27207
never never NY 15B54C590CEE7BEE KS YKSMODU 19961024144246S101702A05808
never never NY 15B56E2C177B6FF8 KS YKSMODU 19961025105241S101702Z27321
never never NY 15B8995A103CBC86 KS YKSMODU 19961114144530S101702M00074
never never NY 15B8A1DC1ED5141C KS YKSMODU 19961114194917S101702M00074
never never NY 15BC8C281F924658 KS YKSMODU 19961209174338S101702A05946
never never NY 15F6334E1FE33AFA KS YKSMODU 19971211135319S101702A06896
never never NY 15F6558D09AD722A KS YKSMODU 19971212102013S101702Z35018
never never NY 15F6FC0D0EC3E22C KS YKSMODU 19971216133928S101702A06916
never never NY 16001B63137CA2D8 KS YKSMODU 19980212144151S101702M00083
never never NY 15209A9E0FE56B14 KS YKSZNID 19940323113754S101702A03263
never never NY 1522FC091E9A706A KS YKSZNID 19940407150310S101702A03296
never never NY 1522FEAF1380473A KS YKSZNID 19940407164427S101702A03296
never never NY 15BD2F5C18903F58 KS YKSZNID 19961213190542S101702A05988
never never NY 1558E39009FCEDEA KS ZKSFTXT 19950316145243S101702A04266
never never NN 15FBB30A0E3F3E8E KV BX0130 19980115133833S101702A069359
never never NN 16173BB70544877E KV BX0130 19980709201828S101702A073668
never never NN 1617503A06090CEE KV BX0130 19980710083334S101702A073668
never never NN 157B2587123CB8B4 KX YKX002 19951020S101702A048828AYKX00
never never NN 158007560378CA20 KX YKX002 19951120S101702A049712AYKX00
never never NN 1594ED0E0A16EBD2 KX YKX002 19960401150805S101702A053178
never never NN 15A7F1480F9F145C KX YKX002 19960731150729S101702A056211
never never NN 15D2FCC7120F4E2E KX YKX002 19970501123152S101702A063604
never never NN 15E38A0F16ED64F8 KX YKX002 19970814200734S101702A065850
never never NN 15ED6AF904FAFFCE KX YKX002 19971016164307S101702A067570
never never NN 16001B5403154BE6 KX YKX002 19980212144153S101702M000834
never never NN 160A061D0CF7A3EF KX YKX002 19980416190522S101702M000898
never never NY 1612CD00175CB72B LB YLB0103 19980611152558S101702M00084
never never NY 1612CD020FB49484 LB YLB0105 19980611152558S101702M00084
never never NY 1520C9EE1D904E1E LB YLB0113 19940324154725S101702A03279
never never NY 15486A821EBF08C6 LB YLB0113 19941201191749S101702M00047
never never NY 154AA1F803CBB844 LB YLB0113 19941215214909S101702M00047
never never NY 1562CD131A892102 LB YLB0113 19950518S101702M000545AYLB0
never never NY 15BD026108E2C2B8 LB YLB0113 19961212161055S101702M00066
never never NY 15F6360F0531FD1E LB YLB0113 19971211152839S101702M00072
never never NY 16036E9A04DDBB84 LB YLB0113 19980305182743S101702M00083
never never NY 161750690E76B6CA LB YLB0113 19980710083933S101702M00084
never never NY 161759BC1D3EE66C LB YLB0113 19980710141321S101702M00084
never never NY 15D0CDB70411E4DC LB YLB0115 19970417145740S101702M00071
never never NY 15F6360E17A6E950 LB YLB0115 19971211152840S101702M00072
never never NY 16036EA81BEABB18 LB YLB0115 19980305182800S101702M00083
never never NY 1617507D166076FF LB YLB0115 19980710083934S101702M00084
never never NY 161759E012ACD504 LB YLB0115 19980710141321S101702M00084
never never NY 15EA14201E07BD7A LB YLB0116 19970925104749S101702Z33552
never never NY 15ED91DE1F2AF776 LB YLB0116 19971017154949S101702M00072
never never NY 15F636091D5A0768 LB YLB0116 19971211152840S101702M00072
never never NY 1617507D0C167F85 LB YLB0116 19980710083934S101702M00084
never never NY 161759DB037762FF LB YLB0116 19980710141322S101702M00084
never never NY 17E0AD9B1FE3B731 LC LC0510I TFBM0000255772715A
never never NY 1827403014BBFFD7 LC LC0511I TFBM00003359C2729FMVS
never never NN 15BACACC0E8F24AC LC LC5000 19961128134126S101702A059244
never never NN 15E382F11A2120A2 LC LC5000 19970814155557S101702M000820
never never NN 15FCCE3E0C84AEF2 LC LC5000 19980122143236S101702M000889
never never NY 1825D9701EE97EAD LC YLCTF02 TFBM00003359B6B121MVS
never never NY 1825D96E188133E4 LC YLCTF03 TFBM00003359B6B138MVS
never never NY 17CBEB3000D70B3A LQ LQ8090 LIQ0000015
never never NY 17E1D01E1601F401 LQ LQ8090 LIQ0000019
never never NN 14EBFA8A0437A5F0 LV YLV001D
never never NN 14A362EE0CBD3CB8 LV YLV001E
never never NN 15A7A55812697092 LV YLV0024 19960729175120S101702A05613
never never NN 15A953FA0457560A LV YLV0024 19960809104406S101702A05638
never never NN 15AF468412991118 LV YLV0024 19960916065859S101702Z26623
never never NN 15AFCAA21C6C5E26 LV YLV0024 19960919134517S101702A05720
never never NN 15C1666300ED22BA LV YLV0024 19970109144533S101702A06065
never never NN 15CB4A5904364DB6 LV YLV0024 19970313130752S101702A06231
never never NN 15E8FDCB178BE292 LV YLV0024 19970918124528S101702A06687
never never NN 15EC4D9A12ACAA38 LV YLV0024 19971009142943S101702A06732
never never NN 15F4025316263006 LV YLV0024 19971127151620S101702A06852
never never NN 160577C3112FE878 LV YLV0024 19980318172336S101702Z36548
never never NN 16076EA91CAD28B2 LV YLV0024 19980331072213S101702Z36753
never never NN 160780911073932A LV YLV0024 19980331180350S101702Z36753
never never NN 1607824E05B6C55A LV YLV0024 19980331190659S101702Z36753
never never NN 1608BBA6013713C6 LV YLV0024 19980408135941S101702A07156
never never NN 16240C4A058C2B68 M21SAMT2 SP1BS7T
never never NN 16240C4B0A3A1108 M21SAMT2 SP1BS9T
never never NN 1624161907231ECE M23SAMT2 SP1BS1T
never never NN 1624163601CBD7CA M23SAMT2 SP1BS3T
never never NN 162416531343F742 M23SAMT2 SP1BS7T
never never NN 162416551EA5E2F2 M23SAMT2 SP1BS9T
never never NN 154921C4195BA576 MD YMD0651 19941206083936S101702A04010
never never NN 15497F2E0875479E MD YMD0651 19941208162230S101702A04010
never never NN 154A41F31EE37A4C MD YMD0651 19941213123405S101702A04038
never never NN 155B13C313C15ED8 MD YMD0651 19950330S101702A043203AYMD0
never never NN 1564FD7A1F9F1CE0 MD YMD0651 19950601S101702M000585AYMD0
never never NY 153F9E6E00703118 ME ME0300 19941006195423S101702A037982
never never NY 15E38C0119181CAA ME ME0300 19970814211635S101702A065803
never never NY 16DAFC971DC41148 MF MF8150 A06M020109
never never NY 16DB013C0B1F2689 MF MF8230 A06M020109
never never NY 16DB00FE074B050D MF MF8900 A06M020109
never never NY 160E6BF9131F0AC4 NF NF5800 19980514184411S101702A072505
never never NY 15E265C8114413FC NF NF5890 19970807134910S101702A065780
never never NY 16001C0A18FC764B NF NF5890 19980212145537S101702M000834
never never NY 17D28B72048870D4 NF NF5900 NBSI000089
never never NY 17C93F6F1DD81E53 NF NF5910 NBSI000061
never never NY 17D28B730AA89FAB NF NF5910 NBSI000089
never never NY 17D265751A3AD9EA NF NF7330 NBSI000089
never never NY 157E4B0F074029E2 NF NF8800 19951109S101702A049436ANF880
never never NY 157F661208014560 NF NF8800 19951116S101702M000633ANF880
never never NY 15EC4BC5009019D6 NF NF8800 19971009132420S101702A067383
never never NY 157BA294020428A8 NF YNFCGB1 19951023S101702Z214260AYNFC
never never NY 157BABF11868E936 NF YNFCGB1 19951023S101702Z214285AYNFC
never never NY 157BC49D1DA8EFF8 NF YNFCGB1 19951024S101702Z214404AYNFC
never never NY 1536D79D0AD9ED8C NH NH5910 19940811233300S101702A036480
never never NY 1536D79906531EF8 NH NH7100 19940811233217S101702A036480
never never NY 17C3ED151B66666A NI YNI0201 IPC0000123568132CD
never never NY 17C3ED15184BA740 NI YNI0202 IPC0000123568132CD
never never NY 17C3ED1519269AB5 NI YNI0211 IPC0000123568132CD
never never NY 17C3ED151D30534F NI YNI0212 IPC0000123568132CE
never never NY 180501E71FCD78AD NI YNICOFM IPC000017558A323CC
never never NY 17C4447209FA921A NJ NJ7180 QMS0000016
never never NY 17D976D91B90EB24 NJ NJ7180 QMS0000021
never never NY 17EE39061D91F223 NJ NJ7180 QMS0000023
never never NY 17C8A5C31BC42BED NJ YNJ050 QMS000001656A8CDEA
never never NY 17D20C8007EE8080 NJ YNJ050 QMS000001956F7B92C
never never NY 17E06A7A0986A8D1 NJ YNJ050 QMS000002157703E45
never never NY 15A47D5B03D9DC8A NK NK0030V 19960709155209S101702Z25661
never never NY 15C206D6072A1C08 NK NK0200V 19970113142804S101702Z29022
never never NY 15ED6648009BB03A NK NK5010 19971016135110S101702M000847
never never NY 160E6980140B1D42 NK NK5010 19980514170627S101702M000860
never never NY 15FBB79906BD0AD4 NK NK5020 19980115162122S101702A069682
never never NY 160E697B14D5EE52 NK NK5020 19980514170627S101702M000860
never never NY 15C01FA60D4ED9B0 NK NK5030 19970101115058S101702A060411
never never NY 15C39ED8061F4E74 NK NK5030 19970123175105S101702A061091
never never NY 15C01FB1151D534A NK NK5040 19970101115059S101702A060411
never never NY 15FBB7960A23FD42 NK NK5040 19980115162123S101702A069682
never never NY 15FBB7961D3CDECC NK NK5050 19980115162124S101702A069682
never never NY 160E698112EF9EDC NK NK5050 19980514170628S101702M000860
never never NY 15E38BDD1ACA7F32 NK NK5110 19970814211251S101702A065977
never never NY 15FBB796072CA953 NK NK5110 19980115162114S101702A069682
never never NY 15FBB79707BD1CDA NK NK5120 19980115162114S101702A069682
never never NY 160E69810FEBB4BA NK NK5120 19980514170629S101702M000860
never never NY 15FBB7990C0EDFEA NK NK5130 19980115162115S101702A069682
never never NY 160E69B30325EB5B NK NK5130 19980514170630S101702M000860
never never NY 15E8FDC818210CCA NK NK5140 19970918124542S101702A066889
never never NY 15FBB7971A9A83B0 NK NK5140 19980115162115S101702A069682
never never NY 15E8FDCA1AE5E722 NK NK5160 19970918124543S101702A066889
never never NY 15FBB79400F8B2B6 NK NK5160 19980115162116S101702A069682
never never NY 15FBB79914485CBA NK NK5170 19980115162116S101702A069682
never never NY 160E698103038518 NK NK5170 19980514170630S101702M000860
never never NY 15CE9DEB08F6D08A NK NK5180 19970403170629S101702A062868
never never NY 15FBB7970F0C0F41 NK NK5180 19980115162117S101702A069682
never never NY 15E38BCA046A68F7 NK NK5190 19970814211257S101702A065977
never never NY 15FBB794007A552C NK NK5190 19980115162118S101702A069682
never never NY 15CE9DEC120CE330 NK NK5200 19970403170632S101702A062868
never never NY 15FBB79210B53BA6 NK NK5200 19980115162118S101702A069682
never never NY 15FBB7980B8106C1 NK NK5210 19980115162119S101702A069682
never never NY 15B3198106D4ACDA NK NK5240 19961010145701S101702A057697
never never NY 15C01FA505B2FBC2 NK NK5240 19970101115037S101702A060411
never never NY 153E80C716BFB5BE NK NK5240V 19940929172932S101702A03787
never never NY 15DE008000BCD94E NK NK5310 19970710143127S101702A065189
never never NY 160E69A70EAB22AB NK NK7000 19980514170631S101702M000860
never never NY 15B3198115703F7A NK NK7030 19961010145702S101702A057697
never never NY 15C01FA80EE059B8 NK NK7030 19970101115041S101702A060411
never never NY 1584E7FC02BEC326 NK NK7050 19951221S101702A050630ANK705
never never NY 15CE9DED060E7572 NK NK7050 19970403170633S101702A062868
never never NY 15EC6F261F3D978E NK NK7200 19971010103011S101702Z338761
never never NY 15ED663E151A0002 NK NK7200 19971016135112S101702M000847
never never NY 15F0B3DA1583261A NK NK7300 19971106141951S101702A068097
never never NY 15F633341D5D0D06 NK NK7300 19971211135159S101702A068963
never never NY 15819756011997CC NK NK7800 19951130S101702A049919ANK780
never never NY 15C01FCD02A4E69C NK NK7800 19970101115537S101702A060424
never never NY 1578CD8D14602938 NK NK7810 19951005S101702A048293ANK781
never never NY 15C01FCD1B398D1C NK NK7810 19970101115539S101702A060424
never never NY 15C01FCF11D74902 NK NK7840 19970101115540S101702A060424
never never NY 15C2860910718C26 NK NK7910 19970116182042S101702A060940
never never NY 15E38C0C1563C3E6 NK NK7910 19970814211302S101702A065977
never never NY 15B3197E141AF95C NK NK7920 19961010145703S101702A057697
never never NY 15C01FA31137941C NK NK7920 19970101115048S101702A060411
never never NY 15C01FA715760F8A NK NK7930 19970101115051S101702A060411
never never NY 15E38C371965C976 NK NK8010 19970814211305S101702A065977
never never NY 160E69B90A21EFD4 NK NK8010 19980514170632S101702M000860
never never NY 15E38C3A10D4453E NK NK8020 19970814211307S101702A065977
never never NY 15CE9DF109460DA8 NK NK8030 19970403170634S101702A062868
never never NY 160E69B90A5D5710 NK NK8030 19980514170633S101702M000860
never never NY 15AB67041486344C NK NK8040 19960822153011S101702A056584
never never NY 15C01FD116E4DD16 NK NK8040 19970101115540S101702A060424
never never NY 160E69B90A43C29D NK NK8050 19980514170633S101702M000860
never never NY 15CE9DF40E3F8606 NK NK8060 19970403170636S101702A062868
never never NY 160E69AC1DE0B3AA NK NK8060 19980514170635S101702M000860
never never NY 15F2E6271C5658E4 NK NK8080 19971120134500S101702A068428
never never NY 15F51A1312E2B2B8 NK NK8080 19971204140627S101702A068796
never never NY 15C01FD2160756D8 NK NK8090 19970101115541S101702A060424
never never NY 15E38C3A0AB69AD4 NK NK8090 19970814211329S101702A065977
never never NY 15A29BAC004F4372 NK NK8110 19960627163246S101702A055267
never never NY 15B0E8C805FC95B8 NK NK8110 19960926162634S101702A057441
never never NY 1577B36A17DC34EC NK NK8120 19950928S101702A048069ANK812
never never NY 15FBB795196939D6 NK NK8120 19980115162120S101702A069682
never never NY 15C01FCF1A051F5E NK NK8140 19970101115542S101702A060424
never never NY 15FBB793138E453A NK NK8140 19980115162120S101702A069682
never never NY 16013B4D0BCD7988 NK NK8150 19980219182538S101702A070555
never never NY 15A180CB005D4B60 NK NK8160 19960620154603S101702A055102
never never NY 15E38BDB0CE4AA8A NK NK8160 19970814211337S101702A065977
never never NY 15B0E8C807928D88 NK NK8170 19960926162637S101702A057441
never never NY 15C06DBE1C90143C NK NK8170 19970103102547S101702Z287047
never never NY 160E696107986578 NK NK8180 19980514170648S101702M000860
never never NY 15E4C12214223BA0 NK NK8190 19970822134421S101702Z329315
never never NY 15E4C7811C05C7DA NK NK8190 19970822173219S101702Z329367
never never NY 15FBB7971322DA28 NK NK8200 19980115162121S101702A069682
never never NY 15FF01081524D7FA NK NK8210 19980205141816S101702A070186
never never NY 15C01FAA0C5D0E08 NK NK8240 19970101115054S101702A060411
never never NY 15C3E1FD05C9EDC6 NK NK8240 19970125095418S101702Z292839
never never NY 15C4702F0D655FA4 NK NK8250 19970128224355S101702Z293392
never never NY 15C4B09E0E28CB62 NK NK8250 19970130130932S101702A061205
never never NY 15E7E44D0227B828 NK NK8300 19970911124909S101702A066744
never never NY 16024C2106179BEE NK NK8300 19980226131317S101702A070680
never never NN 15314D3F0F7571DC NK NK8820 19940707172646S101702A034690
never never NY 15A29BC20A6A31EA NK NK8820 19960627163516S101702A055244
never never NY 15EB5F591BBBB8DC NK NK8830 19971003162239S101702Z337521
never never NY 15EC4D86030E9CC6 NK NK8830 19971009142704S101702A067321
never never NY 15B3198200AC8152 NK NK8840 19961010145703S101702A057697
never never NY 15C01FAF1E8F5952 NK NK8840 19970101115056S101702A060411
never never NN 14D19348082F3664 NK YNKSICB
never never NN 15314CDE10629F62 NK YNKSICH 19940707172101S101702A03469
never never NY 15A3669119218106 NK YNKSICH 19960702173409S101702Z25559
never never NY 15A367EB0458EF64 NK YNKSICH 19960702182225S101702Z25560
never never NY 15A38085003F6236 NK YNKSICH 19960703090225S101702Z25563
never never NY 15A3815617169F42 NK YNKSICH 19960703093214S101702Z25564
never never NY 15A3849C08157772 NK YNKSICH 19960703112609S101702Z25569
never never NY 15A3853809C6F690 NK YNKSICH 19960703115112S101702Z25569
never never NY 15A3864C05CBCF0C NK YNKSICH 19960703122934S101702Z25570
never never NY 15A386DF0D910736 NK YNKSICH 19960703125020S101702Z25570
never never NY 15A388181B4E8C26 NK YNKSICH 19960703133410S101702Z25571
never never NY 15A389C810DECC7A NK YNKSICH 19960703143433S101702Z25574
never never NY 15A38B690CA93038 NK YNKSICH 19960703153248S101702Z25575
never never NY 15A3B5F213130F1A NK YNKSICH 19960704165443S101702A05561
never never NY 15A44F43154DBB4A NK YNKSICH 19960708122220S101702Z25626
never never NY 15A473AE105D8776 NK YNKSICH 19960709100619S101702Z25643
never never NY 15A4CA36111F8B04 NK YNKSICH 19960711134332S101702A05571
never never NY 15E14BDB0D20C6A6 NK YNKSIKO 19970731133829S101702A06562
never never NY 15E265021294AEE0 NK YNKSIKO 19970807132139S101702A06573
never never NY 15E37F12121B0734 NK YNKSIKO 19970814133711S101702A06605
never never NY 15E6CBAC0AB915C2 NK YNKSIKO 19970904132615S101702A06655
never never NY 15E6CE9202DE8DB2 NK YNKSIKO 19970904151013S101702A06655
never never NY 15E7E436138F1E34 NK YNKSIKO 19970911124743S101702A06674
never never NY 15EA19240BF3D950 NK YNKSIKO 19970925134637S101702A06706
never never NY 15FF00FA1F905D02 NK YNKSIKO 19980205141607S101702A07018
never never NY 14BDCCF717FA5A58 NK YNKUMW
never never NY 152439AB022CE1D8 NK YNKUMW 19940415123746S101702A032855
never never NY 1524452F17C0528E NK YNKUMW 19940415193036S101702A032855
never never NY 15314CDE09B635FC NK YNKUMW 19940707172102S101702A034690
never never NY 181E9A961D32134D NL YNLG021 BALR0000745979E970
never never NY 17853DE116071900 NL YNLG030 BALR00000154735D18
never never NY 181E9A9506609863 NL YNLG030 BALR0000745979E975
never never NY 181E9A961A1B1F19 NL YNLG030 BALR0000745979E975MVS
never never NY 181E9A940256406D NL YNLG03M BALR0000745979E978MVS
never never NY 181E9A8F16F647CE NL YNLG040 BALR0000745979E97EMVS
never never NY 181E9A8E1C984020 NL YNLG050 BALR0000745979E97F
never never NY 181E9A900B8BBA37 NL YNLG050 BALR0000745979E97FMVS
never never NY 181E9A9A0DF5E05F NL YNLG060 BALR0000745979E986
never never NY 181E9A9B1F0D1C6C NL YNLG060 BALR0000745979E986MVS
never never NY 181E9A9118DF15AC NL YNLG121 BALR0000745979E992
never never NY 181E9A931D8BFB31 NL YNLG130 BALR0000745979E995MVS
never never NY 181E9AA0008DEBB0 NL YNLG140 BALR0000745979E99AMVS
never never NN 153E7FBB0756338E NP NP0150 19940929164937S101702A037741
never never NN 153E7FC118938A50 NP NP0350 19940929164943S101702A037741
never never NN 1550165410E3E754 NP NP0360 19950119144601S101702A040974
never never NN 159A729C0A67B488 NP NP0360 19960506182034S101702A053948
never never NN 15A3B13219B50242 NP NP0360 19960704140529S101702A055458
never never NN 1550165606826216 NP NP0380 19950119144602S101702A040974
never never NN 159A729C01E677BA NP NP0380 19960506182034S101702A053948
never never NN 153E7B280AFB7FB2 NP NP0410 19940929140633S101702A037741
never never NN 153E7DD602FA26F4 NP NP0410 19940929154021S101702A037741
never never NN 153E7FC001CF8D96 NP NP0410 19940929164945S101702A037741
never never NY 153E7B130CEBC334 NP NP5000 19940929140635S101702A037741
never never NY 153E7DB6002CF3DC NP NP5000 19940929154023S101702A037741
never never NY 153E7FA61D05A1E4 NP NP5000 19940929164946S101702A037741
never never NY 153E7B171E7B3A96 NP NP5020 19940929140638S101702A037741
never never NY 153E7DB71AA308AE NP NP5020 19940929154025S101702A037741
never never NY 153E7FA71B267462 NP NP5020 19940929164947S101702A037741
never never NN 153E7B19094B32AE NP NP5140 19940929140642S101702A037741
never never NN 153E7DBA018C90C6 NP NP5140 19940929154033S101702A037741
never never NN 153E7FB20648D722 NP NP5140 19940929164951S101702A037741
never never NN 153E7B2217F07080 NP NP5160 19940929140644S101702A037741
never never NN 153E7DBA1A764744 NP NP5160 19940929154036S101702A037741
never never NN 153E7FAE1253A898 NP NP5160 19940929164952S101702A037741
never never NN 1542E2460E713678 NP NP5220 19941027143040S101702A038705
never never NN 155015C505BA4FF0 NP NP5220 19950119142451S101702A040974
never never NN 1550165107CCBF5A NP NP5220 19950119144603S101702A040974
never never NN 1541C8B915576224 NP NP5240 19941020142956S101702A038461
never never NY 145AC3DE1E7492B4 NP NP5410
never never NY 153E7B0A028667F8 NP NP5450 19940929140523S101702A037741
never never NY 153E7DB4050704A8 NP NP5450 19940929153937S101702A037741
never never NY 153E7FAA0014F3E8 NP NP5450 19940929164921S101702A037741
never never NN 154861C906032F1C NP NP5460 19941201140647S101702A039881
never never NN 153E7B0B00CD14FC NP NP5470 19940929140527S101702A037741
never never NN 153E7DB105EE7A00 NP NP5470 19940929153939S101702A037741
never never NN 153E7FAC1192DB16 NP NP5470 19940929164922S101702A037741
never never NN 153E7B0A182F90E4 NP NP7210 19940929140529S101702A037741
never never NN 153E7DAF18047F02 NP NP7210 19940929153942S101702A037741
never never NN 153E7FAB14766166 NP NP7210 19940929164923S101702A037741
never never NN 153E7B0F098F1ABC NP NP8330 19940929140550S101702A037741
never never NN 153E7DB0071BDD0C NP NP8330 19940929153955S101702A037741
never never NN 153E7FA40712F05C NP NP8330 19940929164930S101702A037741
never never NN 153E7B1000FB9A9E NP NP8340 19940929140557S101702A037741
never never NN 153E7DB0123A7E74 NP NP8340 19940929153957S101702A037741
never never NN 153E7FA31776C104 NP NP8340 19940929164931S101702A037741
never never NN 153E7FA419229B0A NP NP8350 19940929164931S101702A037741
never never NY 153E7FA20964DA96 NP NP8900 19940929164933S101702A037741
never never NY 1579E5EC1052194C NR NR8000 19951012S101702M000624ANR800
never never NY 15A93269122828C2 NS NS0890 19960808144239S101702A056331
never never NY 15AA4B82062790A6 NS NS0890 19960815142208S101702A056403
never never NY 15AB65010A6D2094 NS NS0890 19960822141851S101702A056667
never never NY 157D30BB10C36622 NS NS7340 19951102S101702A049013ANS734
never never NY 15C4B64605F19458 NS NS7340 19970130162854S101702A061187
never never NY 15E3ACDC1F4C8A0C NS NS7340 19970815165414S101702A066076
never never NY 15B773460A9F1336 NTA1P AT0070 CIMA000450
never never NY 15F405F003470AA0 NTA1P AT0070 CIMA000651
never never NY 16056B3209A926D0 NTA1P AT0070 CIMA000663
never never NY 160D76330C1BB10E NTA1P AT0090 CIMA000675
never never NY 15C55AE81CEC8448 NTA1P BC0003
never never NY 15FC723819E10812 NTA1P BC0003 CRMB000360
never never NY 164CC3B61B3D3EA8 NTA1P BC0003 CRMB000430
never never NY 15C579911DD9F6FA NTA1P BC0007 CRMB000170
never never NY 15FC723D17259AAA NTA1P BC0007 CRMB000360
never never NY 164CC3B810E51406 NTA1P BC0007 CRMB000430
never never NY 15C55A7209B71720 NTA1P BC0008 CRMB000170
never never NY 160E3D4004D8CEAC NTA1P BC0008 CRMB000360
never never NY 164CC3B916F8BBA5 NTA1P BC0008 CRMB000430
never never NY 15C55A79161257AA NTA1P BC0009 CRMB000170
never never NY 15FC723F1F45C850 NTA1P BC0009 CRMB000360
never never NY 164CC3BA0A82A16C NTA1P BC0009 CRMB000430
never never NY 15E46C5C0A727582 NTA1P BC0010 CRMB000254
never never NY 15FC72411FBD4502 NTA1P BC0010 CRMB000360
never never NY 164CC3B916A79FDF NTA1P BC0010 CRMB000430
never never NY 15C5799E139FC882 NTA1P BC0011 CRMB000170
never never NY 15FC724C0C76ADAC NTA1P BC0011 CRMB000360
never never NY 164CC69E05E9A57D NTA1P BC0011 CRMB000430
never never NY 1579E5E407BBB824 NTA1P NR7110 19951012S101702M000624ANR
never never YY 41534E434F4D4F4E NULLID ASNDD800
never never YY 41534E434F4D4F4E NULLID ASNDD880
never never NY 1588FBAE0A59BFA4 NV NVB903
never never NY 15A6AACE1E9C1C70 NV NVB918
never never NY 15A6AAD0074AB930 NV NVB920
never never NY 15A6AAE513F1AFDC NV NVO006 A
never never NY 15A6AAE61D4AFBC4 NV NVO010 A
never never NY 15A6AAE803ECB232 NV NVO017 A
never never NY 15A6AAE9170D4F1E NV NVO018 A
never never NY 15AA1A950EE8DA80 NV NVO019 A
never never NY 15ADB61F03B915D2 NV NVO020 A
never never NY 15A6AAEE01EF28CA NV NVO021 A
never never NY 15A6AAEF0A8F7B26 NV NVO025 A
never never NY 15A6AAF10DB35B92 NV NVO026 A
never never NY 15A6AAF30DC4D072 NV NVO027 A
never never NY 15A6AAF50434AD26 NV NVO028 A
never never NY 15A6AAF60F14731A NV NVO029 A
never never NY 15A6AAF80F0F286A NV NVO030 A
never never NY 15A8B66613CAEE1A NV NVO031 A
never never NY 15A8B66804FFEB10 NV NVO032 A
never never NY 15ADB62014964020 NV NVO033 A
never never NY 15A6AB001F21D428 NV NVO034 A
never never NY 15A6AB0303803432 NV NVO037 A
never never NY 15A6AB04146F88A2 NV NVO038 A
never never NY 15A6AB061B3FF1D2 NV NVO039 A
never never NY 15A6AB080A79D41C NV NVO041 A
never never NY 15A6AB0A12B3CC6E NV NVO042 A
never never NY 15A6AB0E05249D5E NV NVO043 A
never never NY 15A6AB1007536DA2 NV NVO045 A
never never NY 15A6AB11111D130C NV NVO046 A
never never NY 15A8B6690C72F090 NV NVO047 A
never never NY 15A8B66A1128A3B2 NV NVO048 A
never never NY 15A8B66B1428113A NV NVO049 A
never never NY 15A6AB180DAD2BC8 NV NVO052 A
never never NY 15A6AB1A00BC6B9A NV NVO053 A
never never NY 15A6AB1C098476F4 NV NVO055 A
never never NY 15A8B66C17A83058 NV NVO057 A
never never NY 15A8B66E0AE2C03A NV NVO059 A
never never NY 15A6AB210377C2D8 NV NVO060 A
never never NY 15A6AB220AAA24E8 NV NVO064 A
never never NY 15A6AB2312944F52 NV NVO070 A
never never NY 15A6AB441BB654AC NV NVO071 A
never never NY 15A8B66F0F289152 NV NVO072 A
never never NY 15A8B67016A44208 NV NVO073 A
never never NY 15A8B6711667976A NV NVO074 A
never never NY 15A6AB4A11EB62EE NV NVO075 A
never never NY 15A6AB4B19A8714A NV NVO076 A
never never NY 15A6AB4C1F4F8476 NV NVO077 A
never never NY 15A6AB4E020C4D34 NV NVO079 A
never never NY 15A6AB4F082AD5EC NV NVO080 A
never never NY 15A6AB500EBE7A3C NV NVO081 A
never never NY 15A6AB5119C49A16 NV NVO082 A
never never NY 15A6AB5300411CDC NV NVO083 A
never never NY 15F74CAC1BC48BE2 NZ NZ0600 19971218134244S101702A069183
never never NY 15FBBB4C06BD50AC NZ NZ0600 19980115181659S101702M000856
never never NN 15A065B2085DEAB6 OD OD7020 19960613145427S101702A054902
never never NN 16047FDE199109B6 OD OD7020 19980312133153S101702A070916
never never NN 1614FF570293BFCE OD OD7020 19980625145544S101702A073365
never never NN 15722FC207B30E46 OD OD7030 19950824S101702A047131AOD703
never never NN 16047FDE1E51C834 OD OD7030 19980312133154S101702A070916
never never NN 1614FF57028B8196 OD OD7030 19980625145545S101702A073365
never never NY 158FE3AD1235443C OD OD7040 19960229135951S101702Z236394
never never NY 15900A580F7C701C OD OD7040 19960301130327S101702Z236556
never never NY 15A4CA220446E228 OD OD7040 19960711133939S101702A055623
never never NN 1561B06008E6F7A8 OD OD7060 19950511S101702A044280AOD706
never never NN 1564FCBF1B89E4C2 OD OD7060 19950601S101702A044892AOD706
never never NN 15B4C963192AEF16 OD OD7070 19961021083513S101702Z271571
never never NY 15B51A7D199D9A24 OD OD7070 19961023085719S101702Z272282
never never NN 15B54BFC04AE28D2 OD OD7070 19961024142938S101702A058057
never never NN 1561B05B1D171304 OD OD7080 19950511S101702A044280AOD708
never never NN 1569644714F8674C OD OD7080 19950629S101702A045721AOD708
never never NN 15722FCB08638FB6 OD OD7080 19950824S101702A047131AOD708
never never NY 15B40DC60E2F4AEC OD OD7090 19961016164015S101702Z271012
never never NY 15B4266812918F8C OD OD7090 19961017072106S101702Z271040
never never NN 15B54BFE03C58C7A OD OD7090 19961024142939S101702A058057
never never NN 15E260F0076D2896 OD OD7120 19970807105631S101702Z325951
never never NN 15E307311C9AEB1C OD OD7120 19970811140607S101702Z326413
never never NN 15E4985310722626 OD OD7120 19970821132306S101702A066166
never never NY 1542E523167958DE OD OD7130 19941027161308S101702A038607
never never NY 1559FBC51AE55158 OD OD7130 19950323140241S101702A043077
never never NY 15A5E43B027E4AE2 OD OD7140 19960718135641S101702A055864
never never NN 15BDAF3816486C28 OD OD7140 19961216232158S101702Z284121
never never NN 15BE188E11702BC2 OD OD7140 19961219141048S101702A060087
never never NN 15BDAF850B130042 OD OD7160 19961216233243S101702Z284130
never never NN 15BE188E1D22C28C OD OD7160 19961219141049S101702A060087
never never NN 15DCE97618BA00D2 OD OD7160 19970703160630S101702M000808
never never NY 159F1F9D056530F8 OD OD7180 19960605122405S101702Z251474
never never NY 159F209D1C35DE50 OD OD7180 19960605130003S101702Z251474
never never NY 15A065B21E2D642E OD OD7180 19960613145428S101702A054902
never never NY 1579E2F81F395BA6 OD OD7181 19951012S101702A047632AOD718
never never NY 1579E2F81F165102 OD OD7182 19951012S101702A047632AOD718
never never NY 1579E2F9040DF786 OD OD7183 19951012S101702A047632AOD718
never never NY 1579E2F81F61A244 OD OD7184 19951012S101702A047632AOD718
never never NY 159F25C110697C1A OD OD7190 19960605160459S101702Z251541
never never NY 159F4050063CDFDE OD OD7190 19960606075419S101702Z251583
never never NY 15A065B208FDDAC4 OD OD7190 19960613145420S101702A054902
never never NY 159F2644044405D0 OD OD7200 19960605162215S101702Z251546
never never NY 159F41410FF73816 OD OD7200 19960606082803S101702Z251591
never never NY 15A065B01F4CBAAE OD OD7200 19960613145421S101702A054902
never never NY 1538FD1902DC78DC OD OD7210 19940825152244S101702A036730
never never NY 15497B9306CFC3AA OD OD7210 19941208141347S101702A040106
never never NY 15A5E43D001165A4 OD OD7210 19960718135643S101702A055864
never never NN 15E260FF1AD87A60 OD OD7220 19970807105824S101702Z325954
never never NN 15E307311CE48676 OD OD7220 19970811140644S101702Z326415
never never NN 15E4985317E6DF28 OD OD7220 19970821132318S101702A066166
never never NY 15A5E43C1E0849A4 OD OD7240 19960718135643S101702A055864
never never NN 15BDAF64190A50D6 OD OD7240 19961216232811S101702Z284125
never never NN 15BE188E0B5D6AE4 OD OD7240 19961219141032S101702A060087
never never NN 15E49BB90DD8A742 OD OD7280 19970821152509S101702A066237
never never NN 15E49DAB00073D2E OD OD7280 19970821163430S101702A066237
never never NN 15BA7FDF14FE8878 OD OD7281 19961126165931S101702Z279665
never never NN 15BAA8C80BF90382 OD OD7281 19961127172307S101702Z280020
never never NN 15BBE9D11D9FA064 OD OD7281 19961205165458S101702A059431
never never NN 15BBE9D80AF439BC OD OD7290 19961205165500S101702A059431
never never NN 15DCE96A13B4CF7D OD OD7290 19970703160551S101702M000808
never never NN 160D4EB506A0BA32 OD OD7290 19980507163236S101702A072127
never never NN 15C0F22E0200F9E0 OD OD7300 19970106172633S101702A060567
never never NN 15C1184616692102 OD OD7300 19970107160900S101702A060607
never never NN 15DCE96B0A746A34 OD OD7300 19970703160555S101702M000808
never never NN 161731C706E6862C OD OD7330 19980709142526S101702A073729
never never NN 158FE3F611A3A804 OE OE0121 19960229141006S101702A052336
never never NN 15967DBB1E0700C4 OE OE0122 19960411140916S101702A053315
never never NN 15547BA618681B1A OE OE8100 19950216140325S101702A041670
never never NN 15C91D4E16526614 OE OE8110 19970227165001S101702A062050
never never NN 15EE073D05414D44 OE OE8110 19971020135626S101702A067670
never never NN 15EF9953169B4B92 OE OE8110 19971030134735S101702A067911
never never NN 1573501403114C10 OE OE8130 19950831S101702A047271AOE813
never never NN 157372D10F32D664 OE OE8130 19950901S101702Z206327AOE813
never never NN 1577B0AC1F80CA24 OE OE8130 19950928S101702A048025AOE813
never never NY 15D880C90BD262C7 OE OE8730 19970605144943S101702A064421
never never NY 15DAB2A214E69C4E OE OE8730 19970619135856S101702A064828
never never NY 15ED663514692BB4 OE OE8730 19971016135122S101702M000847
never never NY 15E5B37C1C9BC708 OE OE8740 19970828141800S101702A066323
never never NY 15ED663812316026 OE OE8740 19971016135123S101702M000847
never never NY 15AC7E4319D3B274 OE OE9250 19960829140415S101702A056744
never never NN 156B96481BDF3CC6 OE YOE001 19950713S101702A046149AYOE00
never never NN 156CAF70043ACFA8 OE YOE001 19950720S101702A046302AYOE00
never never NN 157699F50D13CDEE OE YOE001 19950921S101702A047890AYOE00
never never NN 15944B1C1B80BB9E OE YOE001 19960328143211S101702A052974
never never NN 157D301B0DD64256 OE YOE0135 19951102S101702A048966AYOE0
never never NN 157699F50D25B2C4 OE YOEM001 19950921S101702A047890AYOEM
never never NN 156CAF74003D11EA OE YOEM002 19950720S101702A046302AYOEM
never never NN 157699F50BF3642C OE YOEM002 19950921S101702A047890AYOEM
never never NY 15D64FC610D2249B OE YOERFT7 19970522160854S101702A06406
never never NY 15D671C0104E00CF OE YOERFT7 19970523122650S101702A06406
never never NY 15D673CE056136D4 OE YOERFT7 19970523134012S101702A06406
never never NY 15D674C7054425CF OE YOERFT7 19970523141454S101702A06412
never never NY 15D6753B1DFF9BE9 OE YOERFT7 19970523143128S101702A06412
never never NY 15D675D300BB6FAA OE YOERFT7 19970523145200S101702A06412
never never NY 15D67759157448A5 OE YOERFT7 19970523154739S101702A06412
never never NY 15E5B3560A8ED0AC OE YOERFT7 19970828141213S101702A06632
never never NY 15F0B55619A2D6E2 OE YOERFT7 19971106151230S101702A06806
never never NY 14EE2F5605F30ED2 OE YOEUP04
never never NY 14EE2F351C6A102A OE YOEUP12
never never NY 14EE2F4118554B46 OE YOEUP77
never never NY 170911FC02109FB2 OS DB2EBS01 A18Q001546
never never NY 16A0E2DE050ED758 OS DB2EBS01 P
never never NY 17092E460340E889 OS DB2EBS01 PROD
never never NY 170911FD102F5F69 OS DB2EBS03 A18Q001546
never never NY 17092E5208951A26 OS DB2EBS03 PROD
never never NY 170911FF0F90A2CE OS DB2REORG A18Q001546
never never NY 17092E540EE441CE OS DB2REORG PROD
never never NY 15983BA301EB9E34 OS OS7240 A
never never NY 15AC2D7406EA6486 OS OS7293 A
never never NY 15042DE013A65CA6 PC YPC0002
never never NY 152530551E109B3C PC YPC0002 19940421153633S101702M00044
never never NY 182A6A8A14DD70E1 PC YPC0870 IVN000003559DD0082
never never NY 14CAF9E611E24984 PC YPC9997
never never NY 15CDAB591103C79C PHPS53 GACOLSN
never never NY 1694C61D0C724B38 PHPS53 GADRELS
never never NY 1668802F074DA4F8 PHPS53 GAMI000
never never NY 1565EECE0E5ECAEC PHPS53 GARD000
never never NY 16A8010F1F82BB8C PHPS53 GARD001
never never NY 15CDAB0B14D041D8 PHPS53 GARESET
never never NY 15CA646E06025900 PHPS53 GCADDE
never never NY 1619079A1575A360 PHPS53 GCBTOGL
never never NY 1567335819916C94 PHPS53 GCCOMON
never never NY 1672B0C208EA578C PHPS53 GCCRC00
never never NY 15AC828B1B14FA6A PHPS53 GCCRC01
never never NY 155C2C730710AF90 PHPS53 GCDTTM0
never never NY 163952971CCA9600 PHPS53 GCEXTAT
never never NY 155C5B4F023B6524 PHPS53 GCGENID
never never NY 167D65360749F7EC PHPS53 GCMIGDEL
never never NY 15CA646913B95630 PHPS53 GCRDENT
never never NY 15A36643030A26FC PHPS53 GCSTATE
never never NY 15D61F121CE36AD4 PHPS53 GCSTKCL
never never NY 161907A31F133620 PHPS53 GCSTMIG
never never NY 167834541B5DDFD8 PHPS53 GCTMTH
never never NY 164B90F8018FB550 PHPS53 GCUPDRES
never never NY 1646121C0B2895F0 PHPS53 GEXP000
never never NY 15F091221E7380D0 PHPS53 GEXP004
never never NY 1675588010AC1C98 PHPS53 GIMP000
never never NY 160E07A00A802048 PHPS53 GLCNVRT
never never NY 1636F6900F9CF270 PHPS53 GLMP000
never never NY 15D3CC2913ACAD18 PHPS53 GLXSEER
never never NY 16477D14047A4A48 PHPS53 GRBNDLK
never never NY 163703A910FAEC78 PHPS53 GRCLUP
never never NY 15A37FE50D1FAC42 PHPS53 GRENDV0
never never NY 1621D60F177D3620 PHPS53 GRINSPT
never never NY 16792BB11F1ADD68 PHPS53 GRINST0
never never NY 1640B2AB07663A60 PHPS53 GRPREP0
never never NY 167604A8034D288C PHPS53 GRRBA00
never never NY 15E1266101283F10 PHPS53 GRRBA04
never never NY 16394EC31826E248 PHPS53 GRRPT00
never never NY 165D7F23125F1EB4 PHPS53 GRRSTAT
never never NY 15D8A92F0CE846C4 PHPS53 GRSCL
never never NY 163703970628CBD0 PHPS53 GRSEED0
never never NY 15E147E71374FE70 PHPS53 GRSEED4
never never NY 155E0A010DFFB18C PHPS53 GRTBIND
never never NY 1622CCCB0AB717A8 PHPS53 GRVRF00
never never NY 15B09BB90BE4A7FA PHPS53 GSELECT
never never NY 15CDABCB034AE0C4 PHPS53 GTCLUP
never never NY 16506C1D10184988 PHPS53 GTDELTA
never never NY 163C50741B313FF0 PHPS53 GTLMC00
never never NY 16714C5E1D492438 PHPS53 GTREP00
never never NY 16085F6F199251D8 PHPS53 GTTOGGL
never never NY 15CDABD10526D324 PHPS53 GUIVRFY
never never NY 16224D7B0623E920 PHPS53 GUPDENT
never never NY 159772D012BAF9BA PHPS53 H0001R
never never NY 161FDC4F13D9E0C8 PHPS53 H0002
never never NY 1592177A0E93E6CC PHPS53 H0002R
never never NY 161FDC530447AFA0 PHPS53 H0003
never never NY 1592178B0CC11144 PHPS53 H0003R
never never NY 161FDC561EE0F568 PHPS53 H0004
never never NY 1592179502AA646A PHPS53 H0004R
never never NY 161FDC5A0DD001C8 PHPS53 H0005
never never NY 1592179E13C5A24A PHPS53 H0005R
never never NY 161FDC5E05BFA660 PHPS53 H0006
never never NY 159217A716F3A418 PHPS53 H0006R
never never NY 161FDC611DF407D8 PHPS53 H0007
never never NY 159217B30E117928 PHPS53 H0007R
never never NY 161FDC6510FBC310 PHPS53 H0008
never never NY 159217BE06C7E0D6 PHPS53 H0008R
never never NY 161FDC6903CE27A8 PHPS53 H0009
never never NY 159217C91163DD52 PHPS53 H0009R
never never NY 159217DB062756C6 PHPS53 H0010R
never never NY 161FDC701F1DF460 PHPS53 H0011
never never NY 159217E21F5EC7D4 PHPS53 H0011R
never never NY 161FDC74110D5A20 PHPS53 H0012
never never NY 159217E81AAA315E PHPS53 H0012R
never never NY 161FDC78054EBCC0 PHPS53 H0013
never never NY 159217ED192039C2 PHPS53 H0013R
never never NY 159217F3024803CA PHPS53 H0014R
never never NY 161FDC7E1F0A4CE0 PHPS53 H0015
never never NY 159217F71E33B7C2 PHPS53 H0015R
never never NY 161FDC82102BE588 PHPS53 H0016
never never NY 159217FC1ABC4770 PHPS53 H0016R
never never NY 161FDC86011E5340 PHPS53 H0017
never never NY 1592180115AF6AAA PHPS53 H0017R
never never NY 161FDC890808C648 PHPS53 H0018
never never NY 159218070F5B49A2 PHPS53 H0018R
never never NY 161FDC8C165AFDA0 PHPS53 H0019
never never NY 1592180D15DD3104 PHPS53 H0019R
never never NY 161FDC90020B3538 PHPS53 H0020
never never NY 159218121A716D24 PHPS53 H0020R
never never NY 161FDC9301C14030 PHPS53 H0021
never never NY 159218180878C04E PHPS53 H0021R
never never NY 161FDC951F7AFA30 PHPS53 H0022
never never NY 1592181E1206D3B0 PHPS53 H0022R
never never NY 161FDC981D3E1888 PHPS53 H0023
never never NY 159218241A5B697A PHPS53 H0023R
never never NY 162131100DE991E0 PHPS53 H0024
never never NY 159DDC1F0F7FE48C PHPS53 H0024R
never never NY 161FDC9D04DA9598 PHPS53 H0025
never never NY 15A128E9144D9DB0 PHPS53 H0025R
never never NY 15B74E511E488132 PHPS53 H0025X2
never never NY 161FDCA00A715110 PHPS53 H0026
never never NY 15921837107446C2 PHPS53 H0026R
never never NY 167C93F7089AEFA8 PHPS53 H0026X
never never NY 161FDCA3120DF348 PHPS53 H0033
never never NY 1592183C1EA72A64 PHPS53 H0033R
never never NY 161FDCA61B3D6DC8 PHPS53 H0034
never never NY 15921841177E708A PHPS53 H0034R
never never NY 161FDCA91FC33690 PHPS53 H0035
never never NY 15A4F3D3070FF4BA PHPS53 H0035R
never never NY 161FDCAC1BE345B0 PHPS53 H0038
never never NY 1592184607A905C2 PHPS53 H0038R
never never NY 161FDCAF1B7E8FE0 PHPS53 H0039
never never NY 1592184B0673F52E PHPS53 H0039R
never never NY 161FDCB21FD43D50 PHPS53 H0040
never never NY 159218510470D8A2 PHPS53 H0040R
never never NY 161FDCB60366A6C0 PHPS53 H0041
never never NY 159218560A8916E0 PHPS53 H0041R
never never NY 161FDCB900C1CD60 PHPS53 H0042
never never NY 1592185D00F97992 PHPS53 H0042R
never never NY 161FDCBB1D2EE0C0 PHPS53 H0043
never never NY 1592186215454FAC PHPS53 H0043R
never never NY 161FDCBE185DF678 PHPS53 H0044
never never NY 159218670C601C2A PHPS53 H0044R
never never NY 161FDCC11949FC10 PHPS53 H0045
never never NY 1592186D0CF0A2AA PHPS53 H0045R
never never NY 161FDCC415CF69B0 PHPS53 H0046
never never NY 159218711902350C PHPS53 H0046R
never never NY 161FDCC7185307C0 PHPS53 H0047
never never NY 159218761595AF48 PHPS53 H0047R
never never NY 161FDCCA15E40568 PHPS53 H0048
never never NY 1592187B1195DA1E PHPS53 H0048R
never never NY 161FDD1B0085D010 PHPS53 H0051
never never NY 1592188203929E42 PHPS53 H0051R
never never NY 161FDD1E13EF5CE0 PHPS53 H0052
never never NY 1592188714A465A0 PHPS53 H0052R
never never NY 161FDD211327A330 PHPS53 H0053
never never NY 1592188E0B8AB57A PHPS53 H0053R
never never NY 161FDD24118D4F90 PHPS53 H0054
never never NY 159218951F95B83A PHPS53 H0054R
never never NY 161FDD271103FAB8 PHPS53 H0055
never never NY 1592189E0254FFDC PHPS53 H0055R
never never NY 161FDD2A0FB47420 PHPS53 H0056
never never NY 159218A3106628B2 PHPS53 H0056R
never never NY 161FDD2D0ECC1400 PHPS53 H0057
never never NY 159218A80E2F55E2 PHPS53 H0057R
never never NY 161FDD300B2DCD00 PHPS53 H0058
never never NY 159218AD07A19110 PHPS53 H0058R
never never NY 161FDD3308997B98 PHPS53 H0059
never never NY 159218B203F1A084 PHPS53 H0059R
never never NY 161FDD3606748020 PHPS53 H0060
never never NY 159218B61A72A7F2 PHPS53 H0060R
never never NY 161FDD3904B03ED8 PHPS53 H0061
never never NY 159218BC00186A58 PHPS53 H0061R
never never NY 161FDD3C0A406260 PHPS53 H0062
never never NY 159218C107A4E882 PHPS53 H0062R
never never NY 161FDD3F076CD9E0 PHPS53 H0063
never never NY 159218C60B4CEFDC PHPS53 H0063R
never never NY 161FDD4204F18580 PHPS53 H0065
never never NY 159218CB03D33F32 PHPS53 H0065R
never never NY 161FDD4503AFE650 PHPS53 H0066
never never NY 159218D11270681A PHPS53 H0066R
never never NY 161FDD480A6E4D50 PHPS53 H0067
never never NY 159218D60D5FA7F4 PHPS53 H0067R
never never NY 161FDD4B072E2298 PHPS53 H0068
never never NY 159218DD034C0BF0 PHPS53 H0068R
never never NY 161FDD4E04A6A770 PHPS53 H0069
never never NY 159218E3089A4152 PHPS53 H0069R
never never NY 161FDD5102E9EC98 PHPS53 H0070
never never NY 159218E914045FE0 PHPS53 H0070R
never never NY 161FDD54018DCED0 PHPS53 H0072
never never NY 159218EF0F5CFE42 PHPS53 H0072R
never never NY 161FDD5706CD9618 PHPS53 H0074
never never NY 15C5D03D17A5BBD0 PHPS53 H0074R
never never NY 161FDD5A07589C98 PHPS53 H0075
never never NY 15C5D0441FAB9554 PHPS53 H0075R
never never NY 161FDD5D059E7028 PHPS53 H0076
never never NY 15C5D04B1714C114 PHPS53 H0076R
never never NY 161FDD6003FA1420 PHPS53 H0077
never never NY 15C5D0520506A144 PHPS53 H0077R
never never NY 161FDD63084D1890 PHPS53 H0078
never never NY 15C5D0581985C1C0 PHPS53 H0078R
never never NY 161FDD6606059FA8 PHPS53 H0079
never never NY 15C5D05F0F1622FC PHPS53 H0079R
never never NY 161FDD6904C8BEC0 PHPS53 H0080
never never NY 15C5D066153F7284 PHPS53 H0080R
never never NY 161FDD6C19056CB8 PHPS53 H0081
never never NY 15C5D06D160BFDE4 PHPS53 H0081R
never never NY 161FDD701378F7D8 PHPS53 H0082
never never NY 15C5D07317B389C4 PHPS53 H0082R
never never NY 161FDD740DECBB50 PHPS53 H0083
never never NY 15C5D07916CB5BE8 PHPS53 H0083R
never never NY 161FDD7804B1FEE0 PHPS53 H0084
never never NY 15C5D080117649A8 PHPS53 H0084R
never never NY 161FDD7B0FFCED60 PHPS53 H0085
never never NY 15C5D0861C2B48B8 PHPS53 H0085R
never never NY 161FDD7E101B8020 PHPS53 H0090
never never NY 15A4F3DD163BC854 PHPS53 H0090R
never never NY 161FDD810E6C8958 PHPS53 H0091
never never NY 15AC14130C6A1E08 PHPS53 H0091R
never never NY 161FDD840C4EBEA0 PHPS53 H0092
never never NY 15AC14230D148B26 PHPS53 H0092R
never never NY 161FDD870A100CB0 PHPS53 H0093
never never NY 15AC142A1FF41AAC PHPS53 H0093R
never never NY 161FDD8A082F8718 PHPS53 H0094
never never NY 15AC14311F137DA4 PHPS53 H0094R
never never NY 161FDD8D040DD3A0 PHPS53 H0095
never never NY 15AC143714EAD6AA PHPS53 H0095R
never never NY 161FDD9001CD64E8 PHPS53 H0096
never never NY 15AC143F072A5F2C PHPS53 H0096R
never never NY 161FDD9302367578 PHPS53 H0097
never never NY 15AC144E1E3BD120 PHPS53 H0097R
never never NY 161FDD9603377908 PHPS53 H0098
never never NY 15AC1458149FD8E8 PHPS53 H0098R
never never NY 161FDD9900A83250 PHPS53 H0099
never never NY 15AC14600EA43FEE PHPS53 H0099R
never never NY 161FDD9B1EDC32C0 PHPS53 H0100
never never NY 15AC146B18A8ACCE PHPS53 H0100R
never never NY 161FDD9F03D502D0 PHPS53 H0101
never never NY 15AC147612715F96 PHPS53 H0101R
never never NY 161FDDA209081A20 PHPS53 H0102
never never NY 15AC148507D9F45E PHPS53 H0102R
never never NY 161FDDA50841E560 PHPS53 H0103
never never NY 15AC29B21813181E PHPS53 H0103R
never never NY 161FDDA807F72CC0 PHPS53 H0104
never never NY 15AC149308056456 PHPS53 H0104R
never never NY 161FDDAB0FFFA0E0 PHPS53 H0105
never never NY 15AC149F1AC07FA0 PHPS53 H0105R
never never NY 161FDDAE0FABFFD8 PHPS53 H0106
never never NY 15AC14AE0591A4BC PHPS53 H0106R
never never NY 161FDE0D102AA820 PHPS53 H1001
never never NY 155BDC021B6DB61C PHPS53 H1001R
never never NY 155BDC071E372DB0 PHPS53 H1002R
never never NY 161FDE12162AACB8 PHPS53 H1003
never never NY 155BDC0B0BADD90C PHPS53 H1003R
never never NY 161FDE1509071AA0 PHPS53 H1004
never never NY 155BDC0E0F296544 PHPS53 H1004R
never never NY 161FDE17195FCB58 PHPS53 H1006
never never NY 155BDC1110CD89B8 PHPS53 H1006R
never never NY 155BDC1507D7663C PHPS53 H1007R
never never NY 161FDE1D068027C0 PHPS53 H1008
never never NY 155BDC181F551708 PHPS53 H1008R
never never NY 161FDE1F153B0C30 PHPS53 H1009
never never NY 155BDC1C1E810688 PHPS53 H1009R
never never NY 155BDC20123C805C PHPS53 H1010R
never never NY 161FDE2413BF0BA0 PHPS53 H1012
never never NY 155BDC2413BEE580 PHPS53 H1012R
never never NY 155BDC281EF4CEA8 PHPS53 H1013R
never never NY 155BDC2D00D913F0 PHPS53 H1014R
never never NY 155BDC30171DBA90 PHPS53 H1015R
never never NY 155BDC331DDCD7F4 PHPS53 H1016R
never never NY 155BDC361CA05AE0 PHPS53 H1017R
never never NY 161FDE33151F57B8 PHPS53 H1018
never never NY 155BDC391241B8E0 PHPS53 H1018R
never never NY 161FDE360456DE70 PHPS53 H1019
never never NY 155BDC3C0A496C88 PHPS53 H1019R
never never NY 155BDC3F01A2428C PHPS53 H1020R
never never NY 161FDE3B11A2D228 PHPS53 H1021
never never NY 155BDC411863F014 PHPS53 H1021R
never never NY 161FDE3E049D9430 PHPS53 H1022
never never NY 155BDC4409BCCD8C PHPS53 H1022R
never never NY 161FDE4014A1E9D0 PHPS53 H1023
never never NY 155BDC480314DC74 PHPS53 H1023R
never never NY 161FDE4305D95878 PHPS53 H1024
never never NY 155BDC4B07ED0AC0 PHPS53 H1024R
never never NY 161FDE4516C79DE8 PHPS53 H1025
never never NY 155BDC4E09BDAC40 PHPS53 H1025R
never never NY 161FDE48063FDFD8 PHPS53 H1026
never never NY 155BDC5107BFCECC PHPS53 H1026R
never never NY 161FDE4A1851D0F0 PHPS53 H1027
never never NY 155BDC531CFA8FE4 PHPS53 H1027R
never never NY 161FDE4D08209BA8 PHPS53 H1028
never never NY 155BDC5617546790 PHPS53 H1028R
never never NY 161FDE4F18F12778 PHPS53 H1029
never never NY 155BDC5913982694 PHPS53 H1029R
never never NY 161FDE5209BE3CE8 PHPS53 H1031
never never NY 155BDC5D02DA37C0 PHPS53 H1031R
never never NY 161FDE5419B880B8 PHPS53 H1032
never never NY 155BDC6316ADAC4C PHPS53 H1032R
never never NY 161FDE570994B9C0 PHPS53 H1033
never never NY 155BDC6706CC7C10 PHPS53 H1033R
never never NY 161FDE591A8134D0 PHPS53 H1034
never never NY 155BDC6A13A513C4 PHPS53 H1034R
never never NY 161FDE5C09F8D5B8 PHPS53 H1035
never never NY 155BDC6E0AC09784 PHPS53 H1035R
never never NY 161FDE5E1A512EF0 PHPS53 H1036
never never NY 158A85B901EC2828 PHPS53 H1036R
never never NY 16488F5B04F61578 PHPS53 H1037
never never NY 155BDC750E375AA4 PHPS53 H1037R
never never NY 161FDE6401599EF8 PHPS53 H1038
never never NY 155BDC780E52907C PHPS53 H1038R
never never NY 161FDE6611EDBE68 PHPS53 H1039
never never NY 155BDC7B13DFCE04 PHPS53 H1039R
never never NY 161FDE6901AED080 PHPS53 H1040
never never NY 155BDC7E15785B10 PHPS53 H1040R
never never NY 161FDE6B113CCFE8 PHPS53 H1041
never never NY 155BDC820EB9A1D4 PHPS53 H1041R
never never NY 161FDE6E02365EA0 PHPS53 H1042
never never NY 155BDC860BAB9440 PHPS53 H1042R
never never NY 161FDE70156E1E18 PHPS53 H1043
never never NY 155BDC8A000C7508 PHPS53 H1043R
never never NY 161FDE730667E1D8 PHPS53 H1044
never never NY 155BDC8E1AC79150 PHPS53 H1044R
never never NY 161FDE75172311A8 PHPS53 H1046
never never NY 15ACA3D315FD0A1A PHPS53 H1046R
never never NY 161FDE7806709330 PHPS53 H1047
never never NY 155BDC951DD95064 PHPS53 H1047R
never never NY 155BDC9A195F1CAC PHPS53 H1048R
never never NY 161FDE7D0E4EFC90 PHPS53 H1051
never never NY 1584DFBF09E5165C PHPS53 H1051R
never never NY 15816A34079F3880 PHPS53 H1051X
never never NY 161FDE80088551C8 PHPS53 H1056
never never NY 155BDCA117D55598 PHPS53 H1056R
never never NY 161FDE8217CDEF70 PHPS53 H1057
never never NY 155BDCA418814914 PHPS53 H1057R
never never NY 161FECCF00E17C20 PHPS53 H1058
never never NY 155BDCA714AC9E14 PHPS53 H1058R
never never NY 161FECD21DE71C40 PHPS53 H1059
never never NY 155BDCAA1380A8EC PHPS53 H1059R
never never NY 161FECD6066E9C20 PHPS53 H1060
never never NY 155BDCAD061DC944 PHPS53 H1060R
never never NY 161FECD90BE52440 PHPS53 H1061
never never NY 155BDCAF18C672B4 PHPS53 H1061R
never never NY 161FECDC109D7628 PHPS53 H1062
never never NY 155BDCB21F3D7428 PHPS53 H1062R
never never NY 161FECDF1222D330 PHPS53 H1063
never never NY 155BDCB60F133A14 PHPS53 H1063R
never never NY 155BDCB914653080 PHPS53 H1064R
never never NY 161FECE6037780C8 PHPS53 H1065
never never NY 155BDCBC186AAF74 PHPS53 H1065R
never never NY 161FECE90BB44280 PHPS53 H1066
never never NY 155BDCC0084869BC PHPS53 H1066R
never never NY 161FECEC0ED8C648 PHPS53 H1067
never never NY 155BDCC30620BA1C PHPS53 H1067R
never never NY 155BDCC6016F5008 PHPS53 H1068R
never never NY 161FECF209283BE0 PHPS53 H1069
never never NY 155BDCC9044B858C PHPS53 H1069R
never never NY 161FECF50C793EB0 PHPS53 H1071
never never NY 155BDCCC165495DC PHPS53 H1071R
never never NY 15DC641200ECE17C PHPS53 H1071X
never never NY 161FECF810778CA0 PHPS53 H1072
never never NY 155BDCD00B413930 PHPS53 H1072R
never never NY 161FECFB11377B20 PHPS53 H1073
never never NY 155BDCD319CAF2C0 PHPS53 H1073R
never never NY 161FECFE061DB038 PHPS53 H1074
never never NY 155BDCD80F9233BC PHPS53 H1074R
never never NY 161FED00163D3890 PHPS53 H1075
never never NY 155BDCDB0DB3B18C PHPS53 H1075R
never never NY 161FED03136463B0 PHPS53 H1076
never never NY 155BDCDE0B1AA074 PHPS53 H1076R
never never NY 161FED060E434DA0 PHPS53 H1077
never never NY 155BDCE108D7039C PHPS53 H1077R
never never NY 161FED090CEDF588 PHPS53 H1078
never never NY 155BDCE40EFAC860 PHPS53 H1078R
never never NY 161FED0C08C7B388 PHPS53 H1079
never never NY 155BDCE71815C8C0 PHPS53 H1079R
never never NY 161FED0F05C96360 PHPS53 H1080
never never NY 155BDCEA119ABEC4 PHPS53 H1080R
never never NY 161FED12077AFC20 PHPS53 H1081
never never NY 155BDCED03791A08 PHPS53 H1081R
never never NY 161FED150107E628 PHPS53 H1082
never never NY 155BDCF8041D0CAC PHPS53 H1082R
never never NY 161FED171006BFC0 PHPS53 H1083
never never NY 155BDCFA1ABE2414 PHPS53 H1083R
never never NY 161FED191F3194B0 PHPS53 H1084
never never NY 155BDCFD18411260 PHPS53 H1084R
never never NY 155BDD01018C390C PHPS53 H1085R
never never NY 155BDD04195F28CC PHPS53 H1086R
never never NY 161FED210B6F3400 PHPS53 H1087
never never NY 155BDD081B376444 PHPS53 H1087R
never never NY 161FED231E0822F0 PHPS53 H1088
never never NY 155BDD0C153A597C PHPS53 H1088R
never never NY 161FED2617B63710 PHPS53 H1089
never never NY 155BDD1002B4259C PHPS53 H1089R
never never NY 161FED290E6FF710 PHPS53 H1090
never never NY 155BDD1302792958 PHPS53 H1090R
never never NY 161FED2B1D86B130 PHPS53 H1091
never never NY 155BDD16089DAB30 PHPS53 H1091R
never never NY 161FED2E0D091280 PHPS53 H1092
never never NY 155BDD2117BE19B4 PHPS53 H1092R
never never NY 161FED301C4A7DB8 PHPS53 H1093
never never NY 155BDD241BA7FDC4 PHPS53 H1093R
never never NY 161FED330D630468 PHPS53 H1094
never never NY 155BDD271DAF37E0 PHPS53 H1094R
never never NY 161FED351D165ED8 PHPS53 H1095
never never NY 155BDD2B00B83E48 PHPS53 H1095R
never never NY 155BDD2E1017989C PHPS53 H1096R
never never NY 155BDD311042AC38 PHPS53 H1097R
never never NY 161FED3D0C21A228 PHPS53 H1099
never never NY 15A4FD37163C3114 PHPS53 H1099R
never never NY 161FED3F1BAE6B48 PHPS53 H1100
never never NY 1584DFC6136F3DA0 PHPS53 H1100R
never never NY 15816A36033CC6B4 PHPS53 H1100X
never never NY 161FED4219B089C0 PHPS53 H1101
never never NY 1584DFCD05FA4DB4 PHPS53 H1101R
never never NY 15816A370D903F2C PHPS53 H1101X
never never NY 161FED4514635AB8 PHPS53 H1102
never never NY 1584DFD309263C14 PHPS53 H1102R
never never NY 161FED4804361A28 PHPS53 H1112
never never NY 1584DFB60BC66010 PHPS53 H1112R
never never NY 15C483AA06397F0C PHPS53 H1112X
never never NY 155BDD480A63B8F0 PHPS53 H1113R
never never NY 15C8EF841FE89A0C PHPS53 H1113X
never never NY 161FED4D16245178 PHPS53 H1115
never never NY 1566AB81098E9D94 PHPS53 H1115R
never never NY 1583ED1F1E666B9C PHPS53 H1115X2
never never NY 161FED5010DFA3B8 PHPS53 H1116
never never NY 15ACA3DA185219F2 PHPS53 H1116R
never never NY 15A0601E1851EE58 PHPS53 H1116X2
never never NY 161FED5317270668 PHPS53 H1117
never never NY 155BDD5215C47080 PHPS53 H1117R
never never NY 155BDD550B98865C PHPS53 H1118R
never never NY 161FED5816A66898 PHPS53 H1120
never never NY 1588083502F675E0 PHPS53 H1120R
never never NY 161FED5B1081F558 PHPS53 H1121
never never NY 158808391E6D6298 PHPS53 H1121R
never never NY 161FED5E0CAAC940 PHPS53 H1122
never never NY 1588083E0E2B8A58 PHPS53 H1122R
never never NY 161FED610B14E640 PHPS53 H1123
never never NY 15880843067C1C78 PHPS53 H1123R
never never NY 161FED64022752A8 PHPS53 H1124
never never NY 158808480E8A888C PHPS53 H1124R
never never NY 161FED66191DF450 PHPS53 H1125
never never NY 1588084E11535E04 PHPS53 H1125R
never never NY 161FED690F945E90 PHPS53 H1126
never never NY 158808531E5DC988 PHPS53 H1126R
never never NY 161FED6C05601230 PHPS53 H1127
never never NY 158808571B9CC210 PHPS53 H1127R
never never NY 161FED6E1DD2D600 PHPS53 H1128
never never NY 1588085C14B63814 PHPS53 H1128R
never never NY 161FED71158E1C28 PHPS53 H1129
never never NY 158808610ED59A74 PHPS53 H1129R
never never NY 161FED740ADF3B98 PHPS53 H1130
never never NY 158808660480FF9C PHPS53 H1130R
never never NY 161FED77033D7E38 PHPS53 H1131
never never NY 1588086A1F9EAF9C PHPS53 H1131R
never never NY 161FED79198F2E40 PHPS53 H1132
never never NY 1588086F1A327960 PHPS53 H1132R
never never NY 161FED7C0AC87678 PHPS53 H1133
never never NY 158808740F91C07C PHPS53 H1133R
never never NY 161FED7E190C6C40 PHPS53 H1134
never never NY 158808790AF445B8 PHPS53 H1134R
never never NY 161FED8109006C60 PHPS53 H1135
never never NY 1588087E03B881B4 PHPS53 H1135R
never never NY 161FED8317E80110 PHPS53 H1136
never never NY 1588088303BDDDD8 PHPS53 H1136R
never never NY 161FED86063A8180 PHPS53 H1137
never never NY 158808871B5AB230 PHPS53 H1137R
never never NY 161FED881655D160 PHPS53 H1138
never never NY 1597B8020AD0BD9A PHPS53 H1138R
never never NY 161FED8B06039590 PHPS53 H1139
never never NY 158A8DEB02D28CC4 PHPS53 H1139R
never never NY 161FED8D145762C8 PHPS53 H1140
never never NY 15880895102A7A88 PHPS53 H1140R
never never NY 161FED9003DD1C68 PHPS53 H1141
never never NY 1588089916CF1EA0 PHPS53 H1141R
never never NY 161FED9213061778 PHPS53 H1142
never never NY 1588089D0ACC33D0 PHPS53 H1142R
never never NY 161FED9500FEA7F0 PHPS53 H1143
never never NY 158808A11E2F0884 PHPS53 H1143R
never never NY 161FED970EBC5C30 PHPS53 H1144
never never NY 158808A619D7DD2C PHPS53 H1144R
never never NY 161FED991D0D7A38 PHPS53 H1145
never never NY 158808AB105DC8C0 PHPS53 H1145R
never never NY 161FED9C0C731020 PHPS53 H1146
never never NY 158808B00B779D20 PHPS53 H1146R
never never NY 161FED9E1A9B0998 PHPS53 H1147
never never NY 158808B505709F8C PHPS53 H1147R
never never NY 161FEDA10A2B5FC8 PHPS53 H1148
never never NY 158808BA04AE2478 PHPS53 H1148R
never never NY 161FEDA318E185F8 PHPS53 H1149
never never NY 158808BF01838FDC PHPS53 H1149R
never never NY 161FEDA607142670 PHPS53 H1150
never never NY 158808C31D7FCF1C PHPS53 H1150R
never never NY 161FEDB412B59D58 PHPS53 H1151
never never NY 158808C80D365CA8 PHPS53 H1151R
never never NY 161FEDB712319570 PHPS53 H1152
never never NY 158808CC1E10D514 PHPS53 H1152R
never never NY 161FEDBA1023E610 PHPS53 H1153
never never NY 158808D114BF7A60 PHPS53 H1153R
never never NY 161FEDBD06893138 PHPS53 H1154
never never NY 158808D60B439D10 PHPS53 H1154R
never never NY 161FEDBF1DA923B0 PHPS53 H1155
never never NY 158808DA07E4DBF0 PHPS53 H1155R
never never NY 161FEDC21B16A850 PHPS53 H1156
never never NY 158808DF0EDBE740 PHPS53 H1156R
never never NY 161FEDC511668FE8 PHPS53 H1157
never never NY 158808E40E6D543C PHPS53 H1157R
never never NY 161FEDC80E57B7F8 PHPS53 H1158
never never NY 158808E9094D7624 PHPS53 H1158R
never never NY 15A4FCC71DEF06F4 PHPS53 H1159R
never never NY 161FEDCD1DD3DF00 PHPS53 H1160
never never NY 15A4FCCC17DAF046 PHPS53 H1160R
never never NY 15A4FCD015A005C6 PHPS53 H1161R
never never NY 161FEDD30CE85468 PHPS53 H1162
never never NY 15A4FCD414EE74BC PHPS53 H1162R
never never NY 161FEDD6043AADA0 PHPS53 H1163
never never NY 15AC15B60E7E6D46 PHPS53 H1163R
never never NY 161FEDD81BB86000 PHPS53 H1164
never never NY 15AC15BA184D6394 PHPS53 H1164R
never never NY 161FEDDB123E7738 PHPS53 H1165
never never NY 15AC15BE18D5B91A PHPS53 H1165R
never never NY 161FEDDE09A40798 PHPS53 H1166
never never NY 15AC15C21EB803EC PHPS53 H1166R
never never NY 161FEDE1044854B0 PHPS53 H1167
never never NY 15AC15C614AF6C92 PHPS53 H1167R
never never NY 161FEDE31D19E598 PHPS53 H1168
never never NY 15AC15CA1CE5E3EA PHPS53 H1168R
never never NY 161FEDE61B70C198 PHPS53 H1169
never never NY 15AC15CF080B269C PHPS53 H1169R
never never NY 161FEDEA01BC29B8 PHPS53 H1170
never never NY 15AC15D312F51EEE PHPS53 H1170R
never never NY 161FEDEC1FDF4C38 PHPS53 H1171
never never NY 15AC15D811701362 PHPS53 H1171R
never never NY 161FEDEF1963A618 PHPS53 H1172
never never NY 15AC15DD0616B9FA PHPS53 H1172R
never never NY 161FEDF211083818 PHPS53 H1173
never never NY 15AC15E103FD7D98 PHPS53 H1173R
never never NY 161FEDF50CB5DD40 PHPS53 H1174
never never NY 15AC15E5134DBE32 PHPS53 H1174R
never never NY 161FEDF809914D70 PHPS53 H1175
never never NY 15AC161D09607442 PHPS53 H1175R
never never NY 161FEDFA17B6BF10 PHPS53 H1176
never never NY 15AC16220F3514C8 PHPS53 H1176R
never never NY 161FEDFD05AD8F30 PHPS53 H1177
never never NY 15AC1627160FAD56 PHPS53 H1177R
never never NY 161FEDFF13BFF408 PHPS53 H1178
never never NY 15AC162B1E6AA318 PHPS53 H1178R
never never NY 161FEE02021D61E0 PHPS53 H1179
never never NY 15AC1631000EE58C PHPS53 H1179R
never never NY 161FEE04116E3098 PHPS53 H1180
never never NY 15AC163519AC7ACA PHPS53 H1180R
never never NY 161FEE070015F508 PHPS53 H1181
never never NY 15AC163A078833B6 PHPS53 H1181R
never never NY 161FEE090E43D8D0 PHPS53 H1182
never never NY 15AC163E1A204160 PHPS53 H1182R
never never NY 161FEE0B1CD116F8 PHPS53 H1183
never never NY 15AC164311D0EB7C PHPS53 H1183R
never never NY 161FEE0E0A39E4D8 PHPS53 H1184
never never NY 15AC16480B30358C PHPS53 H1184R
never never NY 161FEE1018A76240 PHPS53 H1185
never never NY 15AC164D016D16C2 PHPS53 H1185R
never never NY 161FEE130668A2E0 PHPS53 H1186
never never NY 15AC16520A834990 PHPS53 H1186R
never never NY 161FEE1514913AA0 PHPS53 H1187
never never NY 15AC165719986650 PHPS53 H1187R
never never NY 161FEE1803D9C1A8 PHPS53 H1188
never never NY 15AC165C1ACD812C PHPS53 H1188R
never never NY 161FEE1A1153AE80 PHPS53 H1189
never never NY 15AC166305575FF0 PHPS53 H1189R
never never NY 161FEE1C1F3E3F50 PHPS53 H1190
never never NY 15AC166813C505D4 PHPS53 H1190R
never never NY 161FEE1F0EFADB18 PHPS53 H1191
never never NY 15AC166E06CBF05A PHPS53 H1191R
never never NY 161FEE211C92DAD8 PHPS53 H1192
never never NY 15AC16730BBC53A6 PHPS53 H1192R
never never NY 161FEE240A2EB8C8 PHPS53 H1193
never never NY 15AC1678186FF6C2 PHPS53 H1193R
never never NY 161FEE261885BD78 PHPS53 H1194
never never NY 15AC167D071126E0 PHPS53 H1194R
never never NY 161FEE2909A03CC8 PHPS53 H1195
never never NY 15AC16811084B2BC PHPS53 H1195R
never never NY 161FEE2B199D2C70 PHPS53 H1196
never never NY 15AC1686025898D4 PHPS53 H1196R
never never NY 161FEE2E07E6B948 PHPS53 H1197
never never NY 15AC168A0168C574 PHPS53 H1197R
never never NY 161FEE3015729858 PHPS53 H1198
never never NY 15AC168D154B3C68 PHPS53 H1198R
never never NY 161FEE3303370CC8 PHPS53 H1199
never never NY 15AC1691174F64EE PHPS53 H1199R
never never NY 161FEE35112046E0 PHPS53 H1200
never never NY 15AC169603C5E4D8 PHPS53 H1200R
never never NY 160D1D7D1EE16DB0 PHPS53 HAXPRST
never never NY 15E7709F17E5EDB0 PHPS53 HMCALDB
never never NY 155BBCF304541900 PHPS53 HMCAUDT
never never NY 161D969413D2F020 PHPS53 HMCCFGV
never never NY 157DCAFB0018DB28 PHPS53 HMCCFGX
never never NY 15B60AC21A37C08A PHPS53 HMCCNVSD
never never NY 1648BC9C0A07CBB0 PHPS53 HMCCOS1
never never NY 15C7B6C10BCB2FD8 PHPS53 HMCECR2
never never NY 15C7B6C90CC88A90 PHPS53 HMCECR4
never never NY 15CACE6508736400 PHPS53 HMCECR5
never never NY 15C7B6B0066AD23C PHPS53 HMCECRC
never never NY 15D9BE630DFF1524 PHPS53 HMCERE2
never never NY 15D9BE6915344B80 PHPS53 HMCERE4
never never NY 15D9BE6F0D6D9698 PHPS53 HMCERE5
never never NY 15D9BE521E305188 PHPS53 HMCEREP
never never NY 15220C551C3B6E28 PHPS53 HMCEXP3
never never NY 15CE713C00D20FB8 PHPS53 HMCGSET
never never NY 161F0BE31EED2D30 PHPS53 HMCPRSX
never never NY 1615BD381DA77DA0 PHPS53 HMCPRUP
never never NY 1619587800D60890 PHPS53 HMCPRUS
never never NY 164B90BD1C019430 PHPS53 HMCQRY
never never NY 164B90C806C859B8 PHPS53 HMCQRY2
never never NY 164B90CD10509A64 PHPS53 HMCQRY4
never never NY 164B90D0073EB890 PHPS53 HMCQRY5
never never NY 15C7830702097490 PHPS53 HMCRCR2
never never NY 15C7830E185A6BFC PHPS53 HMCRCR4
never never NY 15C78317061022C4 PHPS53 HMCRCR5
never never NY 15C7832B09628D34 PHPS53 HMCRCRC
never never NY 15D9BE8F1D89B10C PHPS53 HMCRRE2
never never NY 15D9BE9513654C98 PHPS53 HMCRRE4
never never NY 15DA3869101E5928 PHPS53 HMCRRE5
never never NY 15D9BE7C1DE60F88 PHPS53 HMCRREP
never never NY 1639247400924910 PHPS53 HMCSIG3
never never NY 167A381006E54154 PHPS53 HMCSRVR
never never NY 1648701D08505C48 PHPS53 HMCTRAN
never never NY 162D0C2C0A2CAAE0 PHPS53 HMCXRLE
never never NY 15A7C94E1ED22D8E PHPS53 HMPBNDM
never never NY 1608E2520A62D370 PHPS53 HMPBNDR4
never never NY 1631560B086E34A8 PHPS53 HMPDCLG
never never NY 15E76E4709C5C930 PHPS53 HMPFCMP
never never NY 164890B40BD43E58 PHPS53 HMPGCB
never never NY 163155830B285D98 PHPS53 HMPGDDL
never never NY 1631561808A47EF8 PHPS53 HMPGENP
never never NY 15976C280BCB1DB8 PHPS53 HMPGPNL
never never NY 1687224D0F9F5FFC PHPS53 HMPRBDR
never never NY 155BC2A1004D5FD8 PHPS53 HMPSNAM
never never NY 1637EC541E9F2518 PHPS53 HMPUTRN
never never NY 1534BB420D798BC4 PHPS53 RMICKJB
never never NY 155BFD0F07DCE618 PHPS53 RMIPDAD
never never NY 155BFD141D669A04 PHPS53 RMISTAD
never never NY 155BFD1B04E61B4C PHPS53 RMISTUP
never never NY 15811B3A09912CCC PHPS53 SEDTRNS
never never NY 158FBB970661F6C2 PHPS53 STKCLON
never never NY 15CDAB591103C79C PHPSPTA GACOLSN
never never NY 1694C61D0C724B38 PHPSPTA GADRELS
never never NY 1668802F074DA4F8 PHPSPTA GAMI000
never never NY 1565EECE0E5ECAEC PHPSPTA GARD000
never never NY 16A8010F1F82BB8C PHPSPTA GARD001
never never NY 15CDAB0B14D041D8 PHPSPTA GARESET
never never NY 15CA646E06025900 PHPSPTA GCADDE
never never NY 1619079A1575A360 PHPSPTA GCBTOGL
never never NY 1567335819916C94 PHPSPTA GCCOMON
never never NY 1672B0C208EA578C PHPSPTA GCCRC00
never never NY 15AC828B1B14FA6A PHPSPTA GCCRC01
never never NY 155C2C730710AF90 PHPSPTA GCDTTM0
never never NY 163952971CCA9600 PHPSPTA GCEXTAT
never never NY 155C5B4F023B6524 PHPSPTA GCGENID
never never NY 167D65360749F7EC PHPSPTA GCMIGDEL
never never NY 15CA646913B95630 PHPSPTA GCRDENT
never never NY 15A36643030A26FC PHPSPTA GCSTATE
never never NY 15D61F121CE36AD4 PHPSPTA GCSTKCL
never never NY 161907A31F133620 PHPSPTA GCSTMIG
never never NY 167834541B5DDFD8 PHPSPTA GCTMTH
never never NY 164B90F8018FB550 PHPSPTA GCUPDRES
never never NY 1646121C0B2895F0 PHPSPTA GEXP000
never never NY 15F091221E7380D0 PHPSPTA GEXP004
never never NY 1675588010AC1C98 PHPSPTA GIMP000
never never NY 160E07A00A802048 PHPSPTA GLCNVRT
never never NY 1636F6900F9CF270 PHPSPTA GLMP000
never never NY 15D3CC2913ACAD18 PHPSPTA GLXSEER
never never NY 16477D14047A4A48 PHPSPTA GRBNDLK
never never NY 163703A910FAEC78 PHPSPTA GRCLUP
never never NY 15A37FE50D1FAC42 PHPSPTA GRENDV0
never never NY 1621D60F177D3620 PHPSPTA GRINSPT
never never NY 16792BB11F1ADD68 PHPSPTA GRINST0
never never NY 1640B2AB07663A60 PHPSPTA GRPREP0
never never NY 167604A8034D288C PHPSPTA GRRBA00
never never NY 15E1266101283F10 PHPSPTA GRRBA04
never never NY 16394EC31826E248 PHPSPTA GRRPT00
never never NY 165D7F23125F1EB4 PHPSPTA GRRSTAT
never never NY 15D8A92F0CE846C4 PHPSPTA GRSCL
never never NY 163703970628CBD0 PHPSPTA GRSEED0
never never NY 15E147E71374FE70 PHPSPTA GRSEED4
never never NY 155E0A010DFFB18C PHPSPTA GRTBIND
never never NY 1622CCCB0AB717A8 PHPSPTA GRVRF00
never never NY 15B09BB90BE4A7FA PHPSPTA GSELECT
never never NY 15CDABCB034AE0C4 PHPSPTA GTCLUP
never never NY 16506C1D10184988 PHPSPTA GTDELTA
never never NY 163C50741B313FF0 PHPSPTA GTLMC00
never never NY 16714C5E1D492438 PHPSPTA GTREP00
never never NY 16085F6F199251D8 PHPSPTA GTTOGGL
never never NY 15CDABD10526D324 PHPSPTA GUIVRFY
never never NY 16224D7B0623E920 PHPSPTA GUPDENT
never never NY 159772D012BAF9BA PHPSPTA H0001R
never never NY 161FDC4F13D9E0C8 PHPSPTA H0002
never never NY 1592177A0E93E6CC PHPSPTA H0002R
never never NY 161FDC530447AFA0 PHPSPTA H0003
never never NY 1592178B0CC11144 PHPSPTA H0003R
never never NY 161FDC561EE0F568 PHPSPTA H0004
never never NY 1592179502AA646A PHPSPTA H0004R
never never NY 161FDC5A0DD001C8 PHPSPTA H0005
never never NY 1592179E13C5A24A PHPSPTA H0005R
never never NY 161FDC5E05BFA660 PHPSPTA H0006
never never NY 159217A716F3A418 PHPSPTA H0006R
never never NY 161FDC611DF407D8 PHPSPTA H0007
never never NY 159217B30E117928 PHPSPTA H0007R
never never NY 161FDC6510FBC310 PHPSPTA H0008
never never NY 159217BE06C7E0D6 PHPSPTA H0008R
never never NY 161FDC6903CE27A8 PHPSPTA H0009
never never NY 159217C91163DD52 PHPSPTA H0009R
never never NY 159217DB062756C6 PHPSPTA H0010R
never never NY 161FDC701F1DF460 PHPSPTA H0011
never never NY 159217E21F5EC7D4 PHPSPTA H0011R
never never NY 161FDC74110D5A20 PHPSPTA H0012
never never NY 159217E81AAA315E PHPSPTA H0012R
never never NY 161FDC78054EBCC0 PHPSPTA H0013
never never NY 159217ED192039C2 PHPSPTA H0013R
never never NY 159217F3024803CA PHPSPTA H0014R
never never NY 161FDC7E1F0A4CE0 PHPSPTA H0015
never never NY 159217F71E33B7C2 PHPSPTA H0015R
never never NY 161FDC82102BE588 PHPSPTA H0016
never never NY 159217FC1ABC4770 PHPSPTA H0016R
never never NY 161FDC86011E5340 PHPSPTA H0017
never never NY 1592180115AF6AAA PHPSPTA H0017R
never never NY 161FDC890808C648 PHPSPTA H0018
never never NY 159218070F5B49A2 PHPSPTA H0018R
never never NY 161FDC8C165AFDA0 PHPSPTA H0019
never never NY 1592180D15DD3104 PHPSPTA H0019R
never never NY 161FDC90020B3538 PHPSPTA H0020
never never NY 159218121A716D24 PHPSPTA H0020R
never never NY 161FDC9301C14030 PHPSPTA H0021
never never NY 159218180878C04E PHPSPTA H0021R
never never NY 161FDC951F7AFA30 PHPSPTA H0022
never never NY 1592181E1206D3B0 PHPSPTA H0022R
never never NY 161FDC981D3E1888 PHPSPTA H0023
never never NY 159218241A5B697A PHPSPTA H0023R
never never NY 162131100DE991E0 PHPSPTA H0024
never never NY 159DDC1F0F7FE48C PHPSPTA H0024R
never never NY 161FDC9D04DA9598 PHPSPTA H0025
never never NY 15A128E9144D9DB0 PHPSPTA H0025R
never never NY 15B74E511E488132 PHPSPTA H0025X2
never never NY 161FDCA00A715110 PHPSPTA H0026
never never NY 15921837107446C2 PHPSPTA H0026R
never never NY 167C93F7089AEFA8 PHPSPTA H0026X
never never NY 161FDCA3120DF348 PHPSPTA H0033
never never NY 1592183C1EA72A64 PHPSPTA H0033R
never never NY 161FDCA61B3D6DC8 PHPSPTA H0034
never never NY 15921841177E708A PHPSPTA H0034R
never never NY 161FDCA91FC33690 PHPSPTA H0035
never never NY 15A4F3D3070FF4BA PHPSPTA H0035R
never never NY 161FDCAC1BE345B0 PHPSPTA H0038
never never NY 1592184607A905C2 PHPSPTA H0038R
never never NY 161FDCAF1B7E8FE0 PHPSPTA H0039
never never NY 1592184B0673F52E PHPSPTA H0039R
never never NY 161FDCB21FD43D50 PHPSPTA H0040
never never NY 159218510470D8A2 PHPSPTA H0040R
never never NY 161FDCB60366A6C0 PHPSPTA H0041
never never NY 159218560A8916E0 PHPSPTA H0041R
never never NY 161FDCB900C1CD60 PHPSPTA H0042
never never NY 1592185D00F97992 PHPSPTA H0042R
never never NY 161FDCBB1D2EE0C0 PHPSPTA H0043
never never NY 1592186215454FAC PHPSPTA H0043R
never never NY 161FDCBE185DF678 PHPSPTA H0044
never never NY 159218670C601C2A PHPSPTA H0044R
never never NY 161FDCC11949FC10 PHPSPTA H0045
never never NY 1592186D0CF0A2AA PHPSPTA H0045R
never never NY 161FDCC415CF69B0 PHPSPTA H0046
never never NY 159218711902350C PHPSPTA H0046R
never never NY 161FDCC7185307C0 PHPSPTA H0047
never never NY 159218761595AF48 PHPSPTA H0047R
never never NY 161FDCCA15E40568 PHPSPTA H0048
never never NY 1592187B1195DA1E PHPSPTA H0048R
never never NY 161FDD1B0085D010 PHPSPTA H0051
never never NY 1592188203929E42 PHPSPTA H0051R
never never NY 161FDD1E13EF5CE0 PHPSPTA H0052
never never NY 1592188714A465A0 PHPSPTA H0052R
never never NY 161FDD211327A330 PHPSPTA H0053
never never NY 1592188E0B8AB57A PHPSPTA H0053R
never never NY 161FDD24118D4F90 PHPSPTA H0054
never never NY 159218951F95B83A PHPSPTA H0054R
never never NY 161FDD271103FAB8 PHPSPTA H0055
never never NY 1592189E0254FFDC PHPSPTA H0055R
never never NY 161FDD2A0FB47420 PHPSPTA H0056
never never NY 159218A3106628B2 PHPSPTA H0056R
never never NY 161FDD2D0ECC1400 PHPSPTA H0057
never never NY 159218A80E2F55E2 PHPSPTA H0057R
never never NY 161FDD300B2DCD00 PHPSPTA H0058
never never NY 159218AD07A19110 PHPSPTA H0058R
never never NY 161FDD3308997B98 PHPSPTA H0059
never never NY 159218B203F1A084 PHPSPTA H0059R
never never NY 161FDD3606748020 PHPSPTA H0060
never never NY 159218B61A72A7F2 PHPSPTA H0060R
never never NY 161FDD3904B03ED8 PHPSPTA H0061
never never NY 159218BC00186A58 PHPSPTA H0061R
never never NY 161FDD3C0A406260 PHPSPTA H0062
never never NY 159218C107A4E882 PHPSPTA H0062R
never never NY 161FDD3F076CD9E0 PHPSPTA H0063
never never NY 159218C60B4CEFDC PHPSPTA H0063R
never never NY 161FDD4204F18580 PHPSPTA H0065
never never NY 159218CB03D33F32 PHPSPTA H0065R
never never NY 161FDD4503AFE650 PHPSPTA H0066
never never NY 159218D11270681A PHPSPTA H0066R
never never NY 161FDD480A6E4D50 PHPSPTA H0067
never never NY 159218D60D5FA7F4 PHPSPTA H0067R
never never NY 161FDD4B072E2298 PHPSPTA H0068
never never NY 159218DD034C0BF0 PHPSPTA H0068R
never never NY 161FDD4E04A6A770 PHPSPTA H0069
never never NY 159218E3089A4152 PHPSPTA H0069R
never never NY 161FDD5102E9EC98 PHPSPTA H0070
never never NY 159218E914045FE0 PHPSPTA H0070R
never never NY 161FDD54018DCED0 PHPSPTA H0072
never never NY 159218EF0F5CFE42 PHPSPTA H0072R
never never NY 161FDD5706CD9618 PHPSPTA H0074
never never NY 15C5D03D17A5BBD0 PHPSPTA H0074R
never never NY 161FDD5A07589C98 PHPSPTA H0075
never never NY 15C5D0441FAB9554 PHPSPTA H0075R
never never NY 161FDD5D059E7028 PHPSPTA H0076
never never NY 15C5D04B1714C114 PHPSPTA H0076R
never never NY 161FDD6003FA1420 PHPSPTA H0077
never never NY 15C5D0520506A144 PHPSPTA H0077R
never never NY 161FDD63084D1890 PHPSPTA H0078
never never NY 15C5D0581985C1C0 PHPSPTA H0078R
never never NY 161FDD6606059FA8 PHPSPTA H0079
never never NY 15C5D05F0F1622FC PHPSPTA H0079R
never never NY 161FDD6904C8BEC0 PHPSPTA H0080
never never NY 15C5D066153F7284 PHPSPTA H0080R
never never NY 161FDD6C19056CB8 PHPSPTA H0081
never never NY 15C5D06D160BFDE4 PHPSPTA H0081R
never never NY 161FDD701378F7D8 PHPSPTA H0082
never never NY 15C5D07317B389C4 PHPSPTA H0082R
never never NY 161FDD740DECBB50 PHPSPTA H0083
never never NY 15C5D07916CB5BE8 PHPSPTA H0083R
never never NY 161FDD7804B1FEE0 PHPSPTA H0084
never never NY 15C5D080117649A8 PHPSPTA H0084R
never never NY 161FDD7B0FFCED60 PHPSPTA H0085
never never NY 15C5D0861C2B48B8 PHPSPTA H0085R
never never NY 161FDD7E101B8020 PHPSPTA H0090
never never NY 15A4F3DD163BC854 PHPSPTA H0090R
never never NY 161FDD810E6C8958 PHPSPTA H0091
never never NY 15AC14130C6A1E08 PHPSPTA H0091R
never never NY 161FDD840C4EBEA0 PHPSPTA H0092
never never NY 15AC14230D148B26 PHPSPTA H0092R
never never NY 161FDD870A100CB0 PHPSPTA H0093
never never NY 15AC142A1FF41AAC PHPSPTA H0093R
never never NY 161FDD8A082F8718 PHPSPTA H0094
never never NY 15AC14311F137DA4 PHPSPTA H0094R
never never NY 161FDD8D040DD3A0 PHPSPTA H0095
never never NY 15AC143714EAD6AA PHPSPTA H0095R
never never NY 161FDD9001CD64E8 PHPSPTA H0096
never never NY 15AC143F072A5F2C PHPSPTA H0096R
never never NY 161FDD9302367578 PHPSPTA H0097
never never NY 15AC144E1E3BD120 PHPSPTA H0097R
never never NY 161FDD9603377908 PHPSPTA H0098
never never NY 15AC1458149FD8E8 PHPSPTA H0098R
never never NY 161FDD9900A83250 PHPSPTA H0099
never never NY 15AC14600EA43FEE PHPSPTA H0099R
never never NY 161FDD9B1EDC32C0 PHPSPTA H0100
never never NY 15AC146B18A8ACCE PHPSPTA H0100R
never never NY 161FDD9F03D502D0 PHPSPTA H0101
never never NY 15AC147612715F96 PHPSPTA H0101R
never never NY 161FDDA209081A20 PHPSPTA H0102
never never NY 15AC148507D9F45E PHPSPTA H0102R
never never NY 161FDDA50841E560 PHPSPTA H0103
never never NY 15AC29B21813181E PHPSPTA H0103R
never never NY 161FDDA807F72CC0 PHPSPTA H0104
never never NY 15AC149308056456 PHPSPTA H0104R
never never NY 161FDDAB0FFFA0E0 PHPSPTA H0105
never never NY 15AC149F1AC07FA0 PHPSPTA H0105R
never never NY 161FDDAE0FABFFD8 PHPSPTA H0106
never never NY 15AC14AE0591A4BC PHPSPTA H0106R
never never NY 161FDE0D102AA820 PHPSPTA H1001
never never NY 155BDC021B6DB61C PHPSPTA H1001R
never never NY 155BDC071E372DB0 PHPSPTA H1002R
never never NY 161FDE12162AACB8 PHPSPTA H1003
never never NY 155BDC0B0BADD90C PHPSPTA H1003R
never never NY 161FDE1509071AA0 PHPSPTA H1004
never never NY 155BDC0E0F296544 PHPSPTA H1004R
never never NY 161FDE17195FCB58 PHPSPTA H1006
never never NY 155BDC1110CD89B8 PHPSPTA H1006R
never never NY 155BDC1507D7663C PHPSPTA H1007R
never never NY 161FDE1D068027C0 PHPSPTA H1008
never never NY 155BDC181F551708 PHPSPTA H1008R
never never NY 161FDE1F153B0C30 PHPSPTA H1009
never never NY 155BDC1C1E810688 PHPSPTA H1009R
never never NY 155BDC20123C805C PHPSPTA H1010R
never never NY 161FDE2413BF0BA0 PHPSPTA H1012
never never NY 155BDC2413BEE580 PHPSPTA H1012R
never never NY 155BDC281EF4CEA8 PHPSPTA H1013R
never never NY 155BDC2D00D913F0 PHPSPTA H1014R
never never NY 155BDC30171DBA90 PHPSPTA H1015R
never never NY 155BDC331DDCD7F4 PHPSPTA H1016R
never never NY 155BDC361CA05AE0 PHPSPTA H1017R
never never NY 161FDE33151F57B8 PHPSPTA H1018
never never NY 155BDC391241B8E0 PHPSPTA H1018R
never never NY 161FDE360456DE70 PHPSPTA H1019
never never NY 155BDC3C0A496C88 PHPSPTA H1019R
never never NY 155BDC3F01A2428C PHPSPTA H1020R
never never NY 161FDE3B11A2D228 PHPSPTA H1021
never never NY 155BDC411863F014 PHPSPTA H1021R
never never NY 161FDE3E049D9430 PHPSPTA H1022
never never NY 155BDC4409BCCD8C PHPSPTA H1022R
never never NY 161FDE4014A1E9D0 PHPSPTA H1023
never never NY 155BDC480314DC74 PHPSPTA H1023R
never never NY 161FDE4305D95878 PHPSPTA H1024
never never NY 155BDC4B07ED0AC0 PHPSPTA H1024R
never never NY 161FDE4516C79DE8 PHPSPTA H1025
never never NY 155BDC4E09BDAC40 PHPSPTA H1025R
never never NY 161FDE48063FDFD8 PHPSPTA H1026
never never NY 155BDC5107BFCECC PHPSPTA H1026R
never never NY 161FDE4A1851D0F0 PHPSPTA H1027
never never NY 155BDC531CFA8FE4 PHPSPTA H1027R
never never NY 161FDE4D08209BA8 PHPSPTA H1028
never never NY 155BDC5617546790 PHPSPTA H1028R
never never NY 161FDE4F18F12778 PHPSPTA H1029
never never NY 155BDC5913982694 PHPSPTA H1029R
never never NY 161FDE5209BE3CE8 PHPSPTA H1031
never never NY 155BDC5D02DA37C0 PHPSPTA H1031R
never never NY 161FDE5419B880B8 PHPSPTA H1032
never never NY 155BDC6316ADAC4C PHPSPTA H1032R
never never NY 161FDE570994B9C0 PHPSPTA H1033
never never NY 155BDC6706CC7C10 PHPSPTA H1033R
never never NY 161FDE591A8134D0 PHPSPTA H1034
never never NY 155BDC6A13A513C4 PHPSPTA H1034R
never never NY 161FDE5C09F8D5B8 PHPSPTA H1035
never never NY 155BDC6E0AC09784 PHPSPTA H1035R
never never NY 161FDE5E1A512EF0 PHPSPTA H1036
never never NY 158A85B901EC2828 PHPSPTA H1036R
never never NY 16488F5B04F61578 PHPSPTA H1037
never never NY 155BDC750E375AA4 PHPSPTA H1037R
never never NY 161FDE6401599EF8 PHPSPTA H1038
never never NY 155BDC780E52907C PHPSPTA H1038R
never never NY 161FDE6611EDBE68 PHPSPTA H1039
never never NY 155BDC7B13DFCE04 PHPSPTA H1039R
never never NY 161FDE6901AED080 PHPSPTA H1040
never never NY 155BDC7E15785B10 PHPSPTA H1040R
never never NY 161FDE6B113CCFE8 PHPSPTA H1041
never never NY 155BDC820EB9A1D4 PHPSPTA H1041R
never never NY 161FDE6E02365EA0 PHPSPTA H1042
never never NY 155BDC860BAB9440 PHPSPTA H1042R
never never NY 161FDE70156E1E18 PHPSPTA H1043
never never NY 155BDC8A000C7508 PHPSPTA H1043R
never never NY 161FDE730667E1D8 PHPSPTA H1044
never never NY 155BDC8E1AC79150 PHPSPTA H1044R
never never NY 161FDE75172311A8 PHPSPTA H1046
never never NY 15ACA3D315FD0A1A PHPSPTA H1046R
never never NY 161FDE7806709330 PHPSPTA H1047
never never NY 155BDC951DD95064 PHPSPTA H1047R
never never NY 155BDC9A195F1CAC PHPSPTA H1048R
never never NY 161FDE7D0E4EFC90 PHPSPTA H1051
never never NY 1584DFBF09E5165C PHPSPTA H1051R
never never NY 15816A34079F3880 PHPSPTA H1051X
never never NY 161FDE80088551C8 PHPSPTA H1056
never never NY 155BDCA117D55598 PHPSPTA H1056R
never never NY 161FDE8217CDEF70 PHPSPTA H1057
never never NY 155BDCA418814914 PHPSPTA H1057R
never never NY 161FECCF00E17C20 PHPSPTA H1058
never never NY 155BDCA714AC9E14 PHPSPTA H1058R
never never NY 161FECD21DE71C40 PHPSPTA H1059
never never NY 155BDCAA1380A8EC PHPSPTA H1059R
never never NY 161FECD6066E9C20 PHPSPTA H1060
never never NY 155BDCAD061DC944 PHPSPTA H1060R
never never NY 161FECD90BE52440 PHPSPTA H1061
never never NY 155BDCAF18C672B4 PHPSPTA H1061R
never never NY 161FECDC109D7628 PHPSPTA H1062
never never NY 155BDCB21F3D7428 PHPSPTA H1062R
never never NY 161FECDF1222D330 PHPSPTA H1063
never never NY 155BDCB60F133A14 PHPSPTA H1063R
never never NY 155BDCB914653080 PHPSPTA H1064R
never never NY 161FECE6037780C8 PHPSPTA H1065
never never NY 155BDCBC186AAF74 PHPSPTA H1065R
never never NY 161FECE90BB44280 PHPSPTA H1066
never never NY 155BDCC0084869BC PHPSPTA H1066R
never never NY 161FECEC0ED8C648 PHPSPTA H1067
never never NY 155BDCC30620BA1C PHPSPTA H1067R
never never NY 155BDCC6016F5008 PHPSPTA H1068R
never never NY 161FECF209283BE0 PHPSPTA H1069
never never NY 155BDCC9044B858C PHPSPTA H1069R
never never NY 161FECF50C793EB0 PHPSPTA H1071
never never NY 155BDCCC165495DC PHPSPTA H1071R
never never NY 15DC641200ECE17C PHPSPTA H1071X
never never NY 161FECF810778CA0 PHPSPTA H1072
never never NY 155BDCD00B413930 PHPSPTA H1072R
never never NY 161FECFB11377B20 PHPSPTA H1073
never never NY 155BDCD319CAF2C0 PHPSPTA H1073R
never never NY 161FECFE061DB038 PHPSPTA H1074
never never NY 155BDCD80F9233BC PHPSPTA H1074R
never never NY 161FED00163D3890 PHPSPTA H1075
never never NY 155BDCDB0DB3B18C PHPSPTA H1075R
never never NY 161FED03136463B0 PHPSPTA H1076
never never NY 155BDCDE0B1AA074 PHPSPTA H1076R
never never NY 161FED060E434DA0 PHPSPTA H1077
never never NY 155BDCE108D7039C PHPSPTA H1077R
never never NY 161FED090CEDF588 PHPSPTA H1078
never never NY 155BDCE40EFAC860 PHPSPTA H1078R
never never NY 161FED0C08C7B388 PHPSPTA H1079
never never NY 155BDCE71815C8C0 PHPSPTA H1079R
never never NY 161FED0F05C96360 PHPSPTA H1080
never never NY 155BDCEA119ABEC4 PHPSPTA H1080R
never never NY 161FED12077AFC20 PHPSPTA H1081
never never NY 155BDCED03791A08 PHPSPTA H1081R
never never NY 161FED150107E628 PHPSPTA H1082
never never NY 155BDCF8041D0CAC PHPSPTA H1082R
never never NY 161FED171006BFC0 PHPSPTA H1083
never never NY 155BDCFA1ABE2414 PHPSPTA H1083R
never never NY 161FED191F3194B0 PHPSPTA H1084
never never NY 155BDCFD18411260 PHPSPTA H1084R
never never NY 155BDD01018C390C PHPSPTA H1085R
never never NY 155BDD04195F28CC PHPSPTA H1086R
never never NY 161FED210B6F3400 PHPSPTA H1087
never never NY 155BDD081B376444 PHPSPTA H1087R
never never NY 161FED231E0822F0 PHPSPTA H1088
never never NY 155BDD0C153A597C PHPSPTA H1088R
never never NY 161FED2617B63710 PHPSPTA H1089
never never NY 155BDD1002B4259C PHPSPTA H1089R
never never NY 161FED290E6FF710 PHPSPTA H1090
never never NY 155BDD1302792958 PHPSPTA H1090R
never never NY 161FED2B1D86B130 PHPSPTA H1091
never never NY 155BDD16089DAB30 PHPSPTA H1091R
never never NY 161FED2E0D091280 PHPSPTA H1092
never never NY 155BDD2117BE19B4 PHPSPTA H1092R
never never NY 161FED301C4A7DB8 PHPSPTA H1093
never never NY 155BDD241BA7FDC4 PHPSPTA H1093R
never never NY 161FED330D630468 PHPSPTA H1094
never never NY 155BDD271DAF37E0 PHPSPTA H1094R
never never NY 161FED351D165ED8 PHPSPTA H1095
never never NY 155BDD2B00B83E48 PHPSPTA H1095R
never never NY 155BDD2E1017989C PHPSPTA H1096R
never never NY 155BDD311042AC38 PHPSPTA H1097R
never never NY 161FED3D0C21A228 PHPSPTA H1099
never never NY 15A4FD37163C3114 PHPSPTA H1099R
never never NY 161FED3F1BAE6B48 PHPSPTA H1100
never never NY 1584DFC6136F3DA0 PHPSPTA H1100R
never never NY 15816A36033CC6B4 PHPSPTA H1100X
never never NY 161FED4219B089C0 PHPSPTA H1101
never never NY 1584DFCD05FA4DB4 PHPSPTA H1101R
never never NY 15816A370D903F2C PHPSPTA H1101X
never never NY 161FED4514635AB8 PHPSPTA H1102
never never NY 1584DFD309263C14 PHPSPTA H1102R
never never NY 161FED4804361A28 PHPSPTA H1112
never never NY 1584DFB60BC66010 PHPSPTA H1112R
never never NY 15C483AA06397F0C PHPSPTA H1112X
never never NY 155BDD480A63B8F0 PHPSPTA H1113R
never never NY 15C8EF841FE89A0C PHPSPTA H1113X
never never NY 161FED4D16245178 PHPSPTA H1115
never never NY 1566AB81098E9D94 PHPSPTA H1115R
never never NY 1583ED1F1E666B9C PHPSPTA H1115X2
never never NY 161FED5010DFA3B8 PHPSPTA H1116
never never NY 15ACA3DA185219F2 PHPSPTA H1116R
never never NY 15A0601E1851EE58 PHPSPTA H1116X2
never never NY 161FED5317270668 PHPSPTA H1117
never never NY 155BDD5215C47080 PHPSPTA H1117R
never never NY 155BDD550B98865C PHPSPTA H1118R
never never NY 161FED5816A66898 PHPSPTA H1120
never never NY 1588083502F675E0 PHPSPTA H1120R
never never NY 161FED5B1081F558 PHPSPTA H1121
never never NY 158808391E6D6298 PHPSPTA H1121R
never never NY 161FED5E0CAAC940 PHPSPTA H1122
never never NY 1588083E0E2B8A58 PHPSPTA H1122R
never never NY 161FED610B14E640 PHPSPTA H1123
never never NY 15880843067C1C78 PHPSPTA H1123R
never never NY 161FED64022752A8 PHPSPTA H1124
never never NY 158808480E8A888C PHPSPTA H1124R
never never NY 161FED66191DF450 PHPSPTA H1125
never never NY 1588084E11535E04 PHPSPTA H1125R
never never NY 161FED690F945E90 PHPSPTA H1126
never never NY 158808531E5DC988 PHPSPTA H1126R
never never NY 161FED6C05601230 PHPSPTA H1127
never never NY 158808571B9CC210 PHPSPTA H1127R
never never NY 161FED6E1DD2D600 PHPSPTA H1128
never never NY 1588085C14B63814 PHPSPTA H1128R
never never NY 161FED71158E1C28 PHPSPTA H1129
never never NY 158808610ED59A74 PHPSPTA H1129R
never never NY 161FED740ADF3B98 PHPSPTA H1130
never never NY 158808660480FF9C PHPSPTA H1130R
never never NY 161FED77033D7E38 PHPSPTA H1131
never never NY 1588086A1F9EAF9C PHPSPTA H1131R
never never NY 161FED79198F2E40 PHPSPTA H1132
never never NY 1588086F1A327960 PHPSPTA H1132R
never never NY 161FED7C0AC87678 PHPSPTA H1133
never never NY 158808740F91C07C PHPSPTA H1133R
never never NY 161FED7E190C6C40 PHPSPTA H1134
never never NY 158808790AF445B8 PHPSPTA H1134R
never never NY 161FED8109006C60 PHPSPTA H1135
never never NY 1588087E03B881B4 PHPSPTA H1135R
never never NY 161FED8317E80110 PHPSPTA H1136
never never NY 1588088303BDDDD8 PHPSPTA H1136R
never never NY 161FED86063A8180 PHPSPTA H1137
never never NY 158808871B5AB230 PHPSPTA H1137R
never never NY 161FED881655D160 PHPSPTA H1138
never never NY 1597B8020AD0BD9A PHPSPTA H1138R
never never NY 161FED8B06039590 PHPSPTA H1139
never never NY 158A8DEB02D28CC4 PHPSPTA H1139R
never never NY 161FED8D145762C8 PHPSPTA H1140
never never NY 15880895102A7A88 PHPSPTA H1140R
never never NY 161FED9003DD1C68 PHPSPTA H1141
never never NY 1588089916CF1EA0 PHPSPTA H1141R
never never NY 161FED9213061778 PHPSPTA H1142
never never NY 1588089D0ACC33D0 PHPSPTA H1142R
never never NY 161FED9500FEA7F0 PHPSPTA H1143
never never NY 158808A11E2F0884 PHPSPTA H1143R
never never NY 161FED970EBC5C30 PHPSPTA H1144
never never NY 158808A619D7DD2C PHPSPTA H1144R
never never NY 161FED991D0D7A38 PHPSPTA H1145
never never NY 158808AB105DC8C0 PHPSPTA H1145R
never never NY 161FED9C0C731020 PHPSPTA H1146
never never NY 158808B00B779D20 PHPSPTA H1146R
never never NY 161FED9E1A9B0998 PHPSPTA H1147
never never NY 158808B505709F8C PHPSPTA H1147R
never never NY 161FEDA10A2B5FC8 PHPSPTA H1148
never never NY 158808BA04AE2478 PHPSPTA H1148R
never never NY 161FEDA318E185F8 PHPSPTA H1149
never never NY 158808BF01838FDC PHPSPTA H1149R
never never NY 161FEDA607142670 PHPSPTA H1150
never never NY 158808C31D7FCF1C PHPSPTA H1150R
never never NY 161FEDB412B59D58 PHPSPTA H1151
never never NY 158808C80D365CA8 PHPSPTA H1151R
never never NY 161FEDB712319570 PHPSPTA H1152
never never NY 158808CC1E10D514 PHPSPTA H1152R
never never NY 161FEDBA1023E610 PHPSPTA H1153
never never NY 158808D114BF7A60 PHPSPTA H1153R
never never NY 161FEDBD06893138 PHPSPTA H1154
never never NY 158808D60B439D10 PHPSPTA H1154R
never never NY 161FEDBF1DA923B0 PHPSPTA H1155
never never NY 158808DA07E4DBF0 PHPSPTA H1155R
never never NY 161FEDC21B16A850 PHPSPTA H1156
never never NY 158808DF0EDBE740 PHPSPTA H1156R
never never NY 161FEDC511668FE8 PHPSPTA H1157
never never NY 158808E40E6D543C PHPSPTA H1157R
never never NY 161FEDC80E57B7F8 PHPSPTA H1158
never never NY 158808E9094D7624 PHPSPTA H1158R
never never NY 15A4FCC71DEF06F4 PHPSPTA H1159R
never never NY 161FEDCD1DD3DF00 PHPSPTA H1160
never never NY 15A4FCCC17DAF046 PHPSPTA H1160R
never never NY 15A4FCD015A005C6 PHPSPTA H1161R
never never NY 161FEDD30CE85468 PHPSPTA H1162
never never NY 15A4FCD414EE74BC PHPSPTA H1162R
never never NY 161FEDD6043AADA0 PHPSPTA H1163
never never NY 15AC15B60E7E6D46 PHPSPTA H1163R
never never NY 161FEDD81BB86000 PHPSPTA H1164
never never NY 15AC15BA184D6394 PHPSPTA H1164R
never never NY 161FEDDB123E7738 PHPSPTA H1165
never never NY 15AC15BE18D5B91A PHPSPTA H1165R
never never NY 161FEDDE09A40798 PHPSPTA H1166
never never NY 15AC15C21EB803EC PHPSPTA H1166R
never never NY 161FEDE1044854B0 PHPSPTA H1167
never never NY 15AC15C614AF6C92 PHPSPTA H1167R
never never NY 161FEDE31D19E598 PHPSPTA H1168
never never NY 15AC15CA1CE5E3EA PHPSPTA H1168R
never never NY 161FEDE61B70C198 PHPSPTA H1169
never never NY 15AC15CF080B269C PHPSPTA H1169R
never never NY 161FEDEA01BC29B8 PHPSPTA H1170
never never NY 15AC15D312F51EEE PHPSPTA H1170R
never never NY 161FEDEC1FDF4C38 PHPSPTA H1171
never never NY 15AC15D811701362 PHPSPTA H1171R
never never NY 161FEDEF1963A618 PHPSPTA H1172
never never NY 15AC15DD0616B9FA PHPSPTA H1172R
never never NY 161FEDF211083818 PHPSPTA H1173
never never NY 15AC15E103FD7D98 PHPSPTA H1173R
never never NY 161FEDF50CB5DD40 PHPSPTA H1174
never never NY 15AC15E5134DBE32 PHPSPTA H1174R
never never NY 161FEDF809914D70 PHPSPTA H1175
never never NY 15AC161D09607442 PHPSPTA H1175R
never never NY 161FEDFA17B6BF10 PHPSPTA H1176
never never NY 15AC16220F3514C8 PHPSPTA H1176R
never never NY 161FEDFD05AD8F30 PHPSPTA H1177
never never NY 15AC1627160FAD56 PHPSPTA H1177R
never never NY 161FEDFF13BFF408 PHPSPTA H1178
never never NY 15AC162B1E6AA318 PHPSPTA H1178R
never never NY 161FEE02021D61E0 PHPSPTA H1179
never never NY 15AC1631000EE58C PHPSPTA H1179R
never never NY 161FEE04116E3098 PHPSPTA H1180
never never NY 15AC163519AC7ACA PHPSPTA H1180R
never never NY 161FEE070015F508 PHPSPTA H1181
never never NY 15AC163A078833B6 PHPSPTA H1181R
never never NY 161FEE090E43D8D0 PHPSPTA H1182
never never NY 15AC163E1A204160 PHPSPTA H1182R
never never NY 161FEE0B1CD116F8 PHPSPTA H1183
never never NY 15AC164311D0EB7C PHPSPTA H1183R
never never NY 161FEE0E0A39E4D8 PHPSPTA H1184
never never NY 15AC16480B30358C PHPSPTA H1184R
never never NY 161FEE1018A76240 PHPSPTA H1185
never never NY 15AC164D016D16C2 PHPSPTA H1185R
never never NY 161FEE130668A2E0 PHPSPTA H1186
never never NY 15AC16520A834990 PHPSPTA H1186R
never never NY 161FEE1514913AA0 PHPSPTA H1187
never never NY 15AC165719986650 PHPSPTA H1187R
never never NY 161FEE1803D9C1A8 PHPSPTA H1188
never never NY 15AC165C1ACD812C PHPSPTA H1188R
never never NY 161FEE1A1153AE80 PHPSPTA H1189
never never NY 15AC166305575FF0 PHPSPTA H1189R
never never NY 161FEE1C1F3E3F50 PHPSPTA H1190
never never NY 15AC166813C505D4 PHPSPTA H1190R
never never NY 161FEE1F0EFADB18 PHPSPTA H1191
never never NY 15AC166E06CBF05A PHPSPTA H1191R
never never NY 161FEE211C92DAD8 PHPSPTA H1192
never never NY 15AC16730BBC53A6 PHPSPTA H1192R
never never NY 161FEE240A2EB8C8 PHPSPTA H1193
never never NY 15AC1678186FF6C2 PHPSPTA H1193R
never never NY 161FEE261885BD78 PHPSPTA H1194
never never NY 15AC167D071126E0 PHPSPTA H1194R
never never NY 161FEE2909A03CC8 PHPSPTA H1195
never never NY 15AC16811084B2BC PHPSPTA H1195R
never never NY 161FEE2B199D2C70 PHPSPTA H1196
never never NY 15AC1686025898D4 PHPSPTA H1196R
never never NY 161FEE2E07E6B948 PHPSPTA H1197
never never NY 15AC168A0168C574 PHPSPTA H1197R
never never NY 161FEE3015729858 PHPSPTA H1198
never never NY 15AC168D154B3C68 PHPSPTA H1198R
never never NY 161FEE3303370CC8 PHPSPTA H1199
never never NY 15AC1691174F64EE PHPSPTA H1199R
never never NY 161FEE35112046E0 PHPSPTA H1200
never never NY 15AC169603C5E4D8 PHPSPTA H1200R
never never NY 160D1D7D1EE16DB0 PHPSPTA HAXPRST
never never NY 15E7709F17E5EDB0 PHPSPTA HMCALDB
never never NY 155BBCF304541900 PHPSPTA HMCAUDT
never never NY 161D969413D2F020 PHPSPTA HMCCFGV
never never NY 157DCAFB0018DB28 PHPSPTA HMCCFGX
never never NY 15B60AC21A37C08A PHPSPTA HMCCNVSD
never never NY 1648BC9C0A07CBB0 PHPSPTA HMCCOS1
never never NY 15C7B6C10BCB2FD8 PHPSPTA HMCECR2
never never NY 15C7B6C90CC88A90 PHPSPTA HMCECR4
never never NY 15CACE6508736400 PHPSPTA HMCECR5
never never NY 15C7B6B0066AD23C PHPSPTA HMCECRC
never never NY 15D9BE630DFF1524 PHPSPTA HMCERE2
never never NY 15D9BE6915344B80 PHPSPTA HMCERE4
never never NY 15D9BE6F0D6D9698 PHPSPTA HMCERE5
never never NY 15D9BE521E305188 PHPSPTA HMCEREP
never never NY 15220C551C3B6E28 PHPSPTA HMCEXP3
never never NY 15CE713C00D20FB8 PHPSPTA HMCGSET
never never NY 161F0BE31EED2D30 PHPSPTA HMCPRSX
never never NY 1615BD381DA77DA0 PHPSPTA HMCPRUP
never never NY 1619587800D60890 PHPSPTA HMCPRUS
never never NY 164B90BD1C019430 PHPSPTA HMCQRY
never never NY 164B90C806C859B8 PHPSPTA HMCQRY2
never never NY 164B90CD10509A64 PHPSPTA HMCQRY4
never never NY 164B90D0073EB890 PHPSPTA HMCQRY5
never never NY 15C7830702097490 PHPSPTA HMCRCR2
never never NY 15C7830E185A6BFC PHPSPTA HMCRCR4
never never NY 15C78317061022C4 PHPSPTA HMCRCR5
never never NY 15C7832B09628D34 PHPSPTA HMCRCRC
never never NY 15D9BE8F1D89B10C PHPSPTA HMCRRE2
never never NY 15D9BE9513654C98 PHPSPTA HMCRRE4
never never NY 15DA3869101E5928 PHPSPTA HMCRRE5
never never NY 15D9BE7C1DE60F88 PHPSPTA HMCRREP
never never NY 1639247400924910 PHPSPTA HMCSIG3
never never NY 167A381006E54154 PHPSPTA HMCSRVR
never never NY 1648701D08505C48 PHPSPTA HMCTRAN
never never NY 162D0C2C0A2CAAE0 PHPSPTA HMCXRLE
never never NY 15A7C94E1ED22D8E PHPSPTA HMPBNDM
never never NY 1608E2520A62D370 PHPSPTA HMPBNDR4
never never NY 1631560B086E34A8 PHPSPTA HMPDCLG
never never NY 15E76E4709C5C930 PHPSPTA HMPFCMP
never never NY 164890B40BD43E58 PHPSPTA HMPGCB
never never NY 163155830B285D98 PHPSPTA HMPGDDL
never never NY 1631561808A47EF8 PHPSPTA HMPGENP
never never NY 15976C280BCB1DB8 PHPSPTA HMPGPNL
never never NY 1687224D0F9F5FFC PHPSPTA HMPRBDR
never never NY 155BC2A1004D5FD8 PHPSPTA HMPSNAM
never never NY 1637EC541E9F2518 PHPSPTA HMPUTRN
never never NY 1534BB420D798BC4 PHPSPTA RMICKJB
never never NY 155BFD0F07DCE618 PHPSPTA RMIPDAD
never never NY 155BFD141D669A04 PHPSPTA RMISTAD
never never NY 155BFD1B04E61B4C PHPSPTA RMISTUP
never never NY 15811B3A09912CCC PHPSPTA SEDTRNS
never never NY 158FBB970661F6C2 PHPSPTA STKCLON
never never NY 15D80C3E18F94D23 PI PI5330 19970602171837S101702A064346
never never NY 15E49AD60E0E501A PI PI5330 19970821145248S101702A066132
never never NY 15E7E7F31F8400F2 PI PI5330 19970911145900S101702M000825
never never NY 15F37FEF1A624D38 PI PI9180 19971124092916S101702Z346248
never never NY 15F383AA0CCB743C PI PI9180 19971124114227S101702Z346248
never never NY 15F384B90AFA1C10 PI PI9180 19971124122047S101702Z346248
never never NY 1576DF591B11FAFA PI PT5310 19950923S101702Z209544APT531
never never NY 160522321585D6B6 PI PT5310 19980316142018S101702A071106
never never NY 1605231506D029A8 PI PT5310 19980316145200S101702A071106
never never NY 160524D602F7E70C PI PT5310 19980316155305S101702A071106
never never NY 15769B300BFD6A92 PI PT5500 19950921S101702Z209344APT550
never never NY 15769BDD0A003F54 PI PT5500 19950921S101702Z209353APT550
never never NY 15769CA51A09D4D6 PI PT5500 19950921S101702Z209365APT550
never never NY 1576E23612C24274 PI PT5500 19950923S101702Z209547APT550
never never NY 1576E34212AD1454 PI PT5500 19950923S101702Z209549APT550
never never NY 1576E4AE10DB0846 PI PT5500 19950923S101702Z209554APT550
never never NY 160522471FE39FB6 PI PT5500 19980316142018S101702A071106
never never NY 16052321065E4F8A PI PT5500 19980316145200S101702A071106
never never NY 160524D40C0ACCDE PI PT5500 19980316155306S101702A071106
never never NY 17CBED730FCDA14B PR PR0700I PMRT00003856C451BC
never never NY 17D28B271FAFF6EE PR PR0700I PMRT00004756FBDF9D
never never NY 17CBED7504865065 PR PR0730I PMRT00003856C451C9
never never NY 17D28B290707B4B6 PR PR0730I PMRT00004756FBDFA6
never never NY 1700981E0C5A22E0 PSSSICH PSSCSQL V4000
never never NY 1576C95000BB4872 PT PT5310 19950922S101702Z209539APT531
never never NY 1576DF591B11FAFA PT PT5310 19950923S101702Z209544APT531
never never NY 160522321585D6B6 PT PT5310 19980316142018S101702A071106
never never NY 1605231506D029A8 PT PT5310 19980316145200S101702A071106
never never NY 160524D602F7E70C PT PT5310 19980316155305S101702A071106
never never NY 15E7E7C7158A3702 PT PT5440 19970911145557S101702M000825
never never NY 15F0B4EB1937796C PT PT5440 19971106145743S101702A067886
never never NY 15769A9E11F1BCB4 PT PT5500 19950921S101702Z209329APT550
never never NY 15769B300BFD6A92 PT PT5500 19950921S101702Z209344APT550
never never NY 15769BDD0A003F54 PT PT5500 19950921S101702Z209353APT550
never never NY 15769CA51A09D4D6 PT PT5500 19950921S101702Z209365APT550
never never NY 1576E0100F2EAFEC PT PT5500 19950923S101702Z209545APT550
never never NY 1576E0C60DF3B43C PT PT5500 19950923S101702Z209546APT550
never never NY 1576E23612C24274 PT PT5500 19950923S101702Z209547APT550
never never NY 1576E2CF001CFF64 PT PT5500 19950923S101702Z209548APT550
never never NY 1576E34212AD1454 PT PT5500 19950923S101702Z209549APT550
never never NY 1576E3A9166DCD96 PT PT5500 19950923S101702Z209550APT550
never never NY 1576E4311B55E77A PT PT5500 19950923S101702Z209551APT550
never never NY 1576E4AE10DB0846 PT PT5500 19950923S101702Z209554APT550
never never NY 158442EC1671AB8C PT PT5500 19951217S101702Z225217APT550
never never NY 1584EC800C7CD4C6 PT PT5500 19951221S101702Z226191APT550
never never NY 160522471FE39FB6 PT PT5500 19980316142018S101702A071106
never never NY 16052321065E4F8A PT PT5500 19980316145200S101702A071106
never never NY 160524D40C0ACCDE PT PT5500 19980316155306S101702A071106
never never NY 15E7E7ED0B68575C PT PT5510 19970911145559S101702M000825
never never NY 15F427070ACF74D8 PT PT5510 19971128130923S101702Z347739
never never NY 15F74F061D9C512C PT PT5510 19971218150836S101702A069263
never never NY 15F51E1F0353ADD0 PT PT8060 19971204163212S101702M000828
never never NY 160C314A07BB75F6 PT PT8490 19980430141812S101702A072050
never never NY 15FCCEB0130AE135 PT PT8500 19980122145053S101702A069863
never never NY 1576BE1A12EFE12A PT PT8520 19950922S101702Z209475APT852
never never NY 1576E4A202F8FA54 PT PT8520 19950923S101702Z209553APT852
never never NY 158B34781F8F67CE PT PT8520 19960130S101702Z232085APT852
never never NY 15A06492075EA8E0 PT PT8520 19960613141320S101702M000695
never never NY 15BF57A913832FA4 PT PT8520 19961227123142S101702M000758
never never NY 160E649B1FE921CC PT PT8550 19980514142122S101702A072418
never never NY 15D2FAFE11AC610A PT PT8640 19970501112819S101702Z309494
never never NY 15D78DA70F21A16F PT PT8640 19970530134806S101702Z313782
never never NY 15DBCB591EF53862 PT PT8640 19970626132656S101702A064909
never never NY 15BFFB821DCDEEE4 PT PT8650 19961231141731S101702Z286711
never never NY 15C073AE08615E2C PT PT8650 19970103135840S101702Z287197
never never NY 15C4DC300D0FCCC6 PT PT8650 19970131150927S101702A061364
never never NY 15D3025C05BF972C PT PT8660 19970501155240S101702Z309514
never never NY 15D78DCB12589A5F PT PT8660 19970530135311S101702Z313785
never never NY 15DBCB5810DC9F80 PT PT8660 19970626132652S101702A064909
never never NY 15B7A6CD0776D948 PT YPTBAK 19961108140520S101702Z275952
never never NY 15B82E3118A4DB0C PT YPTBAK 19961111225045S101702Z276501
never never NY 15B82F0A10C29FC2 PT YPTBAK 19961111232114S101702Z276502
never never NY 15B84E911770ABC6 PT YPTBAK 19961112180917S101702Z276858
never never NY 15B85D13076AB4CA PT YPTBAK 19961113024850S101702Z276869
never never NY 15B8BB991E5F6618 PT YPTBAK 19961115111205S101702A058611
never never NY 15C00D9B0E244E32 PT YPTBAK 19970101010523S101702Z286736
never never NY 15C4DC1D0F2561BC PT YPTBAK 19970131150650S101702A061364
never never NY 15C52C0E0C29018E PT YPTBAK 19970202144825S101702Z294216
never never NY 15C69716081FC1C2 PT YPTBAK 19970211152131S101702Z295652
never never NY 15C96D8410280334 PT YPTBAK 19970301164109S101702Z298905
never never NY 15CD838B169BBC14 PT YPTBAK 19970327164021S101702Z303850
never never NY 15D2DB0F0D9D6E96 PT YPTBAK 19970430162533S101702Z309430
never never NY 15D78D8E074A916E PT YPTBAK 19970530134436S101702Z313781
never never NY 15DBCB4E1A2B4AE2 PT YPTBAK 19970626132441S101702A064909
never never NY 15DCB9E00B9F9790 PT YPTBAK 19970702114347S101702Z319299
never never NY 15DE006704E8B1CB PT YPTBAK 19970710143049S101702A065152
never never NY 15E266B9028DEDE0 PT YPTBAK 19970807142356S101702A065756
never never NY 15E49AEF0B921EAA PT YPTBAK 19970821145703S101702A066147
never never NY 15E8FEE61BDA43D6 PT YPTBAK 19970918132513S101702A066834
never never NY 15EBCE4414357C32 PT YPTBAK 19971006103232S101702Z337756
never never NY 15EE8182170E3CB8 PT YPTBAK 19971023145209S101702A067699
never never NY 15F40132187C72CA PT YPTBAK 19971127143521S101702A068552
never never NY 15FABB5101948028 PT YPTBAK 19980109095256S101702Z354315
never never NY 15FCCF2A0295BF06 PT YPTBAK 19980122150833S101702A069955
never never NY 160F563E0D279370 PT YPTBAK 19980520142938S101702A072384
never never NY 161190060C42EFEC PT YPTBAK 19980603182259S101702Z377284
never never NY 1612CAF000AC8EE2 PT YPTBAK 19980611141330S101702A072986
never never NY 1616BD80170F59EC PT YPTBAK 19980706170353S101702Z382086
never never NY 15B7A6CD1C5235AE PT YPTBER 19961108140519S101702Z275952
never never NY 15B84E9116D6F49E PT YPTBER 19961112180916S101702Z276858
never never NY 15B8BB991C01C330 PT YPTBER 19961115111204S101702A058611
never never NY 15C4DC1C0C27ABAC PT YPTBER 19970131150649S101702A061364
never never NY 15C52C0204C2AD20 PT YPTBER 19970202144632S101702Z294215
never never NY 15C96D840C52C4D8 PT YPTBER 19970301164107S101702Z298905
never never NY 15CD838B14670644 PT YPTBER 19970327164021S101702Z303850
never never NY 15D2DB0F0C4EF8EA PT YPTBER 19970430162531S101702Z309430
never never NY 15D78D8E05A65FE3 PT YPTBER 19970530134435S101702Z313781
never never NY 15DCB9E004319F82 PT YPTBER 19970702114345S101702Z319299
never never NY 15DE00680AEC1396 PT YPTBER 19970710143019S101702A065152
never never NY 15E8FEE519C2BED6 PT YPTBER 19970918132507S101702A066834
never never NY 15EBCE44117D78EE PT YPTBER 19971006103226S101702Z337756
never never NY 15EE81810DB0104A PT YPTBER 19971023145207S101702A067699
never never NY 15F4012F1C28123A PT YPTBER 19971127143518S101702A068552
never never NY 15FABB51020CF0D2 PT YPTBER 19980109095255S101702Z354315
never never NY 15FCCF281C6740C4 PT YPTBER 19980122150832S101702A069955
never never NY 15B7A6CD019CE8F6 PT YPTBZAC 19961108140519S101702Z27595
never never NY 15B84E9116F18FA4 PT YPTBZAC 19961112180917S101702Z27685
never never NY 15B85D121A7FB7E0 PT YPTBZAC 19961113024849S101702Z27686
never never NY 15B8BB991BF2DE38 PT YPTBZAC 19961115111204S101702A05861
never never NY 15C96D840C475B1A PT YPTBZAC 19970301164109S101702Z29890
never never NY 15CD838B1656C8C6 PT YPTBZAC 19970327164021S101702Z30385
never never NY 15D2DB0F0D384228 PT YPTBZAC 19970430162532S101702Z30943
never never NY 15D78D91182C4DF2 PT YPTBZAC 19970530134435S101702Z31378
never never NY 15DBCB4D17199AE6 PT YPTBZAC 19970626132432S101702A06490
never never NY 15DCB9E007B1B9A4 PT YPTBZAC 19970702114346S101702Z31929
never never NY 15DE00670F7BC36C PT YPTBZAC 19970710143026S101702A06515
never never NY 15E8FEE502A4428C PT YPTBZAC 19970918132511S101702A06683
never never NY 15EBCE4410B183F8 PT YPTBZAC 19971006103230S101702Z33775
never never NY 15EE81810DB15824 PT YPTBZAC 19971023145208S101702A06769
never never NY 15F4012E0ACB83CC PT YPTBZAC 19971127143519S101702A06855
never never NY 1579E3C114C9C4E6 PT YYPTM12 19951012S101702A048386AYYPT
never never NY 180096D90561FF68 PU PU7334 JCLB000014
never never NY 181558C31EE2F0FE PU PU7334 JCLB000021
never never NY 15A05CEC1F5D6F70 PUPG53 HMCCNVI1
never never NY 15C7873D10990614 PUPG53 HMCCNVK
never never NY 15A043920A5B4270 PUPG53 HMCCNVK2
never never NY 15A0441013B493C2 PUPG53 HMCCNVS2
never never NY 15A043970D3DA93A PUPG53 HMCCNVS3
never never NY 15A0439C01514B04 PUPG53 HMCCNVT2
never never NY 15A043A6113CBE56 PUPG53 HMCCNVT3
never never NY 158A43471504A084 PUPG53 HMCCNVTE
never never NY 158A434C1B384D44 PUPG53 HMCCNVTR
never never NN 16805BE6195D3018 PV A5PO058 2000-05-08-16.07.25.035712
never never NN 166B99D109A58BB0 PV B5POCNTL 1999-12-28-14.08.56.649262
never never NN 169C03F101441E35 PV YPV760B A18Q000770
never never NY 18321A571A3F36F0 RB YRBUXY1 RBK00000185A1D6D88MVS
never never NY 1541CE631AF17F42 RE RE7520 19941020175514S101702M000502
never never NY 154631F5182A2E0E RE RE7520 19941117161042S101702A039244
never never NY 15684C181296326C RE RE7580 19950622S101702A045483ARE758
never never NY 15C708760367E16A RE RE7580 19970214105944S101702A061587
never never NY 15C709581E10A430 RE RE7580 19970214112718S101702A061587
never never NY 1596804A1E8F8F38 RE RE8020 19960411154156S101702A052875
never never NY 15EC1BA406523798 RE RE9930 19971008084159S101702Z338162
never never NY 152BD19507F98B48 RE YREDAT 19940602200603S101702A034743
never never NY 152BEFE81D72F7E8 RE YREDAT 19940603141908S101702A034743
never never NY 1560964D1177A128 RK RK2320 19950504142910S101702A043469
never never NY 15C5CF4E037AD228 RK RK2320 19970206160943S101702A061306
never never NY 1560964F070B41CA RK RK2330 19950504142915S101702A043469
never never NY 15693C640D8F84BA RK RK2330 19950628151450S101702Z197041
never never NY 156A7E220F1A5F38 RK RK2330 19950706150906S101702A045904
never never NY 155C63740F70936C RK RK2340 19950407211920S101702Z184804
never never NY 1560965113E43822 RK RK2340 19950504142921S101702A043469
never never NY 1560964A0C2536A6 RK RK2350 19950504142834S101702A043469
never never NY 155C637F1C17F0D6 RK RK2360 19950407212049S101702Z184806
never never NY 1560964C08BA9EEA RK RK2360 19950504142837S101702A043469
never never NY 1560964D035B52D6 RK RK2380 19950504142840S101702A043469
never never NY 15C5CF4704B2065C RK RK2380 19970206160944S101702A061306
never never NY 15609650104F5002 RK RK2390 19950504142842S101702A043469
never never NY 159F4A220FC79D18 RK RK2390 19960606134538S101702A053734
never never NY 15C5CF51133C7EEE RK RK2390 19970206160944S101702A061306
never never NY 1560964C1FB33A24 RK RK2400 19950504142846S101702A043469
never never NY 15C5CF4B03B35654 RK RK2400 19970206160942S101702A061306
never never NY 1560964F0808E5D8 RK RK2410 19950504142854S101702A043469
never never NY 15C7FD8E090E0BE6 RK RK2410 19970220131049S101702A061871
never never NY 1560964C007FB3A0 RK RK2420 19950504142901S101702A043469
never never NY 15C7FD8E08C284A6 RK RK2420 19970220131051S101702A061871
never never NY 17C9963D0E9D1A7E RM RM7190 PARS000047
never never NY 17D2894B199C042A RM RM7210 PARS000056
never never NY 17C9B5381AAAEB8E RM RM7220 PARS000047
never never NY 17D324D60428A15D RM RM7220 PARS000054
never never NY 17CAA7F607B9CEF4 RM RM7280 PARS000047
never never NY 17D5FDA602DF8199 RM RM7280 PARS000054
never never NY 17C89C9B020D8DEF RM RM7930 PARS000047
never never NY 1558E31601BCB286 RM RM9020 19950316S101702A042838ARM902
never never NY 160C31380C0F6DE6 RM RM9200 19980430141653S101702A072046
never never NN 15F064461C73D05C RM RP7980 19971104145142S101702Z343279
never never NY 17C9714F0337B8C7 RM YRM0760 PARS00005056AF7949
never never NY 17D32906023E38B4 RM YRM0760 PARS00005557010BE4
never never NY 17C96F7C11174A32 RM YRM2670 PARS00004756AF6A14
never never NY 17D2B6E407337802 RM YRM2670 PARS00005456FD4E7D
never never NY 17C96F7C1C6EEBB2 RM YRM2680 PARS00004756AF6A17
never never NY 17D2B6E41578F6C5 RM YRM2680 PARS00005456FD4E81
never never NY 17C0C2730EC08811 RM YRMR025 PARS0000505666A2A0
never never NY 17C0C278086E5C7B RM YRMR075 PARS0000505666A2CB
never never NY 17C0C29403353CFA RM YRMR11O PARS0000505666A3C3
never never NY 15B7586006DB759E RP RP5100 19961106151732S101702A058507
never never NY 15EB160816FC0FA2 RP RP5100 19971001203824S101702Z336777
never never NY 15FA26431BD0E24C RP RP5100 19980105165723S101702A069490
never never YY 158E6676037C60AE RP RP5340 19960220023552S101702A052154
never never NY 15A4508F0E546484 RP RP5660 19960708130856S101702A055658
never never NY 15A5C13D0983C2F0 RP RP5660 19960717170432S101702A055989
never never NY 15524A961D6A6342 RP RP7000 19950202152307S101702A041708
never never NY 156855601385D216 RP RP7000 19950622S101702A045509ARP700
never never NY 15684D520C7715DA RP RP7000 19950622S101702M000595ARP700
never never YY 158E638309BED4C0 RP RP7060 19960220004831S101702A052153
never never YY 158EF5E70AD865D6 RP RP7060 19960223160835S101702A052289
never never YY 1593FFE80F5B4CC2 RP RP7060 19960326173958S101702A053072
never never NY 1591F5B90E3EAA7C RP RP7280 19960313181104S101702Z238416
never never NY 159CC1B012AC5782 RP RP7280 19960521105717S101702Z249265
never never NY 156A05721234D83A RP RP7290 19950703S101702Z197678ARP729
never never NY 158978CF1E507F2A RP RP7290 19960119S101702A051340ARP729
never never NY 15FA26490972FC56 RP RP7960 19980105165721S101702A069490
never never NY 15FD730A0F63120C RP RP7960 19980126165347S101702A070032
never never NY 15BCB55C03922F5E RP RP9010 19961210181748S101702A059742
never never NY 15C3776601054A7C RP RP9010 19970122181857S101702A061163
never never NY 15D19D32145B0FEC RP RP9010 19970422184816S101702A063443
never never NY 15763B151F831328 RR RR0010 19950919S101702Z208678ARR001
never never NY 1606B4570BD7BB5E RR RR0060 19980326141010S101702A071251
never never NY 1607CA831478B918 RR RR0060 19980402140829S101702A071359
never never NY 160A0690085AC38E RR RR0060 19980416191916S101702M000898
never never NY 15FA9D050152F19A RR RR0180 19980108153856S101702M000886
never never NY 16059B0202712854 RR RR0180 19980319142247S101702A071155
never never NY 160A06D7073C9F48 RR RR0180 19980416191920S101702M000898
never never NY 16059B0819181410 RR RR0210 19980319142248S101702A071155
never never NY 160A06DF107F4AFF RR RR0210 19980416192021S101702M000898
never never NY 1613E4BC033325FB RR RR0210 19980618141924S101702A072843
never never NY 15BF59480E567130 RR RR0240 19961227132818S101702A060345
never never NY 15FA9CF601CF281E RR RR0240 19980108153902S101702M000886
never never NY 16059B00067E3554 RR RR0240 19980319142249S101702A071155
never never NY 15DAB2E119DAD44A RR RR7110 19970619140751S101702A064773
never never NY 15DAD30207470A34 RR RR7110 19970620091818S101702Z317432
never never NY 15DCE51D026DDBE6 RR RR7110 19970703133159S101702A064977
never never NY 156730021410C706 RR RR7120 19950615S101702A044661ARR712
never never NY 15AD9AF214B10CD2 RR RR7120 19960905155309S101702M000711
never never NY 15D0CA2F0BFC4734 RR RR7120 19970417125620S101702A063110
never never NY 15894DEA0AD9B246 RR RR7130 19960118S101702M000635ARR713
never never NY 15AD9AF21FBF4002 RR RR7130 19960905155309S101702M000711
never never NY 15D0CA321DD7D2C0 RR RR7130 19970417125624S101702A063110
never never NY 15AA49920BCCCCC8 RR RR7150 19960815131413S101702A055629
never never NY 15AD9AF5068541C2 RR RR7150 19960905155310S101702M000711
never never NY 15D0CA321D3E98A2 RR RR7150 19970417125625S101702A063110
never never NY 156730710A2AE5A8 RR RR7190 19950615S101702A044803ARR719
never never NY 15AD9AF5096FDDF4 RR RR7190 19960905155311S101702M000711
never never NY 15D0CA2D11768972 RR RR7190 19970417125627S101702A063110
never never NN 15AD9AF51B9DBCC8 RR RR7240 19960905155311S101702M000711
never never NY 15CB494B0CE2ECBA RR RR7240 19970313122849S101702A061790
never never NY 15FA9D140EEA0149 RR RR7240 19980108153908S101702M000886
never never NY 15CB494E0E3ABBC6 RR RR7260 19970313122851S101702A061790
never never NY 15F1CD11118FA34C RR RR7260 19971113140418S101702A067628
never never NY 15FA9D0C1BA194F0 RR RR7260 19980108153913S101702M000886
never never NY 15253780171A3714 RR RR7310 19940421200115S101702M000439
never never NY 155E644903E07944 RR RR7310 19950420S101702A043312ARR731
never never NY 156730710C2E0688 RR RR7310 19950615S101702A044803ARR731
never never NY 15AD9AF518B0FA5A RR RR7410 19960905155313S101702M000711
never never NY 15D0CA341A122842 RR RR7410 19970417125638S101702A063110
never never NY 15D5300E0D4A325F RR RR7410 19970515123231S101702A063836
never never NN 157F639B022EF7EE RR RR7420 19951116S101702A049429ARR742
never never NN 158ECF370E146BD4 RR RR7420 19960222170427S101702A051544
never never NY 15CB494A0A2C3B82 RR RR7420 19970313122851S101702A061790
never never NY 16075648075CE7AA RR RR7510 19980330165030S101702Z367465
never never NY 1607CCA209F8FEEE RR RR7510 19980402152456S101702A071430
never never NY 1607D0AC0616F7A7 RR RR7510 19980402174722S101702A071430
never never NY 15F74ED018466868 RR RR7530 19971218150113S101702A069057
never never NY 1607CCB10BBE413A RR RR7530 19980402152459S101702A071430
never never NY 1607D0B10A1CAD3A RR RR7530 19980402174728S101702A071430
never never NY 16001C0D1BFE722C RR RR8050 19980212150044S101702M000834
never never NY 1607CA85035C4274 RR RR8050 19980402140836S101702A071359
never never NY 160A06A8047BAE52 RR RR8050 19980416192336S101702M000898
never never NY 15CB49500EEC74A6 RR RR8100 19970313122854S101702A061790
never never NY 15E38AB4165461C2 RR RR8100 19970814203006S101702A065878
never never NY 160A068C10FA3A08 RR RR8100 19980416191507S101702M000898
never never NY 15CB49431B72BDDE RR RR8220 19970313122854S101702A061790
never never NY 15E38AB61AA70746 RR RR8220 19970814203010S101702A065878
never never NY 160A068214A4DA36 RR RR8220 19980416191508S101702M000898
never never NY 15CC6B651DFAC6E4 RR RR8300 19970320173218S101702A062654
never never NY 15E38AAF0AF4A442 RR RR8410 19970814203017S101702A065878
never never NY 15FAC8A311E4930A RR RR8410 19980109174945S101702Z354478
never never NY 15E269DF0EBECDA2 RR YRRBLR2 19970807161543CGS101702A065
never never NY 15E269DD1F494852 RR YRRBLR2 19970807161543S101702A06581
never never NY 15C39D780D302984 RT RE7580 19970123170243S101702A060807
never never NY 15C3B5550A1F1984 RT RE7580 19970124071623S101702A060807
never never NY 15C709581E10A430 RT RE7580 19970214112718S101702A061587
never never NY 1541C8C20577E334 RT RT5000 19941020143110S101702A038467
never never NN 151A35BF1DC7D344 RT RT5010
never never NN 152302491FE02E54 RT RT5010 19940407185237S101702A032574
never never NY 14E7946817E5CE1A RT RT5030
never never NY 1524395301E2CBBA RT RT5030 19940415122520S101702A032575
never never NY 17D16E9D15284C69 RT RT5050 RFT0000015
never never NY 17D16EBA043FA588 RT RT5200 RFT0000015
never never NY 150F30CF09A26520 RT RT5400
never never NY 150F30E50DAF8F1A RT RT5401
never never NY 150F30A109622612 RT RT5410
never never NY 14DB7D3E14B2B13C RT RT5411
never never NY 17D16EC017D19376 RT RT5500 RFT0000015
never never NY 14F6FFA21D7D742E RT RT5930
never never NY 1524395616C6918A RT RT5930 19940415122513S101702A032575
never never NN 160E412002F9BF7A RT RT8300 19980513171122S101702A072545
never never NY 17D16EC4131A9246 RT RT8400 RFT0000015
never never NY 17D16EC603E1968D RT RT8410 RFT0000015
never never NN 160E14430328824B RT RT8411 19980512142538S101702A072415
never never NY 15ED6C081CC4F59E RT RT8412 19971016172138S101702A067105
never never NY 15F088D0118ABB5C RT RT8412 19971105123924S101702A068100
never never NY 17C827201B7E3A17 RT YRT0001 RFT000000956A4A79F
never never NY 17D173251C28BB66 RT YRT0011 RFT000001556F2A4B0
never never NN 153F948D05458196 SA SA0240 19941006135801S101702A038126
never never NN 1592172B0C759F9C SA SA0240 19960314140753S101702A052714
never never NN 15BCFD1B02499354 SA SA0240 19961212130630S101702A059412
never never NN 153C48BB1DE4D182 SA SA0370 19940915143120S101702A037314
never never NN 15E6CAC806F4F6CC SA SA0370 19970904124754S101702M000827
never never NN 16059C22125E2638 SA SA0370 19980319145840S101702M000893
never never NY 1607CAF81CAAF864 SA SA0980 19980402142445S101702A071385
never never NY 160A033E118387AA SA SA0980 19980416172032S101702M000874
never never NY 16059C0D0FA17010 SA SA5170 19980319145848S101702M000893
never never NY 14FC7B9F09A1CF7A SA YSA0231
never never NN 153E7AEB0DF02CBC SA YSA0231 19940929135935S101702A03789
never never NN 154861EC1079A5A8 SA YSA0231 19941201141053S101702A03992
never never NN 159AE2E90003907E SA YSA0231 19960509132031S101702A05397
never never NY 160018B400805128 SA YSA0231 19980212130817S101702M00088
never never NY 14FC7BAE0C55C32C SA YSA0232
never never NN 153E7AEE092B5344 SA YSA0232 19940929135939S101702A03789
never never NN 154861EC1F8ACE2A SA YSA0232 19941201141056S101702A03992
never never NN 159AE2E900F1BFB6 SA YSA0232 19960509132032S101702A05397
never never NY 160018B401F412F6 SA YSA0232 19980212130817S101702M00088
never never NY 14FC7BA1092FCD28 SA YSA0233
never never NN 153E7AEC1D12BA88 SA YSA0233 19940929140005S101702A03789
never never NN 154861EE11FD4FBA SA YSA0233 19941201141103S101702A03992
never never NN 159AE2E918E4523A SA YSA0233 19960509132033S101702A05397
never never NY 160018B4031CD008 SA YSA0233 19980212130818S101702M00088
never never NY 14FC7BA305407D16 SA YSA0234
never never NN 153E7AEE0549ED06 SA YSA0234 19940929140025S101702A03789
never never NN 159AE2E90A01B03A SA YSA0234 19960509132033S101702A05397
never never NY 160018B21962E2FC SA YSA0234 19980212130815S101702M00088
never never NY 14FC7BAB0F989FD8 SA YSA0235
never never NN 153E7AEC0D906562 SA YSA0235 19940929135931S101702A03789
never never NN 159AE2E810E0325C SA YSA0235 19960509132030S101702A05397
never never NY 160018B31A5B1BB8 SA YSA0235 19980212130815S101702M00088
never never NY 14FC7BA219BB3386 SA YSA0236
never never NN 153E7AEA1D885672 SA YSA0236 19940929135932S101702A03789
never never NN 154861EE1679472E SA YSA0236 19941201141106S101702A03992
never never NN 149DE1E70069812C SA YSA0272
never never NY 15CE998801676182 SA YSA5281 19970403142907S101702M00078
never never NY 1617309A1D53B85B SA YSA5281 19980709133945S101702M00092
never never NY 15CE99870A316E8A SA YSA5282 19970403142915S101702M00078
never never NY 1617308B0D31C360 SA YSA5282 19980709133946S101702M00092
never never NY 15F2E643106225E8 SA YSA67S1 19971120134646S101702A06835
never never NY 15FBB34210C378DF SA YSA67S1 19980115134658S101702M00089
never never NY 16059BD61DD4E90E SA YSA67S1 19980319145252S101702M00089
never never NY 1608ED100BBB4F54 SA YSA67S1 19980409192933S101702A07166
never never NY 161AA5C403AB8BA2 SA YSA67S1 A16M000011
never never NY 15673006126219FA SA YSAL001 19950615S101702A044787AYSAL
never never NY 1568496515AEB1F4 SA YSAL001 19950622S101702A045506AYSAL
never never NY 156B96111108E7B0 SA YSAL001 19950713S101702A046133AYSAL
never never NY 1576979B0FDE7A28 SA YSAL001 19950921S101702A047844AYSAL
never never NY 157AFC721907BEF8 SA YSAL001 19951019S101702M000626AYSAL
never never NY 157E4ACD02366344 SA YSAL001 19951109S101702A049380AYSAL
never never NY 1582B2B304203332 SA YSAL001 19951207S101702A050221AYSAL
never never NY 15AB64B50C10C8A4 SA YSAL001 19960822140801S101702A05664
never never NY 15FBB342152B3471 SA YSAL001 19980115134655S101702M00089
never never NY 156B960C1747DEA0 SA YSAL002 19950713S101702A046133AYSAL
never never NY 1576979C0ED6446A SA YSAL002 19950921S101702A047844AYSAL
never never NY 15AB64B50E9565AE SA YSAL002 19960822140803S101702A05664
never never NY 15CE998616874042 SA YSAL002 19970403142856S101702M00078
never never NY 15FBB3421550F17C SA YSAL002 19980115134657S101702M00089
never never NY 15A17D840948285C SA YSAL006 19960620135031S101702A05481
never never NY 15A35EA31AA5BD84 SA YSAL006 19960702125049S101702A05547
never never NY 15A386A40C51ECB6 SA YSAL006 19960703124118S101702A05556
never never NY 15A7F1270A7AAE68 SA YSAL006 19960731150427S101702A05618
never never NY 15CE998705E28EC2 SA YSAL006 19970403142900S101702M00078
never never NY 15FBB3421551E58C SA YSAL006 19980115134658S101702M00089
never never NY 15CE9987057858D2 SA YSAL010 19970403142900S101702M00078
never never NY 15D87F7915F198DA SA YSAL010 19970605140228S101702M00079
never never NY 15D8A9BC088162CD SA YSAL010 19970606151531S101702A06447
never never NY 15F9053605F5B6C2 SA YSAL010 19971229123211S101702A06940
never never NY 15CE998A09C6AF60 SA YSAL011 19970403142901S101702M00078
never never NY 15D87F791766D369 SA YSAL011 19970605140229S101702M00079
never never NY 15D8A9BC0A37FD7A SA YSAL011 19970606151531S101702A06447
never never NY 15F905360541A4BC SA YSAL011 19971229123211S101702A06940
never never NY 159F4BC014E4B402 SA YSAOBP 19960606144320S101702A054730
never never NY 15B899671C5170D8 SA YSAOBP 19961114144539S101702M000743
never never NY 15B8A1D914AF065C SA YSAOBP 19961114194922S101702M000743
never never NY 15B9B1B70CEAF70A SA YSAOBP 19961121140042S101702M000745
never never NY 15C164601E9338A4 SA YSAOBP 19970109133259S101702A060528
never never NY 15E44AED15D19C64 SA YSAOBP 19970819151336S101702Z328496
never never NY 15E44B5A1734315C SA YSAOBP 19970819152851S101702Z328527
never never NY 15E44D420A240B9A SA YSAOBP 19970819163654S101702Z328550
never never NY 15E499890CFABE4E SA YSAOBP 19970821140528S101702A066252
never never NY 160022FE1AA3074A SA YSAOBP 19980212191614S101702M000891
never never NN 1617CA2B0D9F0C9C SA YSAT006 A16M000011
never never NY 1617309407826F30 SA YSAT009 19980709134033S101702M00092
never never NN 161730780C837ABA SA YSAT011 19980709133841S101702M00092
never never NY 16173099130FB091 SA YSAT015 19980709133846S101702M00092
never never NY 161730801E25BCB0 SA YSAT035 19980709133855S101702M00092
never never NN 15B8996A0277B5C6 SA YSAT301 19961114144601S101702M00074
never never NN 15B8A1D609330FC2 SA YSAT301 19961114194931S101702M00074
never never NN 161D7D3001A935B0 SA YSAT301 A16M000011
never never NY 152BC9A60BD9B57A SA YSAT801 19940602152851S101702A03476
never never NY 152F190A14CC6B52 SA YSAT801 19940623170035S101702A03525
never never NY 15C5CC961E2D0CA0 SA YSAT801 19970206143328S101702A06146
never never NY 1608ED0F1851F0D8 SA YSAT801 19980409192934S101702A07166
never never NY 1532821C19E6B976 SA YSAT802 19940715094943S101702A03584
never never NY 155016A709C4043A SA YSAT802 19950119145806S101702A04120
never never NY 15C5CC970C333E6E SA YSAT802 19970206143331S101702A06146
never never NY 15CA30E009D9769A SA YSAT802 19970306131335S101702M00077
never never NY 1608ED0F18531FB6 SA YSAT802 19980409192934S101702A07166
never never NY 1532822D15807290 SA YSAT803 19940715094944S101702A03584
never never NY 15C5CC97089DA9D6 SA YSAT803 19970206143332S101702A06146
never never NY 1608ED0F141CC73A SA YSAT803 19980409192932S101702A07166
never never NY 1532821C15FAAEFC SA YSAT805 19940715094945S101702A03584
never never NY 15C5CC970F570596 SA YSAT805 19970206143334S101702A06146
never never NY 1608ED0F08BC2FAC SA YSAT805 19980409192933S101702A07166
never never NY 1532822D11BD61B2 SA YSAT806 19940715094946S101702A03584
never never NY 15C5CC920E8C7D8C SA YSAT806 19970206143321S101702A06146
never never NY 152DFBCC09912506 SA YSAT807 19940616144919S101702A03499
never never NY 153D625917580C4E SA YSAT807 19940922143846S101702A03759
never never NY 15A066370EEB9C62 SA YSAT807 19960613151306S101702A05492
never never NY 15B9B1BB041DB752 SA YSAT807 19961121140042S101702M00074
never never NY 15C5CC931A5872CA SA YSAT807 19970206143322S101702A06146
never never NY 154513D61BBDA420 SA YSAUEB 19941110133031S101702A039326
never never NY 15451B0404DABD5A SA YSAUEB 19941110174709S101702A039326
never never NY 15462E841FA8D642 SA YSAUEB 19941117140738S101702A039487
never never NY 15C164B9051612DA SA YSAUEB 19970109134538S101702A060538
never never NY 15F5E0F71EAF2E6A SA YSAUEB 19971209124732S101702A068954
never never NY 161933E403C81B9C SA YSX8105 A16M000011
never never NY 161981A5061B2D42 SA YSX81S1 A16M000011
never never NY 1541788603A42FF4 SAMDBOF SAMB0500
never never NY 15767F84136446E4 SAMDBOF SP1BS1T
never never NY 15767F8D19B472B2 SAMDBOF SP1BS2T
never never NY 15767F9709AA25FE SAMDBOF SP1BS3T
never never NY 15767F9C0FCE862E SAMDBOF SP1BS4T
never never NY 15767FA817407E00 SAMDBOF SP1BS5T
never never NY 15767FB0006A1294 SAMDBOF SP1BS6T
never never NY 1578C49201271AE0 SAMDBOF SP1BS9T
never never NY 15988B550C40F8D4 SAMDBOF SP1SK1T
never never NY 15988B61096F6B8A SAMDBOF SP1SK2T
never never NY 15988B6C01CAD6AA SAMDBOF SP1SK3T
never never NY 15988B711C4D1EE0 SAMDBOF SP1SK4T
never never NY 15988B7F0B56EB30 SAMDBOF SP1SK5T
never never NY 15767FC308E2C354 SAMDBOF SP1TS1T
never never NY 15767FFB08111E84 SAMDBOF SP1US1T
never never NY 1576802C1467DB7E SAMDBOF SP1US2T
never never NY 16D99450011C8DF5 SE SE0560 A20Y000517
never never NY 16A3B1C805B5AC6F SE SE0560 A20Y000523
never never NY 16E4EB9D12FBF592 SE SE0560 A20Y000936
never never NY 172F437D038F34BD SE SE0560 A20Y001226
never never NY 175B6E4110B174C8 SE SE0560 A20Y001357
never never NY 17BF5E19069A3C09 SE SE7120 IMS0000024
never never NY 17BF5E191A471C79 SE SE7130 IMS0000024
never never NY 181E472111C57656 SE SE8300 IMS0000057
never never NY 181E472117D0FB6D SE SE8310 IMS0000057
never never NY 177A5FB504F94FDC SE SE8710 A12M006478
never never NY 15AD972311049BEA SE YSE0301 19960905133832S101702A05637
never never NY 15DDFD8F0BD5A2B4 SE YSE0301 19970710124842S101702A06514
never never NY 15DDFD9605FB9180 SE YSE0310 19970710124852S101702A06514
never never NY 15EC2A440A7D960A SE YSE0310 19971008172544S101702A06738
never never NY 160480EB16D325E0 SE YSE0310 19980312140704S101702A07100
never never NY 15DDFD8F19BAFD10 SE YSE0311 19970710124837S101702A06514
never never NY 15EC2A4313F5C304 SE YSE0311 19971008172549S101702A06738
never never NY 15DDFD9316E3465E SE YSE0312 19970710124838S101702A06514
never never NY 15DDFD931948518A SE YSE0313 19970710124839S101702A06514
never never NY 15DDFD951227B94C SE YSE0314 19970710124840S101702A06514
never never NY 15EC2A4B0712352A SE YSE0314 19971008172558S101702A06738
never never NY 15DDFD9409AC0430 SE YSE0315 19970710124841S101702A06514
never never NY 15EC2A4A0C52B3EE SE YSE0315 19971008172603S101702A06738
never never NY 15DDFD8F057E73E0 SE YSE0316 19970710124842S101702A06514
never never NY 15DDFD940CAA335A SE YSE0317 19970710124843S101702A06514
never never NY 15EC2A431C89DB98 SE YSE0317 19971008172531S101702A06738
never never NY 15DDFD94062E7FA0 SE YSE0318 19970710124844S101702A06514
never never NY 15DDFD8F0F1C3CFA SE YSE0319 19970710124845S101702A06514
never never NY 15DDFD941349BD10 SE YSE0320 19970710124845S101702A06514
never never NY 15EC2A411D04B02E SE YSE0320 19971008172534S101702A06738
never never NY 15DDFD9314C2582A SE YSE0321 19970710124847S101702A06514
never never NY 15DDFD930E7AECC0 SE YSE0322 19970710124848S101702A06514
never never NY 15DDFD941196E27C SE YSE0323 19970710124849S101702A06514
never never NY 15DDFD901F803F2E SE YSE0324 19970710124850S101702A06514
never never NY 15EC2A43050533CA SE YSE0324 19971008172537S101702A06738
never never NY 176AFA811A058A84 SE YSE09D0 A20Y00142753971B62
never never NY 17E0AB9C06FF5334 SF SF7990 GDIR000033
never never NN 155390A303748620 SI SI7340 19950210175302S101702Z176831
never never NN 15551EA502C4230A SI SI7340 19950220151931S101702A042317
never never NN 14B6182312CD38FC SI SI7550
never never NN 14B618021668B9F4 SI YSI0132
never never NY 15D997EF0C286A40 SM SMDEF002
never never NN 15D6E2381E2BD592 SM SMJCLEX1
never never NY 15AA6CCB0E16DCA8 SM SMJCLEX2
never never NN 15AB8DC70A7C3D3E SM SMPATCRE
never never NN 15D04BF40F23CF8E SM SMPATDEL
never never NN 15F1ED3E01F57756 SM SMPHBILD
never never NN 15D2AAB407FB7716 SM SMPHREPL
never never NN 15AB84960727165E SM SMPHUPD
never never NN 15AB85D00AD82780 SM SMPHUPD1
never never NN 15AB85CF03B95EFE SM SMPHUPD2
never never NN 15AA6CD40E0EFAC4 SM SMPLAN01
never never NN 15E7E9A116ECD213 SM SMUPDAT0
never never NN 15E7E9A313C0F84F SM SMUPDAT1
never never NY 15D6D716005BD5FE SM SMUPDAT2
never never NY 1838B5520B5DFBD7 SN SN5001 SAVS000018
never never NY 1838B5551CC61772 SN SN5902 SAVS000018
never never NY 1838B5681CBA7EF9 SN SN5910 SAVS000018
never never NY 17FEBFE315D52BBF SN YSN110S NOST000268586EA52F
never never NY 17FF5C8C0E992FD8 SN YSN111S NOST0002685873C750
never never NY 181B9C801BEC5ED9 SN YSND006 SAVS0000055960CF65
never never NY 180A7B8B152B54FA SV SV0930 WSSV000188
never never NY 15A4D014033630CA SV SV7570 19960711171327S101702A055415
never never NN 153034C91B6B1020 SV SV7710 19940630181346S101702A035352
never never NN 153263440CE3374A SV SV7710 19940714152500S101702A035714
never never NY 1612D2F21FD314F6 SV SV7810 19980611190040S101702A073120
never never NY 17D233B301FEDFA1 SV SV7820 WSSV000087
never never NY 17E17DEC140DE9B5 SV SV7820 WSSV000116
never never NN 153A17A3176DAD4C SV YSVRAD 19940901155609S101702A036983
never never NN 1542E2530EDC3580 SV YSVRAD 19941027143121S101702A038681
never never NN 1550178603C5A4EA SV YSVRAD 19950119153007S101702A041393
never never NN 1556AF2C161A78D0 SV YSVRAD 19950302141336S101702A042588
never never NN 1568502B11EF97E4 SV YSVRAD 19950622S101702M000590AYSVRA
never never NY 158C978701D73A76 SX SX0540 19960208S101702A051698ASX054
never never NY 15A7F1480C2D1BBA SX SX0540 19960731150721S101702A056219
never never NY 15AB652403FA9474 SX SX0540 19960822142339S101702A056633
never never NN 1576890E1AA75A58 SX SX0640 19950921S101702Z209168ASX064
never never NN 1577B0691453E4CE SX SX0640 19950928S101702A047968ASX064
never never NN 157E4B0B0B66A3B2 SX SX0640 19951109S101702A049277ASX064
never never NY 152CE28503BF3CD0 SX SX0650 19940609145031S101702A034927
never never NY 152F1916029864C2 SX SX0650 19940623170137S101702A035250
never never NN 156B957D08AFB4A2 SX SX0720 19950713134744S101702A046025
never never NN 1573504D15CD741E SX SX0720 19950831S101702A047303ASX072
never never NN 15807BB5074440D6 SX SX0720 19951123S101702A049707ASX072
never never NY 15F519220403220E SX SX0750 19971204133317S101702M000869
never never NY 15FBBB0C0C1D49CA SX SX0750 19980115181956S101702M000856
never never NY 16002321034245F2 SX SX0750 19980212191931S101702M000891
never never NY 157B250E054049B4 SX SX0780 19951020S101702A048835ASX078
never never NY 157B208909229470 SX SX0780 19951020S101702Z213845ASX078
never never NY 157B23801ADFE750 SX SX0780 19951020S101702Z213858ASX078
never never NN 1559F9FC023B0974 SX YS81103 19950323125510S101702A04310
never never NN 155B13C3029604BC SX YS81103 19950330S101702A043182AYS81
never never NN 155F7BCF08C04508 SX YS81103 19950427S101702A044020AYS81
never never NN 156B95A21C72B020 SX YS81103 19950713S101702A046089AYS81
never never NN 156CAF7B1C51A4EE SX YS81103 19950720S101702A046278AYS81
never never NN 1559FA051C04561A SX YS81104 19950323125515S101702A04310
never never NN 155B13C206A3808C SX YS81104 19950330S101702A043182AYS81
never never NN 155F7BD1182C9E58 SX YS81104 19950427S101702A044020AYS81
never never NN 156B959E02911352 SX YS81104 19950713S101702A046089AYS81
never never NN 156CAF7C0809A71C SX YS81104 19950720S101702A046278AYS81
never never NY 144AFF6807253174 SX YSX0610
never never NN 158ECB781FE977E4 SX YSX5104 19960222144929S101702A05225
never never NN 159F4BC61D6676D4 SX YSX5104 19960606144321S101702A05473
never never NN 15A066361E18A61C SX YSX5104 19960613151300S101702A05492
never never NN 15A1532219B70EDA SX YSX5104 19960619123317S101702Z25370
never never NN 15A17B9A197A4218 SX YSX5104 19960620124151S101702Z25398
never never NN 15A180711D0A6E50 SX YSX5104 19960620153501S101702Z25404
never never NN 15A246D704B855C6 SX YSX5104 19960625135551S101702A05530
never never NY 15AB64C20AAE080C SX YSX5104 19960822140944S101702A05663
never never NY 15AC309815B4B7A0 SX YSX5104 19960827154539S101702Z26342
never never NY 15AC768F132F33DE SX YSX5104 19960829092947S101702Z26384
never never NY 15AC7E4A07701C82 SX YSX5104 19960829140441S101702A05675
never never NY 15B8994F01C6D760 SX YSX5104 19961114144227S101702M00074
never never NY 15B8A1D607B6206C SX YSX5104 19961114194623S101702M00074
never never NY 15B899411D3A8EB4 SX YSX5404 19961114144229S101702M00074
never never NY 15B8A1BB1698BE4C SX YSX5404 19961114194626S101702M00074
never never NY 15B899511CC3745C SX YSX5405 19961114144230S101702M00074
never never NY 15B8A1BA1A4C00C2 SX YSX5405 19961114194627S101702M00074
never never NY 15C2797C0F613AAA SX YSX5405 19970116105139S101702Z29104
never never NY 15C5CB83084303D6 SX YSX5405 19970206135317S101702A06133
never never NY 15DCE48914CAB098 SX YSX5405 19970703131040S101702M00080
never never NY 15E3807F00DFDFCA SX YSX5405 19970814142703S101702M00081
never never NY 15E3833D0166A0D6 SX YSX5405 19970814160458S101702M00081
never never NY 15EB318C1EFF025E SX YSX5405 19971002130333S101702A06718
never never NY 16059BD91EA9B992 SX YSX5405 19980319145256S101702M00089
never never NY 1605B75607CF32AE SX YSX5405 19980320071931S101702Z36573
never never NY 1605B96308EF0FF4 SX YSX5405 19980320083218S101702A07120
never never NY 1607E9E7097E9794 SX YSX5405 19980403085402S101702Z36811
never never NY 1607EC4115D59740 SX YSX5405 19980403101803S101702A07148
never never NN 157AFC7708CFD6B4 SX YSX6403 19951019S101702M000626AYSX6
never never NN 157B20D1199DB0E2 SX YSX6403 19951020S101702A048832AYSX6
never never NN 157B1F2410A89EA8 SX YSX6403 19951020S101702Z213819AYSX6
never never NN 157BC3690F55BAFC SX YSX6403 19951024S101702A048896AYSX6
never never NN 157BBE70143F64F8 SX YSX6403 19951024S101702Z214302AYSX6
never never NN 157CB74A1030AE02 SX YSX6403 19951030S101702A049033AYSX6
never never NN 157D0C0C1A21D3BA SX YSX6403 19951101S101702A049170AYSX6
never never NN 157D03E3160D9904 SX YSX6403 19951101S101702Z215711AYSX6
never never NN 157D31940B53A2C8 SX YSX6403 19951102S101702A049191AYSX6
never never NN 157D29E41E11E576 SX YSX6403 19951102S101702Z215828AYSX6
never never NN 157E4A9712D9EB42 SX YSX6403 19951109S101702A049277AYSX6
never never NN 157F65A80781BA74 SX YSX6403 19951116S101702M000633AYSX6
never never NN 157F58720B66C634 SX YSX6403 19951116S101702Z219256AYSX6
never never NN 157F59ED09CBA0F0 SX YSX6403 19951116S101702Z219263AYSX6
never never NN 157F81BD1D9955DA SX YSX6403 19951117S101702Z219421AYSX6
never never NN 157F88D5041FA3EE SX YSX6403 19951117S101702Z219514AYSX6
never never NN 1580023610C8A708 SX YSX6403 19951120S101702Z219821AYSX6
never never NN 15800A850EB814C0 SX YSX6403 19951120S101702Z219988AYSX6
never never NN 15802BBA1464E042 SX YSX6403 19951121S101702Z220128AYSX6
never never NN 15802D0603851400 SX YSX6403 19951121S101702Z220149AYSX6
never never NN 158058760AE29C44 SX YSX6403 19951122S101702Z220528AYSX6
never never NN 1582B14E0F1B23C4 SX YSX6403 19951207S101702M000644AYSX6
never never NN 157AFF1C0CF513D6 SX YSX6404 19951019S101702M000626AYSX6
never never NN 157D0C11182DADC2 SX YSX6404 19951101S101702A049170AYSX6
never never NN 157D03DF1F1A0496 SX YSX6404 19951101S101702Z215711AYSX6
never never NN 157D07891E7C70AE SX YSX6404 19951101S101702Z215750AYSX6
never never NN 157E4AA413780998 SX YSX6404 19951109S101702A049277AYSX6
never never NN 157F65A8168E9526 SX YSX6404 19951116S101702M000633AYSX6
never never NN 158002370412E632 SX YSX6404 19951120S101702Z219821AYSX6
never never NN 15802BBB0A9123EC SX YSX6404 19951121S101702Z220128AYSX6
never never NN 15802D0618D53640 SX YSX6404 19951121S101702Z220149AYSX6
never never NN 15804EF51A17A5F8 SX YSX6404 19951122S101702Z220381AYSX6
never never NN 15818C5D02C27A40 SX YSX6404 19951130S101702Z222054AYSX6
never never NN 1582B14A1C2269D0 SX YSX6404 19951207S101702M000644AYSX6
never never NN 1583C9A506A92A02 SX YSX6404 19951214S101702M000650AYSX6
never never NN 1583BE0C093D4690 SX YSX6404 19951214S101702Z224743AYSX6
never never NN 1583C0271FEAC558 SX YSX6404 19951214S101702Z224751AYSX6
never never NN 15846BBD1769B366 SX YSX6404 19951218S101702A050580AYSX6
never never NN 1584BD4D08B57CF4 SX YSX6404 19951220S101702A050692AYSX6
never never NN 1585CFD31461A328 SX YSX6404 19951227S101702A050763AYSX6
never never NN 1588320F1E183AC8 SX YSX6404 19960111S101702M000654AYSX6
never never NN 15891BF50D979ACA SX YSX6404 19960117S101702A051254AYSX6
never never NN 158A84A60AB4B4B6 SX YSX6404 19960126S101702Z231538AYSX6
never never NN 158B2F3D11C0FAB2 SX YSX6404 19960130S101702A051549AYSX6
never never NN 158C97201096367E SX YSX6404 19960208S101702M000665AYSX6
never never NN 158ECB9313CF239C SX YSX6404 19960222144924S101702A05225
never never NN 15944B7A1A07251A SX YSX6404 19960328144309S101702A05309
never never NN 15944D6B1584B088 SX YSX6404 19960328155251S101702A05309
never never NN 15944F2F08A7C05E SX YSX6404 19960328165756S101702A05309
never never NN 159BD8DE05759546 SX YSX6404 19960515160308S101702M00068
never never NN 159C467009F49F42 SX YSX6404 19960518092523S101702Z24884
never never NN 159C9E34195E47D8 SX YSX6404 19960520134651S101702A05428
never never NN 15A083290AC6BDA0 SX YSX6404 19960614082939S101702Z25275
never never NN 15A08E8A1F1D8D06 SX YSX6404 19960614151554S101702A05504
never never NN 15A10799061AF3A4 SX YSX6404 19960617152901S101702A05508
never never NN 15A298551603232A SX YSX6404 19960627143103S101702A05535
never never NN 15A3B19F1CE393FC SX YSX6404 19960704142038S101702A05554
never never NN 15AB64C316974D84 SX YSX6404 19960822140947S101702A05663
never never NN 15B45BE402B36B20 SX YSX6404 19961018151537S101702A05801
never never NN 15B5214B1AE30368 SX YSX6404 19961023130053S101702A05804
never never NN 15B9DE6B0045E89E SX YSX6404 19961122163940S101702A05912
never never NN 15B9F482175AAC6C SX YSX6404 19961123055028S101702Z27903
never never NN 15BA553F1F5DAB1C SX YSX6404 19961125153301S101702A05916
never never NN 15BBE7A415C22376 SX YSX6404 19961205153416S101702M00075
never never NN 15B9B1C203FA3896 SX YSX6405 19961121140041S101702M00074
never never NN 15BBE7A415E64564 SX YSX6405 19961205153417S101702M00075
never never NN 15BE18A215AA3788 SX YSX6405 19961219141040S101702A06010
never never NN 15C5CCB61D938398 SX YSX6405 19970206143330S101702A06146
never never NN 15CE9995012D3F92 SX YSX6405 19970403143003S101702M00078
never never NN 15D4E4FE15F52D8F SX YSX6405 19970513154526S101702A06387
never never NN 15D5019C06986FF0 SX YSX6405 19970514084910S101702Z31120
never never NN 15D50F33086105C8 SX YSX6405 19970514165526S101702A06396
never never NN 15D87F95167A750D SX YSX6405 19970605140226S101702M00079
never never NN 15D8A1011773DB8E SX YSX6405 19970606100244S101702Z31502
never never NN 15D8A85E18EC4C49 SX YSX6405 19970606142544S101702A06447
never never NN 15DADD43129A0BC2 SX YSX6405 19970620152422S101702A06484
never never NN 15DD8731077D9162 SX YSX6405 19970707141044S101702A06515
never never NN 15DEA11B0E5EA8E6 SX YSX6405 19970714142047S101702A06530
never never NN 15DECB861D7026A2 SX YSX6405 19970715153931S101702A06535
never never NN 15E265C404691D6E SX YSX6405 19970807134752S101702A06580
never never NN 15E3807C16D54EDC SX YSX6405 19970814142658S101702M00081
never never NN 15E3833802FE9D42 SX YSX6405 19970814160448S101702M00081
never never NN 15E4192917134A7E SX YSX6405 19970818093107S101702Z32768
never never NN 15E4245417AC08DC SX YSX6405 19970818161023S101702A06610
never never NN 15E4998B095FD442 SX YSX6405 19970821140531S101702A06625
never never NN 15E8FD85098F021E SX YSX6405 19970918123555S101702A06682
never never NN 15F2BEAC0AF8B302 SX YSX6405 19971119141110S101702A06844
never never NN 15F5190407D60B38 SX YSX6405 19971204132949S101702M00086
never never NN 15F5E0FE10436E76 SX YSX6405 19971209124733S101702A06895
never never NN 15F74CA907BCDAF6 SX YSX6405 19971218134256S101702A06920
never never NN 15F7DFEE1A1140AC SX YSX6405 19971222053543S101702Z35201
never never NN 15FBBA1406F2D048 SX YSX6405 19980115174324S101702M00085
never never NN 15FC57E4039F0174 SX YSX6405 19980119155852S101702A06989
never never NN 15FCF2710534B0EC SX YSX6405 19980123121054S101702Z35688
never never NN 15FCF5FE10F98F9A SX YSX6405 19980123141704S101702Z35690
never never NN 15FCF6F30AE89D86 SX YSX6405 19980123145045S101702A07000
never never NN 1607CBC9140627E5 SX YSX6405 19980402145252S101702M00089
never never NN 1607D0201082AF96 SX YSX6405 19980402172908S101702M00089
never never NN 16086D0C1B5F62EC SX YSX6405 19980406150643S101702A07152
never never NN 160A06340B7E4886 SX YSX6405 19980416190913S101702M00089
never never NN 160F559E06839613 SX YSX6405 19980520140320S101702M00091
never never NN 16101F63161E1B38 SX YSX6405 19980525142836S101702A07272
never never NN 1610BDC10F807C44 SX YSX6405 19980529125649S101702A07281
never never NN 1612CA291720EF30 SX YSX6405 19980611134538S101702M00092
never never NN 15828D8216BBB3A4 SX YSX64P4 19951206S101702Z223382AYSX6
never never NN 1582B14F01A78782 SX YSX64P4 19951207S101702M000644AYSX6
never never NN 1583C9A6100874A6 SX YSX64P4 19951214S101702M000650AYSX6
never never NN 1583BD9D16A0F21C SX YSX64P4 19951214S101702Z224741AYSX6
never never NN 1583BE0C09139D80 SX YSX64P4 19951214S101702Z224743AYSX6
never never NN 1583C02706FE22B6 SX YSX64P4 19951214S101702Z224751AYSX6
never never NN 15846BBD1556B166 SX YSX64P4 19951218S101702A050580AYSX6
never never NN 158463DB15862DD0 SX YSX64P4 19951218S101702Z225267AYSX6
never never NN 158467551C0FD244 SX YSX64P4 19951218S101702Z225344AYSX6
never never NN 1584BD4C1C2D8EEC SX YSX64P4 19951220S101702A050692AYSX6
never never NN 1584B5770E46642E SX YSX64P4 19951220S101702Z225865AYSX6
never never NN 1584B6A0156A2C1A SX YSX64P4 19951220S101702Z225899AYSX6
never never NN 15850C8C0B21FA0C SX YSX64P4 19951222S101702A050719AYSX6
never never NN 1585CFD402C4C770 SX YSX64P4 19951227S101702A050763AYSX6
never never NN 1588320F1DF06CB8 SX YSX64P4 19960111S101702M000654AYSX6
never never NN 1588FC800301D63A SX YSX64P4 19960116S101702A051197AYSX6
never never NN 15891C0017B4FAD0 SX YSX64P4 19960117S101702A051254AYSX6
never never NN 158A84A3193E58A6 SX YSX64P4 19960126S101702Z231538AYSX6
never never NN 158B2F5103FDFF42 SX YSX64P4 19960130S101702A051549AYSX6
never never NN 158B80C906B86A8A SX YSX64P4 19960201S101702A051648AYSX6
never never NN 15921708001661CC SX YSX64P4 19960314140358S101702A05271
never never NN 15935B8F15814884 SX YSX64P4 19960322153819S101702A05300
never never NN 159C9E3419608CA2 SX YSX64P4 19960520134654S101702A05428
never never NN 15A066380B70AC30 SX YSX64P4 19960613151302S101702A05492
never never NN 15A08E8700D576FC SX YSX64P4 19960614151553S101702A05504
never never NN 15A1079611E06138 SX YSX64P4 19960617152900S101702A05508
never never NN 15A1A9DE1CC3EBF8 SX YSX64P4 19960621161730S101702A05525
never never NN 15AB64CB14D053D8 SX YSX64P4 19960822140946S101702A05663
never never NN 15AC5CCE07714BAC SX YSX64P4 19960828180725S101702A05678
never never NN 15ACA5E11E084310 SX YSX64P4 19960830134305S101702Z26407
never never NN 15AD1A691F23EDCE SX YSX64P4 19960902111358S101702Z26424
never never NN 15AD46930343C32A SX YSX64P4 19960903133413S101702A05685
never never NN 15B9B1BF115CC4AE SX YSX64P4 19961121140040S101702M00074
never never NN 15B9DE6A1FCCEF3C SX YSX64P4 19961122163939S101702A05912
never never NN 15B9F4821A80B90E SX YSX64P4 19961123055027S101702Z27903
never never NN 15BA553F1F73E0A6 SX YSX64P4 19961125153300S101702A05916
never never NN 15BBE7A416395902 SX YSX64P4 19961205153414S101702M00075
never never NN 15BCFEBF102435FA SX YSX64P5 19961212135753S101702A05983
never never NN 15C164BE1F570A0E SX YSX64P5 19970109134552S101702A06055
never never NN 15C5CCB615F03636 SX YSX64P5 19970206143327S101702A06146
never never NN 15CE99950783A102 SX YSX64P5 19970403142956S101702M00078
never never NN 15D3EFA6076D084E SX YSX64P5 19970507132447S101702M00079
never never NN 15D4E4FE15F85147 SX YSX64P5 19970513154524S101702A06387
never never NN 15D5019C186E9827 SX YSX64P5 19970514084909S101702Z31120
never never NN 15D50F33140545A8 SX YSX64P5 19970514165525S101702A06396
never never NN 15D87F8508B02DF0 SX YSX64P5 19970605140224S101702M00079
never never NN 15D8A85E18DC5CD6 SX YSX64P5 19970606142544S101702A06447
never never NN 15DD87310312FBA2 SX YSX64P5 19970707141043S101702A06515
never never NN 15DEA11B09FC6474 SX YSX64P5 19970714142046S101702A06530
never never NN 15DECB861CCC0B66 SX YSX64P5 19970715153931S101702A06535
never never NN 15E3807D14063AC8 SX YSX64P5 19970814142657S101702M00081
never never NN 15E383420FBCD42C SX YSX64P5 19970814160447S101702M00081
never never NN 15E419281E7CDE14 SX YSX64P5 19970818093106S101702Z32768
never never NN 15E4245B13CBEEA6 SX YSX64P5 19970818161022S101702A06610
never never NN 15E4998B13ADC56C SX YSX64P5 19970821140530S101702A06625
never never NN 15F0B30A00AE47BC SX YSX64P5 19971106134926S101702M00084
never never NN 15F2BEAC0BCC8F5C SX YSX64P5 19971119141112S101702A06844
never never NN 15F5190404B4D436 SX YSX64P5 19971204132949S101702M00086
never never NN 15F5E0FE0FCDFA4E SX YSX64P5 19971209124733S101702A06895
never never NN 15F74CAE0D9245D2 SX YSX64P5 19971218134258S101702A06920
never never NN 15F76C5910C455A2 SX YSX64P5 19971219083811S101702Z35178
never never NN 15F778990CA7AD8E SX YSX64P5 19971219155653S101702A06928
never never NN 15F7DFF5131DAADE SX YSX64P5 19971222053615S101702Z35201
never never NN 15FBBA1403BB5780 SX YSX64P5 19980115174323S101702M00085
never never NN 15FC4F0216655CA6 SX YSX64P5 19980119104109S101702Z35584
never never NN 15FC57E404A04902 SX YSX64P5 19980119155852S101702A06989
never never NN 15FCF26E1AAECB30 SX YSX64P5 19980123121052S101702Z35688
never never NN 15FCF5FE1112481C SX YSX64P5 19980123141704S101702Z35690
never never NN 15FCF6F30238214C SX YSX64P5 19980123145045S101702A07000
never never NN 1607CD4B0924421C SX YSX64P5 19980402154907S101702M00089
never never NN 1607D01F0539B2B4 SX YSX64P5 19980402172907S101702M00089
never never NN 16086D0F08D86394 SX YSX64P5 19980406150642S101702A07152
never never NN 1608BA930E7491E2 SX YSX64P5 19980408132103S101702A07160
never never NN 1608ED1411CE1954 SX YSX64P5 19980409192934S101702A07166
never never NN 160F55931ADFD53A SX YSX64P5 19980520140318S101702M00091
never never NN 161730A703D51E82 SX YSX64P5 19980709134005S101702M00092
never never NN 1571157313C573BC SX YSX8103 19950817S101702A046517AYSX8
never never NN 157C16B512FB44AC SX YSX8103 19951026S101702A048958AYSX8
never never NN 157D318A04933C62 SX YSX8103 19951102S101702A049172AYSX8
never never NN 15850C870AE46676 SX YSX8103 19951222S101702A050719AYSX8
never never NN 159F4BC61A1C9468 SX YSX8103 19960606144323S101702A05473
never never NN 1571156F01CA52CC SX YSX8104 19950817S101702A046517AYSX8
never never NN 157C16B515E96EE8 SX YSX8104 19951026S101702A048958AYSX8
never never NN 157D318A079D888A SX YSX8104 19951102S101702A049172AYSX8
never never NN 15850C870CA55F0A SX YSX8104 19951222S101702A050719AYSX8
never never NN 159ADB51182B2246 SX YSX8104 19960509084907S101702Z24732
never never NN 159AE3411EAFD254 SX YSX8104 19960509133253S101702A05407
never never NN 159F4BC805482D5E SX YSX8104 19960606144310S101702A05473
never never NY 15B899511092045A SX YSX8104 19961114144235S101702M00074
never never NY 15B8A1DB0C4C4948 SX YSX8104 19961114194632S101702M00074
never never NY 15C16462059C0658 SX YSX8104 19970109133303S101702A06053
never never NY 15B8995908276F1E SX YSX8105 19961114144236S101702M00074
never never NY 15B8A1DB10081264 SX YSX8105 19961114194633S101702M00074
never never NY 15B9342308D950C4 SX YSX8105 19961118110550S101702A05891
never never NY 15C164621C0207DC SX YSX8105 19970109133314S101702A06053
never never NY 15C5CB7B15990C06 SX YSX8105 19970206135318S101702A06133
never never NY 15D998871BDD73AE SX YSX8105 19970612134213S101702A06457
never never NY 15F2E61814A9D118 SX YSX8105 19971120134349S101702A06835
never never NY 15F3D212042DE0CE SX YSX8105 19971126102958S101702A06860
never never NY 15F4278E0045FDC2 SX YSX8105 19971128132836S101702A06868
never never NY 16059BE41FCFB732 SX YSX8105 19980319145430S101702M00089
never never NY 1605BE4213F65E18 SX YSX8105 19980320112646S101702A07121
never never NY 1607CADC1BFAD3DF SX YSX8105 19980402142035S101702A07138
never never NY 160F558C195E0C9C SX YSX8105 19980520140317S101702M00091
never never NY 16173094077053DC SX YSX8105 19980709134006S101702M00092
never never NY 15F0B30511E18942 SX YSX81S1 19971106134925S101702M00084
never never NY 16059BE401AB11B4 SX YSX81S1 19980319145410S101702M00089
never never NY 1607CAD009B76706 SX YSX81S1 19980402142033S101702A07138
never never NY 1612CA24135515A7 SX YSX81S1 19980611134539S101702M00092
never never NY 1517FC3D0D29C796 SX YSXFEHL
never never NY 151EA73716E4C2FA SX YSXFEHL 19940311013633S101702M00038
never never NY 1557C87A0851C2E6 SX YSXFLOG 19950309140310S101702A04269
never never NY 155B13C201B67B58 SX YSXFLOG 19950330S101702A043182AYSXF
never never NY 155C2F6F00389B96 SX YSXFLOG 19950406S101702A043381AYSXF
never never NY 156B959E0B0861BC SX YSXFLOG 19950713S101702A046089AYSXF
never never NY 15894B4511707A8C SX YSXFLOG 19960118S101702A051283AYSXF
never never NY 15A0662B067DB9D6 SX YSXFLOG 19960613151257S101702A05492
never never NY 16059BD2029AA8A8 SX YSXFLOG 19980319145352S101702M00089
never never NY 151EA73813545804 SX YSXRELK 19940311013634S101702M00038
never never NY 151F2CC31F733642 SX YSXRELK E
never never NN 1614FC2F024D406E SX YSXT231 19980625130147S101702A07337
never never NN 158DB2310749718C SX YSXT812 19960215150345S101702A05206
never never NN 158ECB311EBC7A4A SX YSXT812 19960222144042S101702A05221
never never NY 1454498000D217B0 SY SY9230
never never NY 15CE92BA0FD60A9C SY SY9230 A
never never NN 160A103D1AC874EB TE YTEF021 19980417011040S101702A07121
never never NN 160E6A7D1FE73396 TE YTEF021 19980514175259S101702A07235
never never NN 160A104003ADE3F2 TE YTEF022 19980417011041S101702A07121
never never NN 160E6A880A455602 TE YTEF022 19980514175300S101702A07235
never never NY 15F51EB417EC7912 TEST YYFIKUR 19971204165432S101702A068
never never NN 15BCCEEE141E4052 TK TK0100 19961211093410S101702Z282987
never never NN 15BDAFF31DF38818 TK TK0100 19961216234803S101702Z284134
never never NN 15BDCD1806CE6402 TK TK0100 19961217171109S101702A060053
never never NN 160D4EC11A3FB73A TK TK0110 19980507163244S101702A072127
never never NN 15CC649D0539BB5C TK TK0120 19970320132922S101702A062552
never never NN 160D4EA718821A60 TK TK0120 19980507163249S101702A072127
never never NN 160D4EB7125C33C8 TK TK0130 19980507163251S101702A072127
never never NN 15E5B14804A94F86 TK TK0150 19970828125856S101702A066346
never never NN 15BE189502002E6C TK TK0160 19961219141039S101702A060093
never never NN 15CC649C0CB18912 TK TK0160 19970320132918S101702A062552
never never NN 160D4EC2023A6CD0 TK TK0160 19980507163219S101702A072127
never never NN 1613E41B17AA1A32 TK TK0180 19980618135727S101702A073194
never never NN 161731280ADF24EE TK TK0180 19980709140354S101702A073643
never never NY 17C966571F2A4911 TN TN5003 OTXO000036
never never NY 17E657980847E6A6 TN TN5003 OTXO000054
never never NY 17C96658071D404A TN TN8910 OTXO000036
never never NY 17E657AC1B0AB8DC TN TN8920 OTXO000054
never never NY 181B49100387BF76 TN TN8920 OTXO000070
never never NY 182E814602B0B1A4 TN TN8920 OTXO000081
never never NY 181C3AD3128B4815 TN YTN0180 OTXO0000705965FEAFMVS
never never NY 181C3AD716131BAA TN YTN0190 OTXO0000705965FEBFMVS
never never NY 18282B261F97BBD8 TN YTN0201 OTXO00008159CA241A
never never NY 17CBC2051C2DC687 TR TR5360 DERI000022
never never NY 17D6C4E7117C1866 TR TR5360 DERI000026
never never NY 17E6821203212ED6 TR TR5360 DERI000030
never never NY 17F0DF9014CD9938 TR TR5360 DERI000033
never never NY 17C9941413DD4975 TR TR7040 DERI000022
never never NY 17D3A899025701A9 TR TR7040 DERI000026
never never NY 17E304760AB8D3E3 TR TR7040 DERI000030
never never NY 17C99311078E759A TR YTRT061 RRA000003156B09495
never never NY 17EE32100DBDABE9 TR YTRT061 RRA000004357E3D5C4
never never NN 1511668506178B7C TR YTRT931
never never NN 15AA4B330C36AFB4 TR YTRT931 19960815141215S101702A05640
never never NN 151166AC117672B4 TR YTRT932
never never NN 1525300215B6B5FC UF UF8000 19940421153508S101702A033617
never never NN 1529963307EBC618 UF UF8000 19940519152240S101702A034445
never never NY 1479937C01128F38 UP YUP03
never never NY 1479939C0F27649C UP YUP04
never never NY 1479939A14610D4C UP YUP06
never never NY 147993B815305050 UP YUP09
never never NY 147994F413269064 UP YUP10
never never NY 1479939B1FA3DE60 UP YUP11
never never NY 147993DF14F25E00 UP YUP12
never never NN 147993DD1C94A6AC UP YUP13
never never NY 147995320C696CE0 UP YUP22
never never NN 1479941C17ACA5B8 UP YUP23
never never NY 147994F310C5AAE8 UP YUP24
never never NY 1479955A16491B58 UP YUP25
never never NY 147994EF04A4F7C4 UP YUP29
never never NY 14799559148240A8 UP YUP39
never never NY 1479955B0532D7CC UP YUP40
never never NY 147994F01D3914F0 UP YUP44
never never NY 1482604801ADA634 UP YUP45
never never NY 147994F3031659C0 UP YUP46
never never NY 1484B7781DA22CD0 UP YUP77
never never YY 17B6B00315F39DDC UU YUU1031 RS2000003356123340
never never YY 1834A47C0B438F4F UU YUU1031 RS200000805A32BB72
never never NY 17C9B49A131A4C55 VP VP0010 VIP0000008
never never NN 1512802709B816B8 VP VP7010
never never NN 155248551FB50E4A VP VP7010 19950202135945S101702A041692
never never NY 1617CF331E004DB6 VP VP7400 19980713121941S101702Z382775
never never NY 1607ADD71D1138A6 VP VP7410 19980401210424S101702Z367944
never never NY 1607CADA05853684 VP VP7410 19980402142025S101702A071473
never never NY 15D93E480C064AA9 VP VP7411 19970610075226S101702Z315459
never never NY 15D9426501AF1929 VP VP7411 19970610101931S101702Z315459
never never NY 15D94CBB10162BDF VP VP7411 19970610162936S101702Z315459
never never NN 158B81171BDDD332 VP VP9997 19960201S101702A051690AVP999
never never NN 157E4AE3037CD542 VP VP9998 19951109S101702A049426AVP999
never never NN 157EECE7015F7B66 VP VP9998 19951113S101702Z218537AVP999
never never NN 157F0C9702D3D7DE VP VP9998 19951114S101702Z218682AVP999
never never NN 156967950CC44BFC VP VP9999 19950629S101702A045771AVP999
never never NY 1599CDF01295F890 VP YVP7401 19960502160759S101702A05381
never never NY 159CEA3C0D873370 VP YVP7401 19960522110824S101702Z24949
never never NY 159D3CFB0757F72E VP YVP7401 19960524122955S101702Z24986
never never NY 15A10496004B9CC8 VP YVP7401 19960617134246S101702Z25309
never never NY 15A1318C059543A2 VP YVP7401 19960618163029S101702Z25353
never never NY 15A1A21B1763E4D0 VP YVP7401 19960621113929S101702Z25415
never never NY 15A1A74E02F15284 VP YVP7401 19960621144555S101702Z25422
never never NY 15A2984B14FEB1B4 VP YVP7401 19960627143107S101702A05535
never never NY 15BDC0ED079BF8B8 VP YVP7401 19961217095521S101702Z28420
never never NY 15BDCA381CA9429E VP YVP7401 19961217152842S101702Z28436
never never NY 15CC3EC608583F7C VP YVP7401 19970319145619S101702Z30252
never never NY 15D09D3D13A79E36 VP YVP7401 19970416100659S101702Z30653
never never NY 15D0A8331151FAD2 VP YVP7401 19970416164056S101702Z30663
never never NY 15D55D9804A2483B VP YVP7401 19970516154226S101702A06401
never never NY 1601549705449EEC VP YVP7401 19980220093422S101702Z36099
never never NY 16024C15126C415A VP YVP7401 19980226131233S101702A07066
never never NY 1599CDF20F6371B6 VP YVP7402 19960502160803S101702A05381
never never NY 159CEA3C0D6A65F8 VP YVP7402 19960522110825S101702Z24949
never never NY 159D3CFB088BBEC4 VP YVP7402 19960524122955S101702Z24986
never never NY 15A10496003409D0 VP YVP7402 19960617134247S101702Z25309
never never NY 15A1318C0A0CD842 VP YVP7402 19960618163031S101702Z25353
never never NY 15A1A21C02CDA2EC VP YVP7402 19960621113930S101702Z25415
never never NY 15A1A74E00B1B76C VP YVP7402 19960621144555S101702Z25422
never never NY 15A2984C0A211D02 VP YVP7402 19960627143109S101702A05535
never never NY 15D0A83307B256E2 VP YVP7402 19970416164056S101702Z30663
never never NY 15D55DA61697C01F VP YVP7402 19970516154445S101702A06401
never never NN 1599CDF30B1FE6EE VP YVP7403 19960502160807S101702A05381
never never NN 159CEA3C0D6E6FF8 VP YVP7403 19960522110825S101702Z24949
never never NN 159D3CFB078F564A VP YVP7403 19960524122957S101702Z24986
never never NN 15A1049609914F8E VP YVP7403 19960617134248S101702Z25309
never never NN 15A1318C0CD88C7C VP YVP7403 19960618163032S101702Z25353
never never NN 15A1A21B177412AC VP YVP7403 19960621113930S101702Z25415
never never NN 15A1A74E01673934 VP YVP7403 19960621144556S101702Z25422
never never NN 15A2985015593642 VP YVP7403 19960627143112S101702A05535
never never NY 15D0A833074CC22E VP YVP7403 19970416164057S101702Z30663
never never NY 15D55DA6142B8F3A VP YVP7403 19970516154446S101702A06401
never never NY 15D8A44E1ED3A997 VP YVP7403 19970606120106S101702Z31510
never never NY 15DAB2DF150FD718 VP YVP7403 19970619140749S101702A06479
never never NN 1514B9300974D096 VP YVPUP01
never never NN 151B4E370A08F98C VP YVPUP01 19940217182915S101702A03124
never never NN 153F9E61006D51BE VP YVPUP01 19941006195313S101702A03798
never never NN 157353FB027A7168 VP YVPUP01 19950831S101702A047391AYVPU
never never NN 1579956306FFFC26 VP YVPUP01 19951010S101702Z212033AYVPU
never never NN 157AFCC21A2579D8 VP YVPUP01 19951019S101702A048565AYVPU
never never NN 157F6A4D1C370E08 VP YVPUP01 19951116S101702A049627AYVPU
never never NN 158169A5024C3084 VP YVPUP01 19951129S101702Z221857AYVPU
never never NN 158197F31F69DD0A VP YVPUP01 19951130S101702A050037AYVPU
never never NN 1582B2B214C1345E VP YVPUP01 19951207S101702A050228AYVPU
never never NN 15871B4E0DF5CBD2 VP YVPUP01 19960104S101702A050753AYVPU
never never NN 158A6445045C2762 VP YVPUP01 19960125S101702A051459AYVPU
never never NN 159450A70A94D942 VP YVPUP01 19960328175023S101702A05306
never never NN 15A3B6F90592C158 VP YVPUP01 19960704173144S101702A05552
never never NN 15A3CF04138EC020 VP YVPUP01 19960705075226S101702A05552
never never NN 15AD97B41F0D6020 VP YVPUP01 19960905135845S101702A05681
never never NY 152648AF171340AA VT VT0610 19940428145845S101702A033858
never never NY 154749780BC6A590 VT VT0610 19941124145522S101702A039698
never never NY 154497E90E66A334 VT VT0610 E
never never NY 17CBF5331866DD2B VT VT0880 VTX0000018
never never NY 1556B723175BD380 VT VT5040 19950302185840S101702A042571
never never NY 15866F3A132A56DA VT VT5040 19951231S101702Z227061AVT504
never never NY 15B317C918193170 VT VT5040 19961010135459S101702A057724
never never NY 15CC69A406A0EA08 VT VT5040 19970320162702S101702M000778
never never NN 154DE2241478A896 VT VT5120 19950105141216S101702A040864
never never NN 1583C9CB11900060 VT VT5120 19951214S101702M000648AVT512
never never NY 15F702E511F0579A VT VT5120 19971216174425S101702A069201
never never NY 155E23AD0E233A82 VT VT5121 19950419S101702A043804AVT512
never never NY 155F335706E117E2 VT VT5121 19950425S101702A043947AVT512
never never NY 16015A8217DF2D9A VT VT7798 19980220130604S101702A070613
never never NN 15971E9A09A0A7E4 VT VT7799 19960415140717S101702A053434
never never NN 15BD2F760F7FA550 VT VT7799 19961213190927S101702A059882
never never NY 154A189804D12E02 VT VT8111 19941212115358S101702A040321
never never NY 17C8CE340910B334 VT YVT0502 VTX000001856AA212B
never never NY 17C69BE81B4F8BD8 VT YVT0509 VTX00000185697B44F
never never NY 17C8CE380303CEF7 VT YVT0531 VTX000001856AA214A
never never NY 17C781E80C5F8056 VT YVT0532 VTX0000018569F3DAA
never never NY 162BC7DF199DB45D VT YVT0578 A15S000165
never never NY 151A387A0453DB72 VT YVT0621
never never NY 15F632E71A202A58 VT YVT0623 19971211133922S101702M00088
never never NY 1600E51A09713ACA VT YVT0623 19980217150354S101702A07053
never never NY 1603676C1DE4B288 VT YVT0623 19980305141315S101702A07082
never never NY 150F2EEB09ED3F46 VT YVT0731
never never NY 154B339C0D6B7386 VT YVT0731 19941219124226S101702A04059
never never NY 15501662082F0A76 VT YVT0731 19950119144820S101702M00055
never never NY 1564FD760273645E VT YVT0731 19950601S101702M000585AYVT0
never never NY 156A7E0601447D9C VT YVT0731 19950706S101702A045888AYVT0
never never NY 1589C8221820A6F2 VT YVT0731 19960121S101702Z230461AYVT0
never never NY 158BAECA1098B8CC VT YVT0731 19960202S101702A051729AYVT0
never never NY 158C4F720B399F60 VT YVT0731 19960206S101702A051780AYVT0
never never NY 15BC8C2C0CD313E6 VT YVT0731 19961209174331S101702A05946
never never NY 15BD2F630FF8FB34 VT YVT0731 19961213190527S101702A05988
never never NY 15C6E71918B02712 VT YVT0731 19970213150302S101702A06173
never never NY 15E264C30EFA3C52 VT YVT0731 19970807131116S101702A06567
never never NY 15E30C4206896AFA VT YVT0731 19970811170742S101702A06585
never never NY 15E815801931476C VT YVT0731 19970912181134S101702A06679
never never NY 1602F2DA1ED90E10 VT YVT0731 19980302164021S101702A07077
never never NY 151167F21A9EC93C VT YVT0801
never never NY 151B49D716061078 VT YVT0801 19940217154745S101702A03163
never never NY 151F3DA8056C651E VT YVT0801 19940314192641S101702A03247
never never NY 151F85EA15962870 VT YVT0801 19940316143208S101702A03254
never never NY 151F8D3310C943E0 VT YVT0801 19940316185331S101702A03254
never never NY 1521B8FF047DD074 VT YVT0801 19940330142350S101702A03294
never never NY 152765100F8EC68A VT YVT0801 19940505163017S101702A03405
never never NY 1532630B1E5EF83A VT YVT0801 19940714151204S101702A03571
never never NY 153268040C52A18E VT YVT0801 19940714180856S101702A03571
never never NY 1543D0BE16E4C33C VT YVT0801 19941102124425S101702A03886
never never NY 15497C4A1328B086 VT YVT0801 19941208143554S101702A04023
never never NY 15497D7816B01A00 VT YVT0801 19941208151811S101702A04023
never never NY 154DE3351054ED0E VT YVT0801 19950105144958S101702A04100
never never NY 154EFD9004A9F75A VT YVT0801 19950112151630S101702A04123
never never NY 1559FA041D3E829E VT YVT0801 19950323125517S101702A04310
never never NY 1564FD8016ED3154 VT YVT0801 19950601S101702M000585AYVT0
never never NY 1566161301779178 VT YVT0801 19950608S101702A045087AYVT0
never never NY 156A7E1006163068 VT YVT0801 19950706S101702A045888AYVT0
never never NY 158A427E1ED0C40E VT YVT0801 19960124S101702A051425AYVT0
never never NY 158AF8A91259FB0A VT YVT0801 19960129S101702Z231662AYVT0
never never NY 158BAECF0EC0E0B4 VT YVT0801 19960202S101702A051729AYVT0
never never NY 158C4F7A1AF83DE2 VT YVT0801 19960206S101702A051780AYVT0
never never NY 159BD8E91746E942 VT YVT0801 19960515160336S101702M00068
never never NY 159CCA700B404E28 VT YVT0801 19960521160919S101702A05432
never never NY 15A06B3C14F086B0 VT YVT0801 19960613181338S101702A05497
never never NY 15AD9A3A0EAA4FDE VT YVT0801 19960905152954S101702M00071
never never NY 15C3990D0D92AB94 VT YVT0801 19970123142207S101702A06113
never never NY 15CB7D4918717AA4 VT YVT0801 19970314192907S101702A06247
never never NY 15CF2E1205598D60 VT YVT0801 19970407070548S101702Z30474
never never NY 15CFB353118ADEC8 VT YVT0801 19970410142923S101702A06307
never never NY 15CFB409160573D2 VT YVT0801 19970410150032S101702A06307
never never NY 15E382E2015202DC VT YVT0801 19970814154725S101702M00082
never never NY 15EC79A71C8C574C VT YVT0801 19971010164615S101702A06742
never never NY 15F519F008403907 VT YVT0801 19971204140206S101702A06875
never never NY 160019EC1FF75B36 VT YVT0801 19980212134230S101702A07037
never never NY 161730AB0956819E VT YVT0801 19980709133842S101702M00092
never never NY 168C73FD190C1934 VT YVT0801 A15S000580
never never NY 151F57E409DC6F5E VT YVT0801 E
never never NY 151167F2082DF054 VT YVT0802
never never NY 151B49D71BD9A654 VT YVT0802 19940217154748S101702A03163
never never NY 151F3DA71F6D9FE8 VT YVT0802 19940314192641S101702A03247
never never NY 151F85EA067B94C8 VT YVT0802 19940316143210S101702A03254
never never NY 151F8D3303E875A6 VT YVT0802 19940316185332S101702A03254
never never NY 1521B8D90840D54A VT YVT0802 19940330142123S101702A03294
never never NY 1527650F0B9AB1A8 VT YVT0802 19940505163025S101702A03405
never never NY 153263100A2FA6B6 VT YVT0802 19940714151204S101702A03571
never never NY 153268021EC80C7A VT YVT0802 19940714180857S101702A03571
never never NY 1543D0BE00973E80 VT YVT0802 19941102124425S101702A03886
never never NY 154DE3370FA864F2 VT YVT0802 19950105144959S101702A04100
never never NY 1564FD800EC77C0C VT YVT0802 19950601S101702M000585AYVT0
never never NY 156A7E0F11983E0C VT YVT0802 19950706S101702A045888AYVT0
never never NY 158A427E078D09DA VT YVT0802 19960124S101702A051425AYVT0
never never NY 158AF8AF1A839964 VT YVT0802 19960129S101702Z231662AYVT0
never never NY 158BAECE07873230 VT YVT0802 19960202S101702A051729AYVT0
never never NY 158C4F7A0521DBAE VT YVT0802 19960206S101702A051780AYVT0
never never NY 159BD8E91276E922 VT YVT0802 19960515160337S101702M00068
never never NY 15AD9A421B9BB98E VT YVT0802 19960905152955S101702M00071
never never NY 15CFB34E05C0222A VT YVT0802 19970410142924S101702A06307
never never NY 15CFB419075426C8 VT YVT0802 19970410150032S101702A06307
never never NY 15E382DD11F6E216 VT YVT0802 19970814154725S101702M00082
never never NY 160019D30AB33018 VT YVT0802 19980212134231S101702A07037
never never NY 161730801C26F4E8 VT YVT0802 19980709133842S101702M00092
never never NY 168C74290A93E9A8 VT YVT0802 A15S000580
never never NY 151F57F0019B2BC6 VT YVT0802 E
never never NY 151167F301E63D04 VT YVT0803
never never NY 151B49D9182F3226 VT YVT0803 19940217154750S101702A03163
never never NY 151F3DB9078B116C VT YVT0803 19940314192642S101702A03247
never never NY 151F85EC07C69C6A VT YVT0803 19940316143212S101702A03254
never never NY 151F8D3318B1099A VT YVT0803 19940316185334S101702A03254
never never NY 1521B8EE06BAE01A VT YVT0803 19940330142140S101702A03294
never never NY 15276558190C8AC0 VT YVT0803 19940505163031S101702A03405
never never NY 1532631308016C84 VT YVT0803 19940714151205S101702A03571
never never NY 153268041C688CBA VT YVT0803 19940714180857S101702A03571
never never NY 1534726C1D44C7F6 VT YVT0803 19940727175006S101702A03616
never never NY 15390002019E845E VT YVT0803 19940825170749S101702A03678
never never NY 154DE32B1E02D892 VT YVT0803 19950105144947S101702A04100
never never NY 1564FD80149CD4F6 VT YVT0803 19950601S101702M000585AYVT0
never never NY 156A7E100EC37A26 VT YVT0803 19950706S101702A045888AYVT0
never never NY 159BD8EA001206AC VT YVT0803 19960515160337S101702M00068
never never NY 159CCA6F18108A06 VT YVT0803 19960521160920S101702A05432
never never NY 15A06B350583AD68 VT YVT0803 19960613181234S101702A05497
never never NY 15AD9A4E022D9AA4 VT YVT0803 19960905152956S101702M00071
never never NY 15CFB35107B67EC4 VT YVT0803 19970410142925S101702A06307
never never NY 15CFB4170ECF7042 VT YVT0803 19970410150033S101702A06307
never never NY 15E382C0163F7B1C VT YVT0803 19970814154726S101702M00082
never never NY 160019E512F6EE4E VT YVT0803 19980212134231S101702A07037
never never NY 161730800070367C VT YVT0803 19980709133843S101702M00092
never never NY 168C74410EEC7819 VT YVT0803 A15S000580
never never NY 151167F3182FEEBC VT YVT0804
never never NY 151B49D818EF38C0 VT YVT0804 19940217154640S101702A03163
never never NY 151F3DB91576AAE0 VT YVT0804 19940314192643S101702A03247
never never NY 151F8D340CA235C4 VT YVT0804 19940316185336S101702A03254
never never NY 1521B8F21B501AFC VT YVT0804 19940330142205S101702A03294
never never NY 152765590A4BDFBE VT YVT0804 19940505162908S101702A03405
never never NY 153263170E2CCDDE VT YVT0804 19940714151207S101702A03571
never never NY 1532680506F7152A VT YVT0804 19940714180858S101702A03571
never never NY 1543D0BF068D70FA VT YVT0804 19941102124426S101702A03886
never never NY 15497C480CACA22C VT YVT0804 19941208143556S101702A04023
never never NY 15497D7B1C930560 VT YVT0804 19941208151812S101702A04023
never never NY 154DE3311099A1EA VT YVT0804 19950105144951S101702A04100
never never NY 1564FD801BF9B964 VT YVT0804 19950601S101702M000585AYVT0
never never NY 1566161917C58550 VT YVT0804 19950608S101702A045087AYVT0
never never NY 156A7E101B77CB20 VT YVT0804 19950706S101702A045888AYVT0
never never NY 156B95EA08A027C2 VT YVT0804 19950713S101702A046105AYVT0
never never NY 158A427F02468704 VT YVT0804 19960124S101702A051425AYVT0
never never NY 158AF8A9170F1906 VT YVT0804 19960129S101702Z231662AYVT0
never never NY 158BAED00D3E36B8 VT YVT0804 19960202S101702A051729AYVT0
never never NY 158C4F7803623030 VT YVT0804 19960206S101702A051780AYVT0
never never NY 159216F7145D1A62 VT YVT0804 19960314140008S101702A05261
never never NY 159BD8E91A76C142 VT YVT0804 19960515160338S101702M00068
never never NY 159CCA7007A01F1A VT YVT0804 19960521160920S101702A05432
never never NY 15A06B38171D1E2E VT YVT0804 19960613181241S101702A05497
never never NY 15AD9A4E15D9DE38 VT YVT0804 19960905152957S101702M00071
never never NY 15CA63A517886942 VT YVT0804 19970307192828S101702A06202
never never NY 15CB7D4919482A6A VT YVT0804 19970314192907S101702A06247
never never NY 15CFB35318BC762C VT YVT0804 19970410142926S101702A06307
never never NY 15CFB41B0821A076 VT YVT0804 19970410150033S101702A06307
never never NY 15D973741C1B58BF VT YVT0804 19970611153558S101702A06461
never never NY 15E382C10B37C3C8 VT YVT0804 19970814154726S101702M00082
never never NY 15F519F0033FBB0B VT YVT0804 19971204140207S101702A06875
never never NY 160019EE11A19D82 VT YVT0804 19980212134232S101702A07037
never never NY 161730940E2E180A VT YVT0804 19980709133843S101702M00092
never never NY 168C745A0BB457AC VT YVT0804 A15S000580
never never NY 151F580D128061FE VT YVT0804 E
never never NY 151167F30FFD6E5E VT YVT0805
never never NY 151B49D70F130978 VT YVT0805 19940217154651S101702A03163
never never NY 151F3DB9010A3E12 VT YVT0805 19940314192644S101702A03247
never never NY 151F8D34014479DA VT YVT0805 19940316185339S101702A03254
never never NY 1521B8E8085CBB4E VT YVT0805 19940330142220S101702A03294
never never NY 1527650D1A1AF54E VT YVT0805 19940505162933S101702A03405
never never NY 1532631609CD1058 VT YVT0805 19940714151209S101702A03571
never never NY 1532680406319AE8 VT YVT0805 19940714180859S101702A03571
never never NY 1543D0BF16B2C2C8 VT YVT0805 19941102124427S101702A03886
never never NY 154515E6087794AC VT YVT0805 19941110143933S101702A03929
never never NY 15497C4808095D7A VT YVT0805 19941208143559S101702A04023
never never NY 15497D76024B2922 VT YVT0805 19941208151813S101702A04023
never never NY 154DE33203B18D42 VT YVT0805 19950105144952S101702A04100
never never NY 1564FD4E16C9FEEA VT YVT0805 19950601S101702M000585AYVT0
never never NY 1566161912B6D9AC VT YVT0805 19950608S101702A045087AYVT0
never never NY 156A7E1613FB30BC VT YVT0805 19950706S101702A045888AYVT0
never never NY 156B95EA0A9D9796 VT YVT0805 19950713S101702A046105AYVT0
never never NY 158A427F0425C056 VT YVT0805 19960124S101702A051425AYVT0
never never NY 158AF8A915D62672 VT YVT0805 19960129S101702Z231662AYVT0
never never NY 158BAECA115701BA VT YVT0805 19960202S101702A051729AYVT0
never never NY 158C4F7A1D4FE978 VT YVT0805 19960206S101702A051780AYVT0
never never NY 159BD8E91A6DD730 VT YVT0805 19960515160338S101702M00068
never never NY 159CCA700B855802 VT YVT0805 19960521160921S101702A05432
never never NY 15A06B39098F74D4 VT YVT0805 19960613181244S101702A05497
never never NY 15AD9A4E0209F674 VT YVT0805 19960905152957S101702M00071
never never NY 15C3990C1525D7B0 VT YVT0805 19970123142208S101702A06113
never never NY 15CB7D42171BD266 VT YVT0805 19970314192907S101702A06247
never never NY 15CF2E241C539C4C VT YVT0805 19970407070836S101702Z30474
never never NY 15CFB3531C685870 VT YVT0805 19970410142928S101702A06307
never never NY 15CFB41B08548766 VT YVT0805 19970410150034S101702A06307
never never NY 15E382C10095F005 VT YVT0805 19970814154727S101702M00082
never never NY 15EC79A71BD9AF62 VT YVT0805 19971010164616S101702A06742
never never NY 15F519EE12129F24 VT YVT0805 19971204140208S101702A06875
never never NY 160019D61D647340 VT YVT0805 19980212134233S101702A07037
never never NY 168C746B1B41CD4F VT YVT0805 A15S000580
never never NY 151167F115294F90 VT YVT0806
never never NY 151B49D402FBBAD0 VT YVT0806 19940217154655S101702A03163
never never NY 151F3DA81FA2E514 VT YVT0806 19940314192645S101702A03247
never never NY 151F8D330B00D164 VT YVT0806 19940316185341S101702A03254
never never NY 1521B8F21338139A VT YVT0806 19940330142237S101702A03294
never never NY 1527650A13CEF8D8 VT YVT0806 19940505162943S101702A03405
never never NY 15326314054EDF8E VT YVT0806 19940714151210S101702A03571
never never NY 1532680113147860 VT YVT0806 19940714180900S101702A03571
never never NY 1543D0BA08B15AB0 VT YVT0806 19941102124427S101702A03886
never never NY 154DE33016B22D14 VT YVT0806 19950105144954S101702A04100
never never NY 1564FD4E0732905E VT YVT0806 19950601S101702M000585AYVT0
never never NY 156A7E1417B25068 VT YVT0806 19950706S101702A045888AYVT0
never never NY 158A427E0779BADE VT YVT0806 19960124S101702A051425AYVT0
never never NY 158AF8A90424481C VT YVT0806 19960129S101702Z231662AYVT0
never never NY 158BAEC900A69648 VT YVT0806 19960202S101702A051729AYVT0
never never NY 158C4F78162BA110 VT YVT0806 19960206S101702A051780AYVT0
never never NY 159BD8E90AEE3370 VT YVT0806 19960515160339S101702M00068
never never NY 15AD9A4E19CABBC4 VT YVT0806 19960905152958S101702M00071
never never NY 15CFB348092330CA VT YVT0806 19970410142929S101702A06307
never never NY 15CFB41914658DD2 VT YVT0806 19970410150034S101702A06307
never never NY 15E382BB085D17A0 VT YVT0806 19970814154727S101702M00082
never never NY 160019D31B3E770A VT YVT0806 19980212134234S101702A07037
never never NY 1617308C1BE4ECD0 VT YVT0806 19980709133843S101702M00092
never never NY 168C747A0EA27E53 VT YVT0806 A15S000580
never never NY 151F5836043B2772 VT YVT0806 E
never never NY 151167F21394F46C VT YVT0809
never never NY 151B49C0160501DC VT YVT0809 19940217154709S101702A03163
never never NY 151F3DB212A2172C VT YVT0809 19940314192648S101702A03247
never never NY 151F8D340B69B194 VT YVT0809 19940316185345S101702A03254
never never NY 15326304167ADF4A VT YVT0809 19940714151212S101702A03571
never never NY 1532680317030674 VT YVT0809 19940714180901S101702A03571
never never NY 1543D0BD00911A6C VT YVT0809 19941102124430S101702A03886
never never NY 1564FD4E1A2F31C8 VT YVT0809 19950601S101702M000585AYVT0
never never NY 156A7E16035F0B54 VT YVT0809 19950706S101702A045888AYVT0
never never NY 158A427906FEB542 VT YVT0809 19960124S101702A051425AYVT0
never never NY 158AF8A90968A7F4 VT YVT0809 19960129S101702Z231662AYVT0
never never NY 158BAEC9115B6D92 VT YVT0809 19960202S101702A051729AYVT0
never never NY 158C4F7818D4A974 VT YVT0809 19960206S101702A051780AYVT0
never never NY 159BD8E91EF73524 VT YVT0809 19960515160340S101702M00068
never never NY 15AB64B80FA255C4 VT YVT0809 19960822140730S101702A05660
never never NY 15BC8C291817E13A VT YVT0809 19961209174336S101702A05946
never never NY 15CFB351077266DE VT YVT0809 19970410142932S101702A06307
never never NY 15CFB4180B65C8E8 VT YVT0809 19970410150035S101702A06307
never never NY 160019D40DB6C90E VT YVT0809 19980212134236S101702A07037
never never NY 168C748E1E285220 VT YVT0809 A15S000580
never never NY 151F584D0DC93DDA VT YVT0809 E
never never NY 1608DFED0F9383F0 VT YVTAFS 19980409113931S101702Z369138
never never NY 160A02D8132033DA VT YVTAFS 19980416170514S101702M000874
never never NY 161730AB10D4FA25 VT YVTAFS 19980709134007S101702M000924
never never NY 17C8CE2E12FE63E1 VT YVTBRVI VTX000001856AA20FB
never never NY 17C8CE300E0C8C95 VT YVTCSFP VTX000001856AA210A
never never NY 17C82ABA1E5F7FD6 VT YVTDTEX VTX000001856A4C5D9
never never NY 17C8CE330A2F30E4 VT YVTVWAH VTX000001856AA2122
never never NY 182EABED0294473C VV YVV3EIP VDPS0001175A00A470MVS
never never NY 182F9C221FDE5EE7 VV YVV3EIP VDPS0001565A0883F9
never never NY 1839C8CC1C6F775C VV YVV5070 VDPS0001185A5DDB5D
never never NY 1839C8CE0226FFCB VV YVV5070 VDPS0001185A5DDB5DMVS
never never NY 1818F6A70CA1DDDA VV YVVZZ03 VDPS000114594A9918
never never NY 1818F6A91C005510 VV YVVZZ03 VDPS000114594A9918MVS
never never NY 1818A62301D79BDE VV YVVZZ05 VDPS0001145947F5B1
never never NY 182945060695701C VV YVVZZ05 VDPS00011759D36248
never never NY 1817FCDE0AFE5034 VV YVVZZ06 VDPS000114594269AF
never never NY 1817FCE01221E055 VV YVVZZ06 VDPS000114594269AFMVS
never never NY 18323C010807FF93 VV YVVZZ06 VDPS0001185A1E8803
never never NY 18323C020C81B3B0 VV YVVZZ06 VDPS0001185A1E8803MVS
never never NY 1817FCE215EA8AB4 VV YVVZZ08 VDPS000114594269CD
never never NY 1804111808DEE720 VV YVVZZ09 VDPS000099589B3FC8
never never NY 1817FD1312680083 VV YVVZZ09 VDPS00011459426A6C
never never NY 1819E37A0A3D4D73 VV YVVZZ10 VDPS00011459525BC8
never never NY 182B298A17F6EC10 VV YVVZZ10 VDPS00011759E342BE
never never NY 1817FCF00ECB7A76 VV YVVZZ12 VDPS00011459426A35
never never NY 1828FA5818A8DE7F VV YVVZZ12 VDPS00011759D0EFDA
never never NY 1818A62618BBB2BD VV YVVZZ14 VDPS0001145947F5C7
never never NY 1829251F0FF55B60 VV YVVZZ14 VDPS00011759D2568E
never never NY 1817FCEE177F3F8F VV YVVZZ15 VDPS00011459426A38
never never NY 1817FD05055D36EA VV YVVZZ16 VDPS00011459426A5D
never never NY 1818A62909607400 VV YVVZZ17 VDPS0001145947F5E0
never never NY 1818A62E01FEDFEC VV YVVZZ18 VDPS0001145947F613
never never NY 18323C130B079199 VV YVVZZ18 VDPS0001185A1E8884MVS
never never NY 182A3D771779844D VV YVVZZ19 VDPS00011759DB8665
never never NY 1817FCF60EFC4EE7 VV YVVZZ1R VDPS00011459426A3E
never never NY 1817FCF81A6CA2F5 VV YVVZZ1R VDPS00011459426A3EMVS
never never NY 17EC00610CDDA6EE VV YVVZZ21 VDPS00008557D16DF0
never never NY 1817FCFB138C4181 VV YVVZZ21 VDPS00011459426A44
never never NY 18323C120E6EB3AA VV YVVZZ21 VDPS0001185A1E8890
never never NY 182C6A7D16D97808 VV YVVZZ22 VDPS00011759EDC6D8
never never NY 1817FD1A001F3682 VV YVVZZ23 VDPS00011459426A7F
never never NY 1817FD131A8F8416 VV YVVZZ24 VDPS00011459426A82
never never NY 1818A639100255AA VV YVVZZ25 VDPS0001145947F674
never never NY 18187F291509B956 VV YVVZZ27 VDPS0001145946AEC8
never never NY 182A3D971C7EE783 VV YVVZZ27 VDPS00011759DB8776
never never NY 182C6A8B06A2819C VV YVVZZ28 VDPS00011759EDC6FA
never never NY 18323C150D65093D VV YVVZZ28 VDPS0001185A1E88A3
never never NY 1818A65311203A6D VV YVVZZ29 VDPS0001145947F759
never never NY 18031C780A9949A5 VV YVVZZ2R VDPS00009958933BBC
never never NY 1818A5E90E58899E VV YVVZZ2R VDPS0001145947F3D5
never never NY 1818A5EB0F577762 VV YVVZZ2R VDPS0001145947F3D5MVS
never never NY 1827DFD71198F6BD VV YVVZZ2R VDPS00011759C7AE13
never never NY 1827DFD9138D6180 VV YVVZZ2R VDPS00011759C7AE13MVS
never never NY 1817FCD6016D695B VV YVVZZ30 VDPS00011459426994
never never NY 182E092916DB03BC VV YVVZZ33 VDPS00011759FB4F83
never never NY 1818A5FB15580267 VV YVVZZ3R VDPS0001145947F471
never never NY 1802F9F208BF7192 VV YVVZZAR VDPS00009958921A13
never never NY 1817FD091EFE99EF VV YVVZZAR VDPS00011459426A66
never never NY 1818A63D016125C2 VV YVVZZFR VDPS0001145947F698
never never NY 1818A63E1CC30975 VV YVVZZFR VDPS0001145947F698MVS
never never NY 1839C8C705CF8A34 VV YVVZZFR VDPS0001185A5DDA78
never never NY 1839C8C80A3F1F11 VV YVVZZFR VDPS0001185A5DDA78MVS
never never NY 17EB5DF512B23666 VV YVVZZJR VDPS00008557CC1B89
never never NY 1817FD050487DB67 VV YVVZZJR VDPS00011459426A61
never never NY 1819BDEF0D59DC76 VV YVVZZQR VDPS000114595120D5
never never NY 18191FF417ACD960 VW YVWB641 WSTS000055594BF359
never never NY 1718A64005AF56B3 WA WK9000 A06M012041
never never NN 16E8FBC10538DE3D WA YWAPOS A06M012041
never never NN 16E8FBC50FF62CAD WA YWAPOSA A06M012041
never never NY 14E32D111A7F9F68 WB WB0030
never never NY 183B0AFE127AF46F WB WB0060 TOFF000122
never never NY 1811E2AE175B2CC1 WB WB0720 WS8B000411
never never NY 1815CC480293D5DB WB WB0720 WS8B000441
never never NY 18204E3909DF90A3 WB WB0720 WS8B000443
never never NY 1819E9A9036D132C WB WB0720 WS8B000468
never never NY 182E80520C69CC67 WB WB0720 WS8B000471
never never NY 181A605D1B799562 WB WB0720 WS8B000473
never never NY 182534A4088C0901 WB WB0720 WS8B000476
never never NY 182508AB0597AC3B WB WB0720 WS8B000493
never never NY 1833F78D18A8D0E6 WB WB0720 WS8B000524
never never NY 182F9C560D102D32 WB WB0720 WS8B000535
never never NY 182FE88D08916620 WB WB0720 WS8B000540
never never NY 1830B3B418B55676 WB WB0720 WS8B000548
never never NY 182264E5128DA89A WB WB0720 WS8I000307
never never NY 161750120ECA5E5A WB WB1010 19980710082854S101702A073636
never never NY 18031B5C10E2794F WB WB1060 WSTS000046
never never NY 17C993CF04790E4D WB WB1140 WSTS000025
never never NY 17C0A358070D962E WB WB1140 WSTS000032
never never NY 17D3A36414AF8130 WB WB1140 WSTS000035
never never NY 17E6562F0079A811 WB WB1140 WSTS000039
never never NY 17D7161C06E6BFAE WB WB1280 TOFF000059
never never NY 17CD0AEF050D4C36 WB WB1280 WS8B000188
never never NY 18031B4A0412385B WB WB1350 WSTS000046
never never NY 17E656D80CA4C2AB WB WB5320 TOFF000067
never never NY 183AC1E616B3A958 WB WB7030 WSTS000061
never never NY 160D4EF80F3B0F44 WB WB7430 19980507164320S101702A072243
never never NY 159A1DE21F3ED35A WB WB7460 19960504154757S101702A053306
never never NY 15CFB55412A35ABA WB WB7490 19970410154641S101702A063035
never never NY 160D4EF81F5FD208 WB WB7530 19980507164321S101702A072243
never never NY 15EE81370B064606 WB WB7580 19971023144206S101702A067639
never never NY 15FCCEDD0C7772C8 WB WB7580 19980122145713S101702A069894
never never NY 17D7162D047FE477 WB WB7720 TOFF000059
never never NY 181DF5A510135A87 WB WB7720 TOFF000109
never never NY 183AC1D402AA64E6 WB WB8720 WSTS000061
never never NY 1618F1011CA15BC4 WB WB9993 A06M000357
never never NN 14E0F99F08B8A78A WB YWB5012
never never NN 14E0F9A010F87214 WB YWB5013
never never NY 1540B336191D323E WB YWB5901 19941013170117S101702A03798
never never NY 159A1DCA139F52F2 WB YWB5901 19960504154552S101702A05330
never never NY 17ECA3510D42101C WB YWB709 WS8B00031857D6C4E1
never never AY 183578830C7FFDAC WB YWBWRK WS8B0005185A39AE0E
never never NY 15FBE54C00E0778E WB YYWBBPU 19980116193842S101702A06966
never never NY 181B491D188A5C56 WC WC7100 OTXO000070
never never NY 183AC1EA171EFCC6 WC WC7102 WSTS000061
never never NY 183AC1D61D3CB858 WC WC7103 WSTS000061
never never NY 181B492D0C2A296B WC WC7104 OTXO000070
never never NY 181B49310388ED64 WC WC7105 OTXO000070
never never NY 181B493117F6065C WC WC7106 OTXO000070
never never NY 181C62A911B5737E WC WC7108 OTXO000070
never never NY 181C62AA0A829F61 WC WC7109 OTXO000070
never never NY 181B494518030B67 WC WC7400 OTXO000070
never never NY 181B4948181A9F77 WC WC7402 OTXO000070
never never NY 181B49491627AA7C WC WC7403 OTXO000070
never never NY 181C62AB0FC25C60 WC WC7404 OTXO000070
never never NY 181C62AC058006DA WC WC7405 OTXO000070
never never NY 183AC2050E9A7F8F WC WC8402 WSTS000061
never never NY 183AC1F61168ED96 WC WC8403 WSTS000061
never never NY 15D532B813FF3C80 WF WF8010 19970515140836S101702A063893
never never NY 15D5368918C3FE2D WF WF8010 19970515162454S101702A063893
never never NY 15DF1AD70559923A WF WF8010 19970717145832S101702A065379
never never NY 1834276301104AED WF YWFM537 WSSW0001055A2EA204
never never AY 18321BFB0A765B6C WI YWI5951 WS8I0003205A1D7B52
never never AY 18321C03017AC1B3 WI YWI5952 WS8I0003205A1D7B91
never never AY 18321C0B10F3220E WI YWI5953 WS8I0003205A1D7BD6
never never AY 18321C131CD549AE WI YWI5954 WS8I0003205A1D7C0C
never never AY 18321C20177E9087 WI YWI5955 WS8I0003205A1D7C47
never never AY 18321C2706DF01FA WI YWI5956 WS8I0003205A1D7C79
never never AY 18321C890BF8FB5B WI YWI5957 WS8I0003205A1D7FF7
never never AY 18321C910F99CEC1 WI YWI5958 WS8I0003205A1D8033
never never AY 18321C9A01B820C1 WI YWI5959 WS8I0003205A1D8082
never never AY 18321BEE1FDE7A75 WI YWI595A WS8I0003205A1D7AEA
never never NN 165361EE15ACF46D WI YWIASL A06M002543
never never NN 160E854E06F2C4B6 WI YWISTIN 19980515094949S101702M00083
never never NY 15299A4D0D85802E WK WK7140 19940519174927S101702A034385
never never NY 152E2C0F0D3E8A0C WK WK7140 19940617193658S101702M000399
never never NY 15315002191658A6 WK WK7140 19940707190603S101702M000457
never never NY 15B8ADC50C7EE520 WK WK7160 19961115025420S101702M000661
never never NY 15ED937A079717CF WK WK7160 19971017165350S101702M000724
never never NY 15F2EE111CB6708A WK WK7160 19971120182636S101702M000725
never never NY 155481B513EFB4C4 WK WK8320 19950216173938S101702M000536
never never NY 1562CF4A047F148C WK WK8320 19950518S101702M000545AWK832
never never NY 157D367104E7F570 WK WK8320 19951102S101702M000606AWK832
never never NY 152E2936090A9106 WK YWK018A 19940617175335S101702M00039
never never NY 154CD3FD077E2D72 WK YWK018A 19941229210352S101702M00052
never never NY 15548095052968DE WK YWK018A 19950216165749S101702M00053
never never NY 157D35281996BE02 WK YWK018A 19951102S101702M000606AYWK0
never never NY 152E29361B1B9CE4 WK YWK018C 19940617175335S101702M00039
never never NY 154CD3FD16D4C18A WK YWK018C 19941229210359S101702M00052
never never NY 155480960089624C WK YWK018C 19950216165754S101702M00053
never never NY 157D35281954CBAC WK YWK018C 19951102S101702M000606AYWK0
never never NY 152E293613FB2262 WK YWK018D 19940617175336S101702M00039
never never NY 15230D4D0FDA8DEA WK YWK019A 19940408012536S101702M00039
never never NY 152E293D07EC1490 WK YWK019A 19940617175336S101702M00039
never never NY 153A1FB40C7534B4 WK YWK019A 19940901204355S101702M00046
never never NY 153C50CA1965CDCE WK YWK019A 19940915192823S101702M00046
never never NY 154CD40117BDD0FE WK YWK019A 19941229210426S101702M00052
never never NY 1554809715724046 WK YWK019A 19950216165801S101702M00053
never never NY 157D352211EDEC88 WK YWK019A 19951102S101702M000606AYWK0
never never NY 159336D01D2F0658 WK YWK019A 19960321174238S101702A05287
never never NY 15BF5A860CA1B6AA WK YWK019A 19961227141204S101702M00074
never never NY 15C281F6172116CE WK YWK019A 19970116155229S101702M00071
never never NY 15C289171C461306 WK YWK019A 19970116200309S101702M00071
never never NY 15D6426E0F805263 WK YWK019A 19970522081337S101702Z31232
never never NY 15D766971C249544 WK YWK019A 19970529142348S101702M00077
never never NY 15E87BFD02BB791E WK YWK019A 19970915071921S101702Z33334
never never NY 15ED91F20BBF8F2A WK YWK019A 19971017155338S101702M00072
never never NY 15F2E9AF192A89D6 WK YWK019A 19971120155139S101702M00072
never never NY 160A0D4E15188AB6 WK YWK019A 19980416231839S101702M00083
never never NY 160A27E11AA26250 WK YWK019A 19980417151206S101702M00083
never never NY 152E297D031B19F0 WK YWKATRE 19940617180548S101702M00039
never never NY 15B8AAE51C670F08 WK YWKATRE 19961115011453S101702M00066
never never NY 15230DC105A18DB6 WK YWKLUBO 19940408012610S101702M00039
never never NY 152443080B96BD0A WK YWKLUBO 19940415175633S101702M00042
never never NY 15276C0313E71C24 WK YWKLUBO 19940505203528S101702M00039
never never NY 152E29A116DF3BA2 WK YWKLUBO 19940617180626S101702M00039
never never NY 152F1C740764EDA0 WK YWKLUBO 19940623185421S101702M00047
never never NY 15314FB106E16624 WK YWKLUBO 19940707185047S101702M00045
never never NY 15326CA60869D666 WK YWKLUBO 19940714204856S101702M00045
never never NY 1533810219DF3D8E WK YWKLUBO 19940721173958S101702M00045
never never NY 1536D50217A70978 WK YWKLUBO 19940811215857S101702M00046
never never NY 1539038217A75048 WK YWKLUBO 19940825190037S101702M00049
never never NY 153A1FCB0128194A WK YWKLUBO 19940901204338S101702M00046
never never NY 153C4FED10319F00 WK YWKLUBO 19940915185724S101702M00046
never never NY 153D6F8A1E470A7A WK YWKLUBO 19940922222855S101702M00049
never never NY 153F9FF21D79A22C WK YWKLUBO 19941006204333S101702M00046
never never NY 1541CE4E034E348C WK YWKLUBO 19941020175037S101702M00046
never never NY 15440279002CF798 WK YWKLUBO 19941103182227S101702M00046
never never NY 15451DB007982042 WK YWKLUBO 19941110191853S101702M00047
never never NY 154632D4079ECF94 WK YWKLUBO 19941117163613S101702M00047
never never NY 154636FA01B8CE70 WK YWKLUBO 19941117190715S101702M00047
never never NY 1547515518621B6C WK YWKLUBO 19941124193246S101702M00051
never never NY 15486AA51390266E WK YWKLUBO 19941201191819S101702M00047
never never NY 15497EF20F2DFBAE WK YWKLUBO 19941208160857S101702M00047
never never NY 154AA1E811DA3346 WK YWKLUBO 19941215214321S101702M00047
never never NY 154CD39114BB1BD2 WK YWKLUBO 19941229204640S101702M00052
never never NY 15548022014E59DA WK YWKLUBO 19950216164131S101702M00053
never never NY 155BB8B11A64E6B6 WK YWKLUBO 19950403S101702Z183880AYWKL
never never NY 155D21E70606CCF2 WK YWKLUBO 19950412S101702M000541AYWKL
never never NY 1562CCAF091A0732 WK YWKLUBO 19950518S101702M000545AYWKL
never never NY 156EE48B0D5577D2 WK YWKLUBO 19950803S101702M000562AYWKL
never never NY 156F77A1012A0986 WK YWKLUBO 19950807S101702Z202630AYWKL
never never NY 156FF7DE023A92A6 WK YWKLUBO 19950810S101702Z203284AYWKL
never never NY 1570E6F0116B7A98 WK YWKLUBO 19950816S101702Z204003AYWKL
never never NY 157117D01C550C1C WK YWKLUBO 19950817S101702M000563AYWKL
never never NY 1571B8221D7CF820 WK YWKLUBO 19950821S101702Z204586AYWKL
never never NY 1572047F1266E6B4 WK YWKLUBO 19950823S101702Z205049AYWKL
never never NY 157234AE0AF2D858 WK YWKLUBO 19950824S101702Z205219AYWKL
never never NY 1572D2C4161C86D2 WK YWKLUBO 19950828S101702Z205521AYWKL
never never NY 1572F91013E253CA WK YWKLUBO 19950829S101702Z205812AYWKL
never never NY 15731FD10E2F5DB8 WK YWKLUBO 19950830S101702Z205812AYWKL
never never NY 157352AA00959484 WK YWKLUBO 19950831S101702M000564AYWKL
never never NY 157369250CB40BD8 WK YWKLUBO 19950901S101702Z205812AYWKL
never never NY 1573EBC21FF01278 WK YWKLUBO 19950904S101702Z205812AYWKL
never never NY 15740FBE1BEFB354 WK YWKLUBO 19950905S101702Z205812AYWKL
never never NY 1574367903570626 WK YWKLUBO 19950906S101702Z205812AYWKL
never never NY 15757D561D15D79C WK YWKLUBO 19950914S101702M000565AYWKL
never never NY 157615851B5DFD5C WK YWKLUBO 19950918S101702Z208465AYWKL
never never NY 1576947E1C5CEC06 WK YWKLUBO 19950921S101702Z208465AYWKL
never never NY 15784B1706052C2A WK YWKLUBO 19951002S101702Z208465AYWKL
never never NY 1578CC480073E7E8 WK YWKLUBO 19951005S101702M000566AYWKL
never never NY 157D35861AFB94B0 WK YWKLUBO 19951102S101702M000606AYWKL
never never NY 157E5CB11478658C WK YWKLUBO 19951110S101702M000609AYWKL
never never NY 15807B901D590FA6 WK YWKLUBO 19951123S101702Z220705AYWKL
never never NY 15819A1F108897F6 WK YWKLUBO 19951130S101702M000610AYWKL
never never NY 1583CE661708D828 WK YWKLUBO 19951214S101702M000611AYWKL
never never NY 15883682031B7C4A WK YWKLUBO 19960111S101702M000636AYWKL
never never NY 159221760CC1CCC8 WK YWKLUBO 19960314201344S101702M00063
never never NY 159680411228A4B0 WK YWKLUBO 19960411152854S101702M00063
never never NY 159687A61FCF961A WK YWKLUBO 19960411200336S101702M00063
never never NY 159AE8020193BFD8 WK YWKLUBO 19960509161344S101702M00064
never never NY 159BA1F5002EEF7E WK YWKLUBO 19960514071832S101702Z24814
never never NY 159BD8DD1D7F15B2 WK YWKLUBO 19960515160311S101702M00068
never never NY 159E34DA071B830E WK YWKLUBO 19960530161041S101702M00068
never never NY 15A06D5609DD801E WK YWKLUBO 19960613192725S101702M00064
never never NY 15A4CCF1077CA010 WK YWKLUBO 19960711152018S101702M00065
never never NY 15AA50BA13A9AA44 WK YWKLUBO 19960815172257S101702M00065
never never NY 15AEB87A10D7B646 WK YWKLUBO 19960912180055S101702M00065
never never NY 15BD029414D62C9C WK YWKLUBO 19961212161508S101702M00066
never never NY 15BF5B201C831F72 WK YWKLUBO 19961227141203S101702M00074
never never NY 15C7098105898B82 WK YWKLUBO 19970214111257S101702M00071
never never NY 15CB4D7B1E778ED6 WK YWKLUBO 19970313143807S101702M00071
never never NY 15CB55680D691504 WK YWKLUBO 19970313192346S101702M00071
never never NY 15D0CE4E1AEEC7C2 WK YWKLUBO 19970417150052S101702M00071
never never NY 15D53537014A9362 WK YWKLUBO 19970515152437S101702M00071
never never NY 15D7673B0D306348 WK YWKLUBO 19970529142336S101702M00077
never never NY 15D99DF10AB82CF9 WK YWKLUBO 19970612164801S101702M00072
never never NY 15DCB7B5078F6FAA WK YWKLUBO 19970702102459S101702Z31925
never never NY 15DE004008CD7B17 WK YWKLUBO 19970710141830S101702M00072
never never NY 15E12285118DBA4C WK YWKLUBO 19970730125913S101702Z32501
never never NY 15E23FFE1EC34D1E WK YWKLUBO 19970806151636S101702Z32584
never never NY 15E3862F086264F6 WK YWKLUBO 19970814173305S101702M00072
never never NY 15E7E6CB1C51E32E WK YWKLUBO 19970911135336S101702M00072
never never NY 15ED92271DE4258E WK YWKLUBO 19971017155255S101702M00072
never never NY 15F2EA41089840FA WK YWKLUBO 19971120155133S101702M00072
never never NY 15F636C518F3708E WK YWKLUBO 19971211152904S101702M00072
never never NY 16001FE90EC6BEE8 WK YWKLUBO 19980212171239S101702M00083
never never NY 16036EC101548857 WK YWKLUBO 19980305180826S101702M00083
never never NY 160A0DF216E00150 WK YWKLUBO 19980416231747S101702M00083
never never NY 160A289012C37417 WK YWKLUBO 19980417151059S101702M00083
never never NY 160B40250812FA08 WK YWKLUBO 19980424142817S101702Z37158
never never NY 160E85DC07288951 WK YWKLUBO 19980515095019S101702M00083
never never NY 1612CD2F07087A62 WK YWKLUBO 19980611152859S101702M00084
never never NY 161750951D99044E WK YWKLUBO 19980710084245S101702M00084
never never NY 16175A61187B4FF2 WK YWKLUBO 19980710141605S101702M00084
never never NY 18261CE20437A2AC WP YWPL6P1 DBH000012659B8E72D
never never NY 1826237100B3E7DF WP YWPLAP1 DBH000012659B91C65
never never NY 182623741F8D0072 WP YWPLAP1 DBH000012659B91C65MVS
never never NY 18261CAE136BADD5 WP YWPLBP1 DBH000012659B8E57E
never never NY 18261CB30438FBC2 WP YWPLBP1 DBH000012659B8E57EMVS
never never NY 18261D091E965A44 WP YWPR1QX DBH000012659B8E877
never never NY 17A6872C1CA61887 WP YWPR2PX DBH0000023558AA4ED
never never NY 18261D2906D9453A WP YWPR3PX DBH000012659B8E97F
never never NY 18261D301DB29A22 WP YWPR5PX DBH000012659B8E9C1
never never NY 18261F5F1971CB6E WP YWPR6PX DBH000012659B8FB2E
never never NY 18261F6919051FCE WP YWPR7PX DBH000012659B8FB4B
never never NY 18262040096BEAE2 WP YWPRAPX DBH000012659B90365
never never NY 18261F3A033B222E WP YWPRCPX DBH000012659B8FAB2
never never NY 17DE58D2019BE8C4 WP YWPXB1F DBH0000068575EE2BB
never never NY 17DE58CF0E073F7C WP YWPXB1G DBH0000068575EE2B1
never never NY 17DE58E10335F2F5 WP YWPXB1H DBH0000068575EE2F7
never never NY 17DE58DE1A1DABD3 WP YWPXB1I DBH0000068575EE2ED
never never NY 17DE58AD1EED6557 WP YWPXBJF DBH0000068575EE14B
never never NY 17DE58BF09680E52 WP YWPXBJG DBH0000068575EE1D9
never never NY 17DE58BC1B77FD45 WP YWPXBJH DBH0000068575EE1C6
never never NY 17DE58BA0C9FFF2C WP YWPXBJI DBH0000068575EE1AA
never never NY 154BFD2C19813DEC YX YXBF222 19941224125703S101702Z17059
never never NY 158D5C361373AE02 YX YXBF222 19960213S101702Z233885AYXBF
never never NY 158ECF611F1247BE YX YXBF222 19960222171023S101702A05207
never never NY 15D0CDD90A19A4C2 YX YXBF222 19970417150642S101702M00071
never never NY 15E38C330477CE60 YX YXBF222 19970814212651S101702A06527
never never NY 153C50261C9EE968 YX YXBF224 19940915190525S101702M00046
never never NY 156C85AD11D7650C YX YXBF224 19950719S101702Z200752AYXBF
never never NY 157118761441F602 YX YXBF224 19950817S101702A046685AYXBF
never never NY 15F634ED05A71B7A YX YXBF224 19971211145230S101702A06842
never never NY 15264E490291F352 YX YXNKSIC 19940428181933S101702A03382
never never NY 15A5E2111D883CF6 YX YXNKSIC 19960718123939S101702A05601
never never NY 18191FBF13217948 YX YXWB011 WSTS000055594BF1D5
never never NY 18191FBA1F2BB85E YX YXWB231 WSTS000055594BF1B9
never never NY 183577E11A225F8F YX YXWB231 WSTS0000615A39A8B6
never never NY 156982C61B3CF9CE YX YXWB52M 19950630S101702Z197290AYXWB
never never NY 1569843017D970EC YX YXWB52M 19950630S101702Z197319AYXWB
never never NY 156984D415B81DB4 YX YXWB52M 19950630S101702Z197327AYXWB
never never NY 1569853E04BBC8C6 YX YXWB52M 19950630S101702Z197332AYXWB
never never NY 156A84010993F178 YX YXWB52M 19950706S101702A045845AYXWB
never never NY 156A813707B32DAE YX YXWB52M 19950706S101702Z198507AYXWB
never never NY 156BC4471C8973A0 YX YXWB52M 19950714S101702Z200133AYXWB
never never NY 156CB19113255A84 YX YXWB52M 19950720S101702A046231AYXWB
never never NY 156D558E15CAA1D6 YX YXWB52M 19950724S101702Z201292AYXWB
never never NY 156EE58A17225662 YX YXWB52M 19950803S101702A046454AYXWB
never never NY 157118AE1F458302 YX YXWB52M 19950817S101702A046882AYXWB
never never NY 15AEB8D707346442 YY AV8760 19960912182612S101702M000659
never never NY 15E3ACE2172482D2 YY EV0520 19970815165403S101702A066076
never never NY 15F632B20D501D42 YY EV0520 19971211133228S101702A068862
never never NY 16059A6604EBF508 YY EV0520 19980319140102S101702A070940
never never NY 157B014C12699D0A YY KD5020 19951019S101702M000621AKD502
never never NN 15562E180C4345A0 YY LC5000 19950227091355S101702Z178899
never never NN 15562FBE083CCC0C YY LC5000 19950227101253S101702A042491
never never NN 15AD9AF51B9DBCC8 YY RR7240 19960905155311S101702M000711
never never NY 15CB494B0CE2ECBA YY RR7240 19970313122849S101702A061790
never never NN 15FF2F4C16BF00A4 YY YECSAS 19980206175324S101702A070225
never never NN 160041540F3D2242 YY YECSAS 19980213132029S101702A070420
never never NN 160484C51A2027F0 YY YECSAS 19980312162539S101702A070997
never never NN 1604875B02B0189E YY YECSAS 19980312175709S101702A070997
never never NN 16164212086E9087 YY YECSAS 19980703152436S101702A073255
never never NY 15A5E21203991050 YY YNKSICB 19960718123939S101702A05601
never never NY 15DE003D14449A06 YY YYAKDAT 19970710142418S101702M00072
never never NY 1612CD4B01121012 YY YYAKDAT 19980611153615S101702M00084
never never NY 161750B801C3D872 YY YYAKDAT 19980710084846S101702M00084
never never NY 161759F605B39914 YY YYAKDAT 19980710142111S101702M00084
never never NY 1579E8A507B33DBC YY YYCXCR 19951012S101702A048616AYYCXC
never never NY 157C19171896808E YY YYCXCR 19951026S101702A048908AYYCXC
never never NY 15819B92091631CE YY YYCXCR 19951130S101702A049675AYYCXC
never never NY 1583CA8712E92BB2 YY YYCXCR 19951214S101702A050270AYYCXC
never never NY 15933060108F0298 YY YYCXCR 19960321135238S101702A052860
never never NY 1597970E110AC44A YY YYCXCR 19960418135815S101702A053388
never never NY 15CB46D41C9F99F0 YY YYCXCR 19970313110131S101702Z301064
never never NY 15E386480B6CC48A YY YYCXCR 19970814175447S101702M000722
never never NY 15E4C55D0FF80394 YY YYCXCR 19970822161513S101702A066301
never never NY 15EE7EB31D3AD2DA YY YYCXCR 19971023131100S101702A067654
never never NY 15FF016103E8C46E YY YYCXCR 19980205143017S101702A070192
never never NY 16024C400BA854E6 YY YYCXCR 19980226131415S101702A070718
never never NY 1617512D1257AAD7 YY YYCXOLD 19980710085313S101702A07372
never never NY 156617A60AC0705E YY YYDAISF 19950608S101702M000546AYYDA
never never NY 1568502B1DAE0586 YY YYDAISF 19950622S101702M000590AYYDA
never never NY 15921AC5035C67B4 YY YYDAISF 19960314161501S101702M00066
never never NY 1597995A10CC8BE4 YY YYDAISF 19960418152010S101702M00068
never never NY 159BD4680706D1FA YY YYDAISF 19960515132403S101702A05410
never never NY 15AEB4711794B942 YY YYDAISF 19960912154821S101702A05699
never never NY 15CC680F07443E68 YY YYDAISF 19970320153356S101702M00077
never never NY 15AFF02C1857EE2E YY YYDAISM 19960920121001S101702Z26717
never never NY 15B10A37169313E8 YY YYDAISM 19960927122508S101702Z26806
never never NY 15B17CD0130D1CB0 YY YYDAISM 19960930084648S101702Z26820
never never NY 15B18CE51F6372EA YY YYDAISM 19960930182222S101702Z26842
never never NY 15B4563C0347E728 YY YYDAISM 19961018115328S101702M00066
never never NY 15CC68101AB83382 YY YYDAISM 19970320153356S101702M00077
never never NY 15D534E11F737160 YY YYDAISM 19970515152456S101702M00071
never never NY 15D6F0151856BA32 YY YYDAISM 19970526154815S101702Z31295
never never NY 15ED91FB0E701E02 YY YYDAISM 19971017155755S101702M00072
never never NY 15F6363B0A278DF0 YY YYDAISM 19971211153706S101702M00072
never never NY 15FBDBA91BC0D8BC YY YYDAISM 19980116135024S101702M00083
never never NY 152303611A41576E YY YYDEAIS 19940407192650S101702A03280
never never NY 156617A500833F8C YY YYDEAIS 19950608S101702M000546AYYDE
never never NY 1568502B18E0EAF8 YY YYDEAIS 19950622S101702M000590AYYDE
never never NY 1578A07F16314AF8 YY YYDEAIS 19951004S101702Z211189AYYDE
never never NY 15921AC50232CE3E YY YYDEAIS 19960314161502S101702M00066
never never NY 15979958131859DC YY YYDEAIS 19960418152010S101702M00068
never never NY 159BD46711090FCE YY YYDEAIS 19960515132404S101702A05410
never never NY 15CC680F182B0436 YY YYDEAIS 19970320153357S101702M00077
never never NY 150ACAC51B00900A YY YYDEPAY
never never NY 1522FC7D054BE556 YY YYDEPAY 19940407150944S101702A03285
never never NY 1522FF0D18A98A1E YY YYDEPAY 19940407165401S101702A03285
never never NY 15252EC413FC8A94 YY YYDEPAY 19940421144515S101702A03353
never never NY 152532AB07A80076 YY YYDEPAY 19940421171023S101702A03353
never never NY 15276A4D1D371472 YY YYDEPAY 19940505194307S101702A03387
never never NY 1528546C05AF4870 YY YYDEPAY 19940511152421S101702A03407
never never NY 152CE4CF1CE22EC2 YY YYDEPAY 19940609162215S101702A03489
never never NY 152CE5DB05F708AE YY YYDEPAY 19940609165924S101702A03489
never never NY 152F1839137D891A YY YYDEPAY 19940623162940S101702A03509
never never NY 152F19F216DB4166 YY YYDEPAY 19940623173219S101702A03509
never never NY 152F1B91022991FC YY YYDEPAY 19940623183033S101702A03509
never never NY 15302ED3002362DA YY YYDEPAY 19940630144158S101702A03529
never never NY 15302FA717AEBA54 YY YYDEPAY 19940630151201S101702A03529
never never NY 153146A010F421BA YY YYDEPAY 19940707133234S101702A03542
never never NY 1532626F11BBB5A2 YY YYDEPAY 19940714145243S101702A03566
never never NY 1535B50D1B4EE964 YY YYDEPAY 19940804181158S101702M00048
never never NY 1538FC7C0D72806E YY YYDEPAY 19940825150144S101702M00049
never never NY 153A14190F37546E YY YYDEPAY 19940901135024S101702A03699
never never NY 153D62370160DBA6 YY YYDEPAY 19940922143400S101702A03756
never never NY 153F997A1C201A9E YY YYDEPAY 19941006165731S101702M00050
never never NY 153FA1510E36291A YY YYDEPAY 19941006213821S101702M00050
never never NY 154401DD18C42926 YY YYDEPAY 19941103180213S101702A03878
never never NY 154632251788AEE4 YY YYDEPAY 19941117161523S101702A03943
never never NY 1546CF680390FE7E YY YYDEPAY 19941121140628S101702A03965
never never NY 155016621CB54158 YY YYDEPAY 19950119144822S101702M00055
never never NY 1566199F002EBF30 YY YYDEPAY 19950608S101702A045100AYYDE
never never NY 156733071943396C YY YYDEPAY 19950615S101702M000591AYYDE
never never NY 1568502E1D6C7A24 YY YYDEPAY 19950622S101702M000590AYYDE
never never NY 156CB199081AC32E YY YYDEPAY 19950720S101702A046223AYYDE
never never NY 157852A400E71A38 YY YYDEPAY 19951002S101702Z210818AYYDE
never never NY 1579EBD309689602 YY YYDEPAY 19951012S101702A048532AYYDE
never never NY 157E4FE308523092 YY YYDEPAY 19951109S101702A049367AYYDE
never never NY 157E5C6119DC655E YY YYDEPAY 19951110S101702A049367AYYDE
never never NY 158DB0B81220EF5E YY YYDEPAY 19960215141014S101702A05171
never never NY 158ECAFE0DC90120 YY YYDEPAY 19960222143313S101702A05214
never never NY 15921AC601B008C2 YY YYDEPAY 19960314161503S101702M00066
never never NY 1599CA5A0237FDD2 YY YYDEPAY 19960502135824S101702A05325
never never NY 15A938F902FF8304 YY YYDEPAY 19960808183530S101702A05624
never never NY 15C194F9080D910E YY YYDEPAY 19970110183204S101702Z28991
never never NY 15C2276718E0F092 YY YYDEPAY 19970114095350S101702Z29045
never never NY 15C24F881D84C1B8 YY YYDEPAY 19970115095002S101702Z29079
never never NY 15C29F7311EDBBC2 YY YYDEPAY 19970117093023S101702Z29120
never never NY 15C3982C143BCCC6 YY YYDEPAY 19970123135201S101702A06105
never never NY 15CC68291A74EF5C YY YYDEPAY 19970320153413S101702M00077
never never NY 15E7E7560099C880 YY YYDEPAY 19970911143853S101702A06675
never never NY 15F632F70423F8C8 YY YYDEPAY 19971211134115S101702A06893
never never NY 15FBB9F8181B4EB2 YY YYDEPAY 19980115174544S101702M00085
never never NY 16024D680394BD7A YY YYDEPAY 19980226135927S101702A07072
never never NY 15AFEFCA17E34B18 YY YYEAISM 19960920115644S101702Z26716
never never NY 15AFF06B0A4AE0EE YY YYEAISM 19960920121911S101702Z26717
never never NY 15B45A870600ED96 YY YYEAISM 19961018142720S101702M00066
never never NY 15CC68120AF490E0 YY YYEAISM 19970320153358S101702M00077
never never NY 15FBDBAB1BC1BB5C YY YYEAISM 19980116135025S101702M00083
never never NN 160018711F92E016 YY YYECGR2 19980212125840CGS101702A069
never never NN 16001870032E9786 YY YYECGR2 19980212125840S101702A06992
never never NN 1600BFE9157E45A8 YY YYECGR2 19980216165215CGS101702A070
never never NN 1600BFE7162B59CA YY YYECGR2 19980216165215S101702A07049
never never NN 15F17FAD1272E342 YY YYECGRI 19971111155503S101702A06820
never never NN 15F2EEB81F753348 YY YYECGRI 19971120185114S101702M00081
never never NN 15F369CC0439D86A YY YYECGRI 19971123194631S101702Z34616
never never NN 15F519F619C6885F YY YYECGRI 19971204140411S101702Z34880
never never NN 15FBB9F00F950012 YY YYECGRI 19980115174545S101702M00085
never never NN 15F0865E14C44A8A YY YYECGRP 19971105111102CGS101702A068
never never NN 15F0865C0AE9D486 YY YYECGRP 19971105111102S101702A06803
never never NY 15E37FF1175FC4DC YY YYFIBPR 19970814140833S101702M00080
never never NY 15E4188D027F8394 YY YYFIBPR 19970818091027S101702Z32766
never never NY 15E533030E14134E YY YYFIBPR 19970825094010S101702Z32946
never never NY 15E53B4C1113BC34 YY YYFIBPR 19970825143650S101702Z32946
never never NY 15E6CBB903DB245D YY YYFIBPR 19970904132827S101702A06655
never never NY 15E766741202B080 YY YYFIBPR 19970908094638S101702Z33189
never never NY 15E793CB0A82A0B8 YY YYFIBPR 19970909124923S101702Z33226
never never NY 15E7BF3B1064B13A YY YYFIBPR 19970910144408S101702Z33267
never never NY 15E7E6301359E030 YY YYFIBPR 19970911135707S101702Z33286
never never NY 15E7E62F0F6AECBC YY YYFIBPR 19970911135748S101702M00072
never never NY 15E8B15318EC00AA YY YYFIBPR 19970916150918S101702Z33378
never never NY 15E8B2A80D2EE108 YY YYFIBPR 19970916155634S101702Z33378
never never NY 15E9018F09DEC578 YY YYFIBPR 19970918150017S101702Z33421
never never NY 15EADA930F135D8A YY YYFIBPR 19970930091036S101702Z33621
never never NY 15EAE16E13C1A270 YY YYFIBPR 19970930131559S101702Z33621
never never NY 15EB5BAF03BF78E2 YY YYFIBPR 19971003141148S101702Z33739
never never NY 15ED91F40DA321A8 YY YYFIBPR 19971017155842S101702M00072
never never NY 15EDFD9C0954B4AC YY YYFIBPR 19971020081228S101702Z34007
never never NY 15EE7F7D02C4A036 YY YYFIBPR 19971023134013S101702A06776
never never NY 15EF4CE909B97752 YY YYFIBPR 19971028161241S101702A06787
never never NY 15EF715B082A44EC YY YYFIBPR 19971029135718S101702Z34228
never never NY 15EF73B313E72048 YY YYFIBPR 19971029152110S101702A06792
never never NY 15F1CD8F16CBB102 YY YYFIBPR 19971113142213S101702A06823
never never NY 15F2E9CE117E0CB4 YY YYFIBPR 19971120155550S101702M00072
never never NY 15F3FFA30D164C90 YY YYFIBPR 19971127133905S101702A06860
never never NY 15FA73E30D92229A YY YYFIBPR 19980107151625S101702Z35389
never never NY 15FBDBA318A2B474 YY YYFIBPR 19980116135026S101702M00083
never never NY 15FCCE091650F9E6 YY YYFIBPR 19980122142859S101702M00088
never never NY 160A0D5E1FCED194 YY YYFIBPR 19980416232803S101702M00083
never never NY 160A27F31A320BDE YY YYFIBPR 19980417151921S101702M00083
never never NY 1612CD4E0730EF56 YY YYFIBPR 19980611153657S101702M00084
never never NY 1839CABA046018EB YY YYFIKST BKUR0000965A5DE9E3
never never NY 15C286081191A66C YY YYFIKU1 19970116181927S101702A06091
never never NY 15C3418805C0E26E YY YYFIKU1 19970121101133S101702Z29190
never never NY 15C398F908EF9C08 YY YYFIKU1 19970123142101S101702A06112
never never NY 15C489FE1460809C YY YYFIKU1 19970129140738S101702Z29353
never never NY 15C4D98316FB4854 YY YYFIKU1 19970131133354S101702Z29406
never never NY 15C4DA1D17445C08 YY YYFIKU1 19970131135524S101702Z29406
never never NY 15C4DA730656319C YY YYFIKU1 19970131140710S101702Z29406
never never NY 15C5560A1B720028 YY YYFIKU1 19970203155055S101702Z29441
never never NY 15C5566815248554 YY YYFIKU1 19970203160358S101702Z29441
never never NY 15C5742506C60392 YY YYFIKU1 19970204094815S101702Z29452
never never NY 15C5807102C2DB68 YY YYFIKU1 19970204170805S101702Z29452
never never NY 15C5F3C80A03AD08 YY YYFIKU1 19970207135639S101702Z29523
never never NY 15C5F7DE16DD09D4 YY YYFIKU1 19970207162252S101702Z29523
never never NY 15C68F340B219374 YY YYFIKU1 19970211103926S101702Z29553
never never NY 15C6ED610246DBCA YY YYFIKU1 19970213184955S101702A06165
never never NY 15C70DED172ECA28 YY YYFIKU1 19970214141457S101702A06165
never never NY 16172FFF01BF612E YY YYFIKU1 19980709132109S101702Z38259
never never NY 15DE003E076E5514 YY YYFIKUR 19970710142449S101702M00072
never never NY 15E385C91B3D06FF YY YYFIKUR 19970814173534S101702M00072
never never NY 15E58C35083F42B4 YY YYFIKUR 19970827145220S101702Z33007
never never NY 15E5B2D20C26A498 YY YYFIKUR 19970828135427S101702Z33038
never never NY 15E5B75011F360EC YY YYFIKUR 19970828163505S101702Z33038
never never NY 15E6A6C014CB58AC YY YYFIKUR 19970903152517S101702Z33138
never never NY 15E6C8901D6A44F8 YY YYFIKUR 19970904113540S101702Z33151
never never NY 15E76E0011E20F9C YY YYFIKUR 19970908141644S101702Z33200
never never NY 15E76E1F0EB2D04A YY YYFIKUR 19970908142100S101702Z33200
never never NY 15E7E636191BF19C YY YYFIKUR 19970911135753S101702M00072
never never NY 15E7E7361C517AA8 YY YYFIKUR 19970911143522S101702Z33287
never never NY 15E7E8D20E820D84 YY YYFIKUR 19970911152454S101702Z33287
never never NY 15EAE1380500BB68 YY YYFIKUR 19970930130759S101702Z33633
never never NY 15ED91FE0081AECA YY YYFIKUR 19971017155855S101702M00072
never never NY 15EE9C9A07D0DA54 YY YYFIKUR 19971024070255S101702Z34144
never never NY 15EF1DED163CD3C2 YY YYFIKUR 19971027121114S101702Z34178
never never NY 15EF71540B35A282 YY YYFIKUR 19971029135652S101702Z34228
never never NY 15F1700B0D6FA90E YY YYFIKUR 19971111063522S101702Z34416
never never NY 15F1C6CC08BC5408 YY YYFIKUR 19971113101937CGS101702Z344
never never NY 15F1C6C808FB0EA4 YY YYFIKUR 19971113101937S101702Z34464
never never NY 15F2B3A319877A5C YY YYFIKUR 19971119073725S101702Z34545
never never NY 15F2E9D71307678C YY YYFIKUR 19971120155600CGS101702M000
never never NY 15F2E9D2156D220A YY YYFIKUR 19971120155600S101702M00072
never never NY 15F37D611EE138A0 YY YYFIKUR 19971124075840S101702Z34621
never never NY 15F3A483088A51C2 YY YYFIKUR 19971125071800S101702Z34656
never never NY 15F3AEAE0E1B3A8C YY YYFIKUR 19971125132146CGS101702Z346
never never NY 15F3AEAA13C6A0CA YY YYFIKUR 19971125132146S101702Z34670
never never NY 15F3FFAC12135424 YY YYFIKUR 19971127133906CGS101702A068
never never NY 15F3FFA509C3CB8A YY YYFIKUR 19971127133906S101702A06860
never never NY 15F51EBC01E174A2 YY YYFIKUR 19971204165432CGS101702A068
never never NY 15F51EB417EC7912 YY YYFIKUR 19971204165432S101702A06881
never never NY 15F636570CBC56C3 YY YYFIKUR 19971211153730CGS101702M000
never never NY 15F6364000503D9D YY YYFIKUR 19971211153730S101702M00072
never never NY 15FBDBB21D92000A YY YYFIKUR 19980116135027S101702M00083
never never NY 16001B6517B805B0 YY YYFIKUR 19980212144259CGS101702M000
never never NY 16001B580AE44AA2 YY YYFIKUR 19980212144259S101702M00083
never never NY 160A0D6613CA2262 YY YYFIKUR 19980416232808CGS101702M000
never never NY 160A0D5E00845DC4 YY YYFIKUR 19980416232808S101702M00083
never never NY 160A288904A83F62 YY YYFIKUR 19980417151937CGS101702M000
never never NY 160A27F914508896 YY YYFIKUR 19980417151937S101702M00083
never never NY 1612CD571888D0D6 YY YYFIKUR 19980611153705CGS101702M000
never never NY 1612CD5007B9D0F2 YY YYFIKUR 19980611153705S101702M00084
never never NY 1613E6D61F9BD9EB YY YYFIKUR 19980618153331CGS101702A072
never never NY 1613E6D1014F7AE9 YY YYFIKUR 19980618153331S101702A07282
never never NY 1613EA801994AE1C YY YYFIKUR 19980618174544CGS101702A072
never never NY 1613EA7C1EBFF447 YY YYFIKUR 19980618174544S101702A07282
never never NY 161524D01CCBFF06 YY YYFIKUR 19980626131600CGS101702A073
never never NY 161524CE06CCC8A4 YY YYFIKUR 19980626131600S101702A07339
never never NY 161525A71CE08EDA YY YYFIKUR 19980626134607CGS101702A073
never never NY 161525A505D9A3F6 YY YYFIKUR 19980626134607S101702A07339
never never NY 1615264E03F99E7C YY YYFIKUR 19980626140918CGS101702A073
never never NY 1615264B0DD6FBEC YY YYFIKUR 19980626140918S101702A07339
never never NY 1615280711F76BAA YY YYFIKUR 19980626151056CGS101702A073
never never NY 161528041466BF88 YY YYFIKUR 19980626151056S101702A07340
never never NY 161750CA082CB234 YY YYFIKUR 19980710084900CGS101702M000
never never NY 161750C017446400 YY YYFIKUR 19980710084900S101702M00084
never never NY 15E6CBBA005DA61E YY YYFISER 19970904132828S101702A06655
never never NY 15ED91F80DD9305A YY YYFISER 19971017155900S101702M00072
never never NY 160E856D0621DE78 YY YYFISER 19980515095453S101702M00083
never never NY 150ACD5C155A3B8C YY YYGE040
never never NY 181A0E0704374A12 YY YYGETCS TOFF0001095953C065
never never NY 181A0E0817AC2265 YY YYGETCS TOFF0001095953C065MVS
never never NN 15F3118E14E98182 YY YYGPAS 19971121153752S101702A068485
never never NN 15F3B4630CE36DAA YY YYGPAS 19971125164555S101702A068569
never never NN 15F3DBCF1C9877B0 YY YYGPAS 19971126161741S101702Z347154
never never NN 15F3FDE11F9AA642 YY YYGPAS 19971127123700S101702Z347334
never never NN 15F545BD065532F2 YY YYGPAS 19971205161109S101702A068771
never never NY 171FDC81124D5E40 YY YYHECO A06M022888
never never NN 151EC4DD0B631542 YY YYNFP14 19940311192628S101702A03237
never never NN 151FB7A6000D73F0 YY YYNFP14 19940317201407S101702M00039
never never NN 1524173E17F27A22 YY YYNFP14 19940414160445S101702A03341
never never NN 15241E7817C8B476 YY YYNFP14 19940414202416S101702A03341
never never NN 153A232D14D2DEFA YY YYNFP14 19940901225031S101702A03706
never never NY 153A419602CAE318 YY YYNFP14 19940902165842S101702A03706
never never NN 15CE9B530119BDAA YY YYNFP14 19970403153334S101702A06283
never never NY 17C93F311BF9B4A7 YY YYNFP17 NBSI00006156ADD502
never never NY 17CBF39C14D96CA0 YY YYNFP17 NBSI000070
never never NN 151EC4EB16EABC48 YY YYNFP24 19940311192636S101702A03237
never never NN 151FB7A71F0A61DC YY YYNFP24 19940317201425S101702M00039
never never NN 1524173C15FCBA3A YY YYNFP24 19940414160453S101702A03341
never never NN 15241E7B1014C356 YY YYNFP24 19940414202420S101702A03341
never never NN 153A232F1F6FD7A6 YY YYNFP24 19940901225036S101702A03706
never never NN 153A419611D80B30 YY YYNFP24 19940902165848S101702A03706
never never NN 15CE9B501CFD4F62 YY YYNFP24 19970403153340S101702A06283
never never NN 15757B1814F33F10 YY YYNGKAS 19950914S101702A047578AYYNG
never never NN 1576981A14FAAF04 YY YYNGKAS 19950921S101702A047924AYYNG
never never NN 157D2FE9051C133A YY YYNGTCP 19951102S101702A048892AYYNG
never never NY 146C7A1103D158D4 YY YYNHBS
never never NY 1524423A042AC164 YY YYNHBS 19940415174407S101702A033339
never never NY 153265B509D98D98 YY YYNHBS 19940714165234S101702A035718
never never NY 15463214008EC298 YY YYNHBS 19941117161412S101702A039404
never never NN 1515C8791417951A YY YYOELEI
never never NN 152CE21D0BFF3DE2 YY YYOELEI 19940609143536S101702A03481
never never NY 156DC8730F9AF87A YY YYPTM12 19950727S101702A046364AYYPT
never never NY 156EE2920934D858 YY YYPTM12 19950803S101702A046538AYYPT
never never NY 157141D4000BE6E0 YY YYPTM12 19950818S101702A047074AYYPT
never never NY 1571E6FD143F4ADA YY YYPTM12 19950822S101702Z204939AYYPT
never never NY 15725CFC0FE5AEAA YY YYPTM12 19950825S101702Z205416AYYPT
never never NY 15728BFF05995CFA YY YYPTM12 19950826S101702Z205430AYYPT
never never NY 1572ADE807AA1C76 YY YYPTM12 19950827S101702Z205430AYYPT
never never NY 1572C87609374A88 YY YYPTM12 19950828S101702Z205430AYYPT
never never NY 1572D17000F67C48 YY YYPTM12 19950828S101702Z205582AYYPT
never never NY 1572F6EA18980D74 YY YYPTM12 19950829S101702Z205736AYYPT
never never NY 1573280915179998 YY YYPTM12 19950830S101702Z206096AYYPT
never never NY 157344D104228EE6 YY YYPTM12 19950831S101702Z206167AYYPT
never never NY 15736EAD1B03E7B2 YY YYPTM12 19950901S101702Z206288AYYPT
never never NY 1574106E034EDCB4 YY YYPTM12 19950905S101702Z206837AYYPT
never never NY 157434F113590034 YY YYPTM12 19950906S101702Z206973AYYPT
never never NY 1574633800041C26 YY YYPTM12 19950907S101702A047466AYYPT
never never NY 157486451DB20AE2 YY YYPTM12 19950908S101702Z207435AYYPT
never never NY 15773E070DA7132C YY YYPTM12 19950925S101702Z209742AYYPT
never never NY 1578CA0903FE251E YY YYPTM12 19951005S101702A048161AYYPT
never never NY 1579644C130BA342 YY YYPTM12 19951009S101702Z211751AYYPT
never never NY 157997B30E8AC44E YY YYPTM12 19951010S101702Z212019AYYPT
never never NY 1579B7AA1D646CCA YY YYPTM12 19951011S101702Z212285AYYPT
never never NY 1579B86E1BAB8F26 YY YYPTM12 19951011S101702Z212295AYYPT
never never NY 1579BE3D03B1A2A8 YY YYPTM12 19951011S101702Z212376AYYPT
never never NY 1579E3C114C9C4E6 YY YYPTM12 19951012S101702A048386AYYPT
never never NY 157A06211C953694 YY YYPTM12 19951013S101702Z212652AYYPT
never never NY 15837E6413DB9D04 YY YYPTM12 19951212S101702Z224373AYYPT
never never NY 1583A6F116448B9A YY YYPTM12 19951213S101702Z224682AYYPT
never never NY 1583AB1B18D75DE0 YY YYPTM12 19951213S101702Z224731AYYPT
never never NY 1583CADC13289CC2 YY YYPTM12 19951214S101702A050352AYYPT
never never NY 1583C252084DB644 YY YYPTM12 19951214S101702Z224779AYYPT
never never NY 154DFD7E09887904 YY YYSPINS 19950106063222S101702A04100
never never NY 180DEE890806798A YY YYUWI PSMF00001758EE0EC7
never never NY 15FBE54C00E0778E YY YYWBBPU 19980116193842S101702A06966
never never NY 18191F9E0475659C YY YYWBERR WSTS000055594BF0A8
never never NY 183577E70DA2E70E YY YYWBERR WSTS0000615A39A896
never never NY 181874E504076DD3 YY YYWBKUR BKUR000080594658B8
never never NY 15BACC9F187C524E YY YYWBMOE 19961128144620S101702A05913
never never NY 15BACED419DE065C YY YYWBMOE 19961128160532S101702A05913
never never NY 15BD0476166D4268 YY YYWBMOE 19961212173057S101702A05968
never never NY 15C1681F0EC67508 YY YYWBMOE 19970109154730S101702A06051
never never NY 15C39E7411B777E0 YY YYWBMOE 19970123173704S101702A06101
never never NY 15C3B55A081BDB8E YY YYWBMOE 19970124071700S101702A06101
never never NY 15C800EF0388913A YY YYWBMOE 19970220151213S101702A06184
never never NN 15CA55A31735EBE4 YY YYWBMON 19970307110926S101702A06213
never never NN 15CA83710EAE6488 YY YYWBMON 19970308142853S101702Z30011
never never NN 15CACB761B5B1466 YY YYWBMON 19970310092637S101702Z30018
never never NN 15CACEC7168D5DC2 YY YYWBMON 19970310112514S101702Z30026
never never NN 15CAD04903A38642 YY YYWBMON 19970310121902S101702Z30026
never never NN 15CAD0B914921CE8 YY YYWBMON 19970310123454S101702Z30026
never never NN 15CAD2B5019D8F4C YY YYWBMON 19970310134551S101702Z30026
never never NN 15CB4D021C010CB0 YY YYWBMON 19970313144250S101702M00071
never never NN 15CB54F7085E0490 YY YYWBMON 19970313192604S101702M00071
never never NN 15CB97E91D1E745A YY YYWBMON 19970315112351S101702Z30157
never never NN 15CB99C1179306BA YY YYWBMON 19970315122939S101702Z30158
never never NN 15CBE35B0EAC22EE YY YYWBMON 19970317082407S101702Z30164
never never NN 15CBE9F91963A2C2 YY YYWBMON 19970317122158S101702Z30164
never never NN 15CC118D012EF1E4 YY YYWBMON 19970318115741S101702Z30212
never never NN 15CC822D1972E9E0 YY YYWBMON 19970321070837S101702Z30274
never never NN 15CC876D0D856B26 YY YYWBMON 19970321101634S101702Z30274
never never NN 15CC87EA1BA5A2CE YY YYWBMON 19970321103457S101702Z30274
never never NN 15CC89AF04E2C5B0 YY YYWBMON 19970321113725S101702Z30274
never never NN 15CC8A700825D760 YY YYWBMON 19970321120417S101702Z30274
never never NN 15CC8BF613044BAC YY YYWBMON 19970321125900S101702Z30286
never never NN 15CC8E4317E33A62 YY YYWBMON 19970321142116S101702Z30286
never never NN 15CCFD1B11F96CF6 YY YYWBMON 19970324082836S101702Z30301
never never NN 15CCFEEC1FC13568 YY YYWBMON 19970324093352S101702Z30301
never never NN 15CD08B1174D7342 YY YYWBMON 19970324152338S101702Z30301
never never NN 15CD09931408333C YY YYWBMON 19970324155417S101702Z30301
never never NN 15CD28E40FD2C2D6 YY YYWBMON 19970325103538S101702Z30334
never never NN 15CE6FBF17EB38FA YY YYWBMON 19970402133425S101702Z30427
never never NN 15CF332B1B740882 YY YYWBMON 19970407100855S101702Z30479
never never NN 15D0CDF30885BEE4 YY YYWBMON 19970417151042S101702M00071
never never NN 15D534FD1AE441BC YY YYWBMON 19970515152742S101702M00071
never never NN 15D7FAF00A371B85 YY YYWBMON 19970602065921S101702Z31390
never never NN 15D99073175A7227 YY YYWBMON 19970612085344S101702Z31605
never never NN 15D99D86058B7952 YY YYWBMON 19970612164152S101702M00072
never never NN 15DE005219DA53C8 YY YYWBMON 19970710142705S101702M00072
never never NN 15E385DD1022E234 YY YYWBMON 19970814173805S101702M00072
never never NN 15E7E65913C0CAEC YY YYWBMON 19970911140351S101702M00072
never never NN 15F2E9EF0042410C YY YYWBMON 19971120155919S101702M00072
never never NN 15F3A38006B99F02 YY YYWBMON 19971125064220S101702Z34656
never never NN 15F6365B19B405C8 YY YYWBMON 19971211154151S101702M00072
never never NN 16001FC111AC2F33 YY YYWBMON 19980212172010S101702M00083
never never NN 160A0D7903D15B44 YY YYWBMON 19980416233210S101702M00083
never never NN 160A281806D31840 YY YYWBMON 19980417152423S101702M00083
never never NN 160E857C176EC566 YY YYWBMON 19980515095747S101702M00083
never never NN 1612CD6C138353F6 YY YYWBMON 19980611154027S101702M00084
never never NY 157E592A1C761270 YY YYWBPOS 19951109S101702A049203AYYWB
never never NY 157E64E700B0C79E YY YYWBPOS 19951110S101702A049203AYYWB
never never NY 1607CBE214CAE4A9 YY YYWBTMS 19980402145954S101702A07123
never never NY 1607D0501A9F1AE0 YY YYWBTMS 19980402173431S101702A07123
never never NY 1607D2191D7F3FF0 YY YYWBTMS 19980402184148S101702A07123
never never NY 1607F4440930D456 YY YYWBTMS 19980403150226S101702A07123
never never NY 160867290C7C2D64 YY YYWBTMS 19980406113742S101702A07151
never never NN 1514B97802FFBC58 ZP YZPUSER
never never NN 151BC8E4096D99B8 ZP YZPUSER 19940220194106S101702A03177
never never NN 151BC93F02304F06 ZP YZPUSER 19940220195347S101702A03177
never never NN 151C0DE01EBDC15C ZP YZPUSER 19940222125004S101702A03185
never never NN 151CEA1D1AE5265C ZP YZPUSER 19940228001251S101702A03202
never never NN 1520A4F6042A4D36 ZP YZPUSER 19940323174801S101702A03282
never never NN 152302AC109E06E6 ZP YZPUSER 19940407190244S101702A03322
never never NY 15BA7B261D9B42A0 ZP YZPUSER 19961126141035S101702A05922
03.10.2006 never NY 17EF4D9A118195B3 WF YWFSWC WSSW000073
04.10.2006 never NY 17CFDF5401FFCBFA MF MF7750 MFR0000073
04.10.2006 never NY 17B969BF10C4EB0D MF MF8950 MFR0000049
04.10.2006 never NY 17EF4D760DD5EC6A WF WF5410 WSSW000073
04.10.2006 never NY 17677F0F0B287ADC WP YWPXBGE A06M0263755379E562
04.10.2006 never NY 176780710D2E1F59 WP YWPXBYC A06M0263755379E9BB
05.10.2006 never NY 17F0195E064B09B1 WF YWFSWC WS8B000357
06.10.2006 never NY 17EA66700BC5BF20 CE CE8440 COPE000034
06.10.2006 never NY 17E1C56C1492292F VP VP5340 VIP0000015
07.10.2006 never NY 17E6570D175F4BCC TN TN7004 OTXO000054
07.10.2006 never NY 17C966571F3246DF TN TN7020 OTXO000036
07.10.2006 never NY 17DF45C41789AAD2 TN YTN5012 OTXO0000545766A6D3
07.10.2006 never NY 17E6559A1CCAD2A9 TN YTN5013 OTXO00005457A1E413
07.10.2006 never NY 17DDACA0147957C5 WP YWPR5PX DBH000006857593EAD
07.10.2006 never NY 1793D8E301FD62E2 WP YWPYBDD DBH000002254EDE1C2
08.10.2006 never NY 17ECC87707071F08 CZ CZ7510 APEN000036
08.10.2006 never NY 17E19C341A570461 CZ CZ8010 APEN000032
08.10.2006 never NY 17C9C4A81DF216A5 EB EB8374 KLOM000043
08.10.2006 never NY 17DD87DB14BB4DB9 EB EB8375 KLOM000049
08.10.2006 never NY 17B6E17215E77544 IT YITGTR TABS0000535613D1F0
08.10.2006 never NY 17D4BDE718D0778D TN TN7065 OTXO000045
08.10.2006 never NY 17E657110255E3A3 TN TN7066 OTXO000054
08.10.2006 never NY 17D4BDE4073F9F55 TN TN7067 OTXO000045
08.10.2006 never NY 17D4BDE5021BA429 TN TN7068 OTXO000045
10.10.2006 never NY 17C57B990CC74A69 BP BP7161 BPST000037
10.10.2006 never NY 17E1C239175CDD4C SV SV5750 WSSV000116
10.10.2006 never NY 17E197BE0FF74064 VT VT0120 EBZV000009
10.10.2006 never NY 17F03A7E0B780DE0 WF WF5410 WSSW000074
10.10.2006 never NY 17F03AC71EEF4D75 WF YWFSWC WSSW000074
10.10.2006 never NY 17DE58D61BBB0880 WP YWPXB1D DBH0000068575EE2D0
11.10.2006 never NY 17E08BA80A27FC86 AS AS0050 KABG000038
11.10.2006 never NY 17E3CF6C11F54D9D AZ AZ0210 AWZA000036
11.10.2006 never NY 17E0ABED063F3F48 CU CU9000 CIFS000122
11.10.2006 never NY 17E684531080852A CZ CZ5150 KLOM000049
11.10.2006 never NY 17DE79340EAF6A94 CZ CZ5280 KLOM000049
11.10.2006 never NY 17EADF081B9393D9 CZ CZ6300 GSER000128
11.10.2006 never NY 17E3071B15992B26 DE DE5600 DE00000033
11.10.2006 never NY 17E1986B019F16D9 DE DE5690 DE00000033
11.10.2006 never NY 17CAB21417364395 DE DE7120 DE00000023
11.10.2006 never NY 17E9A480173C8D29 DI DI5200 DI00000046
11.10.2006 never AY 17E32DC310229A62 ED YED5203 ED0000003657876B64
11.10.2006 never NY 17EA9B520F9B6679 ER YERDUPD EAMR00000557C5BAD0
11.10.2006 never NY 17E198DA0B38723D EV EV7030 EKVS000013
11.10.2006 never NY 17A65CFB093C2166 EV EV8100 EKVS000006
11.10.2006 never NY 177A892D1F1C7776 EV EV8220 A19R002528
11.10.2006 never NY 17E1993E1111147C FF FF5000 FFOR000021
11.10.2006 never NY 17DECA9C0B0DAFCE GE GE7770 FFOR000021
11.10.2006 never NY 1724E8341F15EFAD HP1 AAFYWR HPSVP2AAFYWR
11.10.2006 never NY 17E1CB2300566C05 KS KS5685 EBVV000187
11.10.2006 never NY 17E28BFC03EFF710 KS YKS5512 CSED00002257821E43
11.10.2006 never NY 17DFDD4605EEA7BE MF MF7000 MFR0000082
11.10.2006 never NY 17B4D0180B03F9DE MF MF7010 MFR0000049
11.10.2006 never NY 17E0DC6408927C8A MF MF7210 MFR0000082
11.10.2006 never NY 17DA36180D9446AF MF MF7801 MFR0000078
11.10.2006 never NY 17E177111B81578C MF MF8703 MFR0000082
11.10.2006 never NY 17E177151C380AAF MF MF8706 MFR0000082
11.10.2006 never NY 17E177220866FA2D MF MF8710 MFR0000082
11.10.2006 never NY 17E177370642ADD6 MF MF8719 MFR0000082
11.10.2006 never NY 17B594B0066C25E1 NF NF5710 NBSI000050
11.10.2006 never NY 17E2E6171F7F7D26 PC PC5090 IVN0000021
11.10.2006 never NY 17E7A1B81656AE65 PC01 PC5060 AIS0000110
11.10.2006 never NY 17DE76B918DA9C41 PC01 PC5070 IVN0000021
11.10.2006 never NY 17E7A1B81656AE65 PC02 PC5060 AIS0000110
11.10.2006 never NY 17DE76B918DA9C41 PC02 PC5070 IVN0000021
11.10.2006 never NY 17E7A1B81656AE65 PC03 PC5060 AIS0000110
11.10.2006 never NY 17DE76B918DA9C41 PC03 PC5070 IVN0000021
11.10.2006 never NY 17E7A1B81656AE65 PC04 PC5060 AIS0000110
11.10.2006 never NY 17DE76B918DA9C41 PC04 PC5070 IVN0000021
11.10.2006 never NY 17E7A1B81656AE65 PC05 PC5060 AIS0000110
11.10.2006 never NY 17DE76B918DA9C41 PC05 PC5070 IVN0000021
11.10.2006 never NY 17E7A1B81656AE65 PC06 PC5060 AIS0000110
11.10.2006 never NY 17DE76B918DA9C41 PC06 PC5070 IVN0000021
11.10.2006 never NY 17D16E971FB872ED RT RT5020 RFT0000015
11.10.2006 never NY 17D16EA202E911B9 RT RT5060 RFT0000015
11.10.2006 never NY 17D16EAD03C58C7F RT RT5090 RFT0000015
11.10.2006 never NY 17A8E8770674C505 RT RT5110 RFT0000004
11.10.2006 never NY 17D16EAF0C9D0C04 RT RT5120 RFT0000015
11.10.2006 never NY 17992C060EE5753A RT RT5130 RFT0000003
11.10.2006 never NY 17D16EB2190EC161 RT RT5140 RFT0000015
11.10.2006 never NY 17D21DC81254ADB6 RT RT5160 RFT0000015
11.10.2006 never NY 17D16EB604B3DB98 RT RT5170 RFT0000015
11.10.2006 never NY 17E1C22E0AF5F78B SV SV5150 WSSV000116
11.10.2006 never NY 17E17DDB0150649C SV SV5210 WSSV000116
11.10.2006 never NY 17E17DB8024394C8 SV SV5600 WSSV000116
11.10.2006 never NY 17E1C234052F1142 SV SV5710 WSSV000116
11.10.2006 never NY 17E1C23510752386 SV SV5740 WSSV000116
11.10.2006 never NY 17E4290D0DADB980 SV SV5760 WSSV000116
11.10.2006 never NY 17E1C2411C77D807 SV SV5790 WSSV000116
11.10.2006 never NY 17E3D0B01ADC51CC SV SV8150 WSSV000116
11.10.2006 never NY 17E6570B0DF9D509 TN TN5010 OTXO000054
11.10.2006 never NY 17E6570B0AABFCCE TN TN5016 OTXO000054
11.10.2006 never NY 17D4BDD2163E5B45 TN TN8900 OTXO000045
11.10.2006 never NY 17DF45A31978F37D TN YTNBOPH OTXO0000545766A5BA
11.10.2006 never NY 17B961AE1FEAFADD TN YTNW100 OTXO0000235628CC9D
11.10.2006 never NY 17E0A92102C7BC46 TN YTNW170 OTXO00005457724BD1
11.10.2006 never NY 176CB0510609DF4D VT YVTBEDR A14S00248553A57407
11.10.2006 never NY 1788AB2E0FBC9B9D VT YVTDTAT A14S00262754901C5B
11.10.2006 never NY 1796F92B10E7D57E VV YVV5070 VDPS00001455081B63
11.10.2006 never NY 17DFC54603338C00 VV YVVZZ04 VDPS000077576AD450
11.10.2006 never NY 17E656340E3DE83C WB WB5280 WSTS000039
11.10.2006 never NY 17EC201A1AFA8989 WB WB5340 WS8B000345
11.10.2006 never NY 17EAE2F8089CF998 WB WB5570 WS8B000334
11.10.2006 never NY 17E1A6F210B0D3D9 WF YWF64CA WSSW000064577A9CFA
11.10.2006 never NY 17E972E002C3EC8F WF YWFCB02 WSSW00003857BC040B
11.10.2006 never NY 17EC7C221097E18D WF YWFM537 WSSW00007157D57C31
11.10.2006 never NY 17F107CB10B8DB9A WF YWFSWC WSSW000075
11.10.2006 never NY 17DE58D40BA30EBC WP YWPXB1E DBH0000068575EE2C6
11.10.2006 never NY 176668360B5FFEA1 WP YWPXBKF A06M0264235370BC96
11.10.2006 never NY 1766684002E8C360 WP YWPXBMA A06M0264235370BCCF
11.10.2006 never NY 1766684811B3EA2C WP YWPXBMB A06M0264235370BD02
11.10.2006 never NY 176668440039D075 WP YWPXBMD A06M0264235370BCE8
11.10.2006 never NY 1766684C0B049E2F WP YWPXBME A06M0264235370BD2A
11.10.2006 never NY 17677F32184B5435 WP YWPXBPA A06M0263755379E68B
11.10.2006 never NY 17677F340A6649C9 WP YWPXBPB A06M0263755379E690
11.10.2006 never NY 17677F3405AC5750 WP YWPXBPC A06M0263755379E696
11.10.2006 never NY 17677F341D17A3E0 WP YWPXBPD A06M0263755379E69D
11.10.2006 never NY 17677F3518790026 WP YWPXBPE A06M0263755379E6A2
11.10.2006 never NY 17677F3613E3A871 WP YWPXBPF A06M0263755379E6A8
11.10.2006 never NY 17677F370DB1C71A WP YWPXBPG A06M0263755379E6AC
11.10.2006 never NY 17677F371BF57588 WP YWPXBPH A06M0263755379E6B1
11.10.2006 never NY 17677F371FB07E30 WP YWPXBPI A06M0263755379E6B5
11.10.2006 never NY 17677F5118A73166 WP YWPXBQA A06M0263755379E6B9
11.10.2006 never NY 17677F511144EF92 WP YWPXBQB A06M0263755379E78F
11.10.2006 never NY 17677F53084CA462 WP YWPXBQD A06M0263755379E797
11.10.2006 never NY 17677F530279B510 WP YWPXBQE A06M0263755379E79C
11.10.2006 never NY 17677F53147291AE WP YWPXBQF A06M0263755379E7A0
11.10.2006 never NY 17677F540684C9B0 WP YWPXBQG A06M0263755379E7A5
11.10.2006 never NY 176781940D2CF56C WP YWPYBAC A06M0263755379FA86
11.10.2006 never NY 176781941A485D20 WP YWPYBAD A06M0263755379FA8A
11.10.2006 never NY 17678195081EC1BE WP YWPYBAE A06M0263755379FA8F
11.10.2006 never NY 176781951ABBE6B1 WP YWPYBAF A06M0263755379FA93
11.10.2006 never NY 1767819607996EDB WP YWPYBAG A06M0263755379FA97
11.10.2006 never NY 17E9811A0494004C WQ WQ5950 CUBE000058
11.10.2006 never NY 17EAB64013708CFF YY YYFILOD BKUR00003857C69CB7
11.10.2006 never NY 17E655791B7D36DE YY YYWBERX TOFF00006757A1E2F4
11.10.2006 never NY 177D37630CC7B5F9 YY YYWBKUR A06M027333543018CE
12.10.2006 never NY 17EC9A750B3B4966 AP YAPUTGK APEN00003657D67A8A
12.10.2006 never NY 17D199770CEF0B1C AU YAU180D AURA00004356F3E622
12.10.2006 never NY 17D199791F734558 AU YAU180I AURA00004356F3E638
12.10.2006 never NY 17D1997B138858E0 AU YAU180S AURA00004356F3E645
12.10.2006 never NY 17D1998A1EF2250C AU YAU181D AURA00004356F3E6C6
12.10.2006 never NY 17D1998B1192E592 AU YAU181I AURA00004356F3E6CB
12.10.2006 never NY 17D1998B15F5960D AU YAU181S AURA00004356F3E6CC
12.10.2006 never NY 17D19991066B9C34 AU YAU190D AURA00004356F3E6FA
12.10.2006 never NY 17D19991196BE2D0 AU YAU190I AURA00004356F3E6FF
12.10.2006 never NY 17D199911CE79E0F AU YAU190S AURA00004356F3E700
12.10.2006 never NY 17D1999210CDFF4E AU YAU191D AURA00004356F3E705
12.10.2006 never NY 17D1999509B99A7E AU YAU191I AURA00004356F3E71C
12.10.2006 never NY 17D1999509753F81 AU YAU191S AURA00004356F3E71C
12.10.2006 never NY 17E569120F986D09 AV AV0150 PMRT000051
12.10.2006 never NY 17E569161C2E460C AV AV0160 PMRT000051
12.10.2006 never NY 17E6F1FE00388943 AV AV0170 PMRT000051
12.10.2006 never NY 17E80DCA144420F7 AV AV0180 PMRT000064
12.10.2006 never NY 17E6F34A1C542AD2 AV AV0190 PMRT000051
12.10.2006 never NY 17E5690601453DA4 AV AV0210 PMRT000051
12.10.2006 never NY 17E5691C1FEF8F43 AV AV0220 PMRT000051
12.10.2006 never NY 17E7261E11CED4EB AV AV0250 PMRT000051
12.10.2006 never NY 17E569221CB31606 AV AV0310 PMRT000051
12.10.2006 never NY 17E569290424F92E AV AV0410 PMRT000051
12.10.2006 never NY 17DC47FA1390D6C0 AV YAVNV10 AIS0000095574D8EE1
12.10.2006 never NY 17DC485E0B0B1C08 AV YAVNV50 AIS0000095574D922B
12.10.2006 never NY 17A58E1516E5BA26 AV YAVTOTX AIS000002855827B69
12.10.2006 never NY 17C57B9A18C275B0 BP BP9060 BPST000037
12.10.2006 never NY 17DD994215DF226A BP YBPMUT BPST00004857589C3C
12.10.2006 never NY 17E8843C18AB4C98 BP YBPMUT BPST00005757B43238
12.10.2006 never NY 17E449311286AF10 BX BX8280 CLOS000125
12.10.2006 never NY 17E0A83E08EB47EA CD CD2590 UPDS000031
12.10.2006 never NY 17EA6663105473D3 CE CE5200 COPE000034
12.10.2006 never NY 17E8116E15E7B590 CE CE5230 COPE000040
12.10.2006 never NY 17E99EAE1F049772 CE CE5300 COPE000034
12.10.2006 never NY 17E4EFD60CB31A1E CE YCE1000 COPE00002957962ADA
12.10.2006 never NY 17E67FDA16C4F939 CE YCEWIAP COPE00002957A34674
12.10.2006 never NY 17E682110D59FF03 CI CI0070 KUGE000031
12.10.2006 never NY 17E6821109F016E7 CI CI0080 KUGE000031
12.10.2006 never NY 17E0A7F118E5C775 CI CI0090 GEGE000015
12.10.2006 never NY 17E064B005AE0F7A CI CI0100 GEGE000017
12.10.2006 never NY 17E85BF10F4354BC CZ CZ5190 GSER000131
12.10.2006 never NY 177B502013162434 CZ CZ5200 CRMA004099
12.10.2006 never NY 17DF3EC70D75E7E9 CZ CZ5270 KLOM000049
12.10.2006 never NY 17E64F65073B6FF1 CZ CZ5400 PIG0000008
12.10.2006 never NY 17E2E4E706CE7607 CZ CZ6400 GSER000112
12.10.2006 never NY 17E2E4EB17BDC9E7 CZ CZ6500 GSER000112
12.10.2006 never NY 17E684571B5726F0 CZ CZ8980 KLOM000049
12.10.2006 never NY 1797EDCC0351F1E8 CZ YCZGETP KUAN00001255101F7D
12.10.2006 never NY 17E0D90B0E57AC88 CZ YCZGETP KUAN0000375773DDC4
12.10.2006 never NY 17B5CCB80F3946D1 CZ YCZJ323 GSER000027560AC099
12.10.2006 never NY 17E2E6531E6AED59 CZ YCZJABW GSER0001115785141E
12.10.2006 never NY 17B5C73D09DFF5D0 CZ YCZM435 BEWI000004560A9276
12.10.2006 never NY 17EC00D70A7D8134 CZ YCZPABW BEWI00001957D171E9
12.10.2006 never NY 178BF8DA14E2F115 CZ YCZT421 GSER00001454ABD271
12.10.2006 never NY 17D4C00C16D32BD1 CZ YCZTPRT BEWI000009570E6247
12.10.2006 never NY 17EA719B19389B69 DE DE0030 DE00000029
12.10.2006 never NY 17EA719D1F583B5B DE DE0050 DE00000029
12.10.2006 never NY 17EA71A00103538E DE DE0090 DE00000029
12.10.2006 never NY 17E198870884B534 DE DE0400 DE00000033
12.10.2006 never NY 17E53CC303741DDE DE DE0410 DE00000033
12.10.2006 never NY 17EA675D0A488D66 DE DE0420 DE00000029
12.10.2006 never NY 17E510E210B6BE25 DE DE0430 DE00000033
12.10.2006 never NY 17E6822315495B6D DE DE0440 DE00000033
12.10.2006 never NY 17E19889042812F8 DE DE0490 DE00000033
12.10.2006 never NY 17E6371A134F6470 DE DE0810 DE00000033
12.10.2006 never NY 17EA71AC1017D74E DE DE0820 DE00000029
12.10.2006 never NY 17E19896115A1003 DE DE0830 DE00000033
12.10.2006 never NY 17E637281C6B55B5 DE DE5130 DE00000033
12.10.2006 never NY 17E63702090A08C1 DE YDE0021 DE0000003357A0E330
12.10.2006 never NY 17E089C91A038550 DE YDELSTO DE00000033577144E4
12.10.2006 never NY 17E2E55203C7547C DP DP0920 DP00000043
12.10.2006 never NY 17CFD8FC028C0581 DP DP7010 DP00000041
12.10.2006 never NY 17ECF7F01BF209E4 EB EB6480 EXPN000054
12.10.2006 never NY 17E6FD7A174794F4 EC EC5130 KLOM000049
12.10.2006 never NY 177E97CB097ACD0A EC YECLOK CRMA003976543BA4EF
12.10.2006 never NY 177E97CC012AE745 EC YECLOK CRMA003976543BA4EFCICS
12.10.2006 never NY 17E88BB70F9E3340 ED ED0830 ED00000043
12.10.2006 never AY 17E9A0A514429F90 ED ED0850 ED00000039
12.10.2006 never NY 17E4CCBA14127BDB ED ED0950 ED00000036
12.10.2006 never NY 17E9A0B6041BC336 ED ED0960 ED00000039
12.10.2006 never NY 17E1A4200897B44C EK EK6841 EMA0000034
12.10.2006 never NY 17797019127C8689 EQ YEQISRK CRMA00418654106690
12.10.2006 never NY 1784774107BB637A EQ YEQKDGP CRMA004309546CDAE6
12.10.2006 never NY 178BFD1A05D461E5 EQ YEQRFT GSER00001454ABF60E
12.10.2006 never NY 17A6AD1B02F6C241 EQ YEQWAEC APEN000014558BE31D
12.10.2006 never NY 17ED10CC14688800 ER YERBER EAMR000012
12.10.2006 never NY 17EC9E3B047884F3 ER YERDCUR EAMR00001257D69A33
12.10.2006 never NY 17EC9E39025DD90F ER YERDGET EAMR00001257D69A21
12.10.2006 never NY 17E99CFB1A3A4217 ER YERDINS EAMR00000557BD6545
12.10.2006 never NY 17EC042310EF0DA1 EX EX5020 EXPN000052
12.10.2006 never NY 17E197B6137F4E9D EX EX5030 EXPN000039
12.10.2006 never NY 17E9560C0AF347FA EX EX6010 EXPN000050
12.10.2006 never NY 17EB8CCA019D77C3 EX YEX0003 EXPN00005357CDA468
12.10.2006 never NY 17E307D61170465D FF FF0010 FFOR000021
12.10.2006 never NY 17E926651F0826E1 FF FF0020 FFOR000022
12.10.2006 never NY 17E9266F01CBE51A FF FF0030 FFOR000022
12.10.2006 never NY 17E926261965C322 FF YFF0004 FFOR00002257B98070
12.10.2006 never NY 1794E96011C50DD7 FF YFF0015 FFOR00000554F6CFF5
12.10.2006 never NY 17E4C446035A844D FI FI2100 BKUR000020
12.10.2006 never NY 17EAB7B81AD228B0 FI FI5200 BKUR000038
12.10.2006 never NY 17E5179104CF21CD FI FI5260 BKUR000018
12.10.2006 never NY 17E1986108E395AD FZ FZ0820 FZ00000007
12.10.2006 never NY 17E885C009D477E6 GA GA0110I KAUT00003357B43EE9
12.10.2006 never NY 17E9513F0C7B8969 GM GM0850 GM00000092
12.10.2006 never NY 168283791329893C HP1 AA6VV6 HPSVP2AA6VV6
12.10.2006 never NY 168288FB194953AF HP1 AAFZWR HPSVP2AAFZWR
12.10.2006 never NY 168292EF08256606 HP1 ABC8QY HPSVP2ABC8QY
12.10.2006 never NY 168288EF0FC755AD HP1 ABMXVN HPSVP2ABMXVN
12.10.2006 never NY 17269E501B3B180E HP1 AD5WV6 HPSVP2AD5WV6
12.10.2006 never NY 1724E8F0081871FA HP1 ADJQR5 HPSVP2ADJQR5
12.10.2006 never NY 17269D2610342D51 HP1 AGOWVT HPSVP2AGOWVT
12.10.2006 never NY 168291F11BA74C66 HP1 AGXNLE HPSVP2AGXNLE
12.10.2006 never NY 168288F315CBB967 HP1 AJ0EWS HPSVP2AJ0EWS
12.10.2006 never NY 1724E6F219E4684F HP1 AUPDVU HPSVP2AUPDVU
12.10.2006 never NY 16C4A94113F9BDB0 HP1 ZAJOIVS HPSVP2ZAJOIVS
12.10.2006 never NY 16C4A93616AD8D13 HP1 ZAJVAVS HPSVP2ZAJVAVS
12.10.2006 never NY 16C4A9C1005B500E HP1 ZANJIVS HPSVP2ZANJIVS
12.10.2006 never NY 168283791329893C HP3 AA6VV6 HPSVP2AA6VV6
12.10.2006 never NY 168288FB194953AF HP3 AAFZWR HPSVP2AAFZWR
12.10.2006 never NY 168292EF08256606 HP3 ABC8QY HPSVP2ABC8QY
12.10.2006 never NY 168288EF0FC755AD HP3 ABMXVN HPSVP2ABMXVN
12.10.2006 never NY 168291F11BA74C66 HP3 AGXNLE HPSVP2AGXNLE
12.10.2006 never NY 168288F315CBB967 HP3 AJ0EWS HPSVP2AJ0EWS
12.10.2006 never NY 17269E501B3B180E HPS AD5WV6 HPSVP2AD5WV6
12.10.2006 never NY 17269D2610342D51 HPS AGOWVT HPSVP2AGOWVT
12.10.2006 never NY 16C4A94113F9BDB0 HPS ZAJOIVS HPSVP2ZAJOIVS
12.10.2006 never NY 16C4A93616AD8D13 HPS ZAJVAVS HPSVP2ZAJVAVS
12.10.2006 never NY 16C4A9C1005B500E HPS ZANJIVS HPSVP2ZANJIVS
12.10.2006 never NY 17E683DD10B93103 KA KA0030 KOAB000039
12.10.2006 never NY 17E863760C45D2AC KE YKEA082 EBVV00022157B31F45
12.10.2006 never NY 17E863791127A995 KE YKEA083 EBVV00022157B31F59
12.10.2006 never NY 17D972E918EDEDBD KR YKRBCAL ACP00000725735CCA5
12.10.2006 never NY 17D37A990140AD5C KS KS5500 CSED000019
12.10.2006 never NY 17E1ED24088B4797 KS YKS5511 CSED000022577CE9CC
12.10.2006 never NY 17DFC09E12E3B3C6 LB YLB0090 AIS0000095576AAD56
12.10.2006 never NY 17E6F77E15DA0E03 LB YLB0091 AIS000009557A7320F
12.10.2006 never NY 17E0862803DC1A99 LB YLB0095 AIS000009557712672
12.10.2006 never NY 17E84189028DAF89 LB YLB0120 IPC000015457B202A2
12.10.2006 never NY 17E798DD0B5C5E1B LC LC0511I TFBM00002757AC7BB6
12.10.2006 never NY 17E0ADD615A51E47 LC YLCTF01 TFBM0000255772734D
12.10.2006 never NY 17E0ADD910512211 LC YLCTF02 TFBM00002557727367
12.10.2006 never NY 17E0ADDD08601560 LC YLCTF03 TFBM00002557727387
12.10.2006 never NY 17E1713103ED44C1 MF MF7020 MFR0000082
12.10.2006 never NY 17CCE9B0118A67B6 MF MF7110 MFR0000065
12.10.2006 never NY 17B4D0181920CFDF MF MF7120 MFR0000049
12.10.2006 never NY 17E7A13C19308C95 MF MF7200 MFR0000090
12.10.2006 never NY 17CD0EC20A938AF7 MF MF7220 MFR0000065
12.10.2006 never NY 17E2198510D24371 MF MF7230 MFR0000082
12.10.2006 never NY 17BE92E90170759C MF MF7240 MFR0000060
12.10.2006 never NY 17D35007082B7716 MF MF7250 MFR0000073
12.10.2006 never NY 17BE92E913AECAA2 MF MF7260 MFR0000060
12.10.2006 never NY 17E0DC6516F2B392 MF MF7300 MFR0000082
12.10.2006 never NY 17E0DC6608802C03 MF MF7310 MFR0000082
12.10.2006 never NY 17C89CC315D749EF MF MF7320 MFR0000065
12.10.2006 never NY 17D8FD741AEFF997 MF MF7330 MFR0000078
12.10.2006 never NY 17E0DC660BF63947 MF MF7340 MFR0000082
12.10.2006 never NY 17E0DC66198AB69A MF MF7360 MFR0000082
12.10.2006 never NY 17C89CDC0BD3F18C MF MF7380 MFR0000065
12.10.2006 never NY 17E219851E2919B9 MF MF7500 MFR0000082
12.10.2006 never NY 17E2190205A0757E MF MF7510 MFR0000082
12.10.2006 never NY 17B4D0270B65D149 MF MF7550 MFR0000049
12.10.2006 never NY 17C89CE312A48935 MF MF7570 MFR0000065
12.10.2006 never NY 17B7CFA91C2036C4 MF MF7580 MFR0000049
12.10.2006 never NY 17B84F7000921AED MF MF7590 MFR0000049
12.10.2006 never NY 17B6BBA61ED986AE MF MF7902 MFR0000049
12.10.2006 never NY 17BE92F1145A4039 MF MF7930 MFR0000060
12.10.2006 never NY 17E3DA470FBF2DCA MF MF8110 MFR0000082
12.10.2006 never NY 17E3F3E6018CD951 MF MF8120 MFR0000082
12.10.2006 never NY 17E30AB003F0D413 MF MF8130 MFR0000082
12.10.2006 never NY 17E6F30703B85C70 MF MF8210 MFR0000082
12.10.2006 never NY 17D3CCD615A15867 MF MF8310 MFR0000073
12.10.2006 never NY 17E219860C653788 MF MF8500 MFR0000082
12.10.2006 never NY 17E219871038619C MF MF8600 MFR0000082
12.10.2006 never NY 17B4D0320EE752C1 MF MF8610 MFR0000049
12.10.2006 never NY 17E219880A17FB3C MF MF8620 MFR0000082
12.10.2006 never NY 17BE98CE0AF90794 MF MF8630 MFR0000060
12.10.2006 never NY 17E3FDA219F8B2E5 MF YMFC101 MFR0000083578E3B26
12.10.2006 never NY 17E3FDA50EDCE63D MF YMFC104 MFR0000083578E3B39
12.10.2006 never NY 17E3FDA70B3553F1 MF YMFC105 MFR0000083578E3B49
12.10.2006 never NY 17DD8C800AD44CCF MF YMFC106 MFR000008357583124
12.10.2006 never NY 17DD81C80EF4F74D MF YMFC107 MFR00000835757D747
12.10.2006 never NY 17DD8C921658856F MF YMFC108 MFR0000083575831C8
12.10.2006 never NY 17DF67DA061ED9DE MF YMFC110 MFR00000835767C4BD
12.10.2006 never NY 17DF67DB01343AB8 MF YMFC112 MFR00000835767C4C4
12.10.2006 never NY 17DF67DB116997D5 MF YMFC113 MFR00000835767C4CA
12.10.2006 never NY 17E3FE67173EF1D2 MF YMFC114 MFR0000083578E4191
12.10.2006 never NY 17DF67DE176EF90E MF YMFC116 MFR00000835767C4E0
12.10.2006 never NN 17DE78AA1B128F76 MF YMFC118 MFR0000083575FEE4D
12.10.2006 never NY 17DAD9280BA326F3 MF YMFC202 MFR0000079574189AF
12.10.2006 never NY 17DAD9431401230E MF YMFC203 MFR000007957418A72
12.10.2006 never NY 17DADA44116B5998 MF YMFC209 MFR0000079574192C4
12.10.2006 never NY 17DAD94E0524B94E MF YMFC211 MFR000007957418AC3
12.10.2006 never NY 17DADBCF0A368F93 MF YMFC217 MFR000007957419FF1
12.10.2006 never NY 17CBCBA51BBB7632 MF YMFC219 MFR000006656C33628
12.10.2006 never NY 17CBCC4601A8601C MF YMFC220 MFR000006656C33B6B
12.10.2006 never NY 17B4CF1006234E55 MF YMFINFO MFR0000050560270B4
12.10.2006 never NY 17B4CF1015EB934D MF YMFINFO MFR0000050560270B4CICS
12.10.2006 never NY 17E218D01A2DDAA6 MF YMFLPID MFR0000082577E5826
12.10.2006 never NY 17DF68030BA4A7BF MF YMFX155 MFR00000835767C612
12.10.2006 never NY 178D1A51119E620C NF NF7700 NBSI000016
12.10.2006 never NY 17A3120D03333059 NF NF8610 NBSC000008
12.10.2006 never NY 17E86A1003DEB37F NF NF8620 NBSC000023
12.10.2006 never NY 17D327F91820E896 NF YNF0101 NBSI00005657010320
12.10.2006 never NY 17B5E78F09FF9550 NF YNFIB03 IB00000013560BA1BD
12.10.2006 never NY 17E100E706EDBB4E NF YNFIB07 IB0000002257752C1E
12.10.2006 never NY 17C99D3B01C61DD9 NG YNGKWEL PROK00006556B0E9D0
12.10.2006 never NY 17C99D541D6D32D7 NG YNGPWEL PROK00006556B0EA50
12.10.2006 never NY 17ED156107AD3E0D NI NI0010 IPC0000170
12.10.2006 never NY 17ECCBE007D2A9DF NI NI0040 IPC0000181
12.10.2006 never NY 17EA44071EF6AE44 NI YNICS01 IPC000015457C2DE87
12.10.2006 never NY 17ED1531187EDE79 NI YNILBP2 IPC000017057DA8023
12.10.2006 never NY 17ED15310902D10F NI YNILBPL IPC000017057DA8022
12.10.2006 never NY 17E17D200ED28855 NL NL7310 BALR000041
12.10.2006 never NY 17CB6F6D0AD01100 NL NL8060 PSFG000032
12.10.2006 never NY 17EF4E071D27AD04 NO NO0970 NO00000030
12.10.2006 never NY 17E05AAF01209F80 NTA1P CZA0183 A02E000561576FB9C6
12.10.2006 never NY 17B0B8DF09918748 NTA1P CZA0199 A02E00053855E028A9
12.10.2006 never NY 17DE50400164A6D7 NZ NZSRV07 NZV0000086
12.10.2006 never NY 17DECAA21F33F9F9 PC YPC0570 IVN000002157629DE6
12.10.2006 never NY 17E6813B1F5FDBA7 PC01 PC5120 IVN0000021
12.10.2006 never NY 17E7C0CB1DE2009F PC01 YPC0520 AIS000011157ADCAC2
12.10.2006 never NY 17DECA32053D2143 PC01 YPC0730 IVN000002157629A14
12.10.2006 never NY 17DECA311087046D PC01 YPC0740 IVN000002157629A15
12.10.2006 never NY 17E6813B1F5FDBA7 PC02 PC5120 IVN0000021
12.10.2006 never NY 17E7C0CB1DE2009F PC02 YPC0520 AIS000011157ADCAC2
12.10.2006 never NY 17DECA32053D2143 PC02 YPC0730 IVN000002157629A14
12.10.2006 never NY 17DECA311087046D PC02 YPC0740 IVN000002157629A15
12.10.2006 never NY 17E6813B1F5FDBA7 PC03 PC5120 IVN0000021
12.10.2006 never NY 17E7C0CB1DE2009F PC03 YPC0520 AIS000011157ADCAC2
12.10.2006 never NY 17DECA32053D2143 PC03 YPC0730 IVN000002157629A14
12.10.2006 never NY 17DECA311087046D PC03 YPC0740 IVN000002157629A15
12.10.2006 never NY 17E6813B1F5FDBA7 PC04 PC5120 IVN0000021
12.10.2006 never NY 17E7C0CB1DE2009F PC04 YPC0520 AIS000011157ADCAC2
12.10.2006 never NY 17DECA32053D2143 PC04 YPC0730 IVN000002157629A14
12.10.2006 never NY 17DECA311087046D PC04 YPC0740 IVN000002157629A15
12.10.2006 never NY 17E6813B1F5FDBA7 PC05 PC5120 IVN0000021
12.10.2006 never NY 17E7C0CB1DE2009F PC05 YPC0520 AIS000011157ADCAC2
12.10.2006 never NY 17DECA32053D2143 PC05 YPC0730 IVN000002157629A14
12.10.2006 never NY 17DECA311087046D PC05 YPC0740 IVN000002157629A15
12.10.2006 never NY 17E6813B1F5FDBA7 PC06 PC5120 IVN0000021
12.10.2006 never NY 17E7C0CB1DE2009F PC06 YPC0520 AIS000011157ADCAC2
12.10.2006 never NY 17DECA32053D2143 PC06 YPC0730 IVN000002157629A14
12.10.2006 never NY 17DECA311087046D PC06 YPC0740 IVN000002157629A15
12.10.2006 never NY 17E958040B0A9E89 RI RI0810 RI00000013
12.10.2006 never NY 17E658A908D7445C RI RI0820 RI00000012
12.10.2006 never NY 1753E1E801C8E77C RP YRPMCOD A12W00063052D54ED2
12.10.2006 never NY 17E19B4E0A563BA1 RT RT0200 RFT0000016
12.10.2006 never NY 17DC968E1EB56CDA RT RT5100 RFT0000016
12.10.2006 never NY 17DF647E180F8484 SA SA0160 CSVE000051
12.10.2006 never NY 17DF648402373064 SA SA0470 CSVE000051
12.10.2006 never NY 17E1C22500E4EAA9 SV SV0240 WSSV000116
12.10.2006 never NY 17E17D4106BD3BAD SV SV0250 WSSV000116
12.10.2006 never NY 17E1C22A0741446E SV SV0930 WSSV000116
12.10.2006 never NY 17E1C21E191CC4E8 SV SV0950 WSSV000116
12.10.2006 never NY 17E67F4816F0A575 SV SV5650 WSSV000116
12.10.2006 never NY 17E1C2411C8D3D49 SV SV5780 WSSV000116
12.10.2006 never NY 17E1C24504D84A02 SV SV5910 WSSV000116
12.10.2006 never NY 17E17DEA0BA804BB SV SV5940 WSSV000116
12.10.2006 never NY 17E19D851E5058C9 SV SV7770 WSSV000116
12.10.2006 never NY 17E17E3708CB0CCE SV SV8300 WSSV000116
12.10.2006 never NY 17E17DB402056D28 SV SV8620 WSSV000116
12.10.2006 never NY 17E17DFF0AC41EBF SV SV8630 WSSV000116
12.10.2006 never NY 17E3CF5218ED5984 SV YSVAUHI WSSV000116578CB6A6
12.10.2006 never NY 1775A4131007686E SV YSVBUID A06M02547153F08CAD
12.10.2006 never NY 17E657201170B0BB TN TN0530 OTXO000054
12.10.2006 never NY 17E1E94F01B663D1 TN YTN0021 OTXO000054577CC9AE
12.10.2006 never NY 17E1E9491B322516 TN YTN0100 OTXO000054577CC97A
12.10.2006 never NY 17C8CC6419D27532 TN YTNDEP OTXO00003656AA11D9
12.10.2006 never NY 17E6558C1322BCCF TN YTNOTF OTXO00005457A1E392
12.10.2006 never NY 17DF45A60F2A7989 TN YTNSICH OTXO0000545766A5D8
12.10.2006 never NY 17E67D330AF98717 TN YTNUPD OTXO00005457A33001
12.10.2006 never NY 17E97FE90F708F1A TP TP0800 TP00000006
12.10.2006 never NY 17E08C24031B3CE6 UU UU5170 RS20000050
12.10.2006 never NY 17E089240269C872 VD VDDBM15 DSPV000030
12.10.2006 never NY 17E0892319281FB1 VD VDGLH00 DSPV000030
12.10.2006 never NY 17E4505513488971 VP VP0030 VIP0000015
12.10.2006 never NY 17E1C561053A68D4 VP VP5300 VIP0000015
12.10.2006 never NY 17E1C55A15612ADA VP VP5310 VIP0000015
12.10.2006 never NY 17E1C5681055CB39 VP VP5330 VIP0000015
12.10.2006 never NY 17E197C30A29756B VT VT5130 EBZV000009
12.10.2006 never NY 17B7F61D13F75756 VV YVVZZ15 VDPS000052561CE2B7
12.10.2006 never NY 17E655B20CE8B678 WB WB0330 WS8B000316
12.10.2006 never NY 17E657D9016B243C WB WB0510 WSTS000039
12.10.2006 never NY 17E657DA121C737D WB WB0520 WSTS000039
12.10.2006 never NY 17E657DC019767AE WB WB0530 WSTS000039
12.10.2006 never NY 17E656280A3A76EF WB WB0550 WSTS000039
12.10.2006 never NY 17E657DF0A2107EF WB WB0570 WSTS000039
12.10.2006 never NY 17E657E01EB07746 WB WB0580 WSTS000039
12.10.2006 never NY 17E657E20F6569CE WB WB0600 WSTS000039
12.10.2006 never NY 17E657E4057139CB WB WB0620 WSTS000039
12.10.2006 never NY 17E656290F96D45C WB WB0630 WSTS000039
12.10.2006 never NY 17E657E515D83022 WB WB0660 WSTS000039
12.10.2006 never NY 17E6562A10339C08 WB WB0680 WSTS000039
12.10.2006 never NY 17E657E81ADCDFE4 WB WB0830 WSTS000039
12.10.2006 never NY 17E6562C1B46E4CD WB WB0840 WSTS000039
12.10.2006 never NY 17E657EA064338A2 WB WB0870 WSTS000039
12.10.2006 never NY 17E657FD19DED6AE WB WB0940 WSTS000039
12.10.2006 never NY 17E657FE18982280 WB WB0950 WSTS000039
12.10.2006 never NY 17E658000744B5E1 WB WB0970 WSTS000039
12.10.2006 never NY 17EC2004111ADB1D WB WB0980 WS8B000345
12.10.2006 never NY 17BA08BB06322FA4 WB WB0990 TOFF000026
12.10.2006 never NY 17E658021976720D WB WB1020 WSTS000039
12.10.2006 never NY 17E658030E0E4658 WB WB1030 WSTS000039
12.10.2006 never NY 17E658041E70F5FC WB WB1040 WSTS000039
12.10.2006 never NY 17E6580613FC183E WB WB1050 WSTS000039
12.10.2006 never NY 17E658091BD1E38A WB WB1070 WSTS000039
12.10.2006 never NY 17E658470DCF65C8 WB WB1080 TOFF000067
12.10.2006 never NY 17E658481B0AD1F9 WB WB1090 TOFF000067
12.10.2006 never NY 17E658491A659997 WB WB1100 TOFF000067
12.10.2006 never NY 17E6580B0834A199 WB WB1110 WSTS000039
12.10.2006 never NY 17E6562D1E211910 WB WB1130 WSTS000039
12.10.2006 never NY 17EC20040FB5B229 WB WB1290 WS8B000345
12.10.2006 never NY 17E6580C1C1EDF66 WB WB1310 WSTS000039
12.10.2006 never NY 17E6580E095E8853 WB WB1340 WSTS000039
12.10.2006 never NY 17D7B9B01E44C020 WB WB5040 WS8B000222
12.10.2006 never NY 17E656330D4C86A5 WB WB5260 WSTS000039
12.10.2006 never NY 17E6581815414CAF WB WB5270 WSTS000039
12.10.2006 never NY 17E658191FEC3935 WB WB5290 WSTS000039
12.10.2006 never NY 17E8841A040A663F WB YWB0082 WSTS00004457B43111
12.10.2006 never NY 17E656C50DE4DA58 WB YWB530 WS8B000312
12.10.2006 never NY 17E653B21AAE9238 WB YWBBODA WS8B00028657A1D413
12.10.2006 never NY 17E79C6D161BB342 WB YWBBOPR WS8B00032957AC99AE
12.10.2006 never NY 17DE50AF0834DC9E WB YWBCTA WS8B000286575E9C03
12.10.2006 never NY 17DF44FA0A7FAA50 WB YWBEBSM WSTS00003957669F37
12.10.2006 never NY 17DE592B1DF94E8E WB YWBIO WS8B000286575EE61A
12.10.2006 never NY 17D70EA10E338102 WB YWBITV TOFF0000595721BC72
12.10.2006 never NY 17DE50E70D9A610C WB YWBMAS WS8B000286575E9E49
12.10.2006 never NY 17E653D71522AA54 WB YWBN100 WS8B00028657A1D54A
12.10.2006 never NY 17E0A3CE1788E1A5 WB YWBSA2 WS8B00028657721F2F
12.10.2006 never NY 17E6549412925009 WB YWBSUM WS8B00028657A1DB75
12.10.2006 never NY 178CBAB501330F34 WB YWBSYM WS8B00001654B22C92
12.10.2006 never NY 17E657BB1056E9C9 WC WC5010 OTXO000054
12.10.2006 never NY 17E657BC01D55B18 WC WC5050 OTXO000054
12.10.2006 never NY 17A7996B0D814A9D WC WC7230 OTXO000014
12.10.2006 never NY 177B7D0E0491C98D WC WC7250 A06M027069
12.10.2006 never NY 17D4BDE90BAD8C6B WC WC7280 OTXO000045
12.10.2006 never NY 17E657CC0503B1C6 WC WC8401 OTXO000054
12.10.2006 never NY 17E657CD0A58BA81 WC WC8410 OTXO000054
12.10.2006 never NY 17E08AA010384A51 WF WF0280 WSSW000064
12.10.2006 never NY 17E08AAD165B6D7E WF WF0300 WSSW000064
12.10.2006 never NY 17E08AB604CCD574 WF WF0310 WSSW000064
12.10.2006 never NY 17E08AC60AFB310F WF WF0320 WSSW000064
12.10.2006 never NY 17E08B0410799D5C WF WF0350 WSSW000064
12.10.2006 never NY 17F107CA1893BFF0 WF WF5410 WSSW000075
12.10.2006 never NY 17E19D331291BFE6 WI YWI0087 WS8B000313577A4B43
12.10.2006 never AY 17CFE0520FB13724 WI YWINS01 WS8I00015256E5718A
12.10.2006 never AY 17CFE05212619DDC WI YWINS02 WS8I00015256E5718C
12.10.2006 never AY 17CFE053032A0468 WI YWINS03 WS8I00015256E57190
12.10.2006 never AY 17CFE05313FE1157 WI YWINS04 WS8I00015256E57194
12.10.2006 never AY 17CFE054014D9976 WI YWINS05 WS8I00015256E57198
12.10.2006 never AY 17CFE055174B3B60 WI YWINS06 WS8I00015256E571A6
12.10.2006 never AY 17CFE05612B16A21 WI YWINS07 WS8I00015256E571A9
12.10.2006 never AY 17CFE05613902EC9 WI YWINS08 WS8I00015256E571AD
12.10.2006 never AY 17CFE05702EF0AE6 WI YWINS09 WS8I00015256E571B1
12.10.2006 never AY 17CFE0571E7F23ED WI YWINS10 WS8I00015256E571B5
12.10.2006 never NY 17EDDF7409950811 WM WM0010 WSIN000037
12.10.2006 never NY 17DB2DCA180393A6 WP YWPR1PX DBH000006857444F52
12.10.2006 never NY 17DB2DCF18BB6738 WP YWPR2PX DBH000006857444F62
12.10.2006 never NY 17DB2DD008C545C4 WP YWPR3PX DBH000006857444F88
12.10.2006 never NY 17DB2DDA0BA04058 WP YWPR6PX DBH000006857444FA1
12.10.2006 never NY 17E4010514465F4F WP YWPR7PX DBH0000068578E578A
12.10.2006 never NY 17DB2DC506334F0D WP YWPRAPX DBH000006857444F3A
12.10.2006 never NY 17DB2DC41977C9A9 WP YWPRBPX DBH000006857444F3E
12.10.2006 never NY 17C75E6E18606571 WP YWPRCBX DBH0000054569E140F
12.10.2006 never NY 17DB2DC41E0EE810 WP YWPRCPX DBH000006857444F41
12.10.2006 never NY 17DE58CC1B7B0615 WP YWPXB1A DBH0000068575EE2A7
12.10.2006 never NY 17DE58DC0CF6834F WP YWPXB1B DBH0000068575EE2E4
12.10.2006 never NY 17DE58D9139CB188 WP YWPXB1C DBH0000068575EE2D9
12.10.2006 never NY 176667C7006B7E9A WP YWPXBAC A06M0264235370B10A
12.10.2006 never NY 176667CD056A3D7A WP YWPXBAD A06M0264235370B1E6
12.10.2006 never NY 176667CA09A86408 WP YWPXBAE A06M0264235370B1AE
12.10.2006 never NY 176667D51FED37D2 WP YWPXBBA A06M0264235370B3E8
12.10.2006 never NY 176667DB1B6DE180 WP YWPXBBB A06M0264235370B45A
12.10.2006 never NY 176667D91CF59238 WP YWPXBBC A06M0264235370B429
12.10.2006 never NY 176667DF01C4917E WP YWPXBBD A06M0264235370B547
12.10.2006 never NY 176667DD12019CAC WP YWPXBBE A06M0264235370B480
12.10.2006 never NY 17677F030A5B5E3D WP YWPXBCA A06M0263755379E4F0
12.10.2006 never NY 17677F0402A543E4 WP YWPXBCB A06M0263755379E4FF
12.10.2006 never NY 17677F04164F7472 WP YWPXBCC A06M0263755379E503
12.10.2006 never NY 17677F0503D92548 WP YWPXBCD A06M0263755379E50A
12.10.2006 never NY 17677F051A7D55E6 WP YWPXBCE A06M0263755379E510
12.10.2006 never NY 176667EC065E104D WP YWPXBDA A06M0264235370B94F
12.10.2006 never NY 176667E91C8CB4AF WP YWPXBDB A06M0264235370B8E2
12.10.2006 never NY 176667E8023144DC WP YWPXBDC A06M0264235370B829
12.10.2006 never NY 176667F41DCB23A5 WP YWPXBDF A06M0264235370B9D2
12.10.2006 never NY 176667F21F858384 WP YWPXBDG A06M0264235370B9BD
12.10.2006 never NY 17677F0D0ACA9B8E WP YWPXBGA A06M0263755379E553
12.10.2006 never NY 17677F0D1E74FB7E WP YWPXBGB A06M0263755379E557
12.10.2006 never NY 17677F0E0AC23084 WP YWPXBGC A06M0263755379E55B
12.10.2006 never NY 1766680C052BB1AD WP YWPXBIA A06M0264235370BB01
12.10.2006 never NY 1766680A04B3F2D0 WP YWPXBIB A06M0264235370BAE8
12.10.2006 never NY 1766680E06DEDCCD WP YWPXBIC A06M0264235370BB24
12.10.2006 never NY 17666810047293AC WP YWPXBID A06M0264235370BB38
12.10.2006 never NY 1766681704F799A5 WP YWPXBIE A06M0264235370BB6C
12.10.2006 never NY 17DE58AA1C28E51D WP YWPXBJA DBH0000068575EE13F
12.10.2006 never NY 17DE58B718E53B10 WP YWPXBJB DBH0000068575EE18E
12.10.2006 never NY 17DE58B50A1FB690 WP YWPXBJC DBH0000068575EE17C
12.10.2006 never NY 17DE58B3042C2DBF WP YWPXBJD DBH0000068575EE163
12.10.2006 never NY 17DE58B01B612602 WP YWPXBJE DBH0000068575EE157
12.10.2006 never NY 1766682E02285930 WP YWPXBKA A06M0264235370BC46
12.10.2006 never NY 1766683319EBD2DE WP YWPXBKB A06M0264235370BC7D
12.10.2006 never NY 176668311EDBCE89 WP YWPXBKC A06M0264235370BC67
12.10.2006 never NY 1766682F1F71DCCD WP YWPXBKD A06M0264235370BC5C
12.10.2006 never NY 176668381784073C WP YWPXBKE A06M0264235370BCA4
12.10.2006 never NY 176B21CE0429370D WP YWPXBLC A06M0263755398650C
12.10.2006 never NY 1766684600573C01 WP YWPXBMC A06M0264235370BCF8
12.10.2006 never NY 17677F190EC1C916 WP YWPXBNA A06M0263755379E5B7
12.10.2006 never NY 17677F191A69DB9F WP YWPXBNB A06M0263755379E5BB
12.10.2006 never NY 17677F1A08169C99 WP YWPXBNC A06M0263755379E5BF
12.10.2006 never NY 17677F2B0414B5C9 WP YWPXBND A06M0263755379E63F
12.10.2006 never NY 17677F2B0BF9A7A6 WP YWPXBNE A06M0263755379E649
12.10.2006 never NY 17677F2C01AD43AE WP YWPXBNF A06M0263755379E64D
12.10.2006 never NY 17677F2B1BBE6B06 WP YWPXBNG A06M0263755379E652
12.10.2006 never NY 17677F2C1D20406D WP YWPXBNH A06M0263755379E656
12.10.2006 never NY 17677F2D08C3375F WP YWPXBNI A06M0263755379E65B
12.10.2006 never NY 17677F2D13F04D46 WP YWPXBOA A06M0263755379E660
12.10.2006 never NY 17677F2E0ACA2E4A WP YWPXBOB A06M0263755379E665
12.10.2006 never NY 17677F2E1BD65360 WP YWPXBOC A06M0263755379E669
12.10.2006 never NY 17677F5211695276 WP YWPXBQC A06M0263755379E793
12.10.2006 never NY 176668541D0BF1D8 WP YWPXBTA A06M0264235370BD89
12.10.2006 never NY 176668530B62F5C0 WP YWPXBTB A06M0264235370BD79
12.10.2006 never NY 176668571E4D6A89 WP YWPXBTC A06M0264235370BD99
12.10.2006 never NY 176668560ED88EB2 WP YWPXBTD A06M0264235370BD90
12.10.2006 never NY 1766685D0DBD9AA6 WP YWPXBTE A06M0264235370BDF5
12.10.2006 never NY 1766686918093289 WP YWPXBUC A06M0264235370BE52
12.10.2006 never NY 17A5948E1DE7E1E3 WP YWPXBXA DBH00000195582B1B3
12.10.2006 never NY 17A5949306D849F0 WP YWPXBXB DBH00000195582B1DA
12.10.2006 never NY 17A5949600865104 WP YWPXBXC DBH00000195582B1F3
12.10.2006 never NY 17A59499034EAF75 WP YWPXBXD DBH00000195582B20D
12.10.2006 never NY 17A594B7167CDA05 WP YWPXBXE DBH00000195582B30B
12.10.2006 never NY 1767819309CF9D24 WP YWPYBAA A06M0263755379FA7F
12.10.2006 never NY 1767819317D00B12 WP YWPYBAB A06M0263755379FA83
12.10.2006 never NY 176781D3033AD13F WP YWPYBCA A06M0263755379FC8E
12.10.2006 never NY 176781D30416D5BC WP YWPYBCB A06M0263755379FC94
12.10.2006 never NY 176781D3189E005D WP YWPYBCC A06M0263755379FC9A
12.10.2006 never NY 176781D40EDA0F82 WP YWPYBCD A06M0263755379FCA0
12.10.2006 never NY 176782321E54E08C WP YWPYBCE A06M0263755379FE40
12.10.2006 never NY 1793D8DF18992804 WP YWPYBDC DBH000002254EDE1AB
12.10.2006 never NY 17E30CF01534A1D6 WQ WQ6010 CUBE000052
12.10.2006 never NY 17D25B9612B1B12D WQ YWQ1101 CUBE00003556FA509B
12.10.2006 never NY 17C2D3A01732FD37 WQ YWQ1501 CUBE0000305677F9BE
12.10.2006 never NY 17C2D1A30E88BF6E WQ YWQ1502 CUBE0000305677E85A
12.10.2006 never NY 17E51BD21F22A4AD WQ YWQBERI CUBE00005257979BE0
12.10.2006 never NY 17D2B60305D6060B WQ YWQEXCP CUBE00003956FD4720
12.10.2006 never NY 17A0E53601EDEA20 WQ YWQREPI CUBE000003555B64DD
12.10.2006 never NY 17C8CBAC06E54B3B YY YYDB2FK TOFF00004856AA0B30
12.10.2006 never NY 17E0B2710D08B6C3 YY YYNLCPO MOD0000021577299E0
12.10.2006 never NY 17D39F8E1D4A3BE1 YY YYVPSVF VIP00000145704EE3B
12.10.2006 never NY 17CE271E0FD72FC3 YY YYWB101 WS8B00018756D6FC76
12.10.2006 never NY 17DF44F2006E7C70 YY YYWBVIN WSTS00003957669F10
13.11.2006 never NY 17F3896418E9A100 DE DE0030 DE00000038
13.11.2006 never NY 17F011370D4D6B12 DE DE0410 DE00000038
13.11.2006 never NY 17F3876E11C76B47 DE DE0820 DE00000038
13.11.2006 never NY 17F3866D04B74B97 ED ED0830 ED00000040
13.11.2006 never NY 17F4566D0A848A80 ED ED0960 ED00000040
13.11.2006 never NY 17EEAF9E18CE7293 EK EK6841 EMA0000048
13.11.2006 never NY 17EF4D4B0B0DEFBB FF FF0010 FFOR000023
13.11.2006 never NY 17F0DBB515459805 FF FF0020 FFOR000023
13.11.2006 never NY 17F0DBB51923338F FF FF0030 FFOR000023
13.11.2006 never NY 17F4A1E90ADBA591 GM GM0850 GM00000105
13.11.2006 never NY 17F6631603B65379 GM GM0850 GM00000118
13.11.2006 never NY 17F0D69A0BE9BA02 RI RI0820 RI00000014
13.11.2006 never NY 17F42B521E51FFA3 WB WB0630 WS8B000320
13.11.2006 never NY 17F65A5217A5D6F2 WB WB0630 WSTS000048
13.11.2006 never NY 17F42B4707CCEA19 WB WB0680 WS8B000320
13.11.2006 never NY 17F65A530F26EE8E WB WB0680 WSTS000048
13.11.2006 never NY 17F608D00437DC2D WB WB0720 WS8B000370
13.11.2006 never NY 17EFF3840280BCCC WB WB0870 WSTS000043
13.11.2006 never NY 17EDDBD30DE30F06 WB YWBEBSM WSTS00004357E1024F
13.11.2006 never NY 17F65A4E11AB0A37 WB YWBEBSM WSTS0000485828352D
13.11.2006 never NY 17F3B503051A38CD WQ WQ5950 CUBE000056
13.11.2006 never NY 17EDE3C11085328C WQ YWQ1501 CUBE00005657E144E3
13.11.2006 never NY 17EDE3CA01C69FC1 WQ YWQ1502 CUBE00005657E14527
14.11.2006 never NY 17F5FB170D75B342 CE CE5300 NOST000271
14.11.2006 never NY 17F3B0D708AC85EC CZ YCZJABW GSER0001095811EEAB
14.11.2006 never NY 17F1F750161BE79A PC01 PC5120 IVN0000024
14.11.2006 never NY 17F1F750161BE79A PC02 PC5120 IVN0000024
14.11.2006 never NY 17F1F750161BE79A PC03 PC5120 IVN0000024
14.11.2006 never NY 17F1F750161BE79A PC04 PC5120 IVN0000024
14.11.2006 never NY 17F1F750161BE79A PC05 PC5120 IVN0000024
14.11.2006 never NY 17F1F750161BE79A PC06 PC5120 IVN0000024
14.11.2006 never NY 17F666A31EC1AF09 WB WB0720 WS8B000373
14.11.2006 never NY 17F5FC081C4D837F WB WB0840 NOST000271
14.11.2006 never NY 17F5FC1F1872F751 WB WB1130 NOST000271
14.11.2006 never NY 17F1316B166C291E WB YWB0082 WSTS00004357FCFAC3
16.11.2006 never NY 17F6A5D00822433A WB WB0720 WS8B000374
16.11.2006 never NY 17F429F81B636042 WB WB1300 TOFF000076
16.11.2006 never NY 17ED9325083C45D7 WF YWF64CA WSSW00004357DEA0AA
16.11.2006 never NY 17F5424807BCCD23 WF YWFSWC WSSW000043
16.11.2006 never NY 17677F0816E5617A WP YWPXBEA A06M0263755379E52A
16.11.2006 never NY 17677F09081A7400 WP YWPXBEB A06M0263755379E52F
16.11.2006 never NY 17677F0913FCC1B2 WP YWPXBEC A06M0263755379E534
16.11.2006 never NY 17677F0A067E8438 WP YWPXBED A06M0263755379E538
16.11.2006 never NY 17677F0A1D900EA0 WP YWPXBEE A06M0263755379E53D
16.11.2006 never NY 17677F0B0C4BCB5E WP YWPXBEF A06M0263755379E540
16.11.2006 never NY 17677F0B1D18DF9B WP YWPXBEG A06M0263755379E545
17.11.2006 never NY 17EF53491427E028 CZ YCZPABW GSER00010957ED4FDC
17.11.2006 never NY 17F131A20AF5B84E FC FC0050 KLOM000050
17.11.2006 never NY 17F6658610966261 GM GM0850 GM00000117
17.11.2006 never NY 17F1F4EE0F6BAE2B WF WF0280 WSSW000043
17.11.2006 never NY 17F011F01151C0AF WF WF0300 WSSW000043
17.11.2006 never NY 17F01BA30CDEFD01 WF WF0310 WSSW000043
17.11.2006 never NY 17F0120818D71E36 WF WF0320 WSSW000043
17.11.2006 never NY 17F1F4F00D3B936D WF WF0350 WSSW000043
17.11.2006 never NY 17F5424F0E3C4DA1 WF WF5410 WSSW000043
19.11.2006 never NY 17F29E680D9BE978 WF YWFM537 WSSW0000435808F092
20.11.2006 never NY 17F3B7AA01DFB8BF SV SV5770 WSSV000121
20.11.2006 never NY 17F6D8B21540EC6A WB WB0720 WS8B000376
21.11.2006 never NY 17F664BF091393F6 DE DE0030 DE00000052
21.11.2006 never NY 17F1F0FD18B677B4 DE DE0050 DE00000038
21.11.2006 never NY 17F1F1000193D3BC DE DE0090 DE00000038
21.11.2006 never NY 17F3896719061DE2 DE DE0420 DE00000038
21.11.2006 never NY 17F596E01F4C525E DE DE0810 DE00000038
21.11.2006 never NY 17F664C504C266FE DE DE0820 DE00000052
21.11.2006 never NY 17F664CE19051000 ED ED0960 DE00000052
21.11.2006 never NY 17F38B2B066DD61C FZ FZ0820 FZ00000010
21.11.2006 never NY 17F664F21E7CDEB5 RI RI0820 DE00000052
21.11.2006 never NY 17F110FD1F448DB8 TN YTNUPD OTXO00005857FBEABF
21.11.2006 never NY 17EFF1AA191162DE WI YWI0087 TOFF00007657F28089
22.11.2006 never NY 17F65C6C0117D7F6 CZ YCZJABW GSER000148582846ED
22.11.2006 never NY 17F706BE186E58BA CZ YCZPABW ACP0000086582DDBB5
22.11.2006 never NY 17F77ACC1DE8C19B DE DE0030 DE00000049
22.11.2006 never NY 17F77B560EBFAE0B DE DE0420 DE00000049
22.11.2006 never NY 17F77B160DFE5E9A DE DE0810 DE00000049
22.11.2006 never NY 17EF29AF18EA992A SV SV0240 WSSV000121
22.11.2006 never NY 17F7743E0ABC8050 WB WB0720 WS8B000379
23.11.2006 never NY 17EA65930A17DB5D CE CE8200 COPE000034
23.11.2006 never NY 17EA667514C0A152 CE CE8500 COPE000034
23.11.2006 never NY 17F480FC1001B81A ER YERBER EAMR000010
23.11.2006 never NY 17F6B7B80F6E842A WF YWFSWC WSSW000046
23.11.2006 never NY 17DB2DC8147A27B9 WP YWPRDPX DBH000006857444F45
23.11.2006 never NY 176667C50ACD815E WP YWPXBAA A06M0264235370B066
23.11.2006 never NY 176667C812D9D466 WP YWPXBAB A06M0264235370B182
24.11.2006 never NY 17F66346063C6A3C FF FF0020 FFOR000027
24.11.2006 never NY 17F663460CE857A7 FF FF0030 FFOR000027
24.11.2006 never NY 1722313B1808FBA0 HP1 ABAIRK HPSVP2ABAIRK
24.11.2006 never NY 162A384019C60FBD HP1 AHJFRK HPSVP2AHJFRK
24.11.2006 never NY 1722313B1808FBA0 HP3 ABAIRK HPSVP2ABAIRK
24.11.2006 never NY 162A384019C60FBD HP3 AHJFRK HPSVP2AHJFRK
24.11.2006 never NY 162A384019C60FBD HPS AHJFRK HPSVP2AHJFRK
24.11.2006 never NY 17F7CEAC0ACF3CE1 WB WB0720 WS8B000386
24.11.2006 never NY 17F6B7E70A49CE6A WF WF5410 WSSW000046
27.11.2006 never NY 161FDC7B0F3AA690 PHPS53 H0014
27.11.2006 never NY 161FDC7B0F3AA690 PHPSPTA H0014
28.11.2006 never NY 17E80DEC01CFEA6F MF MF8930 MFR0000086
29.11.2006 never NY 17F3368814223FE3 FI FI1900 BKUR000041
29.11.2006 never NY 17F336B10B83A2A6 FI FI5067 BKUR000041
30.11.2006 never NY 17D3569706302E1A VT VT5110 EBZV000007
30.11.2006 never NY 17F81DED08BC564E WB WB0720 WS8B000383
04.12.2006 never NY 17F8B9221DEAFF7E CZ CZ6300 KLOM000058
05.12.2006 never NY 17F3B75B03B61B8C WB WB5340 TOFF000076
06.12.2006 never NY 17F0362D18F23091 CE CE8440 COPE000042
06.12.2006 never NY 17F178200DCA8399 CZ CZ6300 KLOM000050
06.12.2006 never NY 17F7CC8912CEB84F DE DE0030 DE00000058
06.12.2006 never NY 17F7CC900438FDD7 DE DE0420 DE00000058
06.12.2006 never NY 17F7CC920A05967B DE DE0810 DE00000058
06.12.2006 never NY 17EF1F1E165DD21C DE DE7120 DE00000038
06.12.2006 never NY 17E19867142425A9 DE DE9992 DE00000033
06.12.2006 never NY 17F81A7302C1DF27 ER YERBER EAMR000020
06.12.2006 never NY 17EF4D4E12F2AC35 FF FF5000 FFOR000023
06.12.2006 never NY 17F03903043601C0 KS KS5685 EBVV000233
06.12.2006 never NY 17EFBD2F03AB0F3D MF MF8706 MFR0000086
06.12.2006 never NY 17EFC2A6109D25A0 MF MF8710 MFR0000086
06.12.2006 never NY 17E1773113D52431 MF MF8717 MFR0000082
06.12.2006 never NY 17EFBD3017F6D701 MF MF8719 MFR0000086
06.12.2006 never NY 1603114C09187630 PHPS53 HMPBTBL
06.12.2006 never NY 1603114C09187630 PHPSPTA HMPBTBL
06.12.2006 never NY 1798FBDD04B87AF8 PU PU7334 A18Q002532
06.12.2006 never NY 17D34A07007AC032 RM YRMORGB PARS000054570220C1
06.12.2006 never NY 17C8272B0B878916 RT YRT0002 RFT000000956A4A7F6
06.12.2006 never NY 17F365DA01787EC3 SV SV5600 WSSV000121
06.12.2006 never NY 17F3B7941FA91076 SV SV5740 WSSV000121
06.12.2006 never NY 17F3B79D0B2A07A1 SV SV5750 WSSV000121
06.12.2006 never NY 17F3B7A501DF68D8 SV SV5760 WSSV000121
06.12.2006 never NY 17F3AF7901670AC2 SV SV5790 WSSV000121
06.12.2006 never NY 17E6558E1BD85139 TN YTN0180 OTXO00005457A1E3A8
06.12.2006 never NY 17E655900C824645 TN YTN0190 OTXO00005457A1E3AF
06.12.2006 never NY 17F315F202926D77 VT YVTDTAT EBZV000010580CDB55
06.12.2006 never NY 17E05DCA16EB4AB6 VV YVVZZ19 VDPS000077576FD3D1
06.12.2006 never NY 17F931A407386CC9 WB WB0720 WS8B000390
06.12.2006 never NY 17F81DC012503B34 WF YWFSWC WSSW000078
06.12.2006 never NY 17F65C6E00EFD5FB WQ WQ5950 CUBE000069
07.12.2006 never NY 17E1A52218671DC2 AS AS0610 KABG000038
07.12.2006 never NY 17EFCD88088B7283 AV YAVNV10 AIS000009757F15171
07.12.2006 never NY 17ECF5620CF828B7 AV YAVNV50 AIS000009757D9753E
07.12.2006 never NY 17E4F02D0B0BDEC0 CE CE0100 COPE000029
07.12.2006 never NY 17F29A9C0DA1F58D CE CE5200 COPE000042
07.12.2006 never NY 17F12C92081F6E58 CE CE5230 COPE000042
07.12.2006 never NY 17F68B54022CF1B7 CE CE5300 NOST000275
07.12.2006 never NY 17E67FF71A9282F7 CE CE5730 COPE000029
07.12.2006 never NY 17F4CBF21ED618C9 CE CE8200 COPE000042
07.12.2006 never NY 17F12C9A14C6A418 CE CE8500 COPE000042
07.12.2006 never NY 17EFE68C0CD2062B CE YCE1000 COPE00004257F22347
07.12.2006 never NY 17F24C5E1877D4A5 CE YCEWIAP COPE0000425806405E
07.12.2006 never NY 17F24A720D89D939 CZ CZ6400 GSER000123
07.12.2006 never NY 17F03B2802067F9D CZ CZ6500 GSER000109
07.12.2006 never NY 17F225D31E8E6C06 EB EB6480 EXPN000051
07.12.2006 never NY 17F664581D55D4C5 ED ED0830 ED00000049
07.12.2006 never NY 17F036DD0D7F8420 ED ED0950 ED00000040
07.12.2006 never NY 17F77E3A00D6B07E ED ED0960 DE00000049
07.12.2006 never NY 17F1539B14B62745 ER YERDCUR EAMR00001057FE19A1
07.12.2006 never NY 17F33AC11B7C623E ER YERDGET EAMR000010580E1012
07.12.2006 never NY 17F183BD111074A0 ER YERDINS EAMR00001057FFAD64
07.12.2006 never NY 17F1F8D80FA1F64A ER YERDUPD EAMR000010580383BA
07.12.2006 never NY 17F663451F4D51C0 FF FF0010 FFOR000027
07.12.2006 never NY 17F819AA1A687185 FF FF0020 FFOR000029
07.12.2006 never NY 17F819AC00A6E720 FF FF0030 FFOR000029
07.12.2006 never NY 17F702E71725BB76 GM GM0850 GM00000129
07.12.2006 never NY 16A202BD0C772F97 HP1 RWBM003 HPSVP1RWBM003
07.12.2006 never NY 16AEAEB403F397E3 HP1 RWBR040 HPSVP2RWBR040
07.12.2006 never NY 16AEAEB403F397E3 HP3 RWBR040 HPSVP2RWBR040
07.12.2006 never NY 17F660C506E35510 KA KA0030 KOAB000047
07.12.2006 never NY 17C3E66A05626FD5 NF NF7670 NBSI000061
07.12.2006 never NY 17F0DD0D111CF20E NI NI0010 IPC0000156
07.12.2006 never NY 17F01A160CEF09DD NI NI0040 IPC0000156
07.12.2006 never NY 17EC97A11FA75806 NI YNI0161 IPC000017957D662DA
07.12.2006 never NY 17F0199F1620B3C6 NI YNILBP2 IPC000015657F3CF6B
07.12.2006 never NY 17E289E710ACC65A NO NO0960 NO00000024
07.12.2006 never NY 17F224E40780A2A1 NO NO0970 NO00000027
07.12.2006 never NY 17F0DFF103776A51 NTA1P CZA0199 A02E00056457FA4F4F
07.12.2006 never NY 17F24A40085E0995 RI RI0810 RI00000014
07.12.2006 never NY 17F3609104232730 SV SV0250 WSSV000121
07.12.2006 never NY 17EE02CD064FA89C SV SV0930 WSSV000121
07.12.2006 never NY 17F4A66418BCA37F SV SV0950 WSSV000121
07.12.2006 never NY 17F3AF780DFDE389 SV SV5780 WSSV000121
07.12.2006 never NY 17F3AF830D90FC6E SV SV5940 WSSV000121
07.12.2006 never NY 17EF1F241FB29B4B VT VT0120 EBZV000010
07.12.2006 never NY 17EF1F3510490AF3 VT VT5130 EBZV000010
07.12.2006 never NY 17D2DFA4035458D7 VT YVTEINS EBZV00000756FEA457
07.12.2006 never NY 17E083D01B5701C6 VT YVTVALU EBZV000009577112CD
07.12.2006 never NY 17E953AD064B4002 VV YVVZZ20 VDPS00008757BAFE47
07.12.2006 never NY 17F9DC5608801777 WB WB0720 MKUR000032
07.12.2006 never NY 17F4CAE81D124201 WB YWBBOPR WS8B000318581B1EC5
07.12.2006 never NY 17F6B7C306E33831 WF WF0280 WSSW000046
07.12.2006 never NY 17F6B7C414880E8C WF WF0310 WSSW000046
07.12.2006 never NY 17F6B7C50812EB73 WF WF0320 WSSW000046
07.12.2006 never NY 17F6B7CB0D43627B WF WF0350 WSSW000046
07.12.2006 never NY 17F81DAC0E413DEF WF WF5410 WSSW000078
07.12.2006 never NY 17F56ECC1B0822C6 WM WM0010 WSIN000032
07.12.2006 never NY 17F3B50B1E0E4DD7 WQ WQ6010 CUBE000056
10.12.2006 never NY 17E541E61B5BB0F1 NL NL7310 BALR000054
10.12.2006 never NY 17F906C31C5D9188 WQ WQ5950 CUBE000063
11.12.2006 never NY 17F7EFB61BA34704 CE CE5300 COPE000046
11.12.2006 never NY 17F7EFB80D9351DC CE CE8200 COPE000046
11.12.2006 never NY 17F9FF2F14DA3E72 WB WB0720 WS8B000382
11.12.2006 never NY 17F68C4907A38BD7 WB WB0840 NOST000275
11.12.2006 never NY 17F68C530A0368C7 WB WB1130 NOST000275
12.12.2006 never NY 17EDB68C09DA7D57 WB YWBIO WS8B00031857DFC9A9
18.12.2006 never NY 17FB60EE132FF13B WB WB0720 WS8B000400
18.12.2006 never NY 17FB60D20F9B8F02 WB YWBIO WS8B00040058525D43
22.12.2006 never NY 175DC0590BA2D770 HP1 ZVKUYRI HPSVP2ZVKUYRI
22.12.2006 never NY 175DC0590BA2D770 HP3 ZVKUYRI HPSVP2ZVKUYRI
27.12.2006 never NY 17F3AF6C069E0A99 SV SV5150 WSSV000121
29.12.2006 never NY 17F8BF9312A0E17B ER YERBER EAMR000017
29.12.2006 never NY 17F68C471260A97F ER YERDCUR EAMR0000175829D861
29.12.2006 never NY 17F45BA502163A41 EX EX5020 EXPN000051
29.12.2006 never NY 1540AE5D19EAEC20 HP1 ACUHQ1
29.12.2006 never NY 162E25F006C19C79 HP1 AG5JS8 HPSVP2AG5JS8
29.12.2006 never NY 1540AE5D19EAEC20 HP3 ACUHQ1
29.12.2006 never NY 162E25F006C19C79 HP3 AG5JS8 HPSVP2AG5JS8
29.12.2006 never NY 162E25F006C19C79 HPS AG5JS8 HPSVP2AG5JS8
30.12.2006 never NY 17F9AD6105CC58CB WQ WQ6000 CUBE000063
02.01.2007 never NY 17F68C380122F678 ER YERDUPD EAMR0000175829D7DB
02.01.2007 never NY 179A9A4A17FFA64D NF YNFNACL NBSI00002455269B5B
03.01.2007 never NY 17F1F5260A32DBF8 EX EX6010 EXPN000051
04.01.2007 never NY 17F8B94F16A57745 ER ER8020 EAMR000017
04.01.2007 never NY 17F6879202E7E765 WF YWFM537 WSSW0000465829B0E1
05.01.2007 never NY 17F294AB04E91852 MF MF7340 MFR0000086
05.01.2007 never NY 17F35B5213C00D89 MF MF7360 MFR0000086
07.01.2007 never NY 17F15B030959FF3E EB EB8374 KLOM000054
07.01.2007 never NY 17F15B041BA8B699 EB EB8375 KLOM000054
09.01.2007 never NY 17F6DA2B0AC3303D DE DE7120 DE00000030
10.01.2007 never NY 15AF54470B34C684 HP1 DFWYAA HPSVP2DFWYAA
10.01.2007 never NY 15AF54470B34C684 HP3 DFWYAA HPSVP2DFWYAA
10.01.2007 never NY 17F3B7450ED54313 WB WB0060 TOFF000076
13.01.2007 never NY 17ECA36C1D86DFB8 SV SV7520 WSSV000121
16.01.2007 never NY 17FB10DE1CCD2C5F ER YERBER EAMR000018
16.01.2007 never NY 15B89DFF094D3B06 HP1 DOSBN5 HPSVP2DOSBN5
16.01.2007 never NY 15B89DFF094D3B06 HP3 DOSBN5 HPSVP2DOSBN5
17.01.2007 never NY 17EEB242152CBDE1 YX YXA171C TOFF00007657E8092C
19.01.2007 never NY 17E0F739098EBF0B RA RA7240 EGB0000020
20.01.2007 never NY 17F21DD813107A44 TN TN7004 OTXO000058
20.01.2007 never NY 17F8926C1A75F8F4 WF YWFSWC WSSW000077
22.01.2007 never NY 17F892681E40DE49 WF WF5410 WSSW000077
25.01.2007 never NY 17FD703A0C34F0B8 ER ER5080 EAMR000018
25.01.2007 never NY 1800985C0E26B974 ER YERBER EAMR000024
25.01.2007 never NY 17EF29C21F42F14E SV SV5210 WSSV000121
25.01.2007 never NY 17F7F5B108C27440 SV SV5600 WSSV000146
25.01.2007 never NY 17F92DAE07AB58D2 SV SV5740 WSSV000146
25.01.2007 never NY 17F92DB60B5312EC SV SV5760 WSSV000146
25.01.2007 never NY 17F92DB91980B134 SV SV5770 WSSV000146
25.01.2007 never NY 17F8B7CE126F4468 SV SV5940 WSSV000146
25.01.2007 never NY 17F3AFA31375B006 SV SV8410 WSSV000121
25.01.2007 never NY 17F1543407FE1E03 TN YTNW100 OTXO00005857FE1E9A
25.01.2007 never NY 17EE13FD144D9F14 VV YVVZZ04 VDPS00008557E2D980
25.01.2007 never NY 17F9D78F04D4D6F0 WB WB5340 MKUR000032
25.01.2007 never NY 1800ECCB00F86846 WF YWFSWC WSSW000083
25.01.2007 never NY 17FAEB0018EA1848 WQ WQ5950 CUBE000075
26.01.2007 never NY 17F26CEC1BAB8C79 AP YAPUTGK APEN00003558075175
26.01.2007 never NY 170C7AEC1C51C551 BC BC0004 A20Y001119507E65B1
26.01.2007 never NY 170C7AEE09225240 BC BC0005 A20Y001119507E65BC
26.01.2007 never NY 17FAC2BA18C6C01B CE CE5300 NOST000288
26.01.2007 never NY 17FAC3ED1EF0D350 CE CE8200 COPE000049
26.01.2007 never NY 17F81E6003180D69 CZ CZ6400 GSER000039
26.01.2007 never NY 17F774BF0BB91FD7 CZ YCZPABW GSER00015158317679
26.01.2007 never NY 17EC77A611F0D4B7 CZ YCZTPRT BEWI00001057D55677
26.01.2007 never NY 17F81E9919D8B126 FF FF0020 FFOR000024
26.01.2007 never NY 17F81E9A0CA2047C FF FF0030 FFOR000024
26.01.2007 never NY 17F3609005E187B2 SV SV0230 WSSV000121
26.01.2007 never NY 17F8DCF6183E58F3 SV SV0250 WSSV000146
26.01.2007 never NY 17F93517016FB65A SV SV0950 WSSV000146
26.01.2007 never NY 17F92DB208E98B1C SV SV5750 WSSV000146
26.01.2007 never NY 17F6ADE81DBCC16A SV SV5780 WSSV000146
26.01.2007 never NY 17F6847B1DD35054 SV SV5790 WSSV000146
26.01.2007 never NY 17F3AFA110778205 SV SV8300 WSSV000121
26.01.2007 never NY 17F21DCA15518BEA TN TN0530 OTXO000058
26.01.2007 never NY 17EED96D13A29111 VP VP0030 VIP0000018
26.01.2007 never NY 17D1A45902D2750D VV YVVZZ12 VDPS00007356F4415D
26.01.2007 never NY 17EFF39B034AD573 WB WB0520 WSTS000043
26.01.2007 never NY 17F293590D84C765 WB WB0530 WSTS000043
26.01.2007 never NY 17EFF3891A70BCFB WB WB0620 WSTS000043
26.01.2007 never NY 17F65D2C1DFF05BE WB WB0630 WSTS000049
26.01.2007 never NY 17F65D2F0C6E175D WB WB0680 WSTS000049
26.01.2007 never NY 17FBD84104F5288E WB WB0720 WS8B000401
26.01.2007 never NY 17EFF38805D1430C WB WB0830 WSTS000043
26.01.2007 never NY 17FAC3411D088954 WB WB0840 NOST000288
26.01.2007 never NY 17F2935C0CAB20DE WB WB0940 WSTS000043
26.01.2007 never NY 17EFF38E02A9203F WB WB0950 WSTS000043
26.01.2007 never NY 17F2935F17CA4579 WB WB0970 WSTS000043
26.01.2007 never NY 17EFF398053E0FA4 WB WB1070 WSTS000043
26.01.2007 never NY 17EFF3A103A29AB3 WB WB1110 WSTS000043
26.01.2007 never NY 17FAC34D060D2F01 WB WB1130 NOST000288
26.01.2007 never NY 17F429F603347F8C WB WB1290 TOFF000076
26.01.2007 never NY 17F6593507F0991B WB YWB0082 WSTS00004758282BE3
26.01.2007 never NY 17F7CDF615592B44 WB YWBBOPR WS8B000386583462DC
26.01.2007 never NY 17F65CBF1FC4A84A WB YWBEBSM WSTS000049582849AF
26.01.2007 never NY 17F3AC651CAB1AFE WB YWBMOV WS8B0003185811C948
26.01.2007 never NY 1800ECCC0E288DB8 WF WF5410 WSSW000083
26.01.2007 never NY 17F7A62C0C9AB394 WI YWI0087 TOFF0000875833150E
26.01.2007 never NY 17F9B2EE0CCA4038 WQ WQ6010 CUBE000063
26.01.2007 never NY 17EF490C0A28E38E WQ YWQBERI CUBE00005657ECFA12
27.01.2007 never NY 17F65B73080F54FE AZ AZ0210 AWZA000054
29.01.2007 never NY 17EED919061DCEDE VP VP5310 VIP0000018
30.01.2007 never NY 17DB2DC4176698B9 WP YWPL9P1 DBH000006857444F33
31.01.2007 never AY 17EF44991EE4910E MF YMFC115 MFR000008757ECD4C5
31.01.2007 never NY 17FB6BDC1DC80D4F SV SV7520 WSSV000148
31.01.2007 never NY 1800BEE41265A7D8 WB WB0970 WSTS000050
31.01.2007 never NY 17FEAF8C0F4507FC WB WB1290 TOFF000090
02.02.2007 never NY 17F451721AC06789 KS YKS5511 CSED000026581723E4
02.02.2007 never NY 18031469192E3BF6 KS YKS5511 CSED0000315892F81B
02.02.2007 never NY 17F30A46154809DF KS YKS5512 CSED000026580C796C
02.02.2007 never NY 1803146A1DE571CD KS YKS5512 CSED0000315892F832
03.02.2007 never NY 17F92F821AFBB2E1 FI FI5067 BKUR000047
05.02.2007 never NY 1801B0091FCC5EEB WB WB0720 WS8B000359
05.02.2007 never NY 17F3B74B0FD3EB87 WB WB1100 TOFF000076
05.02.2007 never NY 1800E9A20699B9CE WI YWI0087 TOFF0000905880CA48
06.02.2007 never NY 17D1732D1A73F1E8 RT YRT025M RFT000001556F2A4F3
12.02.2007 never NY 180184F516B11620 WF WF5410 WSSW000005
12.02.2007 never NY 1801B6CC00803A76 WF YWFSWC WSSW000005
13.02.2007 never NY 1719479B126B4F0A DAA420_D_MAIN PSSRULE V4100
13.02.2007 never NY 176E00470E492FF4 DAA420_D_MAIN PSSXSQL V4200
13.02.2007 never NY 17A7785D0A8DF25E NTA1P CZA0255 A02E00054455928C30
13.02.2007 never NY 180398421D1E95AC WB WB0720 WS8B000413
16.02.2007 never NY 1774905A02E83F85 BP YBPALTR A12M00647953E783C0
18.02.2007 never NY 17F336AD0209156A FI FI5066 BKUR000041
19.02.2007 never NY 17E065AB1E85A8D5 AV YAV1002 AIS0000095577015F3
26.02.2007 never NY 176115AA1BD3BF36 FC FC0010 CRMA003935
27.02.2007 never NY 17E9A64007AB96E0 BP BP9060 BPST000055
28.02.2007 never NY 17EDB918009CA8AE DI DI7510 DI00000045
28.02.2007 never NY 17F91940005F9BF6 DP DP0320 DI00000057
28.02.2007 never NY 17FB6BAF1DE15371 SV SV5150 WSSV000148
28.02.2007 never NY 17EED90D089FEAAE TR TR5310 DERI000033
28.02.2007 never NY 17F0DF8B1DC9F296 TR TR5330 DERI000033
28.02.2007 never NY 1801AAA403D464C3 YX YXA171C TOFF00009858871D68
01.03.2007 never NY 17F12ABB16626554 CE CE8460 COPS000019
01.03.2007 never NY 17EEAA7419A01AFD CZ CZ6020 LOFT000035
01.03.2007 never NY 17A8DE0702CFD820 CZ CZ7000 IPRI000007
01.03.2007 never NY 17EED90D1D7F3D36 TR TR5320 DERI000033
02.03.2007 never NY 17F8B5C10C55D456 CZ CZ5494 ACP0000090
02.03.2007 never NY 17F294F5012B7346 MF MF6000 MFR0000086
02.03.2007 never NY 17F040360796A028 MF MF6010 MFR0000086
02.03.2007 never NY 17EFBCE10E8DCA6E MF MF6020 MFR0000086
02.03.2007 never NY 17F65C681AFA0C17 MF MF8930 MFR0000094
02.03.2007 never NY 17ECA00D19A225A5 MF MF8940 MFR0000086
02.03.2007 never NY 17F0DF8E16868A73 TR TR5340 DERI000033
02.03.2007 never NY 17D2334A129FEC6A WL WL7390 WSAW000059
02.03.2007 never NY 17EBB4D7195DA412 WP YWPR5PX DBH000007557CEF45B
03.03.2007 never NY 17ECA016191F3115 MF MF8950 MFR0000086
03.03.2007 never NY 17FEAFAC1709C607 TN TN7004 OTXO000063
03.03.2007 never NY 17F21DD70A3EBF11 TN TN7020 OTXO000058
03.03.2007 never NY 17E658170381461E WB WB5120 WSTS000039
03.03.2007 never NY 17F21DBF0195247E WC WC8170 OTXO000058
04.03.2007 never NY 17F26D6716D4FB4E CZ CZ8010 APEN000035
04.03.2007 never NY 17E0892A09A09817 VD VDUTI41 DSPV000030
05.03.2007 never NY 1795979C1E29E8A6 BP YBPSTAM BPST00002254FC858F
05.03.2007 never NY 17FEB31F193E8585 ER ER8020 EAMR000019
05.03.2007 never NY 17D5AA1712D7C89E NF YNFNACL NBSI00005557160D8E
05.03.2007 never NY 180146690EADF0E6 WQ WQ6000 CUBE000066
06.03.2007 never NY 18081F360B380606 WQ WQ6000 CUBE000084
07.03.2007 never NY 17EF2D710279EDE8 CI CI0100 GEGE000019
07.03.2007 never NY 17F3AB42022F0794 DE DE0190 DE00000038
07.03.2007 never NY 17EFC406017DE232 DE DE5130 DE00000038
07.03.2007 never NY 1728A0881C6EEFD4 HP1 ACF3Q1 HPSVP2ACF3Q1
07.03.2007 never NY 1728A0881C6EEFD4 HP3 ACF3Q1 HPSVP2ACF3Q1
07.03.2007 never NY 1802C38F09A9B866 WB WB0060 TOFF000100
07.03.2007 never NY 17EBB4D71458D5A7 WP YWPR4PX DBH000007557CEF45A
08.03.2007 never NY 1800EB9C1E4F0DCB AP YAPUTGK APEN0000385880DAE5
08.03.2007 never NY 17E55ED20DFB6A26 BS BS5030 BUT0000006
08.03.2007 never NY 17F6F93B008FC687 CE CE8440 COPE000046
08.03.2007 never NY 17FAC73809E5021C CZ CZ6300 GSER000156
08.03.2007 never NY 17F011F31C902743 DE DE5600 DE00000038
08.03.2007 never NY 17EFE86D13A1660A DE DE5690 DE00000038
08.03.2007 never NY 17F6B4390BE78275 FF FF5000 FFOR000024
08.03.2007 never NY 17F01B040CE0AEDB HB HB5000 ASIA000070
08.03.2007 never NY 17F6AAB109811DC0 KS KS5685 EBVV000245
08.03.2007 never NY 17F6D2A4174A91AC MF MF8706 MFR0000094
08.03.2007 never NY 17F6D2A01AADF1B0 MF MF8710 MFR0000094
08.03.2007 never NY 17F6D2BD1DC2AEBB MF MF8717 MFR0000094
08.03.2007 never NY 17F6D2C9095BF851 MF MF8719 MFR0000094
08.03.2007 never NY 177529F11C11B988 NF NF7650 NF0Y000530
08.03.2007 never NY 17F334590968DFD8 NF NF8620 NBSC000021
08.03.2007 never NY 17B56E5F1C27E590 NF YNFDEAL NBSI0000505607A92A
08.03.2007 never NY 17FE89191E1D5672 NF YNFNACL NBSI000122586CD99C
08.03.2007 never NY 17F067D21629C41B PC01 PC5060 IVN0000024
08.03.2007 never NY 17F68F0400494D1E PC01 PC5120 AIS0000124
08.03.2007 never NY 17F067D21629C41B PC02 PC5060 IVN0000024
08.03.2007 never NY 17F68F0400494D1E PC02 PC5120 AIS0000124
08.03.2007 never NY 17F067D21629C41B PC03 PC5060 IVN0000024
08.03.2007 never NY 17F68F0400494D1E PC03 PC5120 AIS0000124
08.03.2007 never NY 17F067D21629C41B PC04 PC5060 IVN0000024
08.03.2007 never NY 17F68F0400494D1E PC04 PC5120 AIS0000124
08.03.2007 never NY 17F067D21629C41B PC05 PC5060 IVN0000024
08.03.2007 never NY 17F68F0400494D1E PC05 PC5120 AIS0000124
08.03.2007 never NY 17F067D21629C41B PC06 PC5060 IVN0000024
08.03.2007 never NY 17F68F0400494D1E PC06 PC5120 AIS0000124
08.03.2007 never NY 17D173290491EFD8 RT YRT0023 RFT000001556F2A4CC
08.03.2007 never NY 17FB6B9918022B3B SV SV0230 WSSV000148
08.03.2007 never NY 17FFA93D0153902D SV SV5600 WSSV000148
08.03.2007 never NY 17FB6BC91BA8A620 SV SV5740 WSSV000148
08.03.2007 never NY 17FB6BCB0B7CE67D SV SV5760 WSSV000148
08.03.2007 never NY 17FB6BCC0672FABD SV SV5770 WSSV000148
08.03.2007 never NY 17FC29FA128E97E4 SV SV5940 WSSV000148
08.03.2007 never NY 17F819DC1F901138 SV SV8410 WSSV000148
08.03.2007 never NY 17E657991D6451CB TN TN5004 OTXO000054
08.03.2007 never NY 17F21DDA14D71797 TN TN5016 OTXO000058
08.03.2007 never NY 17EFF394094612F1 WB WB1310 WSTS000043
08.03.2007 never NY 17F42B2F06543E61 WB WB5570 WS8B000319
08.03.2007 never NY 17F29E710C7EB572 WF YWFCB02 WSSW0000435808F0DA
08.03.2007 never NY 17FEB52102C5D6FD WF YWFM537 WSSW000081586E4AEB
08.03.2007 never NY 17EBB4D70E598DA9 WP YWPR3PX DBH000007557CEF458
08.03.2007 never NY 17E0FD0906033B82 WP YWPU1P5 DBH000006857750BA6
08.03.2007 never NY 17F29ACB07C2020D WQ YWQ5601 CUBE0000565808D243
09.03.2007 never NY 1780D2BC184B4289 AT AT0099 A20Y001519544E5A50
09.03.2007 never NY 17DA424D068E89BE AT AT7500 ACS0000009
09.03.2007 never NY 17F8BFDF19563581 AV YAVNV10 AIS0000118583C5023
09.03.2007 never NY 17F8BFE11B8CF802 AV YAVNV50 AIS0000118583C503B
09.03.2007 never NY 17D2AD0107D064B9 AZ YAZ0906 AWZA00003556FCFB81
09.03.2007 never NY 17F35E23093D0893 BP YBPMUT BPST000055580F38EA
09.03.2007 never NY 177490BA1DC67F1D BP YBPSUCH A12M00647953E786E4
09.03.2007 never NY 177490BB13FA02E9 BP YBPSUCH A12M00647953E786E4CICS
09.03.2007 never NY 17DA15530B435F0E BX YBXADBR CLOS000090573B1F04
09.03.2007 never NY 17EED333033177A6 CD CD2590 UPDS000033
09.03.2007 never NY 17F912FA1F7D6DEA CE CE5200 COPE000046
09.03.2007 never NY 17F6F9321A03B063 CE CE5230 COPE000046
09.03.2007 never NY 17FEB0B71F27112C CE CE5300 COPE000052
09.03.2007 never NY 17F7751D0624AAC3 CE CE5730 COPE000046
09.03.2007 never NY 17FEB0BD0A575EE8 CE CE8200 COPE000052
09.03.2007 never NY 17F6D5200701892E CE CE8500 COPE000046
09.03.2007 never NY 17F9089E096B6A7A CE YCE1000 COPE000046583EB25C
09.03.2007 never NY 17F9087C079722E1 CE YCEWIAP COPE000046583EB13F
09.03.2007 never NY 17EF2D6F17A7C964 CI CI0090 GEGE000019
09.03.2007 never NY 17F26AFC0335606C CZ CZ5150 KLOM000054
09.03.2007 never NY 17F00FC210D73D05 CZ CZ5190 LOMN000025
09.03.2007 never NY 17EF505D1BEC0B6C CZ CZ5280 KLOM000050
09.03.2007 never NY 17FC82B107AD2F3A CZ CZ6400 GSER000157
09.03.2007 never NY 17F68B1A102E6076 CZ CZ6500 GSER000039
09.03.2007 never NY 17F1F4BE14B36626 CZ CZ8980 KLOM000050
09.03.2007 never NY 17F703BA0D743197 CZ YCZJABW GSER000151582DC263
09.03.2007 never NY 17FD508B0E9EE593 CZ YCZPABW GSER00015758629BAC
09.03.2007 never NY 17F9FC981BA98ADD DE DE0030 AITR000030
09.03.2007 never NY 17F774C7026C9EC2 DE DE0050 DE00000049
09.03.2007 never NY 17E6370E14B5306D DE DE0060 DE00000033
09.03.2007 never NY 17F774C71DE4EEC3 DE DE0090 DE00000049
09.03.2007 never NY 17E6371005641EB7 DE DE0100 DE00000033
09.03.2007 never NY 17EEF4D6002657B2 DE DE0400 DE00000038
09.03.2007 never NY 17F664E2143E4C5C DE DE0410 DE00000053
09.03.2007 never NY 17F9FC9C0D8F9C14 DE DE0420 AITR000030
09.03.2007 never NY 17F0110507EE9A1D DE DE0430 DE00000038
09.03.2007 never NY 17F1F1010DF85629 DE DE0440 DE00000038
09.03.2007 never NY 17EEF5B5053EEDC1 DE DE0490 DE00000038
09.03.2007 never NY 17F9FC9D1AFD9C55 DE DE0810 AITR000030
09.03.2007 never NY 17F7795D17C451E7 DE DE0820 DE00000049
09.03.2007 never NY 17F0115904984FE6 DE DE0830 DE00000038
09.03.2007 never NY 17E1A4A109FAD59B DE DE0940 DE00000033
09.03.2007 never NY 17E427B114DC7F76 DE DE7800 DE00000033
09.03.2007 never NY 17EDDE56054FA08D DE YDE0021 DE0000003857E11728
09.03.2007 never NY 17EDB50F19BC5143 DE YDELSTO DE0000003857DFBD27
09.03.2007 never NY 17EE06BF09975F2D DP DP0920 DP00000050
09.03.2007 never NY 17F701880CC8CD9A EB EB6480 EXPN000058
09.03.2007 never NY 17F1F4E816485060 EC EC5130 KLOM000050
09.03.2007 never NY 17BB4C56179393A6 EC YECCRAC SYNC0000085638D27E
09.03.2007 never NY 17F6DA811FC7E9FF ED ED0830 ED00000044
09.03.2007 never NY 17F6B26F1423814C ED ED0950 ED00000044
09.03.2007 never NY 17F910D61ED793D1 ED ED0960 ED00000044
09.03.2007 never NY 17FE689B14661F10 EX EX5020 EXPN000062
09.03.2007 never NY 17F1F50D1B2B90D7 EX EX5030 EXPN000051
09.03.2007 never NY 17FE68321CF6EF76 EX EX6010 EXPN000062
09.03.2007 never NY 17E9560E0A68FC74 EX EX6020 EXPN000050
09.03.2007 never NY 17F26D9C017CF557 EX YEX0003 EXPN00005158075739
09.03.2007 never NY 17F6B45D1C3A0010 FF FF0010 FFOR000024
09.03.2007 never NY 17FBE3FF0D052DA2 FF FF0020 FFOR000030
09.03.2007 never NY 17FBE40018A7F88D FF FF0030 FFOR000030
09.03.2007 never NY 17EF4C9A12F245E0 FF YFF0004 FFOR00002357ED17E7
09.03.2007 never NY 17ECA2F506EC7757 FI FI2100 BKUR000041
09.03.2007 never NY 17F14F631AA9FE90 FI FI5200 BKUR000041
09.03.2007 never NY 17EE0A3F1210A64B FI FI5260 BKUR000041
09.03.2007 never NY 17F777470053BEA5 FZ FZ0820 FZ00000013
09.03.2007 never NY 17F77CBD004C5A65 GM GM0850 GM00000123
09.03.2007 never NY 17E1CC320012E17D GM GM0870 GM00000084
09.03.2007 never NY 17E19B5C0335CF89 IT IT0010 TABS000102
09.03.2007 never NY 175D03390323BE42 KC YKCWFVU A12M0061415321E5B0
09.03.2007 never NY 17EDDC970054F072 KE YKEA082 EBVV00023557E108BE
09.03.2007 never NY 17EDDC98185E11D8 KE YKEA083 EBVV00023557E108D7
09.03.2007 never NY 17F00CDD12D3C623 KS KS5500 CSED000026
09.03.2007 never NY 18038C5F0A8E10F1 KS YKS5511 CSED0000325896E675
09.03.2007 never NY 18038C2B07BE3BD3 KS YKS5512 CSED0000325896E4BF
09.03.2007 never NY 17D463390A25822D KS YKSBKST CSED000019570B579E
09.03.2007 never NY 17F019A21BE90364 LB YLB0120 IPC000015657F3CF5C
09.03.2007 never NY 17EEFDBB114A5121 LC LC0511I TFBM00002857EA823C
09.03.2007 never NY 17F29514079B80EA MF MF7200 MFR0000086
09.03.2007 never NY 17F241971398570C MF MF7230 MFR0000086
09.03.2007 never NY 17F294981240F02B MF MF7320 MFR0000086
09.03.2007 never NY 17F294A61C40D6D7 MF MF7330 MFR0000086
09.03.2007 never NY 17FEB882157052EC MF MF7340 MFR0000107
09.03.2007 never NY 17FEB8770EC16B9D MF MF7360 MFR0000107
09.03.2007 never NY 17EFBCE21EF326F9 MF MF7380 MFR0000086
09.03.2007 never NY 17F1F9091A0115C5 MF MF7510 MFR0000086
09.03.2007 never NY 17ECF6E100444310 MF MF8600 MFR0000086
09.03.2007 never NY 17ECF6E1179EF0F6 MF MF8620 MFR0000086
09.03.2007 never NY 17F042411DEF8610 MF YMFC110 MFR000008757F52498
09.03.2007 never NY 17F33C511D25C130 MF YMFC113 MFR0000087580E1D38
09.03.2007 never NY 17F014A61E6BF77A NF YNFIB07 IB0000002357F3A607
09.03.2007 never NY 17F77A311BF2D329 NI NI0010 IPC0000171
09.03.2007 never NY 17F935EF15375BB6 NI NI0040 IPC0000171
09.03.2007 never NY 17F7A2610E9596F8 NI YNI0161 IPC00001715832F542
09.03.2007 never NY 17F275440CD1EA79 NI YNICS01 IPC000015658079777
09.03.2007 never NY 17F019A201910994 NI YNILBP3 IPC000015657F3CF7F
09.03.2007 never NY 17F0199F01CAF950 NI YNILBPL IPC000015657F3CF61
09.03.2007 never NY 17FB15960BB34F41 NL NL7310 BALR000068
09.03.2007 never NY 17F815A60F7CD9CF NO NO0960 NO00000029
09.03.2007 never NY 17F93A0E0A056D1E NO NO0970 NO00000029
09.03.2007 never NY 1797EB891B98AD0E NTA1P CZA0213 A02E00053555100C8A
09.03.2007 never NY 1797EB8B0C383C66 NTA1P CZA0219 A02E00053555100C98
09.03.2007 never NY 17850A5A17654490 NTA1P CZA0257 A02E0005225471ACDA
09.03.2007 never NY 17DFBCB81F8E99F5 NZ NZDBM83 ZVBI000015
09.03.2007 never NY 1760E44D07EA9896 NZ YNZGSEL A14S00239353427E48
09.03.2007 never NY 17F1F95105A101D9 PC PC5090 IVN0000024
09.03.2007 never NY 17EEAD3E11FF6234 PC01 PC5070 IVN0000024
09.03.2007 never NN 17F3360A11FAF296 PC01 YPC0520 IVN0000024580DE88D
09.03.2007 never NY 17F1781E138AD4EE PC01 YPC0730 IVN000002457FF4BEB
09.03.2007 never NY 17F1782105737A5E PC01 YPC0740 IVN000002457FF4BFF
09.03.2007 never NY 17EEAD3E11FF6234 PC02 PC5070 IVN0000024
09.03.2007 never NY 17F3360A11FAF296 PC02 YPC0520 IVN0000024580DE88D
09.03.2007 never NY 17F1781E138AD4EE PC02 YPC0730 IVN000002457FF4BEB
09.03.2007 never NY 17F1782105737A5E PC02 YPC0740 IVN000002457FF4BFF
09.03.2007 never NY 17EEAD3E11FF6234 PC03 PC5070 IVN0000024
09.03.2007 never NY 17F3360A11FAF296 PC03 YPC0520 IVN0000024580DE88D
09.03.2007 never NY 17F1781E138AD4EE PC03 YPC0730 IVN000002457FF4BEB
09.03.2007 never NY 17F1782105737A5E PC03 YPC0740 IVN000002457FF4BFF
09.03.2007 never NY 17EEAD3E11FF6234 PC04 PC5070 IVN0000024
09.03.2007 never NY 17F3360A11FAF296 PC04 YPC0520 IVN0000024580DE88D
09.03.2007 never NY 17F1781E138AD4EE PC04 YPC0730 IVN000002457FF4BEB
09.03.2007 never NY 17F1782105737A5E PC04 YPC0740 IVN000002457FF4BFF
09.03.2007 never NY 17EEAD3E11FF6234 PC05 PC5070 IVN0000024
09.03.2007 never NY 17F3360A11FAF296 PC05 YPC0520 IVN0000024580DE88D
09.03.2007 never NY 17F1781E138AD4EE PC05 YPC0730 IVN000002457FF4BEB
09.03.2007 never NY 17F1782105737A5E PC05 YPC0740 IVN000002457FF4BFF
09.03.2007 never NY 17EEAD3E11FF6234 PC06 PC5070 IVN0000024
09.03.2007 never NN 17F3360A11FAF296 PC06 YPC0520 IVN0000024580DE88D
09.03.2007 never NY 17F1781E138AD4EE PC06 YPC0730 IVN000002457FF4BEB
09.03.2007 never NY 17F1782105737A5E PC06 YPC0740 IVN000002457FF4BFF
09.03.2007 never NY 17F7F3371242E607 RI RI0810 RI00000015
09.03.2007 never NY 17F77D041087671C RI RI0820 DE00000049
09.03.2007 never NY 17EC7B16084E1A5B RT RT0200 TABS000119
09.03.2007 never NY 17FC34E304E617D7 SV SV0250 WSSV000148
09.03.2007 never NY 180193FF05D35DF2 SV SV0950 WSSV000148
09.03.2007 never NY 17FB6BCB00901306 SV SV5750 WSSV000148
09.03.2007 never NY 17FF2D25024C519B SV SV5780 WSSV000148
09.03.2007 never NY 17FC34FD149C3875 SV SV5790 WSSV000148
09.03.2007 never NY 17ED8FA7091BCAB9 SV SV8630 WSSV000121
09.03.2007 never NN 17F4A532019FE2B1 SV YSVTXOG WSSV0001215819E262
09.03.2007 never NY 17E657A219156486 TN TN7080 OTXO000054
09.03.2007 never NY 17EDB6FC0129B3ED TN YTN0100 OTXO00005857DFCD28
09.03.2007 never NY 17EDB6FB19E7E784 TN YTNDEP OTXO00005857DFCD1D
09.03.2007 never NY 17EDB6FE0A52D974 TN YTNSICH OTXO00005857DFCD1F
09.03.2007 never NY 17EF242E0A05F435 TP TP0800 TP00000011
09.03.2007 never NY 17E08A7A1437B036 TR TR0810 AITR000024
09.03.2007 never NY 17F0109116506E77 UU UU5170 RS20000055
09.03.2007 never NY 17EED0B006930DF7 VD VDDBM15 DSPV000034
09.03.2007 never NY 17F17AAC12A17747 VD VDGLH00 DSPV000034
09.03.2007 never NY 17DF911E07E1A390 VD YVD0721 DSPV00003057691EEA
09.03.2007 never NY 17DF913212D6437C VD YVD0722 DSPV00003057691F8F
09.03.2007 never NY 180274B80A406832 VP VP5310 VIP0000023
09.03.2007 never NY 17D3A4F316907351 VV YVVZZ10 VDPS00007357051B7A
09.03.2007 never NY 17FE94BA1332FF42 VV YVVZZ12 VDPS000103586D3B12
09.03.2007 never NY 17B7F61B123590DC VV YVVZZ13 VDPS000052561CE2B1
09.03.2007 never NY 17C8C82308425FAE VV YVVZZ15 VDPS00006756A9EE3E
09.03.2007 never NY 17DFC3560F52B3AB VV YVVZZ18 VDPS000077576AC41A
09.03.2007 never NY 17B6E36E00B67432 VV YVVZZ1R VDPS0000525613E28D
09.03.2007 never NY 17BE97F30EA54A8D VV YVVZZGR VDPS00006256547738
09.03.2007 never NY 17EFF3991A1A6CE1 WB WB0510 WSTS000043
09.03.2007 never NY 1800BEE91566A527 WB WB0520 WSTS000050
09.03.2007 never NY 1800BEDE0F38D1D8 WB WB0530 WSTS000050
09.03.2007 never NY 17F12D1F04640876 WB WB0550 WSTS000043
09.03.2007 never NY 17EFF38117B0CFA8 WB WB0570 WSTS000043
09.03.2007 never NY 17EFF38E029291BE WB WB0580 WSTS000043
09.03.2007 never NY 17EFF390023C3C28 WB WB0600 WSTS000043
09.03.2007 never NY 1800BEE20A3CB8F6 WB WB0620 WSTS000050
09.03.2007 never NY 1800BEE017E9CAFE WB WB0630 WSTS000050
09.03.2007 never NY 17EFF3891312AA3C WB WB0660 WSTS000043
09.03.2007 never NY 1800BEE01BFB50BC WB WB0680 WSTS000050
09.03.2007 never NY 1804D9971A8C728F WB WB0720 WS8B000415
09.03.2007 never NY 1800BEE4191C1B45 WB WB0830 WSTS000050
09.03.2007 never NY 1800E7F30C7DE071 WB WB0840 WSTS000050
09.03.2007 never NY 17F6663C1FB97016 WB WB0870 WS8B000373
09.03.2007 never NY 1800BEDF02B614F5 WB WB0940 WSTS000050
09.03.2007 never NY 1800BEE21CF45542 WB WB0950 WSTS000050
09.03.2007 never NY 1802A1AF1D15D0F6 WB WB0970 WSTS000052
09.03.2007 never NY 17F3B73D092B4283 WB WB0980 TOFF000076
09.03.2007 never NY 17EFF392188518D2 WB WB1020 WSTS000043
09.03.2007 never NY 17EFF38C04EE96FC WB WB1030 WSTS000043
09.03.2007 never NY 17EFF38B11073D43 WB WB1040 WSTS000043
09.03.2007 never NY 17EFF3860446A804 WB WB1050 WSTS000043
09.03.2007 never NY 1800BEE512D2C44E WB WB1070 WSTS000050
09.03.2007 never NY 17F3B7530CB74BEF WB WB1080 TOFF000076
09.03.2007 never NY 17F3B75B04496A8B WB WB1090 TOFF000076
09.03.2007 never NY 18038A7317FF4CE6 WB WB1100 TOFF000101
09.03.2007 never NY 1800BEE615FD9A10 WB WB1110 WSTS000050
09.03.2007 never NY 1800E7ED01718B51 WB WB1130 WSTS000050
09.03.2007 never NY 1802C39B10003785 WB WB1290 TOFF000100
09.03.2007 never NY 17EFF3951E44C4D3 WB WB1340 WSTS000043
09.03.2007 never NY 17E65815113FC4DD WB WB5090 WSTS000039
09.03.2007 never NY 17F12D2003A67C35 WB WB5260 WSTS000043
09.03.2007 never NY 17EFF39B1BB8B230 WB WB5270 WSTS000043
09.03.2007 never NY 17EFF39707D66D94 WB WB5280 WSTS000043
09.03.2007 never NY 17F47B0D0AD85488 WB WB5290 WSTS000043
09.03.2007 never NY 1800BCB11DAC404E WB WB5340 TOFF000090
09.03.2007 never NY 17D372D7072C27F3 WB WB7420 WSTS000035
09.03.2007 never NY 17C993D615F70343 WB WB7730 WSTS000025
09.03.2007 never NY 17E65872038FA072 WB WB8010 TOFF000067
09.03.2007 never NY 17FABFFE13D5C4BC WB YWB0082 WSTS000050584D1824
09.03.2007 never NY 1806624A0FE52F38 WB YWB0083 WSTS00005458AEAFE5
09.03.2007 never NY 17EDB65E0059AE7C WB YWBCTA WS8B00031857DFC824
09.03.2007 never NY 17DFB6400FBE5AA6 WB YWBDGP WS8B000286576A566C
09.03.2007 never NY 17DFB6410B7D2895 WB YWBDGP2 WS8B000286576A5674
09.03.2007 never NY 17FA24C616E2F012 WB YWBEBSM WSTS00005058480203
09.03.2007 never NY 17FBD7E30BD021C3 WB YWBIO WS8B0004015856440E
09.03.2007 never NY 1800BA3A01C8307E WB YWBMOV WS8B000359587F3CA8
09.03.2007 never NY 17ECA17310A6C525 WB YWBSA2 WS8B00031857D6B537
09.03.2007 never NY 17F9315D0B3CF01C WB YWBWRK WS8B00039058400836
09.03.2007 never NY 17F21DD31F8CFB22 WC WC5010 OTXO000058
09.03.2007 never NY 17F21DDB10B76A14 WC WC5050 OTXO000058
09.03.2007 never NY 17D4BDE10FB50A25 WC WC7500 OTXO000045
09.03.2007 never NY 17F21DBA1F13E3B4 WC WC8401 OTXO000058
09.03.2007 never NY 17F3AD630156D3E6 WC WC8410 OTXO000058
09.03.2007 never NY 17F7757F11C00378 WF WF0280 WSSW000077
09.03.2007 never NY 17F6B7C31E75074D WF WF0300 WSSW000046
09.03.2007 never NY 17F775790920F1A2 WF WF0310 WSSW000077
09.03.2007 never NY 17F77574122CE0AC WF WF0320 WSSW000077
09.03.2007 never NY 17F7756C175C6118 WF WF0350 WSSW000077
09.03.2007 never NY 1804B32804CC125E WF WF5410 WSSW000084
09.03.2007 never NY 17F6878E1A421617 WF YWF64CA WSSW0000465829B0C2
09.03.2007 never NY 1804B0430E72DE54 WF YWFSWC WSSW000084
09.03.2007 never NY 18038A70086E9E5C WI YWI0087 TOFF0001015896D63B
09.03.2007 never AY 17CFE03A059375CC WI YWI5951 WS8I00015256E570B8
09.03.2007 never AY 17CFE03A1B94E629 WI YWI5952 WS8I00015256E570BD
09.03.2007 never AY 17CFE03B0A9DBFEE WI YWI5953 WS8I00015256E570C2
09.03.2007 never NY 17CFE03C0048A772 WI YWI5954 WS8I00015256E570C7
09.03.2007 never AY 17CFE03C1AFFBBE1 WI YWI5955 WS8I00015256E570CC
09.03.2007 never AY 17CFE03D08400F20 WI YWI5956 WS8I00015256E570D2
09.03.2007 never AY 17CFE03D1FA380A9 WI YWI5957 WS8I00015256E570D7
09.03.2007 never AY 17CFE03E100D3474 WI YWI5958 WS8I00015256E570DC
09.03.2007 never AY 17CFE03F043D2EC7 WI YWI5959 WS8I00015256E570E1
09.03.2007 never AY 17CFE03914019E4C WI YWI595A WS8I00015256E570B2
09.03.2007 never AY 17EC9B1F07A44FAD WI YWINS01 WS8I00022357D68018
09.03.2007 never AY 17EC9B21089AB3BE WI YWINS02 WS8I00022357D68027
09.03.2007 never AY 17EC9B22189ED4CD WI YWINS03 WS8I00022357D68037
09.03.2007 never AY 17EC9B2502108AAC WI YWINS04 WS8I00022357D6804A
09.03.2007 never AY 17F90D131999EF75 WI YWINS04 WS8I000257583ED7CF
09.03.2007 never AY 17EC9B260A49AD23 WI YWINS05 WS8I00022357D68057
09.03.2007 never AY 17EC9B28094B14DC WI YWINS06 WS8I00022357D68066
09.03.2007 never AY 17EC9B2916F8D2B0 WI YWINS07 WS8I00022357D68074
09.03.2007 never AY 17EC9B2A1E7BDCE1 WI YWINS08 WS8I00022357D6807D
09.03.2007 never AY 17EC9B2C0C49719D WI YWINS09 WS8I00022357D6808B
09.03.2007 never AY 17EC9B2D0202DF67 WI YWINS10 WS8I00022357D68092
09.03.2007 never NY 17F705C90492978B WM WM0010 WSIN000038
09.03.2007 never NY 17DD6CB216335413 WP YWPL1P1 DBH000006857572669
09.03.2007 never NY 17DB2DBA0ED5AE22 WP YWPL3P1 DBH000006857444F1D
09.03.2007 never NY 17DB2DBF0474465D WP YWPL4P1 DBH000006857444F20
09.03.2007 never NY 17DB2DBF10EC2FCC WP YWPL5P1 DBH000006857444F23
09.03.2007 never NY 17DB2DC001B59FB6 WP YWPL7P1 DBH000006857444F2C
09.03.2007 never NY 17DB2DC006147AEA WP YWPL8P1 DBH000006857444F2F
09.03.2007 never NY 17DD6DA1108246D3 WP YWPLEP1 DBH000006857572E3A
09.03.2007 never NY 17DB2DCF0FD69B19 WP YWPR1QX DBH000006857444F5A
09.03.2007 never NY 17EC7A41115DC48A WP YWPR7PX DBH000007557D56C68
09.03.2007 never NY 17EC7A390B5BA615 WP YWPRAPX DBH000007557D56C23
09.03.2007 never NY 17EC9F6D0ADF577A WP YWPRBPX DBH000007557D6A43E
09.03.2007 never NY 17ECA9601425E493 WP YWPRCPX DBH000007557D6F7AF
09.03.2007 never NY 17EBB4D702F5D058 WP YWPRDPX DBH000007557CEF450
09.03.2007 never NY 1801443915349BEB WQ WQ5950 CUBE000066
09.03.2007 never NY 180071570E7DB0A4 WQ WQ6010 CUBE000066
09.03.2007 never NY 17EDE3BB1AEB52EE WQ YWQ1101 CUBE00005657E144AF
09.03.2007 never NY 17F067380130CC34 WQ YWQ4502 CUBE00005657F65AA1
09.03.2007 never NY 1800C81D11683C06 WQ YWQBERI CUBE000066587FB128
09.03.2007 never NY 17CAD8F41EC935FE WQ YWQEVEO CUBE00003256BB4250
09.03.2007 never NY 17DFBFA607A9180C YY YYDMAKD WSIN000023
09.03.2007 never NY 17D28AC1181AEC7C YY YYNFP15 NBSI000056
09.03.2007 never NY 17B7D8E11AF6C292 YY YYNFWRG NBSI000050
09.03.2007 never NY 17EE041401C828BE YY YYNLCPB MOD000002657E253F8
09.03.2007 never NY 17EE04151A7B5505 YY YYNLCPO MOD000002657E25407
09.03.2007 never NY 17F0161408A8F429 YY YYWBERX TOFF00007657F3B1EE
09.03.2007 never NY 17F128AA1DA656D1 YY YYWBVIN WSTS00004357FCB166
10.03.2007 never NY 1804098110C21912 AT AT7500 ACS0000011
10.03.2007 never NY 17E1A4CB081CB845 EK EK8710 EMA0000034
10.03.2007 never NY 180184AC16541806 ER ER5080 EAMR000019
10.03.2007 never NY 1800B8411E9D7863 ER YERBER EAMR000019
10.03.2007 never NY 177F1CB71E593D76 SE SE0870 A20Y001521
10.03.2007 never NY 17A6132F1DC5AAA4 VV YVVZZ3R VDPS0000295586D7EF
10.03.2007 never NY 177E95D600CF89C6 WB WB7320 A06M025453
10.03.2007 never NY 177E95D405ED2BFA WB WB7330 A06M025453
10.03.2007 never NY 177E95D71EEC3BE1 WB WB7340 A06M025453
10.03.2007 never NY 17EF1DD60AA9C7C4 YY YYFILOD BKUR00004157EB8F97
11.03.2007 never NY 1808E90A06AD4C3F AT AT8500 ACS0000012
12.03.2007 never NY 17F68C2409419232 ER YERDINS EAMR0000175829D73A
12.03.2007 never NY 17FC0C1D0EDA6E0C ER YERDUPD EAMR0000185857FA28
13.03.2007 never NY 1804D0C01AC3D13F WI YWI0087 TOFF00008858A1871A
17.03.2007 never NY 1809AFB2198DF5E8 SN SN5004 SAVS000002
20.03.2007 never NY 18031B4404501E6C WB WB1030 WSTS000046
20.03.2007 never NY 18031B490D66E6FC WB WB1040 WSTS000046
31.03.2007 never NY 1804310001822ED7 DE DE5900 DE00000043
31.03.2007 never NY 18082310065D8816 WQ WQ6000 CUBE000067
02.04.2007 never NY 1806494F024CADC4 DE DE5080 DE00000043
03.04.2007 never NY 180A5AD201662B06 ER YERBER EAMR000029
07.04.2007 never AY 17EFC7FD18C19850 MF MF7802 MFR0000086
10.04.2007 never NY 16D648980E241364 HP1 AAIORK HPSVP2AAIORK
10.04.2007 never NY 16A0891F1534545B HP1 AC7ZRK HPSVP2AC7ZRK
10.04.2007 never NY 16AEAEF714CAB365 HP1 AOYURK HPSVP2AOYURK
10.04.2007 never NY 16D648980E241364 HP3 AAIORK HPSVP2AAIORK
10.04.2007 never NY 16A0891F1534545B HP3 AC7ZRK HPSVP2AC7ZRK
10.04.2007 never NY 16AEAEF714CAB365 HP3 AOYURK HPSVP2AOYURK
19.04.2007 never NY 18063C48073C1821 WB WB5340 TOFF000088
20.04.2007 never NY 18063C4512A8DBE5 WB WB1290 TOFF000088
20.04.2007 never NY 1802C71D123B04FF YY YYWBERX TOFF00008858906FB5
24.04.2007 never NY 180BC02E0240FF58 WF WF5410 WSSW000091
24.04.2007 never NY 180BC05B11AD373C WF YWFSWC WSSW000091
24.04.2007 never NY 18038DF90850E6F0 WQ YWQ4502 CUBE0000675896F3D8
27.04.2007 never NY 168273B60DA9ACC3 HP1 ABWZQ2 HPSVP2ABWZQ2
27.04.2007 never NY 159007A30CC385D4 HP1 ACDBQ1 HPSVP1ACDBQ1
27.04.2007 never NY 15A01A3F0D38625E HP1 ACZRQ2 HPSVP2ACZRQ2
27.04.2007 never NY 15A01D3C072BE22A HP1 AF3TQ1 HPSVP2AF3TQ1
27.04.2007 never NY 168273B60DA9ACC3 HP3 ABWZQ2 HPSVP2ABWZQ2
27.04.2007 never NY 159007A30CC385D4 HP3 ACDBQ1 HPSVP1ACDBQ1
27.04.2007 never NY 15A01A3F0D38625E HP3 ACZRQ2 HPSVP2ACZRQ2
27.04.2007 never NY 15A01D3C072BE22A HP3 AF3TQ1 HPSVP2AF3TQ1
27.04.2007 never NY 1806E4241E15FA09 SV SV5770 WSSV000151
30.04.2007 never NY 180430EA1949EB61 DE DE0190 DE00000043
30.04.2007 never NY 180430FB13000E0D DE DE5130 DE00000043
03.05.2007 never NY 1804F6150525B9F8 MF MF8950 MFR0000096
04.05.2007 never NY 1805C70F119FB4AC AZ AZ0210 AWZA000052
04.05.2007 never NY 1802F22E10766C5A ER ER8020 EAMR000022
04.05.2007 never NY 155FD924181CCFA6 HP1 RWBR030 HPSVP1RWBR030
04.05.2007 never NY 155FD924181CCFA6 HP3 RWBR030 HPSVP1RWBR030
05.05.2007 never NY 18063C0D100AB6A4 TN TN7004 OTXO000060
05.05.2007 never NY 18063C2F01A69907 WC WC8170 OTXO000060
06.05.2007 never NY 17EF45B00C497A34 CZ CZ7510 APEN000035
06.05.2007 never NY 1802EFCE0982FC5E CZ CZ8010 APEN000039
06.05.2007 never NY 17E19C3D1A135A83 CZ CZ8020 APEN000032
07.05.2007 never NY 170702DB1DB89478 HP1 AB7STL HPSVP2AB7STL
07.05.2007 never NY 170702DB1DB89478 HP3 AB7STL HPSVP2AB7STL
07.05.2007 never NY 17DF3C1717251EBD WP YWPL2P1 DBH00000685766559B
09.05.2007 never NY 1806E4671CE7F768 SV SV5750 WSSV000151
11.05.2007 never NY 17C85BA315EFD9AA CZ YCZM113 KINF00000656A66022
11.05.2007 never NY 180AD3EB1A255478 DE DE0030 DE00000065
11.05.2007 never NY 180AD3EC1F37B12B DE DE0050 DE00000065
11.05.2007 never NY 180AD3EE0DE04B17 DE DE0090 DE00000065
11.05.2007 never NY 180AD3F21908F9F5 DE DE0420 DE00000065
11.05.2007 never NY 180AD3F406BFBEEE DE DE0430 DE00000065
11.05.2007 never NY 180AD3F605C47579 DE DE0440 DE00000065
11.05.2007 never NY 180AD3F70738015C DE DE0810 DE00000065
11.05.2007 never NY 180AD3F902AE1980 DE DE0820 DE00000065
11.05.2007 never NY 180A596C0C38914E ED ED0960 ED00000058
11.05.2007 never NY 180985BF048D7514 ER ER5080 EAMR000029
11.05.2007 never NY 180CB2E10D76F6E2 ER YERBER EAMR000033
11.05.2007 never NY 17E956DB00BEE5EA FI YFI0140 BKUR00003857BB18F4
11.05.2007 never NY 180A52B0144E30BA GM GM0850 GM00000131
11.05.2007 never NY 180527DD14068361 GM GM0870 GM00000113
11.05.2007 never NY 17CDAC53112CC040 GM GM7910 GM00000065
11.05.2007 never NY 1809651C0769BA6E NO NO0970 NO00000043
11.05.2007 never NY 180A2BF81A2C7D9C SN SN5004 SAVS000004
11.05.2007 never NY 1809AFB305C62075 SN SN5901 SAVS000002
11.05.2007 never NY 1806E418149351A1 SV SV5150 WSSV000151
11.05.2007 never NY 1810BE841959FFF8 SV SV5600 WSSV000222
11.05.2007 never NY 1810BE880B14CF7A SV SV5790 WSSV000222
11.05.2007 never NY 181116FF0E0F1749 TN TN7080 OTXO000072
11.05.2007 never NY 1809B2F11F6A0328 UU UU5170 GSER000169
11.05.2007 never NY 18063C33167D4E6B WB WB0060 TOFF000088
11.05.2007 never NY 1804D65F1A0CFF65 WB WB0550 WSTS000046
11.05.2007 never NY 18031B5810DE385B WB WB0970 WSTS000046
11.05.2007 never NY 18063C421241FE5A WB WB0980 TOFF000088
11.05.2007 never NY 17F3B74F1E488E52 WB WB0990 TOFF000076
11.05.2007 never NY 18063C2A0DCAFFC3 WB WB1100 TOFF000088
11.05.2007 never NY 18063D14070D9ED2 WB WB1130 WSTS000046
11.05.2007 never NY 180F309103DE08AE WB WB1290 TOFF000110
11.05.2007 never NY 180F308F05BBE908 WB WB5340 TOFF000110
11.05.2007 never NY 180915970A3C7C0D WB YWB0082 WS8B00042658C556F1
11.05.2007 never NY 18070830187C28F1 WB YWB0083 WS8B00038058B41EE5
11.05.2007 never NY 1806608116F7B849 WF WF0310 WSSW000069
11.05.2007 never NY 18038E9A0164CFC1 WF WF0320 WSSW000069
11.05.2007 never NY 18038E9C16053EE5 WF WF0350 WSSW000069
11.05.2007 never NY 180FD8DB1475606E WF WF5410 WSSW000092
11.05.2007 never NY 180FD8E5056D53DD WF YWFSWC WSSW000092
11.05.2007 never NY 1809433B02F33409 WI YWI0087 WS8B00042858C6D5CA
11.05.2007 never NY 180990B30F056120 WQ WQ5950 CUBE000090
12.05.2007 never NY 18111CD2011BE5E7 SN SN5920 SAVS000001
12.05.2007 never NY 1812A6ED0FC2CE7B SN SN5920 SAVS000006
12.05.2007 never NY 1812AAD1133E9997 SN SN5920 SAVS000008
13.05.2007 never NY 1810233B08719560 CZ CZ7510 APEN000040
26.05.2007 never NY 18148F89125891BE TN TN7080 OTXO000075
02.06.2007 never NY 18104EFC01B91721 WC WC8170 OTXO000066
03.06.2007 never NY 181050291C2291AA CZ CZ8010 APEN000040
05.06.2007 never NY 181167D5028F29A4 SV SV5770 WSSV000188
06.06.2007 never NY 17F7CD931EDBCCE6 KA KA0030 KOAB000046
06.06.2007 never NY 176D80010157D0D5 WB YWB5403 A06M02510853AC4207
07.06.2007 never NY 181167CE06BC3E70 SV SV5750 WSSV000188
07.06.2007 never NY 176D7FFE0C4873F1 WB YWB5402 A06M02510853AC420A
08.06.2007 never NY 18104EB40BCCF03E WB WB0550 WSTS000051
08.06.2007 never NY 18104EB80EEC82EF WB WB0820 WSTS000051
08.06.2007 never NY 18104EBF1899911D WB WB0840 WSTS000051
08.06.2007 never NY 18104EB50F6C19E5 WB WB0970 WSTS000051
08.06.2007 never NY 18104ECD00DF33CC WB WB1100 TOFF000099
08.06.2007 never NY 18104EC80BF36DD2 WB WB1130 WSTS000051
08.06.2007 never NY 18104F001A82A2D2 WB WB1290 TOFF000099
08.06.2007 never NY 1811E17C16C548D4 WB WB5340 TOFF000099
08.06.2007 never NY 180FA9B91C108FD2 WB YWB0082 WSTS00005158FC9483
08.06.2007 never NY 180E173313327007 WB YWB0083 WSTS00005158EF63E7
08.06.2007 never NY 180E172E1D4BF445 WI YWI0087 TOFF00009958EF63C0
10.06.2007 never NY 18139AF51B561945 CZ CZ7510 APEN000046
12.06.2007 never NY 17E6558D07C16DC5 TN YTN0160 OTXO00005457A1E399
23.06.2007 never NY 17C9665C0387A55B TN TN5015 OTXO000036
23.06.2007 never NY 1815CC21197C9DC0 WC WC8170 OTXO000073
26.06.2007 never AY 181050D51150A800 MF YMFC115 MFR000011159020E48
27.06.2007 never NY 181052801526D7CE DE DE5130 DE00000061
29.06.2007 never NY 1815CBF31F43A228 WB WB0550 WSTS000056
29.06.2007 never NY 1815CBDF028ABC14 WB WB0820 WSTS000056
29.06.2007 never NY 1815CBE403F1522A WB WB0840 WSTS000056
29.06.2007 never NY 1815CBD813E68799 WB WB0970 WSTS000056
29.06.2007 never NY 1815CBD3028990C0 WB WB1130 WSTS000056
29.06.2007 never NY 1815CA811B0232E9 WB YWB0082 WSTS000056592FFC68
29.06.2007 never NY 1815CA82150A2EA3 WB YWB0083 WSTS000056592FFC72
29.06.2007 never NY 1815CB9002222DA5 WI YWI0087 TOFF000111593004B5
02.07.2007 never NY 18104EDB03BFF635 WB WB0060 TOFF000099
03.07.2007 never NY 17A5446209C50C0A AT AT0097 IMS0000013
03.07.2007 never NY 16592B6D04B1D9BD HP1 AANQUP HPSVP2AANQUP
03.07.2007 never NY 16592B6D04B1D9BD HP3 AANQUP HPSVP2AANQUP
03.07.2007 never NY 16592B6D04B1D9BD HPS AANQUP HPSVP2AANQUP
07.07.2007 never AY 180CAC46097C85A1 MF MF7802 MFR0000110
14.07.2007 never NY 1802CC1313D81A5F SV SV7520 WSSV000151
16.07.2007 never NY 1648D83908C76B3B HP1 AA00WM HPSVP2AA00WM
16.07.2007 never NN 168291CA178D923C HP1 AG23LZ HPSVP2AG23LZ
16.07.2007 never NY 1648D83908C76B3B HP3 AA00WM HPSVP2AA00WM
16.07.2007 never NY 168291CA178D923C HP3 AG23LZ HPSVP2AG23LZ
16.07.2007 never NY 1648D83908C76B3B HPS AA00WM HPSVP2AA00WM
21.07.2007 never NY 177E95DA027DD0B6 WB WB7230 A06M025453
27.07.2007 never NY 181052B70C357965 DE DE0190 DE00000061
31.07.2007 never NY 180DF65010137638 DP DP0320 DP00000065
03.08.2007 never NY 17FF3A2B011C386E WP YWPR4PX DBH00000835872A6ED
03.08.2007 never NY 177AAC82057F81CE YY YYPRAD0 A20Y001521
04.08.2007 never NY 180CA6C103C836A5 ER ER8020 EAMR000028
04.08.2007 never NY 1819E9D9176CB4D2 TN TN5015 WS8B000468
04.08.2007 never NY 18104FB20C777F7F TN TN7004 OTXO000066
04.08.2007 never NY 17EDB6EC0CF41C4E TN YTN5012 OTXO00005857DFCCA4
04.08.2007 never NY 17F21C5711AA25C0 TN YTN5013 OTXO0000585804AD84
04.08.2007 never NY 1819E9E912AF2F8C WC WC8170 WS8B000468
05.08.2007 never NY 1817D4B802F927FD CZ CZ7510 APEN000047
05.08.2007 never NY 1814369112862BD4 CZ CZ8010 APEN000044
05.08.2007 never NY 1810239E183B99DB CZ CZ8020 APEN000040
08.08.2007 never NY 17FFD2E20DC43B5A RT YRT0002 TABS0001305877A804
08.08.2007 never NY 1814406D0EE779F3 SV SV5770 WSSV000195
09.08.2007 never NY 1819E9CB0368BBAC TN TN5004 WS8B000468
09.08.2007 never NY 1819E9DD181A4657 WB WB7440 WS8B000468
09.08.2007 never NY 1819E9DA1D273222 WB WB7441 WS8B000468
09.08.2007 never NY 180C667E044AA0F0 WF WF0310 WSSW000085
09.08.2007 never NY 180C668510AA7600 WF WF0320 WSSW000085
09.08.2007 never NY 176D800416D1A3E6 YY YYWBMTU A06M02510853AC4233
10.08.2007 never NY 18116383053015E9 CZ CZ8980 KLOM000061
10.08.2007 never NY 181C658B0CC5BF0F CZ YCZJABW GSER000185596765E3
10.08.2007 never NY 181052B715DA14A3 DE DE0060 DE00000061
10.08.2007 never NY 17DAE088170B1DD9 DI YDITBTB DI000000425741C710
10.08.2007 never NY 181DFE691C0BF474 ER ER5080 EAMR000044
10.08.2007 never NY 181A30160089B5E9 ER YERBER EAMR000042
10.08.2007 never NY 181FB21A1FE4E323 ER YERPRI EAMR000045
10.08.2007 never NY 1810508C1D55188E GM GM7910 GM00000132
10.08.2007 never NY 17350B8D12C7D4C0 HP1 AN96RI HPSVP2AN96RI
10.08.2007 never NY 17350B8D12C7D4C0 HP3 AN96RI HPSVP2AN96RI
10.08.2007 never NY 180B70A00648C18F PC YPC0570 IVN000003058D9279F
10.08.2007 never NY 18104FEA1264933D SN YSN111U SAVS00000159020621
10.08.2007 never NY 17EBB3FA00747DE9 VV YVVZZ22 VDPS00008757CEED15
10.08.2007 never NY 1819E99606AB2A97 WB WB0550 WS8B000468
10.08.2007 never NY 18031B371D893645 WB WB0570 WSTS000046
10.08.2007 never NY 18031B3F1AE4BFBA WB WB0620 WSTS000046
10.08.2007 never NY 1819E9A61C26BDA7 WB WB0820 WS8B000468
10.08.2007 never NY 1819E9B3184BFA20 WB WB0840 WS8B000468
10.08.2007 never NY 17B6EFAE0B79D792 WB WB0900 WSTS000014
10.08.2007 never NY 177E97AC05456002 WB WB0910 A06M025453
10.08.2007 never NY 1819E9BB1DEB6DEA WB WB0970 WS8B000468
10.08.2007 never NY 18031B431C21ADE5 WB WB1020 WSTS000046
10.08.2007 never NY 18031B4B0865055F WB WB1050 WSTS000046
10.08.2007 never NY 18031B471234006F WB WB1070 WSTS000046
10.08.2007 never NY 1815CBBC128B209F WB WB1100 TOFF000111
10.08.2007 never NY 17B6EFB00FA2278C WB WB1120 WSTS000014
10.08.2007 never NY 1819E9B01255AAF5 WB WB1130 WS8B000468
10.08.2007 never NY 17E656D50497257B WB WB1270 TOFF000067
10.08.2007 never NY 1815CBC80E0A07D8 WB WB1290 TOFF000111
10.08.2007 never NY 18031B4E14EB6841 WB WB1310 WSTS000046
10.08.2007 never NY 17F42B4105DCA057 WB WB5040 WS8B000319
10.08.2007 never NY 1819E9D216BAE89A WB WB5270 WS8B000468
10.08.2007 never NY 1819E9CE1C08E759 WB WB5290 WS8B000468
10.08.2007 never NY 1815CBC41E9ECD6B WB WB5340 TOFF000111
10.08.2007 never NY 1819E9D8100C76EE WB WB5570 WS8B000468
10.08.2007 never NY 1819BB65112A33FB WB YWB0082 WS8B00046859510BA3
10.08.2007 never NY 1819BB6608D94976 WB YWB0083 WS8B00046859510BA9
10.08.2007 never NY 1819E9E01D0E6840 WC WC5010 WS8B000468
10.08.2007 never NY 1819E9E4135D7F2A WC WC8120 WS8B000468
10.08.2007 never NY 1819E9E117A5CB9F WC WC8401 WS8B000468
10.08.2007 never NY 180C668F1F297930 WF WF0350 WSSW000085
10.08.2007 never NY 1819BBA11374D8E4 WI YWI0087 WS8B00046859510C2E
10.08.2007 never NY 181028B91480D8A0 WQ YWQ4502 CUBE0000815900BDEA
10.08.2007 never NY 181BBF151880ED2C WQ YWQBERI CUBE0001085961F18D
10.08.2007 never NY 180F308B0E3EBEA6 YY YYWBERX TOFF00011058F89C03
11.08.2007 never NY 181F40411B0CB2A1 SN SN5902 SAVS000005
11.08.2007 never NY 181F40420CC9EFA1 SN SN5910 SAVS000005
11.08.2007 never NY 181F4043086B7F18 SN SN5920 SAVS000005
11.08.2007 never NY 181B490F003C0912 TN TN7004 OTXO000070
11.08.2007 never NY 17FF3F201A2DDC44 WP YWPL3P1 DBH00000835872D08A
11.08.2007 never NY 17FF3ECA0D6540C4 WP YWPL4P1 DBH00000835872CDB3
13.08.2007 never NY 16CB6F5F03D8543C HP1 ZDIYURI HPSVP2ZDIYURI
13.08.2007 never NY 16CB6F5F03D8543C HP3 ZDIYURI HPSVP2ZDIYURI
15.08.2007 never NY 181C3CCF18A25948 WB WB0970 WSTS000055
16.08.2007 never NY 181CDCC700146260 FC FC0050 KLOM000062
17.08.2007 never NY 18204F4E09BD932C WB WB5340 TOFF000109
20.08.2007 never NY 182052B8138C5EAB WB WB0840 WSTS000055
20.08.2007 never NY 18204F520D3BBE96 WB WB1100 TOFF000109
20.08.2007 never NY 182052B701C86330 WB WB1130 WSTS000055
20.08.2007 never NY 18204F50133EEF4F WB WB1290 TOFF000109
23.08.2007 never NY 18191FCA0F8C1B80 WB YWB5427 WSTS000055594BF219MVS
24.08.2007 never NY 17350B9F06BA5ED8 HP1 AN97RI HPSVP2AN97RI
24.08.2007 never NY 17350B9F06BA5ED8 HP3 AN97RI HPSVP2AN97RI
24.08.2007 never NY 18191FC617F86461 WB YWB5425 WSTS000055594BF204MVS
31.08.2007 never NY 181E1C5606776690 DP DP0320 DP00000067
31.08.2007 never NY 165933970BE0AF71 HP1 ADWVQZ HPSVP2ADWVQZ
31.08.2007 never NY 165933970BE0AF71 HP3 ADWVQZ HPSVP2ADWVQZ
31.08.2007 never NY 165933970BE0AF71 HPS ADWVQZ HPSVP2ADWVQZ
03.09.2007 never NN 16829513017A1AAB HP1 ABZJLS HPSVP2ABZJLS
03.09.2007 never NY 168291D11CEE49B7 HP1 ACEQL4 HPSVP2ACEQL4
03.09.2007 never NY 16829513017A1AAB HP3 ABZJLS HPSVP2ABZJLS
03.09.2007 never NY 168291D11CEE49B7 HP3 ACEQL4 HPSVP2ACEQL4
06.09.2007 never NY 182264F10BBCCE31 WB WB0840 WS8I000307
06.09.2007 never NY 182264F510B513B1 WB WB1100 WS8I000307
06.09.2007 never NY 182264F500BCCA0E WB WB1130 WS8I000307
06.09.2007 never NY 182264F606CDDD86 WB WB1290 WS8I000307
06.09.2007 never NY 1822650401D8C0BA WB WB5340 WS8I000307
06.09.2007 never NY 181B4E7507B9AAFC WQ YWQ4502 CUBE000092595E40BC
08.09.2007 never NY 181B495411CD518C WC WC8170 OTXO000070
13.09.2007 never NY 1824188306484C98 WB YWB0083 WS8B00049859A7FB84MVS
14.09.2007 never NY 182508AA10BEBA29 WB WB0630 WS8B000493
14.09.2007 never NY 182508B11E12CC23 WB WB0680 WS8B000493
14.09.2007 never NY 182508BC17AB3FDE WB WB0840 WS8B000493
14.09.2007 never NY 182508C0009A2791 WB WB1100 WS8B000493
14.09.2007 never NY 182508B908A66659 WB WB1130 WS8B000493
14.09.2007 never NY 182508BC07CE0D85 WB WB1290 WS8B000493
14.09.2007 never NY 182509020B72643B WB WB5340 WS8B000493
14.09.2007 never NY 182508EF19331EAB WB WB5570 WS8B000493
14.09.2007 never NY 182508E2112C51DA WB YWB530 WS8B000493
14.09.2007 never NY 181A0E1807B808DE YY YYWBERX TOFF0001095953C073MVS
18.09.2007 never NY 1825B120177A7420 SN SN5902 SAVS000013
18.09.2007 never NY 1825B15913A0F0BD SN SN5920 SAVS000013
27.09.2007 never NY 16A087B710D05AAD HP1 RWBK029 HPSVP2RWBK029
27.09.2007 never NY 16A087B710D05AAD HP3 RWBK029 HPSVP2RWBK029
28.09.2007 never NY 181A026818EC369B DI YDIU015 DI0000006459535F3EMVS
28.09.2007 never NY 181A027C072235D5 DI YDIU016 DI0000006459535FDDMVS
02.10.2007 never NY 1828868403E50B4E SN SN5902 SAVS000016
02.10.2007 never NY 1825B1400AE3506F SN SN5910 SAVS000013
02.10.2007 never NY 1828877F066B6F3E SN SN5920 SAVS000016
06.10.2007 never AY 181B465210425DB5 MF MF7802 MFR0000124
10.10.2007 never NY 18228655036D8A5D RT YRT0002 TABS000163599ACDD3
11.10.2007 never NY 18191FDB160E209F WB YWB5419 WSTS000055594BF2C6MVS
16.10.2007 never NY 181B48460EBD724A WB WB0910 WSTS000055
22.10.2007 never NY 181B2AE00FD10CF5 DE DE5130 DE00000066
31.10.2007 never NY 182DB2C01A4395B9 DP DP0320 DP00000076
02.11.2007 never NY 181C3AC902656B36 TN YTN0160 OTXO0000705965FE8DMVS
02.11.2007 never NY 181677F21D35936F WP YWPR4PX DBH00000965935AA4BMVS
03.11.2007 never NY 182149BF1F625D6A TN TN7004 OTXO000082
03.11.2007 never NY 1825351303342F49 WC WC8170 OTXO000085
05.11.2007 never NY 17F6ABEC0FBFB769 BP BP9060 BPST000045
05.11.2007 never NY 181B4E76128D418C WQ YWQ5601 CUBE000092595E40C8
06.11.2007 never NY 181DF5860F63DFDE WB WB0060 TOFF000109
08.11.2007 never NY 182530FA1755B2EA SV SV5750 WSSV000199
09.11.2007 never NY 181642531F0A6578 EQ YEQKDGP GSER0001775933E982
09.11.2007 never NY 181ACE71168F303B LC LC0511I TFBM000030595A0ED9
09.11.2007 never NY 181E6B50010F7276 MF YMFC110 MFR000012559785D3C
09.11.2007 never NY 1818A65309EBAA05 VV YVVZZ22 VDPS0001145947F743MVS
09.11.2007 never NY 182190B107786E08 WB WB0970 WSTS000059
09.11.2007 never NY 1825A8B61E132806 WB WB1130 WSTS000058
09.11.2007 never NY 1825050B0AA408CF WB YWB0083 WSTS00005859AFBB9DMVS
09.11.2007 never NY 182F1A3A0A95304A WC WC5010 OTXO000090
09.11.2007 never NY 18276DE209737070 WF YWFCB02 WSSW00009959C3F210MVS
09.11.2007 never NY 18273B0903C49A50 WF YWFM537 WSSW00009959C24789MVS
09.11.2007 never NY 1816795F0A71EED5 WP YWPL3P1 DBH00000965935B6F3MVS
09.11.2007 never NY 18167A40199930C3 WP YWPL4P1 DBH00000965935BE8EMVS
09.11.2007 never NY 1816779710B19535 WP YWPRBPX DBH00000965935A7D3MVS
09.11.2007 never NY 182C4BBA13FCFE6A WQ YWQBERI CUBE00011159ECC4D5
13.11.2007 never NY 182E81190D0F9522 WB WB1130 WSTS000057
13.11.2007 never NY 182E81350E35C518 WB WB1290 TOFF000112
14.11.2007 never NY 182E80BE12B48951 WB WB5340 TOFF000112
14.11.2007 never NY 182F9C94064FEB21 WC WC5010 WS8B000535
17.11.2007 never NY 182E810C16E481CB TN TN7004 OTXO000081
22.11.2007 never NY 182FE89C1A89F8B7 WB WB0840 WS8B000540
23.11.2007 never NY 182FE8A119EB323F WB WB1100 WS8B000540
23.11.2007 never NY 182FE89F190AB8F6 WB WB1290 WS8B000540
23.11.2007 never NY 182FE8E91FB09F86 WB WB5340 WS8B000540
23.11.2007 never NY 1827DA221FF5CEB2 YY YYWBERX TOFF00011259C7788CMVS
28.11.2007 never NY 183127D0118B8088 WB WB0840 WSTS000063
30.11.2007 never NY 18191FF500770133 WB YWB5402 WSTS000055594BF347MVS
30.11.2007 never NY 18191FF3015FBA1A WB YWB5403 WSTS000055594BF33EMVS
10.12.2007 never NY 1829968504E28612 WB WB0910 WSTS000057
11.12.2007 never NY 17EFE6E5106A26C2 HB YHBK011 ASIA00007957F22639
12.12.2007 never NY 182CBB2B071C931A SN SN5001 SAVS000015
14.12.2007 never NY 18321B8B01D1DDC1 WB WB0840 WSTS000064
14.12.2007 never NY 182FE89F0C3DCC0C WB WB1130 WS8B000540
14.12.2007 never NY 18314CB90134CC0E WB WB5340 TOFF000119
14.12.2007 never NY 182F9C7D0755188A WC WC8401 WS8B000535
03.01.2008 never NY 182CE96E1855E81B WB WB0060 TOFF000112
05.01.2008 never AY 182D5B511CD65C01 MF MF7802 MFR0000135
17.01.2008 never NY 182885C01476B147 DE DE5130 DE00000070
19.01.2008 never NY 181DF5AD1CE07ADA WB WB7230 TOFF000109
20.01.2008 never NY 182F9C231D54A234 VV YVV3EIP VDPS0001565A0883F9MVS
01.02.2008 never NY 17E9A6230C310A9D BP BP7161 BPST000055
01.02.2008 never NY 175BDAEA05D32FD9 BP YBPACF2 A12M0061025318300D
01.02.2008 never NY 183304A108676675 WQ WQ6000 CUBE000116
02.02.2008 never NY 1830D2BA1F74EDCE TN TN7004 OTXO000094
02.02.2008 never NY 1827D9ED1B7A2247 TN YTN5012 OTXO00008159C777B6MVS
02.02.2008 never NY 182E81160F3767AF WC WC8170 OTXO000081
03.02.2008 never NY 1828369001964AD0 CZ CZ8010 APEN000049
03.02.2008 never NY 1828369105151BC7 CZ CZ8020 APEN000049
07.02.2008 never NY 1825D96B10D1E0EC LC YLCTF03 TFBM00003359B6B138
07.02.2008 never NY 18314CB119CD9908 WB WB0970 TOFF000119
07.02.2008 never NY 181C3CC50797627B WB WB1070 WSTS000055
07.02.2008 never NY 181C3CBE09DCAD91 WB WB1310 WSTS000055
07.02.2008 never NY 1827DA1D03FFDB00 WB YWB0082 WSTS00005759C7789AMVS
07.02.2008 never NY 1830F8E201B51E3F WB YWB0083 WSTS0000625A13F154MVS
08.02.2008 never NY 183A92660A46E3C7 ER ER8020 EAMR000063
08.02.2008 never NY 181B296C15713FAB GM GM7910 GM00000145
08.02.2008 never NY 1825D96E09526C60 LC YLCTF02 TFBM00003359B6B121
08.02.2008 never NY 1828360A066104AE MF YMFC110 MFR000013659CA812D
08.02.2008 never NY 183C03241ADF9596 VV YVVZZ33 VDPS0001685A708DD5MVS
08.02.2008 never NY 181C3D04133DC330 WB WB0570 WSTS000055
08.02.2008 never NY 18314CB10D1F93F8 WB WB0820 TOFF000119
08.02.2008 never NY 181BC4FB194A390D WB WB0900 WSTS000055
08.02.2008 never NY 18314CAB0B51E797 WB WB0980 TOFF000119
08.02.2008 never NY 18314CAB12720FBA WB WB0990 TOFF000119
08.02.2008 never NY 181C3CC90BD2EB57 WB WB1020 WSTS000055
08.02.2008 never NY 181C3CC41DD64553 WB WB1050 WSTS000055
08.02.2008 never NY 18314CAC13D5C113 WB WB1080 TOFF000119
08.02.2008 never NY 18314CB108C3B21E WB WB1090 TOFF000119
08.02.2008 never NY 18314CAC06DAB158 WB WB1100 TOFF000119
08.02.2008 never NY 181BC4FC0590BD70 WB WB1120 WSTS000055
08.02.2008 never NY 1833FFF70CF81D11 WB WB1130 WSTS000062
08.02.2008 never NY 181DF5901B2478B6 WB WB1270 TOFF000109
08.02.2008 never NY 18314CAB1D0CD034 WB WB1290 TOFF000119
08.02.2008 never AY 18330E701AAF0F8C WI YWI5955 WS8I0003435A256D49
08.02.2008 never NY 18314CA01F534940 YY YYWBERX TOFF0001195A16AFD3MVS
11.02.2008 never NY 183B0B0B161F507C WB WB0970 TOFF000122
16.02.2008 never NY 183AC00E05023C61 TN TN7004 CSQS000007
20.02.2008 never NY 183AC1A203D8D6B9 WB WB0910 WSTS000061
20.02.2008 never NY 183862A30B47D8D5 WQ YWQBERI CUBE0001185A5220FD
21.02.2008 never NY 183AC1BB0F6B6F4C WB WB0620 WSTS000061
21.02.2008 never NY 183DE8150D65B415 WB WB0970 WSTS000069
21.02.2008 never NY 183AC1A4130FB812 WB WB1070 WSTS000061
21.02.2008 never NY 183B0B06055E7F50 WB WB1270 TOFF000122
22.02.2008 never NY 183DE0621C7377DE CZ CZ6400 GSER000219
22.02.2008 never NY 1838643816D05AE9 DE DE0430 DE00000077
22.02.2008 never NY 1838644419C0AD4A DE DE0440 DE00000077
22.02.2008 never NY 183AC16F0BC74831 WB WB0550 WSTS000061
22.02.2008 never NY 183AC1B615F3A398 WB WB0570 WSTS000061
22.02.2008 never NY 183DE81C04E37624 WB WB0630 WSTS000069
22.02.2008 never NY 183DE81F022DAF51 WB WB0680 WSTS000069
22.02.2008 never NY 183AC1AC048CEBF3 WB WB0830 WSTS000061
22.02.2008 never NY 183AC1C502C91867 WB WB0870 WSTS000061
22.02.2008 never NY 183B0B0C1BF09E86 WB WB0980 TOFF000122
22.02.2008 never NY 183AC17A022BB450 WB WB1020 WSTS000061
22.02.2008 never NY 183AC1A71ACA9B60 WB WB1050 WSTS000061
22.02.2008 never NY 183BD30D193582E9 WB WB1100 TOFF000122
22.02.2008 never NY 183AC1A41AB6A840 WB WB1110 WSTS000061
22.02.2008 never NY 183AC18802D3917E WB WB1120 WSTS000061
22.02.2008 never NY 183B0CAA0DED47F4 WB WB1130 WSTS000061
22.02.2008 never NY 183B0B0F0ABE6647 WB WB1290 TOFF000122
22.02.2008 never NY 183AC1820A650D6B WB WB1310 WSTS000061
22.02.2008 never NY 183B0B1B0ABDFA4C WB WB5340 TOFF000122
07.03.2008 never AY 18388C5611DF784A MF YMFC115 MFR00001495A537ECB
12.03.2008 never NY 161FDC4B0094C100 PHPS53 H0001
12.03.2008 never NY 15AF999510594FC8 PHPS53 HMCBCRD
12.03.2008 never NY 15AAE9F00D66AC82 PHPS53 HMCXRL4
12.03.2008 never NY 164DEE021925D98C PHPS53 HMPBNDR
12.03.2008 never NY 164DEDE0153DDC90 PHPS53 HMPGENX
12.03.2008 never NY 1619076913430EE0 PHPS53 RMIGNID
12.03.2008 never NY 161FDC4B0094C100 PHPSPTA H0001
12.03.2008 never NY 15AF999510594FC8 PHPSPTA HMCBCRD
12.03.2008 never NY 15AAE9F00D66AC82 PHPSPTA HMCXRL4
12.03.2008 never NY 164DEE021925D98C PHPSPTA HMPBNDR
12.03.2008 never NY 164DEDE0153DDC90 PHPSPTA HMPGENX
12.03.2008 never NY 1619076913430EE0 PHPSPTA RMIGNID
13.03.2008 never NY 1825FD9200278E86 BP BP9060 BPST000082
13.03.2008 never NY 15D7894D02F10E00 PHPS53 HMCRES
13.03.2008 never NY 15D7894D02F10E00 PHPSPTA HMCRES
13.03.2008 never NY 183577CD126E7FDF WB YWB0083 WSTS0000615A39A80BMVS
14.03.2008 never NY 183B09F516A89508 WI YWI0087 TOFF0001225A68637AMVS
28.03.2008 never NY 18261CEB0F4782DA WP YWPL9P1 DBH000012659B8E75BMVS
31.03.2008 never NY 16D648AB1720988C HP1 AATSRK HPSVP2AATSRK
31.03.2008 never NY 16AEAEF404FC7943 HP1 AC7VRK HPSVP2AC7VRK
31.03.2008 never NY 16D648AB1720988C HP3 AATSRK HPSVP2AATSRK
31.03.2008 never NY 16AEAEF404FC7943 HP3 AC7VRK HPSVP2AC7VRK
02.04.2008 never NY 18388C3212672D71 MF YMFC010 MFR00001495A537D96
24.04.2008 never NY 18261CE51D532C8E WP YWPL6P1 DBH000012659B8E72DMVS
29.04.2008 never NY 183577CF1AB9E03F WB YWB5402 WSTS0000615A39A826MVS
29.04.2008 never NY 183577DD1FE73077 WB YWB5403 WSTS0000615A39A82CMVS
03.05.2008 never NY 183310D51F02CDAF MF MF8810 MFR0000148
03.05.2008 never NY 183310E200D244E6 MF MF8950 MFR0000148
08.05.2008 never NY 18191F9E017F0146 YY YYWBMTU WSTS000055594BF093MVS
09.05.2008 never NY 1838643615DB5DBB DE DE0490 DE00000077
09.05.2008 never NY 183AC1AC18FD05CF WB WB0900 WSTS000061
09.05.2008 never NY 183B0B0418FC2BB3 WB WB0990 TOFF000122
09.05.2008 never NY 18261CDE07950EED WP YWPL3P1 DBH000012659B8E6F0MVS
09.05.2008 never NY 18261CE00FEBB7F2 WP YWPL4P1 DBH000012659B8E702MVS
09.05.2008 never NY 18261F391CC1A8B0 WP YWPRBPX DBH000012659B8FA95MVS
09.05.2008 never NY 183862E41EC90A86 WQ YWQ4502 CUBE0001185A522322
09.05.2008 never NY 183862EB1B19A44B WQ YWQ5601 CUBE0001185A522360
16.06.2008 never NY 182C6A820E8DE9F2 VV YVVZZ22 VDPS00011759EDC6D8MVS
26.06.2008 never NY 175DC054012899AA HP1 AOBWRI HPSVP2AOBWRI
26.06.2008 never NY 175DC054012899AA HP3 AOBWRI HPSVP2AOBWRI
31.07.2008 never NY 17350BAC016B0E14 HP1 ALS0RI HPSVP2ALS0RI
31.07.2008 never NY 17350B8B08C196B0 HP1 ALSZRI HPSVP2ALSZRI
31.07.2008 never NY 17350BAC016B0E14 HP3 ALS0RI HPSVP2ALS0RI
31.07.2008 never NY 17350B8B08C196B0 HP3 ALSZRI HPSVP2ALSZRI
08.08.2008 never NY 18333AE4110B2B46 LC YLCTF02 TFBM0000375A26E226
09.08.2008 never NY 18385BDF1A89AEE7 GM GM7910 GM00000160
30.09.2008 never NY 173DDD96005235BD HP1 RWBT008 HPSVP2RWBT008
30.09.2008 never NY 173DDD96005235BD HP3 RWBT008 HPSVP2RWBT008
09.10.2008 never NY 16A0888008572BBF HP1 AGX3RB HPSVP2AGX3RB
09.10.2008 never NY 16A0888008572BBF HP3 AGX3RB HPSVP2AGX3RB
28.10.2008 never NY 16D6490E0810810C HP1 RWBZ050 HPSVP2RWBZ050
28.10.2008 never NY 16D6490E0810810C HP3 RWBZ050 HPSVP2RWBZ050
11.11.2008 never NY 162A3BC804FB0F87 HP1 RWBP026 HPSVP2RWBP026
11.11.2008 never NY 16D648E410D27E96 HP1 RWBP032 HPSVP2RWBP032
11.11.2008 never NY 162A3BC804FB0F87 HP3 RWBP026 HPSVP2RWBP026
11.11.2008 never NY 16D648E410D27E96 HP3 RWBP032 HPSVP2RWBP032
11.11.2008 never NY 162A3BC804FB0F87 HPS RWBP026 HPSVP2RWBP026
13.11.2008 never NY 183385D71146B2C2 CZ YCZMLIM KLOM0000695A2956D9
21.11.2008 never NY 17504349151661C8 HP1 AOYQRK HPSVP2AOYQRK
21.11.2008 never NY 17504349151661C8 HP3 AOYQRK HPSVP2AOYQRK
22.12.2008 never NY 17350B9B0D3596B1 HP1 AL0NRI HPSVP2AL0NRI
22.12.2008 never NY 17350B9B0D3596B1 HP3 AL0NRI HPSVP2AL0NRI
15.01.2009 never NY 1722312103DAC39B HP1 AFJKRK HPSVP2AFJKRK
15.01.2009 never NY 1722312103DAC39B HP3 AFJKRK HPSVP2AFJKRK
12.02.2009 never NY 18261CDC1C7C693C WP YWPL4P1 DBH000012659B8E702
13.02.2009 never NY 18261CDA0A061458 WP YWPL3P1 DBH000012659B8E6F0
03.03.2009 never NY 16AEAE7712077B01 HP1 AL57RI HPSVP2AL57RI
03.03.2009 never NY 16AEAE7712077B01 HP3 AL57RI HPSVP2AL57RI
20.03.2009 never NY 16AEAED002300931 HP1 RWBW042 HPSVP2RWBW042
20.03.2009 never NY 16AEAED002300931 HP3 RWBW042 HPSVP2RWBW042
01.04.2009 never NY 173DDD930B385499 HP1 RWBM009 HPSVP2RWBM009
01.04.2009 never NY 173DDD930B385499 HP3 RWBM009 HPSVP2RWBM009
03.04.2009 never NY 164ED80A04234325 HP1 RWBP022 HPSVP2RWBP022
03.04.2009 never NY 164ED80A04234325 HP3 RWBP022 HPSVP2RWBP022
03.04.2009 never NY 164ED80A04234325 HPS RWBP022 HPSVP2RWBP022
17.04.2009 never NY 173DE13F0335E2A1 HP1 RWBW072 HPSVP1RWBW072
28.04.2009 never NY 169C834E0C52F933 HP1 AOVURK HPSVP1AOVURK
28.04.2009 never NY 173DDD951C3A3244 HP1 RWBM010 HPSVP2RWBM010
28.04.2009 never NY 173DDD951C3A3244 HP3 RWBM010 HPSVP2RWBM010
29.04.2009 never NY 16A0895D0A2DE657 HP1 AGRZRI HPSVP2AGRZRI
29.04.2009 never NY 16A0895D0A2DE657 HP3 AGRZRI HPSVP2AGRZRI
30.04.2009 never NY 16C87AFB038D1336 HP1 ABTVRI HPSVP1ABTVRI
05.05.2009 never NY 173DDDB20C77866D HP1 ABWURG HPSVP2ABWURG
05.05.2009 never NY 16A08860120192B3 HP1 AGXJRB HPSVP2AGXJRB
05.05.2009 never NY 173DDDB20C77866D HP3 ABWURG HPSVP2ABWURG
05.05.2009 never NY 16A08860120192B3 HP3 AGXJRB HPSVP2AGXJRB
28.05.2009 never NY 16D6492B0450987F HP1 AHHSRI HPSVP2AHHSRI
28.05.2009 never NY 164ED8331D29423C HP1 AN8JRI HPSVP2AN8JRI
28.05.2009 never NY 164F80B51E01630F HP1 AN8MRI HPSVP1AN8MRI
28.05.2009 never NY 16D6492B0450987F HP3 AHHSRI HPSVP2AHHSRI
28.05.2009 never NY 164ED8331D29423C HP3 AN8JRI HPSVP2AN8JRI
28.05.2009 never NY 164F80B51E01630F HP3 AN8MRI HPSVP1AN8MRI
28.05.2009 never NY 164ED8331D29423C HPS AN8JRI HPSVP2AN8JRI
29.05.2009 never NY 16C13CF90B476069 HP1 AJXLRI HPSVP1AJXLRI
17.06.2009 never NY 16F2B49809BBAC70 HP1 RWBH004 HPSVP2RWBH004
17.06.2009 never NY 16A088F81F17C61B HP1 RWBM004 HPSVP2RWBM004
17.06.2009 never NY 16F2B49809BBAC70 HP3 RWBH004 HPSVP2RWBH004
17.06.2009 never NY 16A088F81F17C61B HP3 RWBM004 HPSVP2RWBM004
25.06.2009 never NY 175DC0541A4C77C1 HP1 ZBZVFRI HPSVP2ZBZVFRI
25.06.2009 never NY 175DC0541A4C77C1 HP3 ZBZVFRI HPSVP2ZBZVFRI
26.06.2009 never NY 16A0887B0AEE9978 HP1 RWBM013 HPSVP2RWBM013
26.06.2009 never NY 16A0887B0AEE9978 HP3 RWBM013 HPSVP2RWBM013
30.06.2009 never NY 164ED8230E431387 HP1 RWBP021 HPSVP2RWBP021
30.06.2009 never NY 16D648661D340171 HP1 RWBP030 HPSVP2RWBP030
30.06.2009 never NY 173D875118DF66EF HP1 ZAENORL HPSVP1ZAENORL
30.06.2009 never NY 173D873C04888972 HP1 ZAEOJRL HPSVP1ZAEOJRL
30.06.2009 never NY 164ED8230E431387 HP3 RWBP021 HPSVP2RWBP021
30.06.2009 never NY 16D648661D340171 HP3 RWBP030 HPSVP2RWBP030
30.06.2009 never NY 164ED8230E431387 HPS RWBP021 HPSVP2RWBP021
10.03.2007 30.03.2007 NY 17EED5550BC342B6 CU CU9000 CIFS000142
11.05.2007 30.03.2007 NY 17F1785E18354C15 PC YPC0570 IVN000002457FF4E06
11.05.2007 30.03.2007 NY 17FFA31E1A371168 WF WF0300 WSSW000069
20.03.2007 31.03.2007 NY 17EBB4D70DC58958 WP YWPR2PX DBH000007557CEF456
30.03.2007 31.03.2007 NY 17FB67501F8BE779 DI DI7510 DI00000054
30.03.2007 31.03.2007 NY 1802F6590437496E DP DP0320 DP00000059
31.03.2007 31.03.2007 NY 1802C97E11ED3A7E SN SN5903 NOST000268
31.03.2007 31.03.2007 NY 175FF19F1E28FCE5 XP XP7200 A19R002479
11.05.2007 31.03.2007 NY 1802F4011F2A0A73 FI FI2100 BKUR000052
11.05.2007 31.03.2007 NY 1805C4B109B3797C MF YMFC110 MFR000009758A985D8
31.07.2007 31.03.2007 NY 1775F5C9116FA845 DI YDIU015 A06M02710553F33A22
31.07.2007 31.03.2007 NY 1775F5CA1C99D48D DI YDIU016 A06M02710553F33A2E
09.03.2007 02.04.2007 NY 17B59AD6147117C6 NF YNFBUG NBSI00005056091E27
11.05.2007 02.04.2007 NY 174C801D129F8729 NTA1P CZA0181 A02E00047752976218
12.03.2007 03.04.2007 NY 180318F308466952 WB YWB0082 WSTS00004658931E2C
02.05.2007 03.04.2007 NY 1802EFBD1392C624 CZ CZ5494 ACP0000084
02.05.2007 03.04.2007 NY 1804395F04A1F110 MF MF8930 MFR0000096
02.05.2007 03.04.2007 NY 180409331CD3960A MF MF8940 MFR0000096
02.05.2007 03.04.2007 NY 1805283C161200DE WL WL7390 WSAW000086
11.05.2007 03.04.2007 NY 1802C8E30C5EBDA2 DE DE0100 DE00000043
11.05.2007 03.04.2007 NY 1802C8E6155FC2C3 DE DE0490 DE00000043
11.05.2007 03.04.2007 NY 17B6EFAD008737F5 WB WB0820 WSTS000014
11.05.2007 03.04.2007 NY 18063D0B0189BF11 WB WB0840 WSTS000046
10.08.2007 03.04.2007 NY 1730D0270D76950C YX YXWB021 A06M02422851AF2DFE
10.08.2007 03.04.2007 NY 176D800307A25B5B YY YYWBESM A06M02510853AC4238
10.08.2007 03.04.2007 NY 1730D03119598F52 YY YYWBPRI A06M02422851AF2E54
26.03.2007 05.04.2007 NY 180430F215545EA6 DE DE0430 DE00000043
09.03.2007 06.04.2007 NY 1800BA7C017744A1 WB YWBBOPR WS8B000359587F3ED3
12.03.2007 06.04.2007 NY 17FC840307C84762 ER YERDCUR EAMR000018585BE7D9
12.03.2007 06.04.2007 NY 17F8DEF7178562B3 ER YERDGET EAMR000017583D54F9
26.03.2007 06.04.2007 NY 180430F20CFB6530 DE DE0440 DE00000043
30.03.2007 06.04.2007 NY 1805CA9616A34104 ED ED0960 ED00000047
10.04.2007 06.04.2007 NY 17FEBFE4142131A8 SN YSN111U NOST000268586EA538
25.04.2007 06.04.2007 NY 18038DFC1FC81664 WQ YWQ5601 CUBE0000675896F3F9
11.05.2007 06.04.2007 NY 1804369115B6DA5A EX EX5020 EXPN000059
11.05.2007 06.04.2007 NY 17FEBFE4045D1ECA SN YSN111I NOST000268586EA533
11.05.2007 06.04.2007 NY 180315951FD0A79D WB YWBSA2 WS8B00038058930202
10.08.2007 06.04.2007 NY 17EE08C2069C995B VV YVVZZ24 VDPS00008557E27B46
never 07.04.2007 NY 180437460D67ABCB SV SV0950 WSSV000151
never 07.04.2007 NY 18040A411B62DF86 SV SV5940 WSSV000151
never 07.04.2007 NN 18018A0306D17B38 SV SV8410 WSSV000151
09.03.2007 07.04.2007 NY 17C8C6DB1A523C6E VV YVVZZ11 VDPS00006756A9E387
10.03.2007 07.04.2007 NY 1806E41E19535516 SV SV5740 WSSV000151
10.03.2007 07.04.2007 NY 1806E42800414898 SV SV5760 WSSV000151
11.03.2007 07.04.2007 NY 1804D5561875E4E5 AT AT8500 ACS0000011
12.03.2007 07.04.2007 NY 1804CF620777EF19 WB YWBSYM WS8B00038058A17C05
13.03.2007 07.04.2007 NY 17EBB4D71AFA7A67 WP YWPR6PX DBH000007557CEF45D
11.05.2007 07.04.2007 NY 1802C6690ADAC2E2 VD VDDBM15 DSPV000040
11.05.2007 07.04.2007 NY 1803164F11652F4E WB YWBCTA WS8B00038058930814
09.03.2007 08.04.2007 NY 17EBB4D700922058 WP YWPR1PX DBH000007557CEF455
26.03.2007 08.04.2007 NY 180430EA05006D30 DE DE0050 DE00000043
11.05.2007 08.04.2007 NY 1804B3C41E9469FF WF WF0280 WSSW000069
09.03.2007 09.04.2007 NY 17E19B4B0E45AA31 RT RT5910 RFT0000016
08.05.2007 10.04.2007 NY 180615C4185D4CA5 WQ YWQ4101 CUBE00006758AC2DF1
11.05.2007 10.04.2007 NY 1804A5AB0688C130 RI RI0820 RI00000016
11.05.2007 12.04.2007 NY 17E4C69C0F263440 VV YVVZZ05 VDPS0000775794D107
11.05.2007 12.04.2007 NN 18031F110C4C2B69 YY YYFILOD BKUR00005258935183
04.11.2007 15.04.2007 NY 17D16E75009E2EC5 IT IT5002 RFT0000015
26.03.2007 16.04.2007 NY 1805C0D90EDEB490 DE DE0820 DE00000043
11.05.2007 16.04.2007 NY 17FEAFB209BF994A TN TN0530 OTXO000063
11.05.2007 16.04.2007 AY 1801FBDC0CEF763B WI YWINS05 WS8I0002415889C6B3
never 17.04.2007 NN 180435DB1E0581B4 SV SV0250 WSSV000151
14.03.2007 17.04.2007 NY 1804FD7A1C3AEF0F NO NO0970 NO00000031
26.03.2007 17.04.2007 NY 17E0B2760D79482E YY YYNLCPB MOD000002157729A19
02.04.2007 17.04.2007 NY 1806DFB013F87BBD WF WF5410 WSSW000069
11.05.2007 17.04.2007 NY 180435D91235201F CZ CZ5150 KLOM000057
11.05.2007 17.04.2007 NY 1802EEA7090C9C93 CZ CZ5280 KLOM000057
11.05.2007 17.04.2007 NY 1802F33505B93D63 CZ CZ6400 GSER000152
11.05.2007 17.04.2007 NY 1805C4B1046B91AD CZ CZ6500 GSER000152
11.05.2007 17.04.2007 NY 180644230405DD09 CZ YCZMLIM KLOM00005758ADB2E7
11.05.2007 17.04.2007 NY 180438D91C64FFB9 EC EC5130 KLOM000057
11.05.2007 17.04.2007 NY 180430D8090858D5 FZ FZ0820 FZ00000014
11.05.2007 17.04.2007 NY 180191140E0664DA NI YNI0161 IPC0000175588646FA
11.05.2007 17.04.2007 NY 17DFBFE20F8F2023 NI YNIYTLG IPC0000141576AA733
11.05.2007 17.04.2007 NY 17DFBFE20F8F2023 NI01 YNIYTLG IPC0000141576AA733
11.05.2007 17.04.2007 NY 17DFBFE20F8F2023 NI02 YNIYTLG IPC0000141576AA733
11.05.2007 17.04.2007 NY 1804A5D60BEAF7FE NO NO0960 NO00000031
11.05.2007 17.04.2007 NY 180430DD1856D211 TP TP0800 TP00000016
11.05.2007 17.04.2007 NY 18031B4E0A0BE859 WB WB5280 WSTS000046
11.05.2007 17.04.2007 NY 17C1906501B32E11 WB WB7560 WSTS000034
11.05.2007 17.04.2007 NY 17B4D2BB1EBE88E4 WB WB7561 WSTS000019
11.05.2007 17.04.2007 NY 18052CEA0DA0D14B WQ YWQBERI CUBE00006758A48C9B
never 18.04.2007 NY 1801AB8000E4FC2A PC PC7040 IVN0000028
15.03.2007 18.04.2007 NY 1806432F0022BD35 SN SN5004 NOST000268
15.03.2007 18.04.2007 NY 18020F1F1E3890CD SN SN5901 NOST000268
16.03.2007 18.04.2007 NY 180527A0006F0662 UU UU5170 RS20000066
21.03.2007 18.04.2007 NY 180552661A58394D ER ER5080 EAMR000022
21.03.2007 18.04.2007 NY 1807F9691CD75BD6 ER YERBER EAMR000022
26.03.2007 18.04.2007 NY 180430F207D9CB91 DE DE0420 DE00000043
26.03.2007 18.04.2007 NY 180430F40E919E8E DE DE0810 DE00000043
30.03.2007 18.04.2007 NY 180527DD1FBDE8DC GM GM0850 GM00000113
27.04.2007 18.04.2007 NY 1802C78016235575 SV SV5600 WSSV000151
28.04.2007 18.04.2007 NY 1806E4290CD5B0EC SV SV5790 WSSV000151
02.05.2007 18.04.2007 NY 18063C5E10898939 TN TN7080 OTXO000060
09.05.2007 18.04.2007 NY 17FEBFEB005C1663 SN YSN201I NOST000268586EA569
10.05.2007 18.04.2007 NY 18027D7C14A3884A AP YAPUTGK APEN000039588E05DF
10.05.2007 18.04.2007 NY 180437F41774EF8E CZ CZ6300 KLOM000057
10.05.2007 18.04.2007 NY 18043101039A2862 DE DE5600 DE00000043
10.05.2007 18.04.2007 NY 17FF7F9F045A9FA2 DE DE7120 DE00000064
10.05.2007 18.04.2007 NY 17C2CDA903AEEDFD EC EC7204 DLGR000022
10.05.2007 18.04.2007 NY 17C2CDD40B5308A3 EC EC7206 DLGR000022
10.05.2007 18.04.2007 AY 17EEA6BE0CB65965 ED YED5203 ED0000004057E7A890
10.05.2007 18.04.2007 NY 1802C85C1F2E9631 MF MF7010 MFR0000096
10.05.2007 18.04.2007 NY 180661EF0208A11D PC01 PC5060 IVN0000028
10.05.2007 18.04.2007 NY 180661EF0208A11D PC02 PC5060 IVN0000028
10.05.2007 18.04.2007 NY 180661EF0208A11D PC03 PC5060 IVN0000028
10.05.2007 18.04.2007 NY 180661EF0208A11D PC04 PC5060 IVN0000028
10.05.2007 18.04.2007 NY 180661EF0208A11D PC05 PC5060 IVN0000028
10.05.2007 18.04.2007 NY 180661EF0208A11D PC06 PC5060 IVN0000028
10.05.2007 18.04.2007 NY 180661EF0208A11D PC07 PC5060 IVN0000028
10.05.2007 18.04.2007 NY 18063C1808A5D534 TN TN5016 OTXO000060
10.05.2007 18.04.2007 NY 17F6B956103BB5E8 VV YVVZZ19 VDPS000090582B5250
11.05.2007 18.04.2007 NY 17ECA24500EBBB18 AU YAU190D AURA00005057D6BC08
11.05.2007 18.04.2007 NY 17ECA2441E732C65 AU YAU190I AURA00005057D6BC0B
11.05.2007 18.04.2007 NY 17ECA2461B9D32E9 AU YAU191D AURA00005057D6BC0E
11.05.2007 18.04.2007 NY 17ECA2471C332E9A AU YAU191I AURA00005057D6BC20
11.05.2007 18.04.2007 NY 17B728F71778E3D9 CK YCKT025 DCA0000026
11.05.2007 18.04.2007 NY 180438390F07B769 CZ CZ5190 LOMN000028
11.05.2007 18.04.2007 NY 180436F401135C57 CZ CZ8980 KLOM000057
11.05.2007 18.04.2007 NY 1802C8E40D246A84 DE DE0400 DE00000043
11.05.2007 18.04.2007 NY 180430F51C57199F DE DE0830 DE00000043
11.05.2007 18.04.2007 NY 17D3C42E0C130034 DE DE0860 DE00000028
11.05.2007 18.04.2007 NY 1802F6F208AAEE2B DP DP0920 DP00000059
11.05.2007 18.04.2007 NY 180785CC091F6A55 EX EX5030 EXPN000059
11.05.2007 18.04.2007 NY 180436B1092FE606 EX EX6010 EXPN000059
11.05.2007 18.04.2007 NY 180436AA12896C3A EX EX6020 EXPN000059
11.05.2007 18.04.2007 NN 1802F45412A8FB77 FI FI5200 BKUR000052
11.05.2007 18.04.2007 NY 1804394B1591B5C5 MF MF7230 MFR0000096
11.05.2007 18.04.2007 NY 1804394F058A57E0 MF MF7320 MFR0000096
11.05.2007 18.04.2007 NY 18043950020A39B2 MF MF7330 MFR0000096
11.05.2007 18.04.2007 NY 17EC9ECD040075DA MF MF7550 MFR0000086
11.05.2007 18.04.2007 NY 17EC9ED408C8F881 MF MF7570 MFR0000086
11.05.2007 18.04.2007 NY 17CCDAE2112DCA75 MF MF7901 MFR0000065
11.05.2007 18.04.2007 NY 1804395B017BF843 MF MF8620 MFR0000096
11.05.2007 18.04.2007 NY 180666A6195DEF59 NI YNICS01 IPC000017558AED477
11.05.2007 18.04.2007 NY 1801910010BC740C NI YNILBPL IPC000017558864653
11.05.2007 18.04.2007 NY 180279C2069FFE55 NL NL7310 BALR000059
11.05.2007 18.04.2007 NY 1806192806FD9A76 NL NL7810 BALR000059
11.05.2007 18.04.2007 NY 17FA1F9B14D3A50E NTA1P CZA0199 A02E0005675847D69B
11.05.2007 18.04.2007 NY 180523C3021C394B PC01 YPC0830 IVN000002858A43FD4
11.05.2007 18.04.2007 NY 180523C3021C394B PC02 YPC0830 IVN000002858A43FD4
11.05.2007 18.04.2007 NY 180523C3021C394B PC03 YPC0830 IVN000002858A43FD4
11.05.2007 18.04.2007 NY 180523C3021C394B PC04 YPC0830 IVN000002858A43FD4
11.05.2007 18.04.2007 NY 180523C3021C394B PC05 YPC0830 IVN000002858A43FD4
11.05.2007 18.04.2007 NY 180523C3021C394B PC06 YPC0830 IVN000002858A43FD4
11.05.2007 18.04.2007 NY 180523C3021C394B PC07 YPC0830 IVN000002858A43FD4
11.05.2007 18.04.2007 NY 18066B1F1389EC58 SN YSND008 NOST00026858AEF9FA
11.05.2007 18.04.2007 NY 18090CFE0AB40619 SV SV5740 WSSV000207
11.05.2007 18.04.2007 NY 18090D010DA5D0D1 SV SV5760 WSSV000207
11.05.2007 18.04.2007 NY 1806E42702F137B4 SV SV5780 WSSV000151
11.05.2007 18.04.2007 NY 17F21C560E49E035 TN YTN0021 OTXO0000585804AD7B
11.05.2007 18.04.2007 NY 18031B3518A70288 WB WB0520 WSTS000046
11.05.2007 18.04.2007 NY 18031B390AF22C2A WB WB0530 WSTS000046
11.05.2007 18.04.2007 NY 1804D66E09600D74 WB WB5260 WSTS000046
11.05.2007 18.04.2007 NY 18031B64037FC1E6 WB WB5270 WSTS000046
11.05.2007 18.04.2007 NY 18031B611CB11690 WB WB5290 WSTS000046
11.05.2007 18.04.2007 NY 180708F21550CB34 WB WB5570 WS8B000362
11.05.2007 18.04.2007 NY 177E95F512C8053D WB WB7690 A06M025453
11.05.2007 18.04.2007 NY 17E657C81CE6E037 WC WC8120 OTXO000054
11.05.2007 18.04.2007 NY 18063C2C12B355CA WC WC8410 OTXO000060
11.05.2007 18.04.2007 NY 1803178B0D3FBDD7 WF YWF64CA WSSW00006958931268
11.05.2007 18.04.2007 AY 1801FBE205570271 WI YWINS07 WS8I0002415889C6E7
11.05.2007 18.04.2007 NY 18061B721944490E WQ WQ6010 CUBE000067
12.05.2007 18.04.2007 NY 1802ECC90F8821AF CD CD2590 UPDS000037
22.03.2007 19.04.2007 NY 1804D5EF0CE1C48F YX YXA171C TOFF00008858A1B300
05.04.2007 19.04.2007 NY 1807038F02E95D9A WB YWBSA4 WS8B00038058B3F8A5
11.05.2007 19.04.2007 NY 1802CEB1139525E8 EC YECCRAC SYNC0000205890AF4C
11.05.2007 19.04.2007 NY 1802A70C083C7DB1 ER YERDINS EAMR000022588F62B1
11.05.2007 19.04.2007 NY 18040B790040F871 LC LC0511I TFBM000029589B10A0
11.05.2007 19.04.2007 NY 17EF4B530E948846 LC YLCTF02 TFBM00002857ED0D2F
11.05.2007 19.04.2007 NY 17EEFD800CE6AAF5 LC YLCTF03 TFBM00002857EA8045
11.05.2007 19.04.2007 NY 1802C2FA1F902DA2 PC01 YPC0520 IVN000002858904D09
11.05.2007 19.04.2007 NY 1802C2FA1F902DA2 PC02 YPC0520 IVN000002858904D09
11.05.2007 19.04.2007 NY 1802C2FA1F902DA2 PC03 YPC0520 IVN000002858904D09
11.05.2007 19.04.2007 NY 1802C2FA1F902DA2 PC04 YPC0520 IVN000002858904D09
11.05.2007 19.04.2007 NY 1802C2FA1F902DA2 PC05 YPC0520 IVN000002858904D09
11.05.2007 19.04.2007 NY 1802C2FA1F902DA2 PC06 YPC0520 IVN000002858904D09
11.05.2007 19.04.2007 NY 1802C2FA1F902DA2 PC07 YPC0520 IVN000002858904D09
11.05.2007 19.04.2007 NY 17C55303070C8A0D TR YTRHISP AITR000012568CED33
11.05.2007 19.04.2007 NY 18063D040A63D155 WB WB0630 WSTS000046
11.05.2007 19.04.2007 NY 18063D050822AEDE WB WB0680 WSTS000046
11.05.2007 19.04.2007 NY 18031B4507712C96 WB WB0940 WSTS000046
11.05.2007 19.04.2007 NY 18031B4413F19B92 WB WB0950 WSTS000046
11.05.2007 19.04.2007 NY 18063C2E1FBE5252 WB WB1080 TOFF000088
11.05.2007 19.04.2007 NY 17F21E040606E9F2 WB YWB530 WS8B000320
11.05.2007 19.04.2007 NY 180318F21D2A9178 WB YWBEBSM WSTS00004658931E1A
11.05.2007 19.04.2007 NY 17ECA1220B217446 WB YWBMAS WS8B00031857D6B290
11.05.2007 19.04.2007 NY 17F21CBC110AF1E9 WB YWBSUM WS8B0003185804B0D3
11.05.2007 19.04.2007 NY 1803163913531F47 WB YWBWRK WS8B0003805893075A
11.05.2007 19.04.2007 AY 1801FBDB141B4DD1 WI YWINS03 WS8I0002415889C6AE
16.03.2007 20.04.2007 NY 18061B6D09DBF6CB WQ WQ5950 CUBE000067
26.03.2007 20.04.2007 NY 1805C0D902D50A6A DE DE0030 DE00000043
26.03.2007 20.04.2007 NY 180430EA12DC4D65 DE DE0090 DE00000043
02.04.2007 20.04.2007 NY 1806DFC10F42CCE3 WF YWFSWC WSSW000069
11.05.2007 20.04.2007 NY 17ECA23A082F19C6 AU YAU180D AURA00005057D6BBB4
11.05.2007 20.04.2007 NY 17ECA23B145216C9 AU YAU180I AURA00005057D6BBBE
11.05.2007 20.04.2007 NY 17ECA23E09A5EBC1 AU YAU181D AURA00005057D6BBD6
11.05.2007 20.04.2007 NY 17ECA23E1E25B2EE AU YAU181I AURA00005057D6BBDA
11.05.2007 20.04.2007 NY 17ECA23F077FC922 AU YAU181S AURA00005057D6BBDE
11.05.2007 20.04.2007 NY 1802C8EE1F02D5BC DE DE0060 DE00000043
11.05.2007 20.04.2007 NY 180430F204FD1AB4 DE DE0410 DE00000043
11.05.2007 20.04.2007 NY 18072F571E3CA8C9 DE DE0940 DE00000043
11.05.2007 20.04.2007 NY 18015E540200D86F DE YDE0021 DE0000004358849D3C
11.05.2007 20.04.2007 NY 1802A9731B21AA4B ER YERDUPD EAMR000022588F76E9
11.05.2007 20.04.2007 NY 1806E0C001713BCA MF YMFC113 MFR000009758B2D4AC
11.05.2007 20.04.2007 NY 1804A5AE1C166F9F RI RI0810 RI00000016
11.05.2007 20.04.2007 NY 17FEBFE306118A91 SN YSN110I NOST000268586EA52B
11.05.2007 20.04.2007 NY 17FEBFE404E62B68 SN YSN110U NOST000268586EA531
11.05.2007 20.04.2007 NY 17FEBFD20A3F8B5A SN YSND003 NOST000268586EA49A
11.05.2007 20.04.2007 NY 18081F800CFE1F11 TN YTN0100 OTXO00006058BD4694
11.05.2007 20.04.2007 NY 1802C7421C862CE2 TR TR0810 AITR000031
11.05.2007 20.04.2007 NY 17B4F8970461F9BA TR YTREDBM AITR0000155603CD16
11.05.2007 20.04.2007 NY 17D38554150F85FB VV YVVZZ03 VDPS00007357041232
11.05.2007 20.04.2007 NN 1803E705175E5CF5 WB YWBMOV WS8B0003805899DEB4
11.05.2007 20.04.2007 AY 1801FBDB0D9F9709 WI YWINS02 WS8I0002415889C6AC
11.05.2007 20.04.2007 AY 1801FBE51C423FE4 WI YWINS08 WS8I0002415889C6E9
11.05.2007 21.04.2007 NY 18063CFF01BDDFE7 ER YERDCUR EAMR00002258AD7708
11.05.2007 21.04.2007 NY 1805C85006D53059 ER YERDGET EAMR00002258A9A437
11.05.2007 21.04.2007 NY 180435C80D6714B8 VP VP5310 VIP0000022
11.05.2007 21.04.2007 NY 180660B80CB6185A WF YWFCB02 WSSW00006958AEA2AC
11.05.2007 21.04.2007 NY 18052B911F28B386 WF YWFM537 WSSW00006958A48155
11.05.2007 22.04.2007 NY 17ECA23C00535FE4 AU YAU180S AURA00005057D6BBC2
11.05.2007 22.04.2007 NY 17ECA24502F699F4 AU YAU190S AURA00005057D6BC0C
11.05.2007 22.04.2007 NY 17ECA2471747FF5F AU YAU191S AURA00005057D6BC24
11.05.2007 24.04.2007 AY 1801FBE70E71576C WI YWINS09 WS8I0002415889C707
11.05.2007 27.04.2007 NY 17E32CC10A0EDFD4 OE YOE0610 OE00000010578762EB
11.05.2007 27.04.2007 AY 1801FBDB042EEB8B WI YWINS01 WS8I0002415889C6AA
11.05.2007 27.04.2007 AY 1801FBE11D075D60 WI YWINS06 WS8I0002415889C6B8
11.05.2007 27.04.2007 AY 1801FBE9060B1956 WI YWINS10 WS8I0002415889C714
11.05.2007 29.04.2007 NY 17EDB6E91BA0581C TN YTNBOPH OTXO00005857DFCC97
11.05.2007 29.04.2007 NY 17F15CB5038EB27A TN YTNW170 OTXO00005857FE65F4
11.05.2007 29.04.2007 AY 1801FBDB1F85C719 WI YWINS04 WS8I0002415889C6B1
19.04.2007 30.04.2007 NY 17EDB6E21CDC612C TN YTNOTF OTXO00005857DFCC76
never 05.05.2007 NY 18009915172ACA4B VV YVVZZ25 VDPS000099587E2698
never 05.05.2007 NY 180095250E1F1955 VV YVVZZNR VDPS000099587E0594
11.05.2007 05.05.2007 NY 18072A2A1A022FFA WC WC5010 OTXO000060
11.05.2007 05.05.2007 NY 18072A2C1E82348A WC WC8401 OTXO000060
04.08.2007 05.05.2007 NY 177E95C00FE6F6C0 WB WB7030 A06M025453
04.08.2007 05.05.2007 NY 17D372DC0D51D04A WB WB8720 WSTS000035
02.08.2007 06.05.2007 NY 175FCE5B026E1669 KS YKSFTXT A14S002412533962A5CICS
11.05.2007 07.05.2007 NY 1804A5A1054035F8 ED ED0950 ED00000047
10.05.2007 08.05.2007 NY 1802C8BE0D044217 DE DE5690 DE00000043
05.02.2008 08.05.2007 NY 180C5AFF04674E40 MF MF8950 MFR0000110
10.08.2007 11.05.2007 NY 181052B0019A4DF3 DE DE0430 DE00000061
10.08.2007 11.05.2007 NY 181052B01FA15BBC DE DE0440 DE00000061
10.08.2007 11.05.2007 NY 18015E5309A69D67 DE YDELSTO DE0000004358849D33
10.08.2007 11.05.2007 NY 181051621E31615B MF YMFC110 MFR0000111590212E8
10.08.2007 01.06.2007 NY 18098E231BC93EBF LC LC0511I TFBM00002658C94A27
09.11.2007 01.06.2007 NY 180C843E180653C8 LC YLCTF02 TFBM00002658E22FB0
09.11.2007 01.06.2007 NY 18098E330F7BE27E LC YLCTF03 TFBM00002658C94AB4
10.08.2007 02.06.2007 NY 180C66741D294472 WF WF0280 WSSW000085
10.08.2007 02.06.2007 NY 180C667A1D3AEE28 WF WF0300 WSSW000085
27.06.2007 05.06.2007 NY 180BBC5A03DC0DA2 WB YWBSA4 WS8B00040958DBA2D3
01.08.2007 05.06.2007 NY 17EDE1540DD0C99D DI DI5200 DI00000047
12.05.2007 06.06.2007 NY 17E6570C0D791019 TN TN5030 OTXO000054
08.06.2007 06.06.2007 NY 18090CD11D32C6BA SV SV5940 WSSV000207
10.08.2007 06.06.2007 NY 17FF3A21106BA559 WP YWPR3PX DBH00000835872A69A
11.05.2007 07.06.2007 NY 17ECA08D03882188 WB YWBBODA WS8B00031857D6ADA9
11.05.2007 07.06.2007 NY 180315C2111911C7 WB YWBBOPR WS8B00038058930376
11.05.2007 07.06.2007 NY 180315740B349F48 WB YWBIO WS8B000380589300E4
11.05.2007 07.06.2007 NY 17B3DB0F1F6E5295 WN YWNOLOG FOND00002455FA71E6
12.05.2007 08.06.2007 NY 18031BEA0D8C1911 RT RT5910 TABS000134
02.06.2007 08.06.2007 NY 181051A216390E05 CZ CZ5494 ACP0000098
10.08.2007 10.06.2007 NY 180991520F243939 WB YWBSA2 WS8B00040958C964D3
10.08.2007 12.06.2007 NY 181052B901F834DD DE DE0100 DE00000061
10.08.2007 12.06.2007 NY 18031B3A00453D27 WB WB0580 WSTS000046
14.05.2007 13.06.2007 NY 181117CA19B176CF SV SV0280 WSSV000188
17.05.2007 13.06.2007 NY 18104EBD04339C10 AP YAPUTGK APEN0000405901FCB8
08.06.2007 13.06.2007 NY 18111BB006506198 WB YWB530 WS8B000411
08.08.2007 13.06.2007 NY 181028831F575312 WQ YWQ5601 CUBE0000815900BC28
08.06.2007 14.06.2007 NY 181167BD08F8BE8A SV SV5740 WSSV000188
08.06.2007 14.06.2007 NY 181167D119F6601E SV SV5760 WSSV000188
08.06.2007 14.06.2007 NY 18104EC01CD11CB0 WB WB0520 WSTS000051
08.06.2007 14.06.2007 NY 18104EC006E59145 WB WB0530 WSTS000051
08.06.2007 14.06.2007 NY 18031B401E57AFB5 WB WB0600 WSTS000046
08.06.2007 14.06.2007 NY 18104EB6186FD50D WB WB0630 WSTS000051
08.06.2007 14.06.2007 NY 18104EB713C20790 WB WB0680 WSTS000051
08.06.2007 14.06.2007 NY 18104EC90D674E44 WB WB0940 WSTS000051
08.06.2007 14.06.2007 NY 18104EBC1A502B0A WB WB0950 WSTS000051
16.05.2007 18.06.2007 NY 181163D20DF8717D WQ WQ5950 CUBE000081
07.06.2007 19.06.2007 NY 18111B5904BB0BDA ER YERPRI EAMR000028
08.06.2007 19.06.2007 NY 1812FD400DA6B1F5 SV SV0280 WSSV000225
24.05.2007 20.06.2007 NY 1811132F09383B22 TN TN7080 OTXO000066
07.06.2007 20.06.2007 NY 17A899A00007E47D CZ CZ7030 APEN000014
07.06.2007 20.06.2007 NY 18104E6103B08172 ER ER5080 EAMR000028
07.06.2007 20.06.2007 NY 180FD3551D55D036 ER YERBER EAMR000028
08.06.2007 20.06.2007 NY 180C5A551ADF4A41 MF MF8620 MFR0000110
08.06.2007 20.06.2007 NY 180EE0950EB83E0A VV YVVZZ28 VDPS00010858F5FD2B
08.06.2007 20.06.2007 NY 18111B6715B5819C WB WB5570 WS8B000411
08.06.2007 20.06.2007 NY 18104EFA0D57BBEC WC WC8410 OTXO000066
09.08.2007 20.06.2007 NY 177D37590992CE08 FI YFI0110 A06M02733354301877
08.06.2007 22.06.2007 NY 1811639F1D102779 DE DE0030 DE00000061
08.06.2007 22.06.2007 NY 181052CB0F5FACDF DE DE0420 DE00000061
08.06.2007 22.06.2007 NY 180FFD741B9FE6EF NI YNILBPL IPC000019258FF52EF
23.05.2007 23.06.2007 NY 18134B330222F350 WQ WQ5950 CUBE000100
08.06.2007 23.06.2007 NY 1800DF8F18D4B675 BP YBPMUT BPST000045588075D1
08.06.2007 29.06.2007 NY 180A78E3046E08F6 CZ YCZMLIM KLOM00006158D0FB62
08.06.2007 29.06.2007 NY 181052C5090F1E5B DE DE0810 DE00000061
08.06.2007 29.06.2007 NY 1811639F1915DC41 DE DE0820 DE00000061
08.06.2007 29.06.2007 NY 181163C717B744FC GM GM0850 GM00000132
08.06.2007 29.06.2007 NY 17FC0CB31216ACA1 VV YVVZZ04 VDPS0001035857FF0A
08.06.2007 29.06.2007 NY 180FCC600B7A0A2C WB YWBBOPR WS8B00040958FDB730
08.06.2007 29.06.2007 NY 1811DF49016C2500 WF WF5410 WSSW000085
08.06.2007 30.06.2007 NY 18104EED145B9FE5 WC WC5010 OTXO000066
08.06.2007 30.06.2007 NY 18104EFF187EAA32 WC WC8120 OTXO000066
08.06.2007 30.06.2007 NY 18104EEF1D7198E1 WC WC8401 OTXO000066
04.08.2007 30.06.2007 NY 18031B550608B4EE WB WB5120 WSTS000046
04.08.2007 30.06.2007 NY 17E6582300ED4DF9 WB WB7020 WSTS000039
04.08.2007 30.06.2007 NY 177E95DB1644FF30 WB WB7360 A06M025453
08.06.2007 01.07.2007 NY 180E17360852A7CA WB YWBEBSM WSTS00005158EF63FE
30.05.2007 02.07.2007 NY 181463E219509849 WQ WQ5950 CUBE000101
08.06.2007 02.07.2007 NY 17F79CF810A7E370 TN YTNUPD OTXO0000615832C7DD
10.08.2007 02.07.2007 NY 181052D20CD33C51 DE DE0050 DE00000061
08.06.2007 03.07.2007 NY 181579F50ABB256D WQ WQ5950 CUBE000103
08.06.2007 05.07.2007 NY 18104ECF12EF2AA4 WB WB5280 WSTS000051
10.08.2007 05.07.2007 NY 181052BB1CFC5B79 DE DE0490 DE00000061
10.08.2007 05.07.2007 NY 178C25361558E594 KS YKSISOC CSED00000554AD468E
09.06.2007 06.07.2007 NY 1814DA68156F3251 TN TN7080 OTXO000076
09.06.2007 06.07.2007 NY 1815CC1D0ACA3EBE WC WC5010 OTXO000073
10.08.2007 06.07.2007 NY 1809135E1ECC1829 SV SV0950 WSSV000208
10.08.2007 06.07.2007 NY 180C621E0277D9C2 SV SV5780 WSSV000188
10.08.2007 06.07.2007 NY 1811E3D903AEE322 SV SV5790 WSSV000188
10.08.2007 06.07.2007 NY 1812F22F14165F0C SV SV5940 WSSV000195
10.08.2007 07.07.2007 NY 17FC5F2D1A76F396 VD YVD0721 DSPV000040585AB2F8
11.08.2007 07.07.2007 NY 1809B5BF07D12AC6 VD VDDBM15 DSPV000041
10.08.2007 08.07.2007 NY 180B663101E0FC48 TN YTN0021 OTXO00006658D8D017
10.08.2007 08.07.2007 NY 1809603A0BEFEB25 TN YTNBOPH OTXO00006658C7C906
10.08.2007 08.07.2007 NY 180618DA0815EE09 TN YTNSICH OTXO00006058AC46FF
10.08.2007 08.07.2007 NY 17FBE2B60642ED14 TN YTNW100 OTXO00006358569ED9
10.08.2007 08.07.2007 NY 180B99CD097AF661 TN YTNW170 OTXO00006658DA8107
10.08.2007 08.07.2007 NY 18148BF51CE92690 VV YVVZZ04 VDPS00011259258C31
10.08.2007 08.07.2007 NY 18104ED9037C0A73 WB WB0980 TOFF000099
10.08.2007 08.07.2007 NY 18104ED4125908F5 WB WB0990 TOFF000099
11.08.2007 08.07.2007 NY 180AC4871B3BFD99 VV YVVZZ05 VDPS00010858D375E2
11.08.2007 08.07.2007 NY 18031C7C0C9537CE VV YVVZZ3R VDPS00009958933BE0
05.08.2007 09.07.2007 NY 17FF2EF11F05701F VD VDUTI41 DSPV000040
10.08.2007 09.07.2007 NY 17ED16951F6126F5 EQ YEQKDGP GSER00010957DA8BC7
10.08.2007 09.07.2007 NN 1815CCAA138ADEAC TN YTNUPD OTXO00007359300B05
10.08.2007 09.07.2007 NY 1800E6191D0FC84E VV YVVZZ11 VDPS0000995880ACAB
10.08.2007 09.07.2007 NY 180314D608B4A6D9 WB YWBDGP WS8B0003805892FBB2
10.08.2007 09.07.2007 NY 180314DA0AABE2EE WB YWBDGP2 WS8B0003805892FBD7
10.08.2007 10.07.2007 NY 180A5AD40949C332 VV YVVZZ03 VDPS00010858CFFF3B
10.08.2007 10.07.2007 NY 1800E622084051D1 VV YVVZZ15 VDPS0000995880ACF1
10.08.2007 10.07.2007 NY 18031C751F3F8679 VV YVVZZ1R VDPS00009958933B9C
10.08.2007 10.07.2007 AY 180C5F6A16EF5B6E WI YWINS09 WS8I00026558E0FABE
11.08.2007 10.07.2007 NY 180AAC5C0209D06B YX YXA171C TOFF00010858D2AB30
03.08.2007 11.07.2007 NY 181A2FFE00649D5A ER YERPRI EAMR000042
10.08.2007 11.07.2007 NY 180FFE061346227D CD CD2590 UPDS000043
10.08.2007 11.07.2007 NY 18116381121C24EB CZ CZ5150 KLOM000061
10.08.2007 11.07.2007 NY 1810504417885C86 CZ CZ5280 KLOM000061
10.08.2007 11.07.2007 NY 1810511C0834D82C CZ CZ6400 GSER000162
10.08.2007 11.07.2007 NY 18105125038E7432 CZ CZ6500 GSER000162
10.08.2007 11.07.2007 NY 17E88CAE1C1C2F51 CZ YCZJ323 GSER00010957B4790C
10.08.2007 11.07.2007 NY 17F136DA044949ED CZ YCZJ431 GSER00012257FD2866
10.08.2007 11.07.2007 NY 17B5CD5D07BD94DC CZ YCZT235 GSER000027560AC600
10.08.2007 11.07.2007 NY 17D2417F030A32B6 CZ YCZT385 GSER00004756F975B2
10.08.2007 11.07.2007 NY 17B5CC800C26CAFC CZ YCZT397 GSER000027560ABEC3
10.08.2007 11.07.2007 NY 18169048009D5496 DE DE0030 DE00000063
10.08.2007 11.07.2007 NY 181052C21779B1FE DE DE0400 DE00000061
10.08.2007 11.07.2007 NY 1816714404901F14 DE DE0810 DE00000063
10.08.2007 11.07.2007 NY 181052C1121CDA6F DE DE0860 DE00000061
10.08.2007 11.07.2007 NY 181052C00E02499E DE DE0940 DE00000061
10.08.2007 11.07.2007 NY 180B6BEC02BE25F8 DE YDE0021 DE0000006158D9002C
10.08.2007 11.07.2007 NY 180BEBC21B6D68D2 EC EC5130 KLOM000061
10.08.2007 11.07.2007 NY 1810C2C401716D32 ED ED0950 ED00000052
10.08.2007 11.07.2007 NY 181671C205733A31 GM GM0850 GM00000144
10.08.2007 11.07.2007 NY 17B5D1DA1248013A KR YKRT511 KAUF000015560AEBA9
10.08.2007 11.07.2007 NY 177D565B0BD5E0D5 KX YKXO002 CRMA00397654311C87
10.08.2007 11.07.2007 NY 1810C27A02661734 RI RI0810 RI00000019
10.08.2007 11.07.2007 NY 17C89DC91C3BB369 RM YRMORGP PARS00004956A88B07
10.08.2007 11.07.2007 NY 1819E9931AB47AFA TN TN0530 WS8B000468
10.08.2007 11.07.2007 NY 180F0FD312B47284 TN YTNOTF OTXO00007158F7898E
10.08.2007 11.07.2007 NY 180A79E40309AEE1 TR YTRHISP AITR00003558D103CA
10.08.2007 11.07.2007 NY 178CE81217F4E0EA VD VDINI01 DSPV000001
10.08.2007 11.07.2007 NY 17FC5F2E1C3D2D8C VD YVD0722 DSPV000040585AB301
10.08.2007 11.07.2007 NY 180417D413BD2DB0 VV YVVZZ10 VDPS000099589B784A
10.08.2007 11.07.2007 NY 1804122B1E178FF9 VV YVVZZ12 VDPS000099589B48CE
10.08.2007 11.07.2007 NY 179BB5890764E3F1 VW YVWB641 WSTS000003552FE2D3
10.08.2007 11.07.2007 NY 1819E998093144B4 WB WB0530 WS8B000468
10.08.2007 11.07.2007 NY 18166D1E1A447645 WB WB0600 WSTS000056
10.08.2007 11.07.2007 NY 1819E99F1E49A95D WB WB0630 WS8B000468
10.08.2007 11.07.2007 NY 18031B540F96DB33 WB WB0660 WSTS000046
10.08.2007 11.07.2007 NY 1819E9AB19248670 WB WB0680 WS8B000468
10.08.2007 11.07.2007 NY 18031B3E19486761 WB WB0830 WSTS000046
10.08.2007 11.07.2007 NY 1819E9A90F687615 WB WB0940 WS8B000468
10.08.2007 11.07.2007 NY 18031B5F18E00183 WB WB1340 WSTS000046
10.08.2007 11.07.2007 NY 1819E9DB050D93E2 WB WB5280 WS8B000468
10.08.2007 11.07.2007 NY 17D372DD042630B7 WB WB7040 WSTS000035
10.08.2007 11.07.2007 NY 177E95D116F98055 WB WB7290 A06M025453
10.08.2007 11.07.2007 NY 17D372DE14DB5C15 WB WB7370 WSTS000035
10.08.2007 11.07.2007 NY 17D372E304B63DA2 WB WB7390 WSTS000035
10.08.2007 11.07.2007 NY 17BF5DCF0D4AB25A WB WB7520 WSTS000023
10.08.2007 11.07.2007 NY 178CF04C070E79F4 WB WB7540 WSTS000001
10.08.2007 11.07.2007 NY 18104ED41238DDBD WB WB7560 WSTS000051
10.08.2007 11.07.2007 NY 18104ED21C9722AD WB WB7561 WSTS000051
10.08.2007 11.07.2007 NY 177E95F117458ED9 WB WB7650 A06M025453
10.08.2007 11.07.2007 NY 17D372DC12202830 WB WB7871 WSTS000035
10.08.2007 11.07.2007 NY 177E96191AA7B6A1 WB WB7880 A06M025453
10.08.2007 11.07.2007 NY 1815CC8806CB9A1F WB YWB530 WS8B000441
10.08.2007 11.07.2007 NY 17E516BD07F41266 WB YWB551 WS8B00028657977132
10.08.2007 11.07.2007 NY 180A2785079897FA WB YWBBODA WS8B00040958CE50CE
10.08.2007 11.07.2007 NY 1819E244056C3EAA WB YWBBOPR WS8B000468595251AE
10.08.2007 11.07.2007 NY 1819BB8A110EB8EB WB YWBEBSM WS8B00046859510C08
10.08.2007 11.07.2007 NY 18093A250578AC7C WB YWBIO WS8B00040958C6898F
10.08.2007 11.07.2007 NY 17EDDBA5064280AA WB YWBITV TOFF00007657E100DB
10.08.2007 11.07.2007 NY 181646700BE59260 WF WF5410 WSSW000090
10.08.2007 11.07.2007 NY 180CAFFF08A04C4A WF YWFCB02 WSSW00008558E39EB2
10.08.2007 11.07.2007 NY 180CAFFF1DEE1D8E WF YWFM537 WSSW00008558E39EB7
10.08.2007 11.07.2007 NY 1811DFA102DD4450 WF YWFSWC WSSW000085
10.08.2007 11.07.2007 AY 180C5F3E18D106B6 WI YWINS01 WS8I00026558E0F951
10.08.2007 11.07.2007 AY 180C5F4503E746ED WI YWINS02 WS8I00026558E0F987
10.08.2007 11.07.2007 AY 180C5F4A09013A95 WI YWINS03 WS8I00026558E0F9B1
10.08.2007 11.07.2007 AY 180C5F4D11B59A92 WI YWINS04 WS8I00026558E0F9CC
10.08.2007 11.07.2007 AY 180C5F530F262C68 WI YWINS05 WS8I00026558E0F9FF
10.08.2007 11.07.2007 AY 180C5F560F3847AD WI YWINS06 WS8I00026558E0FA18
10.08.2007 11.07.2007 AY 180C5F5C196B3B99 WI YWINS07 WS8I00026558E0FA4E
10.08.2007 11.07.2007 AY 180C5F6218774F92 WI YWINS08 WS8I00026558E0FA7F
10.08.2007 11.07.2007 AY 180C5F6D1BC6ED66 WI YWINS10 WS8I00026558E0FADA
10.08.2007 11.07.2007 NY 17FF39781B9ECCB1 WP YWPRAPX DBH00000835872A114
10.08.2007 11.07.2007 NY 17FF39730E410F4B WP YWPRBPX DBH00000835872A0E8
10.08.2007 11.07.2007 NY 17FF39CA01B28C8A WP YWPRCPX DBH00000835872A3BB
10.08.2007 11.07.2007 NY 181691080B96EE2E WQ WQ5950 CUBE000083
10.08.2007 11.07.2007 NY 17EEFD6302059005 WQ YWQEXCP CUBE00005657EA7F5E
10.08.2007 11.07.2007 NY 1730D0251C726E5D YX YXWB011 A06M02422851AF2DED
10.08.2007 11.07.2007 NY 1730D01A0AB15D42 YX YXWB116 A06M02422851AF2D8E
10.08.2007 11.07.2007 NY 1730D02D1058CD31 YX YXWB231 A06M02422851AF2E38
10.08.2007 11.07.2007 NY 17EE2A8D130CEC43 YY YYDB2FK TOFF00007657E396C1
10.08.2007 11.07.2007 NY 177D376110AD5D9E YY YYFIKST A06M027333543018B2
10.08.2007 11.07.2007 NY 17ECC60D1B971F0A YY YYWB101 WS8B00031857D7E845
11.08.2007 11.07.2007 NY 17B3DCA20DA4EC97 CD YCDOGEC KUBE000026
11.08.2007 11.07.2007 NY 17A778591CDD885E NTA1P CZA0215 A02E00054455928C16
11.08.2007 11.07.2007 NY 180323EE1C786D10 NZ NZDBM83 ZVBI000016
11.08.2007 11.07.2007 NY 17E0892B04DF4477 VD VDDBM01 DSPV000030
11.08.2007 11.07.2007 NY 177E9A5B18ACFDE9 VD VDDBM04 A14S002541
11.08.2007 11.07.2007 NY 1802C64E09C96318 VD VDGLH00 DSPV000040
11.08.2007 11.07.2007 NY 17D372DE15F73A29 WB WB7400 WSTS000035
11.08.2007 11.07.2007 NY 18063C7300805687 WB WB8010 TOFF000088
11.08.2007 11.07.2007 NY 17FF3ED2069F17C7 WP YWPL5P1 DBH00000835872CDF6
11.08.2007 11.07.2007 NY 17FF3EEB12546D41 WP YWPL8P1 DBH00000835872CECA
11.06.2007 12.07.2007 NY 181487570A9CBF92 WB YWBBOPR WS8B00044159256574
10.08.2007 12.07.2007 NY 17C94C330333FA66 CZ YCZT328 GSER00009056AE4211
10.08.2007 12.07.2007 NY 17E0892D10D30CB5 VD VDREC00 DSPV000030
10.08.2007 12.07.2007 NY 17D372D8179BF8A7 WB WB7270 WSTS000035
10.08.2007 12.07.2007 NY 1807601D13CE201F WB WB7730 WSTS000046
10.08.2007 12.07.2007 NY 1815CC300E92FA2C WC WC8410 OTXO000073
11.08.2007 12.07.2007 NY 17B5D1790F2E75B0 KR YKRT385 VEFO000008560AE85C
11.08.2007 12.07.2007 NY 17B5D17900FEA714 KR YKRT397 VEFO000008560AE862
11.08.2007 12.07.2007 NY 180760180079CDF5 WB WB7320 WSTS000046
11.08.2007 12.07.2007 NY 1807601913BC34F4 WB WB7330 WSTS000046
11.08.2007 12.07.2007 NY 1807601C03C093F7 WB WB7340 WSTS000046
11.08.2007 12.07.2007 NY 177E95E50526E634 WB WB7380 A06M025453
11.08.2007 12.07.2007 NY 177E95E102DA3E20 WB WB7381 A06M025453
10.08.2007 13.07.2007 NY 181052D01D4BF7E0 DE DE0090 DE00000061
10.08.2007 13.07.2007 NY 17D6BE7C089B67B1 DI YDIT015 DI00000042571F1C16
14.06.2007 15.07.2007 NY 1802EC30120399DE CZ YCZJABW GSER0001525891A6AF
14.06.2007 15.07.2007 NY 1802A00E191EC8DF CZ YCZPABW GSER000152588F2812
29.06.2007 31.07.2007 NY 18104EE814900FEA TN TN0530 OTXO000066
31.07.2007 31.07.2007 NY 180BEB971B99C254 DI DI7510 DI00000058
09.08.2007 31.07.2007 NY 176D80010C2BC972 WB YWB5417 A06M02510853AC422D
10.08.2007 31.07.2007 NY 17B27CD50BBB2390 GM YGMSTEU GM0000003655EEF7FB
31.07.2007 01.08.2007 NY 17FB3B7A0A8CAD31 RA RA7240 EGB0000025
01.08.2007 01.08.2007 NY 17A6138E00CF7951 NL NL7590 BALR000005
01.08.2007 01.08.2007 NY 1810513401AD8E4E SN SN5903 SAVS000001
01.08.2007 01.08.2007 NY 181051CF09ECC1F2 WQ WQ6000 CUBE000081
02.08.2007 01.08.2007 NY 17675CAB17BF175C YY YYUWI A19R0024915378C4EF
03.08.2007 01.08.2007 NY 17FF3A341B359E5D WP YWPR5PX DBH00000835872A738
10.08.2007 01.08.2007 AY 17FF771B08CF35B5 WI YWI5951 WS8I0002415874A622
10.08.2007 01.08.2007 AY 17FF772510327044 WI YWI5959 WS8I0002415874A674
03.11.2007 01.08.2007 NY 181B48F2011210A5 TN TN5015 OTXO000070
03.11.2007 01.08.2007 NY 18191C8603A06FC5 TN YTN5012 OTXO000070594BD57CMVS
03.11.2007 01.08.2007 NY 18191C90082C554C TN YTN5013 OTXO000070594BD582MVS
10.08.2007 02.08.2007 NY 17D492130747E397 TN YTN0210 OTXO000045570CE08E
10.08.2007 02.08.2007 NY 180A28B1196278DC WB YWBCTA WS8B00040958CE5AAC
10.08.2007 02.08.2007 NY 18093C381477987A WB YWBSUM WS8B00040958C69AFA
10.08.2007 02.08.2007 NY 17FF39EE0C252AB5 WP YWPR1PX DBH00000835872A4ED
06.07.2007 03.08.2007 NY 17FF3EF300B6F933 WP YWPL9P1 DBH00000835872CF09
28.06.2007 07.08.2007 NY 18166C5B0817B4F8 ER YERPRI EAMR000034
28.06.2007 07.08.2007 NY 18163D2B1C5C9CE5 WB WB5280 WSTS000056
28.06.2007 07.08.2007 NY 1815CC701862E0F0 WB WB5570 WS8B000441
28.06.2007 07.08.2007 NY 17D372E40D10EA5F WB WB7440 WSTS000035
28.06.2007 07.08.2007 NY 17D372E0058EF4F5 WB WB7441 WSTS000035
29.06.2007 07.08.2007 NY 1815CBEF0E29C722 WB WB0630 WSTS000056
09.08.2007 07.08.2007 NY 180FFACB094AC581 CZ CZ6300 KLOM000061
09.08.2007 07.08.2007 NY 1810528008E6E8F6 DE DE5600 DE00000061
09.08.2007 07.08.2007 NY 181052860C2D5F16 DE DE5690 DE00000061
09.08.2007 07.08.2007 NY 181052820F2583C1 DE DE7120 DE00000061
09.08.2007 07.08.2007 NY 180C5B4A17C399BC EC EC7204 DLGR000039
09.08.2007 07.08.2007 NY 180C5B4D1348A5CC EC EC7206 DLGR000039
09.08.2007 07.08.2007 NY 180C59D20DD3F08C MF MF7010 MFR0000110
09.08.2007 07.08.2007 NY 17EF2063033DACDE RT RT5120 TABS000121
09.08.2007 07.08.2007 NY 1810511C040E0F31 SN SN5001 SAVS000001
09.08.2007 07.08.2007 NY 17D4BDE2007918FE TN TN5014 OTXO000045
09.08.2007 07.08.2007 NY 17D372DB0A5DFAF0 WB WB7770 WSTS000035
10.08.2007 07.08.2007 NY 17FEBFE101E872A1 SN YSN100S NOST000268586EA518
10.08.2007 07.08.2007 NY 17FEBFE601503D12 SN YSN183I NOST000268586EA543
10.08.2007 07.08.2007 NY 1810500B0216C17E SN YSN202I SAVS00000159020731
10.08.2007 07.08.2007 NY 181050A813EDA1C7 SN YSND007 SAVS00000159020CA9
10.08.2007 07.08.2007 NY 181050B6129AAFC8 SN YSND008 SAVS00000159020CEE
10.08.2007 07.08.2007 NY 18111CB31CAE9549 SN YSND010 SAVS0000015908BC89
10.08.2007 07.08.2007 NY 17B6EFAF17EDB46A WB WB0960 WSTS000014
10.08.2007 07.08.2007 NY 180A332D044BF7FF WF YWF64CA WSSW00008558CEB299
10.08.2007 07.08.2007 NY 17FF3A170C603B54 WP YWPR2PX DBH00000835872A647
10.08.2007 07.08.2007 NY 17FFB0C613A55FDE WP YWPU1P5 DBH0000083587689E2
28.06.2007 08.08.2007 NY 18063C231C9B1DE5 TN TN5004 OTXO000060
29.06.2007 08.08.2007 NY 1815A3EA1D2C7B70 ER YERBER EAMR000034
29.06.2007 08.08.2007 NY 1815CC66082A96BE WB WB0530 WS8B000441
29.06.2007 08.08.2007 NY 18104EC80F091F37 WB WB5270 WSTS000051
29.06.2007 08.08.2007 NY 18104ED9034E19E8 WB WB5290 WSTS000051
29.06.2007 08.08.2007 NY 1817624A17ABF493 WC WC5010 OTXO000077
29.06.2007 08.08.2007 NY 1815CC3708A02B0D WC WC8120 OTXO000073
29.06.2007 08.08.2007 NY 1815CC321B23A971 WC WC8401 OTXO000073
09.07.2007 08.08.2007 NY 181028540E38A2FE WQ YWQBERI CUBE0000815900BA99
21.07.2007 08.08.2007 NY 18167417130F530E ER ER5080 EAMR000034
30.07.2007 08.08.2007 NY 177B50520E6A6E4B IT YITD01 A20Y001509542022FD
30.07.2007 08.08.2007 NY 177B504C1BA38CE8 IT YITD02 A20Y001509542022D1
02.08.2007 08.08.2007 NY 1817818400929666 CZ CZ5494 ACP0000111
02.08.2007 08.08.2007 NY 17E083F71D377199 CZ YCZT724 ACP000005657711403
02.08.2007 08.08.2007 NY 17E1F71912E5D9B1 CZ YCZT726 ACP0000056577D3D5C
02.08.2007 08.08.2007 NY 180C5AFC0A7C6EDC MF MF8930 MFR0000110
02.08.2007 08.08.2007 NY 17BB227116D89518 VV YVVZZ08 VDPS00005256377304
08.08.2007 08.08.2007 NY 180B4212093324F8 SV SV5150 WSSV000188
09.08.2007 08.08.2007 AY 1810C2560D959EF6 ED YED5203 ED000000525905C672
09.08.2007 08.08.2007 NY 1804DCFF0D79368E PC PC5150 IVN0000028
09.08.2007 08.08.2007 NY 180C58F90FF243F6 PC01 PC5060 IVN0000030
09.08.2007 08.08.2007 NY 180C58F90FF243F6 PC02 PC5060 IVN0000030
09.08.2007 08.08.2007 NY 180C58F90FF243F6 PC03 PC5060 IVN0000030
09.08.2007 08.08.2007 NY 180C58F90FF243F6 PC04 PC5060 IVN0000030
09.08.2007 08.08.2007 NY 180C58F90FF243F6 PC05 PC5060 IVN0000030
09.08.2007 08.08.2007 NY 180C58F90FF243F6 PC06 PC5060 IVN0000030
09.08.2007 08.08.2007 NY 180C58F90FF243F6 PC07 PC5060 IVN0000030
09.08.2007 08.08.2007 NY 17EF205E00112D3D RT RT5110 TABS000121
09.08.2007 08.08.2007 NY 17EF206509CEF087 RT RT5130 TABS000121
09.08.2007 08.08.2007 NY 17EF20670798077E RT RT5140 TABS000121
09.08.2007 08.08.2007 NY 18104EFE0554BB5E TN TN5016 OTXO000066
09.08.2007 08.08.2007 NY 177E95E91BBF48AA WB WB7470 A06M025453
10.08.2007 08.08.2007 NY 18139AF81D465774 AP YAPUTGK APEN000046591DA6B5
10.08.2007 08.08.2007 NY 1811639413083DBA CZ CZ5190 LOMN000029
10.08.2007 08.08.2007 NY 180A7F4A1D3762B7 ER YERDINS EAMR00002858D1311B
10.08.2007 08.08.2007 NY 180C59E3156A5FE0 MF MF7230 MFR0000110
10.08.2007 08.08.2007 NY 180C5A071A5F9867 MF MF7550 MFR0000110
10.08.2007 08.08.2007 NY 180C5A090A204F52 MF MF7901 MFR0000110
10.08.2007 08.08.2007 NY 18145E6F1BB57FFF MF MF8620 MFR0000127
10.08.2007 08.08.2007 NY 180A76EE1874F4E7 NI YNICL01 IPC000019258D0EAF8
10.08.2007 08.08.2007 NY 180B90A1009DD96F NI YNICS01 IPC000019258DA340A
10.08.2007 08.08.2007 NY 17E2E0E811835ADE NI YNIPACU IPC00001415784E6AB
10.08.2007 08.08.2007 NY 17C2D2890B97CEE1 NI YNIPREU IPC00001235677F09E
10.08.2007 08.08.2007 NY 17E2E0E811835ADE NI01 YNIPACU IPC00001415784E6AB
10.08.2007 08.08.2007 NY 17E2E0E811835ADE NI02 YNIPACU IPC00001415784E6AB
10.08.2007 08.08.2007 NY 1808754616BC7D5C NL NL7810 BALR000067
10.08.2007 08.08.2007 NY 180070031036C12C PC PC5090 IVN0000028
10.08.2007 08.08.2007 NY 17FFCE6B1860F4FF PC PC7030 IVN0000028
10.08.2007 08.08.2007 NY 17FFCE721AAECE28 PC PC8000 IVN0000028
10.08.2007 08.08.2007 NY 1810511F10CC8DD2 SN SN5003 SAVS000001
10.08.2007 08.08.2007 NY 1810512209D0EFF9 SN SN5004 SAVS000001
10.08.2007 08.08.2007 NY 181051241B20D9B1 SN SN5006 SAVS000001
10.08.2007 08.08.2007 NY 18104FDD1F6A48C3 SN YSN111I SAVS000001590205C6
10.08.2007 08.08.2007 NY 181050CF14ECC654 SN YSND012 SAVS00000159020DCD
10.08.2007 08.08.2007 NY 181050D5060FD9A2 SN YSND013 SAVS00000159020E14
10.08.2007 08.08.2007 NY 1811E3D01C738FD4 SV SV5600 WSSV000188
10.08.2007 08.08.2007 NY 18144063123CD895 SV SV5740 WSSV000195
10.08.2007 08.08.2007 NY 1814406B04C43F02 SV SV5750 WSSV000195
10.08.2007 08.08.2007 NY 1814406C0D30AECA SV SV5760 WSSV000195
10.08.2007 08.08.2007 NY 1812F65D1E15FCEA TN TN5030 OTXO000074
10.08.2007 08.08.2007 NY 18175BBA0E8A3345 TN TN7080 OTXO000078
10.08.2007 08.08.2007 NY 180BE16207F0CF6D UU UU5170 RS20000072
10.08.2007 08.08.2007 NY 17D1487C040559CA VV YVVZZ14 VDPS00007356F13EBD
10.08.2007 08.08.2007 NY 17DF96EA02265E28 VV YVVZZ17 VDPS00007757694F83
10.08.2007 08.08.2007 NY 1800E6D21E2DC7C2 VV YVVZZ18 VDPS0000995880B2BF
10.08.2007 08.08.2007 NY 180EC58D00E8AED7 VV YVVZZ19 VDPS00010858F51A6F
10.08.2007 08.08.2007 NY 17F131F207DBDFD6 VV YVVZZ20 VDPS00009057FCFF37
10.08.2007 08.08.2007 NY 17EFCEC30F2CA722 VV YVVZZ23 VDPS00008557F15BB7
10.08.2007 08.08.2007 NY 180E18DB12A73DBD VV YVVZZ27 VDPS00010858EF71CF
10.08.2007 08.08.2007 NY 18146AED0C20DBC8 VV YVVZZ28 VDPS00011259247724
10.08.2007 08.08.2007 NY 18102799142FE518 VV YVVZZ29 VDPS0001085900B473
10.08.2007 08.08.2007 NY 18031C6D0AA55941 VV YVVZZGR VDPS00009958933B61
10.08.2007 08.08.2007 NY 180EC12E1AF0FF45 VV YVVZZQR VDPS00010858F4F5CB
10.08.2007 08.08.2007 NY 1804D66E00920D38 WB WB5090 WSTS000046
10.08.2007 08.08.2007 NY 18104ED001A5E5B0 WB WB5260 WSTS000051
10.08.2007 08.08.2007 NY 17D372D909A78CFE WB WB7280 WSTS000035
10.08.2007 08.08.2007 NY 17D372DB139DD0C8 WB WB7410 WSTS000035
10.08.2007 08.08.2007 NY 18031B52052A63EE WB WB7420 WSTS000046
10.08.2007 08.08.2007 NY 17D7162F03F72F9A WB WB8650 TOFF000059
10.08.2007 08.08.2007 NY 18063C3110AB2DE5 WC WC5050 OTXO000060
10.08.2007 08.08.2007 NY 17D4BDDF025C7B54 WC WC7220 OTXO000045
10.08.2007 08.08.2007 NY 177B7D0C1BFE777F WC WC7240 A06M027069
10.08.2007 08.08.2007 NY 1793AA2019911369 WC WC7260 OTXO000008
10.08.2007 08.08.2007 NY 17F21DCE0943C5B8 WC WC7280 OTXO000058
10.08.2007 08.08.2007 NY 177878600624DAE6 WC WC7310 A06M027069
10.08.2007 08.08.2007 NY 177878680513A2BF WC WC7320 A06M027069
10.08.2007 08.08.2007 NY 18063C221C20E6C5 WC WC7500 OTXO000060
10.08.2007 08.08.2007 NY 177B7D111F810F11 WC WC7530 A06M027069
10.08.2007 08.08.2007 AY 17FF771C17B8DC79 WI YWI5952 WS8I0002415874A62F
10.08.2007 08.08.2007 AY 17FF771D1A1F33F8 WI YWI5953 WS8I0002415874A635
10.08.2007 08.08.2007 AY 17FF771E1E75D8A9 WI YWI5954 WS8I0002415874A641
10.08.2007 08.08.2007 AY 17FF772008FA439C WI YWI5955 WS8I0002415874A64D
10.08.2007 08.08.2007 AY 17FF772103D435E0 WI YWI5956 WS8I0002415874A652
10.08.2007 08.08.2007 AY 17FF772411D19763 WI YWI5957 WS8I0002415874A65E
10.08.2007 08.08.2007 AY 17FF772503B19491 WI YWI5958 WS8I0002415874A666
10.08.2007 08.08.2007 AY 17FF771A1CA86F80 WI YWI595A WS8I0002415874A61A
10.08.2007 08.08.2007 NY 17FF39DD07C5186D WP YWPRDPX DBH00000835872A45F
10.08.2007 08.08.2007 NY 181051CE1BF3384D WQ WQ6010 CUBE000081
10.08.2007 08.08.2007 NY 178C43A70B7CFC02 WU YWUGBUB TU0000001154AE45DF
10.08.2007 08.08.2007 NY 1802C75A0683C63A YY YYWBVIN WSTS000046589071B4
06.11.2007 08.08.2007 NY 181AD31F13F7471E ER ER8020 EAMR000035
09.11.2007 08.08.2007 NY 181677EF14389850 WP YWPR3PX DBH00000965935AA2CMVS
10.08.2007 09.08.2007 NY 181052BC0C347337 DE DE0410 DE00000061
10.08.2007 09.08.2007 NY 1816904D1E1B6D94 DE DE0420 DE00000063
10.08.2007 09.08.2007 NY 181052BB05F166D0 DE DE0830 DE00000061
10.08.2007 09.08.2007 NY 175E0E341F0C6B84 RT YRTKOMB A20Y001346532AA546
10.08.2007 09.08.2007 NY 17D2BBD307B51A5B VV YVVZZ16 VDPS00007356FD77D1
10.08.2007 09.08.2007 NY 18031B3505505F40 WB WB0510 WSTS000046
09.08.2007 10.08.2007 NY 18139D96073F7290 SV SV0280 WSSV000195
10.08.2007 10.08.2007 NY 180B93601DBD3F83 EC YECCRAC SYNC00002558DA4B2A
10.08.2007 10.08.2007 NY 17E6558E13DBA9B8 TN YTN0170 OTXO00005457A1E39F
10.08.2007 10.08.2007 NY 17E1E9500486A1F4 TN YTN0200 OTXO000054577CC9B6
29.06.2007 11.08.2007 NY 18175DBA16D08A79 WB YWBBOPR WS8B000465593D32E5
09.08.2007 11.08.2007 NY 180548BF0E099B59 BX YBXADBR CLOS00014958A5761B
09.08.2007 11.08.2007 NY 180FD65B04B75E4E ER YERDCUR EAMR00002858FE0AE8
10.08.2007 11.08.2007 NY 1815A1B41C2FF8DF DE DE0820 DE00000063
10.08.2007 11.08.2007 NY 1811E45A1D56DE45 ER YERDGET EAMR000028590F474F
10.08.2007 11.08.2007 NY 177D375A073D7364 FI YFI0120 A06M02733354301880
10.08.2007 11.08.2007 NY 180B71BD0784316A PC01 YPC0830 IVN000003058D930ED
10.08.2007 11.08.2007 NY 180B71BD0784316A PC02 YPC0830 IVN000003058D930ED
10.08.2007 11.08.2007 NY 180B71BD0784316A PC03 YPC0830 IVN000003058D930ED
10.08.2007 11.08.2007 NY 180B71BD0784316A PC04 YPC0830 IVN000003058D930ED
10.08.2007 11.08.2007 NY 180B71BD0784316A PC05 YPC0830 IVN000003058D930ED
10.08.2007 11.08.2007 NY 180B71BD0784316A PC06 YPC0830 IVN000003058D930ED
10.08.2007 11.08.2007 NY 180B71BD0784316A PC07 YPC0830 IVN000003058D930ED
10.08.2007 11.08.2007 NY 18031B471DB0036B WB WB1110 WSTS000046
10.08.2007 11.08.2007 NY 17F067371537606D WQ YWQ4501 CUBE00005657F65A9E
29.06.2007 12.08.2007 NY 1815CC451E00E03D WB WB0520 WS8B000441
29.06.2007 12.08.2007 NY 1815CBD70C3254D1 WB WB0680 WSTS000056
29.06.2007 12.08.2007 NY 1815CBE113E011FC WB WB0940 WSTS000056
29.06.2007 12.08.2007 NY 1815CBE81CDDA42A WB WB0950 WSTS000056
29.06.2007 12.08.2007 NY 1815C9D81095EDE8 WB YWBEBSM WS8B000441592FF6DF
10.08.2007 12.08.2007 NY 17E199940CAD9611 TN YTN0041 OTXO000054577A2CD6
09.08.2007 14.08.2007 NY 17FEBFDC15F94F6B SN YSN100I NOST000268586EA4F0
09.08.2007 14.08.2007 NY 18104FC9120B48E0 SN YSN110I SAVS00000159020504
09.08.2007 14.08.2007 NY 17FEBFE41EEE187F SN YSN120 NOST000268586EA53A
09.08.2007 14.08.2007 NY 1802F3FF1530B200 SN YSN187I NOST0002685891E82E
09.08.2007 14.08.2007 NY 1801FBE61D52FEF6 SN YSN187S NOST0002685889C70D
09.08.2007 14.08.2007 NY 17FEBFD10B69FD66 SN YSND002 NOST000268586EA494
09.08.2007 14.08.2007 NY 1810509E09643C91 SN YSND003 SAVS00000159020C56
10.08.2007 14.08.2007 NY 180DEF8E1DD0B7B4 NL NL7310 BALR000067
10.08.2007 14.08.2007 NY 17C61F55163CB46B NL NL7750 BALR000023
10.08.2007 14.08.2007 NY 180B709C125803D4 PC01 YPC0520 IVN000003058D92770
10.08.2007 14.08.2007 NY 180B709C125803D4 PC02 YPC0520 IVN000003058D92770
10.08.2007 14.08.2007 NY 180B709C125803D4 PC03 YPC0520 IVN000003058D92770
10.08.2007 14.08.2007 NY 180B709C125803D4 PC04 YPC0520 IVN000003058D92770
10.08.2007 14.08.2007 NY 180B709C125803D4 PC05 YPC0520 IVN000003058D92770
10.08.2007 14.08.2007 NY 180B709C125803D4 PC06 YPC0520 IVN000003058D92770
10.08.2007 14.08.2007 NY 180B709C125803D4 PC07 YPC0520 IVN000003058D92770
10.08.2007 14.08.2007 NY 180B3E2712F573A3 TN YTN0100 OTXO00006658D78025
10.08.2007 14.08.2007 NY 1819E99804485691 WB WB0520 WS8B000468
10.08.2007 14.08.2007 NY 18031B3F147AC3A2 WB WB0870 WSTS000046
10.08.2007 14.08.2007 NY 17B6EFAE1FF2B425 WB WB0920 WSTS000014
10.08.2007 14.08.2007 NY 1819E9B61769DD73 WB WB0950 WS8B000468
10.08.2007 14.08.2007 NY 180A79F2186A754E WN YWNOLOG FOND00008558D0FF8B
10.08.2007 14.08.2007 NY 1730D02E1B2CED58 YY YYWBERR A06M02422851AF2E43
16.07.2007 15.08.2007 NY 1817664512385C07 CZ YCZJABW GSER000181593D7A96
09.08.2007 15.08.2007 NY 18104FD401ADA090 SN YSN110U SAVS0000015902056A
09.08.2007 15.08.2007 NY 17FF3A040077B3CA WP YWPR1QX DBH00000835872A5A5
10.08.2007 15.08.2007 NY 17F156F61AABFF9E CZ YCZM435 BEWI00001057FE35BE
10.08.2007 15.08.2007 NY 17B5C73C10EAABBA CZ YCZT435 BEWI000004560A927D
10.08.2007 15.08.2007 NY 18134EC41F04BB6E NI YNILBPL IPC0000199591B2776
10.08.2007 15.08.2007 NY 1801D4770FA83FD7 VV YVVZZ13 VDPS00009958887C3E
10.08.2007 15.08.2007 NY 18104F1910468A7E WB WB1080 TOFF000099
10.08.2007 15.08.2007 NY 18063C681E19FBC8 WB WB1090 TOFF000088
10.08.2007 15.08.2007 NY 18093A5208A498C5 WB YWBMAS WS8B00040958C68B0C
10.08.2007 15.08.2007 NY 18093C761D12727A WB YWBWRK WS8B00040958C69CFF
11.08.2007 15.08.2007 NY 1801D2830664796E NTA1P CZA0213 A02E00056858886BDA
09.07.2008 15.08.2007 NY 17FF3A4C1ED36765 WP YWPR7PX DBH00000835872A809
14.09.2007 31.08.2007 NY 17D1732300E61795 RT YRT0006 RFT000001556F2A499
14.09.2007 31.08.2007 NY 181D33200B9EAFF6 WF WF0300 WSSW000089
25.10.2007 31.08.2007 NY 181D333C1BE0E1B1 WF WF0350 WSSW000089
13.09.2007 01.09.2007 NY 181B4E3A1892B51A SV SV5770 WSSV000196
14.09.2007 01.09.2007 NY 181B4E390C4001C4 SV SV5750 WSSV000196
29.07.2007 03.09.2007 NY 17B6E32A0D21727D IT YITGT TABS0000535613E056
29.07.2007 03.09.2007 NY 1753B2D514B9B4A5 YY YYITST A20Y00132952D3C3E7
never 04.09.2007 NY 181B2B8D1D522BB4 CZ CZ5494 ACP0000103
11.06.2007 04.09.2007 NY 18104EF71FB8201D TN TN8900 OTXO000066
30.08.2007 07.09.2007 NY 181D3635191FC8E7 WB YWB0083 WSTS000055596E3C20MVS
08.11.2007 07.09.2007 NY 181C3CA70424A8BD WB YWB0082 WSTS00005559660E59MVS
09.11.2007 07.09.2007 NY 181C39251EE20C6C DE DE0100 DE00000066
08.02.2008 11.09.2007 NY 18191FDA177E875B WB YWB5417 WSTS000055594BF2BEMVS
10.08.2007 12.09.2007 NY 17B3DCB7047D6973 CD YCDOGEM KUBE000026
13.08.2007 12.09.2007 NY 181A0C460B75E40F SV SV5640 WSSV000196
11.08.2007 27.09.2007 NY 182052BA179076D5 WB WB0630 WSTS000055
11.08.2007 27.09.2007 NY 182052BA0A954E1C WB WB0680 WSTS000055
11.08.2007 27.09.2007 NY 1819DC7C0F04665C WB YWBEBSM WSTS000055595220FAMVS
14.09.2007 28.09.2007 NY 181E4CAB1BE28D6F GM GM0850 GM00000145
13.08.2007 29.09.2007 NY 181E8200024419AE TN YTNUPD OTXO00007059791B5C
14.08.2007 29.09.2007 NY 181F3FFC0584E468 SN SN5000 SAVS000005
14.08.2007 29.09.2007 NY 182168E01BA69CA2 SV SV5640 WSSV000239
14.08.2007 29.09.2007 NY 181B4E391F13EE7F SV SV5760 WSSV000196
18.08.2007 29.09.2007 NY 18204EC002F7AD36 WB WB5570 WS8B000444
18.08.2007 29.09.2007 NY 181CE485169A2292 WC WC5010 OTXO000070
18.08.2007 29.09.2007 NY 181D2645049A5697 WC WC8401 OTXO000070
08.09.2007 29.09.2007 NY 181B481D0D0DF37B WB WB5120 WSTS000055
08.09.2007 29.09.2007 NY 181B482308EFF1DB WB WB7020 WSTS000055
17.08.2007 01.10.2007 NY 17D1732F1E7B38A4 RT YRT075M RFT000001556F2A505
14.09.2007 01.10.2007 NY 17C8273701BBCC90 RT YRT0007 RFT000000956A4A858
09.11.2007 07.10.2007 NY 181DF4941CBDBE2D TN YTN0101 OTXO00007059747939
09.11.2007 07.10.2007 NY 1819E27F0995289A TN YTNW100 OTXO00007059525387MVS
09.11.2007 07.10.2007 NY 18191C82198A62B3 TN YTNW170 OTXO000070594BD553MVS
09.11.2007 07.10.2007 NY 18198D8C087DC41E VD VDDBM01 DSPV000042
09.11.2007 07.10.2007 NY 18198D941781E33C VD VDGLH00 DSPV000042
09.11.2007 07.10.2007 NY 17D358FB1F71048E VD YVDDFA DSPV00002357029E3F
09.11.2007 07.10.2007 NY 181E45FB0A593D49 WB WB0530 WSTS000055
09.11.2007 07.10.2007 NY 1825A8AA13CD3568 WB WB0680 WSTS000058
09.11.2007 07.10.2007 NY 181DF58A13353842 WB WB0980 TOFF000109
09.11.2007 07.10.2007 NN 181AAB810DA424A7 WB YWBIO WS8B0004425958E985MVS
09.11.2007 07.10.2007 AY 1818742915D45182 WI YWINS09 WS8I0002685946500EMVS
09.11.2007 07.10.2007 NY 181B2A72136E3781 WN YWNOLOG FOND000087595D1286MVS
23.11.2007 07.10.2007 NY 181DF58D021E9F86 WB WB0990 TOFF000109
23.11.2007 07.10.2007 NY 181A0E0913151E72 YY YYDB2FK TOFF0001095953C05BMVS
13.05.2009 07.10.2007 NY 16F2B49608FDF6B9 HP1 AFJJRK HPSVP2AFJJRK
13.05.2009 07.10.2007 NY 16F2B49A0F1869E5 HP1 AFOWRK HPSVP2AFOWRK
13.05.2009 07.10.2007 NY 16F2B49608FDF6B9 HP3 AFJJRK HPSVP2AFJJRK
13.05.2009 07.10.2007 NY 16F2B49A0F1869E5 HP3 AFOWRK HPSVP2AFOWRK
09.11.2007 08.10.2007 NY 18198D981F1365CF VD VDINI01 DSPV000042
09.11.2007 08.10.2007 NY 1825A8A2107EFBF3 WB WB0630 WSTS000058
09.11.2007 08.10.2007 NY 181C3CD11F409BBD WB WB0940 WSTS000055
09.11.2007 08.10.2007 NY 1820EDD80560A16C WB YWBEBSM WS8B000479598D6B36
09.11.2007 08.10.2007 AY 181873E016605288 WI YWINS01 WS8I00026859464FB1MVS
09.11.2007 09.10.2007 NY 1819121500D1EA9B CD CD2590 UPDS000044
09.11.2007 09.10.2007 NY 181C39331FFB717F DE DE0400 DE00000066
09.11.2007 09.10.2007 NY 181C393012C460B2 DE DE0410 DE00000066
09.11.2007 09.10.2007 NY 181C39170A436491 DE DE0420 DE00000066
09.11.2007 09.10.2007 NY 181ACC4D11C2F59C TN YTNBOPH OTXO0000705959FCD2MVS
12.09.2007 10.10.2007 NY 17D16E71046222B0 IT IT5001 RFT0000015
27.10.2007 10.10.2007 NY 181993381EA5F596 WF YWFCB02 WSSW000089594FBA69MVS
09.11.2007 10.10.2007 NY 181E9EFE19152277 AT AT0099 ACS0000017597A0EC1
09.11.2007 10.10.2007 NY 181B2C1D0C24CE09 CZ CZ5150 KLOM000062
09.11.2007 10.10.2007 NY 181B2C0D175D944C CZ CZ5280 KLOM000062
09.11.2007 10.10.2007 NY 181B2B8C007D300F CZ CZ6400 GSER000177
09.11.2007 10.10.2007 NY 181C37BF09F26776 CZ CZ6500 GSER000177
09.11.2007 10.10.2007 NY 17B5D153039BCE65 CZ YCZM025 LOFT000019560AE739
09.11.2007 10.10.2007 NY 180EB6DA09C279F4 CZ YCZMLIM KLOM00006458F49F2E
09.11.2007 10.10.2007 NY 181C39140CFAD8BB DE DE0810 DE00000066
09.11.2007 10.10.2007 NY 181C393C018307F3 DE DE0820 DE00000066
09.11.2007 10.10.2007 NY 181C38F010E7075D DE DE0860 DE00000066
09.11.2007 10.10.2007 NY 181C39421EBF7C9C DE DE0940 DE00000066
09.11.2007 10.10.2007 NY 181B2C221E63ACDA EC EC5130 KLOM000062
09.11.2007 10.10.2007 NY 17D2B1790CF11821 EC YECUCRK SYNC00001156FD2111
09.11.2007 10.10.2007 NY 18248E230E2D63F4 GM GM0850 GM00000150
09.11.2007 10.10.2007 NY 18187E8E1AA350C3 GM YGMSTEU GM000001455946A9BF
09.11.2007 10.10.2007 NY 181B2CD40E454CD7 NTA1P CZA0215 A02E000575595D269F
09.11.2007 10.10.2007 NY 1819B39C1E8BD927 PC01 YPC0520 IVN00000325950CA4A
09.11.2007 10.10.2007 NY 1819B39C1E8BD927 PC02 YPC0520 IVN00000325950CA4A
09.11.2007 10.10.2007 NY 1819B39C1E8BD927 PC03 YPC0520 IVN00000325950CA4A
09.11.2007 10.10.2007 NY 1819B39C1E8BD927 PC04 YPC0520 IVN00000325950CA4A
09.11.2007 10.10.2007 NY 1819B39C1E8BD927 PC05 YPC0520 IVN00000325950CA4A
09.11.2007 10.10.2007 NY 1819B39C1E8BD927 PC06 YPC0520 IVN00000325950CA4A
09.11.2007 10.10.2007 NY 1819B39C1E8BD927 PC07 YPC0520 IVN00000325950CA4A
09.11.2007 10.10.2007 NY 181CE4AB1F3FDF76 RI RI0810 RI00000021
09.11.2007 10.10.2007 NY 1823CE0F1C967B65 SN SN0200 SAVS000013
09.11.2007 10.10.2007 NY 1823CDF00459846B SN YSNA005 SAVS00001359A589EE
09.11.2007 10.10.2007 NY 181C3AB30E618BED TN YTN0021 OTXO0000705965FE66
09.11.2007 10.10.2007 NY 182284B2057B5728 TN YTNUPD OTXO000085599AC00E
09.11.2007 10.10.2007 NY 1818D380154526FD VV YVVZZ04 VDPS0001145949721BMVS
09.11.2007 10.10.2007 NY 1823AC1F15169D58 VV YVVZZ07 VDPS00013759A46E34MVS
09.11.2007 10.10.2007 NY 1819E37C0B1E1974 VV YVVZZ10 VDPS00011459525BC8MVS
09.11.2007 10.10.2007 NY 1817FCF21358B1E2 VV YVVZZ11 VDPS00011459426A05MVS
09.11.2007 10.10.2007 NY 1817FCF509E5D4C0 VV YVVZZ12 VDPS00011459426A35MVS
09.11.2007 10.10.2007 NY 181AA84015BCA89A VV YVVZZ13 VDPS0001145958CE5FMVS
09.11.2007 10.10.2007 NY 181DF5A802121E7C WB WB8010 TOFF000109
09.11.2007 10.10.2007 NY 181AAA1316770361 WB YWBBODA WS8B0004425958DDB0MVS
09.11.2007 10.10.2007 NY 181A0DF707DD2360 WB YWBITV TOFF0001095953C015MVS
09.11.2007 10.10.2007 AY 181873E6099E5205 WI YWINS02 WS8I00026859464FB6MVS
09.11.2007 10.10.2007 AY 181873EF139796A9 WI YWINS03 WS8I00026859464FC0MVS
09.11.2007 10.10.2007 AY 181873FA0E1AEF28 WI YWINS04 WS8I00026859464FC8MVS
09.11.2007 10.10.2007 AY 181874030D3E0FB5 WI YWINS05 WS8I00026859464FD3MVS
09.11.2007 10.10.2007 AY 1818740D10396227 WI YWINS06 WS8I00026859464FE3MVS
09.11.2007 10.10.2007 AY 181874160DC4BBFC WI YWINS07 WS8I00026859464FEFMVS
09.11.2007 10.10.2007 AY 1818741E0D7F9B9E WI YWINS08 WS8I00026859464FFDMVS
09.11.2007 10.10.2007 AY 1818742F0E823CBF WI YWINS10 WS8I0002685946501DMVS
09.11.2007 10.10.2007 NY 17FF3EC11AC577B8 WP YWPL2P1 DBH00000835872CD6B
09.11.2007 10.10.2007 NY 18167A4707EFEC51 WP YWPL5P1 DBH00000965935BEC1MVS
09.11.2007 10.10.2007 NY 18167A5F12850DED WP YWPL8P1 DBH00000965935BF94MVS
09.11.2007 10.10.2007 NY 1816415B183189F2 WP YWPRAPX DBH00000965933E137MVS
09.11.2007 10.10.2007 NY 1816779A0BD761EC WP YWPRCPX DBH00000965935A7F9MVS
09.11.2007 10.10.2007 NY 181677E40970F431 WP YWPRDPX DBH00000965935A9DDMVS
09.11.2007 10.10.2007 NY 1815D73F0BB52A99 WP YWPU1P5 DBH000009659306727MVS
09.11.2007 10.10.2007 NY 1826C38D0714BA79 WQ WQ5950 CUBE000114
09.11.2007 10.10.2007 NY 1823C46F12920728 YX YXA171C TOFF00011759A53A43
10.11.2007 10.10.2007 NY 1818A626117BCA76 VV YVVZZ05 VDPS0001145947F5B1MVS
09.11.2007 11.10.2007 NY 18191C6703BC1494 TN YTNSICH OTXO000070594BD52D
27.10.2007 13.10.2007 NY 181992D90B2A84CB WF YWFM537 WSSW000089594FB758MVS
08.02.2008 18.10.2007 NY 17C999B40844883E NL YNL0200 BALR00003156B0CC3B
never 24.10.2007 NY 1817FD02114AA653 VV YVVZZ21 VDPS00011459426A44MVS
20.08.2007 24.10.2007 NY 1820EE0F049F6595 WB WB0630 WS8B000479
20.08.2007 24.10.2007 NY 1820EE0A1F86168B WB WB0680 WS8B000479
20.08.2007 24.10.2007 NY 18204EA51BB20439 WB YWB530 WS8B000443
07.02.2008 25.10.2007 NY 180DEE8B0A00DE1E YY YYUWI PSMF00001758EE0EC7MVS
08.02.2008 27.10.2007 NY 181C3CC01DF20ED6 WB WB1110 WSTS000055
04.10.2007 28.10.2007 NY 18167A71057A84EC WP YWPL9P1 DBH00000965935C01FMVS
14.09.2007 31.10.2007 NY 181C3B5D0C377BD8 YX YXA171C TOFF0001095966040A
08.11.2007 31.10.2007 NY 182056D1196487E7 CD CD8130 CIFS000202
09.11.2007 31.10.2007 NY 181C38F31CA180DE DE DE0050 DE00000066
09.11.2007 31.10.2007 NY 181C393F05B0E5A2 DE DE0440 DE00000066
08.02.2008 31.10.2007 NY 182883500256596E NTA1P CZA0213 A02E00058259CD0967
never 01.11.2007 NY 182922F213EEF0A2 VV YVVZZ21 VDPS00011759D24460MVS
24.08.2007 01.11.2007 NY 181AAC0B13DEE03C WB YWBSA4 WS8B0004425958EE28MVS
01.09.2007 01.11.2007 NY 181B9CFE03287EB1 SN SN5903 SAVS000005
01.09.2007 01.11.2007 NY 181D5F1F1F6585FE WQ WQ6000 CUBE000092
05.09.2007 01.11.2007 NY 182265071C5F2DD9 WB WB5570 WS8I000307
13.09.2007 01.11.2007 NY 1819175D1DF020AF AP YAPUTGK APEN000042594BAB6AMVS
13.09.2007 01.11.2007 NY 17EF204D1B02ABA2 RT RT5020 TABS000121
13.09.2007 01.11.2007 NY 17EF2052083ABD62 RT RT5060 TABS000121
13.09.2007 01.11.2007 NY 17F03AE912818F98 RT RT5090 TABS000121
13.09.2007 01.11.2007 NY 17EF20691EE8A1DD RT RT5160 TABS000121
13.09.2007 01.11.2007 NY 17EF206B1FC59F38 RT RT5170 TABS000121
13.09.2007 01.11.2007 NY 17D16EBC1BCC0BDD RT RT5210 RFT0000015
13.09.2007 01.11.2007 NY 182194F00B0D8253 SN SN5000 SAVS000014
13.09.2007 01.11.2007 NY 181C39961D1F259C SN YSNB002 SAVS0000055965F526
13.09.2007 01.11.2007 NY 181E74830FB5EFF0 SN YSND010 SAVS0000055978AA6A
14.09.2007 01.11.2007 NY 17EF205A160D5A55 RT RT5100 TABS000121
14.09.2007 01.11.2007 NY 181B9CDC1F6BB3B2 SN SN5004 SAVS000005
14.09.2007 01.11.2007 NY 181B9CDD1F49FCC9 SN SN5005 SAVS000005
14.09.2007 01.11.2007 NY 181E73F907BDEA71 SN SN5006 SAVS000005
14.09.2007 01.11.2007 NY 181F412F13C140CE SN SN5100 SAVS000005
14.09.2007 01.11.2007 NY 181C438E1B1FA2A3 SN SN5901 SAVS000005
14.09.2007 01.11.2007 NY 181E9DA21B49B572 SN YSND012 SAVS000005597A035F
14.09.2007 01.11.2007 NY 181E7484189AC362 SN YSND013 SAVS0000055978AA76
14.09.2007 01.11.2007 NY 18226582085840F8 WC WC5010 WS8I000307
14.09.2007 01.11.2007 NY 181B491716D92453 WC WC5050 OTXO000070
14.09.2007 01.11.2007 NY 181B4934145BD3C5 WC WC7220 OTXO000070
14.09.2007 01.11.2007 NY 181B49361607A8BA WC WC7240 OTXO000070
14.09.2007 01.11.2007 NY 181B49381EFEE30C WC WC7260 OTXO000070
14.09.2007 01.11.2007 NY 181B49420E6C84E6 WC WC7310 OTXO000070
14.09.2007 01.11.2007 NY 181B49430BCC42C0 WC WC7320 OTXO000070
14.09.2007 01.11.2007 NY 181B49491D6D930B WC WC7500 OTXO000070
14.09.2007 01.11.2007 NY 181B494D01568648 WC WC7530 OTXO000070
14.09.2007 01.11.2007 NY 1822658105CC1901 WC WC8401 WS8I000307
14.09.2007 01.11.2007 NY 182051610EC67759 WC WC8410 OTXO000070
14.09.2007 01.11.2007 NY 18198EA9091BA94A WF YWF64CA WSSW000089594F9457
10.10.2007 01.11.2007 NY 1817FD1516CB6239 VV YVVZZ09 VDPS00011459426A6CMVS
06.09.2007 02.11.2007 NY 182264E4186BED4A WB WB0630 WS8I000307
06.09.2007 02.11.2007 NY 182264E506A2937A WB WB0680 WS8I000307
13.09.2007 02.11.2007 NY 181B4E361A47513A SV SV5740 WSSV000196
14.09.2007 02.11.2007 NY 181B47AA0CC2621A MF MF8620 MFR0000124
14.09.2007 02.11.2007 NY 1821910E1F6FA041 SV SV5760 WSSV000240
14.09.2007 02.11.2007 NY 181D331C016E0835 WF WF0280 WSSW000089
25.10.2007 02.11.2007 NY 181D333212EC01EA WF WF0310 WSSW000089
25.10.2007 02.11.2007 NY 181D3334036367CB WF WF0320 WSSW000089
06.09.2007 03.11.2007 NY 182265901BEE32D8 WB YWB530 WS8I000307
14.09.2007 03.11.2007 NY 1805F2811C1EC577 IT IT0010 TABS000131
14.09.2007 03.11.2007 NY 178626B503DAD8E1 IT YIT0022 A20Y001569547AFE2B
14.09.2007 04.11.2007 NY 1818F65E1627C6B5 BP YBPMUT BPST000079594A969EMVS
14.09.2007 04.11.2007 NY 17D1941600492BE1 RT RT0100 RFT0000012
14.09.2007 04.11.2007 NY 18031B5110D39B75 RT RT0200 TABS000130
14.09.2007 04.11.2007 NY 17C8273D0A443DB6 RT YRT0008 RFT000000956A4A893
26.09.2007 04.11.2007 NY 17D16E7E10BACFAF IT IT5503 RFT0000015
14.09.2007 07.11.2007 NY 1802F62718C20B26 AT AT0099 ACS00000115891FA54
14.09.2007 07.11.2007 NY 181A390E14673B05 AT AT0099 ACS0000015595529B8
14.09.2007 07.11.2007 NY 181E268E1D177D30 IT IT8481 TABS000160
14.09.2007 07.11.2007 NY 181F404000F8EED1 SN SN0200 SAVS000005
14.09.2007 07.11.2007 NY 181F3F4815EA259D SN YSNA005 SAVS000005597F4F58
14.09.2007 07.11.2007 NY 181B9C9603465715 SN YSNI003 SAVS0000055960D01A
14.09.2007 07.11.2007 NY 1821498D00510B13 TN YTNUPD OTXO00008259906C81
14.09.2007 07.11.2007 NY 181E44E302A4CCCF WF WF5410 WSSW000089
14.09.2007 07.11.2007 NY 181E44EE166A3740 WF YWFSWC WSSW000089
14.09.2007 07.11.2007 NY 181E25A21091CDA5 WQ WQ5950 CUBE000092
08.11.2007 07.11.2007 NN 1749A5D304B2335D WP YWPL1W1 A06M024666527F73FE
14.09.2007 08.11.2007 NY 180C8F7F0475785F RT RT5910 TABS000145
14.09.2007 08.11.2007 NY 181B490C0EA4AA91 TN TN7080 OTXO000070
30.10.2007 08.11.2007 NY 1823CE1A1167AB15 SN SN5001 SAVS000013
09.11.2007 08.11.2007 NY 17867C0D14590A59 AT AT7110 A20Y001564
04.11.2007 09.11.2007 NY 181B289E0294210A CZ CZ8010 APEN000042
04.11.2007 09.11.2007 NY 181B28A60DE2A5A0 CZ CZ8020 APEN000042
02.11.2007 10.11.2007 NY 181DF15B096DB2E8 MF MF8930 MFR0000124
02.11.2007 10.11.2007 NY 180BC45D1874A61D MF MF8940 MFR0000110
08.11.2007 10.11.2007 NY 181B2B841A41010B MF MF7010 MFR0000124
09.11.2007 10.11.2007 NY 181B46411465D489 MF MF7550 MFR0000124
09.11.2007 10.11.2007 NY 181D81DF0F61AD6F MF MF7901 MFR0000124
26.10.2007 12.11.2007 NY 1822D6A611A1A93F WF WF0280 WSSW000086
26.10.2007 12.11.2007 NY 1822D69C1D9BF47D WF WF0300 WSSW000086
08.11.2007 13.11.2007 NY 181ACBE5166D9350 WB YWBCTA WS8B0004425959F984
09.11.2007 13.11.2007 NY 181B2CA70747BA47 NTA1P CZA0213 A02E000575595D2527
09.11.2007 13.11.2007 NY 1804D0C01197DBE9 NTA1P CZA0255 A02E00057158A18784
09.11.2007 13.11.2007 NY 1817FD1512946DF7 VV YVVZZ24 VDPS00011459426A82MVS
08.02.2008 15.11.2007 NY 181C3CD70B255060 WB WB0830 WSTS000055
12.12.2007 16.11.2007 NY 1826F0730C388176 ER YERPRI EAMR000048
07.02.2008 16.11.2007 NY 182C9C1D0C4880A2 WQ YWQ5601 CUBE00009459EF6729
28.05.2009 16.11.2007 NY 16D64928099F4035 HP1 AHGPRI HPSVP2AHGPRI
28.05.2009 16.11.2007 NY 16D64928099F4035 HP3 AHGPRI HPSVP2AHGPRI
never 30.11.2007 NY 18253AD6115AE19A CZ CZ5991 GSER000191
14.09.2007 30.11.2007 NY 181B4833128C6D23 WB WB7520 WSTS000055
09.11.2007 30.11.2007 NY 181FB5831ABB3E70 ER YERPRI EAMR000035
08.02.2008 30.11.2007 NY 182C9C2C1D927AFD WQ YWQBERI CUBE00009459EF6722
never 01.12.2007 NY 18239A341EBABCCF WQ WQ6000 CUBE000112
31.10.2007 01.12.2007 NY 174653F412B34674 OE YOE2BP1 A12M0057985263A8B2
09.11.2007 01.12.2007 NY 1812FBAD0552EBE9 ER YERDCUR EAMR00003559186E33MVS
09.11.2007 01.12.2007 NY 1812FBB310C7372F ER YERDGET EAMR00003559186E6CMVS
10.11.2007 01.12.2007 NY 182E81261B5A42EE WC WC5010 OTXO000081
10.11.2007 01.12.2007 NY 182E81451AA9D856 WC WC8401 OTXO000081
13.11.2007 01.12.2007 NY 182E81230D947285 WB WB0840 WSTS000057
22.11.2007 01.12.2007 NY 18299666011412CE WB WB0970 WSTS000057
01.12.2007 01.12.2007 NY 182CE8D206E65CF4 WQ WQ6000 CUBE000094
04.12.2007 01.12.2007 AY 1817AFCA0E2031A5 WI YWI5952 WS8I000268593FE34B
04.12.2007 01.12.2007 AY 1817AFCE0AE7D9E3 WI YWI5955 WS8I000268593FE368
04.12.2007 01.12.2007 AY 1817AFD00A189CCD WI YWI5957 WS8I000268593FE37B
13.12.2007 01.12.2007 NY 1827DA281F81C0C3 WB YWB0083 WSTS00005759C7789EMVS
02.02.2008 01.12.2007 NY 1825A8BE03B40135 WB WB5120 WSTS000058
02.02.2008 01.12.2007 NY 1829967F04389766 WB WB7020 WSTS000057
02.02.2008 01.12.2007 NY 181B482D00B5B92C WB WB7360 WSTS000055
07.02.2008 01.12.2007 NY 181C3CFF077AA155 WB WB0620 WSTS000055
08.02.2008 01.12.2007 NY 182C73A519221274 DE DE0050 DE00000070
08.02.2008 01.12.2007 NY 182885DC1456E513 DE DE0440 DE00000070
05.02.2009 01.12.2007 NY 16A0895A021FE1EB HP1 AE5MQ6 HPSVP2AE5MQ6
05.02.2009 01.12.2007 NY 16A0895A021FE1EB HP3 AE5MQ6 HPSVP2AE5MQ6
14.12.2007 02.12.2007 NY 182300220D81C015 BP YBPMUT BPST000087599ECB6FMVS
28.01.2008 02.12.2007 NY 1816780218D492A4 WP YWPR6PX DBH00000965935AB34MVS
09.11.2007 03.12.2007 NY 1819DE9518757CCC BX YBXADBR CLOS0001705952328DMVS
09.11.2007 03.12.2007 NY 1822BA3117EB2901 SV YSVVORM WSSV000199
09.11.2007 03.12.2007 NY 181C3CF50797A90A WB WB0820 WSTS000055
09.11.2007 03.12.2007 NY 1825A8B4050AC926 WB WB0840 WSTS000058
23.11.2007 03.12.2007 NY 182CE9641E571C62 WB WB1090 TOFF000112
29.01.2008 04.12.2007 NY 1828FF3B18AC58B4 VV YVVZZ09 VDPS00011759D118C6MVS
26.10.2007 06.12.2007 NY 181B4DB31EC811AD WQ YWQBERI CUBE000092595E3A2E
never 07.12.2007 NY 17D194491ABEAD4A RT RT5550 TABS000080
16.09.2007 07.12.2007 NY 18250D8F1F9833E3 WQ WQ5950 CUBE000112
20.09.2007 08.12.2007 NY 181B48200C9F72D8 WB WB7440 WSTS000055
22.10.2007 08.12.2007 NY 182530FC09665515 SV SV5770 WSSV000199
03.11.2007 08.12.2007 NY 1825A8C005020929 WB WB7020 WSTS000058
02.02.2008 08.12.2007 NY 181B482516FFEECA WB WB7030 WSTS000055
02.02.2008 08.12.2007 NY 181B48360D2346B8 WB WB8720 WSTS000055
09.11.2007 09.12.2007 NY 181873E814542A5E FI YFI0110 BKUR0000805946506C
09.11.2007 09.12.2007 NY 181873EE126A8118 FI YFI0120 BKUR0000805946509A
30.09.2007 10.12.2007 NY 18271DFE052F9964 CZ CZ5991 GSER000200
09.11.2007 10.12.2007 NY 181C39181DE41A89 DE DE0060 DE00000066
09.11.2007 11.12.2007 NY 181C39050B0FD372 DE DE0430 DE00000066
12.11.2007 11.12.2007 NY 182E05A0123133A9 DE DE0820 DE00000070
23.11.2007 11.12.2007 NY 182CE9770C982E56 WB WB1080 TOFF000112
08.02.2008 11.12.2007 NY 181C39440D10F7A5 DE DE0490 DE00000066
13.11.2007 12.12.2007 NY 182E573913D07116 TN YTN0202 OTXO00008159FDDDF0MVS
13.11.2007 12.12.2007 NY 182E812F077DDBF7 WB WB1100 TOFF000112
14.11.2007 12.12.2007 NY 182E812C17B3ADBB WC WC8410 OTXO000081
23.11.2007 12.12.2007 NY 182CE95B0E61834E WB WB0980 TOFF000112
14.12.2007 12.12.2007 NY 1826EE1A12D83747 SV SV0950 WSSV000200
07.02.2008 12.12.2007 NY 1828525B107FE520 CD CD8130 CIFS000210
07.02.2008 12.12.2007 NY 17980CDD145D7361 CD YCDT115 UPDS000006
13.11.2007 13.12.2007 NY 182FBD31072FA1A1 DE DE0820 DE00000075
13.11.2007 13.12.2007 NY 182E81401C8F29AC WB WB0630 WSTS000057
13.11.2007 13.12.2007 NY 182E811B115E1ED2 WB WB0680 WSTS000057
23.11.2007 13.12.2007 NY 1829966907409084 WB WB0820 WSTS000057
23.11.2007 17.12.2007 NY 181DF59E1E040216 WB WB7650 TOFF000109
08.02.2008 17.12.2007 NY 182625EF1F8D0DA8 FI YFI0120 BKUR00009559B932CCMVS
20.11.2007 19.12.2007 NY 1827DA091B550E18 TN YTNUPD OTXO00008159C7784F
08.02.2008 21.12.2007 NY 182885EE0D9D91EB DE DE0060 DE00000070
08.02.2008 21.12.2007 NY 182C73AE12B1663A DE DE0090 DE00000070
08.02.2008 21.12.2007 NY 182885F10797D735 DE DE0100 DE00000070
20.11.2007 22.12.2007 NY 182B2EE119F07759 TN YTNW100 OTXO00008159E36F73MVS
14.12.2007 24.12.2007 NY 18314CB41ADAC1C1 WB WB7650 TOFF000119
28.11.2007 25.12.2007 NY 1829769B1ACCA6BA CZ CZ8980 KLOM000067
04.12.2007 25.12.2007 NY 182C6A8813BC12B2 VV YVVZZ08 VDPS00011759EDC6B6MVS
04.12.2007 25.12.2007 AY 1817AFD40663889E WI YWI5959 WS8I000268593FE39D
14.12.2007 25.12.2007 NY 18282A20053408CF BP YBPMUT BPST00008859CA1D14MVS
14.12.2007 25.12.2007 NY 182EC87C03DB7ABC ER ER8020 EAMR000048
14.12.2007 25.12.2007 NY 182D838D099E1269 ER YERBER EAMR000048
14.12.2007 25.12.2007 NY 18297A870DD73A72 RI RI0810 RI00000024
14.12.2007 25.12.2007 NY 182FE927161E2B2E WC WC5010 WS8B000540
14.12.2007 25.12.2007 NY 182FE9271C78D4CD WC WC8410 WS8B000540
14.12.2007 27.12.2007 NY 182FE88D160B22E0 WB WB0630 WS8B000540
14.12.2007 27.12.2007 NY 182FE892026789A6 WB WB0680 WS8B000540
14.12.2007 28.12.2007 NY 18282A1B12DD2641 BP YBPMUT BPST00008859CA1D14
08.11.2007 31.12.2007 NY 181C3B180B30476D TN TN0530 OTXO000070
09.11.2007 31.12.2007 NY 181C394C1972BD5E DE DE0030 DE00000066
09.11.2007 31.12.2007 NY 181C38F4084364F1 DE DE0090 DE00000066
09.11.2007 31.12.2007 NY 181C38D600A7F2B4 DE YDE0021 DE000000665965EE7CMVS
04.12.2007 31.12.2007 NY 182B51321362BA9C RB YRBUXY1 RBK000000659E48F65MVS
14.12.2007 31.12.2007 NY 182CE2A40D4028A3 WQ WQ5950 CUBE000094
27.09.2007 01.01.2008 NY 18241CFE0E3C658D SN SN5000 SAVS000013
01.11.2007 01.01.2008 NY 18127FB40FCF83CC NL NL7590 BALR000073
01.11.2007 01.01.2008 NY 1826C38E09922368 WQ WQ6000 CUBE000114
02.11.2007 01.01.2008 NY 181677FA19061F57 WP YWPR5PX DBH00000965935AB22MVS
08.11.2007 01.01.2008 NN 181E1FD01E35DB38 SV SV0280 WSSV000196
08.11.2007 01.01.2008 NY 181C3AC1107EEC1B TN YTN0041 OTXO0000705965FE73
09.11.2007 01.01.2008 NY 181A0C4D08D4876B SV SV5940 WSSV000196
09.11.2007 01.01.2008 NY 181B4E770E6BAE39 WQ YWQ4501 CUBE000092595E40B8
24.11.2007 01.01.2008 AY 1817AFC90F6EC510 WI YWI5951 WS8I000268593FE342
04.12.2007 01.01.2008 AY 1817AFCB135F1EEE WI YWI5953 WS8I000268593FE353
04.12.2007 01.01.2008 AY 1817AFCD04DE6BE3 WI YWI5954 WS8I000268593FE360
04.12.2007 01.01.2008 AY 1817AFCF016D77C8 WI YWI5956 WS8I000268593FE371
04.12.2007 01.01.2008 AY 1817AFD102327F89 WI YWI5958 WS8I000268593FE383
04.12.2007 01.01.2008 AY 1817AFC8039BE815 WI YWI595A WS8I000268593FE337
07.02.2008 01.01.2008 NY 181B290A16FECF14 RA RA7240 EGB0000034
26.09.2007 02.01.2008 NY 177EBFD10E18E8D9 RT RT8401 A20Y001508
26.09.2007 02.01.2008 NY 18250FB111198E07 WF YWFSWC WSSW000086
02.11.2007 02.01.2008 NY 1822865B104DC77D RT YRT0006 TABS000163599ACE06
09.11.2007 02.01.2008 NY 181B4E3F1AA100B1 SV SV5790 WSSV000196
09.11.2007 02.01.2008 NY 18198D910ABAFDE1 VD VDDBM15 DSPV000042
01.02.2008 02.01.2008 NY 1829732B1DEAE0B5 NL NL7590 BALR000074
06.02.2008 02.01.2008 NY 18199BE40A236E0E DI DI5200 DI00000064
09.11.2007 03.01.2008 NY 1819E38913230775 CD YCDUPH0 UPDS000044
20.11.2007 03.01.2008 NY 182C9C3B0558C263 WQ YWQ4502 CUBE00009459EF685F
28.09.2007 04.01.2008 NY 182260FC0F0ECDD1 DP DP0320 DP00000072
05.02.2008 04.01.2008 NY 182D5B910E0EF0F8 MF MF8810 MFR0000135
06.02.2008 06.01.2008 NY 182809F90649941C TN YTN0100 OTXO00008159C90F4FMVS
08.02.2008 06.01.2008 NY 17B728E407CB878E CK YCKT020 DCA0000026
08.02.2008 06.01.2008 NY 180AA5EA10AA4719 CK YCKT025 DCA0000157
26.10.2007 07.01.2008 NY 18250FC50DE7802F WF WF5410 WSSW000086
02.11.2007 07.01.2008 NY 1818019F1FF9964B RB YRBUXY1 RBK0000001594291B9
08.11.2007 07.01.2008 NY 181B2BFC1ACCE4BB CZ CZ6300 KLOM000062
08.11.2007 07.01.2008 NY 181C395509B589B4 DE DE0830 DE00000066
08.11.2007 07.01.2008 NY 181B2AE31C62940C DE DE5600 DE00000066
08.11.2007 07.01.2008 NY 17D16E79100FE8ED IT IT5003 RFT0000015
08.11.2007 07.01.2008 NY 17D16E7C096D1E00 IT IT5010 RFT0000015
08.11.2007 07.01.2008 NY 177B50660BB6E3A1 IT YITD00 A20Y001509542023A5
08.11.2007 07.01.2008 NY 181C3ACC04F24690 TN YTN0170 OTXO0000705965FE9DMVS
08.11.2007 07.01.2008 NY 1817FCD7198A6BA0 VV YVVZZ30 VDPS00011459426994MVS
08.11.2007 07.01.2008 NY 181E0A5906FDFCEB WB YWBSA2 WS8B00044259752FC0MVS
09.11.2007 07.01.2008 NY 1819BDE801C16516 EC YECCRAC SYNC000028595120A9
09.11.2007 07.01.2008 NY 18287E5404CC7ED9 SN SN5000 SAVS000016
09.11.2007 07.01.2008 NY 181CE5090B2FF3E3 SV SV0950 WSSV000196
09.11.2007 07.01.2008 NY 181DF495160F6BB6 TN YTN0201 OTXO0000705974793F
09.11.2007 07.01.2008 NY 1825350D068EB174 WB WB5340 TOFF000117
09.11.2007 07.01.2008 NY 182535190875479B WB YWB530 WS8B000476
09.11.2007 07.01.2008 NY 181AAC51064064A8 WB YWBSUM WS8B0004425958F075MVS
16.12.2007 07.01.2008 NY 180A80CD13ED63E0 KX YKXO002 TLBO00002358D13DB6MVS
07.02.2008 07.01.2008 NY 182C9BAF10EA9250 DE DE0030 DE00000070
08.02.2008 07.01.2008 NY 182E03DA01A9B86B DE YDE0021 DE0000007059FB22DBMVS
26.10.2007 08.01.2008 NY 18250EDA10EEAF8A WF YWF64CA WSSW00008659B00DFB
31.10.2007 08.01.2008 NY 18252FDE14A20557 WB YWBSA4 WS8B00047659B12272MVS
01.11.2007 08.01.2008 NY 1814AE571004BA08 BP YBPMUT BPST0000805926ACAC
02.11.2007 08.01.2008 NY 182286851C29279F RT RT0200 TABS000163
02.11.2007 08.01.2008 NY 1822865E1104AE21 RT YRT0007 TABS000163599ACE23
02.11.2007 08.01.2008 NY 1817FCE51F8A9A79 VV YVVZZ08 VDPS000114594269CDMVS
03.11.2007 08.01.2008 NY 182530661A8D8968 MF MF8810 MFR0000132
03.11.2007 08.01.2008 NY 1824BF3316F2EFAC RT RT5910 TABS000163
08.11.2007 08.01.2008 NY 181B2AF305874F6A DE DE7120 DE00000066
08.11.2007 08.01.2008 NY 181A0AFF0CF32612 PC01 PC5060 IVN0000032
08.11.2007 08.01.2008 NY 181A0AFF0CF32612 PC02 PC5060 IVN0000032
08.11.2007 08.01.2008 NY 181A0AFF0CF32612 PC03 PC5060 IVN0000032
08.11.2007 08.01.2008 NY 181A0AFF0CF32612 PC04 PC5060 IVN0000032
08.11.2007 08.01.2008 NY 181A0AFF0CF32612 PC05 PC5060 IVN0000032
08.11.2007 08.01.2008 NY 181A0AFF0CF32612 PC06 PC5060 IVN0000032
08.11.2007 08.01.2008 NY 181A0AFF0CF32612 PC07 PC5060 IVN0000032
08.11.2007 08.01.2008 NY 182194F214F42E61 SV SV5640 WSSV000240
08.11.2007 08.01.2008 NY 182530EC1951048A SV SV5740 WSSV000199
08.11.2007 08.01.2008 NY 182530FB129E26BC SV SV5760 WSSV000199
08.11.2007 08.01.2008 NY 181B48F112AAF5D8 TN TN5004 OTXO000070
08.11.2007 08.01.2008 NY 181B48F008A06B67 TN TN5014 OTXO000070
08.11.2007 08.01.2008 NY 181B49080DA8EC2A TN TN5016 OTXO000070
08.11.2007 08.01.2008 NY 1817FD0708B5F769 VV YVVZZ16 VDPS00011459426A5DMVS
08.11.2007 08.01.2008 NY 181B878B0D9D5495 VV YVVZZ19 VDPS00011459600648MVS
09.11.2007 08.01.2008 NY 1822D8CB0B3D7465 AP YAPUTGK APEN000048599D816AMVS
09.11.2007 08.01.2008 NY 1808EEA306001923 AT AT8500 ACS0000013
09.11.2007 08.01.2008 NY 17C57B9F08EB0C71 BP BP5030 BPST000037
09.11.2007 08.01.2008 NY 17C57B9713F86E82 BP BP5060 BPST000037
09.11.2007 08.01.2008 NY 181FABF912C2C020 CZ CZ5190 LOMN000030
09.11.2007 08.01.2008 NY 181B2C1D19AE3B15 CZ CZ8980 KLOM000062
09.11.2007 08.01.2008 NY 181CE48101B6A554 ED ED0950 ED00000056
09.11.2007 08.01.2008 NY 181E1DEA0F45DB3D ER ER5080 EAMR000035
09.11.2007 08.01.2008 NY 181F3E541E46A486 ER YERBER EAMR000035
09.11.2007 08.01.2008 NY 1811E44018AC16D1 ER YERDUPD EAMR000028590F467B
09.11.2007 08.01.2008 NY 181B4616182D32D6 MF MF7230 MFR0000124
09.11.2007 08.01.2008 NY 1823ED910C7196D0 MF MF8620 MFR0000132
09.11.2007 08.01.2008 NY 1825306302D00ECC MF MF8800 MFR0000132
09.11.2007 08.01.2008 NY 1819985512BC9A25 NI YNIPACU IPC0000196594FE57D
09.11.2007 08.01.2008 NY 18202BA600E9C7F4 NI YNIPREU IPC000019659870E1AMVS
09.11.2007 08.01.2008 NY 1819985512BC9A25 NI01 YNIPACU IPC0000196594FE57D
09.11.2007 08.01.2008 NY 1819985512BC9A25 NI02 YNIPACU IPC0000196594FE57D
09.11.2007 08.01.2008 NY 17593D4A17D6C6E1 NL YNLG010 A12P00279953023EDA
09.11.2007 08.01.2008 NY 181A0B120AA93F9D PC PC8000 IVN0000032
09.11.2007 08.01.2008 NY 18241CFE1C23B877 SN SN5100 SAVS000013
09.11.2007 08.01.2008 NY 181B490A1AC57E74 TN TN5030 OTXO000070
09.11.2007 08.01.2008 NY 182534FC0B8DF7BB TN TN7080 OTXO000085
09.11.2007 08.01.2008 NY 181B4D5103D71475 UU UU5170 RS20000077
09.11.2007 08.01.2008 NY 1818A6281F8089F6 VV YVVZZ14 VDPS0001145947F5C7MVS
09.11.2007 08.01.2008 NY 1818A62B17845F25 VV YVVZZ17 VDPS0001145947F5E0MVS
09.11.2007 08.01.2008 NY 1818A6301FB4922E VV YVVZZ18 VDPS0001145947F613MVS
09.11.2007 08.01.2008 NY 181B4BB20EEAEC4B VV YVVZZ20 VDPS000114595E2936MVS
09.11.2007 08.01.2008 NY 1817FD1C0428F0E3 VV YVVZZ23 VDPS00011459426A7FMVS
09.11.2007 08.01.2008 NY 18187F2C038FC493 VV YVVZZ27 VDPS0001145946AEC8MVS
09.11.2007 08.01.2008 NY 181E294B005D5567 VV YVVZZ28 VDPS00011459763336MVS
09.11.2007 08.01.2008 NY 1818A6550FC31CFA VV YVVZZ29 VDPS0001145947F759MVS
09.11.2007 08.01.2008 NY 181DF5961B515E0D WB WB1080 TOFF000109
09.11.2007 08.01.2008 NY 181DF58A1831B87D WB WB1090 TOFF000109
09.11.2007 08.01.2008 NY 1825351F025970A3 WB WB1100 TOFF000117
09.11.2007 08.01.2008 NY 1825351E1A39AD79 WB WB1290 TOFF000117
09.11.2007 08.01.2008 NY 182534CF1843DAC9 WB WB5570 WS8B000476
09.11.2007 08.01.2008 NY 182534F7102E2A77 WC WC5010 OTXO000085
09.11.2007 08.01.2008 NY 182534F9089DAC0A WC WC5050 OTXO000085
09.11.2007 08.01.2008 NY 181B493C12EAF752 WC WC7280 OTXO000070
09.11.2007 08.01.2008 NY 181B495210AC32F4 WC WC8120 OTXO000070
09.11.2007 08.01.2008 NY 1825350B07522C4B WC WC8401 OTXO000085
09.11.2007 08.01.2008 NY 1825350A05B3B5C4 WC WC8410 OTXO000085
09.11.2007 08.01.2008 NY 181D5A3D0CCE3601 WI YWI0087 TOFF000109596F6A5DMVS
09.11.2007 08.01.2008 NY 1823ECA910719939 WL WL8600 WSAW000106
09.11.2007 08.01.2008 NY 181B4F910E6F30F1 WQ WQ6010 CUBE000092
09.11.2007 08.01.2008 NY 182281741FAC0927 YY YYWBERX TOFF000117599AA4C0MVS
14.12.2007 08.01.2008 NN 1818A63C01AC1A78 VV YVVZZ25 VDPS0001145947F674MVS
15.12.2007 08.01.2008 NY 181B481A044DDC45 WB WB5270 WSTS000055
15.12.2007 08.01.2008 NY 181B481C080B1E88 WB WB5290 WSTS000055
02.02.2008 08.01.2008 NY 182C67910C6217F2 CZ CZ5494 ACP0000112
02.02.2008 08.01.2008 NY 182D5B94121827C3 MF MF8940 MFR0000135
07.02.2008 08.01.2008 NY 182625F00ECC6499 FI YFI0110 BKUR00009559B932C8MVS
08.02.2008 08.01.2008 NY 1833FFF607E1229D WB WB0840 WSTS000062
22.05.2009 08.01.2008 NY 16C01B7400693E8D HP1 AOV6RK HPSVP2AOV6RK
22.05.2009 08.01.2008 NY 16C01B7400693E8D HP3 AOV6RK HPSVP2AOV6RK
22.05.2009 08.01.2008 NY 16C01B7400693E8D HPS AOV6RK HPSVP2AOV6RK
26.10.2007 09.01.2008 NY 182834FF04A794FE WF YWFSWC WSSW000104
02.11.2007 09.01.2008 NY 182154840C727F99 CZ CZ5494 ACP0000114
09.11.2007 09.01.2008 NY 178558EC0450FFF6 AT AT0620 A20Y001564
09.11.2007 09.01.2008 NY 181051610E195147 MF YMFC113 MFR0000111590212EB
09.11.2007 09.01.2008 NY 1792E87101DD88BC NL NL5000 BALR000012
09.11.2007 09.01.2008 NY 18132445031B1F90 NL NL7310 BALR000073
09.11.2007 09.01.2008 NY 1817AC6D140EC561 NL NL7750 BALR000073
09.11.2007 09.01.2008 NY 1817AC22075B1ED5 NL NL7810 BALR000073
09.11.2007 09.01.2008 NY 1792E7CD0260E1C6 NL YNLG020 BALR00001254E5FBC3
09.11.2007 09.01.2008 NY 1792E7CD17B69B75 NL YNLG021 BALR00001254E5FBC9
09.11.2007 09.01.2008 NY 1759B1E30CA3442E NL YNLG03M A12P002799530610F5
09.11.2007 09.01.2008 NY 1759B1E41FC78AD8 NL YNLG040 A12P00279953061102
09.11.2007 09.01.2008 NY 1759B1E613B468AD NL YNLG120 A12P0027995306110F
09.11.2007 09.01.2008 NY 175A25021AD53DA6 NL YNLG121 A12P0028275309D6A8
09.11.2007 09.01.2008 NY 17853DE417AE0D72 NL YNLG130 BALR00000154735D32
09.11.2007 09.01.2008 NY 1759B1EA0013827A NL YNLG140 A12P0027995306112C
09.11.2007 09.01.2008 NN 181CE3791B4E6F70 TN YTN0100 OTXO000070596B8607MVS
09.11.2007 09.01.2008 NY 1817FCF5030407FC VV YVVZZ15 VDPS00011459426A38MVS
09.11.2007 09.01.2008 NY 181AAB9F1CC56848 WB YWBMAS WS8B0004425958EA9AMVS
09.11.2007 09.01.2008 NY 181ACC0B10C55764 WB YWBWRK WS8B0004425959FAC1
09.11.2007 09.01.2008 NY 1816780E1735FE5D WP YWPR1QX DBH00000965935ABFFMVS
09.11.2007 09.01.2008 NY 181678081C27A2FD WP YWPR7PX DBH00000965935ABE2MVS
08.02.2008 09.01.2008 NY 182F998D0987CB8B BP YBPMUT BPST0000925A086E14MVS
08.02.2008 09.01.2008 NY 18297691054C03D3 CZ CZ5150 KLOM000067
08.02.2008 09.01.2008 NY 18287D610DBEB1F3 CZ CZ5280 KLOM000067
08.02.2008 09.01.2008 NY 18287BF1185A5D4A CZ CZ6400 GSER000187
08.02.2008 09.01.2008 NY 182827800307233C CZ CZ6500 GSER000187
08.02.2008 09.01.2008 NY 182A6672101B375A CZ YCZMLIM KLOM00006759DCDE22MVS
08.02.2008 09.01.2008 NY 182C98791F3F0A34 DE DE0810 DE00000070
08.02.2008 09.01.2008 NY 182FEABA1F43CE80 DE DE0820 DE00000080
08.02.2008 09.01.2008 NY 182885E91FAA32D5 DE DE0830 DE00000070
08.02.2008 09.01.2008 NY 1829956D1501CA8D DE DE0860 DE00000070
08.02.2008 09.01.2008 NY 182885D91296A296 DE DE0940 DE00000070
08.02.2008 09.01.2008 NY 1828F7A41A86614A EC EC5130 KLOM000067
08.02.2008 09.01.2008 NY 182F98EB053A8CD0 ER YERPRI EAMR000053
08.02.2008 09.01.2008 NY 182E8584036B0FFF GM GM0850 GM00000153
08.02.2008 09.01.2008 NY 1812B3490A67FE90 KR YKRT511 KAUF00003859160EE7MVS
08.02.2008 09.01.2008 NY 1827DEA10ED45350 MF YMFC113 MFR000013659C7A3DF
08.02.2008 09.01.2008 AY 181B2B4C0C5D5F94 MF YMFC115 MFR0000125595D19C9
08.02.2008 09.01.2008 NY 1819B3830335DA1F NZ NZDBM83 ZVBI000019
08.02.2008 09.01.2008 NY 1817AF13117B8DB4 PC YPC0570 IVN0000032593FDD43
08.02.2008 09.01.2008 NY 1828FB091B03B8C9 PC01 YPC0520 IVN000003559D0F5B8
08.02.2008 09.01.2008 NY 181D87B0041B2526 PC01 YPC0830 IVN00000325970E7C8
08.02.2008 09.01.2008 NY 1828FB091B03B8C9 PC02 YPC0520 IVN000003559D0F5B8
08.02.2008 09.01.2008 NY 181D87B0041B2526 PC02 YPC0830 IVN00000325970E7C8
08.02.2008 09.01.2008 NY 1828FB091B03B8C9 PC03 YPC0520 IVN000003559D0F5B8
08.02.2008 09.01.2008 NY 181D87B0041B2526 PC03 YPC0830 IVN00000325970E7C8
08.02.2008 09.01.2008 NY 1828FB091B03B8C9 PC04 YPC0520 IVN000003559D0F5B8
08.02.2008 09.01.2008 NY 181D87B0041B2526 PC04 YPC0830 IVN00000325970E7C8
08.02.2008 09.01.2008 NY 1828FB091B03B8C9 PC05 YPC0520 IVN000003559D0F5B8
08.02.2008 09.01.2008 NY 181D87B0041B2526 PC05 YPC0830 IVN00000325970E7C8
08.02.2008 09.01.2008 NY 1828FB091B03B8C9 PC06 YPC0520 IVN000003559D0F5B8
08.02.2008 09.01.2008 NY 181D87B0041B2526 PC06 YPC0830 IVN00000325970E7C8
08.02.2008 09.01.2008 NY 1828FB091B03B8C9 PC07 YPC0520 IVN000003559D0F5B8
08.02.2008 09.01.2008 NY 181D87B0041B2526 PC07 YPC0830 IVN00000325970E7C8
08.02.2008 09.01.2008 NY 1831536E1FE85151 RI RI0810 RI00000026
08.02.2008 09.01.2008 NY 1830D2AD0CF9B217 TN YTNUPD OTXO0000945A12B0F8
08.02.2008 09.01.2008 NY 182C6A770DCFCC74 VV YVVZZ11 VDPS00011759EDC6C1MVS
08.02.2008 09.01.2008 NY 182BA678018048FC VV YVVZZ13 VDPS00011759E75A9CMVS
08.02.2008 09.01.2008 NY 1828F5031162B44D VV YVVZZ32 VDPS00011759D0C30EMVS
08.02.2008 09.01.2008 NY 181C3D160E9B0534 WB WB0510 WSTS000055
08.02.2008 09.01.2008 NY 181C3D1317362D11 WB WB0520 WSTS000055
08.02.2008 09.01.2008 NY 1829969C1B6CCD53 WB WB0530 WSTS000057
08.02.2008 09.01.2008 NY 181C3D0212342DC0 WB WB0580 WSTS000055
08.02.2008 09.01.2008 NY 181C3D0102B7E31B WB WB0600 WSTS000055
08.02.2008 09.01.2008 NY 1833FFF107F249CA WB WB0630 WSTS000062
08.02.2008 09.01.2008 NY 181C3CFB1AAB51EE WB WB0660 WSTS000055
08.02.2008 09.01.2008 NY 1833FFF21D120C95 WB WB0680 WSTS000062
08.02.2008 09.01.2008 NY 181C3CD1170CA459 WB WB0870 WSTS000055
08.02.2008 09.01.2008 NY 181C3CCF17C160C6 WB WB0920 WSTS000055
08.02.2008 09.01.2008 NY 182996A010DC1DFF WB WB0940 WSTS000057
08.02.2008 09.01.2008 NY 181C3CCB172EC79B WB WB0950 WSTS000055
08.02.2008 09.01.2008 NY 181C3CCD1F403412 WB WB0960 WSTS000055
08.02.2008 09.01.2008 NY 181C3CC406753F55 WB WB1340 WSTS000055
08.02.2008 09.01.2008 NY 18204EB91EC9358A WB WB5040 WS8B000444
08.02.2008 09.01.2008 NY 181B4824159489A2 WB WB5280 WSTS000055
08.02.2008 09.01.2008 NY 181B481F1BBB06A5 WB WB7040 WSTS000055
08.02.2008 09.01.2008 NY 181B482602EC0984 WB WB7290 WSTS000055
08.02.2008 09.01.2008 NY 181B482A0DF62AFA WB WB7370 WSTS000055
08.02.2008 09.01.2008 NY 181B48391E85C989 WB WB7390 WSTS000055
08.02.2008 09.01.2008 NY 1825A89C1BE2FC0A WB WB7520 WSTS000058
08.02.2008 09.01.2008 NY 181B482F0A727620 WB WB7540 WSTS000055
08.02.2008 09.01.2008 NY 181B48320DD3F4BC WB WB7560 WSTS000055
08.02.2008 09.01.2008 NY 181B48431C7CC611 WB WB7561 WSTS000055
08.02.2008 09.01.2008 NY 1833FFD610A9E51C WB WB7650 TOFF000126
08.02.2008 09.01.2008 NY 181B483F043C505C WB WB7730 WSTS000055
08.02.2008 09.01.2008 NY 181B4832085E397F WB WB7871 WSTS000055
08.02.2008 09.01.2008 NY 1819BA6F13A88258 WB YWB551 WS8B00044259510292MVS
08.02.2008 09.01.2008 NY 182C8DBA0B6EB050 WB YWBEBSM WSTS00005759EEEEAF
08.02.2008 09.01.2008 NY 182D67AB0731EA23 WF YWFCB02 WSSW00010059F604C2MVS
08.02.2008 09.01.2008 NY 182D678519607A65 WF YWFM537 WSSW00010059F6038CMVS
08.02.2008 09.01.2008 NY 182A870B12068D60 WN YWNOLOG FOND00009559DDEF94MVS
08.02.2008 09.01.2008 NY 1833049C1B0B6BC4 WQ WQ5950 CUBE000116
08.02.2008 09.01.2008 NY 181B4DE5099E5909 WQ YWQEXCP CUBE000092595E3C05
08.02.2008 09.01.2008 NY 18191FBC06497F15 YX YXWB231 WSTS000055594BF1B9MVS
08.02.2008 09.01.2008 NY 1818747A0BE43812 YY YYFIKST BKUR00008059465507MVS
08.02.2008 09.01.2008 NY 18191FA0041BF040 YY YYWBERR WSTS000055594BF0A8MVS
09.02.2008 09.01.2008 NY 181B4830012488BA WB WB7400 WSTS000055
08.02.2008 10.01.2008 NY 182CBB2E0528F8ED SN SN5100 SAVS000015
08.02.2008 10.01.2008 NY 18285BB91897D8D1 VD VDGLH00 DSPV000044
08.02.2008 10.01.2008 NY 181C3D11076E04F9 WB WB0550 WSTS000055
08.02.2008 10.01.2008 NY 181B48311C2115E4 WB WB7270 WSTS000055
08.02.2008 10.01.2008 AY 18330E6E17E9E911 WI YWI5951 WS8I0003435A256D39
08.02.2008 10.01.2008 AY 18330E6F12CCC760 WI YWI5952 WS8I0003435A256D40
08.02.2008 10.01.2008 AY 18330E7006B6D5EF WI YWI5953 WS8I0003435A256D44
08.02.2008 10.01.2008 AY 18330E71096038CD WI YWI5956 WS8I0003435A256D4B
08.02.2008 10.01.2008 AY 18330E7108C72FCD WI YWI5957 WS8I0003435A256D4D
08.02.2008 10.01.2008 AY 18330E710C4DE25C WI YWI5958 WS8I0003435A256D50
08.02.2008 10.01.2008 AY 18330E711B4C0B13 WI YWI5959 WS8I0003435A256D54
08.02.2008 10.01.2008 AY 18330E6E11748E96 WI YWI595A WS8I0003435A256D37
08.02.2008 10.01.2008 NY 182C9C3A09BCAD0A WQ YWQ4501 CUBE00009459EF6858
08.02.2008 11.01.2008 NY 182885F619AD723D DE DE0400 DE00000070
08.02.2008 11.01.2008 NY 182885E600E60682 DE DE0410 DE00000070
08.02.2008 11.01.2008 NY 182C9880013FCB5D DE DE0420 DE00000070
08.02.2008 11.01.2008 NY 182885EE0928090D DE DE0430 DE00000070
08.02.2008 11.01.2008 NY 1828FA5B00278D1F VV YVVZZ12 VDPS00011759D0EFDAMVS
07.02.2008 14.01.2008 NY 182977D2058AE45A CZ CZ6300 KLOM000067
07.02.2008 14.01.2008 NY 182885C100894FE3 DE DE5600 DE00000070
07.02.2008 14.01.2008 NY 1827682612A2BF5A WB WB7440 WSTS000060
07.02.2008 14.01.2008 NY 181B483811734D84 WB WB7770 WSTS000055
08.02.2008 14.01.2008 NY 182DD6451B9CC616 EC YECCRAC SYNC00003059F9A49E
08.02.2008 14.01.2008 NY 182A62711B731854 TN YTN0101 OTXO00008159DCBCA0
08.02.2008 14.01.2008 NY 181913010BD238E1 TR YTRHISP AITR000041594B870D
08.02.2008 14.01.2008 NY 1833FFD007819E9D WB WB5340 TOFF000126
19.01.2008 15.01.2008 NY 183400A71EDB3498 ER ER8020 EAMR000053
07.02.2008 15.01.2008 NY 182835EF138E560D AP YAPUTGK APEN00004959CA802BMVS
07.02.2008 15.01.2008 NY 181B2AD7040534AF DE DE5690 DE00000066
07.02.2008 15.01.2008 NY 182CBB280C00CF30 SN SN5000 SAVS000015
07.02.2008 15.01.2008 NY 1823CDF118A17310 SN YSNB002 SAVS00001359A58A06
07.02.2008 15.01.2008 NY 182E8111012CCA11 TN TN5004 OTXO000081
07.02.2008 15.01.2008 NY 182E810A01038C2E TN TN5016 OTXO000081
07.02.2008 15.01.2008 NY 181B481A0C85C3E1 WB WB7441 WSTS000055
07.02.2008 15.01.2008 NY 181B483C12088EBD WB WB7470 WSTS000055
08.02.2008 15.01.2008 NY 1832DC7A18736311 BP BP5030 BPST000092
08.02.2008 15.01.2008 NY 182E80C112E8A2B7 CZ CZ5190 LOMN000034
08.02.2008 15.01.2008 NY 183215730FA6261A CZ CZ8980 GSER000211
08.02.2008 15.01.2008 NY 17EBD49D0A8893DC EQ YEQISRK EAGL00001857CFFEDB
08.02.2008 15.01.2008 NY 182856FA1C3F9E6A ER ER5080 EAMR000048
08.02.2008 15.01.2008 NY 18287E851C6356CE GM YGMSTEU GM0000015359CCE121MVS
08.02.2008 15.01.2008 NY 1827E0DC0C335646 MF MF7230 MFR0000135
08.02.2008 15.01.2008 NY 182744500E501441 MF MF7770 MFR0000135
08.02.2008 15.01.2008 NY 1827E15A10164428 MF MF8620 MFR0000135
08.02.2008 15.01.2008 NY 1828FBD50DB81F06 MF MF8800 MFR0000135
08.02.2008 15.01.2008 NY 18271CDD03DDF6B2 NI YNIPACU IPC000020959C14A76MVS
08.02.2008 15.01.2008 NY 182C4B631E0A7ED2 NI YNIPREU IPC000020959ECC21DMVS
08.02.2008 15.01.2008 NY 18271CDD03DDF6B2 NI01 YNIPACU IPC000020959C14A76MVS
08.02.2008 15.01.2008 NY 18271CDD03DDF6B2 NI02 YNIPACU IPC000020959C14A76MVS
08.02.2008 15.01.2008 NY 1829730E0C5E414F NL NL5000 BALR000074
08.02.2008 15.01.2008 NY 181A0B0A1AC0A815 PC PC5090 IVN0000032
08.02.2008 15.01.2008 NY 181A0B080BF89FC9 PC PC5150 IVN0000032
08.02.2008 15.01.2008 NY 1828594E0D8AD6F9 PC PC7100 IVN0000035
08.02.2008 15.01.2008 NY 182880AB1AEAFF22 PC PC8000 IVN0000035
08.02.2008 15.01.2008 NY 1828595715D2BA60 PC01 PC5060 IVN0000035
08.02.2008 15.01.2008 NY 1828595715D2BA60 PC02 PC5060 IVN0000035
08.02.2008 15.01.2008 NY 1828595715D2BA60 PC03 PC5060 IVN0000035
08.02.2008 15.01.2008 NY 1828595715D2BA60 PC04 PC5060 IVN0000035
08.02.2008 15.01.2008 NY 1828595715D2BA60 PC05 PC5060 IVN0000035
08.02.2008 15.01.2008 NY 1828595715D2BA60 PC06 PC5060 IVN0000035
08.02.2008 15.01.2008 NY 1828595715D2BA60 PC07 PC5060 IVN0000035
08.02.2008 15.01.2008 NY 1823CE1C06798B40 SN SN5006 SAVS000013
08.02.2008 15.01.2008 NY 183243810540D063 SV SV0950 WSSV000246
08.02.2008 15.01.2008 NY 1827D9FA15D678AA TN YTNSICH OTXO00008159C777D9
08.02.2008 15.01.2008 NY 1828882A1064CD7E UU UU5170 RS20000079
08.02.2008 15.01.2008 NY 18291E760E5D6408 VV YVVZZ17 VDPS00011759D21EC1MVS
08.02.2008 15.01.2008 NY 182923431C5EAA85 VV YVVZZ25 VDPS00011759D246F2MVS
08.02.2008 15.01.2008 NY 181B482217C8CC17 WB WB5090 WSTS000055
08.02.2008 15.01.2008 NY 181B483902A2C31C WB WB5260 WSTS000055
08.02.2008 15.01.2008 NY 18341F590EDA153B WB WB5270 WSTS000065
08.02.2008 15.01.2008 NY 18341F6018E8CCF8 WB WB5290 WSTS000065
08.02.2008 15.01.2008 NY 181B48271F50AB63 WB WB7280 WSTS000055
08.02.2008 15.01.2008 NY 181B482D0DE532E3 WB WB7410 WSTS000055
08.02.2008 15.01.2008 NY 181B482D0AA6E018 WB WB7420 WSTS000055
08.02.2008 15.01.2008 NY 181DF5BC0208ABD5 WB WB8650 TOFF000109
08.02.2008 15.01.2008 NY 183400000C9259CF WC WC5010 WSTS000062
08.02.2008 15.01.2008 NY 182E8135026D808D WC WC5050 OTXO000081
08.02.2008 15.01.2008 NY 1825350C14C8C654 WC WC7220 OTXO000085
08.02.2008 15.01.2008 NY 18253502188B9652 WC WC7240 OTXO000085
08.02.2008 15.01.2008 NY 182534F204C6EC26 WC WC7260 OTXO000085
08.02.2008 15.01.2008 NY 182E812317ED996C WC WC7280 OTXO000081
08.02.2008 15.01.2008 NY 1825350F0030FE42 WC WC7310 OTXO000085
08.02.2008 15.01.2008 NY 18253506015FA880 WC WC7320 OTXO000085
08.02.2008 15.01.2008 NY 1825350418934F44 WC WC7500 OTXO000085
08.02.2008 15.01.2008 NY 182534F41F8BF991 WC WC7530 OTXO000085
08.02.2008 15.01.2008 NY 1834000A06F6C60B WC WC8401 WSTS000062
08.02.2008 15.01.2008 NY 1833FFFD102242EA WC WC8410 WSTS000062
08.02.2008 15.01.2008 AY 18330E7013DC72CB WI YWI5954 WS8I0003435A256D47
08.02.2008 15.01.2008 NY 182D5EEC1A184F46 WL WL8600 WSAW000104
08.02.2008 15.01.2008 NY 182C9CD907867171 WQ WQ6010 CUBE000094
08.02.2008 15.01.2008 NY 181A046E0A291C88 YY YYWBVIN WSTS0000555953702BMVS
09.02.2008 15.01.2008 NY 181B48280797DBEA WB WB7320 WSTS000055
09.02.2008 15.01.2008 NY 181B48221360CA92 WB WB7330 WSTS000055
09.02.2008 15.01.2008 NY 181B4837037FE738 WB WB7340 WSTS000055
09.02.2008 15.01.2008 NY 181B482A14F9B1D5 WB WB7380 WSTS000055
09.02.2008 15.01.2008 NY 181B48241E46F8D4 WB WB7381 WSTS000055
08.02.2008 16.01.2008 NY 182FBB770EAF3D5E TN YTN0202 OTXO0000925A098A8AMVS
08.02.2008 16.01.2008 NY 181DF4B4023686AD TN YTN0210 OTXO00007059747A48
08.02.2008 16.01.2008 AY 1827E6B60DE283C1 WB YWBWRK WS8B00046959C7E7A6MVS
17.02.2008 16.01.2008 NY 18385E4E05B9ADD9 CZ CZ8010 APEN000050
17.02.2008 16.01.2008 NY 18385DCE04E3A030 CZ CZ8020 APEN000050
08.02.2008 17.01.2008 NY 182A8F8C17CC8305 ED ED0950 ED00000062
08.02.2008 17.01.2008 NY 17FE89A8071E1E31 NTA1P CZA0219 A02E000568586CDE37
08.02.2008 17.01.2008 NY 1828FDCA15B511F3 WI YWI0087 TOFF00011259D10C51MVS
08.02.2008 18.01.2008 NY 182F99880EDCE9B7 BP YBPMUT BPST0000925A086E14
07.02.2008 25.01.2008 NY 1822AB751B567188 CZ YCZM025 LOFT000049599C053FMVS
09.02.2008 30.01.2008 NY 1818A5FD0CD7D3BC VV YVVZZ3R VDPS0001145947F471MVS
08.02.2008 31.01.2008 NY 18207C8E03B40E04 BX YBXADBR CLOS0001805989B493MVS
08.02.2008 31.01.2008 NY 181D01071EFF58FD CZ YCZJABW GSER000170596C7E08MVS
08.02.2008 31.01.2008 NY 1817AC0B1DFF03BA CZ YCZPABW GSER000181593FC3E5
08.02.2008 31.01.2008 NY 17D11FC61AB273AA NTA1P CZA0013 A02E00056056EFE947
08.02.2008 31.01.2008 NY 1828835214C3F08C NTA1P CZA0215 A02E00058259CD097C
08.02.2008 31.01.2008 NY 1830D286004BCE73 TN YTNW100 OTXO0000945A12AF80MVS
08.02.2008 31.01.2008 NY 182A35830C65F21A TN YTNW170 OTXO00008159DB43A5MVS
08.02.2008 31.01.2008 NY 1828086F1EEB6F1D VV YVVZZ04 VDPS00011759C9027DMVS
08.03.2008 31.01.2008 YY 176164B10AD93BB4 ADBL ADB2PRP
never 01.02.2008 NY 18388827038BF38D NL NL7590 BALR000076
never 01.02.2008 NY 18399F4811F221D2 WQ WQ6000 CUBE000118
22.02.2008 05.02.2008 NY 1838642A0B36C2FB DE DE0090 DE00000077
21.02.2008 06.02.2008 NY 1839EF7A1C50FC95 DE DE0030 DE00000077
22.02.2008 06.02.2008 NY 183864320138C12E DE DE0050 DE00000077
22.02.2008 07.02.2008 NY 183AC1721966537F WB WB0510 WSTS000061
16.02.2008 09.02.2008 NY 183AC1B80F13FC35 WB WB5120 WSTS000061
16.02.2008 09.02.2008 NY 183AC1960E37DD65 WB WB7020 WSTS000061
16.02.2008 09.02.2008 NY 183AC1DD1F730DB2 WB WB7360 WSTS000061
12.06.2009 10.02.2008 NY 175DC05909B83990 HP1 ZVKUZRI HPSVP2ZVKUZRI
12.06.2009 10.02.2008 NY 175DC05909B83990 HP3 ZVKUZRI HPSVP2ZVKUZRI
11.02.2008 12.02.2008 NY 183B0B360E15C7EE WB WB0630 WSTS000061
11.02.2008 12.02.2008 NY 183B0B38156B7F1A WB WB0680 WSTS000061
21.02.2008 12.02.2008 NY 183A1A8A1EB0E8FA CZ CZ6300 KLOM000069
21.02.2008 12.02.2008 NY 183AC1E20ECFF34A WB WB7440 WSTS000061
21.02.2008 12.02.2008 NY 183AC1E50FA35B58 WB WB7770 WSTS000061
22.02.2008 12.02.2008 NY 1838641C013BB903 DE DE0420 DE00000077
22.02.2008 12.02.2008 NY 183AC1941A2DA759 WB WB0520 WSTS000061
22.02.2008 12.02.2008 NY 183AC1CE097EA2E8 WB WB0600 WSTS000061
22.02.2008 12.02.2008 NY 183AC1C91411C70D WB WB0660 WSTS000061
22.02.2008 12.02.2008 NY 183AC18C01E003B4 WB WB0920 WSTS000061
22.02.2008 12.02.2008 NY 183AC17D1EDB58A4 WB WB0940 WSTS000061
22.02.2008 12.02.2008 NY 183AC1DC0BC41F26 WB WB1340 WSTS000061
09.05.2008 12.02.2008 NY 1833083003B5796C PC YPC0570 IVN00000385A2538BCMVS
13.02.2008 13.02.2008 NY 182E092B1156CB86 VV YVVZZ33 VDPS00011759FB4F83MVS
20.02.2008 13.02.2008 NY 1838634D0E21B868 RA RA7240 EGB0000036
21.02.2008 13.02.2008 NY 18386400124A13EB DE DE5600 DE00000077
21.02.2008 13.02.2008 NY 183863E610EC6DBD DE DE5690 DE00000077
21.02.2008 13.02.2008 NY 18399EDA165E51E8 SN SN5000 SAVS000018
21.02.2008 13.02.2008 NY 183AC1CF15313E29 WB WB7441 WSTS000061
21.02.2008 13.02.2008 NY 183AC1A20DF58A73 WB WB7470 WSTS000061
22.02.2008 13.02.2008 NY 1839F73E1C54AB27 CZ CZ5190 LOMN000038
22.02.2008 13.02.2008 NY 1839F73D1787CCD8 CZ CZ8980 KLOM000069
22.02.2008 13.02.2008 NY 18399EDC0E39377D SN SN5100 SAVS000018
22.02.2008 13.02.2008 NY 183AC19E03CF5557 WB WB0530 WSTS000061
22.02.2008 13.02.2008 NY 183AC1751EDECFEA WB WB0580 WSTS000061
22.02.2008 13.02.2008 NY 183AC19A150B3F03 WB WB0950 WSTS000061
22.02.2008 13.02.2008 NY 183AC1911DCB20D6 WB WB0960 WSTS000061
22.02.2008 13.02.2008 NY 183AC1D2122C81BA WB WB5090 WSTS000061
22.02.2008 13.02.2008 NY 183AC1B002D07BED WB WB5260 WSTS000061
22.02.2008 13.02.2008 NY 183AC1BE12F0BC5F WB WB5270 WSTS000061
22.02.2008 13.02.2008 NY 183AC1E908892539 WB WB5290 WSTS000061
22.02.2008 13.02.2008 NY 183AC1B60EFBB612 WB WB7280 WSTS000061
22.02.2008 13.02.2008 NY 183AC1CC19F7DF9E WB WB7410 WSTS000061
22.02.2008 13.02.2008 NY 183AC1C21F3FB82C WB WB7420 WSTS000061
22.02.2008 13.02.2008 NY 183B0B3A0FA06533 WB WB8650 TOFF000122
22.02.2008 13.02.2008 NY 183AC19014C8320D WC WC5010 WSTS000061
22.02.2008 13.02.2008 NY 183AC1CC1CD093D1 WC WC5050 WSTS000061
22.02.2008 13.02.2008 NY 183AC1FC07FC070B WC WC7220 WSTS000061
22.02.2008 13.02.2008 NY 183AC1DA1EE75450 WC WC7240 WSTS000061
22.02.2008 13.02.2008 NY 183AC1E705C4FF6C WC WC7260 WSTS000061
22.02.2008 13.02.2008 NY 183AC1FE14094BDC WC WC7280 WSTS000061
22.02.2008 13.02.2008 NY 183AC1DD0A52AD3D WC WC7310 WSTS000061
22.02.2008 13.02.2008 NY 183AC1D4058AAF50 WC WC7320 WSTS000061
22.02.2008 13.02.2008 NY 183AC1B20B8F877D WC WC7500 WSTS000061
22.02.2008 13.02.2008 NY 183AC1F11FD2B616 WC WC7530 WSTS000061
22.02.2008 13.02.2008 NY 183AC2080516E17A WC WC8401 WSTS000061
22.02.2008 13.02.2008 NY 183B0C9A0EFD390B WC WC8410 WSTS000061
22.02.2008 13.02.2008 NY 183860761FDB5AE0 WL WL8600 WSAW000110
22.02.2008 13.02.2008 NY 1839AA5609FB4E83 WQ WQ5950 CUBE000118
22.02.2008 13.02.2008 NY 183B07F30EDA5573 WQ WQ6010 CUBE000118
07.08.2008 13.02.2008 NY 1825D76E0289AEA0 HB YHBK011 ASIA00013259B6A096
11.02.2008 14.02.2008 NY 183577DB03681FC4 WB YWBEBSM WSTS0000615A39A815MVS
13.02.2008 14.02.2008 NY 18385D8B1D38F301 VD VDGLH00 DSPV000047
22.02.2008 14.02.2008 NY 1838881D0C28FF5E NL NL5000 BALR000076
22.02.2008 14.02.2008 NY 183B0B170D4A05FC WB WB1090 TOFF000122
14.02.2008 15.02.2008 NY 183862E3172CD76D WQ YWQ4501 CUBE0001185A52231D
21.02.2008 15.02.2008 NY 183B0B1516CC80C8 WB WB0820 TOFF000122
22.02.2008 15.02.2008 NY 183B0B3D0130A622 WB WB0840 WSTS000061
14.03.2008 15.02.2008 NY 183577D302791E02 WB YWB0082 WSTS0000615A39A807MVS
09.05.2008 15.02.2008 NY 18191FBE00F669D5 YX YXWB021 WSTS000055594BF1C2MVS
22.02.2008 16.02.2008 NY 183B0B1200545349 WB WB1080 TOFF000122
never 29.02.2008 NY 183A1A5F0B347825 CZ CZ6400 GSER000206
21.02.2008 29.02.2008 NY 183AC1D51DD58D4D WB WB7040 WSTS000061
21.02.2008 29.02.2008 NY 183AC1F10034CD45 WB WB7390 WSTS000061
22.02.2008 29.02.2008 NY 183A1A6308A8BE9E CZ CZ6500 GSER000206
22.02.2008 29.02.2008 NY 1838690B1B609F65 EC EC5130 KLOM000069
22.02.2008 29.02.2008 NY 183B0D381BD50164 WB WB5040 WS8B000520
22.02.2008 29.02.2008 NY 183AC1DA0A0F34A9 WB WB5280 WSTS000061
22.02.2008 29.02.2008 NY 183AC1BB0E7DB729 WB WB7270 WSTS000061
22.02.2008 29.02.2008 NY 183AC1981F318662 WB WB7290 WSTS000061
22.02.2008 29.02.2008 NY 183AC1C91FC69517 WB WB7370 WSTS000061
22.02.2008 29.02.2008 NY 183AC1C007EFCEF0 WB WB7380 WSTS000061
22.02.2008 29.02.2008 NY 183AC19F1F2FEB7F WB WB7381 WSTS000061
22.02.2008 29.02.2008 NY 183AC1E01C10149E WB WB7400 WSTS000061
22.02.2008 29.02.2008 NY 183AC1F310D58820 WB WB7520 WSTS000061
22.02.2008 29.02.2008 NY 183AC1E30D458B40 WB WB7540 WSTS000061
22.02.2008 29.02.2008 NY 183AC1CF003A4F98 WB WB7560 WSTS000061
22.02.2008 29.02.2008 NY 183AC1C5185269D1 WB WB7561 WSTS000061
22.02.2008 29.02.2008 NY 183B0B1A032F89EE WB WB7650 TOFF000122
22.02.2008 29.02.2008 NY 183AC1F60130A53A WB WB7730 WSTS000061
22.02.2008 29.02.2008 NY 183AC1C909050118 WB WB7871 WSTS000061
09.05.2008 29.02.2008 NY 183577DB152862F5 WB YWB5417 WSTS0000615A39A861MVS
20.02.2008 01.03.2008 NY 1835405102269BF4 CZ YCZPABW GSER0001995A37D687MVS
21.02.2008 01.03.2008 NY 1838643E1A236A4F DE DE0830 DE00000077
22.02.2008 01.03.2008 NY 183B2FA41E17E9A9 CZ CZ5150 KLOM000069
22.02.2008 01.03.2008 NY 183AC1BD01A3E5A0 WB WB7320 WSTS000061
22.02.2008 01.03.2008 NY 183AC19D154DBA79 WB WB7330 WSTS000061
22.02.2008 01.03.2008 NY 183AC1EE0E3635AA WB WB7340 WSTS000061
29.02.2008 01.03.2008 NY 183BD1340BA2B019 ER ER8020 EAMR000061
22.02.2008 02.03.2008 NY 183864321E43A749 DE DE0400 DE00000077
22.02.2008 02.03.2008 NY 1839ED0D0A42A304 ED ED0950 ED00000071
14.03.2008 02.03.2008 NY 1828834913A18388 NTA1P CZA0255 A02E00058259CD092F
20.02.2008 03.03.2008 NY 183E5BC11F440D44 WQ YWQ4501 CUBE0001325A843C30
22.02.2008 03.03.2008 NY 1839EF800EAF6C4E DE DE0820 DE00000077
22.02.2008 03.03.2008 NY 1838643603D96F33 DE DE0940 DE00000077
26.06.2009 03.03.2008 NY 16A0879F0D4FD138 HP1 RWBK023 HPSVP2RWBK023
26.06.2009 03.03.2008 NY 16A0879F0D4FD138 HP3 RWBK023 HPSVP2RWBK023
22.02.2008 04.03.2008 NY 1838641D010CFA4C DE DE0410 DE00000077
22.02.2008 04.03.2008 NY 1838641B024C4353 DE DE0810 DE00000077
22.02.2008 04.03.2008 NY 1839798C1BA8ADA8 DE DE0860 DE00000077
22.02.2008 04.03.2008 NY 1839ED1405A97365 RI RI0810 RI00000027
14.03.2008 07.03.2008 NY 1837E54B04003412 NTA1P CZA0215 A02E0005745A4E0589
14.03.2008 08.03.2008 NY 1831CA6D0A25F6D0 ER YERBER EAMR000053
04.03.2008 10.03.2008 NY 183451190FA513AF CZ YCZJABW GSER0001995A2FFFC5MVS
never 11.03.2008 NY 18261D0D1F010506 WP YWPR2PX DBH000012659B8E89C
14.03.2008 31.03.2008 NY 182D843E1441CBDD NZ NZDBM83 ZVBI000021
14.03.2008 31.03.2008 NY 183DE8061292451E WB YWBEBSM WSTS0000695A80713EMVS
14.03.2008 31.03.2008 NY 1837BE561A816E6C WN YWNOLOG FOND0001065A4CBEB4MVS
13.03.2008 01.04.2008 NY 18356347080AFC3C AP YAPUTGK APEN0000505A38FBC3MVS
01.05.2008 01.04.2008 NY 1823CE1F174F5DBD SN SN5903 SAVS000013
02.05.2008 01.04.2008 NY 18261D3408908EA2 WP YWPR5PX DBH000012659B8E9C1MVS
09.05.2008 01.04.2008 NY 1839C90B0C5E2AEA VV YVVZZ12 VDPS0001185A5DDF82
13.03.2008 03.04.2008 NY 183F29560FF0C30D CZ YCZPABW VEFO0000455A8AF898MVS
02.05.2008 03.04.2008 NY 18321A5510E3BDD3 RB YRBUXY1 RBK00000185A1D6D88
02.05.2008 04.04.2008 NY 183538721B3EE313 CZ CZ5494 ACP0000115
02.05.2008 04.04.2008 NY 1830D0140186B080 MF MF8940 MFR0000148
02.05.2008 04.04.2008 NY 1837E6CD1F3DEB61 SN SN6007 SAVS000018
29.05.2009 05.04.2008 NY 17350B8909FC6030 HP1 ALSIRI HPSVP2ALSIRI
29.05.2009 05.04.2008 NY 17350B8909FC6030 HP3 ALSIRI HPSVP2ALSIRI
09.05.2008 06.04.2008 NY 1836343A01FC406E CK YCKT025 DCA0000188
04.05.2008 07.04.2008 NY 181B28940F777E49 CZ CZ7510 APEN000042
04.05.2008 07.04.2008 NY 18198DA416543BCB VD VDUTI41 DSPV000042
02.05.2008 08.04.2008 NY 182D5B931642F637 MF MF8930 MFR0000135
08.05.2008 08.04.2008 NY 180C5C4101678B29 KR YKRT397 VEFO00003458E0E01BMVS
09.05.2008 08.04.2008 NY 1838B74B04E905F2 SV SV0950 WSSV000248
09.05.2008 09.04.2008 NY 1833017D0F9CD871 BX YBXADBR CLOS0001835A25007AMVS
09.05.2008 09.04.2008 NY 1838691005B5F612 CZ CZ5280 KLOM000069
09.05.2008 09.04.2008 NY 182976891A82C016 EC YECUCRK SYNC00003059D501A0MVS
09.05.2008 09.04.2008 NY 180C5C3F12722594 KR YKRT385 VEFO00003458E0E00AMVS
09.05.2008 09.04.2008 NY 182CBB2506CA0F5D SN SN0200 SAVS000015
09.05.2008 09.04.2008 NY 181B9C9A066F4579 SN YSN100I SAVS0000055960D039
09.05.2008 09.04.2008 NY 181B9C9A1E4FC7E2 SN YSN101I SAVS0000055960D042
09.05.2008 09.04.2008 NY 181B9C9C1925A484 SN YSN103I SAVS0000055960D050
09.05.2008 09.04.2008 NY 181B9CC8057623FA SN YSN110I SAVS0000055960D1C4
09.05.2008 09.04.2008 NY 181B9CA208374FDF SN YSN120 SAVS0000055960D067
09.05.2008 09.04.2008 NY 181B9CA417EB77B7 SN YSN187I SAVS0000055960D095
09.05.2008 09.04.2008 NY 182CBA4A10CD65D5 SN YSNA005 SAVS00001559F06462
09.05.2008 09.04.2008 NY 181F3F0E099FEF2B SN YSND001 SAVS000005597F4D78
09.05.2008 09.04.2008 NY 181B9C7D1E8FEEB9 SN YSND003 SAVS0000055960CF4C
09.05.2008 09.04.2008 NY 181B9C7E1B2359ED SN YSND004 SAVS0000055960CF54
09.05.2008 09.04.2008 NY 181B9C7F1A5C29C9 SN YSND005 SAVS0000055960CF5D
09.05.2008 09.04.2008 NY 181B9C8B0093806B SN YSND014 SAVS0000055960CFBC
09.05.2008 09.04.2008 NY 181B9C8B1EA8591B SN YSND015 SAVS0000055960CFC3
09.05.2008 09.04.2008 NY 181B9C8C1E40A05F SN YSNI001 SAVS0000055960CFCC
09.05.2008 09.04.2008 NY 1823CDFD0786DCDF SN YSNI003 SAVS00001359A58A67
09.05.2008 09.04.2008 NY 1835776F0D4B98ED TN YTNW100 CSQS0000075A39A4F1MVS
09.05.2008 09.04.2008 NY 1830B6E915E88DAF TR YTRHISP AITR0000475A11C803MVS
09.05.2008 09.04.2008 NY 182998FB175A9A89 VD YVDRES VDSS00010259D6229C
09.05.2008 09.04.2008 NY 183B10421CCC957F VV YVV3EIP VDPS0001185A68985AMVS
09.05.2008 09.04.2008 NY 1839CB7F087E5FFE VV YVVZZ04 VDPS0001185A5DF2D6MVS
09.05.2008 09.04.2008 NY 1829243A01ED2F4D VV YVVZZ07 VDPS00011759D24F27MVS
09.05.2008 09.04.2008 NY 18323C1908597B86 VV YVVZZ32 VDPS0001185A1E88B5MVS
09.05.2008 09.04.2008 NY 18191FF604E3B4BC VW YVWB641 WSTS000055594BF359MVS
09.05.2008 09.04.2008 NY 181B482C1BB27209 WB WB7880 WSTS000055
09.05.2008 09.04.2008 NY 1819B9520C3A9E96 WB YWBDGP WS8B0004425950FA22MVS
09.05.2008 09.04.2008 AY 1827DB770637A060 WI YWINS01 WS8I00029559C78926MVS
09.05.2008 09.04.2008 AY 1827DB760EF31B6F WI YWINS02 WS8I00029559C7892FMVS
09.05.2008 09.04.2008 AY 1827DB781C745302 WI YWINS03 WS8I00029559C7893AMVS
09.05.2008 09.04.2008 AY 1827DB7E06EE4F7D WI YWINS04 WS8I00029559C78947MVS
09.05.2008 09.04.2008 AY 1827DB7E07F2440D WI YWINS05 WS8I00029559C78950MVS
09.05.2008 09.04.2008 AY 1827DB7F0FC48985 WI YWINS06 WS8I00029559C78959MVS
09.05.2008 09.04.2008 AY 1827DB7C156E829B WI YWINS07 WS8I00029559C78966MVS
09.05.2008 09.04.2008 AY 1827DB8009B71C5F WI YWINS08 WS8I00029559C7898DMVS
09.05.2008 09.04.2008 AY 1827DB821DB68241 WI YWINS09 WS8I00029559C78995MVS
09.05.2008 09.04.2008 AY 1827DB830546529D WI YWINS10 WS8I00029559C789A1MVS
09.05.2008 09.04.2008 NY 18261CE3147F6401 WP YWPL5P1 DBH000012659B8E717MVS
09.05.2008 09.04.2008 NY 18261CE8181C55AC WP YWPL8P1 DBH000012659B8E744MVS
09.05.2008 09.04.2008 NY 18261D11084946C5 WP YWPR2PX DBH000012659B8E89CMVS
09.05.2008 09.04.2008 NY 18261F6310F0DE76 WP YWPR6PX DBH000012659B8FB2EMVS
09.05.2008 09.04.2008 NY 18261F6E0B52B762 WP YWPR7PX DBH000012659B8FB4BMVS
09.05.2008 09.04.2008 NY 1826204404A2E54E WP YWPRAPX DBH000012659B90365MVS
09.05.2008 09.04.2008 NY 18261F3D1AE3565B WP YWPRCPX DBH000012659B8FAB2MVS
09.05.2008 09.04.2008 NY 18261F3E033106D9 WP YWPRDPX DBH000012659B8FAC3
09.05.2008 09.04.2008 NY 18191FC10C8F9119 YX YXWB011 WSTS000055594BF1D5MVS
09.05.2008 09.04.2008 NY 18191FBA1E7C88EA YX YXWB116 WSTS000055594BF1B0MVS
09.05.2008 09.04.2008 NY 183577E21429B53C YX YXWB231 WSTS0000615A39A8B6MVS
09.05.2008 09.04.2008 NY 1839CABB0F6CC418 YY YYFIKST BKUR0000965A5DE9E3MVS
09.05.2008 09.04.2008 NY 183577E71F153012 YY YYWBERR WSTS0000615A39A896MVS
09.05.2008 09.04.2008 NY 183577CE0751ADE5 YY YYWBERX TOFF0001225A39A7DFMVS
09.05.2008 09.04.2008 NY 18191FBF13B0DEB6 YY YYWBESM WSTS000055594BF1CCMVS
10.05.2008 09.04.2008 NY 1824E1921E3AF7B0 VD VDDBM01 DSPV000044
10.05.2008 09.04.2008 NY 18134A4318AA4A30 VD VDDBM04 DSPV000042
10.05.2008 09.04.2008 NY 183DDEC91E45FFFB VD VDGLH00 DSPV000050
10.05.2008 09.04.2008 NY 1824E198035338B8 VD VDINI01 DSPV000044
10.05.2008 09.04.2008 NY 18134A351DD80C62 VD VDREC00 DSPV000042
10.05.2008 09.04.2008 NY 1824DF6100693A94 VD YVDDFA DSPV00004459AE7FA5MVS
10.05.2008 09.04.2008 NY 1829450A0E4AEA87 VV YVVZZ05 VDPS00011759D36248MVS
10.05.2008 09.04.2008 NY 1839C8CB00488F3B VV YVVZZ3R VDPS0001185A5DDB06MVS
25.08.2008 09.04.2008 NY 18261D0B1414CBDD WP YWPR1PX DBH000012659B8E86BMVS
07.05.2008 14.04.2008 NY 182601F20B51C94C ER YERDCUR EAMR00004859B80521MVS
02.05.2008 15.04.2008 NY 18261D080413902C WP YWPR1PX DBH000012659B8E86B
09.05.2008 15.04.2008 NY 1839ECF801680C75 MF YMFC110 MFR00001495A5F0CE2
09.05.2008 15.04.2008 NY 183F488B0039A181 WQ YWQ4501 CUBE0001295A8BFE05
09.05.2008 17.04.2008 NY 183F488E06E81464 WQ YWQBERI CUBE0001295A8BFDDF
09.05.2008 18.04.2008 AY 183578840B87DA99 WB YWBWRK WS8B0005185A39AE0EMVS
09.05.2008 22.04.2008 NY 182718F7011EF702 VD VDDBM15 DSPV000044
09.05.2008 22.04.2008 NY 177E95D112253231 WB WB7300 A06M025453
09.05.2008 22.04.2008 NY 1819B95600C828CF WB YWBDGP2 WS8B0004425950FA29MVS
07.05.2008 23.04.2008 NY 183B104111800348 VV YVV3EIP VDPS0001185A68985A
08.05.2008 23.04.2008 NY 182D5B3316144327 MF MF7010 MFR0000135
08.05.2008 23.04.2008 NY 182D5B650EB9A64C MF MF7901 MFR0000135
08.05.2008 23.04.2008 NY 181D828C0E5074AC SN YSN202I SAVS0000055970BC9A
08.05.2008 23.04.2008 NY 181B9C811899B1E0 SN YSND007 SAVS0000055960CF6D
08.05.2008 23.04.2008 NY 181B9C8215C2DAC8 SN YSND008 SAVS0000055960CF75
08.05.2008 23.04.2008 NY 1823CDFB0EDA5F7C SN YSND010 SAVS00001359A58A57
08.05.2008 23.04.2008 NY 181D829E017E7DE9 SN YSND011 SAVS0000055970BD39
08.05.2008 23.04.2008 NY 182A3D7A0C27EFBA VV YVVZZ19 VDPS00011759DB8665MVS
08.05.2008 23.04.2008 NY 182C6A950192651A VV YVVZZ30 VDPS00011759EDC710MVS
09.05.2008 23.04.2008 NY 1837E6FC116AFB5B ER ER5080 EAMR000061
09.05.2008 23.04.2008 NY 1840B2DF1901E4D0 ER ER8020 EAMR000069
09.05.2008 23.04.2008 NY 18299E0A1B8A37C5 NL NL7310 BALR000074
09.05.2008 23.04.2008 NY 1829733718EFB4E1 NL NL7810 BALR000074
09.05.2008 23.04.2008 NY 1829252E15CB1F29 VV YVVZZ14 VDPS00011759D2568EMVS
09.05.2008 23.04.2008 NY 1839CAC316B685F1 VV YVVZZ17 VDPS0001185A5DEDE3MVS
09.05.2008 23.04.2008 NY 182EC58813EF1B88 VV YVVZZ18 VDPS0001175A017B9CMVS
09.05.2008 23.04.2008 NY 182EC59904775180 VV YVVZZ20 VDPS0001175A017C26MVS
09.05.2008 23.04.2008 NY 182C6A840C1ABFD6 VV YVVZZ23 VDPS00011759EDC6E4MVS
09.05.2008 23.04.2008 NY 182A3D9A17BAA45A VV YVVZZ27 VDPS00011759DB8776MVS
09.05.2008 23.04.2008 NY 182C6A8E11634856 VV YVVZZ28 VDPS00011759EDC6FAMVS
09.05.2008 23.04.2008 NY 183E363E059B0AFB VV YVVZZ33 VDPS0001745A83012DMVS
09.05.2008 23.04.2008 NY 1818A640116B32F2 VV YVVZZGR VDPS0001145947F6A7MVS
09.05.2008 23.04.2008 NY 1819BDF10C9721EC VV YVVZZQR VDPS000114595120D5MVS
09.05.2008 23.04.2008 NY 18261F411C58204A WP YWPRDPX DBH000012659B8FAC3MVS
08.05.2008 24.04.2008 NY 1839F52203BA7BC2 ER YERPRI EAMR000061
08.05.2008 24.04.2008 NY 181B9C9B14534D98 SN YSN102I SAVS0000055960D048
08.05.2008 24.04.2008 NY 181B9C9E124C7C6F SN YSN111I SAVS0000055960D060
08.05.2008 24.04.2008 NY 181B9CA3016EA83A SN YSN183I SAVS0000055960D087
08.05.2008 24.04.2008 NY 181C42601CE75B56 SN YSN201I SAVS00000559663EDB
08.05.2008 24.04.2008 NY 18399EB505F3737E SN YSNB002 SAVS0000185A5C7C5F
09.05.2008 24.04.2008 NY 183420040F747796 EC YECCRAC SYNC0000325A2E6436
09.05.2008 24.04.2008 NY 1837BBB11BF1F29A MF MF7230 MFR0000148
09.05.2008 24.04.2008 NY 182D5B4F17275DB7 MF MF7550 MFR0000135
09.05.2008 24.04.2008 NY 1837BBDF1D3B80C3 MF MF8620 MFR0000148
09.05.2008 24.04.2008 NY 183310CF0870F9F8 MF MF8800 MFR0000148
09.05.2008 24.04.2008 NY 182DB4421FE368C1 NI YNIPACU IPC000022959F8874AMVS
09.05.2008 24.04.2008 NY 182DB4B9075F6A1F NI YNIPREU IPC000022959F88B30MVS
09.05.2008 24.04.2008 NY 182DB4421FE368C1 NI01 YNIPACU IPC000022959F8874AMVS
09.05.2008 24.04.2008 NY 182DB4421FE368C1 NI02 YNIPACU IPC000022959F8874AMVS
09.05.2008 24.04.2008 NY 183975060C170859 PC PC5090 IVN0000038
09.05.2008 24.04.2008 NY 183975071CBB84AE PC PC5150 IVN0000038
09.05.2008 24.04.2008 NY 183308EF0D81CF79 PC PC7100 IVN0000038
09.05.2008 24.04.2008 NY 183308F108599050 PC PC8000 IVN0000038
09.05.2008 24.04.2008 NY 183583430125ADA9 PC01 PC5060 IVN0000038
09.05.2008 24.04.2008 NY 183583430125ADA9 PC02 PC5060 IVN0000038
09.05.2008 24.04.2008 NY 183583430125ADA9 PC03 PC5060 IVN0000038
09.05.2008 24.04.2008 NY 183583430125ADA9 PC04 PC5060 IVN0000038
09.05.2008 24.04.2008 NY 183583430125ADA9 PC05 PC5060 IVN0000038
09.05.2008 24.04.2008 NY 183583430125ADA9 PC06 PC5060 IVN0000038
09.05.2008 24.04.2008 NY 183583430125ADA9 PC07 PC5060 IVN0000038
09.05.2008 24.04.2008 NY 181B9CDC0D5612F7 SN SN5003 SAVS000005
09.05.2008 24.04.2008 NY 1823CE1B0546200E SN SN5004 SAVS000013
09.05.2008 24.04.2008 NY 1823CE1B1C43A74D SN SN5005 SAVS000013
09.05.2008 24.04.2008 NY 1837C73001709EEE SN SN5006 SAVS000018
09.05.2008 24.04.2008 NY 1823F5DE16E55444 SN SN5901 SAVS000013
09.05.2008 24.04.2008 NY 1837E6C8107D76D4 SN SN6005 SAVS000018
09.05.2008 24.04.2008 NY 1823CDFC06D6C4F4 SN YSND012 SAVS00001359A58A5C
09.05.2008 24.04.2008 NY 1823CDFC1FFF69D6 SN YSND013 SAVS00001359A58A61
09.05.2008 24.04.2008 NY 183541EE0A6A5AEF UU UU5170 RS20000080
09.05.2008 24.04.2008 NY 183577E202F1F921 YY YYWBVIN WSTS0000615A39A89AMVS
08.05.2008 25.04.2008 NY 1819138A0AC1B2B8 DE YDELSTO DE00000066594B8B81
09.05.2008 28.04.2008 NY 180C666B0959B4D9 CZ YCZM435 BEWI00002658E13572MVS
09.05.2008 28.04.2008 NY 182652A41B0C051E ER YERDUPD EAMR00004859BAAA26
09.05.2008 28.04.2008 NY 18261D0D1A3682C1 WP YWPR1QX DBH000012659B8E877MVS
24.07.2008 28.04.2008 NY 1839F104038A7D5C ER YERDCUR EAMR0000615A5F2EBCMVS
09.05.2008 29.04.2008 NY 183634371527F710 CK YCKT020 DCA0000188
09.05.2008 29.04.2008 NY 183307DB094649A5 PC01 YPC0520 IVN00000385A2535B3MVS
09.05.2008 29.04.2008 NY 1839783F1B9E97A3 PC01 YPC0830 IVN00000385A5B39A6MVS
09.05.2008 29.04.2008 NY 183307DB094649A5 PC02 YPC0520 IVN00000385A2535B3MVS
09.05.2008 29.04.2008 NY 1839783F1B9E97A3 PC02 YPC0830 IVN00000385A5B39A6MVS
09.05.2008 29.04.2008 NY 183307DB094649A5 PC03 YPC0520 IVN00000385A2535B3MVS
09.05.2008 29.04.2008 NY 1839783F1B9E97A3 PC03 YPC0830 IVN00000385A5B39A6MVS
09.05.2008 29.04.2008 NY 183307DB094649A5 PC04 YPC0520 IVN00000385A2535B3MVS
09.05.2008 29.04.2008 NY 1839783F1B9E97A3 PC04 YPC0830 IVN00000385A5B39A6MVS
09.05.2008 29.04.2008 NY 183307DB094649A5 PC05 YPC0520 IVN00000385A2535B3MVS
09.05.2008 29.04.2008 NY 1839783F1B9E97A3 PC05 YPC0830 IVN00000385A5B39A6MVS
09.05.2008 29.04.2008 NY 183307DB094649A5 PC06 YPC0520 IVN00000385A2535B3MVS
09.05.2008 29.04.2008 NY 1839783F1B9E97A3 PC06 YPC0830 IVN00000385A5B39A6MVS
09.05.2008 29.04.2008 NY 183307DB094649A5 PC07 YPC0520 IVN00000385A2535B3MVS
09.05.2008 29.04.2008 NY 1839783F1B9E97A3 PC07 YPC0830 IVN00000385A5B39A6MVS
09.05.2008 29.04.2008 NY 182954880499454A YY YYDB2FK TOFF00011259D3E46AMVS
09.05.2008 30.04.2008 NY 1829546706589227 WB YWBITV TOFF00011259D3E350MVS
10.05.2008 01.05.2008 NY 1839C90C1AE2433E VV YVVZZ12 VDPS0001185A5DDF82MVS
08.05.2008 02.05.2008 NY 18261D300A5EC34F WP YWPR4PX DBH000012659B8E9A0MVS
09.05.2008 07.05.2008 NY 18261D2D058ACF18 WP YWPR3PX DBH000012659B8E97FMVS
08.05.2008 08.05.2008 NY 1834A059156B6111 MF YMFC113 MFR00001495A3298BA
13.06.2008 10.05.2008 NY 18294E2801D1659D VV YVVZZ16 VDPS00011759D3AED0MVS
08.08.2008 10.05.2008 NY 1838642B166A28FA DE DE0060 DE00000077
10.07.2008 23.05.2008 NY 1825F762167B341E ER YERDGET EAMR00004859B7AC83MVS
24.07.2008 23.05.2008 NY 1812FBB900011DA3 ER YERDINS EAMR00003559186E95MVS
09.11.2008 31.05.2008 NY 180AC95716739B6D CZ YCZT235 GSER00017058D39E3D
08.08.2008 11.06.2008 NY 180AC9B218F633C3 CZ YCZT397 GSER00017058D3A132
08.08.2008 12.06.2008 NY 183577CA01DD12DD YY YYWBERX TOFF0001225A39A7DF
08.08.2008 12.06.2008 NY 18191FA51C7886F1 YY YYWBPRI WSTS000055594BF0FFMVS
16.05.2008 13.06.2008 NY 17FF3A421E5D52CA WP YWPR6PX DBH00000835872A791
08.08.2008 19.06.2008 NY 182A66E21AE8F997 EQ YEQISRK EAGL00002459DCE1D0MVS
13.06.2008 24.06.2008 NY 18294E2418CFC279 VV YVVZZ16 VDPS00011759D3AED0
13.06.2008 30.06.2008 AY 182855F0108A139D SV YSVVORM WSSV000200
04.08.2008 03.07.2008 NY 183B0A921F4BD645 SN SN6006 SAVS000018
08.08.2008 03.07.2008 NY 183885BD0A967610 DE YDE0021 DE000000775A53475EMVS
08.08.2008 04.07.2008 NY 1838642B1E52B078 DE DE0100 DE00000077
13.11.2008 07.07.2008 NY 18280AE2014FEBAF EQ YEQKDGP GSER00018759C91710MVS
08.08.2008 08.07.2008 NY 180B4A66188C5FFC CZ YCZJ323 GSER00017058D7E6D6MVS
08.08.2008 08.07.2008 NY 180C6654079144F5 CZ YCZT435 BEWI00002658E1347CMVS
08.08.2008 08.07.2008 NY 182924371E28547F VV YVVZZ07 VDPS00011759D24F27
08.08.2008 08.07.2008 NY 182B298C1F4B65C6 VV YVVZZ10 VDPS00011759E342BEMVS
08.08.2008 08.07.2008 NY 183427641BA304C7 WF YWFM537 WSSW0001055A2EA204MVS
08.08.2008 08.07.2008 NY 183862B0087A03B3 WQ YWQEXCP CUBE0001185A52216F
08.08.2008 09.07.2008 NY 1839CA750924A4B4 FI YFI0110 BKUR0000965A5DE7BDMVS
08.08.2008 09.07.2008 NY 1839CAAE0C1524D6 VV YVVZZ11 VDPS0001185A5DED1EMVS
08.08.2008 09.07.2008 NY 18323C10058831A0 VV YVVZZ14 VDPS0001185A1E887D
08.08.2008 10.07.2008 NY 180AC97D1FFC807B CZ YCZT328 GSER00017058D39F5FMVS
08.08.2008 10.07.2008 NY 183422771DD938A4 GM YGMSTEU GM000001605A2E77C8MVS
08.08.2008 11.07.2008 NY 180B4A721A8A1DC9 CZ YCZJ431 GSER00017058D7E73DMVS
08.08.2008 11.07.2008 NY 180AC9B409BB30BC CZ YCZT397 GSER00017058D3A132MVS
09.08.2008 12.07.2008 NY 180AC97C03C4EFC5 CZ YCZT328 GSER00017058D39F5F
08.10.2008 18.07.2008 NY 182A188F0DA7FF98 KR YKRT511 KAUF00004059DA50DA
08.08.2008 21.07.2008 NY 18323C0E14E65B8A VV YVVZZ09 VDPS0001185A1E8862MVS
07.08.2008 22.07.2008 NY 18323C1210F8CCB0 VV YVVZZ19 VDPS0001185A1E888B
08.08.2008 22.07.2008 NY 183310B512964AD9 MF MF7770 MFR0000148
08.08.2008 22.07.2008 NY 18323C1504194608 VV YVVZZ25 VDPS0001185A1E8896MVS
08.08.2008 22.07.2008 NY 18323C1500910915 VV YVVZZ27 VDPS0001185A1E889E
08.08.2008 22.07.2008 NY 182C6A9218329C04 VV YVVZZ29 VDPS00011759EDC703MVS
08.08.2008 22.07.2008 NY 18292756106C9A8A VV YVVZZ31 VDPS00011759D26946MVS
08.08.2008 22.07.2008 NY 1817FD0D0716185C VV YVVZZAR VDPS00011459426A66MVS
08.08.2008 22.07.2008 NY 1818A64F10B60BDD VV YVVZZNR VDPS0001145947F723MVS
never 23.07.2008 NY 1817FD0708A55FA3 VV YVVZZJR VDPS00011459426A61MVS
08.08.2008 25.07.2008 NY 1839CA7906DA62A9 FI YFI0120 BKUR0000965A5DE7D4MVS
08.08.2008 30.07.2008 NY 1839CAAC0843B125 VV YVVZZ11 VDPS0001185A5DED1E
08.08.2008 31.07.2008 NY 182C6A7E07B7D479 VV YVVZZ15 VDPS00011759EDC6CAMVS
never 01.08.2008 NY 182C6A771B57340A VV YVVZZ15 VDPS00011759EDC6CA
08.08.2008 01.08.2008 NY 18353AF51E4C1CA1 VV YVVZZ13 VDPS0001185A37A9AAMVS
05.12.2006 02.08.2008 NY 161FDE100532ED80 PHPS53 H1002
05.12.2006 02.08.2008 NY 161FDE1A16B59890 PHPS53 H1007
05.12.2006 02.08.2008 NY 161FDE22042F2988 PHPS53 H1010
05.12.2006 02.08.2008 NY 161FDE27046055A8 PHPS53 H1013
05.12.2006 02.08.2008 NY 161FDE2912808880 PHPS53 H1014
05.12.2006 02.08.2008 NY 161FDE2C01AA4750 PHPS53 H1015
05.12.2006 02.08.2008 NY 161FDE2E1621F790 PHPS53 H1016
05.12.2006 02.08.2008 NY 161FDE31070D19E8 PHPS53 H1017
05.12.2006 02.08.2008 NY 161FDE381429AFC0 PHPS53 H1020
05.12.2006 02.08.2008 NY 161FDE7A15CBD0B8 PHPS53 H1048
05.12.2006 02.08.2008 NY 161FECE2181277D0 PHPS53 H1064
05.12.2006 02.08.2008 NY 161FECEF0A249C48 PHPS53 H1068
05.12.2006 02.08.2008 NY 161FED1C0D617888 PHPS53 H1085
05.12.2006 02.08.2008 NY 161FED1E1D792E90 PHPS53 H1086
05.12.2006 02.08.2008 NY 161FED380BE31F50 PHPS53 H1096
05.12.2006 02.08.2008 NY 161FED3A1C1E60F8 PHPS53 H1097
05.12.2006 02.08.2008 NY 161FED4A1E930520 PHPS53 H1113
05.12.2006 02.08.2008 NY 161FED56065A0978 PHPS53 H1118
05.12.2006 02.08.2008 NY 161FEDCB0558D420 PHPS53 H1159
05.12.2006 02.08.2008 NY 161FEDD0158252E8 PHPS53 H1161
05.12.2006 02.08.2008 NY 161FDE100532ED80 PHPSPTA H1002
05.12.2006 02.08.2008 NY 161FDE1A16B59890 PHPSPTA H1007
05.12.2006 02.08.2008 NY 161FDE22042F2988 PHPSPTA H1010
05.12.2006 02.08.2008 NY 161FDE27046055A8 PHPSPTA H1013
05.12.2006 02.08.2008 NY 161FDE2912808880 PHPSPTA H1014
05.12.2006 02.08.2008 NY 161FDE2C01AA4750 PHPSPTA H1015
05.12.2006 02.08.2008 NY 161FDE2E1621F790 PHPSPTA H1016
05.12.2006 02.08.2008 NY 161FDE31070D19E8 PHPSPTA H1017
05.12.2006 02.08.2008 NY 161FDE381429AFC0 PHPSPTA H1020
05.12.2006 02.08.2008 NY 161FDE7A15CBD0B8 PHPSPTA H1048
05.12.2006 02.08.2008 NY 161FECE2181277D0 PHPSPTA H1064
05.12.2006 02.08.2008 NY 161FECEF0A249C48 PHPSPTA H1068
05.12.2006 02.08.2008 NY 161FED1C0D617888 PHPSPTA H1085
05.12.2006 02.08.2008 NY 161FED1E1D792E90 PHPSPTA H1086
05.12.2006 02.08.2008 NY 161FED380BE31F50 PHPSPTA H1096
05.12.2006 02.08.2008 NY 161FED3A1C1E60F8 PHPSPTA H1097
05.12.2006 02.08.2008 NY 161FED4A1E930520 PHPSPTA H1113
05.12.2006 02.08.2008 NY 161FED56065A0978 PHPSPTA H1118
05.12.2006 02.08.2008 NY 161FEDCB0558D420 PHPSPTA H1159
05.12.2006 02.08.2008 NY 161FEDD0158252E8 PHPSPTA H1161
04.12.2007 07.08.2008 NY 17FF3EA91FD5AE5D WP YWPLEP1 DBH00000835872CCA2
25.06.2009 11.08.2008 NY 16E34F3B1F70DB2A HP1 AOY2RK HPSVP2AOY2RK
25.06.2009 11.08.2008 NY 16E34F3B1F70DB2A HP3 AOY2RK HPSVP2AOY2RK
25.06.2009 04.09.2008 NY 16C0BB891A03FEAD HP1 ZBZQQRI HPSVP2ZBZQQRI
25.06.2009 04.09.2008 NY 16C0BB891A03FEAD HP3 ZBZQQRI HPSVP2ZBZQQRI
25.06.2009 04.09.2008 NY 16C0BB891A03FEAD HPS ZBZQQRI HPSVP2ZBZQQRI
never 05.09.2008 NY 183426890855F4AA WF YWFCB02 WSSW0001055A2E9AD7
14.11.2008 12.10.2008 NY 1839CB7D1D1371DD HBDTEST YVVZZ04 VDPS0001185A5DF2D6
14.11.2008 12.10.2008 NY 1835776E12D92D8C TN YTNW100 CSQS0000075A39A4F1
14.11.2008 12.10.2008 NY 1839CB7D1D1371DD VV YVVZZ04 VDPS0001185A5DF2D6
14.11.2008 13.10.2008 NY 18357892075BD5AE WB YWB551 WS8B0005185A39AE85MVS
14.11.2008 13.10.2008 NY 18261EFC0F07665A WP YWPLEP1 DBH000012659B8F8B5MVS
14.11.2008 14.10.2008 NY 183385DA07529CD1 CZ YCZMLIM KLOM0000695A2956D9MVS
14.11.2008 14.10.2008 NY 180AC959164C30CC CZ YCZT235 GSER00017058D39E3DMVS
14.11.2008 14.10.2008 NY 180AC9A1159B56A3 CZ YCZT385 GSER00017058D3A09CMVS
14.11.2008 14.10.2008 NY 182A66E10DD66DF5 EQ YEQISRK EAGL00002459DCE1D0
14.11.2008 14.10.2008 NY 182A18910CBB2B8E KR YKRT511 KAUF00004059DA50DAMVS
14.11.2008 14.10.2008 NY 18357891106A6C56 WB YWB551 WS8B0005185A39AE85
14.11.2008 14.10.2008 NY 1834268F0517CA32 WF YWFCB02 WSSW0001055A2E9AD7MVS
12.09.2008 01.11.2008 NY 1839F102109635E7 ER YERDCUR EAMR0000615A5F2EBC
12.09.2008 01.11.2008 NY 1812FBB51CB591AC ER YERDINS EAMR00003559186E95
12.09.2008 02.11.2008 NY 1825F75F1CE04F44 ER YERDGET EAMR00004859B7AC83
03.10.2008 02.11.2008 NY 18323C151FBF017A VV YVVZZ21 VDPS0001185A1E8890MVS
04.11.2008 04.11.2008 NY 182C6A8614BFEC15 VV YVVZZ08 VDPS00011759EDC6B6
15.06.2007 08.11.2008 NY 16D648981104D278 HP1 AB0ORK HPSVP2AB0ORK
15.06.2007 08.11.2008 NY 16D648981104D278 HP3 AB0ORK HPSVP2AB0ORK
23.08.2007 08.11.2008 NY 16A0893F02F1E5A6 HP1 AAAERK HPSVP2AAAERK
23.08.2007 08.11.2008 NY 16A0893F02F1E5A6 HP3 AAAERK HPSVP2AAAERK
31.08.2007 08.11.2008 NY 1607FF4D0F035EE4 HP1 RWBR032 HPSVP1RWBR032
31.08.2007 08.11.2008 NY 1607FF4D0F035EE4 HP3 RWBR032 HPSVP1RWBR032
04.10.2007 08.11.2008 NY 16D648BD1AEDBD4C HP1 AO2QRK HPSVP2AO2QRK
04.10.2007 08.11.2008 NY 16D648AB14A641A9 HP1 RWBR009 HPSVP2RWBR009
04.10.2007 08.11.2008 NY 16D648BD1AEDBD4C HP3 AO2QRK HPSVP2AO2QRK
04.10.2007 08.11.2008 NY 16D648AB14A641A9 HP3 RWBR009 HPSVP2RWBR009
25.10.2007 08.11.2008 NY 16D649251B2CE67E HP1 ACA0RK HPSVP2ACA0RK
25.10.2007 08.11.2008 NY 16D649251B2CE67E HP3 ACA0RK HPSVP2ACA0RK
29.11.2007 08.11.2008 NY 16B51EFA101D37FC HP1 ZDEWERI HPSVP2ZDEWERI
29.11.2007 08.11.2008 NY 16B51EFA101D37FC HPS ZDEWERI HPSVP2ZDEWERI
08.05.2008 08.11.2008 NY 1722312F06956A95 HP1 ZADOKRL HPSVP2ZADOKRL
08.05.2008 08.11.2008 NY 1722312F06956A95 HP3 ZADOKRL HPSVP2ZADOKRL
23.06.2008 08.11.2008 NY 173DDDB317B31679 HP1 AB70RG HPSVP2AB70RG
23.06.2008 08.11.2008 NY 173DDDB317B31679 HP3 AB70RG HPSVP2AB70RG
26.06.2008 08.11.2008 NY 17350BA20FE698F0 HP1 AOBARI HPSVP2AOBARI
26.06.2008 08.11.2008 NY 17350B900F908116 HP1 AOCLRI HPSVP2AOCLRI
26.06.2008 08.11.2008 NY 17350BA20FE698F0 HP3 AOBARI HPSVP2AOBARI
26.06.2008 08.11.2008 NY 17350B900F908116 HP3 AOCLRI HPSVP2AOCLRI
11.09.2008 08.11.2008 NY 16D6488A00D271B5 HP1 RWBW050 HPSVP2RWBW050
11.09.2008 08.11.2008 NY 16D6488A00D271B5 HP3 RWBW050 HPSVP2RWBW050
10.10.2008 08.11.2008 NY 16AEAEA90756D6F4 HP1 RWBZ010 HPSVP2RWBZ010
10.10.2008 08.11.2008 NY 16AEAEA90756D6F4 HP3 RWBZ010 HPSVP2RWBZ010
17.11.2008 08.11.2008 NY 16C0BB85000D078F HP1 AKEGRI HPSVP2AKEGRI
17.11.2008 08.11.2008 NY 16C0BB85000D078F HPS AKEGRI HPSVP2AKEGRI
12.12.2008 08.11.2008 NY 175DC04D11C2C359 HP1 AOAVRI HPSVP2AOAVRI
12.12.2008 08.11.2008 NY 175DC0501312282C HP1 AOBPRI HPSVP2AOBPRI
12.12.2008 08.11.2008 NY 175DC04D11C2C359 HP3 AOAVRI HPSVP2AOAVRI
12.12.2008 08.11.2008 NY 175DC0501312282C HP3 AOBPRI HPSVP2AOBPRI
19.12.2008 08.11.2008 NY 16A087FC11BF8EF4 HP1 RWBW058 HPSVP2RWBW058
19.12.2008 08.11.2008 NY 16A087FC11BF8EF4 HP3 RWBW058 HPSVP2RWBW058
14.01.2009 08.11.2008 NY 16D64923168575A9 HP1 AEGIQ6 HPSVP2AEGIQ6
14.01.2009 08.11.2008 NY 16AEAEC81FF658CF HP1 RWBZ008 HPSVP2RWBZ008
14.01.2009 08.11.2008 NY 16D64923168575A9 HP3 AEGIQ6 HPSVP2AEGIQ6
14.01.2009 08.11.2008 NY 16AEAEC81FF658CF HP3 RWBZ008 HPSVP2RWBZ008
20.01.2009 08.11.2008 NY 161EC06A110248A7 HP1 RWBP015 HPSVP1RWBP015
20.01.2009 08.11.2008 NY 161EC06A110248A7 HP3 RWBP015 HPSVP1RWBP015
22.01.2009 08.11.2008 NY 16A0896002A9F1EC HP1 AGDYRI HPSVP2AGDYRI
22.01.2009 08.11.2008 NY 163173C5108C809D HP1 RWBJ210 HPSVP2RWBJ210
22.01.2009 08.11.2008 NY 16A0896002A9F1EC HP3 AGDYRI HPSVP2AGDYRI
22.01.2009 08.11.2008 NY 163173C5108C809D HP3 RWBJ210 HPSVP2RWBJ210
22.01.2009 08.11.2008 NY 163173C5108C809D HPS RWBJ210 HPSVP2RWBJ210
26.01.2009 08.11.2008 NY 16E34F381848481A HP1 ZUZQERK HPSVP2ZUZQERK
26.01.2009 08.11.2008 NY 16E34F381848481A HP3 ZUZQERK HPSVP2ZUZQERK
09.02.2009 08.11.2008 NY 173DDDA508751A89 HP1 RWBM011 HPSVP2RWBM011
09.02.2009 08.11.2008 NY 173DDD9C06D0771E HP1 RWBM012 HPSVP2RWBM012
09.02.2009 08.11.2008 NY 173DDDA508751A89 HP3 RWBM011 HPSVP2RWBM011
09.02.2009 08.11.2008 NY 173DDD9C06D0771E HP3 RWBM012 HPSVP2RWBM012
25.02.2009 08.11.2008 NY 16D648E4106C50F4 HP1 RWBW015 HPSVP2RWBW015
25.02.2009 08.11.2008 NY 16D648E4106C50F4 HP3 RWBW015 HPSVP2RWBW015
19.03.2009 08.11.2008 NY 1750434B1D6739F5 HP1 AOX7RK HPSVP2AOX7RK
19.03.2009 08.11.2008 NY 1750434A08D5F241 HP1 AOXTRK HPSVP2AOXTRK
19.03.2009 08.11.2008 NY 1750434B1D6739F5 HP3 AOX7RK HPSVP2AOX7RK
19.03.2009 08.11.2008 NY 1750434A08D5F241 HP3 AOXTRK HPSVP2AOXTRK
14.04.2009 08.11.2008 NY 16D6492D13A2E460 HP1 AGA8RI HPSVP2AGA8RI
14.04.2009 08.11.2008 NY 163173C304B2997F HP1 RWBE056 HPSVP2RWBE056
14.04.2009 08.11.2008 NY 16D6492D13A2E460 HP3 AGA8RI HPSVP2AGA8RI
14.04.2009 08.11.2008 NY 163173C304B2997F HP3 RWBE056 HPSVP2RWBE056
14.04.2009 08.11.2008 NY 163173C304B2997F HPS RWBE056 HPSVP2RWBE056
28.04.2009 08.11.2008 NY 173DDD8A0C9BCABE HP1 RWBB017 HPSVP2RWBB017
28.04.2009 08.11.2008 NY 173DDD8A0C9BCABE HP3 RWBB017 HPSVP2RWBB017
05.05.2009 08.11.2008 NY 16A0888000AD2563 HP1 AAOAO4 HPSVP2AAOAO4
05.05.2009 08.11.2008 NY 16A087961247E55E HP1 ABIRQ6 HPSVP2ABIRQ6
05.05.2009 08.11.2008 NY 173DDD8A038368BE HP1 RWBM001 HPSVP2RWBM001
05.05.2009 08.11.2008 NY 173DDDA104147E4E HP1 RWBW064 HPSVP2RWBW064
05.05.2009 08.11.2008 NY 16A0888000AD2563 HP3 AAOAO4 HPSVP2AAOAO4
05.05.2009 08.11.2008 NY 16A087961247E55E HP3 ABIRQ6 HPSVP2ABIRQ6
05.05.2009 08.11.2008 NY 173DDD8A038368BE HP3 RWBM001 HPSVP2RWBM001
05.05.2009 08.11.2008 NY 173DDDA104147E4E HP3 RWBW064 HPSVP2RWBW064
06.05.2009 08.11.2008 NY 16DA0F100494BECD HP1 ALX4RI HPSVP2ALX4RI
06.05.2009 08.11.2008 NY 161EBEAB0439A734 HP1 RWBR201 HPSVP1RWBR201
06.05.2009 08.11.2008 NY 16DA0F100494BECD HP3 ALX4RI HPSVP2ALX4RI
06.05.2009 08.11.2008 NY 161EBEAB0439A734 HP3 RWBR201 HPSVP1RWBR201
07.05.2009 08.11.2008 NY 16A088431BFEC51F HP1 ANEVRI HPSVP2ANEVRI
07.05.2009 08.11.2008 NY 16A088431BFEC51F HP3 ANEVRI HPSVP2ANEVRI
11.05.2009 08.11.2008 NY 173DDDB019BD953E HP1 AB79RG HPSVP2AB79RG
11.05.2009 08.11.2008 NY 173DDDB019BD953E HP3 AB79RG HPSVP2AB79RG
18.05.2009 08.11.2008 NY 164ED83F139FBA87 HP1 RWBR004 HPSVP2RWBR004
18.05.2009 08.11.2008 NY 164ED83F139FBA87 HP3 RWBR004 HPSVP2RWBR004
18.05.2009 08.11.2008 NY 164ED83F139FBA87 HPS RWBR004 HPSVP2RWBR004
26.05.2009 08.11.2008 NY 17350B9E10560A21 HP1 ALYHRI HPSVP2ALYHRI
26.05.2009 08.11.2008 NY 17350B9E10560A21 HP3 ALYHRI HPSVP2ALYHRI
28.05.2009 08.11.2008 NY 16D648AB08594280 HP1 AF8URI HPSVP2AF8URI
28.05.2009 08.11.2008 NY 16D648E40728730A HP1 RWBR200 HPSVP2RWBR200
28.05.2009 08.11.2008 NY 161EBEFE06B76ED7 HP1 RWBR202 HPSVP1RWBR202
28.05.2009 08.11.2008 NY 161EBEF41791E0E4 HP1 RWBR207 HPSVP1RWBR207
28.05.2009 08.11.2008 NY 16D648AB08594280 HP3 AF8URI HPSVP2AF8URI
28.05.2009 08.11.2008 NY 16D648E40728730A HP3 RWBR200 HPSVP2RWBR200
28.05.2009 08.11.2008 NY 161EBEFE06B76ED7 HP3 RWBR202 HPSVP1RWBR202
28.05.2009 08.11.2008 NY 161EBEF41791E0E4 HP3 RWBR207 HPSVP1RWBR207
29.05.2009 08.11.2008 NY 17350B961EC5378C HP1 ALVFRI HPSVP2ALVFRI
29.05.2009 08.11.2008 NY 17273EA20593B4FD HP1 ZVIYWRI HPSVP1ZVIYWRI
29.05.2009 08.11.2008 NY 17350B961EC5378C HP3 ALVFRI HPSVP2ALVFRI
02.06.2009 08.11.2008 NY 16E34F410D2DADF5 HP1 ZDFXPRK HPSVP2ZDFXPRK
02.06.2009 08.11.2008 NY 16E34F410D2DADF5 HP3 ZDFXPRK HPSVP2ZDFXPRK
18.06.2009 08.11.2008 NY 16D64911136FF3C9 HP1 RWBW048 HPSVP2RWBW048
18.06.2009 08.11.2008 NY 16AEADF00A3E6C71 HP1 RWBW075 HPSVP2RWBW075
18.06.2009 08.11.2008 NY 16D64911136FF3C9 HP3 RWBW048 HPSVP2RWBW048
18.06.2009 08.11.2008 NY 16AEADF00A3E6C71 HP3 RWBW075 HPSVP2RWBW075
19.06.2009 08.11.2008 NY 16C529D90092BCE3 HP1 AJV4RI HPSVP2AJV4RI
19.06.2009 08.11.2008 NY 16A087F1038A3ACA HP1 RWBT032 HPSVP2RWBT032
19.06.2009 08.11.2008 NY 16A087F1038A3ACA HP3 RWBT032 HPSVP2RWBT032
19.06.2009 08.11.2008 NY 16C529D90092BCE3 HPS AJV4RI HPSVP2AJV4RI
24.06.2009 08.11.2008 NY 17350B88031351AD HP1 RWBB110 HPSVP2RWBB110
24.06.2009 08.11.2008 NY 16C13D211976CE77 HP1 RWBT031 HPSVP1RWBT031
24.06.2009 08.11.2008 NY 17350B88031351AD HP3 RWBB110 HPSVP2RWBB110
26.06.2009 08.11.2008 NY 173D874A0C20E015 HP1 ZAEVORL HPSVP1ZAEVORL
26.06.2009 08.11.2008 NY 173D874304B82484 HP1 ZAEWBRL HPSVP1ZAEWBRL
30.06.2009 08.11.2008 NY 175DC04E0A53E249 HP1 ZBZOPRI HPSVP2ZBZOPRI
30.06.2009 08.11.2008 NY 175DC04E0A53E249 HP3 ZBZOPRI HPSVP2ZBZOPRI
14.11.2008 11.11.2008 NY 182C6A8708C29E3C VV YVVZZ24 VDPS00011759EDC6EDMVS
14.11.2008 28.11.2008 NY 18191FA4006977E4 YY YYWBPRI WSTS000055594BF0FF
25.06.2009 28.11.2008 NY 16A0886C17366136 HP1 AGXMRB HPSVP2AGXMRB
25.06.2009 28.11.2008 NY 16A0886C17366136 HP3 AGXMRB HPSVP2AGXMRB
26.06.2009 28.11.2008 NY 16A0885B012A7B54 HP1 AGW8RB HPSVP2AGW8RB
26.06.2009 28.11.2008 NY 16A0885B012A7B54 HP3 AGW8RB HPSVP2AGW8RB
18.11.2008 02.12.2008 NY 1827402C1B8CF9DC LC LC0511I TFBM00003359C2729F
14.11.2008 06.12.2008 NY 1826239016CBB2EE WP YWPL2P1 DBH000012659B91C6CMVS
09.11.2007 24.12.2008 NY 181677E70B544640 WP YWPR1PX DBH00000965935A9F8MVS
14.11.2008 01.01.2009 NY 18323C0D04B441B6 VV YVVZZ09 VDPS0001185A1E8862
14.11.2008 02.01.2009 AY 18321C0608073C7E WI YWI5952 WS8I0003205A1D7B91MVS
14.11.2008 02.01.2009 AY 18321C231B6BAEC8 WI YWI5955 WS8I0003205A1D7C47MVS
11.10.2007 03.01.2009 NY 161EC0CD1667DAB2 HP1 ABARRG HPSVP1ABARRG
11.10.2007 03.01.2009 NY 161EC0CD1667DAB2 HP3 ABARRG HPSVP1ABARRG
28.07.2008 03.01.2009 NY 173DDDB91A9CD7F2 HP1 AB8CRG HPSVP2AB8CRG
28.07.2008 03.01.2009 NY 173DDDB91A9CD7F2 HP3 AB8CRG HPSVP2AB8CRG
22.01.2009 03.01.2009 NY 16D64910141577F2 HP1 ZDEWPRI HPSVP2ZDEWPRI
22.01.2009 03.01.2009 NY 16D64910141577F2 HP3 ZDEWPRI HPSVP2ZDEWPRI
28.05.2009 03.01.2009 NY 162AAC960C4D569D HP1 RWBP024 HPSVP1RWBP024
28.05.2009 03.01.2009 NY 162AAC960C4D569D HP3 RWBP024 HPSVP1RWBP024
14.11.2008 04.01.2009 NY 1841363F16B0BB0D CZ YCZJABW GSER0002225A9C2BE5MVS
14.11.2008 08.01.2009 AY 18321BFE0061DD9F WI YWI5951 WS8I0003205A1D7B52MVS
14.11.2008 08.01.2009 AY 18321C8D0890A39C WI YWI5957 WS8I0003205A1D7FF7MVS
14.11.2008 08.01.2009 AY 18321C9D02F84785 WI YWI5959 WS8I0003205A1D8082MVS
24.02.2009 12.01.2009 NY 175DC0560D777BDC HP1 ZBZXERI HPSVP2ZBZXERI
24.02.2009 12.01.2009 NY 175DC0560D777BDC HP3 ZBZXERI HPSVP2ZBZXERI
13.02.2009 13.01.2009 NY 18323C16151CEB4D VV YVVZZ32 VDPS0001185A1E88B5
13.02.2009 13.01.2009 NY 1826238C1C7385AB WP YWPL2P1 DBH000012659B91C6C
13.02.2009 13.01.2009 NY 18261CDF1597622C WP YWPL5P1 DBH000012659B8E717
13.02.2009 13.01.2009 NY 18261CE41CD92FDE WP YWPL8P1 DBH000012659B8E744
24.03.2009 13.01.2009 NY 18261EF81B5873CF WP YWPLEP1 DBH000012659B8F8B5
13.11.2008 14.01.2009 AY 181CE4530829D875 ED YED5203 ED00000056596B8D61
14.11.2008 14.01.2009 NY 182885BD11A7674C DE DE7120 DE00000070
11.11.2008 15.01.2009 NY 181E9A8B15ED54C9 NL YNLG010 BALR0000745979E96AMVS
13.11.2008 15.01.2009 NY 181E9A981089E351 NL YNLG021 BALR0000745979E970MVS
13.11.2008 15.01.2009 NY 18261D86047413E6 WP YWPU1P5 DBH000012659B8EC6AMVS
14.11.2008 15.01.2009 NY 181E9A8C11D79061 NL YNLG020 BALR0000745979E96FMVS
14.11.2008 15.01.2009 NY 181E9A970E2FCC26 NL YNLG120 BALR0000745979E98CMVS
14.11.2008 15.01.2009 NY 181E9A930E7C61F7 NL YNLG121 BALR0000745979E992MVS
14.11.2008 15.01.2009 NY 1839CAC20E1B3976 VV YVVZZ17 VDPS0001185A5DEDE3
14.11.2008 15.01.2009 NY 182C6A8E10BC8DCE VV YVVZZ29 VDPS00011759EDC703
14.11.2008 15.01.2009 AY 18321C0F047F1754 WI YWI5953 WS8I0003205A1D7BD6MVS
14.11.2008 15.01.2009 AY 18321C180D39B292 WI YWI5954 WS8I0003205A1D7C0CMVS
14.11.2008 15.01.2009 AY 18321C2A14DC6A36 WI YWI5956 WS8I0003205A1D7C79MVS
14.11.2008 15.01.2009 AY 18321C941B20AEFB WI YWI5958 WS8I0003205A1D8033MVS
14.11.2008 15.01.2009 AY 18321BF1162B8558 WI YWI595A WS8I0003205A1D7AEAMVS
13.02.2009 26.01.2009 NY 18261D820039E71F WP YWPU1P5 DBH000012659B8EC6A
08.01.2009 27.01.2009 NY 183E36361650E573 VV YVVZZ33 VDPS0001745A83012D
13.02.2009 27.01.2009 NY 18353AF4161FD149 VV YVVZZ13 VDPS0001185A37A9AA
13.02.2009 27.01.2009 NY 18323C110DA9D908 VV YVVZZ18 VDPS0001185A1E8884
13.02.2009 27.01.2009 NY 182EC5960FB65A62 VV YVVZZ20 VDPS0001175A017C26
14.08.2009 01.02.2009 NY 182C6A84125D1BD8 VV YVVZZ24 VDPS00011759EDC6ED
13.02.2009 03.02.2009 NY 180AC9A004539D41 CZ YCZT385 GSER00017058D3A09C
08.05.2009 09.02.2009 NY 182E80B41CFDC381 NL YNL0200 BALR00007659FF3A58
05.02.2009 20.03.2009 NY 18261CE71CB36FFE WP YWPL9P1 DBH000012659B8E75B
14.05.2009 24.03.2009 NY 16C01B780D2C0EB5 HP1 AAZGRK HPSVP2AAZGRK
14.05.2009 24.03.2009 NY 16A0879F1DF0F3B7 HP1 AFW4RB HPSVP2AFW4RB
14.05.2009 24.03.2009 NY 16A0879F1DF0F3B7 HP3 AFW4RB HPSVP2AFW4RB
14.05.2009 24.03.2009 NY 16C01B780D2C0EB5 HPS AAZGRK HPSVP2AAZGRK
25.06.2009 05.04.2009 NY 16F2B49904BDA037 HP1 AFOSRK HPSVP2AFOSRK
25.06.2009 05.04.2009 NY 16F2B49904BDA037 HP3 AFOSRK HPSVP2AFOSRK
29.06.2009 05.04.2009 NY 16A087B006F79F21 HP1 AN6ERI HPSVP2AN6ERI
29.06.2009 05.04.2009 NY 16A087B006F79F21 HP3 AN6ERI HPSVP2AN6ERI
02.07.2009 05.04.2009 NY 175DC04F0D5988A9 HP1 ZBZOURI HPSVP2ZBZOURI
02.07.2009 05.04.2009 NY 175DC055168A8E12 HP1 ZBZXDRI HPSVP2ZBZXDRI
02.07.2009 05.04.2009 NY 175DC04F0D5988A9 HP3 ZBZOURI HPSVP2ZBZOURI
02.07.2009 05.04.2009 NY 175DC055168A8E12 HP3 ZBZXDRI HPSVP2ZBZXDRI
08.05.2009 15.04.2009 NY 18297331135D2DA7 NL NL7750 BALR000074
08.05.2009 15.04.2009 NY 181E9A911CD76552 NL YNLG03M BALR0000745979E978
08.05.2009 15.04.2009 NY 181E9A8D1E49D86D NL YNLG040 BALR0000745979E97E
08.05.2009 17.04.2009 NN 18333AF00A8C164D LC YLCTF03 TFBM0000375A26E23A
30.06.2009 25.04.2009 NY 16987DFC0C16911D HP1 RWBP004 HPSVP2RWBP004
30.06.2009 25.04.2009 NY 16987DFC0C16911D HP3 RWBP004 HPSVP2RWBP004
06.04.2009 29.04.2009 NY 182C6A921624F411 VV YVVZZ30 VDPS00011759EDC710
08.05.2009 29.04.2009 NY 182C6A811F6A52CA VV YVVZZ23 VDPS00011759EDC6E4
12.02.2009 30.04.2009 NY 16AEAF1401E68D5E HP1 AATVRK HPSVP2AATVRK
12.02.2009 30.04.2009 NY 16AEAF1401E68D5E HP3 AATVRK HPSVP2AATVRK
08.05.2009 30.04.2009 NY 18323C121E96C0EC VV YVVZZ25 VDPS0001185A1E8896
30.06.2009 30.04.2009 NY 16D649260AA8D00A HP1 AEW7Q6 HPSVP2AEW7Q6
30.06.2009 30.04.2009 NY 16D649260AA8D00A HP3 AEW7Q6 HPSVP2AEW7Q6
07.05.2009 01.05.2009 NY 181E9A8A04C771C1 NL YNLG010 BALR0000745979E96A
08.05.2009 01.05.2009 NY 181E9A8A1F14EB08 NL YNLG020 BALR0000745979E96F
08.05.2009 01.05.2009 NY 181E9A951A3BFEC5 NL YNLG120 BALR0000745979E98C
08.05.2009 01.05.2009 NY 181E9A9207C58B64 NL YNLG130 BALR0000745979E995
08.05.2009 01.05.2009 NY 181E9A9E09280926 NL YNLG140 BALR0000745979E99A
28.05.2009 19.05.2009 NY 164ED837080F939E HP1 RWBR002 HPSVP2RWBR002
28.05.2009 19.05.2009 NY 164ED837080F939E HP3 RWBR002 HPSVP2RWBR002
28.05.2009 19.05.2009 NY 164ED837080F939E HPS RWBR002 HPSVP2RWBR002
29.06.2009 19.05.2009 NY 164D1F0A02721DA9 HP1 RWBR003 HPSVP1RWBR003
29.06.2009 19.05.2009 NY 164D1F0A02721DA9 HP3 RWBR003 HPSVP1RWBR003
30.06.2009 15.06.2009 NY 1643560107BBEEAB HP1 A6MCHA HPSVP2A6MCHA
30.06.2009 15.06.2009 NY 164ED82003C8C157 HP1 RWBP007 HPSVP2RWBP007
30.06.2009 15.06.2009 NY 164ED818152D5362 HP1 RWBP008 HPSVP2RWBP008
30.06.2009 15.06.2009 NY 1643560107BBEEAB HP3 A6MCHA HPSVP2A6MCHA
30.06.2009 15.06.2009 NY 164ED82003C8C157 HP3 RWBP007 HPSVP2RWBP007
30.06.2009 15.06.2009 NY 164ED818152D5362 HP3 RWBP008 HPSVP2RWBP008
30.06.2009 15.06.2009 NY 1643560107BBEEAB HPS A6MCHA HPSVP2A6MCHA
30.06.2009 15.06.2009 NY 164ED82003C8C157 HPS RWBP007 HPSVP2RWBP007
30.06.2009 15.06.2009 NY 164ED818152D5362 HPS RWBP008 HPSVP2RWBP008
01.07.2009 15.06.2009 NY 16AEADE010C7CE20 HP1 RWBP023 HPSVP2RWBP023
01.07.2009 15.06.2009 NY 16AEADE010C7CE20 HP3 RWBP023 HPSVP2RWBP023
18.02.2009 25.06.2009 NY 1839CA730834BE2F FI YFI0110 BKUR0000965A5DE7BD
14.08.2009 13.07.2009 NY 1824DF5F02020ACF VD YVDDFA DSPV00004459AE7FA5
15.08.2009 14.07.2009 NY 1839C8CA00263CDE VV YVVZZ3R VDPS0001185A5DDB06
09.11.2007 15.07.2009 NY 181677EC047FB3F4 WP YWPR2PX DBH00000965935AA0CMVS
13.08.2009 02.08.2009 NY 1818A64D19C9D36B VV YVVZZNR VDPS0001145947F723
14.08.2009 18.08.2009 NY 182927541720E419 VV YVVZZ31 VDPS00011759D26946
14.08.2009 18.08.2009 NY 1818A63F03197821 VV YVVZZGR VDPS0001145947F6A7
14.08.2009 20.08.2009 NY 1839CA7715CBAEBE FI YFI0120 BKUR0000965A5DE7D4
05.12.2006 25.12.2009 NY 166877D90BF64B88 PHPS53 HMCLKCK
05.12.2006 25.12.2009 NY 166877D90BF64B88 PHPSPTA HMCLKCK
12.03.2008 25.12.2009 NY 161FDC6D015FC398 PHPS53 H0010
12.03.2008 25.12.2009 NY 163917300E3A09E8 PHPS53 HMCSEC3
12.03.2008 25.12.2009 NY 165068C40486A51C PHPS53 HMCSTK
12.03.2008 25.12.2009 NY 15CB758A0929ECF4 PHPS53 HMPVRSN
12.03.2008 25.12.2009 NY 161FDC6D015FC398 PHPSPTA H0010
12.03.2008 25.12.2009 NY 163917300E3A09E8 PHPSPTA HMCSEC3
12.03.2008 25.12.2009 NY 165068C40486A51C PHPSPTA HMCSTK
12.03.2008 25.12.2009 NY 15CB758A0929ECF4 PHPSPTA HMPVRSN
20.06.2010 11.04.2010 YY 41534E434F4D4F4E NULLID ASNDD802
22.06.2010 31.07.2010 YY 1647C9EC01BAB864 M24SAMT2 SAMP0190