//+-------------------------------------------------------------------------
//
//  Microsoft Windows
//
//  Copyright (C) Microsoft Corporation, 1998 - 1999
//
//  File:       dpmsgobj.cpp
//
//--------------------------------------------------------------------------


#include "stdafx.h"
#include "Direct.h"
#include "dms.h"

#include "dxfile.h"
//#include "rmxftmpl.h"
#include "rmxfguid.h"

unsigned char D3DRM_XTEMPLATES2[] = {
        0x78, 0x6f, 0x66, 0x20, 0x30, 0x33, 0x30, 0x32, 0x62, 
        0x69, 0x6e, 0x20, 0x30, 0x30, 0x36, 0x34, 0x1f, 0, 0x1, 
        0, 0x6, 0, 0, 0, 0x48, 0x65, 0x61, 0x64, 0x65, 
        0x72, 0xa, 0, 0x5, 0, 0x43, 0xab, 0x82, 0x3d, 0xda, 
        0x62, 0xcf, 0x11, 0xab, 0x39, 0, 0x20, 0xaf, 0x71, 0xe4, 
        0x33, 0x28, 0, 0x1, 0, 0x5, 0, 0, 0, 0x6d, 
        0x61, 0x6a, 0x6f, 0x72, 0x14, 0, 0x28, 0, 0x1, 0, 
        0x5, 0, 0, 0, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x14, 
        0, 0x29, 0, 0x1, 0, 0x5, 0, 0, 0, 0x66, 
        0x6c, 0x61, 0x67, 0x73, 0x14, 0, 0xb, 0, 0x1f, 0, 
        0x1, 0, 0x6, 0, 0, 0, 0x56, 0x65, 0x63, 0x74, 
        0x6f, 0x72, 0xa, 0, 0x5, 0, 0x5e, 0xab, 0x82, 0x3d, 
        0xda, 0x62, 0xcf, 0x11, 0xab, 0x39, 0, 0x20, 0xaf, 0x71, 
        0xe4, 0x33, 0x2a, 0, 0x1, 0, 0x1, 0, 0, 0, 
        0x78, 0x14, 0, 0x2a, 0, 0x1, 0, 0x1, 0, 0, 
        0, 0x79, 0x14, 0, 0x2a, 0, 0x1, 0, 0x1, 0, 
        0, 0, 0x7a, 0x14, 0, 0xb, 0, 0x1f, 0, 0x1, 
        0, 0x8, 0, 0, 0, 0x43, 0x6f, 0x6f, 0x72, 0x64, 
        0x73, 0x32, 0x64, 0xa, 0, 0x5, 0, 0x44, 0x3f, 0xf2, 
        0xf6, 0x86, 0x76, 0xcf, 0x11, 0x8f, 0x52, 0, 0x40, 0x33, 
        0x35, 0x94, 0xa3, 0x2a, 0, 0x1, 0, 0x1, 0, 0, 
        0, 0x75, 0x14, 0, 0x2a, 0, 0x1, 0, 0x1, 0, 
        0, 0, 0x76, 0x14, 0, 0xb, 0, 0x1f, 0, 0x1, 
        0, 0x9, 0, 0, 0, 0x4d, 0x61, 0x74, 0x72, 0x69, 
        0x78, 0x34, 0x78, 0x34, 0xa, 0, 0x5, 0, 0x45, 0x3f, 
        0xf2, 0xf6, 0x86, 0x76, 0xcf, 0x11, 0x8f, 0x52, 0, 0x40, 
        0x33, 0x35, 0x94, 0xa3, 0x34, 0, 0x2a, 0, 0x1, 0, 
        0x6, 0, 0, 0, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 
        0xe, 0, 0x3, 0, 0x10, 0, 0, 0, 0xf, 0, 
        0x14, 0, 0xb, 0, 0x1f, 0, 0x1, 0, 0x9, 0, 
        0, 0, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x52, 0x47, 0x42, 
        0x41, 0xa, 0, 0x5, 0, 0xe0, 0x44, 0xff, 0x35, 0x7c, 
        0x6c, 0xcf, 0x11, 0x8f, 0x52, 0, 0x40, 0x33, 0x35, 0x94, 
        0xa3, 0x2a, 0, 0x1, 0, 0x3, 0, 0, 0, 0x72, 
        0x65, 0x64, 0x14, 0, 0x2a, 0, 0x1, 0, 0x5, 0, 
        0, 0, 0x67, 0x72, 0x65, 0x65, 0x6e, 0x14, 0, 0x2a, 
        0, 0x1, 0, 0x4, 0, 0, 0, 0x62, 0x6c, 0x75, 
        0x65, 0x14, 0, 0x2a, 0, 0x1, 0, 0x5, 0, 0, 
        0, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x14, 0, 0xb, 0, 
        0x1f, 0, 0x1, 0, 0x8, 0, 0, 0, 0x43, 0x6f, 
        0x6c, 0x6f, 0x72, 0x52, 0x47, 0x42, 0xa, 0, 0x5, 0, 
        0x81, 0x6e, 0xe1, 0xd3, 0x35, 0x78, 0xcf, 0x11, 0x8f, 0x52, 
        0, 0x40, 0x33, 0x35, 0x94, 0xa3, 0x2a, 0, 0x1, 0, 
        0x3, 0, 0, 0, 0x72, 0x65, 0x64, 0x14, 0, 0x2a, 
        0, 0x1, 0, 0x5, 0, 0, 0, 0x67, 0x72, 0x65, 
        0x65, 0x6e, 0x14, 0, 0x2a, 0, 0x1, 0, 0x4, 0, 
        0, 0, 0x62, 0x6c, 0x75, 0x65, 0x14, 0, 0xb, 0, 
        0x1f, 0, 0x1, 0, 0xc, 0, 0, 0, 0x49, 0x6e, 
        0x64, 0x65, 0x78, 0x65, 0x64, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 
        0xa, 0, 0x5, 0, 0x20, 0xb8, 0x30, 0x16, 0x42, 0x78, 
        0xcf, 0x11, 0x8f, 0x52, 0, 0x40, 0x33, 0x35, 0x94, 0xa3, 
        0x29, 0, 0x1, 0, 0x5, 0, 0, 0, 0x69, 0x6e, 
        0x64, 0x65, 0x78, 0x14, 0, 0x1, 0, 0x9, 0, 0, 
        0, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x52, 0x47, 0x42, 0x41, 
        0x1, 0, 0xa, 0, 0, 0, 0x69, 0x6e, 0x64, 0x65, 
        0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x14, 0, 0xb, 0, 
        0x1f, 0, 0x1, 0, 0x7, 0, 0, 0, 0x42, 0x6f, 
        0x6f, 0x6c, 0x65, 0x61, 0x6e, 0xa, 0, 0x5, 0, 0xa0, 
        0xa6, 0x7d, 0x53, 0x37, 0xca, 0xd0, 0x11, 0x94, 0x1c, 0, 
        0x80, 0xc8, 0xc, 0xfa, 0x7b, 0x29, 0, 0x1, 0, 0x9, 
        0, 0, 0, 0x74, 0x72, 0x75, 0x65, 0x66, 0x61, 0x6c, 
        0x73, 0x65, 0x14, 0, 0xb, 0, 0x1f, 0, 0x1, 0, 
        0x9, 0, 0, 0, 0x42, 0x6f, 0x6f, 0x6c, 0x65, 0x61, 
        0x6e, 0x32, 0x64, 0xa, 0, 0x5, 0, 0x63, 0xae, 0x85, 
        0x48, 0xe8, 0x78, 0xcf, 0x11, 0x8f, 0x52, 0, 0x40, 0x33, 
        0x35, 0x94, 0xa3, 0x1, 0, 0x7, 0, 0, 0, 0x42, 
        0x6f, 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0x1, 0, 0x1, 0, 
        0, 0, 0x75, 0x14, 0, 0x1, 0, 0x7, 0, 0, 
        0, 0x42, 0x6f, 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0x1, 0, 
        0x1, 0, 0, 0, 0x76, 0x14, 0, 0xb, 0, 0x1f, 
        0, 0x1, 0, 0xc, 0, 0, 0, 0x4d, 0x61, 0x74, 
        0x65, 0x72, 0x69, 0x61, 0x6c, 0x57, 0x72, 0x61, 0x70, 0xa, 
        0, 0x5, 0, 0x60, 0xae, 0x85, 0x48, 0xe8, 0x78, 0xcf, 
        0x11, 0x8f, 0x52, 0, 0x40, 0x33, 0x35, 0x94, 0xa3, 0x1, 
        0, 0x7, 0, 0, 0, 0x42, 0x6f, 0x6f, 0x6c, 0x65, 
        0x61, 0x6e, 0x1, 0, 0x1, 0, 0, 0, 0x75, 0x14, 
        0, 0x1, 0, 0x7, 0, 0, 0, 0x42, 0x6f, 0x6f, 
        0x6c, 0x65, 0x61, 0x6e, 0x1, 0, 0x1, 0, 0, 0, 
        0x76, 0x14, 0, 0xb, 0, 0x1f, 0, 0x1, 0, 0xf, 
        0, 0, 0, 0x54, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 
        0x46, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0xa, 0, 
        0x5, 0, 0xe1, 0x90, 0x27, 0xa4, 0x10, 0x78, 0xcf, 0x11, 
        0x8f, 0x52, 0, 0x40, 0x33, 0x35, 0x94, 0xa3, 0x31, 0, 
        0x1, 0, 0x8, 0, 0, 0, 0x66, 0x69, 0x6c, 0x65, 
        0x6e, 0x61, 0x6d, 0x65, 0x14, 0, 0xb, 0, 0x1f, 0, 
        0x1, 0, 0x8, 0, 0, 0, 0x4d, 0x61, 0x74, 0x65, 
        0x72, 0x69, 0x61, 0x6c, 0xa, 0, 0x5, 0, 0x4d, 0xab, 
        0x82, 0x3d, 0xda, 0x62, 0xcf, 0x11, 0xab, 0x39, 0, 0x20, 
        0xaf, 0x71, 0xe4, 0x33, 0x1, 0, 0x9, 0, 0, 0, 
        0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x52, 0x47, 0x42, 0x41, 0x1, 
        0, 0x9, 0, 0, 0, 0x66, 0x61, 0x63, 0x65, 0x43, 
        0x6f, 0x6c, 0x6f, 0x72, 0x14, 0, 0x2a, 0, 0x1, 0, 
        0x5, 0, 0, 0, 0x70, 0x6f, 0x77, 0x65, 0x72, 0x14, 
        0, 0x1, 0, 0x8, 0, 0, 0, 0x43, 0x6f, 0x6c, 
        0x6f, 0x72, 0x52, 0x47, 0x42, 0x1, 0, 0xd, 0, 0, 
        0, 0x73, 0x70, 0x65, 0x63, 0x75, 0x6c, 0x61, 0x72, 0x43, 
        0x6f, 0x6c, 0x6f, 0x72, 0x14, 0, 0x1, 0, 0x8, 0, 
        0, 0, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x52, 0x47, 0x42, 
        0x1, 0, 0xd, 0, 0, 0, 0x65, 0x6d, 0x69, 0x73, 
        0x73, 0x69, 0x76, 0x65, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x14, 
        0, 0xe, 0, 0x12, 0, 0x12, 0, 0x12, 0, 0xf, 
        0, 0xb, 0, 0x1f, 0, 0x1, 0, 0x8, 0, 0, 
        0, 0x4d, 0x65, 0x73, 0x68, 0x46, 0x61, 0x63, 0x65, 0xa, 
        0, 0x5, 0, 0x5f, 0xab, 0x82, 0x3d, 0xda, 0x62, 0xcf, 
        0x11, 0xab, 0x39, 0, 0x20, 0xaf, 0x71, 0xe4, 0x33, 0x29, 
        0, 0x1, 0, 0x12, 0, 0, 0, 0x6e, 0x46, 0x61, 
        0x63, 0x65, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x49, 0x6e, 
        0x64, 0x69, 0x63, 0x65, 0x73, 0x14, 0, 0x34, 0, 0x29, 
        0, 0x1, 0, 0x11, 0, 0, 0, 0x66, 0x61, 0x63, 
        0x65, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x49, 0x6e, 0x64, 
        0x69, 0x63, 0x65, 0x73, 0xe, 0, 0x1, 0, 0x12, 0, 
        0, 0, 0x6e, 0x46, 0x61, 0x63, 0x65, 0x56, 0x65, 0x72, 
        0x74, 0x65, 0x78, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 
        0xf, 0, 0x14, 0, 0xb, 0, 0x1f, 0, 0x1, 0, 
        0xd, 0, 0, 0, 0x4d, 0x65, 0x73, 0x68, 0x46, 0x61, 
        0x63, 0x65, 0x57, 0x72, 0x61, 0x70, 0x73, 0xa, 0, 0x5, 
        0, 0xc0, 0xc5, 0x1e, 0xed, 0xa8, 0xc0, 0xd0, 0x11, 0x94, 
        0x1c, 0, 0x80, 0xc8, 0xc, 0xfa, 0x7b, 0x29, 0, 0x1, 
        0, 0xf, 0, 0, 0, 0x6e, 0x46, 0x61, 0x63, 0x65, 
        0x57, 0x72, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 
        0x14, 0, 0x34, 0, 0x1, 0, 0x9, 0, 0, 0, 
        0x42, 0x6f, 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0x32, 0x64, 0x1, 
        0, 0xe, 0, 0, 0, 0x66, 0x61, 0x63, 0x65, 0x57, 
        0x72, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0xe, 
        0, 0x1, 0, 0xf, 0, 0, 0, 0x6e, 0x46, 0x61, 
        0x63, 0x65, 0x57, 0x72, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 
        0x65, 0x73, 0xf, 0, 0x14, 0, 0xb, 0, 0x1f, 0, 
        0x1, 0, 0x11, 0, 0, 0, 0x4d, 0x65, 0x73, 0x68, 
        0x54, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x43, 0x6f, 0x6f, 
        0x72, 0x64, 0x73, 0xa, 0, 0x5, 0, 0x40, 0x3f, 0xf2, 
        0xf6, 0x86, 0x76, 0xcf, 0x11, 0x8f, 0x52, 0, 0x40, 0x33, 
        0x35, 0x94, 0xa3, 0x29, 0, 0x1, 0, 0xe, 0, 0, 
        0, 0x6e, 0x54, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x43, 
        0x6f, 0x6f, 0x72, 0x64, 0x73, 0x14, 0, 0x34, 0, 0x1, 
        0, 0x8, 0, 0, 0, 0x43, 0x6f, 0x6f, 0x72, 0x64, 
        0x73, 0x32, 0x64, 0x1, 0, 0xd, 0, 0, 0, 0x74, 
        0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x43, 0x6f, 0x6f, 0x72, 
        0x64, 0x73, 0xe, 0, 0x1, 0, 0xe, 0, 0, 0, 
        0x6e, 0x54, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x43, 0x6f, 
        0x6f, 0x72, 0x64, 0x73, 0xf, 0, 0x14, 0, 0xb, 0, 
        0x1f, 0, 0x1, 0, 0x10, 0, 0, 0, 0x4d, 0x65, 
        0x73, 0x68, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 
        0x4c, 0x69, 0x73, 0x74, 0xa, 0, 0x5, 0, 0x42, 0x3f, 
        0xf2, 0xf6, 0x86, 0x76, 0xcf, 0x11, 0x8f, 0x52, 0, 0x40, 
        0x33, 0x35, 0x94, 0xa3, 0x29, 0, 0x1, 0, 0xa, 0, 
        0, 0, 0x6e, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 
        0x6c, 0x73, 0x14, 0, 0x29, 0, 0x1, 0, 0xc, 0, 
        0, 0, 0x6e, 0x46, 0x61, 0x63, 0x65, 0x49, 0x6e, 0x64, 
        0x65, 0x78, 0x65, 0x73, 0x14, 0, 0x34, 0, 0x29, 0, 
        0x1, 0, 0xb, 0, 0, 0, 0x66, 0x61, 0x63, 0x65, 
        0x49, 0x6e, 0x64, 0x65, 0x78, 0x65, 0x73, 0xe, 0, 0x1, 
        0, 0xc, 0, 0, 0, 0x6e, 0x46, 0x61, 0x63, 0x65, 
        0x49, 0x6e, 0x64, 0x65, 0x78, 0x65, 0x73, 0xf, 0, 0x14, 
        0, 0xe, 0, 0x1, 0, 0x8, 0, 0, 0, 0x4d, 
        0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0xf, 0, 0xb, 
        0, 0x1f, 0, 0x1, 0, 0xb, 0, 0, 0, 0x4d, 
        0x65, 0x73, 0x68, 0x4e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x73, 
        0xa, 0, 0x5, 0, 0x43, 0x3f, 0xf2, 0xf6, 0x86, 0x76, 
        0xcf, 0x11, 0x8f, 0x52, 0, 0x40, 0x33, 0x35, 0x94, 0xa3, 
        0x29, 0, 0x1, 0, 0x8, 0, 0, 0, 0x6e, 0x4e, 
        0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x73, 0x14, 0, 0x34, 0, 
        0x1, 0, 0x6, 0, 0, 0, 0x56, 0x65, 0x63, 0x74, 
        0x6f, 0x72, 0x1, 0, 0x7, 0, 0, 0, 0x6e, 0x6f, 
        0x72, 0x6d, 0x61, 0x6c, 0x73, 0xe, 0, 0x1, 0, 0x8, 
        0, 0, 0, 0x6e, 0x4e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 
        0x73, 0xf, 0, 0x14, 0, 0x29, 0, 0x1, 0, 0xc, 
        0, 0, 0, 0x6e, 0x46, 0x61, 0x63, 0x65, 0x4e, 0x6f, 
        0x72, 0x6d, 0x61, 0x6c, 0x73, 0x14, 0, 0x34, 0, 0x1, 
        0, 0x8, 0, 0, 0, 0x4d, 0x65, 0x73, 0x68, 0x46, 
        0x61, 0x63, 0x65, 0x1, 0, 0xb, 0, 0, 0, 0x66, 
        0x61, 0x63, 0x65, 0x4e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x73, 
        0xe, 0, 0x1, 0, 0xc, 0, 0, 0, 0x6e, 0x46, 
        0x61, 0x63, 0x65, 0x4e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x73, 
        0xf, 0, 0x14, 0, 0xb, 0, 0x1f, 0, 0x1, 0, 
        0x10, 0, 0, 0, 0x4d, 0x65, 0x73, 0x68, 0x56, 0x65, 
        0x72, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x73, 
        0xa, 0, 0x5, 0, 0x21, 0xb8, 0x30, 0x16, 0x42, 0x78, 
        0xcf, 0x11, 0x8f, 0x52, 0, 0x40, 0x33, 0x35, 0x94, 0xa3, 
        0x29, 0, 0x1, 0, 0xd, 0, 0, 0, 0x6e, 0x56, 
        0x65, 0x72, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 
        0x73, 0x14, 0, 0x34, 0, 0x1, 0, 0xc, 0, 0, 
        0, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x65, 0x64, 0x43, 0x6f, 
        0x6c, 0x6f, 0x72, 0x1, 0, 0xc, 0, 0, 0, 0x76, 
        0x65, 0x72, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 
        0x73, 0xe, 0, 0x1, 0, 0xd, 0, 0, 0, 0x6e, 
        0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 
        0x72, 0x73, 0xf, 0, 0x14, 0, 0xb, 0, 0x1f, 0, 
        0x1, 0, 0x4, 0, 0, 0, 0x4d, 0x65, 0x73, 0x68, 
        0xa, 0, 0x5, 0, 0x44, 0xab, 0x82, 0x3d, 0xda, 0x62, 
        0xcf, 0x11, 0xab, 0x39, 0, 0x20, 0xaf, 0x71, 0xe4, 0x33, 
        0x29, 0, 0x1, 0, 0x9, 0, 0, 0, 0x6e, 0x56, 
        0x65, 0x72, 0x74, 0x69, 0x63, 0x65, 0x73, 0x14, 0, 0x34, 
        0, 0x1, 0, 0x6, 0, 0, 0, 0x56, 0x65, 0x63, 
        0x74, 0x6f, 0x72, 0x1, 0, 0x8, 0, 0, 0, 0x76, 
        0x65, 0x72, 0x74, 0x69, 0x63, 0x65, 0x73, 0xe, 0, 0x1, 
        0, 0x9, 0, 0, 0, 0x6e, 0x56, 0x65, 0x72, 0x74, 
        0x69, 0x63, 0x65, 0x73, 0xf, 0, 0x14, 0, 0x29, 0, 
        0x1, 0, 0x6, 0, 0, 0, 0x6e, 0x46, 0x61, 0x63, 
        0x65, 0x73, 0x14, 0, 0x34, 0, 0x1, 0, 0x8, 0, 
        0, 0, 0x4d, 0x65, 0x73, 0x68, 0x46, 0x61, 0x63, 0x65, 
        0x1, 0, 0x5, 0, 0, 0, 0x66, 0x61, 0x63, 0x65, 
        0x73, 0xe, 0, 0x1, 0, 0x6, 0, 0, 0, 0x6e, 
        0x46, 0x61, 0x63, 0x65, 0x73, 0xf, 0, 0x14, 0, 0xe, 
        0, 0x12, 0, 0x12, 0, 0x12, 0, 0xf, 0, 0xb, 
        0, 0x1f, 0, 0x1, 0, 0x14, 0, 0, 0, 0x46, 
        0x72, 0x61, 0x6d, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 
        0x6f, 0x72, 0x6d, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0xa, 
        0, 0x5, 0, 0x41, 0x3f, 0xf2, 0xf6, 0x86, 0x76, 0xcf, 
        0x11, 0x8f, 0x52, 0, 0x40, 0x33, 0x35, 0x94, 0xa3, 0x1, 
        0, 0x9, 0, 0, 0, 0x4d, 0x61, 0x74, 0x72, 0x69, 
        0x78, 0x34, 0x78, 0x34, 0x1, 0, 0xb, 0, 0, 0, 
        0x66, 0x72, 0x61, 0x6d, 0x65, 0x4d, 0x61, 0x74, 0x72, 0x69, 
        0x78, 0x14, 0, 0xb, 0, 0x1f, 0, 0x1, 0, 0x5, 
        0, 0, 0, 0x46, 0x72, 0x61, 0x6d, 0x65, 0xa, 0, 
        0x5, 0, 0x46, 0xab, 0x82, 0x3d, 0xda, 0x62, 0xcf, 0x11, 
        0xab, 0x39, 0, 0x20, 0xaf, 0x71, 0xe4, 0x33, 0xe, 0, 
        0x12, 0, 0x12, 0, 0x12, 0, 0xf, 0, 0xb, 0, 
        0x1f, 0, 0x1, 0, 0x9, 0, 0, 0, 0x46, 0x6c, 
        0x6f, 0x61, 0x74, 0x4b, 0x65, 0x79, 0x73, 0xa, 0, 0x5, 
        0, 0xa9, 0x46, 0xdd, 0x10, 0x5b, 0x77, 0xcf, 0x11, 0x8f, 
        0x52, 0, 0x40, 0x33, 0x35, 0x94, 0xa3, 0x29, 0, 0x1, 
        0, 0x7, 0, 0, 0, 0x6e, 0x56, 0x61, 0x6c, 0x75, 
        0x65, 0x73, 0x14, 0, 0x34, 0, 0x2a, 0, 0x1, 0, 
        0x6, 0, 0, 0, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 
        0xe, 0, 0x1, 0, 0x7, 0, 0, 0, 0x6e, 0x56, 
        0x61, 0x6c, 0x75, 0x65, 0x73, 0xf, 0, 0x14, 0, 0xb, 
        0, 0x1f, 0, 0x1, 0, 0xe, 0, 0, 0, 0x54, 
        0x69, 0x6d, 0x65, 0x64, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x4b, 
        0x65, 0x79, 0x73, 0xa, 0, 0x5, 0, 0x80, 0xb1, 0x6, 
        0xf4, 0x3b, 0x7b, 0xcf, 0x11, 0x8f, 0x52, 0, 0x40, 0x33, 
        0x35, 0x94, 0xa3, 0x29, 0, 0x1, 0, 0x4, 0, 0, 
        0, 0x74, 0x69, 0x6d, 0x65, 0x14, 0, 0x1, 0, 0x9, 
        0, 0, 0, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x4b, 0x65, 
        0x79, 0x73, 0x1, 0, 0x6, 0, 0, 0, 0x74, 0x66, 
        0x6b, 0x65, 0x79, 0x73, 0x14, 0, 0xb, 0, 0x1f, 0, 
        0x1, 0, 0xc, 0, 0, 0, 0x41, 0x6e, 0x69, 0x6d, 
        0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0xa, 0, 
        0x5, 0, 0xa8, 0x46, 0xdd, 0x10, 0x5b, 0x77, 0xcf, 0x11, 
        0x8f, 0x52, 0, 0x40, 0x33, 0x35, 0x94, 0xa3, 0x29, 0, 
        0x1, 0, 0x7, 0, 0, 0, 0x6b, 0x65, 0x79, 0x54, 
        0x79, 0x70, 0x65, 0x14, 0, 0x29, 0, 0x1, 0, 0x5, 
        0, 0, 0, 0x6e, 0x4b, 0x65, 0x79, 0x73, 0x14, 0, 
        0x34, 0, 0x1, 0, 0xe, 0, 0, 0, 0x54, 0x69, 
        0x6d, 0x65, 0x64, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x4b, 0x65, 
        0x79, 0x73, 0x1, 0, 0x4, 0, 0, 0, 0x6b, 0x65, 
        0x79, 0x73, 0xe, 0, 0x1, 0, 0x5, 0, 0, 0, 
        0x6e, 0x4b, 0x65, 0x79, 0x73, 0xf, 0, 0x14, 0, 0xb, 
        0, 0x1f, 0, 0x1, 0, 0x10, 0, 0, 0, 0x41, 
        0x6e, 0x69, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 
        0x74, 0x69, 0x6f, 0x6e, 0x73, 0xa, 0, 0x5, 0, 0xc0, 
        0x56, 0xbf, 0xe2, 0xf, 0x84, 0xcf, 0x11, 0x8f, 0x52, 0, 
        0x40, 0x33, 0x35, 0x94, 0xa3, 0x29, 0, 0x1, 0, 0xa, 
        0, 0, 0, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6c, 0x6f, 
        0x73, 0x65, 0x64, 0x14, 0, 0x29, 0, 0x1, 0, 0xf, 
        0, 0, 0, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 
        0x6e, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x14, 0, 
        0xb, 0, 0x1f, 0, 0x1, 0, 0x9, 0, 0, 0, 
        0x41, 0x6e, 0x69, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0xa, 
        0, 0x5, 0, 0x4f, 0xab, 0x82, 0x3d, 0xda, 0x62, 0xcf, 
        0x11, 0xab, 0x39, 0, 0x20, 0xaf, 0x71, 0xe4, 0x33, 0xe, 
        0, 0x12, 0, 0x12, 0, 0x12, 0, 0xf, 0, 0xb, 
        0, 0x1f, 0, 0x1, 0, 0xc, 0, 0, 0, 0x41, 
        0x6e, 0x69, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 
        0x74, 0xa, 0, 0x5, 0, 0x50, 0xab, 0x82, 0x3d, 0xda, 
        0x62, 0xcf, 0x11, 0xab, 0x39, 0, 0x20, 0xaf, 0x71, 0xe4, 
        0x33, 0xe, 0, 0x1, 0, 0x9, 0, 0, 0, 0x41, 
        0x6e, 0x69, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0xf, 0, 
        0xb, 0, 0x1f, 0, 0x1, 0, 0xa, 0, 0, 0, 
        0x49, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x44, 0x61, 0x74, 0x61, 
        0xa, 0, 0x5, 0, 0xa0, 0xee, 0x23, 0x3a, 0xb1, 0x94, 
        0xd0, 0x11, 0xab, 0x39, 0, 0x20, 0xaf, 0x71, 0xe4, 0x33, 
        0xe, 0, 0x1, 0, 0x6, 0, 0, 0, 0x42, 0x49, 
        0x4e, 0x41, 0x52, 0x59, 0xf, 0, 0xb, 0, 0x1f, 0, 
        0x1, 0, 0x3, 0, 0, 0, 0x55, 0x72, 0x6c, 0xa, 
        0, 0x5, 0, 0xa1, 0xee, 0x23, 0x3a, 0xb1, 0x94, 0xd0, 
        0x11, 0xab, 0x39, 0, 0x20, 0xaf, 0x71, 0xe4, 0x33, 0x29, 
        0, 0x1, 0, 0x5, 0, 0, 0, 0x6e, 0x55, 0x72, 
        0x6c, 0x73, 0x14, 0, 0x34, 0, 0x31, 0, 0x1, 0, 
        0x4, 0, 0, 0, 0x75, 0x72, 0x6c, 0x73, 0xe, 0, 
        0x1, 0, 0x5, 0, 0, 0, 0x6e, 0x55, 0x72, 0x6c, 
        0x73, 0xf, 0, 0x14, 0, 0xb, 0, 0x1f, 0, 0x1, 
        0, 0xf, 0, 0, 0, 0x50, 0x72, 0x6f, 0x67, 0x72, 
        0x65, 0x73, 0x73, 0x69, 0x76, 0x65, 0x4d, 0x65, 0x73, 0x68, 
        0xa, 0, 0x5, 0, 0x60, 0xc3, 0x63, 0x8a, 0x7d, 0x99, 
        0xd0, 0x11, 0x94, 0x1c, 0, 0x80, 0xc8, 0xc, 0xfa, 0x7b, 
        0xe, 0, 0x1, 0, 0x3, 0, 0, 0, 0x55, 0x72, 
        0x6c, 0x13, 0, 0x1, 0, 0xa, 0, 0, 0, 0x49, 
        0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x44, 0x61, 0x74, 0x61, 0xf, 
        0, 0xb, 0, 0x1f, 0, 0x1, 0, 0x4, 0, 0, 
        0, 0x47, 0x75, 0x69, 0x64, 0xa, 0, 0x5, 0, 0xe0, 
        0x90, 0x27, 0xa4, 0x10, 0x78, 0xcf, 0x11, 0x8f, 0x52, 0, 
        0x40, 0x33, 0x35, 0x94, 0xa3, 0x29, 0, 0x1, 0, 0x5, 
        0, 0, 0, 0x64, 0x61, 0x74, 0x61, 0x31, 0x14, 0, 
        0x28, 0, 0x1, 0, 0x5, 0, 0, 0, 0x64, 0x61, 
        0x74, 0x61, 0x32, 0x14, 0, 0x28, 0, 0x1, 0, 0x5, 
        0, 0, 0, 0x64, 0x61, 0x74, 0x61, 0x33, 0x14, 0, 
        0x34, 0, 0x2d, 0, 0x1, 0, 0x5, 0, 0, 0, 
        0x64, 0x61, 0x74, 0x61, 0x34, 0xe, 0, 0x3, 0, 0x8, 
        0, 0, 0, 0xf, 0, 0x14, 0, 0xb, 0, 0x1f, 
        0, 0x1, 0, 0xe, 0, 0, 0, 0x53, 0x74, 0x72, 
        0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 
        0x79, 0xa, 0, 0x5, 0, 0xe0, 0x21, 0xf, 0x7f, 0xe1, 
        0xbf, 0xd1, 0x11, 0x82, 0xc0, 0, 0xa0, 0xc9, 0x69, 0x72, 
        0x71, 0x31, 0, 0x1, 0, 0x3, 0, 0, 0, 0x6b, 
        0x65, 0x79, 0x14, 0, 0x31, 0, 0x1, 0, 0x5, 0, 
        0, 0, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x14, 0, 0xb, 
        0, 0x1f, 0, 0x1, 0, 0xb, 0, 0, 0, 0x50, 
        0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x42, 0x61, 0x67, 
        0xa, 0, 0x5, 0, 0xe1, 0x21, 0xf, 0x7f, 0xe1, 0xbf, 
        0xd1, 0x11, 0x82, 0xc0, 0, 0xa0, 0xc9, 0x69, 0x72, 0x71, 
        0xe, 0, 0x1, 0, 0xe, 0, 0, 0, 0x53, 0x74, 
        0x72, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 
        0x74, 0x79, 0xf, 0, 0xb, 0, 0x1f, 0, 0x1, 0, 
        0xe, 0, 0, 0, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 
        0x61, 0x6c, 0x56, 0x69, 0x73, 0x75, 0x61, 0x6c, 0xa, 0, 
        0x5, 0, 0xa0, 0x6a, 0x11, 0x98, 0xba, 0xbd, 0xd1, 0x11, 
        0x82, 0xc0, 0, 0xa0, 0xc9, 0x69, 0x72, 0x71, 0x1, 0, 
        0x4, 0, 0, 0, 0x47, 0x75, 0x69, 0x64, 0x1, 0, 
        0x12, 0, 0, 0, 0x67, 0x75, 0x69, 0x64, 0x45, 0x78, 
        0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x56, 0x69, 0x73, 0x75, 
        0x61, 0x6c, 0x14, 0, 0xe, 0, 0x12, 0, 0x12, 0, 
        0x12, 0, 0xf, 0, 0xb, 0, 0x1f, 0, 0x1, 0, 
        0xb, 0, 0, 0, 0x52, 0x69, 0x67, 0x68, 0x74, 0x48, 
        0x61, 0x6e, 0x64, 0x65, 0x64, 0xa, 0, 0x5, 0, 0xa0, 
        0x5e, 0x5d, 0x7f, 0x3a, 0xd5, 0xd1, 0x11, 0x82, 0xc0, 0, 
        0xa0, 0xc9, 0x69, 0x72, 0x71, 0x29, 0, 0x1, 0, 0xc, 
        0, 0, 0, 0x62, 0x52, 0x69, 0x67, 0x68, 0x74, 0x48, 
        0x61, 0x6e, 0x64, 0x65, 0x64, 0x14, 0, 0xb, 0
};

