// Copyright 2007-2009 Google Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// ========================================================================
//
// symbol definitions for the BHO DLL resources

#ifndef OMAHA_BHO_RESOURCE_H__
#define OMAHA_BHO_RESOURCE_H__

// The id of the ATL COM registration script
#define IDR_BHO_ENTRY                       100

#endif  // OMAHA_BHO_RESOURCE_H__

