# *************************************************************
#  
#  Licensed to the Apache Software Foundation (ASF) under one
#  or more contributor license agreements.  See the NOTICE file
#  distributed with this work for additional information
#  regarding copyright ownership.  The ASF licenses this file
#  to you 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.
#  
# *************************************************************
# Comment lines start with "#"
# Syntax of this file like upgrade.idt:
# UpgradeCode	VersionMin	VersionMax	Language	Attributes	Remove	ActionProperty
# s38	S20	S20	S255	i4	S255	s72
# Upgrade	UpgradeCode	VersionMin	VersionMax	Language	Attributes

{3E85B9F2-0AC3-4E57-8072-260A6FE05D02}		3.0.0		0		O2LPAF
{DF297699-3040-48E0-B0E6-B54385D76018}		3.0.0		0		O2LPAR
{62E2F6A6-4521-4E36-A751-46E91A58CFB5}		3.0.0		0		O2LPASIN
{E6DC8D4C-F68E-4BE1-8F00-F0C84ED0F974}		3.0.0		0		O2LPBEBY
{5F9461CD-2937-4EE0-AF03-24E72987244E}		3.0.0		0		O2LPBO
{29FF0FAA-B831-4398-BE3F-FC13949D1CAE}		3.0.0		0		O2LPBG
{6E4658DD-79B0-4707-93C2-B022D66157A1}		3.0.0		0		O2LPBR
{6DD492EA-45CD-483E-8563-23355FD37E28}		3.0.0		0		O2LPBRX
{4D1449E7-D10B-44D8-AAB0-257D6930B0C2}		3.0.0		0		O2LPBN
{3195C77E-8462-45DA-BEFC-37F1299D889E}		3.0.0		0		O2LPBNBD
{763F5343-47FC-4909-8C18-D9E0CEED533A}		3.0.0		0		O2LPBNIN
{DCC737A4-531E-4DCD-A3C4-376DA4C76D00}		3.0.0		0		O2LPBS
{F190162C-DCD0-4266-B9AB-1B1FD7C24C2E}		3.0.0		0		O2LPBY
{8EEC9A45-3BD3-431F-81D0-394F41185BD9}		3.0.0		0		O2LPCA
{DBA607B3-0805-4A18-A45D-769C70D90AB7}		3.0.0		0		O2LPCS
{3CE6CA2E-6ECF-45BC-B26A-348FA03A25D3}		3.0.0		0		O2LPCY
{4E7025EF-909F-4609-97BA-304684C4833D}		3.0.0		0		O2LPDA
{481E648E-D8AD-478A-A3F6-68FC563FFD8F}		3.0.0		0		O2LPDE
{205ADC32-F775-476A-B68E-949F85D0B0E3}		3.0.0		0		O2LPDGO
{3D391D0A-66D3-4141-8554-65DECA138208}		3.0.0		0		O2LPDZ
{39772F91-1D37-4866-BBA4-900AB53590B0}		3.0.0		0		O2LPEL
{E60BC5AC-2513-40AF-A41B-64118A287662}		3.0.0		0		O2LPENGB
{8B909084-2220-49AC-A421-142180519088}		3.0.0		0		O2LPENUS
{047EB419-DF2F-4D02-A3B5-E1B2FAFEDC93}		3.0.0		0		O2LPENZA
{A256340D-4065-4B6F-AC1D-EB0D5127EBCE}		3.0.0		0		O2LPEO
{01588DD5-C6C5-4C9D-A1BD-1A63E779DA1A}		3.0.0		0		O2LPES
{34FBD5D3-3F88-4C91-8B9B-A10AE833250F}		3.0.0		0		O2LPET
{A73CB85E-760B-4E5D-AB26-7DF091C25F16}		3.0.0		0		O2LPEU
{12D1FE4A-95E1-4BED-B377-2E8EA93B2461}		3.0.0		0		O2LPFA
{481B0FE0-8313-442E-8A53-7C5139ADA3DC}		3.0.0		0		O2LPFI
{B0FDE9B8-D066-4FB2-885D-615A6D58E02F}		3.0.0		0		O2LPFR
{39B343FE-EC1F-451E-930A-47D85E96DE67}		3.0.0		0		O2LPGA
{DE408221-68E9-418D-9B20-10BE458268F2}		3.0.0		0		O2LPGD
{38616841-D0DB-4768-B9B8-27D61A91FB47}		3.0.0		0		O2LPGL
{382A0F08-CF86-45C4-8119-67C87E275EFE}		3.0.0		0		O2LPGU
{25FF47C5-9FBB-4FBA-89FC-D0FB73336E2B}		3.0.0		0		O2LPGUIN
{13484272-CE60-4867-B494-D56F9049B95A}		3.0.0		0		O2LPHE
{2C70F320-6771-42D6-B3F5-97678C822B20}		3.0.0		0		O2LPHI
{DDAB0849-CC63-475C-AC87-388B93579A28}		3.0.0		0		O2LPHIIN
{0750A25E-7492-4681-8DFD-E04E89E45C0A}		3.0.0		0		O2LPHR
{5981EE94-6763-40AD-A8A0-EEB01CCA153C}		3.0.0		0		O2LPHU
{ED6D0C4C-2746-40A9-A672-4D9950C421C0}		3.0.0		0		O2LPIS
{50087605-A504-441B-B514-67F13A284C10}		3.0.0		0		O2LPIT
{74F683CC-8356-4BF7-9098-B85AAB7C1A0C}		3.0.0		0		O2LPJA
{1A4DA798-78EB-46B8-A5CE-4E32F883314C}		3.0.0		0		O2LPKID
{3110031F-1B5D-4457-BB5C-F6A330F15419}		3.0.0		0		O2LPKY
{08E10841-B5EF-4BF9-9688-AE25573E6DA7}		3.0.0		0		O2LPKA
{1527983C-2953-45B4-87A5-C7D67A1F6C60}		3.0.0		0		O2LPKK
{B4E6E1AC-C45E-48BB-A038-073C32693B65}		3.0.0		0		O2LPKM
{28FDEA4F-1DAB-4EAC-986E-604B7BB6EF11}		3.0.0		0		O2LPKN
{1D068BF9-FBCF-4A3B-B9A4-4B2DD3DE8CFB}		3.0.0		0		O2LPKO
{CC3129BA-331A-42CC-8569-93F9E05B6400}		3.0.0		0		O2LPKOK
{BADB1F2A-B03A-4521-9A4A-61C3EDD365EC}		3.0.0		0		O2LPKS
{2C5FB742-9A33-410D-AC5C-A376D4967D69}		3.0.0		0		O2LPKU
{3968BFB2-35F7-4BBC-9E3E-C640BF09587D}		3.0.0		0		O2LPLO
{3526DA6A-7EA6-471C-973E-C0461DE85909}		3.0.0		0		O2LPLT
{BC085A1A-38A6-462A-889F-6E7CA442D9D8}		3.0.0		0		O2LPLV
{BE522738-E05A-431A-B535-29349EBF86AE}		3.0.0		0		O2LPMAI
{9B8D68D5-6903-4C22-AC8F-CA0D2D124FD8}		3.0.0		0		O2LPMK
{A9E2C897-8193-4DBD-9FDE-F9BE9AB7F92E}		3.0.0		0		O2LPMN
{3CBD068D-E6AE-4C02-8091-DD4F2866336A}		3.0.0		0		O2LPMNI
{F300CABB-ED67-468E-A336-87DEC6E22CFC}		3.0.0		0		O2LPMS
{F2F04B66-9996-425D-A026-0AE99F5DB878}		3.0.0		0		O2LPMLIN
{4B87A651-94B3-48DF-800C-9458C3A93179}		3.0.0		0		O2LPMRIN
{E1C174A0-8126-43A8-B696-9F9DE676E1ED}		3.0.0		0		O2LPMY
{FF4DA93A-205F-40A2-9F01-2A5EB6663E6C}		3.0.0		0		O2LPNE
{6E732530-FCDD-484C-A575-1289731020FD}		3.0.0		0		O2LPNB
{7D14314D-DAF7-4A97-A6EE-97C475080A73}		3.0.0		0		O2LPNL
{2F1F8A99-B3C4-4F22-BB08-5F0D217C0BE5}		3.0.0		0		O2LPNN
{00C1656C-6386-42ED-BE8C-5D6C553EF125}		3.0.0		0		O2LPNO
{0E64C806-9EB2-4651-BB94-B8D9814FD9E5}		3.0.0		0		O2LPNR
{5142883F-6084-4723-907B-EFD4A5097817}		3.0.0		0		O2LPNS
{8D6EE539-9E74-41C0-8DED-807F91D68467}		3.0.0		0		O2LPOM
{73B96B61-E98E-4BB1-8E16-BABEBF6D58FB}		3.0.0		0		O2LPOC
{11771BE2-44D3-4ACD-882B-26C4947237C5}		3.0.0		0		O2LPORIN
{C4AC769D-F356-4D1A-A3A4-62E6729CF403}		3.0.0		0		O2LPPAP
{1869854A-30BE-40EF-B72C-AF0CCA1A5A91}		3.0.0		0		O2LPPAIN
{9C92258E-9A41-4A03-AA5C-FD8EF15189BA}		3.0.0		0		O2LPPL
{277B630B-64D9-4105-A542-6F279A31A72C}		3.0.0		0		O2LPPS
{CBFA6A61-D310-4A90-8F49-C7BE2735D58D}		3.0.0		0		O2LPPT
{7364F154-089D-400B-B275-751AAB9A6122}		3.0.0		0		O2LPPTBR
{DF67ADAA-4755-4184-9E32-1020F40DDA81}		3.0.0		0		O2LPRU
{D1D013B7-9570-4165-8421-BBDC97842260}		3.0.0		0		O2LPRW
{233A2442-D417-458E-A67F-4C3E58B54387}		3.0.0		0		O2LPSAT
{180CEB68-8F15-4533-B2C2-43D47DED7ABB}		3.0.0		0		O2LPSAIN
{6CFE884D-10C2-42F7-A60F-52A8284E8D45}		3.0.0		0		O2LPSI
{AC0B0CE3-DF64-4CCF-88EC-CBF594D63183}		3.0.0		0		O2LPSC
{638AEB7C-B611-4DBE-AD2C-A91BB7D13B75}		3.0.0		0		O2LPSD
{19B49960-B58C-48A7-9761-F0B325E00C31}		3.0.0		0		O2LPSK
{0FBEEB90-0C80-4C77-8CEE-E6347CC465FD}		3.0.0		0		O2LPSL
{8DA3BE37-E70B-41BD-BBBC-C2169FBE01F4}		3.0.0		0		O2LPSH
{49A004A2-3B8B-4029-B403-89919CB52355}		3.0.0		0		O2LPSR
{5B0E4353-AB4E-497E-B38F-2E784C7B1F35}		3.0.0		0		O2LPSS
{FC92FF2C-0E4B-4EB1-A962-682861EE4C33}		3.0.0		0		O2LPST
{5E751B0D-FE96-4D0E-BAC1-5E7501294940}		3.0.0		0		O2LPSV
{90672FAA-14CA-4F63-8FE9-40E572A3969A}		3.0.0		0		O2LPSW
{905F971E-91FC-4F85-90D6-F6217A4FF01A}		3.0.0		0		O2LPSWTZ
{79ADE5C5-96C5-4CAB-B8A3-1024E6A639E7}		3.0.0		0		O2LPTEIN
{1FEF45BC-1315-46F4-B89B-6660226758DE}		3.0.0		0		O2LPTIER
{76D5C227-D097-4B4E-B4C7-B2370B4F7932}		3.0.0		0		O2LPTAIN
{1F9BC074-55AA-496A-9EC5-05E65CF64AE6}		3.0.0		0		O2LPTH
{685C3085-DCD2-40F6-85C9-5084402D7E0F}		3.0.0		0		O2LPTN
{46AB3EE6-FD98-460D-AE0B-6AE68ED6204D}		3.0.0		0		O2LPTR
{AC285965-9D0F-4D55-8885-0F0A9B9888B1}		3.0.0		0		O2LPTS
{6C238E70-72FA-45FA-BC58-C508CD3AF6FC}		3.0.0		0		O2LPTG
{57836D3D-879A-4288-8C47-691ECC4EECBE}		3.0.0		0		O2LPUG
{CE89FED1-6E4E-41B0-95B2-C39295B6A6BD}		3.0.0		0		O2LPURIN
{CB7AB32F-5218-4B5A-982E-F1AA5F00CFC0}		3.0.0		0		O2LPUK
{CD74D285-6FAB-4737-B8C3-2FAA2B0B047D}		3.0.0		0		O2LPUZ
{95AD70B2-CE4A-4362-975E-6C48DC70179C}		3.0.0		0		O2LPVE
{9B664C3A-CD48-4717-A40D-3B02475D7E20}		3.0.0		0		O2LPVI
{1BCF7835-9CD6-454E-9530-64222CCF29E7}		3.0.0		0		O2LPXH
{5B45DC72-0755-4EC2-BB12-65A1FEADDDE7}		3.0.0		0		O2LPZHCN
{08B2CED3-CFB5-491F-ADC4-FD0CD2366C60}		3.0.0		0		O2LPZHTW
{924D7527-25C6-4B95-95C7-7B68DABEC93E}		3.0.0		0		O2LPZU