#define D3DRM_XTEMPLATE_BYTES 3278

#include "rmxfguid.h"

#include "XfileObj.h"
#include "XfileSaveObj.h"
#include "XfileEnumObj.h"

WCHAR *szXFileGuids[]={
	L"TID_D3DRMInfo",
	L"TID_D3DRMMesh",
	L"TID_D3DRMVector",
	L"TID_D3DRMMeshFace",
	L"TID_D3DRMMaterial",
	L"TID_D3DRMMaterialArray",
	L"TID_D3DRMFrame",
	L"TID_D3DRMFrameTransformMatrix",
	L"TID_D3DRMMeshMaterialList",
	L"TID_D3DRMMeshTextureCoords",
	L"TID_D3DRMMeshNormals",
	L"TID_D3DRMCoords2d",
	L"TID_D3DRMMatrix4x4",
	L"TID_D3DRMAnimation",
	L"TID_D3DRMAnimationSet",
	L"TID_D3DRMAnimationKey",
	L"TID_D3DRMFloatKeys",
	L"TID_D3DRMMaterialAmbientColor",
	L"TID_D3DRMMaterialDiffuseColor",
	L"TID_D3DRMMaterialSpecularColor",
	L"TID_D3DRMMaterialEmissiveColor",
	L"TID_D3DRMMaterialPower",
	L"TID_D3DRMColorRGBA",
	L"TID_D3DRMColorRGB",
	L"TID_D3DRMGuid",
	L"TID_D3DRMTextureFilename",
	L"TID_D3DRMTextureReference",
	L"TID_D3DRMIndexedColor",
	L"TID_D3DRMMeshVertexColors",
	L"TID_D3DRMMaterialWrap",
	L"TID_D3DRMBoolean",
	L"TID_D3DRMMeshFaceWraps",
	L"TID_D3DRMBoolean2d",
	L"TID_D3DRMTimedFloatKeys",
	L"TID_D3DRMAnimationOptions",
	L"TID_D3DRMFramePosition",
	L"TID_D3DRMFrameVelocity",
	L"TID_D3DRMFrameRotation",
	L"TID_D3DRMLight",
	L"TID_D3DRMCamera",
	L"TID_D3DRMAppData",
	L"TID_D3DRMLightUmbra",
	L"TID_D3DRMLightRange",
	L"TID_D3DRMLightPenumbra",
	L"TID_D3DRMLightAttenuation",
	L"TID_D3DRMInlineData",
	L"TID_D3DRMUrl",
	L"TID_D3DRMProgressiveMesh",
	L"TID_D3DRMExternalVisual",
	L"TID_D3DRMStringProperty",
	L"TID_D3DRMPropertyBag",
	L"TID_D3DRMRightHanded"
};

