js{N 4Schema Example Bank.Guide/y {>7͟Eoh,(H F SetUp   %Ilc & ͂DCalledBy  (? AppDataflowXrefH' )  *   Imsg +DStartBox H D Tasks  ,DEndApp ; bMConfigurations  -D Async̓DApp ; Actions.D AKnd  ?ServerBox1'      5FSetStart 4 / @DBackupOn  0I abox HDDataObject + 1I aend ; ̈́DStartPaths  2I asyncF SetUp   3I aknd  ?$CriticalComponent'      6? AppDataflowConnI' 7  8  9 Isv + @F SetUp ? : ͅ?ActionFlow'      ;Ist HAAppKindEnum2'  <Ien HADDevelopmentOn  =I asyncJ eProd>I aknd  ͈D From |  CallsA?DBDataflowConnJ' B  C  D   JeBackupEDEndData L $M Main  KFSetStart J F  J eDevGI dbox H͉DTo | CalledByHIdt L !?DiskHolder3' "  #  $ IIcat ^ BD Datas  ͳM$PathConfiguration M %DDataStripe + N?&PathConfigDiagBaseK' O  P  Q ͋D Async  RDUserList  UserGroups*FAddData ) & SDTaskList   Tasks!DBreaks  TDPathList  'Id L UDLocList  ͍DDependency    VDServerBoxList  (Iknd  WDHighestRowCDActions  YD ShowDevelopment X +?DataHorzStripe4' ,  [DShowBackup Z ͎DSwitchTime]DShowData \ |i]0-?DiskBox5' .  /  0 `F"BuildDisplayBase _ ^  DUserGroups  eFAddAction   d a 5F SetUp 4 1 bIaa | ͏DSWUnits  cIlvl2IlflFAddServer A  k f DDSysFunctions  gIsv + 3ItphIa ; ͐ADependencyEnum'  iI aknd  6?DataBox6' 7  8  9 jIlvl#DAvgDowntime " m?UserConfigDiagL' n  o  p :DDataObject L sFBuildDisplay r q ͒JeDependt?ConfigByUserM' u  v  w  l ;DKnd  zFBuildDisplay y x EDContainer  {?TaskConfigDiagN' |  }  ~ @F SetUp ? < ́FBuildDisplay   ͓JePartial͂?ConfigByTaskO'       d =Id L ͈FBuildDisplay   DLocations  ͉?AppConfigDiagP'      >Iknd  ͍DAppList  Applications͔JeSwitch͐FBuildDisplay   A?ApplicationBox7' B  C  D   ͑?ConfigByAppQ'       ; HESyncCalls   G F ͗FBuildDisplay   EDDataObject ; ͘?UserBoxR'      ͼMSystemSoftware  ͜DDataObject l FD AKnd  ͠F SetUp   9M,HardwareConfiguration % ͞Iug l KF SetUp J G ͡?TaskBoxS'      ͗?Container'      ͥDDataObject d HIa ; ͩF SetUp   KEAsyncCalls   J I ͧIt d IIknd  ͪ?UserTaskConnT'      mjb͛DSWUnits  ͲF SetUp   L?TaskAppXref8' M  N ͯIst H D Paths  ͰIen HOD Table  gMPathSoftware  ͜DSWContainers  ͵?PathDiagBaseU'      RF Build Q P ͹DImpPathList  "ImplementedPathsL? Data' M  N  O   ͺDXOffsetWFAddActions V S ͻDIterateLine W ͝DSysFunctions  ͼDLastBox FTIt d ͽDIAConns  &?Location' '  (  )   ;DFuncConns  UIaa | ͿD"ContainerStripes  ͞?SWContainer '        DShowSecurity  \E IsIn [ X DShowSysMgmt  PDProductionOn  D(ShowRoutingGateways  YIt d D"AuthenticateText  ͢DContainer  SWContainersD$AccessControlText  ZIa ; D"FaultMonitorText  H=IT Overview    '          Version 1.0  D PerfMonitorText  ]?TaskAppEntry9' ^  _   D"BackupSwitchText  ͣ?SWPlatform!'        DRoutingText  `D Task d DGatewayText  QDBackupOn  D DataConvertText  aDApp ; DBlankContainer : ͧDServers  SWPlatformDContainerList  M(AvailabilityDiagram c DLastContainer  *DServers  DAppBoxList td?"AvailDiagramBase:' e  f  g DStickFigure  ͨ?SWUnit"'        F"BuildDisplayBase   hDEntries  FAddAppAction   s#NUIRDDevelopmentOn  Iia | iDTaskSummary  Iims W ͬDSysFunctions  I levelmFEmptyRows l j Ireplytocaller DSWPlatforms  FAddSWUnit   kI picmv  Isw  ͭDContainer  Iims W uFAddApp t n IxSDUsedBy   DatasI leveloIaa | FAddContainer )    ͮDActionFlow  SWUnitsIc  pIrowI level+?Server' ,  -  .   F"AddContainerConn   qIfrombox FI stcon  ͯ@SysFuncSet#'   Iendcon  rIcumstats  F(FindContainerStripe )    TDFlowsTo  Iss IsIsp  Ic  ͰA SysFunctionEnum$'  EGetNode     |FAddServer { v Ic  DApplications  F"AddFunctionLinks   wIsv + Ifs  ͲJeGatewayIbx FxIrowFSetUpIterate ~   UDFlowsFrom  FIterate ~   yIfrombox F?"PathSoftwareDiagV'    ,  ͳJeRouterFBuildDisplay   zIcumstats   ?PathByPathW'    ?   q 0DNumber / FBuildDisplay   ̓FAddData  } ?$PathSoftwareStackX'   -ʹJeBackupSwitch?IASimpleBoxY'    3  ~Idt L DDataObject  V?DBDataFlow' W  X  Y   F SetUp   IrowIsw  ͵J eDataConversion{y4?AppSimpleBoxZ'    4  ̀Ifrombox FDDataObject ; D"ImplementedPaths    #F SetUp "  ́Icumstats  !Ia ; ͶJeAccessControl$?SubStripe[' %  & > ' ͊FAddLocation   (D LevelZD From L FlowsTo)? ContainerStripe\' *  +  ,   ͅIlc & -DDataObject  ͷJeAuthenticator.DNodeLevel͆Irow/DLowestLevel1DLocation & Servers0DHighestLevel͇Ifrombox F4F SetUp 3 1 ͸JeFaultMonitor2Ic  ͈Icumstats  9FAddBox 8 5 [DTo L FlowsFrom6Ibx H͏FFindInEntries H   7I level͹JePerfMonitor:?$SWContainerStripe]' ;  7͌Irow<?$HWContainerStripe^' =  =?System'    >?,ContainerStripeStripe_' ?  @ 8 A   ͍I dobj  BD LevelͺJeDBAccessC?IAConn`' D  E 9 F   ͖FAddEntry   LF SetUp K G ]DCategory ^  \ HIstartbox H͑IrowIIendbox FͻJ(eTransactionMonitorJIleveldiff͒Icc  M?FuncConna' N  O : P   2DProductionApps  ProductionOnVF SetUp U Q ͓Ish HRIstartbox HMCommonShapes  SIendbox F͔Icumstats  TIonright^ADBDataFlowEnum' _ W?ImpPathLineb' X  ;͗?AvailDiagram;'      Y? ImpPathTextLinec' Z  [ < \  Ϳ?MainVertStripe%'   ]DMsg ͛DTaskList   TasksXt^DImpPath W ?NamedObj'      cF SetUp b _ ͞FBuildDisplay   `Imsg ?MainHorzStripe&'   aIip W ͟?AvailSelected<'       d fFHit e d `J eETLͼMTables h ͥFBuildDisplay   i?TableShaped' j  k  l ? SmallHorzStripe''   mDColHeadings  ͦ?RowEntry='      nDY3DBackupApps  BackupOnoD ColsͩDRowpDKey  ?TitleBox('      tF Init s q ͪD Shape HrI title aJeDBCopyxFNewCol w u ͫ?CumStats>'    vI nobj  D Text |FNewRow { y ͯDBreaks  zI nobj  D Datas  ́FAddShape  } ͱD Down  ~IcolF SetUp   Ish HͳDPartial  ͆FAddText   ͕M Tasks c ̓IcolͷFAdd   ̈́Imsg Imsg ͊EGetColLeft   ͵Ics  ͈Icol4D DevelopmentApps  DevelopmentOn͍FWrapUp   ͺFFillZero   ͑FAddKey   FChangeTitle ~   ͏Imsg ͻ?TaskSummary?'      ͔ERightLimit   d? Task' e  f  g   ͕?ColHeadinge'        ͿDDowntimeText ͙DDataObject  INewText ͚D YEndDPartialText ͞F SetUp   D Name ͜I nobj  DDownRectWidth͟?RowHeadingf'      ?InfoTextBox)'      ȱ3vͣDDataObject  D"PartialRectWidthͤD XEndhD Paths  ͨF SetUp   F SetUp   ͦI nobj  FAdd   ͩ?TableEntryTextg'      IdtͭD Text 5D ProductionDatas  ProductionOnͮ?AppTablesh'    (  IptʹFBuildDisplay   Iitl  ͵?TaskTablesi'    )  ?StatsGroup@'      ͻFBuildDisplay   jDUserPath i MGuideGroup  DDataObject  Ϳ? Guidej'      ?InfoTextLine*'      FImpList }   DBreaksText FUserList }   FTaskList }   DDowntimeText FAppList }   DMargin  R*Availability Diagram DDownRectWidthR$Location Overview kD Users  R8Implementation Path Diagram ? q F SetUp   R&User Configuration ? HeadingTextLine+'      R(Focus on User Group  l Icc  R&Task Configuration 6DBackupDatas  BackupOnRFocus on Task  d Ish HR$App Configuration DMsg R*Focus on Application  ; ?FailFigureA'   R$Task Availability  d l?UserGroup' m  n  o   R(Path Configurations ,?PathConnB'      R&Application Tables (F SetUp   RTask Tables )FSetAnnotation   @LocationListk'  & EGetName    @ServerSetl'  + Isp  {}OAP @ServerListm'  + Imsg @ApplicationSetn'  ; ?LocationBoxC'      @ ApplicationListo'  ; pD Tasks   Users@DataSetp'  L DDataObject & @DataListq'  L ?LineTextLine,'      @DBDataFlowSetr'  V F SetUp   @TaskSets'  d 7D"DevelopmentDatas  DevelopmentOn@TaskListt'  d Ilc & @UserGroupSetu'  l DMsg @UserGroupListv'  l LM LocationDiagram  @StartPathSetw'  q q?StartPath' r  s  t   @StartPathListx'  q ? LocationDiagramD'      @AppActionSety'  | F SetUp   @ActionFlowListz'   D ShowDevelopment  @SWContainerSet{'    DDBDataFlows  @SWPlatformSet|'   DShowBackup  @SWUnitSet}'   Imsg @SWUnitList~'   DShowData  @&ApplicationBoxList'  A uD First | @"TaskAppEntryList'  ] DAppDataflows  @RowEntryList'   ?BlankTextLine-'   @&LocationStripeList'   DDBDataflows  @"ServerStripeList'   8DSWPlatform   @(AppDataflowXrefList'  ( DAppBoxList   @&DBDataflowConnList'  A ? IntInfoTextLine.'      @(ContainerStripeList'  ) FBuildDisplay   @4ContainerStripeStripeList'  > vD Tasks   Paths@IAConnList'  C ?LocationStripeE'        @FuncConnList'  M DVal@ColHeadingList'   q DDataObject & "CentredNameStyleAFSetName   SmallNamesAD Level   TitleStyleADMsg !InfoTextStyleAF SetUp   "*CommandLineUnderline A@xDImplemented w #FaintStyle AIlc & $HeadMsgStyle`AF SetUp   %AnnotStyle A?ServerStripeF'         &$BlackHeadingStyle@AbMApplications : 'AnnotCharStyle@A DDataObject + (NameStyle AImsg )&UnderlineTextStyle Add DTopStripe  *ServerBoxStyle{EStartsWithUser z y +WhiteBackStyle? DBotStripe  ,LocationStyle??$FloatInfoTextLine/'      -DiskFillStyleF SetUp   .DiskFullStyle3?D Title /DataStyleIL? Isv + 0AppStyle L?DVal1*AppDataflowConnStyle? 2 FSetUpAll   2@@@|?AppAction' }  ~   36AppDataflowBackupConnStyle? 4 Isv + 4@@@DMsg 5DBArrowStyle 6 FAddApp   6@@@;?Application' <  =  >   7AnnotBoxStyle@Ia ; 8FailLineStyle@F SetUp   9DowntimeStyleddd?I aknd  :PartialStyleddd?̀D Name   ;AnnotRectStyle?Iconnect<$UserTaskConnStyleImsg =UserGroupStyle?FAddData    .Q >PathLineStyle@In ?ContainerStyleId L @ AppBoxRectStyle?"TextInfoTextLine0'      A"IASimpleBoxStyleddIknd  BMachineStyled́D Calls  CAppArrowStyle D ?LocationNameG'   !  " D@@@ DMsg EDBArrowStyle F #DDataObject & F@@@?DProductionOn  G$TableHeadingStyleddd'F SetUp & $ ^JQOHb%   ! " # $ % & ' ( ) * + , - . / 0 1 3 5 7 8 9 : ; < = > ? @ A B C E G @ @ @ @  @  @   @  @ @ @ @ @ @  @ @ @ @ @  @  @  @ @  @  @  @ A              EEEEDC    B`;@ ͽG ͹E͸DͷC ͶBDͲEͱDͰC ͯBDͬDͫC ͪBHͥE ͢D͡C   ͠BH͛E ͘D͗C   ͖BH͒E͎E ͋E͇E ͂E  v1 }E~  yEz uEv qEr lDkC m n o p t x |       jBJh@i      dE_E` a \D[C] ^ c f ZB XBQQER S T PDOCV NBNGEH I J FDECL DBNAD@CB ?BI=B) ;B) 5E6 7 1E2 ,D+C- . / 0 4 9 *BI'D&C( %BI E! DC # BHE DC  BHBI E D C  B EDC B EEE  E E  E  E  E    E    E͸DͷC!                                 ͶBDʹ@      $ ) : < > C M W Y ͮE  ͭDͬC ͫBNͦE ͤDͣC  ͢BH͝E ͛D͚C  ͙BH͕E͔D͓C ͒BN ͎E͌D͋C  ͊BN ͆EͅD̈́C ̓BN E~D}C sn#7 |BN xEwDvCz uBN qEpDoCs nBN fEg h i j aEb c ^EQDPC R S T U V W Y [ ] ` e l OBDM@ N m t {       FEG H I DDCCE K BBN:E; < = > 9D8C@ 7BN/E0 1 2 3 *D)C+ , - . 5 $E% "D!C# '  BHE  E   E  E  DC        BIE DC   BIEDC       BD@    ( 6 A E DC  BHE DC BNBHE  DC     BJE  ;DͽC     ͼBH͸EʹE ͭDͬC     ͨDͧC  ͣE͢D͡C ͠Bd ͜E͚D͙C  ͘Bd ͐E    ͋E  ̈́E    }E~    vEw x y z nEo p q r s jEk gDfC h i m u |     eBDc@ d          rFߙ_D^C` a XEY Z SET U PENDMCO R W \ GEH I DDCCE F K BBH<E= > 9D8C: ; @ 7BH1E2 3 0D/C5 .BH,BI&E' ( $D#C% * "BJF   E DC  BH@   ! + - 6 A L ]  E  D C    B E DC   B E DC   B B E DC  B E DC  B DC BHE DC BIE E DC   BHBIBIBI;@             ͽG b  L  g  ͱF           ͫDͪC   ͩB ͦDͥC ͤB ͡D͠C ͟B ͚D͙C   ͘B ͖@      ͑F   ͇D͆C      ~D}C     yEtDsCu v x { rB oDnCp mB Cx;gDfCh j k eB c@d l q |   _F` a YDXCZ [ ] WB ODNCP Q R S T U MB IEFE>D=C ? @ A B C D E H K <B :@; L V ^ .D-C 0 1 2 3 4 5 6 7 8 ,B )D(C* 'B %@& + DC! # B E EDC   BADC           @   G$ 9 b   8Model design is copyright (c) 2008, Polyphony IT Ltd, UKxlocals rsr _ReportSectionList; do for a := model.Applications do locals s := new _ReportSection; do s.Heading := a.Name; if isnull a.Description then s.Text := "<p>No description is available for this application.</p>"; else s.Text := "<p>" & a.Description & "</p>"; endif; s.Text := s.Text & "<p>To see the IT overview for this application <cmd appdiagsel>click here</cmd>.</p>"; s.SelectedObj := a; rsr append s; endlocals; endfor; return rsr; endlocals; Ilocals rsr _ReportSectionList; do for t := model.Tasks do locals s := new _ReportSection; do s.Heading := t.Name; if isnull t.Description then s.Text := "<p>No description is available for this task.</p>"; else s.Text := "<p>" & t.Description & "</p>"; endif; s.Text := s.Text & "<p>To see the IT overview for task <cmd taskdiagsel>click here<bc|J/cmd>.</p>" & "<p>To see the availability analysis for this task <cmd availdiagsel>click here</cmd>.</p>"; s.SelectedObj := t; rsr append s; endlocals; endfor; return rsr; endlocals; I J zlocals rsr _ReportSectionList; do for ug := model.UserGroups do locals s := new _ReportSection; do s.Heading := ug.Name; if isnull ug.Description then s.Text := "<p>No description is available for this user group.</p>"; else s.Text := "<p>" & ug.Description & "</p>"; endif; s.Text := s.Text & "<p>To see the IT overview for this user group <cmd userdiagsel>click here</cmd>.</p>"; s.SelectedObj := ug; rsr append s; endlocals; endfor; return rsr; endlocals; locals rsr _ReportSectionList; do for ip := model.ImplementedPaths do locals s := new _ReportSection; do s.Heading := ip.Name; s.Text := "<p>" & ip.Description & "</p>" & "<p>To see the technical overview of this path <cmd impdiagsel>click here</cmd>.</p>" s.SelectedObj := ip; rsr append s; endlocals; endfor; return rsr; endlocals; K}locals tx := new TaskAppXref; ts1 := new TableShape; ts2 := new TableShape; col := 0; do ts1.Init("Tasks versus UserGroups"); for u := model.UserGroups do ts1.NewCol(u); endfor; for t := model.Tasks do ts1.NewRow(t); col := 0; for u := model.UserGroups do col := col + 1; if u in t.Users then ts1.AddText(col, "X"); endif; endfor; endfor; ts1.Left := 50.0; ts1.Top := 50.0; Shapes append ts1; ts1.WrapUp(); tx.Build(); ts2.Init("Tasks versus Applications"); for a := model.AppVzIdnLlications do ts2.NewCol(a); endfor; for t := model.Tasks do ts2.NewRow(t); col := 0; for a := model.Applications do col := col + 1; if tx.IsIn(t,a) then ts2.AddText(col, "X"); endif; endfor; endfor; ts2.Left := ts1.RightLimit() + 100.0; ts2.Top := 50.0; Shapes append ts2; ts2.WrapUp(); endlocals; ͺ}K L ͳlocals tx := new TaskAppXref; ts1 := new TableShape; ts2 := new TableShape; col := 0; do tx.Build(); ts1.Init("Applications versus Tasks"); for t := model.Tasks do ts1.NewCol(t); endfor; for a := model.Applications do ts1.NewRow(a); col := 0; for t := model.Tasks do col := col + 1; if tx.IsIn(t,a) then ts1.AddText(col, "X"); endif; endfor; endfor; ts1.Left := 50.0; ts1.Top := 50.0; Shapes append ts1; ts1.WrapUp(); ts2.Init("Applications versus Data"); for d := model.Datas do ts2.NewCol(d); endfor; for a := model.Applications do ts2.NewRow(a); col := 0; for d := model.Datas do col := col + 1; if d in a.Datas then ts2.AddText(col, "X"); endif; endfor; endfor; ts2.Left := ts1.RightLimit() + 100.0; ts2.Top := 50.0; Shapes append ts2; ts2.WrapUp(); endlocals; ͧDataObject := nobj; ͝DataObject := nobj; ͓fif isnull Key then return Left + GetColLeft(Cols); endif; return Left + 150.0 + GetColLeft(Cols); ͐;if isnull Key then Key := new InfoTextBox; Key.Top := 150.0; Key.Left := 50.0 + GetColLeft(Cols); locals hd := new HeadingTextLine call SetUp("Key"); do Key.Add(hd); endlocals; Shapes append Key; endif; locals k := new LineTextLine call SetUp(msg); do Key.Add(k); endlocals; %̰+͌8for c := ColHeadings do c.YEnd := Y - 35.0; endfor; ͉;if col = 0 then return 0; endif; return 85 + col * 15; ͅlocals tet := new TableEntryText; do tet.Text := msg; tet.Left := GetColLeft(col); tet.Top := Y; Shapes append tet; endlocals; ̀;sh.Left := GetColLeft(col); sh.Top := Y; Shapes append sh; {locals rowh := new RowHeading call SetUp(nobj); do if Y = 50.0 then Y := 150; else Y := Y + 15; endif; AddShape(0, rowh); rowh.XEnd := GetColLeft(Cols); endlocals; wlocals he := new ColHeading call SetUp(nobj); do AddShape(Cols, he); Cols := Cols + 1; ColHeadings append he; endlocals; sDY := 50.0; Shapes append new TitleBox call SetUp(title); Cols := 1; eLcontext.IterateLine := ImpPath; iterate_set_timer(300); iterate_set(Timer); bMsg := msg; ImpPath := ip; UlStartBox := startbox; EndBox := endbox; if onright then StartSide := Left; EndSide := Right; endif; KStartBox := startbox; EndBox := endbox; if leveldiff = 0 then StartSide := Right; EndSide := Left; Form := UseDucts; elseif leveldiff < 0 then StartSide := Top; EndSide := Bottom; Form := UseDucts; endif; 8for x := Shapes where x is SubStripe -> ss and ss.Level = level do ss.Shapes append bx; return; endfor; if isnull LowestLevel then LowestLevel := level; HighestLevel := level; endif; locals ssx := new SubStripe; do ssx.Level := level; ssx.Shapes append bx; if level < LowestLevel then Shapes prepend ssx; LowestLevel := level; else Shapes append ssx; if level > HighestLevel then HighestLevel := level; endif; endif; endlocals; 3DataObject := c; "DataObject := a; DataObject := sw; 1ImpPathList append selected; BuildDisplayBase(); Hbc+BuildDisplayBase(); if iterate_setting_is(Step) then iterate_set(Timer); return NoRedraw; endif; locals lastbox := IterateLine.LastOverLinePoint; do if isnull lastbox or (notnull LastBox and LastBox = lastbox) or isnull lastbox.DataObject then if IterateLine.IterateLineAmt >= IterateLine.DrawnLength then stop "Run complete"; endif; IterateLine.IterateLineAmt := min(IterateLine.IterateLineAmt + 20.0, IterateLine.NextPointPosition); return RedisplayShapes; endif; if notnull LastBox then LastBox.NotesPosition := NoNotes; endif; lastbox.NotesPosition := Right; LastBox := lastbox; iterate_set(Step); endlocals; return RedisplayShapes; IterateLine.IterateLineAmt := 20.0; iterate_set_timer(100); IterateLine.LastOverLinePoint := null; if notnull LastBox then LastBox.NotesPosition := NoNotes; LastBox := null; endif; return RedisplayShapes; Mfor f := fs do switch f case eAuthenticator: if ShowSecurity then FuncConns append new FuncConn call SetUp(AuthenticateText, bx, true); endif; case eAccessControl: if ShowSecurity then FuncConns append new FuncConn call SetUp(AccessControlText, bx, true); endif; case eFaultMonitor: if ShowSysMgmt then FuncConns append new FuncConn call SetUp(FaultMonitorText, bx, true); endif; case ePerfMonitor: if ShowSysMgmt then FuncConns append new FuncConn call SetUp(PerfMonitorText, bx, true); endif; case eBackupSwitch: if ShowSysMgmt then FuncConns append new FuncConn call SetUp(BackupSwitchText, bx, true); endif; case eGateway: if ShowRoutingGateways then FuncConns append new FuncConn call SetUp(GatewayText, bx, false); endif; case eRouter: if ShowRoutingGateways then Funo)NcConns append new FuncConn call SetUp(RoutingText, bx, false); endif; case eDataConversion: if ShowRoutingGateways then FuncConns append new FuncConn call SetUp(DataConvertText, bx, false); endif; endswitch; endfor; M N kif c is SWContainer -> cs and notnull cs.Container then return GetNode(cs.Container); endif; return c; ifor y := ss.Shapes do if y is ContainerStripe -> cs then if cs.DataObject = c then return cs; else locals csx := FindContainerStripe(cs, c); do if notnull csx then return csx; endif; endlocals; endif; endif; endfor; return null; stcon := GetNode(stcon); endcon := GetNode(endcon); for iac := IAConns do if iac.StartBox.DataObject = stcon and iac.EndBox.DataObject = endcon then return; elseif iac.EndBox.DataObject = stcon and iac.StartBox.DataObject = endcon then return; endif; endfor; locals startbx ContainerStripe; endbx ContainerStripe; do for x := ContainerStripes do if isnull startbx then startbx := FindContainerStripe(x, stcon); endif; if isnull endbx then endbx := FindContainerStripe(x, endcon); endif; endfor; if isnull startbx then log "Cannot connect " & stcon.Name; elseif isnull endbx then log "Cannot connect " & endcon.Name; elseif startbx <> endbx then IAConns append new IAConn call SetUp(startbx, endbx, endbx.NodeLevel - startbx.NodeLevel); endif; endlocals; Ofor x := ContainerList where x.DataObject = c do return x; endfor; locals cstr ContainerStripe; lowestlevel := 0; do if c is SWPlatform -> n then cstr := new HWContainerStripe call SetUp(n); else cstr := new SWContainerStripe call SetUp(c); h4㙇`eP endif; cstr.NodeLevel := level; ContainerList append cstr; AddFunctionLinks(c.SysFunctions, cstr); if c is SWContainer -> cs and notnull cs.Container then locals cbx := AddContainer(cs.Container, level); do cbx.Shapes append cstr; endlocals; else for css := ContainerStripes do if css.Level = level then css.Shapes append cstr; return cstr; endif; lowestlevel := max(lowestlevel, css.Level); endfor; loop do locals cssnew := new ContainerStripeStripe; do lowestlevel := lowestlevel + 1; if lowestlevel = level then cssnew.Shapes append cstr; endif; cssnew.Level := lowestlevel; ContainerStripes append cssnew; endlocals; break: lowestlevel >= level; endloop; endif; return cstr; endlocals; O P locals lpstart := new _LinePoint; cstr ContainerStripe; container := sw.Container; bx IASimpleBox; do if isnull container then cstr := BlankContainer; else cstr := AddContainer(container, level); if notnull LastContainer and container <> LastContainer then AddContainerConn(LastContainer, container); endif; LastContainer := container; endif; bx := new IASimpleBox call SetUp(sw); cstr.AddBox(bx, level); AddFunctionLinks(sw.SysFunctions, bx); lpstart.JoinWhere := Centre; lpstart.X := x; lpstart.Box := bx; ims.Points append lpstart; endlocals; Q1locals lpstart := new _LinePoint; bx _BoxShape; origXOffset := XOffset; cstr ContainerStripe; newbx := false; container := ia.App.Container; do if isnull container then cstr := BlankContainer; else cstr := AddContainer(container, level); KcRif notnull LastContainer and container <> LastContainer then AddContainerConn(LastContainer, container); endif; LastContainer := container; endif; newbx := true; for ab := AppBoxList where newbx do if ab.DataObject = ia.App then bx := ab; newbx := false; endif; endfor; if newbx then bx := new AppSimpleBox call SetUp(ia.App); AppBoxList append bx; cstr.AddBox(bx, level); AddFunctionLinks(ia.App.SysFunctions, bx); endif; lpstart.JoinWhere := Centre; lpstart.X := XOffset; lpstart.Box := bx; ims.Points append lpstart; locals subcount := 0; do for x := ia.Calls do if subcount > 0 then locals lp := new _LinePoint; do if XOffset = origXOffset then XOffset := XOffset + 4; endif; lp.JoinWhere := Centre; lp.X := XOffset; lp.Box := bx; ims.Points append lp; endlocals endif; if x.Async then else for sw := x.SWUnits do AddSWUnit(sw, ims, - 2.0, level + 1); endfor; AddAppAction(x.To, ims, level + 1, true); for sw := reverse(x.SWUnits) do AddSWUnit(sw, ims, 2.0, level + 1); endfor; endif; if notnull container then LastContainer := container; endif; subcount := subcount + 1; endfor; if notnull bx and (replytocaller or subcount > 0) then locals lp := new _LinePoint; do if XOffset = origXOffset then XOffset := XOffset + 4; endif; lp.JoinWhere := Centre; lp.X := XOffset; lp.Box := bx; dqxSb ims.Points append lp; endlocals; endif; endlocals; endlocals; 1Q R bS TZDefaultNotesPosition := Right; if notnull StickFigure then StickFigure := null; endif; locals cnt := new Container; do BlankContainer := new SWContainerStripe; BlankContainer.DataObject := cnt; cnt.Name := "No SW Container"; endlocals; locals mf := new MainHorzStripe; leftcol := new PathSoftwareStack; rightcol := new PathSoftwareStack; itb := new InfoTextBox; hd := new HeadingTextLine call SetUp("To show path, click on path name"); ss := new _StripeShape; do itb.Top := 30; Shapes append itb; itb.Add(hd); if ShowSecurity then locals sectb := new InfoTextBox; sechd := new HeadingTextLine call SetUp("Security"); do sectb.Add(sechd); AuthenticateText := new LineTextLine call SetUp("Assure Authentication"); AccessControlText := new LineTextLine call SetUp("Access control"); sectb.Add(AuthenticateText); sectb.Add(AccessControlText); rightcol.Shapes append sectb; endlocals; endif; if ShowSysMgmt then locals smtb := new InfoTextBox; smhd := new HeadingTextLine call SetUp("System Monitoring and Recovery"); do smtb.Add(smhd); FaultMonitorText := new LineTextLine call SetUp("Fault monitoring"); PerfMonitorText := new LineTextLine call SetUp("Performance monitoring"); BackupSwitchText := new LineTextLine call SetUp("Backup switch point"); smtb.Add(FaultMonitorText); smtb.Add(PerfMonitorText); smtb.Add(BackupSwitchText); rightcol.Shapes append smtb; endlocals; endif; if ShowRoutingGateways then locals rgtb := new InfoTextBox; rghd := new HeadingTextLine call SetUp("Routing, and Gateways"); do JU rgtb.Add(rghd); RoutingText := new LineTextLine call SetUp("Message routing"); GatewayText := new LineTextLine call SetUp("Middleware gateway"); DataConvertText := new LineTextLine call SetUp("Data conversion"); rgtb.Add(RoutingText); rgtb.Add(GatewayText); rgtb.Add(DataConvertText); leftcol.Shapes append rgtb; endlocals; endif; if notempty(leftcol.Shapes) then mf.Shapes append leftcol; endif; LastContainer := null; for sp := ImpPathList do locals ims := new ImpPathLine; ln := new ImpPathTextLine call SetUp(sp.Name, ims); lpstart := new _LinePoint; origXOffset := -2; startswithuser := sp.StartsWithUser(); do itb.Add(ln); XOffset := origXOffset; if startswithuser then if isnull StickFigure then StickFigure := new UserBox; ss.Shapes append StickFigure; endif; lpstart.Box := StickFigure; lpstart.JoinWhere := Centre; lpstart.X := XOffset; lpstart.Y := 30; ims.Points append lpstart; endif; if notnull sp.First then AddAppAction(sp.First, ims, 1, true); else log "StartPath has no action"; endif; if startswithuser then locals lpend := new _LinePoint; do lpend.Box := StickFigure; lpend.JoinWhere := Centre; if XOffset = origXOffset then XOffset := XOffset + 4; endif; lpend.X := XOffset; lpend.Y := 30; ims.Points append lpend; endlocals; endif; Shapes append ims; endlocals; J5iLVk LastContainer := null; endfor; if notempty(ContainerStripes) then ss.IsVertical := true; ss.Spacing := 50; for c := ContainerStripes where notempty(c.Shapes) do ss.Shapes append c; endfor; endif; if notempty(BlankContainer.Shapes) then ss.Shapes append BlankContainer; endif; mf.Shapes append ss; if notempty(rightcol.Shapes) then mf.Shapes append rightcol; endif; mf.Top := 100; mf.Left := 150; mf.Spacing := 100; Shapes append mf; Shapes appendlist IAConns; Shapes appendlist FuncConns; endlocals; ZT U kV falsefalsefalseͱStartBox := st; EndBox := en; ͨDataObject := t; ͟DataObject := ug; ͖locals tx := new TaskAppXref; do tx.Build(); for te := tx.Table where te.App = selected and te.Task notin TaskList do locals t := te.Task; do TaskList append t; for p := t.Paths do PathList append p; endfor; for u := t.Users where u notin UserList do UserList append u; endfor; endlocals; endfor; endlocals; BuildDisplayBase(); ͏locals tx := new TaskAppXref; do tx.Build(); for te := tx.Table where te.App in AppList and te.Task notin TaskList do locals t := te.Task; do TaskList append t; for p := t.Paths do PathList append p; endfor; for u := t.Users where u notin UserList do UserList append u; endfor; endlocals; endfor; endlocals; BuildDisplayBase(); ͇TaskList append selected; for t := TaskList do for p := t.Paths do PathList append p; endfor; for u := t.Users where u notin UserList do UserList append u; endfor; endfor; BuildDisplayBase(); ,^\̀for t := TaskList do for p := t.Paths do PathList append p; endfor; for u := t.Users where u notin UserList do UserList append u; endfor; endfor; BuildDisplayBase(); yUserList append selected; for t := selected.Tasks do TaskList append t; for p := model.Paths do PathList append p; endfor; endfor; BuildDisplayBase(); rfor t := model.Tasks do TaskList append t; for p := model.Paths do PathList append p; endfor; endfor; BuildDisplayBase(); klocals sb := find x := ServerBoxList where x.DataObject = sv do x endfind; do if isnull sb then sb := new ServerStripe call SetUp(sv); ServerBoxList append sb; locals lb := find y := LocList where y.DataObject = sv.Location do y endfind; do if isnull lb then lb := new LocationStripe call SetUp(sv.Location); LocList append lb; lb.Level := lvl; else lb.Level := max(lb.Level, lvl); endif; lb.Shapes append sb; endlocals; HighestRow := max(HighestRow, lvl); else for z := sb.TopStripe.Shapes where z.DataObject = a and z is ApplicationBox -> ab do return ab; endfor; endif; locals abox := new ApplicationBox call SetUp(a, aknd); do sb.TopStripe.Shapes append abox; if ShowData and notempty (a.Datas) then sb.BotStripe := new SmallHorzStripe; sb.Shapes append sb.BotStripe; for d := a.Datas do sb.BotStripe.Shapes append new DataBox call SetUp(d, aknd); endfor; endif; return abox; endlocals; endlocals; Wlocals a := aa.App; abl ApplicationBoxList; do if notempty(a.ProductionOn) then for po := a.ProductionOn do abl append AddServer(po, a, eProd, lvl); endfor; endif; if ShowBackup and notempty(a.Ba{K11;XckupOn) then for bo := a.BackupOn do abl append AddServer(bo, a, eBackup, lvl); endfor; endif; if ShowDevelopment and notempty(a.DevelopmentOn) then for dvo := a.DevelopmentOn do abl append AddServer(dvo, a, eDev, lvl); endfor; endif; for c := aa.Calls where notnull c.To do locals childboxlist := AddAction(c.To, lvl + 1); do for x := abl; y := childboxlist do Shapes append new AppDataflowConn call SetUp(x, y, c.Async, eProd); endfor; endlocals; endfor; return abl; endlocals; dW X YBif notempty(LocList) then LocList := []; endif; if notempty(ServerBoxList) then ServerBoxList := []; endif; HighestRow := 0; locals mv := new MainVertStripe; mh := new MainHorzStripe; ul := new MainHorzStripe; tl := new MainHorzStripe; do mh.Top := 20.0; mh.FrontDuctSize := 20.0; mh.BackDuctSize := 20.0; mv.Spacing := 47.0; mv.FrontDuctSize := 30.0; mv.BackDuctSize := 30.0; mh.Shapes append mv; mv.Shapes append ul; mv.Shapes append tl; ul.Spacing := 100.0; Shapes append mh; for u := UserList do locals ub := new UserBox call SetUp(u); do ul.Shapes append ub; for t := u.Tasks where t in TaskList do locals x := search_dataobject(tl.Shapes, t); tb _BoxShape; do if isnull x then tb := new TaskBox call SetUp(t); tl.Shapes append tb; for p := t.Paths where p in PathList and notnull p.First do locals al := AddAction(p.First, 1); do for ab := al do Shapes append new AppDataflowConn call SetUp(tb, ab, false, eProd); endforGcZ; endlocals; endfor; elseif x is _BoxShape -> bs then tb := bs; endif; Shapes append new UserTaskConn call SetUp(ub, tb); endlocals; endfor; endlocals; endfor; for x := 1 to HighestRow do locals rowh := new MainHorzStripe; do rowh.FrontDuctSize := 50.0; rowh.BackDuctSize := 50.0; for lb := LocList where lb.Level = x do rowh.Shapes append lb; endfor; if notempty(rowh.Shapes) then mv.Shapes append rowh; endif; endlocals; endfor; endlocals; _BY Z \trueZfalseXfalseJStartBox := dbox; EndData := dt; if cat = eETL then MidAnnotation := Annotations <<"ETL">>; elseif cat = eDBCopy then MidAnnotation := Annotations <<"Copy">>; endif; ?StartBox := st; EndBox := en; if async then MidAnnotation := Annotations <<"Def">>; endif; if aknd = eBackup then SetStyle("AppDataflowBackupConnStyle"); endif; 4@StartBox := abox; EndApp := aend; Async := async; AKnd := aknd; &DataObject := lc; if isnull BotStripe then BotStripe := new SmallHorzStripe; Shapes append BotStripe; endif; for bx := BotStripe.Shapes where bx is DataBox -> db do if db.DataObject = d and db.Knd = knd then return; endif; endfor; locals dbox := new DataBox call SetUp(d, knd); do BotStripe.Shapes append dbox; for tf := d.FlowsTo do context.DBDataflows append new DBDataflowConn call SetStart(dbox, tf.To, tf.Category); endfor; endlocals; [locals abox := new ApplicationBox call SetUp(a, aknd); synclist ApplicationList; asynclist ApplicationList; do TopStripe.Shapes append abox; if connect then for dfs := a.SyncCa4N K\*lls() where dfs notin synclist do context.AppDataflows append new AppDataflowXref call SetStart(abox, dfs, false, aknd); synclist append dfs; endfor; for dfs := a.AsyncCalls() where dfs notin asynclist do context.AppDataflows append new AppDataflowXref call SetStart(abox, dfs, true, aknd); asynclist append dfs; endfor; context.AppBoxList append abox; endif; endlocals; if context.ShowData then for d := a.Datas do AddData(d, aknd); endfor; endif; [ *\ sDataObject := sv; TopStripe := new SmallHorzStripe; Shapes append TopStripe; for a := sv.ProductionApps do AddApp(a, eProd, true); endfor; if context.ShowDevelopment then for a := sv.DevelopmentApps do AddApp(a, eDev, false); endfor; endif; if context.ShowBackup then for a := sv.BackupApps do AddApp(a, eBackup, true); endfor; endif; MDataObject := sv; TopStripe := new SmallHorzStripe; Shapes append TopStripe; ADataObject := lc; Shapes append new LocationName call SetUp(lc); 0]\update a := AppDataflows do delete a; endupdate; update d := DBDataflows do delete d; endupdate; locals mv := new MainVertStripe; mh := new MainHorzStripe; do mh.Top := 20.0; mh.FrontDuctSize := 50.0; mh.BackDuctSize := 50.0; mv.Spacing := 47.0; mv.FrontDuctSize := 30.0; mv.BackDuctSize := 30.0; mh.Shapes append mv; for lc := model.Locations do locals lstr := new LocationStripe call SetUp(lc); do for sv := lc.Servers do lstr.Shapes append new ServerStripe call SetUpAll(sv); endfor; mv.Shapes append lstr; endlocals; endfor; Shapes append mh; endlocals; for ad := AppDataflows; endb := AppBoxList where endb.DataObject = ad.EndApp do if ad.AKnd = eProd and endb.AKnd = eProd then Shapes append new AppDatafl2+[(^owConn call SetUp(ad.StartBox, endb, ad.Async, eProd); else Shapes append new AppDataflowConn call SetUp(ad.StartBox, endb, ad.Async, eBackup); endif; endfor; for df := DBDataflows do locals x := search_dataobject(Shapes, df.EndData); do if x is _BoxShape -> bs then df.EndBox := bs; Shapes append df; endif; endlocals; endfor; \] ^ falsefalsefalseDataObject := lc; if sp = eSwitch then MidAnnotation := Annotations << "Switch" >>; elseif sp = ePartial then MidAnnotation := Annotations << "Partial" >>; endif; DataObject := cc; Shapes append sh; BreaksText := "Breaks per year = " & str(cc.Breaks); DowntimeText := "Downtime = " & str(cc.AvgDowntime * cc.Breaks) & " mins per year"; DownRectWidth := cc.AvgDowntime * cc.Breaks * 2.0; locals fs := new _StripeShape; do Shapes append fs; fs.Left := 55.0; fs.Top := 22.0; fs.IsVertical := false; fs.Spacing := 2.0; repeat ceiling(cc.Breaks) do fs.Shapes append new FailFigure; endrepeat; endlocals; DowntimeText := "Total downtime = " & str(dt) & " mins per year"; PartialText := "Total partial service time = " & str(pt) & " mins per year"; DownRectWidth := dt * 2.0; PartialRectWidth := pt * 2.0; ͹&Breaks := 0; Down := 0; Partial := 0; ͶWBreaks := Breaks + cs.Breaks; Down := Down + cs.Down; Partial := Partial + cs.Partial; Ͳ0.0Ͱ0.0ͮ0.0_locals mh := new MainHorzStripe; ts := new CumStats; totdown := 0.0; totpartial := 0.0; picmv := new MainVertStripe; do mh.Left := 50.0; mh.Top := 120.0; mh.Shapes append picmv; Shapes append mh; TaskSummary := new TaskSummary; Shapes append TaskSummary; for aa := selected.Paths where notnull aa.First do AddApp(aa.First, 1, null, ts, eDepend); |Gm ` totdown := totdown + ts.Down; totpartial := totpartial + ts.Partial; endfor; TaskSummary.SetUp(totdown, totpartial); EmptyRows(picmv); endlocals; ͤ_ ` ͝Xlocals mh := new MainHorzStripe; ts := new CumStats; totdown := 0.0; picmv := new MainVertStripe; totpartial := 0.0; do mh.Left := 50.0; mh.Top := 120.0; mh.Shapes append picmv; Shapes append mh; TaskSummary := new TaskSummary; Shapes append TaskSummary; for t := TaskList; aa := t.Paths where notnull aa.First do AddApp(aa.First, 1, null, ts, eDepend); totdown := totdown + ts.Down; totpartial := totpartial + ts.Partial; endfor; TaskSummary.SetUp(totdown, totpartial); EmptyRows(picmv); endlocals; ͕locals re := new RowEntry; do re.Row := row; re.Shape := new StatsGroup call SetUp(cc, sh); Entries append re; endlocals; cumstats.Down := cc.Breaks * cc.AvgDowntime; cumstats.Breaks := cc.Breaks; cumstats.Partial := 0; ͎for e := Entries do if e.Shape.DataObject = dobj then if e.Row < row then e.Row := row; endif; return e.Shape; endif; endfor; return null; ͉4locals lb := FindInEntries(row, lc); pc := new PathConn; do if isnull lb then lb := new LocationBox call SetUp(lc); AddEntry(row, lc, lb, cumstats); else cumstats.FillZero(); endif; pc.StartBox := frombox; pc.EndBox := lb; Shapes append pc; endlocals; alocals db := FindInEntries(row, dt); pc := new PathConn; do if isnull db then locals dh := new DiskHolder; dk := new DiskBox call SetUp(0, 5); do dh.Shapes append dk; dh.AddData(dt, eProd); AddEntry(row, dt, dh, cumstats); db := dh; endlocals; else cumstats.FillZero(); endif; pc.StartBox := frombox; pc.EndBoxg3{ b* := db; Shapes append pc; endlocals; ͂a *b {locals sb := FindInEntries(row, sv); pc := new PathConn; ts := new CumStats; do if isnull sb then sb := new ServerBox call SetUp(sv); AddEntry(row, sv, sb, cumstats); else cumstats.FillZero(); endif; pc.StartBox := frombox; pc.EndBox := sb; Shapes append pc; if isnull sv.Location then display "Server " & sv.Name & " has no location"; else AddLocation(sv.Location, row + 1, sb, ts); cumstats.Add(ts); endif; endlocals; t5locals app := aa.App; ab := FindInEntries(row, app); pc := new PathConn; ts := new CumStats; do if isnull ab then ab := new ApplicationBox call SetUp(app, eProd); AddEntry(row, app, ab, cumstats); else cumstats.FillZero(); endif; if notnull frombox then pc.StartBox := frombox; pc.EndBox := ab; pc.SetAnnotation(sp); Shapes append pc; endif; for sv := app.ProductionOn do AddServer(sv, row + 1, ab, ts); cumstats.Add(ts); endfor; for ca := aa.Calls where not ca.Async do AddApp(ca.To, row + 1, ab, ts, ca.Dependency); if ca.Dependency = ePartial then cumstats.Partial := cumstats.Down + ts.Down; elseif ca.Dependency = eSwitch and notnull ca.SwitchTime then cumstats.Down := cumstats.Down + (ca.SwitchTime * ts.Breaks); else cumstats.Add(ts); endif; endfor; for d := app.Datas do AddData(d, row + 1, ab, ts); cumstats.Add(ts); endfor; endlocals; c?loop row := 1; hasentries := false; rowmh := new MainHorzStripe; do for e:= Entries where e.Row = row do rowmh.Shapes append e.Shape; hasentries := true; endfor; if hasentries then picmv.Shapes append rowmh; hasentries := false; row := row + 1; rowmSN1!dFh := new MainHorzStripe; else return; endif; endloop; l?c Fd [pfor tb := Table do if tb.Task = t and tb.App = a then return true; endif; endfor; return false; V>if notnull aa.App then locals ta := new TaskAppEntry; do ta.Task := t; ta.App := aa.App; for tab := Table where tab.Task = t and tab.App = aa.App do return; endfor; Table append ta; endlocals; endif; for c := aa.Calls do AddActions(t, c.To); endfor; Qefor t := model.Tasks; p := t.Paths where notnull p.First do AddActions(t, p.First); endfor; J;DataObject := a; AKnd := knd; DisplayControl := flag(knd); ?:DataObject := d; Knd := knd; DisplayControl := flag(knd); 4Left := lf; Top := tp; )if isnull DataStripe then DataStripe := new DataHorzStripe; Shapes append DataStripe; endif; DataStripe.Shapes append new DataBox call SetUp(d, knd); DataObject := sv;  Msg := msg; Msg := msg; Val := 0; Msg := msg; Val := 0;  Msg := msg;  Msg := msg; 5.0Shapes append itl; )Text := NewText; return RedisplayShapes;  Text := msg; ͌eDepend͊false+if isnull App then " " else App.Name endif zcif empty(Tasks) then return false; endif; return any t := Tasks with notempty(t.Users) endany; wfalseitrue\eETLJ_return for ac := Actions; af := ac.Calls where af.Async do af.To.App endfor; Gcreturn for ac := Actions; af := ac.Calls where not af.Async do af.To.App endfor; /1"20.0 1 Name := n;  return Name; /for p := Paths where p.Implemented do p endfor luA"H=IT Overview    '          Version 1.0   ]?TaskAppEntry9'   ^  _    d?"AvailDiagramBase:' e  f  g    ?"PathSoftwareDiagV'         ?PathByPathW'       q  " ?$PathSoftwareStackX'         ?IASimpleBoxY'        ?AppSimpleBoxZ'        $?SubStripe[' %  &  '   F:?$SWContainerStripe]' ;       <?$HWContainerStripe^' =       ?System' e      f Q>?,ContainerStripeStripe_' ?  @  A   H C?IAConn`' D  E  F    M?FuncConna' N  O  P    W?ImpPathLineb' X       4?AvailDiagram;'        Y? ImpPathTextLinec' Z  [  \    ?MainVertStripe%'       l C?NamedObj'       g 5?MainHorzStripe&'       m ?AvailSelected<'       d  i?TableShaped' j  k  l   :? SmallHorzStripe''       n ?RowEntry='        ?TitleBox('       o 9?CumStats>'         ?TaskSummary?'         ?ColHeadinge'        ?RowHeadingf'        ]?InfoTextBox)'       p ?TableEntryTextg'        ?AppTablesh'        ?TaskTablesi'        ?StatsGroup@'        E? Guidej'        ?InfoTextLine*'       q ̭"#R*Availability Diagram  R$Location Overview  R8Implementation Path Diagram  q , R&User Configuration  r ? HeadingTextLine+'       r  R(Focus on User Group  l Q R&Task Configuration   RFocus on Task  d V R$App Configuration   R*Focus on Application  ;  ?FailFigureA'        V R$Task Availability  d  R(Path Configurations  G ?PathConnB'         R&Application Tables  RTask Tables  ?LocationBoxC'        G?LineTextLine,'       s ? LocationDiagramD'         ?BlankTextLine-'       t  ? IntInfoTextLine.'       u ?LocationStripeE'         ?ServerStripeF'          ?$FloatInfoTextLine/'       v  G |?AppAction' i  }  ~    ?"TextInfoTextLine0'       w  ?LocationNameG'   !  "   ͿZShow SecurityShowSecurityZ.Show System ManagementShowSysMgmtZ0Show Routing & Gateways(ShowRoutingGatewaysZIterate PathHit Y (? AppDataflowXrefH'   )  *   ZShow BackupShowBackupZ"Show Development ShowDevelopmentZShow DataShowDataXCABAOKXCHBBACancelUAABC  Y Number or Slots SlotsY"Number or ThingsThingsY$Use Pseudo RandomIsPseudo?ServerBox1'       x Y&Pseudo Random SeedPseudoSeedVAABCHC$Select User GroupUserListVAABCHC6Select Implementation PathImpPathList3zU$y$VAABCHCSelect TaskTaskListVAABCHCSelect TaskTaskListVAABCHC&Select ApplicationAppList͒%'HB͓&'HB͔''A͕('  ?$CriticalComponent'       h HC BL6? AppDataflowConnI' 7  8  9      A  ͖)'͗+'  ?ActionFlow' j        $  A  ͘,'  BA !  @  ͙-'  BA͚.'   !  A  ͛/'  A?DBDataflowConnJ' B  C  D    !  A  ͜0'   !  A  ͞4'  A@@@@ +    ͝1'Server     BpA  backbox * pA BB@A@ B !?DiskHolder3' "  #  $  y `AA@ BAA@ BBA@ B@BBB͡7'Application   N?&PathConfigDiagBaseK' O  P  Q    0 4B B   # @A BpABackup   #  AAApADev  @$BA  ͟5'Disk Box   .  AA A@ - @AA .  A@ A@ . @A . A@AA͠6'Data element  A  / 4B B     # @A BpABackup    #  AAApADev  @$BA  +?DataHorzStripe4' ,      z ͣ;'*Availability Diagram  ͤ<'*Availability Diagram͢?'$Statistics Totals  HBA & CpA  -?DiskBox5' .  /  0  {  & AC A   9 \B B  pACdݡ% :   B  pAͥ@'&Critical Component   ! HB ABpA    ! HBABpA  " 9 \B B !  AͦA' # $ 8 @@% 8 @@ͧB'Dependency 1 & *x*Can switch to backup ' Switch( ;  BPA) %  BPABackup Switch.xFCan run with partial functionality + Partial, ;  BPA6?DataBox6' 7  8  9  | - %  BPA,Partial FunctionalityͨC'Location / 0 ,  B B5m?UserConfigDiagL' n  o  p   2  @@BB 1 ͮI',Application Data flow 1 3 7xAsync call 4 Def5 7 `ApA>t?ConfigByUserM' u  v  w  l  6 ' ??@APAAͩJ'DB Data flow 5 8 <x8Extract, Transform and Load 9 ETL: 7 `ApAR{?TaskConfigDiagN' |  }  ~   ; ' ??@APAE@xCopy database =  Copy> 7 `ApA? ' ??@APAC_?ConfigByTaskO'       d  ͪD'"Location Diagram A ͫE'Location B @@@@E ,  C D ͬF'Server F A@@pA@v?AppConfigDiagP'        G B BJ *  H I L  @@ BpA K ͭG' M N BB A?ApplicationBox7' B  C  D   P  @@`BB O 2 ?ConfigByAppQ'       ;  ͯL'6User Configuration Diagram Q  R ͵R'User group S TApBU = pA@@g ?UserBoxR'        V = pApApA BW = AAA5 9v&X = pA B@@pBY = pA BApB[  AAHBA Z ͶS' Task \ ] BB_  @@`BB ^ J ?TaskBoxS'        ͷT'User does Task <  ?Container'       k ͰM'6User Configuration Diagram ` ͱN'6Task Configuration Diagram a  b ͲO'6Task Configuration Diagram c ͳP'DApplication Configuration Diagram d  e ʹQ'DApplication Configuration Diagram f ͽV',Path Software Diagram h  g ͿX'A(?UserTaskConnT'        Y'(System SW component i j A pBAl  @@`BA k L?TaskAppXref8' }  M  N  ~ Z'Application m n @ BHBp ( @ ABA o ͼ]'Container SW q A@@@@pA@@t ?  r s v  @@@B A u ͻ_'HB?PathDiagBaseU'        ͹`'.Path action connection C ͺa'(Function connection E ͸b' > c'   w xHCA{ ) y @ z ^'HW node | A@@@@pA@@ B  } ~ ́  @@@B A  ['A;W',Path Software Diagram  e'  ̈́ G pAB͆  @pAB  ͈ G pABpA  f'  ͊ G BpA͌  @BpA  ͎ G pA  pAg'  ͑  @@@pApA  h'i'͏U ͉U   ̓U   ͂P   |U  wUx { qUt v mUn p iUj l hR   oĄ'gP   fP   eP   dR   cP   bP   aR   `P   \U] _ SUT U V W X Y [ RP   QR   MUN P FUG J L BUE AP   =U> ? 9U: ; 8Y< @ 4U5 6 3Y7 /U0 2 +U, - 'U( ) &Y* . #U$ % U  " U    R    U     U     U    U       U U U U U U  U U  S    ;AͽDͼCͻDͺC͹D͸CͷDͶC͵DʹCͳDͲCͱDͰCͯDͮCͭDͬCͫDͪCͩ@ͨ@ͧ@ͦ@ͥ@ͤ@ͣ@͢@͡@͠@͟@͞@͝@͜@͛@͚@͙@͘@͗@͖@͕@͔@͓@͒@͑@͐@͏@͎@͍B͌@͋@͊@͉@͈@͇@͆@ͅ@̈́B̓B͂@́@̀@ /(B~@}B|@{@z@y@x@w@v@u@t@s@r@q@p@o@n@m@l@k@jBiBh@g@f@eB Q         O       ͐ = shape.Text͍ = shape.XEnd͋= shape.DataObject.Name͇ = shape.YEndͅ= shape.DataObject.Namè= shape.DataObject.Name~= shape.GetHeight()}= shape.GetWidth()z = shape.Msgy= shape.Marginu= shape.DataObject.Names= shape.GetHeight()r= shape.GetWidth()o= shape.DataObject.Namek= shape.DataObject.Name^= shape.DataObject.NameZ= shape.DataObject.NameO= shape.DataObject.NameK= shape.DataObject.NameI= shape.GetHeight()H= shape.GetWidth()D= shape.GetHeight() C= shape.GetWidth()1= shape.DataObject.Name!= shape.DownRectWidth= shape.DowntimeText= shape.BreaksText= shape.DownRectWidth + 55.0= shape.PartialRectWidth= shape.DownRectWidth= shape.PartialText= shape.DowntimeText= shape.DataObject.Name  = flag(eDev) = flag(eBackup)= shape.DataObject.Name = flag(eDev)= flag(eBackup)= shape.DataObject.Name= shape.GetHeight()= shape.GetWidth() =shape.Msg =shape.Margin= shape.Msg & str(shape.Val)= shape.Margin #A4= shape.Msg & str(shape.Val)= shape.Margin = shape.Msg= shape.Margin = shape.Msg= shape.Margin =shape.Text4Import!H=IT Overview    '          Version 1.0   ;a8.A5ImportFR)͵<The task done when a mortgage is closed for whatever reason.ͱ@The task done when the customer accepts the offer of a mortgage.ͭ?The task done when making an offer of a mortgage to a customer.ͩdThe task done by a retail customer when they want to move money between their accounts or pay bills.ͥMThe task done by a telephone operative dealing with a retail customer's call.͡An ATM money withdrawal task.͝JThe task done by a bank clerk when a customer wants to deposit some money.͙KThe task done by a bank clerk when a customer wants to withdraw some money.͆3A small system for helping the mortgage sales team.|AThe main mortgage application that manages the mortgage accounts.t>Provides a front end system for bank staff who sell mortgages.h_xAn interface between the channel systems  web server, card server, etc  and the retail and business accounts services.\LA connection to SWIFT for national and international secure money transfers.R3The web server for the bank's web banking facility.O[An access point to the bank's system from external card systems like Visa, Mastercard, etc.E&Supports the telephone bank operators.>Supports the ATM network.:2An application that supports marketting campaigns.4GThe Management Information System. Takes data feeds from other systems.1<The application that handles the bank's internal accounting.'4The central server for the bank's business accounts.NThe central server that handles the retail accounts. Runs on an IBM mainframe.An application that runs in the branch server. (I have ignored branch staff workstations.) Provides a common look and feel for many branch applications, and acts as a portal to the bank's IT services. It is a Windows server program.~Tv*p' }l'  yz'{ wy'x z ul'  qz's py'r nl'  lz's ky'm il' g#'fz'D K X cz'e by'd `l'  ]l'  Yz'[ Vz'X Uy'W Z Sl' Pl' Lz'N Iz'K Hy'J M Fl' Bz'D Ay'C ?l' =p' ;l' 8y'9 7p' 5l' 2l'  /z'[ -z'N ,y'. 0 +p' *l' (l' %z' e $y'& #p' "l'  l' z' y' l' n' ! ) 3 6 < @ G Q T ^ a j o v ~  m'     m'           m' k'   Head office staff.TBusiness customers (i.e. business employees usually working in finance or treasury).EThe retail customers themselves (i.e. ordinary bank account holders).TStaff working in branches, maybe several branches, trying to rustle up new business.TA manager of an area concerned only with mortgage selling and bad mortgage accounts.MStaff people who work in branches handling customer withdrawals and deposits.ͿiThe task done by a business customer when they want to look at their account or move money using the web.ͼUThe task done by a telephone operative when handling a call from a business customer.͹NThe task done by a sales manager that gives an overview of how they are doing.S=Y`+ '*Java Virtual Machine     'EJB   !'Unix Web     '*Java Virtual Machine     'Web Server  '  s' s' s' s' s' s'  s' s'  s' s' s' s'   s' s'    s'   n'  n'~  o'~  o'v o'o o'j o'^ a o'T o'Q o'G o'@ n'6 < o'6 < o'3 n') o') o') n'! o'! o'! o'  l' l'   l' l' l' {' {' #'{' {' #' #' {' #'|'     w'            u'      u' w' ͽw' ͺw' ͸u' Ͷw' ʹu'   Ͳw' Ͱu' ͮw' ͬu' ͪw' ͨu' ͦw' ͤu' ͢w' ͠u' ͞w' ͜u' ͚w' ͘s'            ͔r'   ͑r'   ͏r' ͍r' ͋r' ͊p'     ͉p' ͇l' ̈́z'{ ͂z' ̀y'   *3;A[,r' q  o s' r m v' t Mortgage Portal?A u  w   x' v z' y  v {' z  ~' | "Mortgage Service?A }    ́' ~ ̓'  ~ ͅ'  ~ ͈'  8Mortgage Propecting Service?A    ͌'&Retail Accounts DB?A   ͎'*Business Accounts DB?A   ͐'Mortgages DB?A   ͒'MIS?A    ͓',Mortgage Prospects DB?A  ͕'CoreRetMIS   ͖'CoreBusMIS   ͗'MortgageMIS   ͛'  2Branch Retail Withdrawal    ͟'  ,Branch Retail Deposit    ͣ'  ATM withdrawal    ͧ'  2Telephone Retail Banking    ͫ'  &Web Retail Banking    ͯ'  Offer Mortgage    ͳ'  Accept Mortgage    ͷ'  Close Mortgage    ͻ'  "Marketing report  ;'  6Telephone Business Banking  '  *Web Business Banking    '  Branch Clerk  '  "Mortgage Manager  '  Branch Sales  '  "Retail customers  '  &Business customers  '  Head Office'  Branch Banking   'ATM Service C  '(Call Centre Service J  '  &Web Retail Banking W  'Offer Mortgage x  ' Accept Mortgage z  'Close Mortgage z  'MIS 9  '6Telephone Business Banking M  'Web Service Z  'Dealer Path r !'Windows Server   !'IBM Mainframe     ' CICS   !'Unix Simple  !'Unix Java EJB    *VG-,)] '8Example banking application         'Branches?A  'Branch Server?A     'London?A  'London A?A     'London B?A     'London C?A      'London D?A      'London E?A    'London F?A      'London G?A    'London H?A   'London J?A    'London K?A     ' Leeds?A  'Leeds A?A   'Leeds B?A   'Leeds C?A   'Leeds E?A   'Leeds F?A    '  Branch Banking?A      '    '  & !'  .Retail Banking Service?A  "  # $   &' % ! )' ' 2Business Banking Service?A ( *  + ,   .' - ) 0' / ) 3' 1 "Accounts Service?A 2 6' 4 MIS?A 5  7 8 9' 6 <' : .Mktg Campaigns Service?A ;  = @' > ATM service?A ?  A C' B  @ D' C d G' E (Call Centre Service?A F  H   J' I  G K' J d M' L  G N' M . Q' O Card Service?A P T' R Web service?A S  U   W' V  T X' W d Z' Y  T [' Z 0 ^' \ "SWIFT Connection?A ] a' _ Channels Hub?A `  b g  d' c f a e' d & j' h 4Dealer BackOffice Service?A i  k m' l j o'"Dealer Front End?A n  p \h_,0,W - -&IT System Overview      <For WeaverBird version 2008v2JCopyright (c) 2008, Polyphony IT Ltdj'locdiag$Location OverviewExample BankbrowseExample Bankimpdiagsel8Implementation Path DiagramExample Bankuserdiagsel(Focus on User GroupExample BanktaskdiagselFocus on TaskExample Bankappdiagsel*Focus on ApplicationExample Bankavaildiagsel$Task AvailabilityExample Bank apptable&Application TablesExample Bank tasktableTask TablesExample Bank introIntroduction  Config(IT Systems Overview   Tech2Technical Implementation   ImpListExample Bank UsersUser Groups   UserListExample Bank Tasks Tasks   TaskListExample BankAppApplications   AppListExample Bank$configwithfuncJConfiguration Example with Functions # pCpCHB#7png "  ! (configwithflow@Configuration Example with Flow ' pCpCHB'7png & > % ,configwithcontJConfiguration Example with Container + pCpCHB+7png * rq )  i$ ( , h h h h  h       m          .PNG  IHDR26csRGBgAMA a cHRMz&u0`:pQ<pIDATx^?/e`aF7Ypp,N  Ssc6q慉63'_8/&sjpp;phnuKjԥ3#tMI!@ @ N"C @@OqVK @(w` @ @ ^=޾Q3 @V؍ @1 Xawԍ @ {=! @ f=Q7 @ @{G @س @bcu#@^@`~ @Y@`wԍ @ {=! @ f=Q7 @ @{G @س @bcu#@^@`~ @Y@`wԍ @ {=! @ f=Q7 @ @{G @س @bcu#@^@`~ @Y@`wԍ @ {=! @ f=Q7 @ @{G @س @bcu#@^@`~ @Y@`wԍ @ {=! @ f=Q7 @ @{G @س @bcu#@^@`~ @Y@`Ar1/wԍ @ {i6_>ns5Y?k_R @A|R{'/HpA J<@`▘bŽ7#BM\ӎ<~}g *-(Ws^oӳ{^(74}D/~` :npm*pyl-Ab~;tsx^/Mv\k ,~>>**{n}sW>6s moWqGCC  @ʁ*\y~\iɷx % } *Ҫr~@tVj|;ᩫ~FT׮so֔'YUu?-Qa;fl'헂r}8}SY_cyF~OTG^  @]V׎i,ofZ%o+ğoOKfӿ__7vf^ot ? ˹CLMjK}yۇן>ܼ!mf5oΏ߰>eё @ . ;|_mIfnxKӵWJ㽕{mڽG8Nػn1}0|GyV;F}g}}&~w׸7q< C ~^cy~L真:&Wέ~VooS`/xU߻AZ_ )L`eY- @@S H`|N-!7SՒ2q q- iU湜ꆻo ;~Ƭvyb'}+]M]M>'5^  @7^˯uAeF]N+Zq=}znګѿFV.[)OwM7t}7v<~'>pt&kyX<ˑ @ '{-dix9ڏzJU{{w('rt Jsci^OkӹR~|~|G>=?{͛*vS 9:ߠևoߔq4+8Q9j+X*~`/k4۴+{m0T'ԥcEԜέFϼ_0S^sUN.,{OpwKbîsތ$= g ϝ/e'@ L BӲ;{׹Rwqr0> @ ia۔_*̎ wĨ @jjEAbqC @UT[!Ç( +  @"#U#@  @"#U#@  @"#U#@  @"#U#@  @"#U#@  @"#U#@  @"#U#@  @"#U#@  @"#U#@  @"#U#@  @"#U#@  @"#U#@  @"?kǗs瞞^tx}[YyR^gDZknT@%@XG zG8K=q\7:*ߘ i1 @v> Xyrc~ @X؏A ѷ[YZ=6bi^\^SmEm+9bվzc~z6 m˘+{Ad @Sd2rzmyr _*e~j}7w33[bz붧! @Ke7vtwݼލZ}ciz^'~ǍK{gۺȴ`3]$@.p7_WρXs8i=6 U2tMOZi\<^Z}Ou=F֙[b  @B {}x׾Z?=|{ޭ֣-2g߬dן:v(W׫+\`DPI @@[b[WڿM }/9:u*#u^j!Sb\w>%&^ @ þi\ @B@`7 @D, G9F @@`7 @D, G9F @@`7 @D, G9F @@`7 @D, G9F @@`7 @D, G9F @@`7 @D, G9F @@`7 @D, G9F @@`7 @D, G9F @@`7 @D, G9F @@`7 @D, G9F @@`7 @D, G9F @@`7 @D, G9F @@`7 @D, G9F @@`7 @D, G9F @@`7 @D, G9F @@`7 @D, G9F @@`7 ӷ  NM" }ݤ&P7 VŘqwUؽYY t*]!@@.'85)[=ۮpRv=m  . YLuD@`Ϥ5 }yC-w|:޿k&H~>ܻA\nQvj7SlS-^C6.=P"U`/p e8lv0 +Sn!9v LM% bs*a}ſUjU|~ZAoVjEe?{}%|mU}`E(O^Uk0ol:gpOUwv lUͽ"񉁽R+&c;L{ zan= MڍRQ4W[}4bĘ[bp՗6w -1CO0 # - -<D i`/*{MǛek )bh[{=~! {vgLDXI@`_ R1I@`fX& /s6v=ʩRf ؜Dv]`{)- @`'.d&$ @`o^> ctWMI@`O7g >E̱ lL O{2]!  t& @- K' MW"nNTM"@n ,ؗ :zzJ"@@4k/χOf}|)/ |z=Oς?q s!V?(p[z>kϫsn=S:} v j/ὶ^_Vρ Y?*!8Ơ_{]o;֖v'jeN{ Hk\զCf`ԶJ}?}  zp̢\վs]_]V/o77V/{Ϋ>WB}7_ޅ2M{v{PSSMm!@Y`^cJͥXmE9][n zUػnJMp@<{<}&XM`^׷|TkZw}K]f`KLZom{)T[pvgKe%f AV >ZP.>w^vh#6_OcӛSn{zШue?xi VED =P&n`_Z  ӁaKL8[%* Os<v "y^V{Vݭ"L`ϥ"laR{], ܻ۴M`U(9;waVW`ST)[=ۮpRSm&o*cC "`a.lҫn{ݫq*0&?{E@s}{H 0C@`ħgL4H@`e . [8"V@`t5W?=5#AﷷG&# ?U  T >5 A ,9q T+s9j!@@.G>IU}C  ]`2[Փ>lN@`M[&+ HP@`'&e+ gN@𣧟~o~tousOO~x@ז?kn!~Ĥm{ރO{.7"7x֛%:  @`@΁!s ~,|Pw }pU>{9@p=8  @`{{b-**Dnengy z✪N-0r{EYQږS7+(u͡^++ rv$o`o t*]ƿVAزR}/!t]ٛo-:_zp9f+s+;̪J( HP -'͛@ń*א|[i}SV-pw]gmmxu#n̡ XM"p_@`7B @܁Jݱڧ-2m-eH?fŸҾX=/z}z]ۦSl)}׍w{[nؗmx1i5Cw &%# 'ӕB#{c H ==77kvl#ܖ]ˣ&{7xr ׭سr &@ GbXŮ}鵧^Vy#[!1>/gytֱܿh_6hxh`ol]i斑o|{u[?~qQoRJL-OzJL6u$v# <6z7g{3V#~0ȇ.g75vc ԟ8xJL/LWj{ā= Ԁ>^` B ^=޾Q3^`=ݜH  . ;W$J@`%\@}Mxhv{ݢRX&0ؗzY" 不ԓ X  @`5}5l سz P@`STK؍ @`5}5l سz P@`STK؍ @`5}5l سz P@`STK؍ @`5}5l سz P@`STK؍ @`5}5l سz P@`STK؍ @`5}5l سz P@`STK؍ @`5}5l سz P@`STK؍ @`5}5l سz P@`STK؍ @`5}5l سz P@`STK؍)]@`:O`}mm] q﹵76.F Z=ڮQ1FgHI@`O7g=_>;|?~Qҥ/>^?K7WϞ:_~GbEſ+E}V|u 2.!We4Bsyu*:3WgF@`U .q#K#ὶ^r_Vρ/_m)>typ  V!Fyj:;>/o:]@j{j==8 3{׷T֋]W׫"wʷV/pVk}Uy}޻ތnt&@؍$(muszqW"E_onH-V5~ںu(Ŧ=ɩIf3МBvثzp>Wrܙ^vr[b7–;ۋ7Ǜ_[_\sQ?Q Qw @`n{g~[7֟ SޛNk7׷t' y:Ng=Bz%+ƿ& ֣C~K\, 3n @ A}P~o$  @`8ܓ>VVgO'HJ@`O;5'}j4x݌&@|M@ d؋'xLa|L# Qs"+>eDŽ-#hG`#}#h!@Y@}}|9>X?WM‹6>wС]`rָxxF 0[ ^D.[bko_~RįeH6saq^OSؓN!@I ^_.Vˋ[ yǽ7p .o8]9C+M@9!Z1Ӷvv8~"s9j!@@Y"s1yu|W.?W_A8c=ѯzS-"@@v[b{+:tzk/Wn:067w9l! Pou[b-A ~=>RCLط%ON dj B% d'p؍$( o]K`Oprj 4 @ v=\޲d=~طqvl* o]K`tڸhhF 0_@`,Y`?I %=-cuk 4n @ A=\޲d=ɩIf3МB-cuk 4# @`S=\޲d}ibأ#@|X{т"to0,;賷G1!@1c]Ab A`{0Z, O&sk(CꗓSok+tu hL`> _+G>yv?0=~J2hz더,[4͍J@`;Tヨ>J`_gn*}s >. '%- 'ݽG@E1Y/'&h= 0_?O  @`>F1 djT @`>Vq4Ntj @J$@`}}}S% @Ntj\@`|h>rs}m'}?} 2" aU(A@`C/#1@ vؕRYXS@`_SSYC*أ"$@(  mk8] .%@555E@(=r  @ z=.RAa@ vؕRYXS@`_SSYC*أ"$@(  mk8] .%@555E@(=r  @ z=.RAa@ vؕRYXS@`_SSYC*أ"$@(  mk8] .%@555E@(=r  @ z=.RAa@ vؕRYXS@`_SSYC*أ"$@(  mk8] .%@555E@(=r  @ z=.RAa@ vؕRYXS@`_SSYC*أ"$@(  mk8] .%@555E@(=r  @ z=.RAa@ vؕRYXS@`_SSYC*أ"$@(  mk8] .%@555E@(=r  @ z=.RAa@ vؕRYXS@`_SSYC*أ"$@(  mk8] .%@555E@(=r  @ Z?g"'?*F @, 4h! ԒV_rxzz*?\  @`G?|GVUrsum&@!OOWs}e}Kd!E D, G9F@ZEP}{{{}Qs+ p؍l$ fÇѫ' ss& v?OO~yqB{y# E`uKM @ =`('{/8I@``X-wxz>wO_r+~~yXN >uƙi iV 1XV|cP xwx_ =\z !^`L* ? I T`U*A*~8|ufȫ/[ ?|y/O} 1>R_V߫oΫj:/S^u>F1)5m42XA H`f e=m)e ŭ_miZ@\}\U[g:=z]s )U`_GI Iu @^ebV*v_دʩWχVӏ)V˟4p^/ ܔѮs?Qo/[߆$Jnd)$7Bt{ epna9s cZǟVf@\myBy;X[omiW׹c/G,_"5nx @`#%JҵMOM{[+ool=T׶4nmm]鼙(Fw> vu[l_^P2Wy^\f7nJE ػVwY[1קι|\A=).u^ߺfvCjOXaycM7euS=P~oW;_[@`_[TyX'<{LlAm8<6e@S@`7"  fxou7zQr*%@`®UƀW;_[@`_[TyHuKFamoONv/l1 +;a9MS!/Q.;GHK@`O3\zӰ~ iir} 0J``  zIqPF{Fp8/jO_  /.r%VՋ_l),'>'4O`,,] x{#`[/n>-x߳pmݖG)+So I =+'ôV/rRK}{Ln=>q$.g( gLcثG8u9ŗpl<˛S7 1^U`W)&=P`O{4]z.I% HA@`O!BU) ) u.]tJ B/jC=2SSMm!@ j=Q w]&$@ =^Ԇ{Ue$ ԛB@ G1`0m l5]g^{N ؝TEU`ٸW!&@JJD@`߄EG19JN@`ڕ CBN  % br  +؇|+ !?;lYǗΩ6.>?&=P'vo_x~[H;7tx}~:폇 ͜A JVh jp^XK@`?Ԇ۳%f|hK̓>Q<\`a0J%@>qP~8||y:{XsumU@`gԋ]z'!~wOB· 9& #C@Į?>_ SqN#OB· 9& #C@ĮT>"T>{D(D`P' srT{ 8 @FF. B" ¨ FG@`/Ԅn  @`#}#hYE@`_Q!VWaTa#G# jB@`7 ˬ" ¨0*1}0h(؇#l% o%:d/[`A5]`% @D{D*- 1A~Ѻ} ?'@`G.wO壘+ p؍l$ ˍ$& '֡C@. BY{̽n$% ԋl& oFB. 9v]`'p8Q@`7  . F/7.Xj . f1 1 . {R/j  . {?O@`,Lv]`G0 @F. ܸLb{b9+ +, ;F@R. Iiff.D@. 칿j<} 0Y@`v} vÀ .or2 u . {PjsI .'1 Q .:yn"@d]`/N p l$ ˍ$& '֡C@. BY{̽n$%z`ozxzW"?w[\w5zVϧ)'9eO!'cqG1W!@*  H ^O?WcP_k9BxQ^76~Yh7z!p3hN!@;+"߮AîH)9 GO+ϙ!^@`o (RE=ӎrïʕ߬DfoEhwoj[j`\97ezt>֟p+*  @poVB{+C_:Rs~p꫟eϽ׊7=v=AsKk]WR#'9I Iu @;VVokk%^mӞ %ߜ_{SqSfO p__վWNk[ˤ:_^;XU@`_SaH3> ϗoZo^si47Co*}cKe%c4Cv^5#@ 1${O(-sO} |t{{w_k?4[qu*ygpyic۱bX/ 쉽hNR{Rݩ1,b`oliͧj%W}̛O^i~㍨S,汎?\_`yUU9F߶r @xJL*v{iY~<ұ Bvѧsmg' Ez/{!MWk(Hq}Y]7nN9sP:^ӖGB>; >p @` ݼiͅ뀫#`}s 0C@`طS'ϘN! @ n#5@{}f$& Zc!''9I Iu . Kc~PG ./ !7{)p!dN @<]`-ϛ"k @( KCuv/S5#@ 1]`-'9I Iu ./ !c~PG . K7{)p!dN @<]`_C/ϛ"k @( !Ҳv/S5#@ 1ӿ-z&r53]`_C/'9I Iu . Kc~PG ./ !7{)p!dN @<]`-ϛ"k @( KCuv/S5#@ 1]`-'9I Iu ./ !c~PG . K7{)p!dN @<]`_C/ϛ"k @( !Ҳv/S5#@ 1]`_C/'9I Iu . Kc~PG ./ !7{)p!dN @<]`-ϛ"k @( KCuv/S5#@ 1]`-'9I Iu ./ !c~PG @lh>@}2|ȉR\Q F6)odٱSTU@`gԫK@`7.# jB@{X:Tsv- T= <:ۯn1}+i٫מSov';,J@`Ϫ5v>)# QsN{K%z%@}Cسn! @s sԜC/k}s  0A@`Ь[cg3МB95 ڸD@`_\L'`94+= 4 @`>G9996.ؗ9 XJ@`Ϫ5v>)# QsN{K%z%@}Cسn! @s sԜC/k}s  0A@`Ь[cg3МB95 ڸD@`_\L'`94+= 4 @`>G9996.ؗ9 XJ@`Ϫ5v>)# QsN{K%z%@}Cسn! @s sԜC/k}s  0A@`Ь[cg3МB95 ڸD@`_\L'`94+= 4 @`>G9996.ؗ9 XJ@`Ϫ5v>)# QsN{K%z%@^ &tǢCӲ~*Et&  C`^/5|c*NM@`OGhQU`f{/S*iǨ kF۲k.EaJ'@E@`_3 a5Ö.{a$0M@`hط ;jĉ/K} sn8 @`#}Y:ۖ!x.o2t 60 a},]`Jbc!@ Y}g{XͰ ɾiX =b  Xؿ>|O+_4axm_~q{T`H`>-8g/_x]k1_뗧g^cO_>K)뫻o/#NT@`ϴ5z.V׋vt!U#Vũ\|[)Tss" U=n:tTqNsZo&چOWCoS) )6 ^:_?MZtks(o7W/mm~JyǠ_%]8{ў2lW(_T*b=Q5XU دD:E*sc^Uk0}3QW+7][_23r=׿-XOﷷG1W!@*  H`~`/q+Cu=/ eԪVt|R;ôPހb]_B`EeؓJ !@ vj]zmi0ںy3iQN;T7L7g}{J]~zq~% y?^qOcRzD}HV`^`}FNoVk7<^cM7e57oZ2]ۛNոnKL/rL@`F`42["tD,{{MeYaH`>- {X5Kg81S=ӎl[%_  /;HGj KQ,GXaJ !@ aX{&/]/RW<I) kԚi{lxc4(v ӼMݏR,]c ;~WǀUy*~yk菏f|@@5w>|}GoNYY|~g81S=ӎlxx`zg׶d˕NavfLXm5w}yIJ9~ܾ/}WܷS{v$T`/V+vb oK 1#^tS\~R}fm /KUأ @ -/=~b7fkl+ؗ}^q;O ؗi|M=VM &M-3!Wsvml>UoZ[_.o>p%ϭKm/ ?ԀLb-m*G/xe=56X]k7w>|MU_o:\_K`EO3WWT ؗExNbKLKMg=jv ӼM{ذ/g_'xH}&@ +}D\,]t+Yi  @}w[w1!p؍l$ aK7zqddRC]@`6E ۚKCNe( ثD@{jKLX5Kأ|R;GHK@`_3V3l{ZmZ^@`o (mC`agK̲CNe( ثD@7t-1CB|]`%J"#U#@ -=l`YkքFo)[ 5}4X{{{|on!@*  H`h}j D"#!@ ]=ݾղe2?g/ ZH@${$ u E& G!C@]^e{W߿^t_l>Y,כYm!O~yqB{y# B {<[jG?p &N'q92x>Z_1x=2gHS@`O_Q O:[V??k #}GHE@`oa0J%@;n 0^@`oHXI@`WJ!E7k$F[@`ԎI {[*v @`>ʑ .4C =nH% qH!w$F$ U, Ax}# @H$64 @`%]`_i()@{ݬK@`jC n=Q;$) Il"H@`Xvx+G @JPR ,,Y#  .5"Ն@{vHR@`ؓE V / V$@v}YYtF @ .]`kD G .'95@ =b  @_@` I+ JCI1سf$@@\׈Tq q @ I]`Or`k@{ X @@.[9Vbd! gIv=6#@@(@%@~]`7?/ r$$ + %B@`Ϣ5~_|0(9 |̈1S̭͞?rsq%@ @B Xʸ3o|(Te<* M@"B 旁kk7A % Y Yw \/!W=מnAXJ 1uk<k k*vcn  @`E}ELEh _D{=(*@)`~ v D@ªP1uk<k k*U2rsy&@ @UY Yw Xa7VWTeH* M@"B 旁kk7A % Y Yw \/!W=מnAXJ 1uk<k k*vcn  @`E}ELEh _D{=(*@)`~ v D@ªP1uk<k k*U2rsy&@ @UY Yw Xa7VWTeH* M@"B 旁kk7A % Y Yw ~r'?ZE+@WC {=! *V9/ g=vV_rxzz*?Z.`~>nwk=+ .W?KUe, N`ӷǕcX+`҇+sdd~M+IO'gK`@Mǀ{N#J19 _^[̯qNk֫Vj `Ÿo>|8Is2^'Mأ"$@1.PM76̯εj!% @n_n~PB/j  B7/ 7R(Y`OwO_s睿{?m_~ÈC/pW};㆗7v){$]C[wp7"x=i} P\-Ԟ4}w^ѡSꜾz ^ =FƖO}Z;N{u>g3?C}*e>Q(N{ު VG vo[s%\~z`_סo{@ Ȱ*%c'7~h~m[`O?@0Gۭ)om%&M-1=۽yŽN{W\3E$}BXtZ{S'> tzb}\P|ZC '.X76xcM|\F?nVW8{ӼII7\ᱎw{OQGkgaOϴC|VM;k qLj}42EU08n;B`77½_}N9ZC@(=7\C@!:hcʵwW%;]`_;dcJy)kwfVX`O?@0]`_; cJy{o.X`p<aH`S=uj=b'@;ɑ'&&@%vc|3̯tA XU+z%/Pͯ_z.N`?~*֚ =c~:jS/k?}55P@ȰWn@!<W0{uVW̶ B`vopk^B` KؓފLVW =: -z}>\|xԤh~O >e^=rF!'S@z`tx}~i.}<<<ǚOB9-mC̯mةǗch2X_@֟_ _Z/~1ns׽ ;(R7s[_/75n' &$x ].}x(rů 翿uxP^f]@+@oN-"Oأ"$n7ޯ~\_ebZo><a~-l=R?d؋*`Xmzהpj"鷘!PW8Jcu -/ĔɕA[76S=wƲ@!h~;&/7T,Oo:=pZl)n@=of7ַd1*5Risf+ԘC jq3x Ŋ=u<(v=˷6zA@`o}UQ(g7`}{H]eHH@`O3B`W,ݿZG`5}5l (l 76@~%4= {8*Pq4je~я}_#e {_ ?]=Vu(8Gf2G+i.0OO9S؍+-]c / Xa+T@c 1P bܼ6̛׸Q{*= @n_n~PB/j  B7/ 7R(Y`O@!Phe~_),Ћ@`B(M42ͯJSEm @!P&e~_W % )6@@(p2̯p+zQl PEf~_WB{ 6( "D3/+Jd=^@n_n~PB/j  B7/ 7R(Y`O@!Phe~_),Ћ@`B(M42ͯJSEm @!P&Fe<=75Me~_W % )6@@(p2̯p+zQl PEf~_WB{ 6( "D3/+Jd=^@n_n~PB/j  B7/ 7R(Y`O@!Phe~_),Ћ@`B(M42ͯJSEm @!P&e~_W % )6@@(p2̯p+zQl PEf~_WB{ 6( "D3/+Jd=^ GOOr>1ϯSEm }tLW8nS8 ś_~W A|(x3Q8(ϯ ofQ? 2g}c_ {9D$ꁢgծp^- 뢬ӛsUnsC_xS:\w|}[CMFk[@]DABj038M‘{ 6X=PYQwLkU ?W|R[=[ao2nV2kSQ_~Qz&ڷ:OZ>gDA?1W_S~ޓ|4g ‘{ 6X=P LA OO+{wب9 =޵O#ϽM9$ yvۦo(Oꁽyv9gzn~ReL3C??R8R`O[bz&垃i;x7YaOBA)_[ `U^]?U;u檣~Z=Oٜq<Ξۑ^?R8R`OY)ߨק\k' 'fkhN }}' kJH=^d(p1)ɱC_<G F AC`5ʃ̯t|kJH=^ #Pe~/9)L`@!P3&S/9Y2=L`ϴ5TB(ΚǛ_5~xck3@!P̘8#O1/kd0=ӎlS B:ko~_{f@1c<2̯%L;^ L( be~_KG 96! PŌ32FNL3x&0U@(fe~/9)L`@!P3&S/9Y2=L`ϴ5TB(ΚǛ_5~xck3@!P̘8#O1/kd0=ӎlS B:ko~_{f@1c<2̯%L;^ L( be~_KG 96! PŌ32FNL3x&0U@(fe~/9)L`@!P3&S/9Y2=L`ϴ5TB(ΚǛ_5~xck3@!P̘8#O1/kd0=ӎlS B:ko~_{f@1c<2̯%L;^ L( be~_KG 96! PŌ32FNL3x&0U@(fe~/9)L`@!P3&S/9Y2=L`ϴ5TB(ΚǛ_5~xck3cooobLs0̛9W> {>} E;9 ͯ,@F_Ay^.P(O1Rc{_=: Qf[@!g;7h/!?ߥ I+s霼=ͯZמN>h7HbN/'qc2v-՟ZC @101I͗eC ' :q* {*c9v_>{{Z5 />= ؝U}g/O!@HL@`OC5 @ -= @:Ts @O!@HL@`OC5 @ -= @:Ts @O!@HL@`OC5 @ -= @:Ts @O!@HL@`OC5 @ -= @:Ts @O!@HL@`OC5 @ -= @:Ts @O!@HL@`OC5 @ -= @:Ts @O!@HL@`OC5 @ -= @:Ts @O!@HL@`OC5 @ -= @:Ts @O!@HL@`OC5 @ -= @:Ts @O!@HL@`OC5 @ -= @:Ts @O!@HL@`OC5 @ -= @:Ts @O!@HL@`OC5 @ -= @:Ts @O!@HL-8hIENDB`*. / 0 1 2 3 4 M5 )ImageConfigCont.pngh۬86PNG  IHDR&[/sRGBgAMA a cHRMz&u0`:pQ<IDATx^$aaZ#1b+ H\/xG h\xE5=3&^HT/NA!cp5W\İ}_HF4c _֤į^W\;N9u=UJ6:E @1` @c yp&@ @*.  @[@0 @+& @b2~ @O @L5 @ `) @} @L? @_@0Ԁ @@I @ & @H^@0I@ @`|d>P @ &ɟ @/ j@ @ y$S @@  @$/ $ @ 0`2~ @O @L5 @ `) @} @L? @_@0Ԁ @@I @ & @H^@0I@ @`|d>P @ &ɟ @/ j@ @ y$S @@  @$/ $ @ 0`2~ @O @L5 @ `) @} @L? @_@0Ԁ @@I @ & @H^`o0ypy5>. cyu"pAe 1Ã\?'q~A*G8J@09m.Ƙ &'} }xB JM\WERVǘíVB &٤bJg"@+ YLj ƳLA @z &˕) nBYL +3ʼnYm.겜$puyQ{ٞUqپfeYγCVDTOSL4];Tz?tR}غ} γl6ϯw3~=nz: @rt`rHVh_  E9 7fJ qWn"].10@ &,p =& &BI !67>9'ڑ١_\}OY>:tJzHK`+_R7ʿ&3*m,_sqⷩVJ9'U+޼^9EKIiuVoLF&V<+a9 m/b {6o(Y%@tLjƼ"^=w~S}ժGUaeQ|iգU]7/}~y}Eٮޞ WY0 Wu*N*6L,_.I}RV88jN.Ca2Ҹ;>pF7D @ L'W/MٝX,w[r.=[Ɗ]Rz4p߫{ \!tB@ MϭL}ت}ϳՕ:R{ib?lʞk3-]_qLݛc &yXwo9%hM}<9ߐ,K02t/z YKfk#˷,VIV\wj@;hǤ`RolbrS{ZgndF:؇ת'+o)j; P-m0iyJdZd숺,VD _?Ӛ Ь{ⲗVL֗Vwʩ?+4?O#>lܾVى<_g|rgK[`RG$#^p`ߵUyDp:vo}m^l߯bm*/W*|.,?vVVT=.v'V%VεR-ĽvdDCB]yvj0U#~[T; @` ɼ>wH ٪uX!X4gqI%J[(N 1*]`.\ZY &5V^!{)Ms܇TdZ҇GX}uLjΣcg?$@BhLBzusIWR| @XN{.Im^6)LD܇1* @`lOj,4AmBU@0Lj;0}8  @ &ɟ @/ j@ @ y$S @@  @$/ $ @ 0`2~ @O @L5 @ `) @} @L? @_@0Ԁ @@I @ & @H^@0I@ @`|d>P @ &ɟ @/ j@ @ y$S @@  @$/ $ @ 0`2~ @O @L5 @ `) @̓Ƀ>~g W響}+[vSo+ϜۼzjXy=g*Xn;P]{"P, @6A\~NS?_?x_ШzxYq#/C @ +&{4)狔ɨxo) ئ]4)c2Q\Ҷx>"D1T @`\r/*Xڽ|Ra{*+,`P|V!̴z*W^M>uрOpt @ 4dj9 @) &(OZ^JtRZsn97j+ @@zVLs-&@ `\ @\  @' %*D @ =$>b @ &u  @HO@0Iϵ @@pIp]B @Ls-&@ `\ @\  @' %*D @ =$>b @ &u  @HO@0Iϵ @@pIp]B @Ls-&@ `\ @\  @' %*D @ =$>b @ &u  @HO@0Iϵ @@pIp]B @Ls-&@ `\ @\  @' %*D @ =$>b @ &u  @HO@0Iϵ @@pIp]B з^z)u_^}վ|# 8= @ }s#<۳z(;;;?om-{ߞ}_LCC  `Ro "gdF[[( @`XdXoG#@K7goxUXoYh| @00ΎB# gZ%z=G @ =$>b$#_7L;R| @@IƎ@#p}۷}ѡd{~I\  ?V]0uuF @`LdL}&@*ﭞ &@`L @I s{>IiBLB u!@ &=XgRT & }?'$4! &! @@gW]\ʕ0c~#/W@0W 0K/=C'߿?R+& @ )_=L~o-ٟ")7%@XXK +'}]+{z @; @`??}˷|K땓_~hbN_ $| ˃Fӛ[5jXL >;;[km@otG/~Ih$BLB u!@^_x,}ew '@zA 7ǻ=pL!@}Y$q; &NHV@0I5;E @`dgG!@@m @ [nu?=+A**A@IHU@0I絛zY  @R\N # jB &;&NHV@0I5;E @`dgG!@@m @`$UT@0TNLN7TLTD' De*L w @~BppBM @``d`p#@A &v `` # (h" 4Q LR@0dj &vj @J @@WIW!@L `24/ 8C `N_  , p# 8= @ Y$ٮpLU"@aaM&J!@I &V"@ R$ҎSm8]@09P J@0JR9 `]0L&ܹF;{{ߋLU @^Moz;o_ 0`2 @H/B~0[HpXX &NHN _!vZꫯWKgJrLzC] @`*UOrl!@jęAI WK ߝKIYh,BLB u!@>Oduw.pT &N HJčI K@`I`: Пݻww]p#|J&@!䐐  @`2VKVt#d[CL@0T8ZR,Սۋ&ٗhZjV%@`BɄ:SS @Z_[  p`r2 @ tR6_noe[. nXW^˸r#1j!@qqn"@HY-)6͍tj `}j Z*Ӎ/ # ( 0%*~sHLr &@@_GyƺF @``!@I |򕎮ߕr P- 83 @`r}Fɝ*D@@I@* Ѝ@׫%ZxiR `w=nw @W @H}F:a `2.@#jJҍSZJpp֎D= y{L `\k0)_buڵ,_5kՙ!A@0 ԁNrdU1y2 `hǨ4zdU377#[ @`rH +nPA"L"($@jVKq# &*F{nwkdLs"cer@@0Q 0@%~sQ `2$'kڝ˿ݧY}z @ J$nSih.0\0i^'[ @@Y@0qN @w 0d" P' 87 `C/# l eؕLV>,pmLOL\@0xkL&ґAus1&1: @ ݽ2J} &} +F-+' @ T$ԞQ/H@0R1U@0W 0`2~ &lAQ &Qw `LWk(RxOO@  `~!$`r  0`2 @hhLI , @@I' ZL>8kk @ $RS8JV!?; @@IƎ@ &;8 & lF &z `Vk-(/&~M&@@I pٞ߯.Ŏ Я`ү  @`td.P4L لbLb=u'@ $R$* $M@dId V{L^j  @` d h!@ $_=E! &!: @@I"@@oIo &@00A- _@0q @>7k&V#@@I} H~!j @`xdxsG$@AAG &GٍbLb)$@ m$z$ $ɚH t& @! 0`2gg:8 @ɐڎEccC &u ``k2Ls-&@ 6$S_8B>#  !  0e0yrz8< & H@@0I5;P  @`D6S@0S߱  @` Gf}9 Lڊٞ"-+' @ D$^Q'X@0Tq\@0T `^g$ $ɚH@I DݳVd{ @G#<+h# Ѳ-D* DqM@BIBHW@0IﵜXXzJ=  @]c ؕLU.$pLT/U!@`\ @:Y \@0U&MlC11(/tL!@6I- @@wf^~iTLݿZGsĉ@{H @DE @WW^ @@IL ˳61y)j"L35&@W`"@zD} @TE @SSN @@IV&H@s61y!j"L35&@^n^\`я[W<* ʫp /pue4x啻`zFt} @OO]e @`d7 &TdLp%@``j`2-$0`2v8>:LWV7O˥\: Ѕ`҅2 `"X1 h@ T6$@@C<=wn?3{Yn?I.rnaL\WK1 &1 @B``rdzǟ 3͞{^`0=sLv_~q&7 L#@@k!ɽ}enξz[6aj٥gyL:t. tN@+0t07_}yT~3mVS|]hL+g7+t7;~]:`(ͭ;@ I $%0x0Y:g[O/<\y)cDlO}o,.'V~)ס%NF4((J&LOɪrդ2T=&; sC}_̃Wۏ]0y`ߘU2 ę@ LN{ P7o(W?1L&F9LU"@)IuPLN )Ҿ4L(ن &1+"L"zPU &vj @N@0&_;r߇&^5L з`ҷ  0`RLէLG A$Nd- &}&~:!&!: @Cr0{nC-ś;˸GٺM0p*JĉA ۷7nL4`eS@R"$K`dv%@@IB0_Ldd""L",U%@@D0irF09$uLUFL.NA Ee F@0ie[D e08.}u1qj󳫋=/b1ՌWYxzu[V7Y6 ?$>RCSL֣C@]y!CEga$zge_l%#w hZ#nIL! Lk.IO#EvU'W$^,ţjge*[x},W{?k˫ٱ .ev}`(S0T@I( tLfuPX*Iʱ^Xe֫-˰70P,߾VinVd=%YW~-`'3Kʗ~WMXԦ,ĭj񜯂I<}" L'KnI6s/A10+Ւ CU{NS9"SZY߻Rg:Zڪsa5)R0՟@|I|}+u0W9%W..+.`0WZv?}x.;2L^L:֮,+&F&NLN3dR\+_YY_:vҥ\x:|eqoɲ{M*VL旲\UL jD@TITݥ8,y0YN΋O%}gʛ 7oMKٴnyU0PSn+?&vւJ C啝. Tu @dD}a`;#6*C &qZ`2s`s倀`!@`hdhq#@@ &Z/[<)6[@0 Ԏ:2$Ѳ-]&](* &I`҅2h# Ѳ-"L.NS Ee F@0ie[D ^l=9nq@ILZP0~^|`b߫߹^<ָL&6qL"@U~G_fr߫`~ RL$@887{ @ X>p &6ICZ$# $J@*I7ó,GVT!@I}f8J@0&o`r &*&ɡI^b2puP ӁLdbZs$" $њI@:I}07\qr+7-%`IG& &$$&&Ǭ*Lyr5a#@//Y @`$D09&@ &# X%@`- 8 01D0L&65@"I"# &I:]K LI@0Roj fI}0oP=&n~~A@`I`:8U@0&LJdSG 8U@09UL@0L\ؠT &lDxD0g)@ &f'៹ϤpYK&F9"L"4U&@>>|k?&_Lo&$ B.ĥ\]$e 0`2 @gD0Lzd'@V @`<Y0{]R# # 8) 01>W7_`"LlkO  # &.@@I# &bLb5u&@`reX.m> c &c @c+&+wqT9f5"}h- &*'3{ևd\*;9'{YVvv쿞 &${uC 77'~읳cuN0 {\zY HJ `27>}b&< oq= ?4Yqtt0YΎ[ I>LzXA &AvJ @xԃODY,onVL~ ?Ggbr' &*LҪjEadO/ow]{gY2 u0β_\TtkL?,kz^ցK6mY9xUeWn~ee꛿nd&&v0)Mԋ+ U{{CNߋ``ӟzޑ})C,bͿFKˊafUf!Ymsudb#VsX &LL `Ro]*/cu|Mj~Y|UUi|e[z @C &C` @D&UK@t9|2^ΥJJ>dϭ'?B0\ZdkRڿ:VjS\57":KU  D``uRՍ{.jnT4^q^7/&S|u0_„8nh֓z݊Ia`"L"4U&@>OѨo?ch߭Ka`wՃ67:-r%fXb0Xyo~RHp̡V.x @`D;VHW``uU/uzݛLXP/O/du)沫Lrj}'}z]0Iwpk9 &`#@ =I>4ymmɀu>tڡHD@0I5t!۸=-%`jϨL+H#L@0RAC@0 Y\V[@0 X1bbŤA8Lav ' &p͑N@0RIB@0L J R@0i fs. &ITL`"&ԚC $LL$$ L73D0L `c3&`-{M  F@V[@0 X1brL`L:#@`Қ[@0LǨ P- 83 01D0L&65@"I"# &I:]K LI@0Roj f`"x+ @ F$^SgL[1 &1: @`f{3}o_}g'sOB=XЊO<}GrO=&էޜ\?31*[LUg&&p(L-sLV}\0I@IP@0ه)4=R#@++I @ D0TLPTm6Z%@@`i*t &mlKT0BQLhٖ&I`҅2h# Ѳ-"L.NS Ee F@0ie[D &]I @`F˶@@0L8M.A@m  `"tq &](*6I- @ D04LPTm6Z%@@`i*t &mlKT0BQLhٖ&I`҅2h# Ѳ-"L.NS Ee F@0ie[D &]I @`F˶@@0L8M.A@m  `"tq &](*6I- @ D04LPTm6Z%@@`i*t &mlKT0BQLhٖ&I`҅2h# Ѳ-"L.NS Ee F@0ie[D &]I @`F˶@@0L8M.A@m  @HW^nݺ /YβwS}F(g`2 HZ@0I5) L{7n-?yAiͷ?ٝ;wF9MQ@IݯLQ `ĝ'߇\Hu[)Rm"@R@0qb @`bID_0i~[1ineKLqT L.NF Ee F@0ie[D &]I @`F˶@@0L8M.A@m  `"tq &](*6I- @ D04LPTm6Z%@@`i*t &mlKb &O]){A!T\=G6?{b;ٛΟS %o\|{1y*{T>D0T(D0b &|SMG ?{Opp(,$iVG C#0ƔZ 0`2 @`0X:H1'G~S+]X-7FV{nBKa?)9Tl~<:Z@0 {TR&jtW`rsy9W2r9tX7 &{ `oߩ9* &y)t+!Փٿ.Z1Y]U\w})#&* $LJ/*>.r0 1MV!^.wr;2L&ݽG@)Cj^#゛[ْnnB`(t &mlKT0BQLhٖ&I`҅2h# Ѳ-"L.NS Ee F@0ie[D &]I @`F˶@@0L8M.A@m  `"tq &](*6I- @ D04LPTm6Z%@@`i*t &mlKB &o~כz[`,/#:Ǿ=s(g`2 HZ@0I5) L^y֭[|_ZwS}F(`2 HZ@0I5) L&Yv+T#$P&tf `#A0i*e;LT &eK}_\}ԕ/2U@BIB!P&gBviU?8; 7O-y}Ïf[Lci% &;0(2~啻`zsk❺͡ &W L `+y-&{# &v* @`@L~eJ} >ᏯWL~꧞b}O^7f]2xᅿ&WW{~"ʝ;?7p& KI9&>ht7h<*$$ $ٚJ@dId p`r}  Ч`ҧ  @ 0$Q'$$ $ٚJ@dId p`r}  Ч`ҧ  @ 0$Q'$$ $ٚJ@dId p`r}  Ч`ҧ  @ 0$Q'$$ $ٚJ@dId p`r}  Ч`ҧ  @ 0$Q'$$ $ٚJ@dId p`r}  Ч`ҧ  @ 0$Q'$$ $ٚJ@dId p`r}  Ч`ҧ  @ 0$Q'$$ $ٚJ@dId p`r}  Ч`ҧ  @ 0$Q'$$ $ٚJ@dId p`r}  Ч`ҧ  @ 0$Q'$$ $ٚJ@dId p`r}  Ч`ҧ  @ 0$Q'$$ $ٚJ@dId p`r}  Ч`ҧ  @ 0$Q'$$ $ٚJ@dId p`r}  Ч`ҧ  @ 0$Q'$$ $ٚJ@dId p`r}  Ч`ҧ  @ 0$Q'$$ $ٚJ@dId p`r}  Ч`ҧ  @ 0$Q'$$ $ٚJ@dId p`r}  Ч`ҧ  @ 0$Q'$$ $ٚJ@dId p`r}  Ч`ҧ  @ 0$Q'$$ $ٚJ@dId p`r}  Ч`ҧ  @ 0$Q'$$ $ٚJ@dId p`r}  Ч`ҧ  @ 0$Q'$$ $ٚJ@dId p`r}  Ч`ҧ  @ 0$Q'$$ $ٚJ@dId p`r}  Ч`ҧ  @ 0$Q'$$ $ٚJ@dId p`r}  Ч`ҧ  @ 0M0y;{g^x!{ @ =$>b$, &׮=oϞ|~w&N00A- @`M0GndgggΝ;A @^@0qv @@B`ruC` h*L"@^6$ne?/ j@@"oy_u ]ٖ;>ѷfꗐ >Ȼf PLH ݻwrwL~Wofdz_|Q'1qƍC@HIH.LZ@0?g?Y$PdoG``!@@Ix }bd7 !`A'"LƟWLD0VB@0BQh ? LCaХ\ LlB`D;VO`r=q;{칻Od/?;dcI)Ix]jD`(d(i!@ y,@<330ava2{N-&ɿ `p+}*jO͞{|Q5-eOK?+}|粻ue__Jm[O0L5% L?z &~񿋗{mSťbyYh'kk RWS-{]LIdG. ML, xz &Z^LַE֪D]YS\(Z?bWvڰ\CN9wBT:c$"x$`nk9 LBy`FͥW}/Z6'K6u VmٷzSk]U֔'&{#@`˦8E`2BHY\&U'ro[Kp)֍K*oj)cd?}Vl]Ug:7~D09e ۗ~~}N)޽| ݞoybM+">5k\u]}gpc|M{Lv\wNY]0jry$`nk9 L~޾˳^^VL8oLG $P- ?)LCAR0' 8? 0@dՎC& &@a8B@09.8F@0R,c]C`4Q+@@0R,IoVH`$d$x%@ =dI`2~&i1IS) @Dr0yG|{8k_{~t>wfX\u D, DyN@\`OV} -pLw 낉| @!$xd`p#`pLBO$^(A0 GԇxxL@bI. Ih>L @ $NLB$^Pa&aZ Evvq5Y6ϭ(<>ۖRb'0]d}e&0`2C^gf|}90gI`(LFawPA ߪt=;&AvJ 0E,_bXy0.gAdh2~3dy6 &mlO`tVL`$_4)e{k[ WgGZ}@`\ @@S&2"˴V#됲X%J~W`2Љa;H ( P-{0 ;7c˾.,I1+h`, @s LœJ" 2[)]U|VFjO@'1E`+&#;$i LV{V}Vzp1o/9ʭLX1q @```T7B{dɑpv#0A+&TM"@ L$~LBbzD}' g$& I C $~P LBd$^LB!`F? &!t`B/&C@0 Ԃ:Y0 zA}! jA@cg?c~vmDMйc 2*>B@0T)LߓO>9`Ť)b\ 1/ro 1<0:A6] 0`2wj0C;}oCeV!>lM ̓Ya/Wwkbx:~YpOK]{ʫ VEJ+롻ce55o4G}' H@0iĴhO0%w9c{֊}Br5dO05~uy87q=muR(`0)ֳP&؆۾r7/Vl+2-2DM_en7w쓟F?㿜?ٿ4=:CU`Ҳ+'R&/~`RL*们_lj@QNI= $UC+${BWΡ՚ʾhr:n/*6 &{0:Du`Bϧ[!T(:&9xIqed2q=5=6Ҕo]gtq+[~־M{E{P>gel_eֲ-kbA\ &t* @ $$L`R|TKV,.%,]uV)Utj⓱=AA;-F &}Nv`w?;S*>/>(5Il' (`BW &M{A0i*5FbB7E0  `B &M{A0i*5h;S0T&oU0i IS m'DۙI]G@0]09]09^LPwLD,J0~.}CkVO:>i|M=>5lT=9$.`&J0~KLӿ N\/|Gk>/noC &Cj;& >Lo2׳ xфz[[  Ё`"J%&)b$d$x%@@`"ׯgݛ߾}7qцy+&?+p &'ٕ) &`Y0ҧOͬ8?u{akZR~ LqU*&+ &Id;<x-?_;I8}&B@0LȂI,+Z-9RLD0}P09Lzr @``"& &17wtAtv$@@`"&iiuI'@D0L&9&tj @ D0LXޯ3.$R[. &`2 LR@0djLD0F) &) @D0L &u{]" %@`"&:TpBbjéՀS0id&`"txD;iĉԆ*x>ٝ &`c0.βEvjjyyxbʃ|m/.Ηeq]>8~_ٱ/./~[un^=uXԵ`TZƫz';mv_n^7}7`ҍR ԃ'~읳_C/gQ& Ox_og/|GagYo|2ėumO_5Pׯgݛ߾}7qwv 2)'痳}>'@Ror<̬&cw_:f`@bD&应Z<ˠyjzBh({_}{ZՌ͹QէGZ`r$ Iޙ=wfo/>{g~pP8<'p>X8LŶ><L[Ir+1S^lIa{U{Qc<Ԇ. #FT&L^b% 'y]OİdSv+(I]0)^_r(N+.e:8Q^+^ZtuQ,vŤr_e}gݰmV;h/T\W|nwTm%)f,0`OW L^YYo_TjBQ &/}j3a[8yo|({zyIjͼ]5\Ew볪k+-I +&{W<|kYI#V)Ƕb҇a#L@ Rn0ٞ\,/g*[bpKV,%\\{L>,.[r,P{2pT^U|\֪Ӟw|)`RL77a{Lj&c,XEMQ՚u-ecl>?tɞ.(7_rxˇ[5hC{hn~g1:(t"0`RD +U+;¾I}iBgc(;/ӏcV7oVV᣸JQaVDfc_w^9`[!>1j]OZ?mkg^T {}3u7/SJ#m]v~xrr7ls[Kj7\Vngm(mw~qRvc18.ALv,W*CFy_WGIU[7VTVuw6ʕﻹ/СK++) 'zY1Z1I 䦖.vry0{qoE˩>`qo0ˬ9~ĥ\{L}p0G &Gى L/4C+ ^`~wB^?}L?ХS.&;r$> * ɗC/>" &ɠo֩`) 0}d`ס$_5_g`RRO{U У@KN`?JjÊݳ`3  05=)?P %{l@IF8fw`20 @ vd`_aLru=> El01Tcɩ~ b; &|da) 1LF-'*@I~/*,Nm`RLd̹Ztyk^[M//SYV^yvY8+{Z//ReQ[o1lky]{`źru0A- `2L0ɟU̒\NS_0 &ˉ&,o??YX8ŀM|mLdwKͮpSDTxmj2۸Un16>u]dv ^vEK?x=UYv?#BaI9%ՒKR]Q0&uAVд6K;f5 & wabi/CC\w/44 @ e`~3P,.&)!Ut~Oq\ܧZҥrYM&_KΪ.+w0DeWm&UV}B[E%yV?&B~IBcL]ţWL+8MWS\1izڶi{x.'+֡M `Pg bL &_ڏC/O %-BI"$TcR^u_eZWL:NaŦ͊ɲ[ʬ,9NޕqjVE.\tc[)~p~& @ `WL~_>3KZd9&'SuT]M;OyBdeJ2fFuQTʰ3ݦ[xǭ=FE]u\{)RCjۡ#LF'@@lIdupld2,ƶ&PP:[S  Ѕ`r܄9Ch`"{~$rR@0RSYH@@0LB uuL$L;& &tj @ D0LvGUv޽{۷f7nV.y.-ն*Ի:M㗑`2~  & &Ia89/M|VܻsU6jC9s_sm=o{ ۖshv  @`) &ԃ_:We-H]Yԭۖ/;;L AD?6Rc/;/gRʡƻnuo(d"J@0LU${pg}&Ǯ Suo02RcoMҸc*CKCn8I @@B!0؋`}.~Pʮ_ݻwo}ƍ:r?g{V+}ͥ\{L67k!٥\U|ax߫cаibeTsoo 6lߠ]F^Wysvhюu:x 3g q L߿x|;|3Xv0~\E\2\ː%G'mNUz2VS+K*D@0 #T&z) XSLڳE``u| I E@0sHdHmǚ`2՞.$ بOL @@,I,=C &Cj;Tv @''XF- D}*`HGbLb)=<Z?=R@0R۱* Lg= &=*6j$S@@:B5 `KOɐڎ5Ud=]I@0 VQ L%'7h$A'@@h٧>kLH(2?~ꧾ`oPó؄:L:@TB &  &u `w}?I?J%`c3Q &QvJ, x &u `w}?I?J%`c3Q &QvJ, x &u `w}?I?J%`c3Q &QvJ, x &u `w}?I?J%`c3Q &QvJ, x &u `w}?I?J%`c3Q &QvJ, x &u `w}?I?J%`c3Q &QvJ, x &u `rΝ֭[4z׳^?O9՗`2YL'$@`Y[o}A7W>~~:ʮ?y]0du  . @&f2OzHLxQ& &DM @ l?[ &q_%11$~ĂI].$ &lD&vU`r{LU@0jj &]Mm~%-]0 I# *B~'VLtdtGxx;{ @`֊I.z۰1[c S@0wkŤ_߮JL|rla &a 0!ӃS٣goʞxqYգY>__[]Ƀ̣WK.Y??FqRhqY1WI0Q(`$^Sg8)'u\i1o._|b߳,Jjro旂^h]O`iRVAg=. &諽=%DLavd޽{D:wuU*Gyţk5GW?z̃rE# ;, gSy֪̪4\5 %l 5}8L R.F8>f4j2/&q9TU #Cw@ &#9<9F &[@Q Kn\/]rUyS{^N9<7no~_LU^.?+T_UuD.W&L}Mkt) t,8.>5ksޒ;'kzUd~Iqu7}oֽ#śko_4D}:Kfq#*~۷f7n<d;] G`rQ>/G)=Ky!bLb%u$@`IF0׷Ii^^XJ]^(k]MQ-'`xc$@``!@@IA\`үoW[1 aD( DiL@7θ.?ӤIٷ?qgtƭ{\57,*<ztGgHlyo߮Ʊ&q5!!3Oݚwۏ~QE»O|Lq%`RW _0x}4}Zxfg~tpO0vH@` @@پS{̟4 &l=wxYybrOx'1©ϕă }:#W]`2P@0T8F&3F c!˸K~3+^*sWݰ>ĕVLr([XjK{/$/&0`2c @ K &re$+_=Y|~XO&'bReq_*V_|]s{ &b;i bRsrj-I1,VLv/'- *L?$7!'`x?,V5N}yI~ W~#_g7[o<ԫՒld!uVFy.ZҺww$p}uu]~=wٍOgk T6$@i!pyy/G<.xVc2?%IA^ U}3GM`ɔ{WJ `r2='b Vgt%2L!@`IF0i+L-FD/ D߅@@,I Lt+&c'D&vU`fh 4@ L &J[`Ż2LS@0fj &NxUIoND $P / t5bүd &B &ُ-~'VLt $$ $ٚJIWS[+&J[`2Y@0 wԍI &NxUɤ4@I #@@@`[o|g0d0~~:\g+@ʮ_ݻwo}ƍ罕 ``k2 &wnݺHo_={ӑyY} &CA $~RK& p(L@`Қ&+ Lk5zD}BLBu `F? Tnt-sguIH`D6@L~G4ys# ?n߾cA v$T(SiLx*W4og*JV @`W@01ݓ@I} ,7ofs< pBLB @`w/~~/f=oX?e/uK/M@  Z 0iL׮]߿I X1I5&8硣 `V L$Nt$@`Ҋ Ѕ`"tq)i &O!@@`ʼn * ` &@` @d ^@0 TLZDɩ'@`L&H$R[@0 &I& p@@0q @`2I/ E*H &j-"@TTA @@kD0i}؁ &b $@@x`YF- O$^ 8 8E @`pD0s@L"$@dzg p`r  @`">i@w @ <D0 T#L'@@`iL" 0`" ~9  &w  @`z`2Z8U@09U Z@0LZ4v @`X  `"wVc &c @ AD0Id&N\@0L?H  0=D0YE* *hh- &O; 0yd]O@0L;+Ո{  `"$xk2nJB.@>:]]]>`|${g;k׮e/yWl'@V@0qr @C|#dO>?|qw`|LٯZEHy01q a'/`|M50q$@ Vĩ[O( _LݿZG&N;\RWRݭ & v& ПSJ&`|9L[@0vj 8 pI _Iu&( $L@&N* 0mdu ,`40%%`|%``k2 8gdƗsi 0TwklI'`ԟ _LݿZG&N;\RWRݭ & v& ПSJ&`|9L[@0vj 8 pI _Iu&( $L@&N* 0mdu ,`40%%`|%``k2 8gdƗsi 0TwklI'`ԟ _LݿZG&N;\RWRݭ & v& ПSJ&`|9L[@0vj 8 pI _Iu&( $L@&N* 0mdu ,`40%%`|%``k2 8gdƗsi 0TwklI'`ԟ _LݿZG&N;\RWRݭ & v& ЏK/^x!{9R $*`|%񚝔`Twk,} \v-{ߞ=ٻ>l _u'( $L@?G oxCvΝ~T _vf'% $K@WWW`}J0r NP@0I5~\^TBLB u!_Vn>h]3q:t3{[Jg2ڼ_M߇aDZu# tRvDz{>`<{958W ,3_ͭ/.1 &1:Xĩd೟P !i1/㫏?_tNNB`&N'N}L0Z`2s;v_< &SY"С`"12qL8x2:%@`dI0R`o[5L.Ξ9{<{nMsBvs}.{粻 7[uyvB(Lf=.Ue}ϋ熱3{uW LU"`d<Ĩ <-d 3I0 |bpeI>0q #Uu?7f5cB ci7FچWhIէ`D6&&8n/CI򯾫А,:ՕrUܫ+n@ک8 -nrD}M&Z[+ᢼJO;8`s;qG|$ҎSmC L!bqiVy%_wH9,/w7lO䗋.{wuY2<By#yTsD'V&N3u?_OO;{!PkߒՕ`ҕrLX``_p^|z>U_SpQBR\MYm[g{]O >})LxnDyR*^S^-)Dϡ>L=[' 'jD 8'N{4V7߮=Ս孾jύQ(MJbx)jEsTb4S@zܯRj 4@ &d.f7o]U [fw*ڕ&L~@IP O* {o~߷Y7ʧ_掳I7Ԭ@oB߾ѭ^LJ-+xoG6,0͊b|d wzư:8FAM:XGIG!0e~I:+cLNB>S$sDݎ4[ymL۷ZF3ɁU`b|b|u+PA &b;X&)OLn|7z &ih$ &}LL>+e.ޯFl`Xɞ`yL$ߣL@0id+I &I=D0R`//DށO`r0{nC| b{C#S6yG|\ŀ5.!~:FI'0ٍ7&2MR |mŤzαe-LR}m'P@0ie&N<ƗӅՅ2L'SAMNhh|Eu*^LL٠`4ɑבpv J@0 ;T@I[L٘k|[Z' 878(c0ypy^xjyv`ۯeW\f;]]\o:[dMnyc*8rm?jZr#_8*e\d\G'@lb69*yLz2d|T|]f6ڮ0Zb~ܝ0ESIR/`Rz}>.u4L U!@\d70@jW&J͢l뗳1;`bR.I#:΁&tjY `rhrSz2|4[iY,;_YQx9g`/X19`2Y@0©`8_[$L`r7>B' 888!dL <м3{c_.ģʣ6 KIjO \:W?z}VX<1sMl|*.$R[3qZZ솁bHXlSb^&y +<4U7&!"L3NF:t- t-<eTWحm2l䗟./H}9"!be,?_Y^&՗rm_ʶҊ[x9N1L.g;PcVL2`b̴mll|*.$R[2qjBoVcq^dJRf%\bU ֪N׫1)b(*fkJ+D/#G856#%Umƣ1mH1/[% _jK`^&Nō[~*}zRUAbب"{#|eX[Nzm/]3qj6\{_EL&V+L1shնl|*.$R[2qj|)W/ՁiqjG/}*̬CPe*6]]_;,mUJ_{$DVĩpe|uL>HY?eM_j6l`W-Q8Qyp.Z]U &uƗm<̬j<ƊJO+&@(:_-.:Rݯ9gq;) /jE (&NPk:dݛ˗^~so뿺}:UBX+1o{VLmɻ&C WӿL5퇖Y1j:ΐɐڎE R^'Nѫ[o{"ck@_U,MʵnRMpjTy]NGfdy01f=JIj6l`W-QF8 Go{rCƖu4qj6\_ġ[G@c|5_K@0Ԗ(NLHMXlkl&;CG2 DWeKm "ĩ$mɶ&N͆kИ8z$@0i6lE LHv `rph70{RթlL_ƗL/%016f2fcVLZHd''QmƗe|7`W-QLLLzƗe|7`W-QLLLzƗe|7`W-QLLLzƗe|7`W-QLLLzƗe|7`W-QLLLzƗe|7`W-QLLLzƗe|7`W-QLLLzƗe|7`W-QLLLzƗe|7`W-QLLLzƗe|7`W-QLLLzƗe|7`W-QLLLzƗe|7`W-QLLLzƗe|7`W-QLLLzƗe|7`W-QLLLzƗe|7`W-QLLLzƗe|7`W-QLLLzƗe|7`W-QLLLzƗe|7`W-QLLLzƗe|7`W-QLLLzƗe|7`W-QLLLzƗe|7`W-QLLLzƗe|7`W-QLLLzƗe|7`W-QLLLzƗe|7`W-QLLLzƗe|7`W-QL~wc/~79pv+&{gg7G9C;}N+>]&](*M߿x|;|3XF`RFa|y8/D'$MSl`r\0I6W-ۆ* 3E $Έ*&NIħoU7"l 4@ [7瀉S`b|yoij|zLяZAWr0{nʮ_As^1R/#]_T@@C fĩd%yvʵxW0ڝ7Y3/+ߺ]0Iﵜ@cfvN&N1n̴2a@I@*Bȃ#tv8m彥W+ߨO@0q~ pPeƍ}3x๗Ɨ>[=Fdz}E @L2&@ 0=dz}E @L2&@ 0=dz}E @L2&@ 0=dz}E @L2&@ 0=dz}E @L2&@ 0=dz}E @L2&@ 0=dz}E @L2&@ 0=dz}E @L2&@ 0=dz}E @L2&@ 0=dz}E @L2&@ 0=dz}E @L2&@ 0=dz}E @L2&@ 0=dz}E @L2&@ 0=dz}E @L2&@ 0=dz}E @L2&@ 0=dz}E @L2&@ 0=dz}E @L2&@ 0=dz}E @L2&@ 0=dz}E @L2&@ 0=dz}E @L2&@ 0=dz}E @L2&@ 0=dz}E @L2&@ 0=dz}E @L2&@ 0=dz}E @L2&@ 0=?IENDB`& 6 7 8 9 : ; < = > n? +wwB%ImageConfigLine.png@PNG  IHDRg2sbsRGBgAMA a cHRMz&u0`:pQ<IDATx^$y~=R _"anaAg'7 pyI F"c =`&'kǂwd>1D ApacF9w !j%7ꮮ*9wI: @ @` jUSYA:/fzh =`,\ VRe[gAY zmk~"ێU w^۬ϯ;s*9\[2LbsX ^ x/"lQAzy#@ @h6kP1fQzX e^_"]GBp69[ Fk gNV_X @ @eZ^cO n6ؚWޮWg\#lsE|_\pku~1 +u @ @ px8ˌ @ @ XGO @ @LT@8;щw @ @t+  @ @pv  @ @V@8ۭ @ @ 0QD'i @ @ Эp[G'@ @ @`ىN&@ @ @[lN @ @DxM @ @@n @ @ g':N @ @n;: @ @Nt6 @ @ gwt @ @&* ;m @ @v @ @LT@8;щw @ @t+  @ @pv  @ @V@8ۭ @ @ 0QD'i @ @ Эp[G'@ @ @`ىN&@ @ @[lN @ @DxM @ @@n @ @ g':N @ @n;: @ @Nt6 @ @ gwt @ @&* ;m @ @v @..N>4y tv1;0 @`فNa @N@>4z ue#@/ o @gm|p" @gv @@YlHc!@* ;o @`Ypv< lO&0 @ g P- ue @&(ppVHoo{#8|կ~'=ݵb[7Ua8e @$I|L9٧jw.y[=Mj)-{[o ϋ; #&@vg @>`uYźQak9xկy1ߙYez;?Ʈmo-l׫wKqsZ=AicvvK;0 0P@'ΰ  @5}A"L]s֎`U^]y+|msPwbv> !ފGŞj]-F5)w @SNq֝3 0ySw T-+Tc/T}/Z*]kPY=pGN[  @@`N{+U0s[z`8;J],B㊖ (L0 s;8 @sj; @'ggbșnُv>H?OD[Pv2t-WVQ|{p @gv( @@_6B^l_p @" L' @ApV8 eW @#Gy @`Ypvw @cΎe& @pV8{  @-- @UEk9 @> g8+DhYF g#p@\7ŀV8{ @S[ԯOLR@8;io! 01& @B@8:hB@8ۄ} @SNy; 0Yd6ig @tLκ6h @S}NLVp2],P\&\n:]^^n'&]]w,Ǭ}@1X~ޱ##@! <% @Q&ٗח鲐΃ث^=jݠs^}IS# g<;F A@8;Y2F @@M)elT^bY3߳.jcg󱏍sCoˊZvQ[[٘.fqJ)ƱT7<؝pʎAY@8;un @-f˰teuYoZV.<žBV;2w֞`eBTGB 2ts])E[up.[pH  @~ g9/FEhUp6r,-y2g-V敦հ=h-U.{V=/\@8U[Ce✝Ksjuϰspv @MQ[vv^W XkoUv=R&4Ǖ:lՂa#U+ pp4?&@ aG:aEDBRp6-m?Z5j[ikP^tlWZm}mG[e`ikP`A @ζ%k @ 4BW}.>mA¢^k!z뢯MiA@t~y໶X٪b7_ zU[Э\P%rw @v @Ng;<]7AfX @! g8kL8Q@8{". @i< 0HQq Z8;yt @@w Йp3QX8;t2 @@ еpGgAt' ޑ  @ g;ՁN'Ct !  @] g#xx [lw @C} pp6B5Eqqy  @ u9 @&( < g') @ g[s @@?Yl?M"@% |;[ @\@8+f@^@8 @Yp췝 @6.  @Yo|LN@8ۻ)1  @@Yp @| 0BpV8;) @n  ppV8+=> @S= 0@pV8;א  @ gG7N _@8+O< жpma'@P@8+4$ @`rM&@$ g}' @t/ ~ pvpV8{  @Y @`Ypv7S&@z' ݔ @}pV8} @}}BNpV8+ @ g7eL8]@8+Ξ~ @T쩂OpV8+k @R'D/  g'Ah[@8۶ @z(  g{xc 09  @R g @v?F@8pV8+=m @ ᬋ 0ApV8;) @nJ  оpV8+m>s @>>!_'@PW_Os'ob@?,7ҷr/?޹<_~L(?bχϗq] @ g[y$ @`4SgOxf!OE jk]gc~f-ŧm>W8;oN艀p'a @s L= @u,] Jcپq6ت} gy: 0f9 @Jge>t7m=FؖN%þdo$ @fz @`ٞ}_>4H @p5@pV8{Le ~p @@Vy Olٖ*_ d~6* @`Ν @ g jGrHκ0 @ g2 ;lĀ @ g3G @u @YolD N@8;)3` @Yp @ gO| @Yo\C&@F' ݔ:! @~pV8> @@ٶ CpV8Ӑ @ g'7N pV8+ нp90 @Yo;$@lg] @ g N蝀pwSb@ @Yl# @ g : @`Ypv7S"@' ܔ0 @tpV8{}d @S z> @`Ypv7! @ΎnJ @`pV8+x @mlO血pV8+iH @r'LHI8+N@^@8 @YI짟'"=|ו @pG @F# ΞƝ;Y8Vw;hD @3 g0 @> g' ,%ˏK飏t  @^O @ gg_ܹ3gM\|)?n碵W @#TD' 6F_oKËߗRg݂N g] @ gMk/3?^)=~{Ƣa6 @YW @`Yllk E({~J1 aN PO@8[ɣ @ g[ gS};wSzbT!@4! mB> @ g{e>LOv. @=l{L@p6{| /Z`AՕUJe>a` @s gϩX @ g{2LAl~.77)ݺV=_#@ζo @ g{7%Ql~e}WAξA @MgP @p6)ZfJoҳg==K"@' m֞  @vj5l#[D`k#@LD@8;v @pЄ@cl Ow9AEC ZĿm @ gG>N P% u]4!h8㏳¢V&> @ g{<9FhK@8ۖJ8F0ϧt^֛Fpv @|@l Z<|Fpvdt @uu/V>p߰| 0`@  @ gOdUku0 Ϲ @ gG4N PW@8[Wv =|ISz=Dpvg @ǹyֺ@'l>hupNՁKpvg @Syn.i8VdU6 @,C%@4% mJrE8S;d" @" D& @IlWo| A࣏;1Μpv0Se @YNyO gx8jZ|:w {l  @ g7{dD({~֏ɓ)Ns&@ $" @ilӢ_|J)ݽҋӜ(gMV@8۩10 @@{lA^Ô>tJ\  @ g{<9FhK@8ۖ;p6իZ<}:r @@/"@+ mw*{\8OMJntyT.VIz*  @Ml`|=ZVӹl)蕀pWa0 @g< > Vooا @=lB  p9Q4E0:O3$@z! 4 @zh gc>4kqAFhQ@8"] @* k\ gs¢Va]FK& ؄. @ >8͠k}61"糞ћFhX@80 @ зpmlFk6Z @ t\'aW @ gB>=y. 0&) @C gq)/߬>oĩ/pi[_W8;g6i:$^@8 @C g ׫Xu^}M_ g}}[: 0˗ k.ݾ'oPm @JY @`C gߎxtVzbZV߳0/jc6 v矏},w+c4㿋͏3 k#l)ݽҋ! @ΞKq @=l8;kF~΃BlT.+W"\V.ۼB|b׵7 k>6T qVȔ_yl{Y:hn  @C1%@4 0p-8gUykemKUF 5>whU6pCs^t^sٱ @ g{8)Dh[`os[Sٍ¢B7oK mfpܤtVJZDl @`!̒1 @t8WCsN[[4֠HټmųɊ wuU[煳 _ݣGV~:A& Дp)I!@ H`",-7Xk`U[l]lj|a8~q[nmCVooN) @uu< 0"a^>  cl' @m L--֠d٨jZF0N( :' @x"Z}@gh/蕀pWa0 @gM\i ?|וMŋҰ#ps-b>`N "x `y( @`,Ylײp 3Vjupf. 5\ $] gaP>ky g]  @ gM\&;ǫW)ݻ:x8`^^y0[Qq^5y,i- < @8p+gY&;MJntyA0C 1}:qӸ8L@8{G @F! 6q! gP>=Z: z+poU*^^\#/*d?:,ɍҦj|/Si8.#@`a̓Q @ gM(d7VϞdP?bpZ}BErZ󱇇v 1,\^l/"x  ppV8{S|p Ş#ټlpEH(XUXzz֙Xzzcgcrmqsb Y@8;3v @Y쑗ӄM(pw4&BȂ6FDV_z8I}REP[ Aw*yl szvڍ²fp_8pvd @f&(l=GTbaQIA'?Cϋg }^y{@ef3Mx17/ : @} gѾy_ 9zp!Ⱦ&E=i7muzByOE MRq$ =˃  @S8;ipvB >Zv?6-Pɻm4! mB> @lz:\lO'axjupmRJZŻV_\&,~yne,$v Oj, g۳g @@oA L8;jvOdYmnk/S1w6(]i8ͅꄳ`}$[jϘ wlg @-ϟW/Ԣ+@\7ŏlUޛЉ;blgU[ʇ{ g*B`Ņ @ilӢG@U8[{=xC8;!F;wR};?lIBnLA@8;Yv @pv(=H8;o5|:?>O` فLa @< k gKey'_OぞaO[VB`Ӿ=3gπ @> D棎qy:7A::=Ne\,HqEAك< @`jx#z6hV#=,71Ϯs#@8Y@8{2L] BCh/X g]  @vg]og^hhvC- = @@ٖ~zw:xP;3&@p%A @`pAWRw/kuI K 0 0(  @:vI֭./:ƌ;K( g] @vg] ѪA! < @@O=@:xͬg;?gD*.  @;.g`7V|;8pގF 00&p! }7ku`, @`C@8 @ C@8 С@TFm,A Жp-Y%@pv$.i֋6zFoZpv$4 @ζjf=:@(  @@o ! xݻY* @`AO @- m[ )I=$4^@8 @@=C#'Vǃ N@8;)3` @s gϩX裔I>ȝx8pH 0 &P |AFz.  @@n>x믧O pN9 @`pMA:\ SlO'ư @! <z6hyG=ζ%k @Ύb^F?Kk#@=d"  @~΋Q8J ܾ:x]xhR@8ۤ} @N@8;)uBRz(kuVT@8) @]@82>G D{VOi>eL/suJ7mvhcm7 g'6N @0a^M`p7֭./:5y/2]&=v7BrQk=}; ppX9#@pv$.߶jtqy^ۮ"mjp) g] @vg]&$|3kuN\],*f#HW7Cۋ׷}\Zw˫tu3_v8 chxCq68-WػBF+gSon @ٞO8@6x0kuѤZ*o_7Pkyk久cW\ױl5-vlGmWy+c=X# \;S @#Gy xݻ)ݺ5Kn~׵efGlݯ]^_* (WʮNlq{׎C72[&Geڕ*T]oipuS\k>K{qS$pf @`Xa͗8'Y{Fq g9Ί @!lCvC`|` @l+vJ 0XfyhY࣏Rs'۷SÖf 0Xfy @" mN WVku0YvfhL@8 @Q@8;YuNZV)=~, ; @@։xA:;Ό'gOT @ g?ΐ@Q=UQMU6 κ @κ<hDիm6 0κ  @g]K ܾ:sq @ٞNa @C@l?(NѣÇZnr g[y$ @tL\޽': @@= C!@蟀psbDF'psҭ[)ݽҋ;='D @;.")[Ŀm 0z  @" =Es 8X ZfӃ  0,h  @, =3 <{otyS!@ gG:N @l3BwSzZ)跀pct @ g;'@ ڨZF@8;t" @mgPOы6zFoZ ^@8;)t @m gԵof=`@O @@!@虀pgbڍnQ֭iGE8d/^tnJntsC* 6 @yqvx$kupVGzv @~ O>You@# T( @@.>(;wR};?n=ϛUxgG2]stU1\CA |駳ooF5~%@Vhopv࣏@ @@XꄳB@X8j|v}lWXA|[nDx(kuVӼ5=` pvku";W ש-s2]_.BʟJ~#}cVeΟ@Y@8 @d:93Oz ;>pˇ,aǜ 1^\\=|; a^zv]5cٮׇ6^LWW{g\o-#'logS@8{Nm"0R:poiUmm x{uv]>/CEl7s-L~y_[S:s7yyav8msgs tc>o6J~+pZ D(s=2Wb>z4q}b#@#xW\6w܉::+mҞLW@8;ݹwmkkPUpvKr||y˂#y.[ٚ_0/:ǰ[*nβ gL g-yߋbE׫_|_/痢֎kkuB+((n.,\ g8+D``;[ ^eUZRlkw_զgc>{߮_ g<TJbRvu)X}cTyV ' gg!Wz+ /u1Cl=eX-V>]}e^}_w|jP@a75/!l.[3d LK@8;vZ_x@ R|~ےZ{lUuZPvYX]Ջ[_k_,/YlAP Eؾ1o^RX]yk9:zlu-C+wNEpwF̓=z?*|uU[@/|>No}5o'Rky;wmէ6\|.Bvy[z)_8;γ?8xrmw_VY;.n]lEi7ke/okUPjVY9\jQ,Uiܟ7Zζ l /-떾巴g bE[7sZ{◟r[?v_E ]o;αYVbY-,Yۄrm v}n׫j-yyUYB`C<9c)@UBP (-Uz|A\B[żJ*{cP8֠yZ-*hFgΞ @Yf.tBW8;+,=fj6g?xҭ[)}ɻ8L@8{G @Zζkt Q%YKwSޠed\@8; vz @Ú/=p<Ύ2!>OSz"p苀p/3a @pe@`S@8OؤHF Р@?R7c"@cǨy @%lKv;h젧&@J?)mdCI g'9NٛtqLחi?׶tuqol뗥/Ϟ?:{Ֆp-YOtJ&7N> g<;FLN`lAmaJϽh./g1j g'wTpU@D|Sww ФpIM"@(0p6EE:g,]?pKjOΎbDW/^tVJe}f?8.Tg] @ 7Bкd畲U.[,sz4Or^ymDW׳y'GtrNΎc 01vZeˠ66Zė#O< 쉀>Md#իm +l` @ =] S7`]v6 e!S' Dl2=z҃  @s(; @٨Zu2U^,xj1hg-jUּpF0'5' ;wS[^}q6FiG @"Yuż2};[8l0pkj {ΎaCU˖+do~x @ǹy @ᇳ~_G߾ҳg Љpv%@T g]6 ;26TOᬍz+  0Eg9 _oZ g<,'@C%c$@&# T;`y4*y, z+  0Eg9I _Ѫ ޻{M @`!Κ1@=[z>rZj^ /yy.V4 g`d }?L^e [Z@818CXt}9 n 3nc$Ѕ@l`>r ΞKqz-*>!_pOa,oҝ;[Dx! 4$> kŷ#-Y O#p]w!꾯aiyYLy`3iay0[wlt>lɨ&>>_'F@]l])냀p` _e>>-#@cQC1Z ^Ae!XR.*JeuKRQfێvEv{mǩ~; m &5@A_eO*[ F@8;2P}(JجA)\TYŷTiպ`Yq[\}O|g%lAAl09w)b\bg{21.'O"h=t}z'@Q Dg!Y9ì\Z|hku] *\7-i*gGT2=-E*oW=]cNxz;ǵ%jx% t,> ޳>;zn[ο@UBsvo \P]-A~ xՂ6u=tØ8T@8{|Y=[(_{N\><Wy'X,f#@A g5]KUS䖫=[`EW7дbemxnϚve}7˞YH,ܽ}nql :0Tf?60)?Tg߹,  x 江' ܔ0 &<g~p'>al>x EQ ?z!ę/pFlxůpxos"G'68e {)pߦIc Ј@Q0,*"},};w_[l&* =`wߋtvXbٰC ċtN3/T>:x(@c0ٳ,^iF`mE/#Gk#0Rl@cqBO٪W<*u 8H 55M- 6pvSg@all1am޺;Bzx gl 0 (I @`%h{YX" PrSڗp6B5Pc?O_E} E\:NY@2#/jcq|w,^_^sX6@ϡpv4jHSm/Ugw @`4L!@ |Bedm6EB"UFxϳ F@8+nޮ ?|@nx5s%~ 6pv4SD @`QAalTD8Ud;*%# gdP_[\[6pvTd @c=iAm60Gzč[ 엔pV8+Ξ&pʣ`6m#@Q gG5N) DBeFx*7ok\@8+ gb ĻSbA?lnuWy @.%@ FUm3l#}s/o' gYlVh?SbF+ :1 0c=˂xgnemQw/zT> `2pV8+wb eb,Q;V?P g' @OBeF8!mFx!n;Bzv gYl߆{h?]}h?b,6pv @Vc#*6 FۄZ4mZބYpo3v_%ߣy޺};n#@Q gG=N8J *""~K#?߱Y|=x[PO܄Ypo#~@s녿c+ @`O$@Ņ./6Be>z=f@pV8+m{n_F;hk`#@ gG?N8@TFUOFumqΊG5n|=s#w gYYgM`:?G?B?+x7Fk'vs5yuQJf^^_. vt~ٺUMq_mV6ymtyrlo@ @IDaY8QF/]|.W~[Jݨč-oCq9$4nBKs8ϗ"_>,U>x.*z{eփE0qjs;T|\'lKfٔꄳqck\SlO'ư G&]/gש5Wx{pkw/~΃ho"4___,zvv-d5x>.UDwQŻ)z罬~YMnf'L*U_׳.B>3[3Cs5u+l[=_D d=ijZӭ lkG}޽,?#ƿcz,rR9RjlC+]@-GO}!߾7qZ8Fq.Ce@gq'ط~Qt) R߱ B fī_BjW('Anz "dFP{jw7o"f۳gx# -f}5T굉 g}@|oj`yFx7Dk?ԪjeB)ڻUfX(?o[E~vsX<"3&^mosU\(?~RnPBx\!c_^1nx|޼*y~t VXTԹfu2&Q]9?tml{bek߷c& [`Qy3kYPjmߨf/ٍurۃ_WG\}=f;S{Ң`qYx+Rܪcm/}׫cwBv?9Ե_$U3 ‰JdFOk#}o8o_IkT6zeٱu2wh}{{p!|-!iv[{4Cb8v!Vf?moY/MWNjTǽç\pc^5˃pvK?rEx;#OVTgAbos/'Rg_}vm,=ougpG`|yx--2GCꞯc?`m@.~2~p/J0tc1^ۏU5gKaqEO+vOح=1V?v}^Mx|73@k.Yּrn{~ h׀pv߀vz}_/; z^ew<]6+WYzU؋\1+dӖm8oi0`5l -:vSsZ\k[8[{ju>ά|x/V}m[afغ #sŵ= ֺ{}ΞP`su_[c^YE827*|ׂlcmnE k_+=s\ӭ.BGGE:o{^NY: ggl ikAU5p, }$p CXqp[EP[2+B[[XݲpЍqk%`|{?sm _8ۆ}@1DbG闭]Гv_maƼ/iŷ:Nk{yO쪸s,Wݖ]U>!_'U`?Y_9G?7wso{O{NA8WW1Z ۽߶Ł ^ l+h=$mRˏL85X"m1s׿Z>*ZPlVζo_U|f[ gW 0mZE [a ζj%@[޾z̶o1*,~ĘVͳ1`(d#s!XєP,-|z5p5着m`vA`lg#,z}=ğ{ٟ͂A8YڻW|Ҹ/,Ύ;wVCkEkl{ri[SyyH+^[ gwovngp6Ċ.|Nzz\זϭ{~p U$0)߯~Ζ?n-kmaFzk[*+VwkcK^;-떫 q1_-]Ū^V%*قD6ˏr֖Y|ET[#ݬНk1UM>' 7&{ܾm݁{@,M)⪅Ͷ^;*mJ=`UCbm?^51êY;-V\2AccYpoZ[-d%Qǎgf3-|}=?-aӲH-mǷŖo-Oa3 ;{t*UXrVWj=: UrUE}/-y֨}Eur4׌W5Ƿ~=CΞC1@ƫ[~ai޷QDϵGRs'%UOw%0pv=ܨ`]^YZ*G}spn3(yeokeZZ|}FP9]j y2d~+źZ 24V= gQ@6zݻR3n5 1]k˫X6oY6*j5km*CS`}k˶  iUΞ{#. Eз۷SztgQcnG; lkv<%1*=Fs @QUl?(/z`.oz^TTnq }ΟfFhU񹡟א礇c?)]\TG,hl9>g|\sP9+=1!E[>32Z}" ui @@IR,E놨 9Bo{->'=e8{B:* }aE{mW8ۓoC*M߇m @@8 @ D@io[TĘ-VFMT;%*B(W2GJ׺1,P ;;f,{Gyܚ@q!+:tZ\9T  0)n'K D(W?mqjTB~yjQ^;oYay~] b{:D@/޻72^D!pMhS B]}0 JEUmW jETƋFw>O9{-! gO @GyR fkAmacmnfpVHZ'$1*g7y @`IO'@"̋J<Stj8W ]#t ]pV=]|i g]u+7>兿ʶN?}ڶ @H#HA DuOyyRw2w]U+t}guBҮ#}+O_bԷx4Y) a 0bxclOaUBo pqaT_N۪  PS@8[ @`"QUџ6F=[#tTЎ?=]"ЎQ<]MpV8['$1ٮ3¦VWǻsl @p& @"M"*(pk,kyOJ'RB?dz玹C.spq=&ч!Xzm @XJ@t9 s⏵4plvqDl3޺uCתJ]kfm{a1U[h:!iWζ `]Bt5c?'q o'nrLMfO%@΍_^^_ںM0rrы6޾Gi ]3hl#UI{g]u+mvgRu0yql^ /wAt #l&P R`/i7WjګHG%6ʨnxnռWkU{@cqђTնrU guBҮ#mN-}8z"cބc]F@(vvs..]NB"["*p+M7^B˅x_ϫ|ύ`y}?xBp*]-9ϦK̫7tXGq$"d|&_KOUeE-򞮻BרLڦ g ^W8ح> yD^"ط:˿[.(n;mfKI={ӎzuَ?{9{Uw#t~+ :3K[.2▇gc˧b R_.~iZYP{7k☪e[:f}r85zvJת_RҗRg~M_Ru3Y=HQ8+vAgmlZ ~֍!޵閞տϨ[ gw;*/-7 _lp~7m ;n87(Cu挛@_j[jWCQ!8KW_[8f E@U{ʊSb8ꆮTу.nQy4?n?Ϊ^{M=pV8UZف;fѦ_C0-~g0~Vr]nZpNUNﶿ?*}:cs vV>-hkl Vmo8ƖpsrZjIP8N=jzKTU-T-mʁ]x垮UgyOר6;.ӟvlT}:uͣt>YlgG (?= ՟="ڡoGm[pvVn}w񭿗/~?vLe g :vYmZhkm- =E+8׾pnԮN~WΪgg}j׻-pq}vXGpQ=t=f :%wѣjcsTξ߽?(amMQUV\|TM9ni7wx9f2^h ohh߶/w굿vO1{?{wi: g>Ok+./5-l i XrBrT^?jͱmXQW5֮/ǟbzdD("ޮs='?"z"U} gvo7n?'dݐYQ'p{Qė׳Esw,[-+xۑ_J n;f9]nk6 Xκ  @8$} AC YQ=^xVaƿXypv  Ј@ ]INN?m)*V gۻylgc|/2.B6;\wxW';mz2P @alàvGZ?#Q5-ޟ6.WFQi;.٩Puާm{^i1Gz6,/Z8y|q˳y982k(hQ' gOt pve)bQW4X߲90p)/M g_zrk#@O @:4j'=A`SXU+mj g,wa~jEt\|wɐٍ  0pm] *=z&=;*zTU+u6pUω,u8OJ^UnGojO=O@8{Z}*~ *8Y?g8|3JY DLTZQE:-]6PU+O֜# >x2^Uy?Cm0Թ0nTg] @@?O{UI|U#YU+=ܣ! 1W6 yyDxAPʊ!ǹDx?*_H;@EUhޟVOyDUp>GNG@8g-{սZ;bs{is\_l gĴ+ 0jBFxl,?m)VU[ZM8[## 1_CeP#$yl߯2#@`ى_N%o?Jx+Qj1Z!?Vz#B) g+{y}[$ʊpvh[\?OKCA%@`b~۟؄;] Ш@Ű"`QoKO/ַ_᠞16liF{ڿ#ϴY~_JbF@' mdB; @A_nz5 >ed  _繨W,EWєyg(#7NL^@8;KhA zmޟVX sgU);ЫvYU)i'vY j m cq1k% t,@T%=zO`OAlrȫj."۬>g1pW8tis+x"ggf(81]΅-g[@K @Ux{<)-aG;w@\UE`lp}Or41[i|?/:N @2&@#x4xi gITmjG|&Ff_2"V!Y/_;# @@hX px{~s[+lMUqY uwƋXn>lϿr_آE<.k#@A g9mM&$p3>b=K8[|TNfN"t}XoeoB:?qZ_t9cM' p6o͏*#:VYڳVU['$8ۅ@S}8/BxŶ9zFluxI\76pvg @`Odic6 <-^REƨ\p<*F`=gp>p_HwB2CTLJn_ܗvs<H@8;t* @`mAoA^ *Bh1oUU;['=p6_ҟs2x/@E}eEhc#@ g?NX [}w?IFHՇg7`jk=6s1}8O g#XSxq1bѭx\ۡ}eʟ0\>C g'6NLF FeQTFgT`:۩t?>W/@߽w'W[4iTlj:mX ~NyW6Ϩc~"?3tYU:l{Zxy^2>tڜ,)ܗ!@`y~;5 @D0}jjO[?z?M(O4#m8k}w[Dl[W6Z'6Ae.%p`u>8q&]U8Ypvsg @QGRTJO1/?yUpV8k";;;ف8^9iovcDS߽_CR]ys=I=O8;vv 8I {>[Dzi?|k`?^z=O}vyZp>9! +"8wU}acMl 9^X腷/e6 W7DL׋{gr+q//g/K^NZx|[.9]rj1uaìuAxwq\Ŋ}Sh}jB}葀pGa( @@GGt}ӎ=-G·LNQU;_NX+apV8{2:;yF'>(w ɾQqVmjkLVn^FkF"+"wy/׵/,\zEx\G74+[5e9u/&5CpniE/  m 6*g*@=d88[v/e{'0TPgθ  @n(AT3EW>=F^6|y =ٹ]~-7 łbO8;y:*,SˏOzYӲ1Snm-'M6E1murs{zpwWxk}/K7WQݻx{].~дlsժn _n+_'Y @d#' W_N_ ˩~cG=FZ"->:Eb1jcqXd,+7 /kl[Q}x'|@xn;U/ MO9-8x gc0[y[Q=H++OKv=&\TO霖 oy^cHMf8 sk=gO5=wZiͷ%@ O-t:-˨y9 lg+hg,Zm Ea[|=C<OsgU~&F>ſ/=7{T+lSVoyp"7TU=5Ou!r6^xp? C ^Wf;_ƅ`蟀psbD @"Jxl^O{l8V`m1Rʅb?5/Wϕb+m *Z~[ E[TܜXU-5OeW::!ߘ w0lۊ}e{t1DUact<7rvB g7Έfa`oϟ/?^Vm]E^*՛҂`UªBEۼy-Pub[ [TYlכk/ [#ɫj#y]# S/XƕDe|U[W6ZtYMpݶ R mرy&* ;m @gQŴOwo/˿>`Psmov.-Π{Dpxyjj2ZSļDˊ"ȍvQmgN6zW9ݝ;Y .**{jpÉVΖx,5>w ?Qf8LȿouyMKᬋ #o~oKw?" Y($k6;jUDXmT@BrvהEe>?aM嬅-;|_u@骯lhBMx)ZTmcx* =+ @ꇳӿݻˏgGO##iq1xOa?^eE8/}M_WJ3lZ5 "|-/f-A|/'@@##@&(ЇpW΃U7f k~*>+07-sV W_N9Cn?MK_.-vFM ;o?ڟe٨hZhoѪ#BPIi"@٣< м@fpϾ#Wߞ0v6 cW;YcN5]yT J׶}9$WкcWbqmG6^l-B#ݵ({4, m @tC֪m+*7*3\塚Ŷ稘ͫ6VV\.iyEXnVop}eܟ޲-Zg<|b!e&F0׹z' ݔ 0eQQeQEŷ("M.]n]eKk`~_bm&!{TqY @G݇Yu -F;Xl`^9[j}AY XlpBEZr@^j_ }jrWo۰ъѣբ Z4}qTs)})Epm#@Ag1MILE|ٯE*+V]+.[ zspvǢni@MiA Z88rwme\}#}:z9B>&_6/{)})E F@8;2P @` } gUg[Cs[/{̖*g#0F#ȹm#ܷ-)cP6^`wS7B6rO @^^" @O@8n+;p_FoU;[*˨ cl_8u6Z#yF8W as?=#Ύ| 0,lQlM-HR}a!䶾UgaeUua)}`#*d#α?% g] @ g#m׷7Fo٣ǻVtP`1[WT}ǹE˂"7[ R@8;i3h @`٦=lp_6YlՙEDۀb;wkRymqƞEg{0 @ ں"\lLƽ|cۺ0Z tBa]⅂C\l)op @@։ P_@8n設AMp6_+0m8lBa:o۽{q.uߨȍFz pxO[v%ᬅ-񘾲"qi7yF>}c!@@($@! =oUixp8k᯶.{J_٪|aji'"Chu4Bg2QILC@8{Z gfۗ-{VE{g|P6l]:]V8xnNϩcx9syY @GMF g?HS=؛) $d#-W6=GܾlѲ zF 1M_Lg~fc0龲UgQEh_;wRìB6oTUo,)M8m gSchkpvkx  g< @@ Uޥ.7|pw?/ g[s.# ѶV+ Z} ASl_/Ab9Z_ \Z#,`Lח[Q[6^4@._\XxJVjߥ9-|yOm}ӛsgLXAW BEϥ~ >Wv^?GhJWݻ)E >l[{Ζ¿ahK6 Wam!]1O/7Qfޚ|Bnf[kY{\K9wn_TΩ3k&1v˹P9ۇ[Y @G鄎sjg؏/Y:g_٪SHv}AVJƿh*9%esvb^ss[< gK=pwXTV.>s5ͬ w gwvcCjᶯ

Q!{u=]V.]9R|H;Ω;+gB>]xB`ϱ3$@ R,6+x͂o1Q-a{.Vٯ&@ŊSz9z~-xp6Beӵ;-e-{3[8<+qjU<; ,zͮڷΪxgwV=٠ž{zvr{^ , m  @ή&=<#u+u_٪* U5lT޺F!/1?̪|aEV- nz[ʅ!oVA.gYUy]2bkg+BZ:>jp*>Rۈpj}tәkgJpv5]gy' "u'poqG[)xzj+l||^7˻Bz{ߣxNS6"nJ  @ g# ,6֍@eVEjXx+}tDK6o[nc]sAϩ @@8;I2D @#g# >F)4ǜsQJ&cNEo-9k1_:BYc9s?I`N'@[@8;p6jZ0yoo좚5=]MB;Փ'M"W%&' ܔ;a @0/3(wNL# g󅿢Rv~<ǏCIMmy_xq :l;>\^65~#  @$v'M迀pv5GY,_*_ݏ}e EjA~luh};9u/VDe yF' ݔ:! @8# g#xWw7V#=ek/zFemT @@'@U@8;p_ݢC+[~nhpbgyec=} @g'w@ @:QX봝O`h}ed4cod)-41FekXh.G"@  @@3ف}~\RPVL'>t}C77{Q-a[Cj:  @ 8}08Q9o 6d#mB;hMoq^0,. @^ g [˫ǃC_*<UuQe"LO޳ @=_+Fџ\Uq=GUm,.8:v @=g0B2k _ۼb4fǾE˂h㼣4eѣŋ셆د\G'y2 @@[ٞ^E(k᯶.mc+[%׿tF8tPkƢ*>wQ{׊= @B'@plWvW,ȏdm X?N)BԦ~ @@N @`pgl^m9Eۨ3*f?~Gm@[I z! 4 @@Y@8ۣp6ޖof;7QT}뭬A[:G%pm0rLhU@8* @+ A8kc/ϛb_P7GpA%#Dmz{0 m @p @_@8q8aY,!ShW,Pfem 2mqn.P{"@3 gψP @QՌQhkN`}e#P6>"-oqv-kΫ=;8 X@8;3t @BFjE**lTFZʆn|>s-j"<}6G|  0VllWTxNGuf|xCT^^fU6?#ukBNjZ@818 @tg g EtǏP6*)ŋwlsݷEb\ayT6y{QIU"@dj'JpLlTwZ#ojsgRoOG0"* :!nQ{TK9&h8B@8{ @/ ]< ވL7Y9)#pcu},`3ҴnFn=B:^84eb? йp)0 @*llȌl__Pnb_;F8{H(K]isMn2G8-l @HpF8V"gpomygv ~23kl̔FjG78Ln6}̨kFNΞ @c"dD :?h{ R_ٸf4ոvNnlܢb5+l#@' D@O'@*pAy VzMlF{j(O3w΅ҢmGT6}avMW69F"@g3UJEh,HΣY|sW,6{5hf6~c"F>#DmEd9+ۜ&@g{3BLEh*P8mB+*zFGV\7=+B˸F">mo5&Xw91^hr $} @@=l='"@4&ptxh/^dۄCC9Ў4*X#(^ڢGkc 8[$1 @`ALA @c8*<siG _뜡[;gr^QeXUC5<_ʪzy5ݢ!-mhA@8] @v $PG 3պ"@6!#bTF8 esӨF>W%wchrFZζk @m#| Ltᯣb_s;<6VF`yժG%kTx"poXF8k#@- g[ĵk @@puш:8B_ٸ&>*e#=G(bq{-B&77FZζk @k-MH`ϻӍ?W6B٨01tSӝWkYn5]d{ @`@M @P9;y,lp_kB_ڧ*ϧOSs$hgG*~r蹀pdx @ӳQZk+?q~c+dN="};h\+{׶m` 0h젧  @! g8k=sWTڪf'y8"XmM>ǸF[Gq[\3a0l @L3A;  @ κ0nA ."#Qvr Qd@zq kks#@&. pGM m`23ZT;ʫC&qFhT5Daڞ<ɪfwSpv4SD @.< i3@E8wKbJ6snm~MU &|Q?lJ~ @@mlm*$@4#0{Pujş&B68e쐶9#05MvwmkKv g]  @3 ><:cTZk}z4\iu~6+B8xoqݳ5r7lS[r02T@8) @Slx4:9GhTYk]=$5%wEacޢal $qOMX_\ 7U/Bα @$ uI @,0><\qᯡsMO\W6n CxK}E܏łZQq&b\[M> @@Y@8 @Y`0љ]&{|V(ZP6ZWD斾lnGrQYxkj\CNnʝ0 е@ãtX_Wv%+B_{- ezk~e#mk&eo кpub @ 6<2Q g8B{6xhgTaEkS1n;i/ ;C @gٞMȹfE߲~#"0ŨЌS9+9B߸Wyolҋ+BfyƾExt[ag-!bQ;yi> @lٳQ; 0uOgՂξ1 p>cɩO+)#tQ9B@ҹy0[ܬ-\7lSQ @ g{6!C[Y@l۷fT,޻U->~ꜟ9eGhs ő&&d @`! u) @(,$p 3wtW%={[o}/Le 8E{ePy/4ah ЪpU^;'@x{#LMlyдhQ@8"] @) =:<拾уz -^Fj|f~~t8u/uƂ/^4XTIG gD @(P~ܷfq6VOﯨJ٨0s DFymX,kzMBI[5}GN@cx4hpTx%]o/_Vi[tlEyp1{({t[x!)7}?~\o؛*p[ @G立.tKJJ[V;_NzZs]|5Sithz=-\kxk54=Ez2_>̛jqo=M:w.=Pk\OeO+e8zv}͟_RT6o58u䓬ȳg  @gv  0nGo*@ #۷`.R1:W1BEP6ki>`Wg~$[ 髋Iz"Hx2Em/ܷ^΂hw_&U9g,vt뎨:oSz\4" mN @rl{wr/(q濙X|%E>+6|*ʹILb[.NZζ l @`* 5kSPxcۨˁJw=d]>'Z'%<- zkH\"]y` Ys@klGmlD_IMW{W￟~K_J|3v>q.m_^'?/_? ezO49W\M M3Ǩö ?h\@88 @i E=aub5j^QkUl3vv-okK9)'Bٖvm_y=Wmv*Ko?UͯAs|D@d9}g*7 )EE P@8;I3d Gvãgkqe+̫\kTUuz` bn[¾lC =4:'f[7FWO?Ao}k0ּ'lUu{6֠)UGulTF lukl0"[Q w5тif_m}_ C@8 @h3_^?9[2ٽZ*wk+4DT߿1{zQ16 0`'  @@R}fU :\k۩4y}ev8[2?'[2LoI -=h?w/4^kF. >@ᑰshgg#4jl*j&mF 1F+OnЮǻE{+xΠ' pp(6O"@MG]߿Pxox䭘W5|c;}eR]}q_ݻ7eB۝W~I3WrMTƋ&Q}D̙ 8I@8{' @`evg ggU ϱ!}e~啿3[/HWH;˃ޏ?>}QDGb @l#vB!0g g=W6BٿJhcmzEuj,Tۀm=³gYlSռ= % |;[ Кppe쎭ŅkJ5^*7GJ6\ 5.7E5z=u8㛛S @W^M @ TGP@9ln-_۾ԹWdz{gq.f=s_u+|YT6{T"'@Y Ј@9<@FPnR+lή_Vm&;tҚ|da^ &euE&*]wO?.jwF6Nt% J~\ǭr<[#VyxR03k[?·۷-c+&כTH,DmvMmPN+y @pф@Eyz׶S+_WLs̆\MUGD4S&E&:spv @GǜvE{׾p6~vW6E?ϡnEJ{E_x-z>xp^P6pvē @9G'd3#t=2/~1}2;CAnQǃ.\E)|u=]{yw# gfզ}e_\~.K\8s[}t.V[c{4`'ہ_>SvhQ O %@g2QI.0pjy ~uZBfkX+M n}3pv -0²+;{yDcxj=TYp}ȭW\o1Gʈ6=ڏ0F& $;E paGi|y3(DEb׳0vU<;,L2|:l ^k>s#Z5|X"䋞{{{ܩ=b#vяF @lٳQ;£}֯WT*nձyq_5Il:x;T>{=zF;6+7+;"U9+C)[,ujx1"LD@8;v @mGd8o^:ZDm1-[)[#=)l:EyBDv[[B_am ƠNdpv7\ד'ްqŵsjc| pfU|u[U?꯯`) e!miV7QloUli+5_Quk:FO!MpZy^TFծj>Bx")pvBT  @@ t3 -3v8آr6+K6mN@}p8RC^>UT8CMǼ%^8{Ϋn~u)E8{|,vʖ~x^< R@8;i3h ?!⢸W[ю`-XJJ;/ރ<=}UVu -O ӄgjӋ/nHVƵ6 0A') @6zqyZv}8!^qC r }{ŏ6XrQ @Y Јpdo8;ڱQ,!ԑ[WTFud| Vx#xbu}jSƩj=#@=` Ah a.3'*O{TF"P+c#jY ן__NϦ/u࢝E\3FEY @`pB4"IxO[ #B<Ѻ ·/k@~NQ9X;V6 0q/O8kxԠwliW6MYʱW`8*wWE u}.EQlqEpv'@M %SBոbHY Ј@(7 @⋯E(>_R6rW$+Ç덙Ofu?/ۏfs:<S+o[_@8{~sG$@E~}0X(n[gQ?c[ =}e/忙~/_7io?~Wp6OYV5{y-nvO* =+ @ 4 Uk9xK-m+Po/L򧿕үW*e'Ү_E_AWT"ql8 @5 hD@8;`0}-o_m }Qmg3  @pK EUz}emCq޿k){[P6κoBqҫ{  @#D@  ʏ9(<:B/=-Ba |ċ P>AO @gqW 09]5ľvYR6*fK/W[\Qu;A=O#@-g[@K 0EMQu:1k9o-_Vx#/eՏ`7c pp`2O @GcV{۱ro(}ew9`裝XcZmC➉:sG;c<&/ %4# <DonR}; QmUߧT6#^ @`:'@ ⺪Qqo 9B6~Wӫn,"v= @`ٱά"@g ?6!}4 #-_QOjཋ?j\<%U @'y2 GMG>{Q-{d(r_s_ϩ9w7?ş8X㈪XLF$ =ϓ  @(B[g}_|+k!=Z;3c1eA?ggpE}.^ql3k{(D) mS׾  @G£&£"d֗⋍TVmQQ+R`_&k+d|ACS ЈpF;!@G£&£g#.NJ8YZQljY[l]poۏhUF4" mN @Exl|ѻgʾnu5 T?Sk~r]Yha#@6FiG @`GOBOXk~1W>}=}WFO97W/ W _?~1ν7,<^3Ùo~[s.~pxe9n @g[aS 0=V£:<|B-@T-[꡹A,بY9ת{k}l9L.å*y-epߋ.#+ "}lGMrn3'_Q1~׫' @<!JxJ8-*WY鮐:X*[bZ׳"=vqzvxãlR=Zpv}H̾O>0:hmm @>ώ @ nk%V%]Tf- 6^EƊUnmf !_/>6ٹ5l+-sX;)p, *wOvBd[U[ F ;ŏRwwa @q g5Άt&ZxX̪N`rcqU`b{bSusAc*v\-jTSs1>1UysXz!_n{Ζο -QT:nl {fVٸ7'tā  @SmJZh5<*-UMl᫼7cZ=g Uw/jT\ۅ v`1w# -9^-6YzF >lOxG4V:mqgj1WF F[{4{G菀p?sa$ @`Gut׻ ?8<:.裔|3 {/9m׾{b[fY|E+hi`#@& = @q L6<:$$!cbe_=w['{'}} A[!AW{o O& یdãCŸ}AҾr<{#BSz>l(d}ľ><%?c  @  fYNϟ?_~TnmL.g_JwJo{kxU~War pvS@x$<:&mb!cR6*fpD=T @Ú/%@ Z v]F_TbF# eSwڸn]y?[ ]@8;v~ @L#QQ\W[,Z,ł_}t+ø_M_>\JwsQ;* 0κ @FG£ãa\F(Ẻ,`r5}淾]F  ppx;$@ #׍ 7@:WTW*U괩RLRRrH4>44i("Mvv I93{VB >ߜ̻ oVsGW/hoޔʟ|\ѣᗧO|S*G6K(]⩸& Bhh,ezz}yվ=>/9u ߻+fwo.&[&@P.<\ XHy4GyٖGc1Ç31bfc /#_'|m?+CA9nOk @( p!x/g|=ȗ|͑1W>y2py9#@>rrFP)&G !  @wc @ו>`W]K~Fz @e (guVryq_p0 _J9|%ׅ @@GَV @@R@yt2DitH9+3e/JjM 0r]rH۟U)g{ @`wN @|-!| @Ylt @ @ (gm @ @ PfM'@ @ @r6 @ @Ylt @ @ (gm @ @ PfM'@ @ @r6 @ @Ylt @ @ (gm @ @ PfM'@ @ @r6 @ @Ylt @ @ (gm @ @ PfM'@ @ @r6 @ @Ylt @ vǘ.IDAT@ (gm @ @ PfM'@ @ @r6 @ @Ylt @ @ (gm @ @ PfM'@ @ @r6 @ @Ylt @ @ (gm @ @ PfM'@ @ @r6 @ @Ylt @ @ (gm @ @ PfM'@ @ @r6 @ @Ylt @ @ (gm @ @ PfM'@ @ @r6 @ @Ylt @ @ (gm @ @ PfM'@ @ @r6 @ @Ylt @ @ (gm @ @ PfM'@ @ @r6 @ @Ylt @ @ (gm @ @ PfM'@ @ @r6 @ @Ylt @ @ k`kIENDB`"@ A B C D E F G H I J K L M N O bP !ImageConfigAll.png<p>The notion of an application in IT is a surprisely slippery concept, largely because there is no consistency about how IT professionals use the term. Here an application instance is something configured on one machine and an application may have many instances, all instances having the same logic and behaving in the same way. In a multi-tier system, each tier is a different application. An application may support may tasks and a task may use more than one application.</p> Q<p>Tasks are what we call the low level actions that are done in an organization. They are normally done by one person, at one time and go through to completion or are cancelled. They include, in a bank, processing an application to open an account and money withdrawal, and in other business may include: entering an order, sending an invoice or submitting expenses. A business process in contrast often consists of a sequence of tasks. IT developers often call a task a "Use Case". There are many, manh#dSRy tasks in a large organization; we will only model tasks that have an IT component, and we will probably only want to model important ones.</p> <p>In the model we can calculate the availability of the IT applications that support the tasks. The diagram that shows this shows the dependencies between all the application tiers and the dependencies to the hardware and the location. (A break in service of a location would be something like a power cut.) This diagram can be seen by clicking on a link at the end of each section. If the model data has not been added it defaults to 1 break a year, and twenty minutes a break. Naturally the accuracy of the calculation depends entirely on good data being entered.</p> Q R %<p>User groups are a simple way of dividing up the users into categories that mean something to the business. The user groups are associated with tasks and thus, the model tells you what a member of a user group should be allowed to do on the system. An individual person may belong to more than one user group, for instance, in a bank someone might simultaneously be an employee (have access to expenses and HR applications), a customer (have a bank account) and a marketing manager (have access to the management information systems.)</p> <p>In the following sub-sections, each user group is described. At the end of each section is a link to a user group diagram. This shows pictorially what tasks the user does, what IT applications support those tasks and the data flow between the applications.</p> S<p>The technical implementation overview is shown on a path by path basis. A path is a sequence of applications, and is used to show the dataflow through a multi-tier system. The technical implementation diagrams show what technology is used in each tier. The figure below is a example.</p> <img id = "configwithcont"><p>The container with gray shading are hardware servers. Embedded in these are software containers such as Jave Virtual Machines and OϓTTZtransaction monitors. Applications have light blue boxes and environmental software elements (such as middleware) are shown with green boxes.</p> <p>On the top left hand side of the diagram is the text "To show path, click on path name". The path name referred to is below this text and in the example illustrated in the figure above is "Java Web to TIP". Click on this text and you will see a yellow line grow out from the person icon at the top of the diagram to the topmost box and stop, displaying some additional text. The additional text says something about the node where it has stopped. Click on the right hand mouse button or any key and the line moves on and displays the next text box. This line movement shows how data moves through the configuration. An example is shown below.</p> <img id = "configwithflow"><p>In the <i>Diagram</i> menu are several other commands which will put additional information on the diagram. These are:</p> <ul> <li><i>Show Security</i>. This is for showing in which tiers the user is authenticated and where access control takes place.</li> <li><i>Show System Management</i>. This is for showing in which tiers fault monitoring, performance monitoring and switching to backup takes place.</li> <li><i>Show Routing Gateways</i>. This is for showing in which tier messages are routed to one or more servers.</li> </ul> <p>The effect of these commands is to surround the diagram with annotations. This is illustrated below.</p> <img id = "configwithfunc"><p>To turn off the annotation, simply click on the menu commands again.</p> <p>The sub-sections show the implementation paths.</p> S ZT Uh<p>An overview of the IT system is given in two ways. One is the Location Overview Diagram which show which applications reside on which servers and which servers reside in which locations. The other is a set of tables showing which user groups use which tasks and which tasks use which applications.</p> <p><b>Location Overview diagram</b></p> <p>To see an ex,LUVample Location Overview Diagram, <cmd locdiag>click here</cmd>.</p> <p>The blue boxes are applications. The grey boxes in which the applications reside, are servers. The green boxes that enclose the servers are locations. Note in the example, one of the locations is called "Branches". It is a stand in for lots of locations.</p> <p>The lines joining the applications are data flows. Data is sent from one of the applications to the other, and normally the other application sends a message back. The direction the data is sent is indicated by the arrow heads. If the receiving application does not send a message back there is a little box on the line with a "D" in it. The "D" stands for deferrable. The point being that if something goes wrong with the transmission, the message can be processed by the receiver at a later time.</p> <p>You can show more or less information in the diagram by using the following menu commands found in the <i>Diagram</i> menu.</p> <ul> <li><i>Show Data</i>. This shows where the databases are.</li> <li><i>Show Backup</i>. This shows the back up applications.</li> <li><i>Show Development</i>. This shows where the application is being developed.</li> </ul> <p>If Show Data is used, you should see some sandy coloured boxes. These are databases, also enclosed in the server boxes. Database also have lines connecting them. The lines are red not blue. They also have little boxes on them with "E" or "C" in them. "E" stands for extract. It means data is extracted from one database and loaded on the other, possibly after it has been transformed in some way. "C" stands for copy, and means a duplicate of all or some of the originating database is created.</p> <p>If little boxes get in the way, they can be moved. Also locations, application, database and servers can be moved. Moving is done by dragging the box using the mouse.</p> <p><b>Overview Tables</b></p> <p>The tables have rows and columns that name the elements like applications, tasks and user groups. There is a cross at the gVWintersection of row and column if the row element uses, or is used by, in each column element. The tables are:</p> <ul> <li>Application Table. The rows are applications. The columns are tasks in one table and data in the other. To see the table, <cmd apptable>click here</cmd>.</li> <li>Task Table. The rows are tasks. The columns are User Groups in one table and Applications in the other. To see the table, <cmd tasktable>click here</cmd>.</li> </ul> <p>Personnally, I find these tables useful for looking things up, such as what data is used by which applications, but to have an overview of the system the location diagram is a better guide.</p> hU V W X2<p>This model is designed to give people in an organization an overview of their IT systems. It might be used to:</p> <ul> <li>Help identify areas of concern, like vulnerabilities to application failures and unnecessary complexity.</li> <li>Help executives understand the context of a new IT proposal.</li> <li>Help newcomers to understand an existing IT system. (Including external consultants who may charge you for educating them on your system.)</li> </ul> <p>The information in this model is largely about six elements:</p> <ul> <li>UserGroups. A user group is a convenient label for a number of people who use the system in a particular way, like customer, bank clerk, and marketing manager.</li> <li>Tasks. A task is one person doing one thing at one time. In other words, it is a name for a low level unit of work in an organization. Examples may be submiting an order, taking cash from an ATM machine, and making a sales phone call.</li> <li>Applications. An application is a program running on a computer (or a service on a computer). Some applications are spread over several computers for better performance and resiliency. Applications can call other applications.</li> <li>Datas. Datas are usually databases, but we have used the more general name "Datas" because they can just be a collection of computer files.</liUDyvZWY> <li>Servers. Servers are computers on a network that run server applications. Server applications service many users simultaneously. We don't model applications that run on workstations and service only one person at a time.</li> <li>Locations. Locations are places where the servers reside. In practice most locations correpond to a computer room, but they could just be an office. Sometimes a location is a convenient tag for many places, like in the example model we have a location called "Branches" meaning all the branch offices spread over the country.</li> </ul> <p>Perhaps more importantly, the model tells you how these elements interact. Thus it tells you what tasks a user uses, what applications support the task, what servers the applications run on, and where those servers are physically located. It also tells you which applications use which other applications and whether data is transfered between datas, for instance, data being transfered from a production database to a data warehouse.</p> <p>There is one diagram and several tables that give an overview of the system. These are explained in the section called <ref Config>IT Systems Overview</ref> (click on the underlined text to go directly to the section.)</p> <p>There are many diagrams that then can be used to focus in on elements, essentially showing a subset of the overview for a particular user group, task or application. You can see these two ways. One is to go to the sections below called <ref Users>User Groups</ref>, <ref Tasks>Tasks</ref>, <ref App>Applications</ref>. (Or click on the "+" sign against the section headings on the left of this screen, and go directly to the section you want.) The other way is to click on one of these elements in another diagram, go to the <i>Diagram</i> menu can click on command called something like <i>Focus on Application</i>.</p> <p>The IT systems overview is supplemented by a technical overview (see section <ref Tech>Technical Implementation</ref>.) These are defined on paths; in a mult=h+Zi-tier system, applications call other applications and this sequence of applications we call a path. The technical overview takes these paths and shows how they are supported by technology.</p> <p>All the diagrams in this model are generated from the model data. To use this model in your own business you would need to change the model data. To see the model data, <cmd browse>click here</cmd>. I also expect that you would also want to change this text, and you may want to extend or modify the diagrams. To do all of these things you need a developers' license with example models.</p> <p>It is worth noting, that I don't expect you will want to model every detail of your organization's IT system. The model is still useful so long as you have captured the main systems. Very large organizations may want to build several models, possibly overlapping models.</p> <p><i>This model is work in progress. Please send me any comments how it could be improved.</i></p>  2X Y Z 0g5Import/<-&IT System Overview      <For WeaverBird version 2008v2JCopyright (c) 2008, Polyphony IT Ltd e / introIntroduction  [ /[Config(IT Systems Overview  \ /ImpListExample Bank ] ^ /UserListExample Bank _ ` /5TaskListExample Bank a b /AppListExample Bank c d eh\h[hdcba`_^]