October 2009 - Posts

This article covers using Outlook to Migrate a contact folder from Exchange Public Folders to a PST File to then migrate to CRM.

A CRM client needed their contacts which were currently kept in public folders migrated to CRM. Obviously the first step is to get the contacts from Public Folders in to a format that is can be imported to CRM. So in this case we need to get the contacts to a PST file and the steps below are taken from Microsoft KB327304

Certainly, many people would first think of using Exmerge to get PST data from Exchange, however Exmerge does not work with public folders. This article does not cover the steps of migrating data from Outlook to CRM since that information is well covered elsewhere.

ExMerge does not work with public folders, it only works with mailboxes. When you use ExMerge to upgrade to Exchange 2000 or to Exchange 2003, you have to download public folders on the server that is running Exchange Server 5.5 to a .pst file on an Outlook (MAPI) client, and then publish this file on the new Exchange 2000 computer or on the new Exchange 2003 computer.

  1. Use an account on a Microsoft Outlook 2002 or Microsoft Office Outlook 2003 client computer that has administrative rights to log on to a mailbox on the server that is running Exchange Server 5.5.
  2. On the File menu, point to New, and then click Outlook Data File.
  3. Click Personal Folders File (.pst), and then click OK.
  4. Name the file Public.pst, save the file to a path that has a lot of free disk space, and then write down the location where the file is saved.

    NOTE: The .pst files have storage limits of 2 gigabytes (GB) each. For more information, click the following article number to view the article in the Microsoft Knowledge Base:
    208480  (http://support.microsoft.com/kb/208480/ ) Description of the purpose and capacity of Outlook storage facilities
  5. Accept the default settings that are listed in the Create Microsoft Personal Folders dialog box, and then click OK.

    A new folder group that is named Personal Folders is created in Outlook.
  6. In the Outlook folder list, expand Public Folders, and then expand All Public Folders.
  7. Drag each top-level public folder that you want to export to the Personal Folders folder that you created in step 4.

    All top-level public folders and their subfolders are copied.
  8. Log off the Outlook client.
  9. From the Outlook client, use an account that has administrative rights to log on to a mailbox that is homed on the Exchange 2000 computer or on the Exchange 2003 computer.
  10. On the File menu, point to New, and then click Outlook Data File.
  11. Click Personal Folders File (.pst), locate and click the .pst file that you created in step 4, and then click OK two times.
  12. Drag the folders from the Personal Folders folder to All Public Folders in the Outlook folder list.

Jeff Loucks
Available Technology
Available Technology
  Subscribe in a reader

Microsoft recently worked with  MarketTools's Zoom Panel Tech to conduct a 2000 IT Pro survey on the subject of how and why they use solution providers (IT consultants, resellers, system integrators and hosted service providers).

Here are the highlights:

Over 70% of IT pros surveyed use some sort of solution provider (consultant, reseller, system integrator or hosted service provider.)
  • Consultants were indicated by IT decision makers as the most commonly used solution provider (57%) vs. resellers (43%), solution integrators (38%), and hosted service providers (36%)
  • 42% of IT decision makers view solution providers as "highly" or "extremely" influential in the direction of their IT systems, versus other outside influences, such as vendors, peers, publications and analysts.
  • About 40% of IT decision makers say their solution providers help them save money (7, 8 or 9 out of 1-9 scale.)
  • "Strategic advice, guidance and overall expertise" (39%) were cited by IT decision makers as the most important value provided by solution providers, over skills such as deployment and implementation (21%) or ongoing support/maintenance (14%)
  • 54% of IT decision makers say "Overall planning, strategy and management" by solution providers provide the greatest value versus specific technical cababilities, such as systems management (38%), storage and disaster recovery (35%), virtualization (34%), security (28%) and others.
  • 47% of IT decision makers want their solution providers to most closely align with MSFT - by far the top vendor preference.
  • Versus IBM (12%), HP (10%), Vmware (9%), Symantec (2%), RedHat (2%), Other (8%)

Jeff Loucks
Available Technology
Available Technology
  Subscribe in a reader

There is a good article on the Office Communication Server 2007 blog about the XMPP Gateway which released on OCtober 2, 2009. I hope to do a review on this technology in the new year. Until then, here is the link.

http://communicationsserverteam.com/archive/2009/10/02/620.aspx

Jeff Loucks
Available Technology
Available Technology
  Subscribe in a reader

There has got to be a way to create a bootable USB drive using Windows! In this article I will describe how to do it with nothing more than the Windows DVD and a separate Windows workstation. First of all, I hate that HP utility that needs a floppy. What the tarnation is that? If you don't have a DVD of a floppy drive you need this method.

Before we begin you will need to know a few things. You will need to know the drive letters of your drives such as the DVD drive with the Windows 7 media, the drive letter the USB stick.

Umbrella WARNING: The drive letter of the USB drive might change during this process.
Umbrella WARNING: All information on your USB drive will be erased.
Umbrella WARNING: Your USB drive must be large enough to store the content of your DVD drive. (3 GB or larger)
Umbrella WARNING: This article assumes you have significant administrative experience and understand the consequences of each command. Proceed at your own risk.

Task 1: Making the USB drive an Active Primary Partition.

  1. Open a command prompt (with administrative rights if required by your OS).
  2. At the command Prompt type Diskpart and press enter
  3. Type List Disk and press enter
  4. You will see a list of all the disks on your computer.. A number will identify each disk.
    1. If you do not know which disk is you USB drive go through the list by typing Select Disk 1 enter and then type details. repeat until you know you are on the right USB drive. Hint: It is probably the last one.
  5. Type select disk 4* and press enter. The system will report: "Disk 4* is now selected" (*Where disk 4 is the number of the USB drive, change this number to reflect your system).
  6. Type Clean and press enter. The system will report "DiskPart succeeded in cleaning the disk." This will remove the disk from your current drive letter for your USB.
  7. Type create partition primary and press enter. The system will report "DiskPart succeeded in creating the specified partition."
  8. Type select partition 1 and press enter. The system will report "Partition 1 is now the selected partition."
  9. Type active and press enter. The system will report "DiskPart Marked the current partition as active."
  10. Type assign and press enter.  The system will report "DiskPart successfully assigned a drive letter ..."
  11. Type detail disk and press enter. Details will be listed and under the column heading "LTR" you will see the drive letter. I will assume it is U: for the remainder of the explanation.
  12. Type  exit  and press enter. This will leave the DiskPart context.

Task 2: Formating the USB Drive and copying the install files.

  1. If the command prompt is not still open, open the command prompt.
  2. Type format U: /fs:fat32 /q and press enter. (Where U: is the letter of your USB Drive)
  3. A warning will appear indicating all information on the drive will be lost. Type Y and press enter.
  4. You will be prompted to enter a label for the drive. Press enter to continue.
  5. We have now formatted the drive and can proceed to copying the files. Assuming Drive d: for DVD and Drive u: for USB
  6. Type xcopy d:\*.* /s/e/f u:\  . The files will copy and may take a long time depending on the USB drive performance.

Once the files have completed copying, the USB drive is bootable. You may have to change the Boot Order in the BIOS settings of the machine you which to boot from the USB drive.

Jeff Loucks
Available Technology
Available Technology
  Subscribe in a reader

Well dual boot just went obsolete. At least installing to two different directories it did. Now you can achieve true isolation. Mark Rusinovich wizard extraordinaire and the Microsoft Sysinternals team launched a great new tool. Disk2VHD excerpted from the Sysinternals site:

 Download Disk2vhd (704 KB)

Introduction

Disk2vhd is a utility that creates VHD (Virtual Hard Disk - Microsoft’s Virtual Machine disk format) versions of physical disks for use in Microsoft Virtual PC or Microsoft Hyper-V virtual machines (VMs). The difference between Disk2vhd and other physical-to-virtual tools is that you can run Disk2vhd on a system that’s online. Disk2vhd uses Windows’ Volume Snapshot capability, introduced in Windows XP, to create consistent point-in-time snapshots of the volumes you want to include in a conversion. You can even have Disk2vhd create the VHDs on local volumes, even ones being converted (though performance is better when the VHD is on a disk different than ones being converted).

The Disk2vhd user interface lists the volumes present on the system:

It will create one VHD for each disk on which selected volumes reside. It preserves the partitioning information of the disk, but only copies the data contents for volumes on the disk that are selected. This enables you to capture just system volumes and exclude data volumes, for example.

Note: Virtual PC supports a maximum virtual disk size of 127GB. If you create a VHD from a larger disk it will not be accessible from a Virtual PC VM.

To use VHDs produced by Disk2vhd, create a VM with the desired characteristics and add the VHDs to the VM’s configuration as IDE disks. On first boot, a VM booting a captured copy of Windows will detect the VM’s hardware and automatically install drivers, if present in the image. If the required drivers are not present, install them via the Virtual PC or Hyper-V integration components. You can also attach to VHDs using the Windows 7 or Windows Server 2008 R2 Disk Management or Diskpart utilities.

Note: do not attach to VHDs on the same system on which you created them if you plan on booting from them. If you do so, Windows will assign the VHD a new disk signature to avoid a collision with the signature of the VHD’s source disk. Windows references disks in the boot configuration database (BCD) by disk signature, so when that happens Windows booted in a VM will fail to locate the boot disk.

Disk2vhd runs Windows XP SP2, Windows Server 2003 SP1, and higher, including x64 systems.

Thanks Dieter Rauscher for the heads up,

Jeff Loucks
Available Technology
Available Technology

 

 

If you are involved at all with Microsoft on a professional level, you could not miss the fact that Microsoft is lugging the Juggernaut that it is toward Cloud computing. Branch Office is a logical intermediary step in the strategy since technology that Microsoft develops here will be leveraged to connect to a platform in the cloud like Windows Azure.

Over the remainder of the month I am going to deep dive on new features of Windows Server 2008 R2 and Win7 as they relate to Branch Offices. I will talk about strategies for mitigating common problems and provide an in depth look at these new features. This is an introductory article on the series.

Microsoft is leveraging some of the peer-2-peer technologies we have seen evolve for allegedly legal and illegal software and music distribution through tools like Kazaa and also through initiative like IBM's Peer to Peer Remote Copy or the European Unions P2P-Next. I first saw this type of software leveraged commercially by a gaming company about 2 years ago and Microsoft is putting it into commercial application in one of its applications of Branch Cache. The use of peer-2-peer technologies is not only a revolutionary step forward but also an acknowledgment that resources that pass through Internet are constrained and the more you can share locally with other users the less you strain that resource.

These are only a few of the ground breaking tools we have seen emerge with this new release generation and I hope you will subscribe to my blog to keep up to date on how the technologies we see in Branch Office are going to shape the future if consumers and business act the way Microsoft and others in the industry predict.

Jeff Loucks
Available Technology
Available Technology

New Research from the University of Michigan duo Jie Yu and Satish Narayanasamy looks into encoding a set of tested correct interleavings in a program’s binary executable using Predecessor Set (PSet) constraints. These constraints are efficiently enforced at runtime using processor support, which ensures that the runtime follows a tested interleaving. They analyze several bugs in open source applications such as MySQL, Apache, Mozilla, etc., and show that, by enforcing PSet constraints, one can avoid not only data races and atomicity violations, but also other forms of concurrency bugs.

Source: A Case for Interleaving Constrained Shared Memory

 Conclusions:

Testing and verifying a multi-threaded program is more difficult than a single-threaded program, because the number of possible interleavings is exponential over the number of memory operations executed by different threads. They make a case for an interleaving constrained shared-memory multi-processor which avoids untested interleavings.

This paper makes the first step towards designing an interleaving constrained multi-processor. To detect untested interleavings one needs a set of invariants fundamentally different from the ones used to detect incorrect interleavings such as a data race invariant or AVIO. They focused on constraining the runtime interleaving such that, no two remote memory operations are allowed to depend on each other at runtime, unless that dependency was observed in at least one of the test runs. They built a software tool to detect PSet constraints and enforce them, but as expected, it incurs significant runtime slowdown. They proposed extensions to a multi-processor design, which enables efficient detection of PSet constraint violations. On detecting a violation, checkpoint support is used for re-executing the program with an alternative interleaving and resolve the PSet constraint violations.

They analyzed several bugs in real applications, and showed that the proposed system can avoid not only data races and atomicity violations, but also other unstructured memory order related concurrency bugs. The number of false constraint violations in a well tested program is very small, and as a result, the resulting performance overhead is also negligible.

Thanks for the great read!

 Jeff Loucks
Available Technology
Available Technology

Well I am deep into using Hyper-V R2 and I have probably forgotten a dozen things that caught me off guard at the beginning. I have resolved to just blog about them as they come up rather that put them in order of importance.

In order for Hyper-V 2008 R2 Integration services to be installed on Windows Server 2003, SP2 needs to be installed. Now in most circustances this would not be a problem because you could use slipstreamimng to make another ISO image with the SP2 or SP3 install files. For more information on slip streamimng look here: How to integrate software updates into your Windows installation source files.

Having said that, there are instances were you can't slip stream media because of deeper integrations. Just one such case is with SBS 2003 R2. It so happened that I was creating an SBS 2003 VM when I hit this snag. It is one of those catch 22 situations. The network card does not work because integrations services are not installed but you can't install integrations services without SP2 installed and you can't get SP2 on to the VM because you don't have a network connection yet.

So I started thinking through how to get SP2 on the box. My first two thoughts were Pass-Through Disk or Build an ISO. I quckly abandoned those. I started downloading SP2 while I was thinking and that is when VHD support in Wndows 2008 R2 came to mind. Before the download had completed I shutdown the VM with the partially installed SBS 2003. The following is a step by step of how to mount a VHD as a drive in Windows 7 or Windows 2008 R2.

Task 1: Attach VHD as Drive on Parent Partition

  1. Click Start > Rick Click on Computer
  2. Select Manage from the right click context menu
  3. Select Storage
  4. Right click Disk Management
  5. Select Attach VHD from the right click context menu
  6. Browse or type the location of your VHD file (In my case it was the OS drive for SBS 2003)
  7. Click OK. Assign a drive Letter (I will assume you selected V: for the rest of the description)
  8. You have now mounted the VHD file as a hard drive and can access it like a regular drive.

Task 2: Add Windows 2003 SP2 to the drive

  1. Right click on the Windows 2003 SP2 installer file you downloaded earlier
  2. Select Send to > V: (V: being the drive letter you assinged to the VHD file)
  3. You have now copied the file to the VHD file on you. You can vaerify this by using Windows Explorer.

Task 3: Dettach the VHD from the Parent

  1.  
    1. Click Start > Rick Click on Computer
    2. Select Manage from the right click context menu
    3. Select Storage
    4. Click Disk Management
    5. Right click on Drive V:
    6. Select Dettach VHD from the right click context menu
    7. You have now detached the VHD file as a hard drive and can start the VM again.

Task 4: Restart SBS 2003 R2 Child Partition and install SP2

  1. Start your Child Partion
  2. After you have logged on
  3. Open windows Explorer and go to the c: drive
  4. Double click the Windows 2003 SP2 installer.
  5. After the installer complete and you have completed the required restarts, insert the Integration Services disk
  6. Once the integration services complete the network card will find its drivers.

So finally I could complete the install of SBS 2003 R2 on Hyper-V 2008 R2.

Hope that helps,

 Jeff Loucks
Available Technology
Available Technology

 

Every now and then you try to dig up the information regarding downgrade rights that come with your software. This post shows paths to downgrade SQL Server. Source: SQL Server Licensing Guide.

Jeff Loucks
Available Technology
Available Technology

Posted Fri, Oct 2 2009 3:50 by jeffl | with no comments
Filed under: ,

Over the past 2 weeks I have been conducting performance testing on Autodesk Inventor using three different Operating Systems. Essentially the results of the testing revealed that unless applications are optimized for specific hardware much of the horse power we buy goes unused and wasted. One has to wonder if the inherent monitoring tools we see in Windows are really giving us the full picture. Perhaps the easiest thing to point at is Windows 7 current lack of GPU monitoring.

Diagram of a possible Windows 8 Task Manager.

Essentially the next Windows version after Windows 7 will be tackling new hurdles that reflect the way we already use computers but will essentially help to bring huge performance increases which do not exist today. Perhaps the single most important reason why we have not been paying attention to the whole picture as it relates to bottle necks in performance is because we have not had the tools to do it. The saying "out of sight out of mind" brings on new meaning as it relates to monitoring and the GPU is one clear area that has been out of sight. 

I certainly want to give credit where credit is due. The Windows 7 team made big strides in performance and my testing revealed improvements of up to 20% over Windows XP in intensive graphics rendering and stunning differences related to DriectX11. Simply on performance alone, Windows 7 makes the cost of upgrading for CPU hungry users worth the lower than ever operating system price.

As we look to the future of monitoring and performance, we are going to see better cooperative processing between GPUs and CPUs. This will mean we will need tools to monitor what is going on to help pinpoint and troubleshoot issues. We are also going to see the removal of what I call "Multi-Core management bottlenecks" through initiative like Barrelfish and we will need a way to monitor that.

I think more than ever we are seeing that hardware relies on the operating system to capture the inherent performance increases which exist under the covers.

Jeff Loucks
Available Technology
Available Technology

Well we can hardly say Multi-Core processors are new technology. Those who really know the ins and outs of the way applications run will tell you there is inefficiency in the way operating systems and the applications that run on them use the hardware. This inefficiency can actually make multi-core processors run slower than their single core predecessors for non-optimized applications. The most efficient applications are specifically designed to support newer technologies like Hyper-threading and Multi-Core but those are not the business productivity applications you would expect.

Yes, it is game development that is most preoccupied with the specifics of achieving maximum performance. This is in part because game development is highly volatile market which often builds code from scratch rather than reusing code that has evolved over 10 and in some case 20 years like Microsoft Office. To take advantage of the new power legacy code needs to be rewritten effectively from the beginning to support today's hardware. But therein lies the problem. Today hardware is getting increasingly diverse and what was dual(2) core 18 months ago is Six Core now and the count will grow. So the target is moving and companies may start coding against a future spec which may only exists for 18 months or less. Equally we now have multi-GPU processors which perform graphics computing faster and systems that can take advantage of this performance see massive gains in performance for real life applications like DNA, robotics modeling, Global Weather Pattern prediction and other areas.

Following the scale of predictability, constantly rewriting major application code to take advantage of hardware is impractical. So does that mean hardware vendors should go back to single core? Well maybe, but probably not. Let's look at the history of operating systems. Remember DOS (Disk Operating System), well it evolved to support a bridge between the user applications and the hardware. So architecturally, doesn't it make sense that the operating system needs to take better advantage of new hardware performance? It sure does. Enter http://www.barrelfish.org/ a joint Microsoft Research and Swiss ETH Zürich project. The goal is essentially to create a distributed Multi-Kernel operating system on your box which efficiently communicates through a light weight hypervisor. In other words, an operating system which uses the maximum performance of the underlying technology with out having application developers program specifically toward the optimal hardware.

The Multikernel Model - source: http://www.barrelfish.org/barrelfish_sosp09.pdf

This model is a massive oversimplification of the challenges faced in creating such and operting system. So how long are we talking about before true multikernel lightweight hypervisors rule the roost on our electron hatcheries? All we know at this point as Windows 7 prepares to launch is that incubation has begun on next generation. Windows Eight my Kernels.

Jeff Loucks
Available Technology
Available Technology

Up Arrow

uparrow

Moves backward through the command history, beginning with the last command typed and working back towards the first command typed.

For example, if the last command you typed was clear-host (as in our sample command history) then pressing the Up arrow key one time will display clear-host at the command prompt; you can then run this command by pressing ENTER. Pressing the Up arrow key a second time will display the command get-childitem *.dll. Pressing the key a third time displays cd c:\windows, and so on.

Down Arrow

downarrow

Moves forward through the command history. Continuing with the Up arrow example, suppose you backed your way through the command history (starting with the latest command and moving backwards towards the first command) until get-process –name “Notepad” was displayed at the command prompt. If you now press the Down arrow key you’ll move forward through the command history and get-history will be displayed. Press the Down arrow key a second time and cd c:\windows will be displayed.

PgUp

pgup

Displays the first command in the command history. In our example, that causes cd c:\scripts to be displayed at the command prompt.

PgDn

pgdn

Displays the last command in the command history. In our example, that’s the clear-host command.

Left Arrow

leftarrow

Moves the cursor one character to the left on the command line. For example, if the cursor is under the\ in command cd c:\scripts, pressing the Left arrow key will move the cursor under the :.

Right Arrow

rightarrow

Moves the cursor one character to the right on the command line. For example, if the cursor is under the : in cd c:\scripts, pressing the Right arrow key will move the cursor under the \.

Home

home

Moves the cursor to the beginning of the command line.

End

end

Moves the cursor to the end of the command line.

Control + Left Arrow

Ctrlleftarrow

Moves the cursor one “word” to the left on the command line. For example, suppose the command line is displaying the command get-process –name “Notepad”; in addition, suppose that the cursor is under any of the characters in the “word” get-process. (In this case, “words” are strings of characters delineated by blank spaces.) Holding down the Ctrl key and pressing the Left arrow key will cause the cursor to move beneath the g in get-process.

Control + Right Arrow

Ctrlrightarrow

Move the cursor one “word” to the right on the command line. For example, suppose the command line is displaying the command get-process –name “Notepad”; in addition, suppose that the cursor is under any of the characters in the “word” –name. (In this case, “words” are strings of characters delineated by blank spaces.) Holding down the Ctrl key and pressing the Right arrow key will cause the cursor to move beneath the in “Notepad”.

Control + c

Ctrlc

Cancels the current command. If you are partway through typing a command and then press Ctrl+c Windows PowerShell will ignore everything you’ve typed on the line and present you with a new “blank” command line.

F2

f2

Creates a new command line from the partial contents of your last command line. For example, suppose your previous command was get-process –name “Notepad”. If you press F2, PowerShell will respond with the following request:

GRAPHIC – Enter char to copy up to:

If you type (representing the first quotation mark) PowerShell will insert the text from your previous command, up to (but not including) the double quote mark:

get-process –name

Note that PowerShell will always go the first instance of a character. If you type an e in the dialog box PowerShell will begin “typing” until it encounters the first e in get-process. Therefore, all that will be displayed on your screen is the following:

g

To cancel when asked to enter a character, press Enter without entering anything.

F3

f3

Displays your previous command. This is equivalent to pressing the Up arrow key once. However, while you can press Up arrow multiple times to continue cycling through your command history, pressing F3 additional times has no effect: only your last command will be displayed.

F4

f4

Beginning from the current cursor position, F4 deletes characters up to the specified character. For example, suppose the command get-process –name “Notepad” is displayed, and the cursor is beneath the c in process. If you press F4, the following dialog box appears:

GRAPHIC: Enter char to delete up to:

If you press PowerShell will begin deleting characters from the command prompt and continue deleting characters until it encounters a character. In this case, that means the following (nonsensical) command will be displayed:

get-pro-name "Notepad"

If you enter a character (say, z) which does not appear in the command string then all the remaining characters in the string will be deleted:

get-pro

This also occurs if you simply press ENTER when the dialog box appears.

To cancel this operation, press Ctrl+Z.

F5

f5

Like the Up arrow key, F5 moves you backward through the command history.

F7

f7

Displays a “dialog box” that allows you to select a command from your command history:

GRAPHIC: history

Scroll through the dialog box using the Up and Down arrow keys; when you find a command you want to execute press ENTER. Alternatively, locate the desired command and then press the right arrow key; that will “type” the command at the command prompt but will not execute that command. To then execute the command, you must press ENTER.

To dismiss the dialog box without selecting a command, press Escape.

F8

f8

Moves backwards through the command history, but only displays commands matching text you type at the command prompt. For example, suppose you type set and then press F8. In that case (and using our sample command history) PowerShell will only display the command set-executionpolicy. Why? Because that’s the only command in the history that matches the string set.

Now, type cd and press F8. This time around, PowerShell will display the command cd c:\windows. Press F8 a second time and the command cd c:\scripts will be displayed. That’s because, in this case, we have two commands that match the string cd.

F9

f9

Enables you to run a specific command from the command history. When you press F9 PowerShell prompts you to enter a command number, corresponding to the numbers displayed in the history “dialog box” (see F7):

GRAPHIC: Enter command number:

To run a command, type the appropriate number and press ENTER. Using our sample history, typing 5 and pressing ENTER runs the command get-process.

To cancel this operation, press Escape.

Hope that helps,

Jeff Loucks
Available Technology
Available Technology


EBS update
OWA GAL search issue
Change Server Time
EBS & Virtual TS
Update, SharePoint Services Add-in for EBS KB970385
Install CAL
SCE ISSUE
EBS License reuse
WSUS SP2
Replacement mode setup of the messaging server may fail if LCR is en
Finally I plunge into Blogging.
EBS V2 features
Download details: Feature Pack 1 for Windows EBS (KB973236):
Rebooting next week
Server 2008 SP2

Click to join the Global EBS User Group

More information about the Global EBS User Group

Jeff Loucks
Available Technology
Available Technology