const GUID *XFileGuids[]={
	&TID_D3DRMInfo,
	&TID_D3DRMMesh,
	&TID_D3DRMVector,
	&TID_D3DRMMeshFace,
	&TID_D3DRMMaterial,
	&TID_D3DRMMaterialArray,
	&TID_D3DRMFrame,
	&TID_D3DRMFrameTransformMatrix,
	&TID_D3DRMMeshMaterialList,
	&TID_D3DRMMeshTextureCoords,
	&TID_D3DRMMeshNormals,
	&TID_D3DRMCoords2d,
	&TID_D3DRMMatrix4x4,
	&TID_D3DRMAnimation,
	&TID_D3DRMAnimationSet,
	&TID_D3DRMAnimationKey,
	&TID_D3DRMFloatKeys,
	&TID_D3DRMMaterialAmbientColor,
	&TID_D3DRMMaterialDiffuseColor,
	&TID_D3DRMMaterialSpecularColor,
	&TID_D3DRMMaterialEmissiveColor,
	&TID_D3DRMMaterialPower,
	&TID_D3DRMColorRGBA,
	&TID_D3DRMColorRGB,
	&TID_D3DRMGuid,
	&TID_D3DRMTextureFilename,
	&TID_D3DRMTextureReference,
	&TID_D3DRMIndexedColor,
	&TID_D3DRMMeshVertexColors,
	&TID_D3DRMMaterialWrap,
	&TID_D3DRMBoolean,
	&TID_D3DRMMeshFaceWraps,
	&TID_D3DRMBoolean2d,
	&TID_D3DRMTimedFloatKeys,
	&TID_D3DRMAnimationOptions,
	&TID_D3DRMFramePosition,
	&TID_D3DRMFrameVelocity,
	&TID_D3DRMFrameRotation,
	&TID_D3DRMLight,
	&TID_D3DRMCamera,
	&TID_D3DRMAppData,
	&TID_D3DRMLightUmbra,
	&TID_D3DRMLightRange,
	&TID_D3DRMLightPenumbra,
	&TID_D3DRMLightAttenuation,
	&TID_D3DRMInlineData,
	&TID_D3DRMUrl,
	&TID_D3DRMProgressiveMesh,
	&TID_D3DRMExternalVisual,
	&TID_D3DRMStringProperty,
	&TID_D3DRMPropertyBag,
	&TID_D3DRMRightHanded
};

