7 Nokia Corporation - initial contribution. |
7 Nokia Corporation - initial contribution. |
8 Contributors: |
8 Contributors: |
9 --> |
9 --> |
10 <!DOCTYPE concept |
10 <!DOCTYPE concept |
11 PUBLIC "-//OASIS//DTD DITA Concept//EN" "concept.dtd"> |
11 PUBLIC "-//OASIS//DTD DITA Concept//EN" "concept.dtd"> |
12 <concept id="GUID-A188606F-4A8E-5A85-A241-E15219960EFA" xml:lang="en"><title>Loader |
12 <concept id="GUID-A188606F-4A8E-5A85-A241-E15219960EFA" xml:lang="en"><title>Loader Overview</title><shortdesc>This topic describes the overview, purpose, key concepts |
13 Overview</title><shortdesc>This topic describes the overview, purpose, key concepts and architecture |
13 and architecture of loader.</shortdesc><prolog><metadata><keywords/></metadata></prolog><conbody> |
14 of loader.</shortdesc><prolog><metadata><keywords/></metadata></prolog><conbody> |
|
15 <ul> |
14 <ul> |
16 <li id="GUID-AE825AB3-3799-5A7A-A74D-D6E457A6997E"><p> <xref href="GUID-A188606F-4A8E-5A85-A241-E15219960EFA.dita#GUID-A188606F-4A8E-5A85-A241-E15219960EFA/GUID-E36370EC-CD5E-54AE-AD62-2BA3B70F5379">Purpose</xref> </p> </li> |
15 <li id="GUID-AE825AB3-3799-5A7A-A74D-D6E457A6997E"><p> <xref href="GUID-A188606F-4A8E-5A85-A241-E15219960EFA.dita#GUID-A188606F-4A8E-5A85-A241-E15219960EFA/GUID-E36370EC-CD5E-54AE-AD62-2BA3B70F5379">Purpose</xref> </p> </li> |
17 <li id="GUID-9D2C951C-6092-53BB-BFA9-4D33230721FA"><p> <xref href="GUID-A188606F-4A8E-5A85-A241-E15219960EFA.dita#GUID-A188606F-4A8E-5A85-A241-E15219960EFA/GUID-89A8CABD-6B31-5D10-87F6-922CCFB83186">Key concepts</xref> </p> </li> |
16 <li id="GUID-9D2C951C-6092-53BB-BFA9-4D33230721FA"><p> <xref href="GUID-A188606F-4A8E-5A85-A241-E15219960EFA.dita#GUID-A188606F-4A8E-5A85-A241-E15219960EFA/GUID-89A8CABD-6B31-5D10-87F6-922CCFB83186">Key concepts</xref> </p> </li> |
18 <li id="GUID-B21577D8-3B8B-596F-A3B6-6AC2538F6F28"><p> <xref href="GUID-A188606F-4A8E-5A85-A241-E15219960EFA.dita#GUID-A188606F-4A8E-5A85-A241-E15219960EFA/GUID-64154337-D706-5DE1-9319-4FEA6181EFC4">Architectural relationships</xref> </p> </li> |
17 <li id="GUID-B21577D8-3B8B-596F-A3B6-6AC2538F6F28"><p> <xref href="GUID-A188606F-4A8E-5A85-A241-E15219960EFA.dita#GUID-A188606F-4A8E-5A85-A241-E15219960EFA/GUID-64154337-D706-5DE1-9319-4FEA6181EFC4">Architectural relationships</xref> </p> </li> |
19 </ul> |
18 </ul> |
20 <section id="GUID-E36370EC-CD5E-54AE-AD62-2BA3B70F5379"><title>Purpose</title> <p>The |
19 <section id="GUID-E36370EC-CD5E-54AE-AD62-2BA3B70F5379"><title>Purpose</title> <p>The loader makes EXEs and DLLs ready to run. </p> <p>The build |
21 loader makes EXEs and DLLs ready to run. </p> <p>The build tools compile the |
20 tools compile the source code into an executable file. An executable |
22 source code into an executable file. An executable file is called a binary. |
21 file is called a binary. The build tools arrange the compiled code |
23 The build tools arrange the compiled code into EXEs and DLLs. The source code, |
22 into EXEs and DLLs. The source code, header files and other information |
24 header files and other information that defines an executable file is defined |
23 that defines an executable file is defined in an mmp file. The loader |
25 in an mmp file. The loader applies relocation information to the code and |
24 applies relocation information to the code and data sections of EXEs |
26 data sections of EXEs and DLLs. The loader also loads DLLs that are referred |
25 and DLLs. The loader also loads DLLs that are referred to by other |
27 to by other EXEs and DLLs. EXEs and DLLs can then run in the process into |
26 EXEs and DLLs. EXEs and DLLs can then run in the process into which |
28 which they are loaded. </p> </section> |
27 they are loaded. </p> </section> |
29 <section id="GUID-89A8CABD-6B31-5D10-87F6-922CCFB83186"><title>Key concepts</title> <p><b>The loader server</b> </p> <p>The Symbian platform loader is a server. |
28 <section id="GUID-89A8CABD-6B31-5D10-87F6-922CCFB83186"><title>Key |
30 The loader server has no public client interface. The client interface is |
29 concepts</title> <p><b>The loader server</b> </p> <p>The Symbian platform loader is a |
31 internal to Symbian platform. Requests to load an EXE or a DLL are passed |
30 server. The loader server has no public client interface. The client |
32 to the loader when you do the following: </p> <ul> |
31 interface is internal to Symbian platform. Requests to load an EXE |
33 <li id="GUID-5DFBB7F5-2F30-50C7-9144-3D6D85C0ACA1"><p>start a new process |
32 or a DLL are passed to the loader when you do the following: </p> <ul> |
34 - a call to <xref href="GUID-9DD1EA2B-DC59-315C-8E9C-CE6D9461B695.dita#GUID-9DD1EA2B-DC59-315C-8E9C-CE6D9461B695/GUID-DD214BA3-907E-3C7F-93C6-924A9A115A02"><apiname>RProcess::Create()</apiname></xref> </p> </li> |
33 <li id="GUID-5DFBB7F5-2F30-50C7-9144-3D6D85C0ACA1"><p>start a new |
35 <li id="GUID-B88FC041-7643-5CA0-9796-A51E64CAA1DF"><p>load a DLL - a call |
34 process - a call to <xref href="GUID-9DD1EA2B-DC59-315C-8E9C-CE6D9461B695.dita#GUID-9DD1EA2B-DC59-315C-8E9C-CE6D9461B695/GUID-DD214BA3-907E-3C7F-93C6-924A9A115A02"><apiname>RProcess::Create()</apiname></xref> </p> </li> |
36 to <xref href="GUID-25327159-83D6-3507-B187-09EA4BB3727F.dita#GUID-25327159-83D6-3507-B187-09EA4BB3727F/GUID-4F1B2717-D34F-32A4-B6E6-03D0533186A3"><apiname>RLibrary::Load()</apiname></xref> </p> </li> |
35 <li id="GUID-B88FC041-7643-5CA0-9796-A51E64CAA1DF"><p>load a DLL - |
37 <li id="GUID-A7578989-6BDB-5CEA-B3C3-0B5A08E57166"><p>load a logical device |
36 a call to <xref href="GUID-25327159-83D6-3507-B187-09EA4BB3727F.dita#GUID-25327159-83D6-3507-B187-09EA4BB3727F/GUID-4F1B2717-D34F-32A4-B6E6-03D0533186A3"><apiname>RLibrary::Load()</apiname></xref> </p> </li> |
38 driver - a call to <xref href="GUID-C197C9A7-EA05-3F24-9854-542E984C612D.dita#GUID-C197C9A7-EA05-3F24-9854-542E984C612D/GUID-AE0D51B7-7ADC-3C9F-ACAA-8F6D9EA0AEFA"><apiname>User::LoadLogicalDevice()</apiname></xref>. A logical |
37 <li id="GUID-A7578989-6BDB-5CEA-B3C3-0B5A08E57166"><p>load a logical |
39 device driver is a type of DLL. </p> </li> |
38 device driver - a call to <xref href="GUID-C197C9A7-EA05-3F24-9854-542E984C612D.dita#GUID-C197C9A7-EA05-3F24-9854-542E984C612D/GUID-AE0D51B7-7ADC-3C9F-ACAA-8F6D9EA0AEFA"><apiname>User::LoadLogicalDevice()</apiname></xref>. A logical device driver is a type of DLL. </p> </li> |
40 <li id="GUID-34DC54FE-FCEF-5F83-B205-9BA5B7140680"><p>load a physical device |
39 <li id="GUID-34DC54FE-FCEF-5F83-B205-9BA5B7140680"><p>load a physical |
41 driver - a call to <xref href="GUID-C197C9A7-EA05-3F24-9854-542E984C612D.dita#GUID-C197C9A7-EA05-3F24-9854-542E984C612D/GUID-A0F4BF4A-9C58-3E5E-88E1-6D98597DDA18"><apiname>User::LoadPhysicalDevice()</apiname></xref>. A physical |
40 device driver - a call to <xref href="GUID-C197C9A7-EA05-3F24-9854-542E984C612D.dita#GUID-C197C9A7-EA05-3F24-9854-542E984C612D/GUID-A0F4BF4A-9C58-3E5E-88E1-6D98597DDA18"><apiname>User::LoadPhysicalDevice()</apiname></xref>. A physical device driver is a type of DLL. </p> </li> |
42 device driver is a type of DLL. </p> </li> |
41 <li id="GUID-51318E5E-4534-589B-B4BD-92D73F832A6F"><p>load a file |
43 <li id="GUID-51318E5E-4534-589B-B4BD-92D73F832A6F"><p>load a file system - |
42 system - a call to <xref href="GUID-E263C747-946F-35AA-9F1D-41833BD350FC.dita#GUID-E263C747-946F-35AA-9F1D-41833BD350FC/GUID-51353BE2-9133-39F5-83F3-A5DB88D858CA"><apiname>RFs::AddFileSystem()</apiname></xref>. A file |
44 a call to <xref href="GUID-E263C747-946F-35AA-9F1D-41833BD350FC.dita#GUID-E263C747-946F-35AA-9F1D-41833BD350FC/GUID-51353BE2-9133-39F5-83F3-A5DB88D858CA"><apiname>RFs::AddFileSystem()</apiname></xref>. A file system is a type |
43 system is a type of DLL. A call to <codeph>RFs::AddFileSystem()</codeph> requires DiskAdmin capability. See <xref href="GUID-99D8A4E8-BC4F-39FF-A3DF-832CF0411629.dita"><apiname>ECapabilityDiskAdmin</apiname></xref>. </p> </li> |
45 of DLL. A call to <codeph>RFs::AddFileSystem()</codeph> requires DiskAdmin |
44 <li id="GUID-8394C231-341B-5EA6-B9C2-01F75685813D"><p>load a file |
|
45 server extension - call to <xref href="GUID-E263C747-946F-35AA-9F1D-41833BD350FC.dita#GUID-E263C747-946F-35AA-9F1D-41833BD350FC/GUID-D45FD363-EEF9-3F77-8FA1-49270D8E89A0"><apiname>RFs::AddExtension()</apiname></xref>. |
|
46 A file server extension is a type of DLL. This function requires DiskAdmin |
46 capability. See <xref href="GUID-99D8A4E8-BC4F-39FF-A3DF-832CF0411629.dita"><apiname>ECapabilityDiskAdmin</apiname></xref>. </p> </li> |
47 capability. See <xref href="GUID-99D8A4E8-BC4F-39FF-A3DF-832CF0411629.dita"><apiname>ECapabilityDiskAdmin</apiname></xref>. </p> </li> |
47 <li id="GUID-8394C231-341B-5EA6-B9C2-01F75685813D"><p>load a file server extension |
48 <li id="GUID-F1889916-80EB-55B6-BEAF-F66164F3838C"><p>load a locale |
48 - call to <xref href="GUID-E263C747-946F-35AA-9F1D-41833BD350FC.dita#GUID-E263C747-946F-35AA-9F1D-41833BD350FC/GUID-D45FD363-EEF9-3F77-8FA1-49270D8E89A0"><apiname>RFs::AddExtension()</apiname></xref>. A file server extension |
49 - a call to <xref href="GUID-454ACAB5-1573-323C-820E-AF542B149D2A.dita#GUID-454ACAB5-1573-323C-820E-AF542B149D2A/GUID-9F04584E-DD0B-39CE-8666-88F67F3B83BF"><apiname>TExtendedLocale::LoadLocale()</apiname></xref>. </p> </li> |
49 is a type of DLL. This function requires DiskAdmin capability. See <xref href="GUID-99D8A4E8-BC4F-39FF-A3DF-832CF0411629.dita"><apiname>ECapabilityDiskAdmin</apiname></xref>. </p> </li> |
50 </ul> <p><b>Version numbers</b> </p> <p><b>The reason for version numbers</b> </p> <p>More than one version |
50 <li id="GUID-F1889916-80EB-55B6-BEAF-F66164F3838C"><p>load a locale - a call |
51 of an EXE can exist on a device at the same time. More than one version |
51 to <xref href="GUID-454ACAB5-1573-323C-820E-AF542B149D2A.dita#GUID-454ACAB5-1573-323C-820E-AF542B149D2A/GUID-9F04584E-DD0B-39CE-8666-88F67F3B83BF"><apiname>TExtendedLocale::LoadLocale()</apiname></xref>. </p> </li> |
52 of a DLL can exist on a device at the same time. A device can store |
52 </ul> <p><b>Version |
53 versions of an EXE or DLL that are not compatible with an older version |
53 numbers</b> </p> <p><b>The |
54 of that EXE or DLL. </p> <p>A version number is a set of two numbers. |
54 reason for version numbers</b> </p> <p>More than one version of an EXE can |
55 The loader uses these numbers to identify copies of the executable |
55 exist on a device at the same time. More than one version of a DLL can exist |
56 file. The two numbers are called the major version number and the |
56 on a device at the same time. A device can store versions of an EXE or DLL |
57 minor version number. The build tools encode the two numbers into |
57 that are not compatible with an older version of that EXE or DLL. </p> <p>A |
58 the header of the executable file. When a DLL is built, the version |
58 version number is a set of two numbers. The loader uses these numbers to identify |
59 numbers are encoded into the import library. </p> <p><b>The structure of version information</b> </p> <p>DLLs are the |
59 copies of the executable file. The two numbers are called the major version |
60 most common users of versions. You assign new values to the version |
60 number and the minor version number. The build tools encode the two numbers |
61 numbers of a DLL when you change the published API of the DLL. Symbian |
61 into the header of the executable file. When a DLL is built, the version numbers |
62 recommends the following procedure: </p> <ul> |
62 are encoded into the import library. </p> <p><b>The |
63 <li id="GUID-A3D6B7C6-E48E-5374-8EFE-29EB129FEE04"><p>change the minor |
63 structure of version information</b> </p> <p>DLLs are the most common users |
64 version number if you make a change to a DLL that is backward compatible. |
64 of versions. You assign new values to the version numbers of a DLL when you |
65 An example is a new function in the DLL. </p> </li> |
65 change the published API of the DLL. Symbian recommends the following procedure: </p> <ul> |
66 <li id="GUID-F6813400-1E6A-58B9-8360-7FD364F2153A"><p>change the major |
66 <li id="GUID-A3D6B7C6-E48E-5374-8EFE-29EB129FEE04"><p>change the minor version |
67 version number if you make a change to a DLL that breaks an interface. |
67 number if you make a change to a DLL that is backward compatible. An example |
68 An example is the removal of a function or a change to the signature |
68 is a new function in the DLL. </p> </li> |
69 of a function. An interface break is disruptive and must be prevented. </p> </li> |
69 <li id="GUID-F6813400-1E6A-58B9-8360-7FD364F2153A"><p>change the major version |
70 </ul> <p>The major and minor version numbers are defined in the <filepath>.mmp</filepath> file that defines the source code, header files and |
70 number if you make a change to a DLL that breaks an interface. An example |
71 other options that apply to the executable file. </p> <p>If you do |
71 is the removal of a function or a change to the signature of a function. An |
72 not specify version numbers, the build tools apply the following default |
72 interface break is disruptive and must be prevented. </p> </li> |
73 values: </p> <ul> |
73 </ul> <p>The major and minor version numbers are defined in the <filepath>.mmp</filepath> file |
74 <li id="GUID-CBF4D098-3A83-53E6-9E54-0A9B487D6E22"><p>Major version |
74 that defines the source code, header files and other options that apply to |
75 number : 10 </p> </li> |
75 the executable file. </p> <p>If you do not specify version numbers, the build |
76 <li id="GUID-46E7516E-988B-5F92-9877-FEE17D3F26A7"><p>Minor version |
76 tools apply the following default values: </p> <ul> |
77 number : 0 </p> </li> |
77 <li id="GUID-CBF4D098-3A83-53E6-9E54-0A9B487D6E22"><p>Major version number |
78 </ul> <p>The major version number and the minor version number are |
78 : 10 </p> </li> |
79 stored in the header of an EXE and DLL. The two numbers are stored |
79 <li id="GUID-46E7516E-988B-5F92-9877-FEE17D3F26A7"><p>Minor version number |
80 in a single 32 bit value. The high 16 bits hold the major version |
80 : 0 </p> </li> |
81 number. The low 16 bits hold the minor version number. </p> <p>When |
81 </ul> <p>The major version number and the minor version number are stored |
82 you build a DLL, the build tools encode the version numbers into the |
82 in the header of an EXE and DLL. The two numbers are stored in a single 32 |
83 filename of the import library (the <filepath>.lib</filepath> file). |
83 bit value. The high 16 bits hold the major version number. The low 16 bits |
84 The build tools also create an import library that does not have the |
84 hold the minor version number. </p> <p>When you build a DLL, the build tools |
85 version numbers encoded as part of the filename.The following example |
85 encode the version numbers into the filename of the import library (the <filepath>.lib</filepath> file). |
86 shows how the version numbers are encoded in the filename. The major |
86 The build tools also create an import library that does not have the version |
87 version number is (decimal) 11 and the minor version number is (decimal) |
87 numbers encoded as part of the filename.The following example shows how the |
88 2. The version numbers in the filename are in hexadecimal. </p> <p> <filepath>abcdsrv{000B0002}.lib</filepath> </p> <p>Notes: </p> <ul> |
88 version numbers are encoded in the filename. The major version number is (decimal) |
89 <li id="GUID-7DC90016-5A54-5939-84B1-DDB0B2D4D9F5"><p>The left bracket |
89 11 and the minor version number is (decimal) 2. The version numbers in the |
90 and the right bracket are part of the name. </p> </li> |
90 filename are in hexadecimal. </p> <p> <filepath>abcdsrv{000B0002}.lib</filepath> </p> <p>Notes: </p> <ul> |
91 <li id="GUID-BC291976-EB6D-59D2-8941-64F6ED3AC191"><p>The first four |
91 <li id="GUID-7DC90016-5A54-5939-84B1-DDB0B2D4D9F5"><p>The left bracket and |
92 digits after the open bracket are the hexadecimal representation of |
92 the right bracket are part of the name. </p> </li> |
93 the major version number. </p> </li> |
93 <li id="GUID-BC291976-EB6D-59D2-8941-64F6ED3AC191"><p>The first four digits |
94 <li id="GUID-51590778-985F-5DCC-9191-E937B1058F51"><p>The second four |
94 after the open bracket are the hexadecimal representation of the major version |
95 digits are the hexadecimal representation of the minor version number. </p> </li> |
95 number. </p> </li> |
96 </ul> <p>The build tools do not encode the version numbers in the |
96 <li id="GUID-51590778-985F-5DCC-9191-E937B1058F51"><p>The second four digits |
97 filename of the executable file. </p> <p><b>Loader search rules</b> </p> <p>EXEs and DLLs can exist on more |
97 are the hexadecimal representation of the minor version number. </p> </li> |
98 than one drive. There can be more than one version of an EXE and more |
98 </ul> <p>The build tools do not encode the version numbers in the filename |
99 than one version of a DLL. The loader uses search rules to select |
99 of the executable file. </p> <p><b>Loader |
100 the EXE and DLL to load. </p> <p>See <xref href="GUID-D8837969-74D0-5E17-AD42-3F10DD1FD5BF.dita">Loader search rules</xref> </p> <p><b>Emulator</b> </p> <p>Version numbers are stored in import files |
100 search rules</b> </p> <p>EXEs and DLLs can exist on more than one drive. There |
101 for DLLs that run on devices and the emulator. Version numbers change |
101 can be more than one version of an EXE and more than one version of a DLL. |
102 how the loader functions on devices, but not in the emulator. You |
102 The loader uses search rules to select the EXE and DLL to load. </p> <p>See <xref href="GUID-D8837969-74D0-5E17-AD42-3F10DD1FD5BF.dita">Loader search rules</xref> </p> <p><b>Emulator</b> </p> <p>Version numbers are stored in import files for DLLs |
103 cannot encode the version numbers in the import library file name |
103 that run on devices and the emulator. Version numbers change how the loader |
104 on the emulator. </p> <p><b>Tools support</b> </p> <p>Use the build tools to apply version |
104 functions on devices, but not in the emulator. You cannot encode the version |
105 numbers to EXEs and DLLs. You specify version numbers in the <filepath>.mmp</filepath> file that describes the EXE or DLL. </p> <p>See also <uicontrol>MMP file syntax</uicontrol> in <uicontrol>Symbian Tools Guide > Building |
105 numbers in the import library file name on the emulator. </p> <p><b>Tools support</b> </p> <p>Use the build tools to apply version numbers |
106 > Symbian Build System (SBSv1) > Build tools reference</uicontrol>.</p> </section> |
106 to EXEs and DLLs. You specify version numbers in the <filepath>.mmp</filepath> file |
|
107 that describes the EXE or DLL. </p> <p>See also <xref href="GUID-BBBB5000-90A2-503A-9521-2FC6DEC69DC8.dita">mmp |
|
108 file syntax</xref> and <xref href="GUID-B21141D4-3BFE-59C9-8D5F-147A93BE1C95.dita">Build |
|
109 tools guide</xref>. </p> </section> |
|
110 <section id="GUID-64154337-D706-5DE1-9319-4FEA6181EFC4"><title>Architectural |
107 <section id="GUID-64154337-D706-5DE1-9319-4FEA6181EFC4"><title>Architectural |
111 relationships</title> <p>The loader is a server that runs in a separate thread |
108 relationships</title> <p>The loader is a server that runs in a separate |
112 in the file server process. The loader is built as part of the file server. </p> <p>The |
109 thread in the file server process. The loader is built as part of |
113 loader server starts when the file server starts. The file server starts after |
110 the file server. </p> <p>The loader server starts when the file server |
114 the kernel is loaded at system start. </p> <p>The loader runs on the user |
111 starts. The file server starts after the kernel is loaded at system |
115 side, but calls the kernel for services that are not available to general |
112 start. </p> <p>The loader runs on the user side, but calls the kernel |
116 applications. Examples of services are process creation and code segment creation. |
113 for services that are not available to general applications. Examples |
117 A code segment is an object that represents a piece of code loaded into RAM. |
114 of services are process creation and code segment creation. A code |
118 A code segment also represents a piece of code that runs directly from ROM. |
115 segment is an object that represents a piece of code loaded into RAM. |
119 The kernel services that the loader uses are protected. The file server process |
116 A code segment also represents a piece of code that runs directly |
120 only is allowed to access these services. </p> <p>The following picture is |
117 from ROM. The kernel services that the loader uses are protected. |
121 an example of program flow. In this example, a client calls <xref href="GUID-25327159-83D6-3507-B187-09EA4BB3727F.dita#GUID-25327159-83D6-3507-B187-09EA4BB3727F/GUID-4F1B2717-D34F-32A4-B6E6-03D0533186A3"><apiname>RLibrary::Load()</apiname></xref>, |
118 The file server process only is allowed to access these services. </p> <p>The following picture is an example of program flow. In this |
122 which exists in <filepath>euser.dll</filepath>. Internal functions make client-server |
119 example, a client calls <xref href="GUID-25327159-83D6-3507-B187-09EA4BB3727F.dita#GUID-25327159-83D6-3507-B187-09EA4BB3727F/GUID-4F1B2717-D34F-32A4-B6E6-03D0533186A3"><apiname>RLibrary::Load()</apiname></xref>, which |
123 calls to the loader server. The loader server code exists in <filepath>efile.exe</filepath>. |
120 exists in <filepath>euser.dll</filepath>. Internal functions make |
124 The loader server uses kernel services. </p> <fig id="GUID-5FCAE81A-19BC-5BE7-89D2-096A87735381"> |
121 client-server calls to the loader server. The loader server code exists |
125 <image href="GUID-2735BDAF-295F-5F1E-8925-8F4212D95CD1_d0e264145_href.png" placement="inline"/> |
122 in <filepath>efile.exe</filepath>. The loader server uses kernel services. </p> <fig id="GUID-5FCAE81A-19BC-5BE7-89D2-096A87735381"> |
|
123 <image href="GUID-2735BDAF-295F-5F1E-8925-8F4212D95CD1_d0e269008_href.png" placement="inline"/> |
126 </fig> </section> |
124 </fig> </section> |
127 </conbody></concept> |
125 </conbody></concept> |