MAK RTIspy API Documentation for HLA 1.3
momManager.h
Go to the documentation of this file.
1 /*********************************************************************
2 ** Copyright (c) 2001 MAK Technologies, Inc.
3 ** All rights reserved.
4 *********************************************************************/
5 /*********************************************************************
6 ** $RCSfile: momManager.h,v $ $Revision: 1.52 $ $State: Exp $
7 *********************************************************************/
8 #ifdef DtMOM
9 #ifndef momManager_H_
10 #define momManager_H_
11 
15 
16 #include "rtiMsConfig.h"
17 #include "internalTypes.h"
18 #include "momFactory.h"
19 #include "mInteraction.h"
20 #include <vlutil/vlList.h>
21 #include "federatePub.h"
22 #include "federationPub.h"
23 #include "momInspector.h"
24 #include "momInters.h"
25 #include "momArgument.h"
26 
27 #ifdef DtIFSPEC1516
28 #include <RTI/RTI1516.h>
29 #include "momObserver1516.h"
30 #elif defined(DtIFSPEC1516E)
31 #include <RTI/RTI1516.h>
32 #include "momObserver1516e.h"
33 #else
34 #ifdef DtIFSPEC13DLC
35 #include "RTI13.h"
36 #define RTI rti13
37 #else
38 #include "RTI.hh"
39 #endif
40 #include "momObserver.h"
41 #endif
42 
44 enum DtServiceGroup
45 {
46  DtServiceGroupFederation,
47  DtServiceGroupDeclaration,
48  DtServiceGroupObject,
49  DtServiceGroupOwnership,
50  DtServiceGroupTime,
51  DtServiceGroupDistribution,
52  DtServiceGroupSupport,
53  DtServiceGroupInvalid,
54  DtServiceGroupMax=DtServiceGroupInvalid
55 };
56 
58 class DtMomWrapper;
59 class DtMomObserver;
60 class DtFederateMgr;
61 class DtMomServices;
62 class DtAliveMsg;
63 class DtResignMsg;
64 class DtJoinConfirmMsg;
65 class DtRequestMsg;
66 class DtSubObjMsg;
67 class DtLocDelMsg;
68 class DtInteractionMsg;
69 class DtSaveTimeMsg;
70 class DtAssocSubRegMsg;
71 
82 class DT_DLL_LRC DtMomMgr
83 {
84 public:
86  typedef DtMomMgr* (*DtMomMgrCreator)(DtFederateMgr* fedMgrPtr);
87 
88 protected:
89 
91  DtMomMgr(DtFederateMgr* fedMgrPtr);
92 
93 public:
94 
96  virtual ~DtMomMgr();
97 
98 private:
99 
101  DtMomMgr(DtMomMgr const& );
102 
104  DtMomMgr& operator= (DtMomMgr const& );
105 
106 public:
107 
109  virtual void postJoinInit();
110 
112  virtual bool isPostJoined() const;
113 
115  virtual void resign();
116 
118  virtual void preTick();
119 
121  virtual void postTick();
122 
124  virtual DtFederateMgr* federateMgr();
125  virtual DtFederateMgr* federateMgr() const;
126 
128  virtual DtRIDParameters* params();
129  virtual DtRIDParameters* params() const;
130 
132  virtual DtFomClassMgr* fom();
133  virtual DtFomClassMgr* fom() const;
134 
136 #ifdef DtIFSPEC1516
137  virtual rti1516::RTIambassador* rtiAmb();
138  virtual rti1516::RTIambassador* rtiAmb() const;
139 #elif defined(DtIFSPEC1516E)
140  virtual rti1516e::RTIambassador* rtiAmb();
141  virtual rti1516e::RTIambassador* rtiAmb() const;
142 #else
143  virtual RTI::RTIambassador* rtiAmb();
144  virtual RTI::RTIambassador* rtiAmb() const;
145 #endif
146 
148  virtual DtConnectionMgr* connectMgr();
149  virtual DtConnectionMgr* connectMgr() const;
150 
152  virtual DtObjectMgr* objMgr();
153  virtual DtObjectMgr* objMgr() const;
154 
156  virtual DtInteractionMgr* interMgr();
157  virtual DtInteractionMgr* interMgr() const;
158 
160  DtRtiAmbObserverList* observers();
161 
163  virtual bool isMomPublishedInteraction(DtInteractionClassHandle classHandle);
164 
166  virtual bool interactionAllowedDuringSave(DtInteractionClassHandle handle) const;
167 
169  virtual bool interactionAllowedDuringRestore(DtInteractionClassHandle handle) const;
170 
172 #ifdef DtIFSPEC1516
173  virtual void processException(MAKRti::DtString const & serviceName,
174  const rti1516::Exception& exception);
175 #elif defined(DtIFSPEC1516E)
176  virtual void processException(MAKRti::DtString const & serviceName,
177  const rti1516e::Exception& exception);
178 #else
179  virtual void processException(const RTI::Exception& exception);
180 #endif
181 
183  virtual void prepareForSubscribe(DtInteractionClassInfo* description);
184 
186 #ifdef DtIFSPEC1516
187  virtual void observe(
188  MAKRti::DtString const & functionName,
189  DtMomArgumentList const & arguments,
190  DtServiceGroup serviceGroup,
191  DtMomArgumentList const& returnArg,
192  rti1516::Exception* except = NULL );
193 
194 #elif defined(DtIFSPEC1516E)
195  virtual void observe(
196  MAKRti::DtString const & functionName,
197  DtMomArgumentList const & arguments,
198  DtServiceGroup serviceGroup,
199  DtMomArgumentList const& returnArg,
200  rti1516e::Exception* except = NULL );
201 
202 #else
203  virtual void observe(
204  const char* functionName,
205  RTI::Exception* except,
206  DtMomArgument const & argument1,
207  DtMomArgument const & argument2,
208  DtMomArgument const & argument3,
209  DtMomArgument const & argument4,
210  DtMomArgument const & argument5,
211  DtMomArgument const & returnArgument,
212  enum DtMomInitiatorOptions option);
213 #endif
214 
216  virtual bool needObserve();
217 
220  virtual void designateFederationPublisher();
221 
223  virtual DtMomHandleList const & federateList() const;
224 
227  virtual unsigned long objectRegisterCount() const;
228 
231  virtual unsigned long objectDeleteCount() const;
232 
235  virtual unsigned long objectRemoveCount() const;
236 
239  virtual unsigned long objectDiscoverCount() const;
240 
243  virtual void resetTimeTrack(bool clearAccumulation);
244 
247  virtual void switchToGrantedTime();
248 
251  virtual void switchToAdvancingTime();
252 
255  virtual unsigned long grantedTime() const;
256 
258  virtual unsigned long deltaGrantedTime(MAKRti::DtTime currentTime) const;
259 
261  virtual void resetGrantedTime();
262 
265  virtual unsigned long advancingTime() const;
266 
268  virtual unsigned long deltaAdvancingTime(MAKRti::DtTime currentTime) const;
269 
271  virtual void resetAdvancingTime();
272 
274  virtual void updateTimeConstrained();
275 
277  virtual void updateTimeRegulating();
278 
280  virtual void updateAsynchronousDelivery();
281 
283  virtual void updateFederateState();
284 
286  virtual void updateTimeState();
287 
289  virtual void updateLastSave();
290 
292  virtual void updateNextSave();
293 
295  virtual void updateConveyRegion();
296 
298  virtual void updateConveyProducingFederate();
299 
301  virtual void updateAutoProvide();
302 
304  virtual void updateFromRID();
305 
307  virtual void sendAlive();
308 
310  virtual bool save(DtRtiSaveFile& file);
311 
315  virtual void prepareToRestore();
316 
318  virtual bool restore( DtRtiSaveFile& file );
319 
320 
321 #ifdef DtIFSPEC1516
322  virtual rti1516::RegionHandleSet const& federateRegion() const;
323  virtual rti1516::RegionHandleSet const& federateServiceRegion(
324  DtServiceGroup serviceGroup) const;
325 #elif defined(DtIFSPEC1516E)
326  virtual rti1516e::RegionHandleSet const& federateRegion() const;
327  virtual rti1516e::RegionHandleSet const& federateServiceRegion(
328  DtServiceGroup serviceGroup) const;
329 #else
330  virtual DtHandle federateRegion() const;
331  virtual DtHandle federateServiceRegion(DtServiceGroup serviceGroup) const;
332 #endif
333 
334 public:
335 
339  static DtMomMgr* create(DtFederateMgr* fedMgrPtr);
340 
343  static void setCreatorFunction(DtMomMgrCreator fn);
344 
346  virtual void processResign(const DtResignMsg& msg);
347 
348 protected:
349 
351  virtual DtMomServices* serviceManager();
352 
354  virtual DtMomInspector * inspector();
355 
357  virtual DtMomFederatePublisher *federatePublisher();
358 
360  virtual DtMomFederationPublisher *federationPublisher();
361 
363  virtual DtMomInteractionFactory* factory();
364 
367  virtual bool addPublishedInteraction(char const* name);
368 
370 #ifdef DtIFSPEC1516
371  virtual void sendInteraction(DtMomInteraction* response,
372  rti1516::RegionHandleSet const& regionSet);
373 #elif defined(DtIFSPEC1516E)
374  virtual void sendInteraction(DtMomInteraction* response,
375  rti1516e::RegionHandleSet const& regionSet);
376 #else
377  virtual void sendInteraction(DtMomInteraction* response,
378  DtHandle regionHandle);
379 #endif
380 
382 #if defined(DtIFSPEC1516) || defined(DtIFSPEC1516E)
383  virtual void reportMomException(std::wstring const & interactionName,
384  std::wstring const & exceptionDescription, bool invalidParamCount);
385 #else
386  virtual void reportMomException(MAKRti::DtString const & interactionName,
387  MAKRti::DtString const & exceptionDescription, bool invalidParamCount);
388 #endif
389 
390 
392  virtual void testInteraction(DtMomInteraction& interaction);
393 
397 
398 
400  virtual void processAlive(const DtAliveMsg& msg);
401 
403  virtual void processJoin(const DtJoinConfirmMsg& msg);
404 
406  virtual void processRequest(const DtRequestMsg& msg);
407 
409  virtual void processSub(const DtSubObjMsg& msg);
410 
412  virtual void processLocDelete(const DtLocDelMsg& msg);
413 
415  virtual void processInteraction(const DtInteractionMsg& msg);
416 
418  virtual void processSaveTime(const DtSaveTimeMsg& msg);
419 
420 #ifdef DDM
421 
422  virtual void processAssocSubReg(const DtAssocSubRegMsg& msg);
423 #endif
424 
425 
427  virtual void alive (DtHandle handle);
428 
432 
433 
435 
436  virtual void processRequestUpdatesSentInteraction(
437  const DtRequestUpdatesSentInteraction& interaction);
438  virtual void processRequestPublicationsInteraction(
439  const DtRequestPublicationsInteraction& interaction);
440  virtual void processRequestReflectionsReceivedInteraction(
441  const DtRequestReflectionsReceivedInteraction& interaction);
442  virtual void processRequestObjectsOwnedInteraction(
443  const DtRequestObjectsOwnedInteraction& interaction);
444  virtual void processRequestInteractionsSentInteraction(
445  const DtRequestInteractionsSentInteraction& interaction);
446  virtual void processRequestObjectsUpdatedInteraction(
447  const DtRequestObjectsUpdatedInteraction& interaction);
448  virtual void processRequestSubscriptionsInteraction(
449  const DtRequestSubscriptionsInteraction& interaction);
450  virtual void processRequestObjectInformationInteraction(
451  const DtRequestObjectInformationInteraction& interaction);
452  virtual void processRequestInteractionsReceivedInteraction(
453  const DtRequestInteractionsReceivedInteraction& interaction);
454  virtual void processRequestObjectsReflectedInteraction(
455  const DtRequestObjectsReflectedInteraction& interaction);
456 #if defined(DtIFSPEC1516) || defined(DtIFSPEC1516E)
457  virtual void processRequestSyncPointStatusInteraction(
458  DtRequestSyncPointStatusInteraction const & interaction);
459  virtual void processRequestSyncPointsInteraction(
460  DtRequestSyncPointsInteraction const & interaction);
461 #endif
462 #ifdef DtIFSPEC1516E
463  virtual void processRequestFomModuleDataInteraction(
464  DtRequestFomModuleDataInteraction const & interaction);
465  virtual void processRequestFederationFomModuleDataInteraction(
466  DtRequestFederationFomModuleDataInteraction const & interaction);
467  virtual void processRequestMimDataInteraction(
468  DtRequestMimDataInteraction const & interaction);
469 #endif
470 
471 
473 
474  virtual void processModifyAttributeStateInteraction(
475  const DtModifyAttributeStateInteraction& interaction);
476  virtual void processSetExceptionLoggingInteraction(
477  const DtSetExceptionLoggingInteraction& interaction);
478  virtual void processSetTimingInteraction(
479  const DtSetTimingInteraction& interaction);
480  virtual void processSetServiceReportingInteraction(
481  const DtSetServiceReportingInteraction& interaction);
482 #if defined(DtIFSPEC1516) || defined(DtIFSPEC1516E)
483  virtual void processSetFederationSwitchesInteraction(
484  DtSetFederationSwitchesInteraction const & interaction);
485  virtual void processSetFederateSwitchesInteraction(
486  DtSetFederateSwitchesInteraction const & interaction);
487 #endif
488 
489 
490 
491 protected:
492 
496 
497 
499  static void processRequest(const DtRequestMsg& msg, void* usr);
500 
502  static void processSub(const DtSubObjMsg& msg, void* usr);
503 
505  static void processLocDelete(const DtLocDelMsg& msg, void* usr);
506 
508  static void processInteraction(const DtInteractionMsg& msg, void* usr);
509 
511  static void processSaveTime(const DtSaveTimeMsg& msg, void* usr);
512 
514  static void processJoin(const DtJoinConfirmMsg& msg, void* usr);
515 
517  static void processAlive(const DtAliveMsg& msg,void* usr);
518 
519 #ifdef DDM
520 
521  static void processAssocSubReg(const DtAssocSubRegMsg& msg, void* usr);
522 #endif
523 
524 
528 
529 
531 
532  static void processModifyAttributeStateInteraction(
533  const DtModifyAttributeStateInteraction& interaction, void* usr);
534  static void processSetExceptionLoggingInteraction(
535  DtSetExceptionLoggingInteraction const & interaction, void* usr);
536  static void processSetTimingInteraction(
537  DtSetTimingInteraction const & interaction, void* usr);
538  static void processSetServiceReportingInteraction(
539  DtSetServiceReportingInteraction const & interaction, void* usr);
540 #if defined(DtIFSPEC1516) || defined(DtIFSPEC1516E)
541  static void processSetFederationSwitchesInteraction(
542  DtSetFederationSwitchesInteraction const & interaction, void* usr);
543  static void processSetFederateSwitchesInteraction(
544  DtSetFederateSwitchesInteraction const & interaction, void* usr);
545 #endif
546 
547 
549 
550  static void processRequestUpdatesSentInteraction(
551  DtRequestUpdatesSentInteraction const & interaction, void* usr);
552  static void processRequestPublicationsInteraction(
553  DtRequestPublicationsInteraction const & interaction, void* usr);
554  static void processRequestReflectionsReceivedInteraction(
555  DtRequestReflectionsReceivedInteraction const & interaction, void* usr);
556  static void processRequestObjectsOwnedInteraction(
557  DtRequestObjectsOwnedInteraction const & interaction, void* usr);
558  static void processRequestInteractionsSentInteraction(
559  const DtRequestInteractionsSentInteraction& interaction, void* usr);
560  static void processRequestObjectsUpdatedInteraction(
561  DtRequestObjectsUpdatedInteraction const & interaction, void* usr);
562  static void processRequestSubscriptionsInteraction(
563  DtRequestSubscriptionsInteraction const & interaction, void* usr);
564  static void processRequestObjectInformationInteraction(
565  DtRequestObjectInformationInteraction const & interaction, void* usr);
566  static void processRequestInteractionsReceivedInteraction(
567  DtRequestInteractionsReceivedInteraction const & interaction, void* usr);
568  static void processRequestObjectsReflectedInteraction(
569  DtRequestObjectsReflectedInteraction const & interaction, void* usr);
570 #if defined(DtIFSPEC1516) || defined(DtIFSPEC1516E)
571  static void processRequestSyncPointStatusInteraction(
572  DtRequestSyncPointStatusInteraction const & interaction, void* usr);
573  static void processRequestSyncPointsInteraction(
574  DtRequestSyncPointsInteraction const & interaction, void* usr);
575 #endif
576 #ifdef DtIFSPEC1516E
577  static void processRequestFomModuleDataInteraction(
578  DtRequestFomModuleDataInteraction const & interaction, void* usr);
579  static void processRequestFederationFomModuleDataInteraction(
580  DtRequestFederationFomModuleDataInteraction const & interaction, void* usr);
581  static void processRequestMimDataInteraction(
582  DtRequestMimDataInteraction const & interaction, void* usr);
583 #endif
584 
585 
587 
588  static void processChangeAttributeOrderTypeInteraction(
589  DtChangeAttributeOrderTypeInteraction const & interaction, void* usr);
590  static void processChangeAttributeTransportationTypeInteraction(
591  DtChangeAttributeTransportationTypeInteraction const & interaction,
592  void* usr);
593  static void processChangeInteractionOrderTypeInteraction(
594  DtChangeInteractionOrderTypeInteraction const & interaction, void* usr);
595  static void processChangeInteractionTransportationTypeInteraction(
596  DtChangeInteractionTransportationTypeInteraction const & interaction,
597  void* usr);
598  static void processDeleteObjectInstanceInteraction(
599  DtDeleteObjectInstanceInteraction const & interaction, void* usr);
600  static void processDisableAsynchronousDeliveryInteraction(
601  DtDisableAsynchronousDeliveryInteraction const & interaction, void* usr);
602  static void processDisableTimeConstrainedInteraction(
603  DtDisableTimeConstrainedInteraction const & interaction, void* usr);
604  static void processDisableTimeRegulationInteraction(
605  DtDisableTimeRegulationInteraction const & interaction, void* usr);
606  static void processEnableAsynchronousDeliveryInteraction(
607  DtEnableAsynchronousDeliveryInteraction const & interaction, void* usr);
608  static void processEnableTimeConstrainedInteraction(
609  DtEnableTimeConstrainedInteraction const & interaction, void* usr);
610  static void processEnableTimeRegulationInteraction(
611  DtEnableTimeRegulationInteraction const & interaction, void* usr);
612  static void processFederateRestoreCompleteInteraction(
613  DtFederateRestoreCompleteInteraction const & interaction, void* usr);
614  static void processFederateSaveBegunInteraction(
615  DtFederateSaveBegunInteraction const & interaction, void* usr);
616  static void processFederateSaveCompleteInteraction(
617  DtFederateSaveCompleteInteraction const & interaction, void* usr);
618  static void processFlushQueueRequestInteraction(
619  DtFlushQueueRequestInteraction const & interaction, void* usr);
620  static void processLocalDeleteObjectInstanceInteraction(
621  DtLocalDeleteObjectInstanceInteraction const & interaction, void* usr);
622  static void processModifyLookaheadInteraction(
623  DtModifyLookaheadInteraction const & interaction, void* usr);
624  static void processNextEventRequestInteraction(
625  DtNextEventRequestInteraction const & interaction, void* usr);
626  static void processNextEventRequestAvailableInteraction(
627  DtNextEventRequestAvailableInteraction const & interaction, void* usr);
628  static void processPublishInteractionClassInteraction(
629  DtPublishInteractionClassInteraction const & interaction, void* usr);
630  static void processPublishObjectClassInteraction(
631  DtPublishObjectClassInteraction const & interaction, void* usr);
632  static void processResignFederationExecutionInteraction(
633  DtResignFederationExecutionInteraction const & interaction, void* usr);
634  static void processSubscribeInteractionClassInteraction(
635  DtSubscribeInteractionClassInteraction const & interaction, void* usr);
636  static void processSubscribeObjectClassAttributesInteraction(
637  DtSubscribeObjectClassAttributesInteraction const & interaction,
638  void* usr);
639  static void processSynchronizationPointAchievedInteraction(
640  DtSynchronizationPointAchievedInteraction const & interaction,
641  void* usr);
642  static void processTimeAdvanceRequestInteraction(
643  DtTimeAdvanceRequestInteraction const & interaction, void* usr);
644  static void processTimeAdvanceRequestAvailableInteraction(
645  DtTimeAdvanceRequestAvailableInteraction const & interaction, void* usr);
646  static void processUnconditionalAttributeOwnershipDivestitureInteraction(
647  DtUnconditionalAttributeOwnershipDivestitureInteraction const & interaction,
648  void* usr);
649  static void processUnpublishInteractionClassInteraction(
650  DtUnpublishInteractionClassInteraction const & interaction, void* usr);
651  static void processUnpublishObjectClassInteraction(
652  DtUnpublishObjectClassInteraction const & interaction, void* usr);
653  static void processUnsubscribeInteractionClassInteraction(
654  DtUnsubscribeInteractionClassInteraction const & interaction, void* usr);
655  static void processUnsubscribeObjectClassInteraction(
656  DtUnsubscribeObjectClassInteraction const & interaction, void* usr);
658 
659 
660 protected:
661 
663  DtFederateMgr* myFederateMgr;
664 
666  DtMomInspector* myInspector;
667 
669  DtMomServices* myServiceManager;
670 
672  DtMomInteractionFactory* myFactory;
673 
675  DtMomInterCbMgr* myCallbackMgr;
676 
678  std::set<DtInteractionClassHandle> myPublishedInteractions;
679 
681  DtMomFederatePublisher* myFederatePublisher;
682 
684  DtMomFederationPublisher* myFederationPublisher;
685 
687  DtMomHandleList myFederateList;
688 
690  bool myServiceReporting;
691 
693  bool myExceptionLogging;
694 
696  unsigned long myAlertCount;
697 
699  unsigned long myReportServiceID;
700 
702  bool myExceptReport;
703 
705  bool myMomInvocation;
706 
708  DtMomObserver* myMomObserver;
709 
711  DtMomWrapper* myMomWrapper;
712 
714  bool myDoResign;
715 
717  bool myIsJoined;
718 
720 
721  DtInteractionClassHandle mySaveBegunInteractionHandle;
722  DtInteractionClassHandle mySaveCompleteInteractionHandle;
724  DtInteractionClassHandle myResignFederationInteractionHandle;
726 
728  DtInteractionClassHandle myRestoreCompleteInteractionHandle;
729 
731 
732  DtInteractionClassHandle myRequestSyncPointHandle;
733  DtInteractionClassHandle myRequestSyncPointStatusHandle;
734  DtInteractionClassHandle myModifyAttributeStateHandle;
735  DtInteractionClassHandle myRequestObjectInformationHandle;
737 
738 #ifdef DtIFSPEC1516
739 
740  rti1516::ResignAction myResAction;
741 
743  rti1516::RegionHandleSet myFederateRegion;
744 
746  rti1516::RegionHandleSet myFederateServiceRegion[DtServiceGroupMax];
747 
749 
750  std::auto_ptr < rti1516::LogicalTime > myTime;
751  std::auto_ptr < rti1516::LogicalTimeInterval > myInterval;
752  std::auto_ptr < rti1516::LogicalTime > myNullTime;
753  std::auto_ptr < rti1516::LogicalTimeInterval > myNullInterval;
755 #elif defined(DtIFSPEC1516E)
756 
757  rti1516e::ResignAction myResAction;
758 
760  rti1516e::RegionHandleSet myFederateRegion;
761 
763  rti1516e::RegionHandleSet myFederateServiceRegion[DtServiceGroupMax];
764 
766 
767  std::auto_ptr < rti1516e::LogicalTime > myTime;
768  std::auto_ptr < rti1516e::LogicalTimeInterval > myInterval;
769  std::auto_ptr < rti1516e::LogicalTime > myNullTime;
770  std::auto_ptr < rti1516e::LogicalTimeInterval > myNullInterval;
772 #else
773 
775  RTI::ResignAction myResAction;
776 
778  DtHandle myFederateRegion;
779 
781  DtHandle myFederateServiceRegion[DtServiceGroupMax];
782 
784 
785  std::auto_ptr < RTI::FedTime > myTime;
786  std::auto_ptr < RTI::FedTime > myInterval;
787  std::auto_ptr < RTI::FedTime > myNullTime;
788  std::auto_ptr < RTI::FedTime > myNullInterval;
790 #endif
791 
793  MAKRti::DtTime myBeginAdvancingTime;
794 
796  MAKRti::DtTime myBeginGrantedTime;
797 
799  unsigned long myGrantedTime;
800 
802  unsigned long myAdvancingTime;
803 
805  MAKRti::DtClock myClock;
806 
807 protected:
808 
810  static DtMomMgrCreator theCreator;
811 };
812 
813 #endif
814 #endif

Document ID: Generated on Tue May 7 16:26:47 EDT 2013 from SVN revision 126903
Copyright © 2005-2013 VT MÄK Inc. All Rights Reserved (www.mak.com)