#define NUM_XFILE_GUIDS 52

extern HRESULT BSTRtoGUID(LPGUID,BSTR);
extern BSTR GUIDtoBSTR(LPGUID);

HRESULT XFILEBSTRtoGUID(LPGUID lpG,BSTR strG)
{
	if (!strG) {
		ZeroMemory(lpG,sizeof(GUID));
		return S_OK;
	}

	if (strG[0]==0) {
		ZeroMemory(lpG,sizeof(GUID));
		return S_OK;
	}

	for(int i=0;i<NUM_XFILE_GUIDS;i++){
		if (0==_wcsicmp((WCHAR*)strG,szXFileGuids[i]))
		{
			memcpy(lpG,XFileGuids[i],sizeof(GUID));
			return S_OK;
		}		
	}

	return BSTRtoGUID (lpG,strG);
}

    #define GUIDS_EQUAL2(g,g2) (\
    	(g->Data1==g2->Data1) && \
    	(g->Data2==g2->Data2) && \
    	(g->Data3==g2->Data3) && \
    	(g->Data4[0]==g2->Data4[0]) && \
    	(g->Data4[1]==g2->Data4[1]) && \
    	(g->Data4[2]==g2->Data4[2]) && \
    	(g->Data4[3]==g2->Data4[3]) && \
    	(g->Data4[4]==g2->Data4[4]) && \
    	(g->Data4[5]==g2->Data4[5]) && \
    	(g->Data4[6]==g2->Data4[6]) && \
    	(g->Data4[7]==g2->Data4[7]) )

BSTR XFILEGUIDtoBSTR(LPGUID lpG)
{
	if (!lpG) return NULL;

	for(int i=0;i<NUM_XFILE_GUIDS;i++)
	{
		//
		if (GUIDS_EQUAL2(XFileGuids[i],lpG)){
			return SysAllocString(szXFileGuids[i]);	
		}
		
	}
	

	return GUIDtoBSTR(lpG);
}


C_dxj_DirectXFileObject::C_dxj_DirectXFileObject()
{
	m_pDirectXFile=NULL;
}
C_dxj_DirectXFileObject::~C_dxj_DirectXFileObject()
{
	if (m_pDirectXFile) m_pDirectXFile->Release();
}

HRESULT C_dxj_DirectXFileObject::create( I_dxj_DirectXFile **ret)
{	
	HRESULT hr;
	if (!ret) return E_INVALIDARG;
	
	
	C_dxj_DirectXFileObject *c=NULL;
	c=new CComObject<C_dxj_DirectXFileObject>;
	if( c == NULL ) return E_OUTOFMEMORY;

	hr=c->Init();

	if FAILED(hr) {
		delete c;
		return hr;
	}
	hr=c->QueryInterface(IID_I_dxj_DirectXFile, (void**)ret);
	return hr;

}

HRESULT C_dxj_DirectXFileObject::Init ()
{
	HRESULT hr;
	hr=DirectXFileCreate(&m_pDirectXFile);	
	return hr;
}

HRESULT C_dxj_DirectXFileObject::CreateEnumObject( 
            /* [in] */ BSTR __RPC_FAR filename,
            /* [retval][out] */ I_dxj_DirectXFileEnum __RPC_FAR *__RPC_FAR *ret)
{
	USES_CONVERSION;
	HRESULT hr;

	LPSTR szName=W2T(filename);	
	LPDIRECTXFILEENUMOBJECT pEnum=NULL;

	hr=m_pDirectXFile->CreateEnumObject(szName,DXFILELOAD_FROMFILE ,&pEnum);
	if FAILED(hr) return hr;

	hr=C_dxj_DirectXFileEnumObject::create (pEnum,ret);
	if FAILED(hr) {
		pEnum->Release();
	}
	return hr;

}

        
HRESULT C_dxj_DirectXFileObject::CreateSaveObject( 
            /* [in] */ BSTR filename,
            /* [in] */ long flags,
            /* [retval][out] */ I_dxj_DirectXFileSave __RPC_FAR *__RPC_FAR *ret)
{
	USES_CONVERSION;
	HRESULT hr;

	LPSTR szName=W2T(filename);	
	LPDIRECTXFILESAVEOBJECT pSave=NULL;

	hr=m_pDirectXFile->CreateSaveObject(szName,(DWORD)flags, &pSave);
	if FAILED(hr) return hr;

	//Note ::create does addref pSave on success
	hr=C_dxj_DirectXFileSaveObject::create (pSave,ret);
	if (pSave) pSave->Release();

	return hr;
}

        
HRESULT C_dxj_DirectXFileObject::RegisterTemplates( 
            /* [in] */ void __RPC_FAR *temp,
            /* [in] */ long size)
{
	HRESULT hr;

	__try{

		hr=m_pDirectXFile->RegisterTemplates(temp,(DWORD)size);
		if FAILED(hr) return hr;
	}
	__except(1,1){
		return E_INVALIDARG;
	}

	return hr;
}

        
HRESULT C_dxj_DirectXFileObject::RegisterDefaultTemplates( void) 
{
	HRESULT hr;
	hr=m_pDirectXFile->RegisterTemplates(D3DRM_XTEMPLATES2,D3DRM_XTEMPLATE_BYTES );

	return hr;
}