{\rtf1\adeflang1025\ansi\ansicpg1252\uc1\adeff0\deff0\stshfdbch0\stshfloch0\stshfhich0\stshfbi0\deflang1033\deflangfe1042{\fonttbl{\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f1\fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Arial;} {\f2\fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;}{\f3\froman\fcharset2\fprq2{\*\panose 05050102010706020507}Symbol;}{\f52\froman\fcharset238\fprq2 Times New Roman CE;}{\f53\froman\fcharset204\fprq2 Times New Roman Cyr;} {\f55\froman\fcharset161\fprq2 Times New Roman Greek;}{\f56\froman\fcharset162\fprq2 Times New Roman Tur;}{\f57\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f58\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);} {\f59\froman\fcharset186\fprq2 Times New Roman Baltic;}{\f60\froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f62\fswiss\fcharset238\fprq2 Arial CE;}{\f63\fswiss\fcharset204\fprq2 Arial Cyr;}{\f65\fswiss\fcharset161\fprq2 Arial Greek;} {\f66\fswiss\fcharset162\fprq2 Arial Tur;}{\f67\fbidi \fswiss\fcharset177\fprq2 Arial (Hebrew);}{\f68\fbidi \fswiss\fcharset178\fprq2 Arial (Arabic);}{\f69\fswiss\fcharset186\fprq2 Arial Baltic;}{\f70\fswiss\fcharset163\fprq2 Arial (Vietnamese);} {\f72\fmodern\fcharset238\fprq1 Courier New CE;}{\f73\fmodern\fcharset204\fprq1 Courier New Cyr;}{\f75\fmodern\fcharset161\fprq1 Courier New Greek;}{\f76\fmodern\fcharset162\fprq1 Courier New Tur;} {\f77\fbidi \fmodern\fcharset177\fprq1 Courier New (Hebrew);}{\f78\fbidi \fmodern\fcharset178\fprq1 Courier New (Arabic);}{\f79\fmodern\fcharset186\fprq1 Courier New Baltic;}{\f80\fmodern\fcharset163\fprq1 Courier New (Vietnamese);}} {\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0; \red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}{\stylesheet{\ql \li0\ri0\widctlpar\wrapdefault\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs20\alang1025 \ltrch\fcs0 \fs20\lang1033\langfe1042\cgrid\langnp1033\langfenp1042 \snext0 Normal;}{\s1\qr \li0\ri0\sb240\sa240\widctlpar\noline\wrapdefault\faauto\outlinelevel0\adjustright\rin0\lin0\itap0 \shading1250 \rtlch\fcs1 \ab\af1\afs96\alang1025 \ltrch\fcs0 \b\f1\fs96\lang1033\langfe1042\cgrid\langnp1033\langfenp1042 \sbasedon16 \snext0 heading 1;}{\s2\ql \li0\ri0\sb120\sa120\keepn\widctlpar\noline\wrapdefault\faauto\outlinelevel1\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\ai\af0\afs40\alang1025 \ltrch\fcs0 \b\i\fs40\lang1033\langfe1042\cgrid\langnp1033\langfenp1042 \sbasedon16 \snext0 heading 2;}{\s3\ql \li0\ri0\sb120\sa120\keepn\widctlpar\noline\wrapdefault\faauto\outlinelevel2\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\ul\lang1033\langfe1042\cgrid\langnp1033\langfenp1042 \sbasedon16 \snext0 heading 3;}{\s4\ql \li0\ri0\keepn\widctlpar\wrapdefault\faauto\outlinelevel3\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\ai\af0\afs20\alang1025 \ltrch\fcs0 \b\i\fs20\lang2057\langfe1042\cgrid\langnp2057\langfenp1042 \sbasedon0 \snext0 heading 4;}{\s5\ql \li0\ri0\keepn\widctlpar\wrapdefault\faauto\outlinelevel4\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af0\afs20\alang1025 \ltrch\fcs0 \b\fs20\ul\lang2057\langfe1042\cgrid\langnp2057\langfenp1042 \sbasedon0 \snext0 heading 5;}{\s6\qc \li0\ri0\keepn\widctlpar\wrapdefault\faauto\outlinelevel5\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af0\afs20\alang1025 \ltrch\fcs0 \b\fs20\ul\lang2057\langfe1042\cgrid\langnp2057\langfenp1042 \sbasedon0 \snext0 heading 6;}{\*\cs10 \additive Default Paragraph Font;}{\* \ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblind0\tblindtype3\tscellwidthfts0\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv \ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs20 \ltrch\fcs0 \fs20\lang1024\langfe1024\cgrid\langnp1024\langfenp1024 \snext11 \ssemihidden Normal Table;}{\s15\ql \li720\ri0\widctlpar \tx720\wrapdefault\faauto\adjustright\rin0\lin720\itap0 \rtlch\fcs1 \af2\afs20\alang1025 \ltrch\fcs0 \f2\fs20\lang2057\langfe1042\cgrid\langnp2057\langfenp1042 \snext15 macro;}{ \s16\ql \li0\ri0\sa120\widctlpar\noline\wrapdefault\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe1042\cgrid\langnp1033\langfenp1042 \snext16 main text;}{\s17\ql \li0\ri0\sa120\widctlpar\noline\brdrt \brdrs\brdrw15\brsp20 \brdrl\brdrs\brdrw15\brsp80 \brdrb\brdrs\brdrw15\brsp20 \brdrr\brdrs\brdrw15\brsp80 \wrapdefault\faauto\adjustright\rin0\lin0\rtlgutter\itap0 \rtlch\fcs1 \ai\af0\afs24\alang1025 \ltrch\fcs0 \i\fs24\lang1033\langfe1042\cgrid\langnp1033\langfenp1042 \sbasedon16 \snext17 Special Thought;}{\s18\ql \li475\ri0\widctlpar\tx720\wrapdefault\faauto\adjustright\rin0\lin475\itap0 \rtlch\fcs1 \af2\afs20\alang1025 \ltrch\fcs0 \f2\fs20\lang2057\langfe1042\cgrid\langnp2057\langfenp1042 \sbasedon15 \snext18 SQL text;}{\s19\qr \li0\ri0\sb240\sa240\sl480\slmult1\widctlpar\noline\wrapdefault\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af0\afs48\alang1025 \ltrch\fcs0 \b\fs48\lang1033\langfe1042\cgrid\langnp1033\langfenp1042 \sbasedon0 \snext19 Highlights;}{\s20\qr \li0\ri0\sb240\sa240\sl480\slmult1\widctlpar\noline\wrapdefault\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af0\afs48\alang1025 \ltrch\fcs0 \b\fs48\lang1033\langfe1042\cgrid\langnp1033\langfenp1042 \sbasedon16 \snext20 Chapter Heading;}{\s21\ql \fi-360\li720\ri0\sa120\widctlpar\noline\tx720\wrapdefault{\*\pn \pnlvlblt\ilvl10\ls2047\pnrnot0\pnf3\pnstart1\pnindent360\pnhang {\pntxtb \'b7}} \faauto\ls2047\ilvl10\adjustright\rin0\lin720\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe1042\cgrid\langnp1033\langfenp1042 \sbasedon16 \snext21 bullet point;}{\*\cs22 \additive \rtlch\fcs1 \af0 \ltrch\fcs0 \ul\cf2 \sbasedon10 Hyperlink;}{\s23\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af0\afs20\alang1025 \ltrch\fcs0 \b\fs20\lang1033\langfe1042\cgrid\langnp1033\langfenp1042 \sbasedon0 \snext0 caption;}} {\*\latentstyles\lsdstimax156\lsdlockeddef0}{\*\listtable{\list\listtemplateid-1724190668\listsimple{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;} \rtlch\fcs1 \af0 \ltrch\fcs0 \fi-360\li1492\jclisttab\tx1492\lin1492 }{\listname ;}\listid-132}{\list\listtemplateid-1033722564\listsimple{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext \'02\'00.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-360\li1209\jclisttab\tx1209\lin1209 }{\listname ;}\listid-131}{\list\listtemplateid-1219572562\listsimple{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1 \levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-360\li926\jclisttab\tx926\lin926 }{\listname ;}\listid-130}{\list\listtemplateid-1223416130\listsimple{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0 \levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-360\li643\jclisttab\tx643\lin643 }{\listname ;}\listid-129}{\list\listtemplateid-908058894\listsimple{\listlevel\levelnfc23 \levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li1492\jclisttab\tx1492\lin1492 }{\listname ;}\listid-128}{\list\listtemplateid-1543723960\listsimple {\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li1209\jclisttab\tx1209\lin1209 }{\listname ;}\listid-127}{\list\listtemplateid-72722490 \listsimple{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li926\jclisttab\tx926\lin926 }{\listname ;}\listid-126} {\list\listtemplateid1289943408\listsimple{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li643\jclisttab\tx643\lin643 }{\listname ;}\listid-125}{\list\listtemplateid-2038256328\listsimple{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-360\li360 \jclisttab\tx360\lin360 }{\listname ;}\listid-120}{\list\listtemplateid2145401830\listsimple{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360\lin360 }{\listname ;}\listid-119}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;} \f3\fbias0 \fi-360\li360\jclisttab\tx360\lin360 }{\listname ;}\listid700473376}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext \'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360\lin360 }{\listname ;}\listid1873613059}}{\*\listoverridetable{\listoverride\listid-119\listoverridecount0\ls1}{\listoverride\listid-125\listoverridecount0\ls2} {\listoverride\listid-126\listoverridecount0\ls3}{\listoverride\listid-127\listoverridecount0\ls4}{\listoverride\listid-128\listoverridecount0\ls5}{\listoverride\listid-120\listoverridecount0\ls6}{\listoverride\listid-129\listoverridecount0\ls7} {\listoverride\listid-130\listoverridecount0\ls8}{\listoverride\listid-131\listoverridecount0\ls9}{\listoverride\listid-132\listoverridecount0\ls10}{\listoverride\listid700473376\listoverridecount0\ls11}{\listoverride\listid1873613059 \listoverridecount0\ls12}}{\*\rsidtbl \rsid7552160\rsid9923908}{\*\generator Microsoft Word 11.0.8106;}{\info{\title Concepts}{\author Pre-Installed User}{\operator Jonathan Lewis}{\creatim\yr2001\mo10\dy13}{\revtim\yr2007\mo10\dy1\hr12\min57} {\version489}{\edmins2680}{\nofpages5}{\nofwords2270}{\nofchars12942}{\*\company Gateway}{\nofcharsws15182}{\vern24611}{\*\password 00000000}}{\*\xmlnstbl {\xmlns1 http://schemas.microsoft.com/office/word/2003/wordml}} \paperw12240\paperh15840\margl1800\margr1800\margt1440\margb1440\gutter0\ltrsect \widowctrl\ftnbj\aenddoc\donotembedsysfont0\donotembedlingdata1\grfdocevents0\validatexml0\showplaceholdtext0\ignoremixedcontent0\saveinvalidxml0\showxmlerrors0\hyphcaps0\formshade\horzdoc\dghspace120\dgvspace120\dghorigin1701\dgvorigin1984\dghshow0 \dgvshow3\jcompress\viewkind1\viewscale100\pgbrdrhead\pgbrdrfoot\rsidroot9923908 \fet0{\*\wgrffmtfilter 013f}\ilfomacatclnup0\ltrpar \sectd \ltrsect\linex0\headery709\footery709\colsx709\endnhere\pgbrdropt32\sectdefaultcl\sftnbj {\*\pnseclvl1 \pnucrm\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang {\pntxta )}}{\*\pnseclvl5 \pndec\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}\pard\plain \ltrpar\s2\ql \li0\ri0\sb120\sa120\keepn\widctlpar\noline\wrapdefault\faauto\outlinelevel1\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\ai\af0\afs40\alang1025 \ltrch\fcs0 \b\i\fs40\lang1033\langfe1042\cgrid\langnp1033\langfenp1042 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 Deploying a TPM ? Beware the distributed transaction trap.}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 (Ca. 2001)}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 \par }\pard\plain \ltrpar\s3\ql \li0\ri0\sb120\sa120\keepn\widctlpar\noline\wrapdefault\faauto\outlinelevel2\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\ul\lang1033\langfe1042\cgrid\langnp1033\langfenp1042 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 Introduction \par }\pard\plain \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs20\alang1025 \ltrch\fcs0 \fs20\lang1033\langfe1042\cgrid\langnp1033\langfenp1042 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 The use of }{\rtlch\fcs1 \ab\ai\af0 \ltrch\fcs0 \b\i\lang2057\langfe1042\langnp2057\insrsid7552160 transaction processing monitors}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 (TPM) such as Encina or Tuxedo to control Oracle systems seems to be an increasingly popular option in large developments. A TPM effectively puts a layer of control between the end-user and the application code that you would normally write to access the database, leaving you with a single \lquote logical database service\rquote , rather than a collection of separate programs (and possibly separate databases) that make up your overall application. \par \par There are several arguments in favour of using a TPM: \par \par {\pntext\pard\plain\ltrpar \rtlch\fcs1 \af3\afs20 \ltrch\fcs0 \f3\fs20\lang2057\langfe1042\langnp2057 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li360\ri0\widctlpar\jclisttab\tx360\wrapdefault{\*\pn \pnlvlblt\ilvl0\ls12\pnrnot0 \pnf3\pnstart1\pnindent360\pnsp120\pnhang {\pntxtb \'b7}}\faauto\ls12\adjustright\rin0\lin360\itap0 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 It is possibl e to include Oracle and non-Oracle (legacy) systems in a secure transaction-based system using a }{\rtlch\fcs1 \ab\ai\af0 \ltrch\fcs0 \b\i\lang2057\langfe1042\langnp2057\insrsid7552160 two-phase commit}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 (2PC) controlled by the TPM \par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault{\*\pn \pnlvlcont\ilvl0\ls0\pnrnot0\pndec }\faauto\adjustright\rin0\lin0\itap0 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 \par {\pntext\pard\plain\ltrpar \rtlch\fcs1 \af3\afs20 \ltrch\fcs0 \f3\fs20\lang2057\langfe1042\langnp2057 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li360\ri0\widctlpar\jclisttab\tx360\wrapdefault{\*\pn \pnlvlblt\ilvl0\ls12\pnrnot0 \pnf3\pnstart1\pnindent360\pnsp120\pnhang {\pntxtb \'b7}}\faauto\ls12\adjustright\rin0\lin360\itap0 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 It is possible to modularise functionality - if you break down your application into a number of services then the number of different programs that exist to act as }{\rtlch\fcs1 \ab\ai\af0 \ltrch\fcs0 \b\i\lang2057\langfe1042\langnp2057\insrsid7552160 application servers}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 can be transparent to the application - the TPM can hand the work out to the appropriate server. \par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault{\*\pn \pnlvlcont\ilvl0\ls0\pnrnot0\pndec }\faauto\adjustright\rin0\lin0\itap0 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 \par {\pntext\pard\plain\ltrpar \rtlch\fcs1 \af3\afs20 \ltrch\fcs0 \f3\fs20\lang2057\langfe1042\langnp2057 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li360\ri0\widctlpar\jclisttab\tx360\wrapdefault{\*\pn \pnlvlblt\ilvl0\ls12\pnrnot0 \pnf3\pnstart1\pnindent360\pnsp120\pnhang {\pntxtb \'b7}}\faauto\ls12\adjustright\rin0\lin360\itap0 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 It is possible to scale your application by having multiple copies of the server that handles the most frequently used procedure. The end-user program need not know which specific }{\rtlch\fcs1 \ab\ai\af0 \ltrch\fcs0 \b\i\lang2057\langfe1042\langnp2057\insrsid7552160 application server process}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 is working on its behalf, the TPM system can maintain a list of suitable server processes, and handle the load balancing. \par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault{\*\pn \pnlvlcont\ilvl0\ls0\pnrnot0\pndec }\faauto\adjustright\rin0\lin0\itap0 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 \par {\pntext\pard\plain\ltrpar \rtlch\fcs1 \af3\afs20 \ltrch\fcs0 \f3\fs20\lang2057\langfe1042\langnp2057 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li360\ri0\widctlpar\jclisttab\tx360\wrapdefault{\*\pn \pnlvlblt\ilvl0\ls12\pnrnot0 \pnf3\pnstart1\pnindent360\pnsp120\pnhang {\pntxtb \'b7}}\faauto\ls12\adjustright\rin0\lin360\itap0 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 It is possible, to some degree, to re-use existing programs that address a number of small, independent tasks, and modify them at relatively low cost to participate in larger TPM-controlled transactions \par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault{\*\pn \pnlvlcont\ilvl0\ls0\pnrnot0\pndec }\faauto\adjustright\rin0\lin0\itap0 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 \par {\pntext\pard\plain\ltrpar \rtlch\fcs1 \af3\afs20 \ltrch\fcs0 \f3\fs20\lang2057\langfe1042\langnp2057 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li360\ri0\widctlpar\jclisttab\tx360\wrapdefault{\*\pn \pnlvlblt\ilvl0\ls12\pnrnot0 \pnf3\pnstart1\pnindent360\pnsp120\pnhang {\pntxtb \'b7}}\faauto\ls12\adjustright\rin0\lin360\itap0 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 The TPM will probably have a number of built-in fe atures for monitoring critical performance metrics (such as transactions per second) that would otherwise have to be hand-coded into every application so that you could demonstrate conformance to service level agreements (SLAs). \par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\adjustright\rin0\lin0\itap0 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 \par }\pard\plain \ltrpar\s3\ql \li0\ri0\sb120\sa120\keepn\widctlpar\noline\wrapdefault\faauto\outlinelevel2\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\ul\lang1033\langfe1042\cgrid\langnp1033\langfenp1042 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 How the TPM works \par }\pard\plain \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs20\alang1025 \ltrch\fcs0 \fs20\lang1033\langfe1042\cgrid\langnp1033\langfenp1042 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 Figure 1 is a simple diagram of the components that might appear as the \lquote logical database service\rquote in such a system. The diagram shows two possible data resources (one of them an Oracle database) several different functional processes (the Application Services), and three copies of a }{\rtlch\fcs1 \ab\ai\af0 \ltrch\fcs0 \b\i\lang2057\langfe1042\langnp2057\insrsid7552160 Transaction Manager}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 (TM) process. \par \par Consider a system for handling door-to-door flight-bookings. We might have three completely independent programs that can handle this task between them if they are given the correct inputs: \par }\pard \ltrpar\ql \fi720\li0\ri0\widctlpar\wrapdefault\faauto\adjustright\rin0\lin0\itap0 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 Application Service 1 (App Serv 1):\tab book airline tickets \par }\pard \ltrpar\ql \li720\ri0\widctlpar\wrapdefault\faauto\adjustright\rin0\lin720\itap0 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 Application Service 2 (App Serv 2):\tab book limousine \par Application Service 3 (App Serv 3):\tab update customer \lquote airmiles\rquote scheme \par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\adjustright\rin0\lin0\itap0 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 \par Our end-user program therefore interacts with the TPM to: start a transaction under th e control of a Transaction Manager (TM) process, run App Serv 1, run App Serv 2 twice, run App Serv 3, and then call the TM to commit the entire set of activities as a single transaction. \par \par The figure deliberately avoids showing how an }{\rtlch\fcs1 \ab\ai\af0 \ltrch\fcs0 \b\i\lang2057\langfe1042\langnp2057\insrsid7552160 end-user}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 process inte racts with the system. There are many variations in the way that this interaction might be implemented. End-user processes may, for example, connect directly to a Transaction Manager (TM) process that then calls Application Services according to the clien t\rquote s requests. Another possibility is that an end-user process may connect through a }{\rtlch\fcs1 \ab\ai\af0 \ltrch\fcs0 \b\i\lang2057\langfe1042\langnp2057\insrsid7552160 dispatcher}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 process that identifies which Application Services to forward them to \endash in which case the Application Service will have to contact a Transaction Manager before ac cessing the data resources. There may, or may not, be a process which is identifiable as 'the' TPM process. Different processes may pass messages through shared-memory queues, they may pass messages through disk- based queues. \par \par }\pard \ltrpar\ql \li0\ri0\keepn\widctlpar\wrapdefault\faauto\adjustright\rin0\lin0\itap0 {\pard\plain \ltrpar\ql \li0\ri0\keepn\widctlpar\wrapdefault\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs20\alang1025 \ltrch\fcs0 \fs20\lang2057\langfe1042\cgrid\langnp2057\langfenp1042 {\object\objemb\objw8731\objh4590{\*\objclass Word.Picture.8}{\*\objdata 01050000020000000f000000576f72642e506963747572652e38000000000000000000007c0000 d0cf11e0a1b11ae1000000000000000000000000000000003e000300feff0900060000000000000000000000010000000100000000000000001000000200000001000000feffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffdffffff13000000fefffffffeffffff05000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000feffffff2c00000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e00 00001f00000020000000210000002200000023000000feffffff25000000260000002700000028000000290000002a0000002b000000fefffffffeffffff2e0000002f0000003000000031000000320000003300000034000000feffffff360000003700000038000000390000003a0000003b0000003c000000feffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffff040000000709020000000000c00000000000004600000000000000000000000050a9 02502204c80103000000000100000000000001004f006c00650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000201ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000 000000000000000000000000140000000000000031005400610062006c006500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e0002010100000003000000ffffffff0000000000000000000000000000000000000000000000000000 0000000000000000000004000000121d000000000000010043006f006d0070004f0062006a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012000201ffffffffffffffffffffffff000000000000000000000000000000000000000000000000 000000000000000000000000010000006800000000000000feffffff02000000fefffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0100000200000000000000000000000000000000b07c5302000000000000000000000000000000000000000000000000000000000000000000000000000000000100feff030a0000ffffffff0709020000000000c0000000000000461700 00004d6963726f736f667420576f72642050696374757265000a0000004d53576f7264446f63000f000000576f72642e506963747572652e3800f439b27100000000000000000000000000000000000000000000000000000000000000000000000000000300040000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000120016000a0001005b000f00020000000000000024000040f1ff02002400000006004e006f0072006d0061006c0000000200000004006d4809044800010001010200480000000900480065006100640069006e006700 2000310000001400010003240213a4f00014a4f0002d4400944026000f00350881434a60004f4a0200514a0200003a000200010102003a0000000900480065006100640069006e0067002000320000000c00020006240113a478004026010a00350881360881434a28003400030001010200340000000900480065006100 640069006e0067002000330000000c00030006240113a4780040260203003e2a01000000000000000000000000003c004140f2ffa1003c0000001600440065006600610075006c0074002000500061007200610067007200610070006800200046006f006e00740000000000000000000000000040002d00f1fff2004000 00000a004d006100630072006f002000540065007800740000000e000f000f84d0020dc6050001d002000c004f4a0300514a03006d4809083600fe0ff1ff02013600000009006d00610069006e00200074006500780074000000090010000c240114a47800000800434a18006d4809044e00fe0f010112014e0000000f00 5300700065006300690061006c002000540068006f00750067006800740000001a0011002464060100012564060100042664060100012764060100040300360881002c00fe0ff10022012c0000000800530051004c002000740065007800740000000a0012000f84db0114a4000000004400fe0f01003201440000000a00 48006900670068006c00690067006800740073000000160013000324020c24011264e001010013a4f00014a4f0000700350881434a3000004c00fe0f010142014c0000000f0043006800610070007400650072002000480065006100640069006e0067000000130014000324021264e001010013a4f00014a4f000000700 350881434a3000009a00fe0f010152019a0000000c00620075006c006c0065007400200070006f0069006e0074000000700015000a260a0b46ff070f84d002118498fe3ec654ff01000800000300000001006801000000000000b7f000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000dc6050001d002000000000000000c0000001800000024000000300000003c00000048000000540000005e00000069000000740000007f0000008a000000af00000001000000000000000000ffffffff110400000000000001000000000000000000 ffffffff100400000000000001000000000000000000ffffffff0f0400000000000001000000000000000000ffffffff0e0400000000000001000000000000000000ffffffff0d0400000000000001000000000000000000ffffffff0b0400000000000001000000000000000000ffffffff0c0400000000000001000000 000000000000ffffffff1a0400000000000001000000000000000000ffffffff210400000000000001000000000000000000ffffffff220400000000000001000000000000000000ffffffff240400000000000001000000000000000000ffffffff2504000000000000ffffffff00000000000000000000000000000000 0000000000000c0000001800000024000000300000003c00000048000000540000005e00000069000000740000007f0000008a0000008d0000000000000000000100000000000200000000000300000000000400000000000500000000000600000000000700000000000800000000000900000000000a00000000000b00 00000000ffff0000000000000000af0000000700000c00000000ffffffff010000000420ffff01000000000000000000af00000000000000000000040000af0400000300000000040000af0400000400000000040000ae040000050000000f0000f040030000000006f01800000002080000020000003300000001000000 010000003700000003080bf000030000810030650100820098b20000830030650100840098b20000850000000000870000000000880000000000890000000000bf0000000f000c01f40000100d01000000200e01000000208001000000008101ffffff008201000001008301ffffff008401000001008501000000208641 0000000087c1000000008801000000008901000000008a01000000008b01000000008c01000000008d01000000008e01000000008f010000000090010000000091010000000092010000000093010000000094010000000095010000000096010000000097c1000000009801000000009901000000009a01000000009b01 000000009c0103000040bf011c001e00c00100000000c10100000100c201ffffff00c30100000020c40100000000c54100000000c6c100000000c70100000000c80100000000c90100000000ca0100000000cb0135250000cc0100000800cd0100000000ce0100000000cfc100000000d70102000000ff010e000e000002 000000000102808080000202cbcbcb000302000000200402000001000502386300000602386300000702000000000802000000000902000001000a02000000000b02000000000c02000001000d02000000000e02000000000f02000100001002000000001102000000003f02000003008002000000008102000001008202 0500000083029c3100008402000000008502f0f906008602000000008702f7000010880200000020bf0201000f00c00200000000c10200000000c20264000000c30200000000c40200000000c50200000000c60200000000c70200000000c80200000000c90200000000ca0230750000cb02d0121300cc0230edecffcd02 40548900ce0200800000cf020080ffffd002000079ffd10232000000d202204e0000d30250c30000d40200000000d50210270000d60270940000d702b03cffffd80200000000d90210270000da0270940000ff0216001f000403010000004103a829010042030000000043030300000044037cbe01004503000000007f03 00000f0084037cbe010085030000000086037cbe010087030000000040001ef110000000ffff00000000ff0080808000f7000010000f0002f0da0b0000100008f0080000002300000036040000200018f10800000001000000020000000f0003f0600b00000f0004f028000000010009f010000000000000000000000000 0000000000000002000af00800000000040000050000000f0004f04e00000042010af00800000016040000000a000053000bf01e0000004401040000007f0100000100bf0100001000ff0110001000880302000000000010f00400000004000000000011f004000000230000000f0004f03600000032000af00800000017 040000000a000013000bf006000000880302000000000010f00400000003000000000011f004000000110000000f0004f04e00000042010af00800000018040000000a000053000bf01e0000004401040000007f0100000100bf0100001000ff0110001000880302000000000010f00400000002000000000011f0040000 00230000000f0004f03600000032000af00800000019040000000a000013000bf006000000880302000000000010f00400000001000000000011f004000000190000000f0004f054000000a20c0af0080000001a040000000a000043000bf0180000008000000008008a001a040000ff0100000800880302000000000010 f00400000000000000000011f0040000000f00000000000df004000000000008000f0004f04800000032000af0080000000b040000000a000023000bf00c0000008000000006008a000b040000000010f00400000021000000000011f0040000001000000000000df004000000000006000f0004f04800000032000af008 0000000c040000000a000023000bf00c0000008000000007008a000c040000000010f00400000020000000000011f0040000001100000000000df004000000000007000f0004f04800000032000af0080000000d040000000a000023000bf00c0000008000000005008a000d040000000010f0040000001f000000000011 f0040000002a00000000000df004000000000005000f0004f04800000032000af0080000000e040000000a000023000bf00c0000008000000004008a000e040000000010f0040000001e000000000011f0040000001000000000000df004000000000004000f0004f04800000032000af0080000000f040000000a000023 000bf00c0000008000000003008a000f040000000010f0040000001d000000000011f0040000001400000000000df004000000000003000f0004f04800000032000af00800000010040000000a000023000bf00c0000008000000002008a0010040000000010f0040000001c000000000011f0040000001300000000000d f004000000000002000f0004f04800000032000af00800000011040000000a000023000bf00c0000008000000001008a0011040000000010f0040000001b000000000011f0040000002100000000000df004000000000001000f0004f04e00000042010af0080000001d040000000a000053000bf01e0000004401040000 007f0100000100bf0100001000ff0110001000880301000000000010f00400000010000000000011f004000000270000000f0004f03600000032000af0080000001e040000000a000013000bf006000000880301000000000010f0040000000f000000000011f0040000002a0000000f0004f04e00000042010af0080000 001f040000000a000053000bf01e0000004401040000007f0100000100bf0100001000ff0110001000880301000000000010f0040000000e000000000011f004000000290000000f0004f03600000032000af00800000020040000000a000013000bf006000000880301000000000010f0040000000d000000000011f004 0000002c0000000f0004f054000000a20c0af00800000021040000000a000043000bf0180000008000000009008a0021040000ff0100000800880301000000000010f00400000005000000000011f0040000002e00000000000df004000000000009000f0004f04800000032000af00800000022040000000a000023000b f00c000000800000000a008a0022040000000010f00400000013000000000011f0040000005200000000000df00400000000000a000f0004f04800000032000af00800000024040000000a000023000bf00c000000800000000b008a0024040000000010f00400000012000000000011f0040000003000000000000df004 00000000000b000f0004f04800000032000af00800000025040000000a000023000bf00c000000800000000c008a0025040000000010f00400000011000000000011f0040000003a00000000000df00400000000000c000f0004f05400000042010af00800000026040000800a000063000bf0240000004401040000007f 0100000100bf0100001000d00102000000d10102000000ff0110001000000010f00400000019000000000011f004000000140000000f0004f05400000042010af00800000027040000800a000063000bf0240000004401040000007f0100000100bf0100001000d00102000000d10102000000ff0110001000000010f004 0000001a000000000011f004000000120000000f0004f05400000042010af00800000028040000000a000063000bf0240000004401040000007f0100000100bf0100001000d00102000000d10102000000ff0110001000000010f00400000018000000000011f004000000120000000f0004f05400000042010af0080000 0029040000000a000063000bf0240000004401040000007f0100000100bf0100001000d00102000000d10102000000ff0110001000000010f00400000017000000000011f004000000110000000f0004f05400000042010af0080000002a040000000a000063000bf0240000004401040000007f0100000100bf01000010 00d00102000000d10102000000ff0110001000000010f00400000014000000000011f004000000120000000f0004f05400000042010af0080000002b040000000a000063000bf0240000004401040000007f0100000100bf0100001000d00102000000d10102000000ff0110001000000010f00400000015000000000011 f0040000001a0000000f0004f05400000042010af0080000002c040000000a000063000bf0240000004401040000007f0100000100bf0100001000d00102000000d10102000000ff0110001000000010f00400000016000000000011f0040000001c0000000f0004f05400000042010af0080000002d040000000a000063 000bf0240000004401040000007f0100000100bf0100001000d00102000000d10102000000ff0110001000000010f0040000000c000000000011f004000000150000000f0004f05400000042010af0080000002e040000000a000063000bf0240000004401040000007f0100000100bf0100001000d00102000000d10102 000000ff0110001000000010f0040000000b000000000011f0040000001a0000000f0004f05400000042010af0080000002f040000000a000063000bf0240000004401040000007f0100000100bf0100001000d00102000000d10102000000ff0110001000000010f0040000000a000000000011f004000000290000000f 0004f05400000042010af00800000030040000000a000063000bf0240000004401040000007f0100000100bf0100001000d00102000000d10102000000ff0110001000000010f00400000009000000000011f004000000230000000f0004f05400000042010af00800000031040000000a000063000bf024000000440104 0000007f0100000100bf0100001000d00102000000d10102000000ff0110001000000010f00400000008000000000011f0040000002a0000000f0004f05400000042010af00800000032040000000a000063000bf0240000004401040000007f0100000100bf0100001000d00102000000d10102000000ff011000100000 0010f00400000007000000000011f0040000002c0000000f0004f05400000042010af00800000033040000000a000063000bf0240000004401040000007f0100000100bf0100001000d00102000000d10102000000ff0110001000000010f00400000006000000000011f0040000002e0000000f0004f04200000012000a f00800000001040000000e000053000bf01e000000bf0100001000cb0100000000ff01000008000403090000003f0301000100000011f004000000010000000f0005f000000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000 000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f0000002000000021000000af0000001a040000a61a000064020000261f00001404000074000000000019040000161a0000a4040000b61f00 00c405000074000000000018040000b61f000044010000b61f00003405000074000000000017040000161a0000b4000000b61f0000d401000074000000000016040000161a000044010000161a00003405000074000000000021040000a61a0000640b0000261f0000140d00007400010000003304000006150000e40f00 00f6180000e40f00007400000000003204000096150000340e0000f6180000340e00007400000000003104000026160000840c0000f6180000840c000074000000000030040000b6160000d40a0000f6180000d40a00007400000000002f0400004617000094080000f6180000940800007400000000002e040000b61600 00a4040000f6180000a40400007400000000002d04000046170000f4020000f6180000f402000074000000000020040000161a0000e40f0000b61f0000041100007400000000001f040000b61f000004080000b61f0000741000007400000000001e040000161a000074070000b61f0000940800007400000000001d0400 00161a000004080000161a00007410000074000000000025040000560100000408000016080000d40a000074000100000024040000e601000054060000a6080000240900007400010000002204000076020000a404000036090000740700007400010000002a040000560a000094080000460e0000f40b00007400000000 002b040000560a000024090000b60d0000a40d00007400000000002c040000560a0000b4090000260d0000540f000074000000000029040000560a000004080000d60e0000440a000074000000000028040000560a000074070000d60e00000408000074000000000026040000560a0000f4020000d60e00005406000074 000000000027040000560a0000a4040000d60e0000e406000074000000000011040000b60d0000340e0000761400000411000074000100000010040000460e0000840c000006150000540f00007400010000000f040000d60e0000d40a000096150000a40d00007400010000000e040000660f00002409000026160000f4 0b00007400010000000d040000f60f000074070000b6160000440a00007400010000000c040000660f0000f402000026160000c40500007400010000000b040000f60f000044010000b6160000140400007400010000000000000023000000270000002b00000033000000370000003f000000430000004b0000004f0000 00570000005b00000063000000670000006f000000730000007d0000007f000000880000008a0000008f000000930000009a0000009e000000a5000000a9000000b0000000070007001c0007001c0007001c0007001c0007001c0007001c0007001c0007001c0007001c0007001c0007001c0007001c0007000000000023 000000b000000007000700ff40038001000000000000000000fcb3fd010100010000000000000000000000000000000000021000000000000000af00000070000008004000000400000047169001000002020603050405020304870200000000000000000000000000009f00000000000000540069006d00650073002000 4e0065007700200052006f006d0061006e00000035169001020005050102010706020507000000000000001000000000000000000000008000000000530079006d0062006f006c000000332690010000020b0604020202020204870200000000000000000000000000009f0000000000000041007200690061006c000000 3f359001000002070309020205020404870200000000000000000000000000009f0000000000000043006f007500720069006500720020004e006500770000002200040071088c180000d00200006801000000004e2b5b26502b5b2600000000020000000000000000000000000001000100000004000310010000000000 000000000000010001000000010000000000000021030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a506c007b400b40080007e3000001100190064000000190000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000005401ffff1200000000000000000000000000000012005000720065002d0049006e007300740061006c006c00650064002000550073006500720012005000720065002d00 49006e007300740061006c006c0065006400200055007300650072000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000003004f0062006a0049006e0066006f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000120002010200000006000000ffffffff000000000000000000000000 0000000000000000000000000000000000000000000000000300000006000000000000004f0062006a0065006300740050006f006f006c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000101ffffffffffffffffffffffff00000000000000000000 0000000000000000000050a902502204c80150a902502204c80100000000000000000000000002004f006c0065005000720065007300300030003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000180002010500000008000000ffffffff0000000000000000 00000000000000000000000000000000000000000000000000000000140000006a1e00000000000057006f007200640044006f00630075006d0065006e007400000000000000000000000000000000000000000000000000000000000000000000000000000000001a000200ffffffffffffffffffffffff000000000000 000000000000000000000000000000000000000000000000000000000000240000000010000000000000ffffffff030000000400000001000000ffffffff0000000000000000273c0000a01f0000421e0000010009000003210f000008001c00000000001400000026060f001e00ffffffff040014000000576f72640e00 4d6963726f736f667420576f7264050000000b0200000000050000000c02bc031b071c000000fb021000070000000000bc02000000000000000253797374656d0000080000000c008a0100000a00060000000c008a0100000a00040000002d010000050000000201010000001c000000fb02d6ff00000000000090010000 00000440001254696d6573204e657720526f6d616e002a82ed77c067ef7765040a0f00000a00040000002d01010005000000090200000000050000000201010000001000000026060f001600ffffffff00006d05000041000000720500001801000008000000fa0200000300000000000000040000002d01020007000000 fc020100000000000000040000002d01030008000000250302006f0543006f05150108000000fa0200000000000000000000040000002d01040004000000f001020007000000fc020000ffffff000000040000002d0102000800000026060f000600ffffffff010007000000fc020000ffffff000000040000002d010500 08000000fa0200000300000000000002040000002d01060007000000180462009c0625006f05040000002d01020004000000f0010500040000002d01040004000000f00106001000000026060f001600ffffffff000099060000410000009e0600001801000008000000fa0200000300000000000000040000002d010500 040000002d01030008000000250302009b0643009b061501040000002d01040004000000f0010500040000002d0102000800000026060f000600ffffffff010007000000fc020000ffffff000000040000002d01050008000000fa0200000300000000000002040000002d01060007000000180434019c06f7006f050400 00002d01020004000000f0010500040000002d01040004000000f001060007000000fc020000ffffff000000040000002d01050008000000fa0205000100000000000000040000002d010600040000002d010500090000001d062100f0005a00f0007f008d05040000002d010500040000002d01020004000000f0010500 040000002d010400030000001e00070000001604ca0060068e00ab05050000000201010000000500000014028f00ab05050000002e010100000014000000320a8f00ab0506000400000000001b07bc034f74686572201e000b00160012000e000b00050000002e0100000000050000001402000000000500000014028f00 1506050000002e01010000000e000000320a8f00150602000400000000001b07bc0344421e001b00050000002e01000000000500000014020000000005000000020101000000040000002701ffff07000000fc020000ffffff000000040000002d01050008000000fa0200000300000000000002040000002d0107000700 00001804da00bc0443005303040000002d01020004000000f0010500040000002d01040004000000f0010700030000001e00070000001604b700710465009e0305000000020101000000040000002d0101000500000009020000000005000000140266009e03050000002e010100000011000000320a66009e0304000400 000000001b07bc03417070201e00150015000b00050000002e01000000000500000014022a87b8ca0500000014026600f103050000002e010100000014000000320a6600f10306000400000000001b07bc03536572762037170012000f0014000b001500050000002e010000000005000000140200000000050000000201 01000000040000002701ffff07000000fc020000ffffff000000040000002d01050008000000fa0200000300000000000002040000002d01070007000000180434019e049d003503040000002d01020004000000f0010500040000002d01040004000000f0010700030000001e0007000000160411015304bf0080030500 0000020101000000040000002d01010005000000090200000000050000001402c0008003050000002e010100000011000000320ac000800304000400000000001b07bc03417070201e00150015000b00050000002e01000000000500000014022a87b8ca050000001402c000d303050000002e010100000014000000320a c000d30306000400000000001b07bc03536572762036170012000f0014000b001500050000002e01000000000500000014020000000005000000020101000000040000002701ffff07000000fc020000ffffff000000040000002d01050008000000fa0200000300000000000002040000002d0107000700000018042402 bc048d015303040000002d01020004000000f0010500040000002d01040004000000f0010700030000001e0007000000160401027104af019e0305000000020101000000040000002d01010005000000090200000000050000001402b0019e03050000002e010100000011000000320ab0019e0304000400000000001b07 bc03417070201e00150015000b00050000002e01000000000500000014022a87b8ca050000001402b001f103050000002e010100000014000000320ab001f10306000400000000001b07bc03536572762035170012000f0014000b001500050000002e010000000005000000140200000000050000000201010000000400 00002701ffff07000000fc020000ffffff000000040000002d01050008000000fa0200000300000000000002040000002d0107000700000018047e029e04e7013503040000002d01020004000000f0010500040000002d01040004000000f0010700030000001e000700000016045b025304090280030500000002010100 0000040000002d010100050000000902000000000500000014020a028003050000002e010100000011000000320a0a02800304000400000000001b07bc03417070201e00150015000b00050000002e01000000000500000014022a87b8ca0500000014020a02d303050000002e010100000014000000320a0a02d3030600 0400000000001b07bc03536572762034170012000f0014000b001500050000002e01000000000500000014020000000005000000020101000000040000002701ffff07000000fc020000ffffff000000040000002d01050008000000fa0200000300000000000002040000002d010700070000001804d802800441021703 040000002d01020004000000f0010500040000002d01040004000000f0010700030000001e00070000001604b50235046302620305000000020101000000040000002d0101000500000009020000000005000000140264026203050000002e010100000011000000320a6402620304000400000000001b07bc0341707020 1e00150015000b00050000002e01000000000500000014022a87b8ca0500000014026402b503050000002e010100000014000000320a6402b50306000400000000001b07bc03536572762033170012000f0014000b001500050000002e01000000000500000014020000000005000000020101000000040000002701ffff 07000000fc020000ffffff000000040000002d01050008000000fa0200000300000000000002040000002d010700070000001804320362049b02f902040000002d01020004000000f0010500040000002d01040004000000f0010700030000001e000700000016040f031704bd0244030500000002010100000004000000 2d01010005000000090200000000050000001402be024403050000002e010100000011000000320abe02440304000400000000001b07bc03417070201e00150015000b00050000002e01000000000500000014022a87b8ca050000001402be029703050000002e010100000014000000320abe0297030600040000000000 1b07bc03536572762032170012000f0014000b001500050000002e01000000000500000014020000000005000000020101000000040000002701ffff07000000fc020000ffffff000000040000002d01050008000000fa0200000300000000000002040000002d0107000700000018048c034404f502db02040000002d01 020004000000f0010500040000002d01040004000000f0010700030000001e000700000016046903f9031703260305000000020101000000040000002d0101000500000009020000000005000000140218032603050000002e010100000011000000320a1803260304000400000000001b07bc03417070201e0015001500 0b00050000002e01000000000500000014022a87b8ca05000000140218037903050000002e010100000014000000320a1803790306000400000000001b07bc03536572762031170012000f0014000b001500050000002e01000000000500000014020000000005000000020101000000040000002701ffff100000002606 0f001600ffffffff00006d050000a9010000720500007003000008000000fa0200000300000000000000040000002d010500040000002d01030008000000250302006f05ab016f056d03040000002d01040004000000f0010500040000002d0102000800000026060f000600ffffffff010007000000fc020000ffffff00 0000040000002d01050008000000fa0200000300000000000002040000002d010700070000001804ca019c068d016f05040000002d01020004000000f0010500040000002d01040004000000f00107001000000026060f001600ffffffff000099060000a90100009e0600007003000008000000fa020000030000000000 0000040000002d010500040000002d01030008000000250302009b06ab019b066d03040000002d01040004000000f0010500040000002d0102000800000026060f000600ffffffff010007000000fc020000ffffff000000040000002d01050008000000fa0200000300000000000002040000002d010700070000001804 8c039c064f036f05040000002d01020004000000f0010500040000002d01040004000000f001070007000000fc020000ffffff000000040000002d010500040000002d010600040000002d010500090000001d062100f0005a00f0005f028d05040000002d010500040000002d01020004000000f0010500040000002d01 0400030000001e00070000001604aa0260066e02ab0505000000020101000000040000002d010100050000000902000000000500000014026f02ab05050000002e010100000016000000320a6f02ab0507000400000000001b07bc034f7261636c6520a41e000e00130012000c0012000b00050000002e01000000000500 000014022a87b8ca0500000014026f022506050000002e01010000000e000000320a6f02250602000400000000001b07bc0344421e001b00050000002e01000000000500000014020000000005000000020101000000040000002701ffff07000000fc020000ffffff000000040000002d01050008000000fa0200000300 000000000002040000002d0107000700000018048e01ec01f7008300040000002d01020004000000f0010500040000002d01040004000000f0010700030000001e000700000016046b01a1011901ce0005000000020101000000040000002d010100050000000902000000000500000014021a01ce00050000002e010100 000010000000320a1a01ce0003000400000000001b07bc03544d20001a0025000b00050000002e01000000000500000014022a87b8ca0500000014021a011801050000002e010100000014000000320a1a01180106000400000000001b07bc0370726f63203314000f00140012000b001500050000002e01000000000500 000014020000000005000000020101000000040000002701ffff07000000fc020000ffffff000000040000002d01050008000000fa0200000300000000000002040000002d010700070000001804e801ce0151016500040000002d01020004000000f0010500040000002d01040004000000f0010700030000001e000700 00001604c50183017301b00005000000020101000000040000002d010100050000000902000000000500000014027401b000050000002e010100000010000000320a7401b00003000400000000001b07bc03544d20001a0025000b00050000002e01000000000500000014022a87b8ca0500000014027401fa0005000000 2e010100000014000000320a7401fa0006000400000000001b07bc0370726f63203214000f00140012000b001500050000002e01000000000500000014020000000005000000020101000000040000002701ffff07000000fc020000ffffff000000040000002d01050008000000fa020000030000000000000204000000 2d0107000700000018044202b001ab014700040000002d01020004000000f0010500040000002d01040004000000f0010700030000001e000700000016041f026501cd01920005000000020101000000040000002d01010005000000090200000000050000001402ce019200050000002e010100000010000000320ace01 920003000400000000001b07bc03544d20001a0025000b00050000002e01000000000500000014022a87b8ca050000001402ce01dc00050000002e010100000014000000320ace01dc0006000400000000001b07bc0370726f63203114000f00140012000b001500050000002e0100000000050000001402000000000500 0000020101000000040000002701ffff1000000026060f001600ffffffff0000250200009b0000001a0300005401000008000000fa0200000300000000000000040000002d010500040000002d0103000800000025030200370246010703a800040000002d01060004000000f001050007000000fc020000000000000000 040000002d0105000c0000002403040037023001270251014a024b01390244010c000000240304000703be0017039d00f402a3000503aa00040000002d010400040000002d01020004000000f00105000800000026060f000600ffffffff01001000000026060f001600ffffffff000025020000f40000001a0300007201 000008000000fa0200000300000000000000040000002d010500040000002d01030008000000250302003902650105030101040000002d01060004000000f001050007000000fc020000000000000000040000002d0105000c000000240304003c02510127026f014b026f013b0265010c00000024030400020315011703 f700f302f70003030101040000002d010400040000002d01020004000000f00105000800000026060f000600ffffffff01001000000026060f001600ffffffff0000250200007e0100001a030000ba01000008000000fa0200000300000000000000040000002d010500040000002d01030008000000250302003b029001 0303a801040000002d01060004000000f001050007000000fc020000000000000000040000002d0105000c000000240304004902800127028d014502a1013d0290010c00000024030400f502b8011703ab01f90297010103a801040000002d010400040000002d01020004000000f00105000800000026060f000600ffff ffff01001000000026060f001600ffffffff000025020000a80100001a0300002602000008000000fa0200000300000000000000040000002d010500040000002d01030008000000250302003902b50105031902040000002d01060004000000f001050007000000fc020000000000000000040000002d0105000c000000 240304004b02aa012702ab013c02c8013b02b5010c00000024030400f3022402170323020203060203031902040000002d010400040000002d01020004000000f00105000800000026060f000600ffffffff01001000000026060f001600ffffffff000025020000c7010000fc0200008002000008000000fa0200000300 000000000000040000002d010500040000002d01030008000000250302003602d501ea027102040000002d01060004000000f001050007000000fc020000000000000000040000002d0105000c000000240304004b02d0012702c9013602ea013802d7010c00000024030400d5027602f9027d02ea025c02e8026f020400 00002d010400040000002d01020004000000f00105000800000026060f000600ffffffff01001000000026060f001600ffffffff000025020000e5010000de020000da02000008000000fa0200000300000000000000040000002d010500040000002d01030008000000250302003202f701d002c702040000002d010600 04000000f001050007000000fc020000000000000000040000002d0105000c000000240304004802f7012702e7012d020a023402f9010c00000024030400ba02c702db02d702d502b402ce02c502040000002d010400040000002d01020004000000f00105000800000026060f000600ffffffff01001000000026060f00 1600ffffffff00002502000003020000c00200003403000008000000fa0200000300000000000000040000002d010500040000002d010300080000002503020031021702b3021f03040000002d01060004000000f001050007000000fc020000000000000000040000002d0105000c0000002403040045021a0227020502 27022902310219020c000000240304009f021c03bd023103bd020d03b3021d03040000002d010400040000002d01020004000000f00105000800000026060f000600ffffffff01001000000026060f001600ffffffff0000d70400008a00000036050000b100000008000000fa0200000300000000000000040000002d01 0500040000002d0103000800000025030200ed049d001f059d00040000002d01060004000000f001050007000000fc020000000000000000040000002d0105000c00000024030400f9048c00d9049d00f904ad00ef049d000c000000240304001305ae0033059d0013058d001d059d00040000002d010400040000002d01 020004000000f00105000800000026060f000600ffffffff01001000000026060f001600ffffffff0000b9040000e4000000360500000b01000008000000fa0200000300000000000000040000002d010500040000002d0103000800000025030200cf04f7001f05f700040000002d01060004000000f001050007000000 fc020000000000000000040000002d0105000c00000024030400db04e600bb04f700db040701d104f7000c00000024030400130508013305f7001305e7001d05f700040000002d010400040000002d01020004000000f00105000800000026060f000600ffffffff01001000000026060f001600ffffffff0000d7040000 b601000036050000dd01000008000000fa0200000300000000000000040000002d010500040000002d0103000800000025030200ed04c9011f05c901040000002d01060004000000f001050007000000fc020000000000000000040000002d0105000c00000024030400f904b801d904c901f904d901ef04c9010c000000 240304001305da013305c9011305b9011d05c901040000002d010400040000002d01020004000000f00105000800000026060f000600ffffffff01001000000026060f001600ffffffff0000b90400002e020000360500005502000008000000fa0200000300000000000000040000002d010500040000002d0103000800 000025030200cf0441021f054102040000002d01060004000000f001050007000000fc020000000000000000040000002d0105000c00000024030400db043002bb044102db045102d10441020c000000240304001305520233054102130531021d054102040000002d010400040000002d01020004000000f00105000800 000026060f000600ffffffff01001000000026060f001600ffffffff00009b0400008802000036050000af02000008000000fa0200000300000000000000040000002d010500040000002d0103000800000025030200b1049b021f059b02040000002d01060004000000f001050007000000fc0200000000000000000400 00002d0105000c00000024030400bd048a029d049b02bd04ab02b3049b020c000000240304001305ac0233059b0213058b021d059b02040000002d010400040000002d01020004000000f00105000800000026060f000600ffffffff01001000000026060f001600ffffffff00007d040000e20200003605000009030000 08000000fa0200000300000000000000040000002d010500040000002d01030008000000250302009304f5021f05f502040000002d01060004000000f001050007000000fc020000000000000000040000002d0105000c000000240304009f04e4027f04f5029f0405039504f5020c00000024030400130506033305f502 1305e5021d05f502040000002d010400040000002d01020004000000f00105000800000026060f000600ffffffff01001000000026060f001600ffffffff00005f0400003c030000360500006303000008000000fa0200000300000000000000040000002d010500040000002d010300080000002503020075044f031f05 4f03040000002d01060004000000f001050007000000fc020000000000000000040000002d0105000c0000002403040081043e0361044f0381045f0377044f030c000000240304001305600333054f0313053f031d054f03040000002d010400040000002d01020004000000f00105000800000026060f000600ffffffff 0100040000002d0100000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eca5c1005900090800000012bf000000000000100000000000040000af0400000e00626a626af357f357000000000000000000000000000000000000090416001e0c0000913d0100913d0100230000000000 0000000000000000000000000000000000008b00000000000000ffff0f000000000000000000ffff0f000000000000000000ffff0f00000000000000000000000000000000005d0000000000700300000000000070030000700300000000000070030000000000004c050000000000004c050000000000004c0500001400 000000000000000000007c050000000000007c050000000000007c050000000000007c050000000000007c0500000c000000880500000c0000007c05000000000000b6190000f6000000a005000000000000a005000000000000a005000000000000a005000000000000a005000000000000cb18000000000000cb180000 00000000cb180000000000007b190000020000007d190000000000007d190000000000007d190000000000007d190000000000007d190000000000007d19000024000000ac1a0000f4010000a01c000072000000a119000015000000000000000000000000000000000000004c05000000000000cb180000000000000000 0000000000000000000000000000cb14000000040000cb18000000000000cb18000000000000cb18000000000000a1190000000000007b1900000000000070030000000000007003000000000000a0050000000000000000000000000000a00500002b0f0000a0050000000000007b190000000000007b19000000000000 7b19000000000000cb180000a00000007003000056010000a0050000000000004c05000000000000a0050000000000007b1900000000000000000000000000000000000000000000600500000e0000006e0500000e0000007003000000000000700300000000000070030000000000007003000000000000cb1800000000 00007b190000000000007b190000000000007b1900000000000000000000000000007b19000000000000c6040000860000004c0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007b19000000000000a0050000 00000000940500000c00000010494c1cfc65c1017c050000000000007c050000000000006b190000100000007b190000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080808080808080808080808080808080808080808080808080808080808080808080d417070205365727620310d0d417070205365727620320d0d41707020536572 7620330d0d417070205365727620340d0d417070205365727620350d0d417070205365727620370d0d417070205365727620360d0d4f746865722044420d0d4f7261636c652044420d0d544d2070726f6320330d0d544d2070726f6320320d0d544d2070726f6320310d0d0d0d0000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000022040000230400002e0400002f0400003a0400003b040000460400004704000052040000530400005e0400005f0400006a0400006b04 0000760400008c0400009604000097040000a1040000a2040000ac040000af040000f800f500f500f500f500f500f500f500f500f500f50000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000046d480908000d036a000000005508016d480004001600040000230400002e0400002f0400003a0400003b040000460400004704000052040000530400005e0400005f0400006a04 00006b040000760400007704000080040000810400008b0400008c0400009604000097040000a1040000a2040000ac040000ad040000ae040000af040000fd000000000000000000000000fd000000000000000000000000fd000000000000000000000000fd000000000000000000000000fd0000000000000000000000 00fd000000000000000000000000fd000000000000000000000000fd000000000000000000000000fd000000000000000000000000fd000000000000000000000000fd000000000000000000000000fd000000000000000000000000fd000000000000000000000000fd000000000000000000000000fd00000000000000 0000000000fd000000000000000000000000fd000000000000000000000000fd000000000000000000000000fd000000000000000000000000fd000000000000000000000000fd000000000000000000000000fd000000000000000000000000fd000000000000000000000000fd000000000000000000000000fd000000 000000000000000000fd000000000000000000000000fd0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000001b0004000001040000020400000304000004040000050400001104000022040000230400002e0400002f04 00003a0400003b040000460400004704000052040000530400005e0400005f0400006a0400006b04000076040000770400008004000081040000870400008a0400008b0400008c0400009604000097040000a1040000a2040000ac040000ad040000ae040000fefefefefefefefe00000000000000000000000000000000 fefefe00000000fe00fefe00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020101231c001fb0c04e20b0c04e21b0da1622b0cc1523903c1e2490961e25b0000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000500530075006d006d006100720079004900 6e0066006f0072006d006100740069006f006e000000000000000000000000000000000000000000000000000000280002010700000009000000ffffffff0000000000000000000000000000000000000000000000000000000000000000000000002d0000000010000000000000050044006f00630075006d0065006e00 7400530075006d006d0061007200790049006e0066006f0072006d006100740069006f006e000000000000000000000038000200ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000000000003500000000100000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000feff0000040002000000 000000000000000000000000000001000000e0859ff2f94f6810ab9108002b27b3d9300000006c0100001000000001000000880000000200000090000000030000009c00000004000000a800000005000000c400000007000000d000000008000000e40000000900000000010000120000000c0100000a00000028010000 0c000000340100000d000000400100000e0000004c0100000f00000054010000100000005c010000130000006401000002000000e40400001e00000001000000000073001e00000001000000000073001e000000130000005072652d496e7374616c6c6564205573657200001e000000010000000072652d1e0000000b00 00004e6f726d616c2e646f7400651e000000130000005072652d496e7374616c6c6564205573657200001e000000020000003200652d1e000000130000004d6963726f736f667420576f726420382e3000004000000000000000000000004000000000dc7fbbfb65c1014000000000680603fc65c1010300000001000000 030000000000000003000000000000000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000feff000004000200000000000000000000000000000000000200000002d5cdd59c2e1b10939708002b2cf9ae4400000005d5cdd59c2e1b10939708002b2cf9ae30010000ec000000 0c00000001000000680000000f0000007000000005000000800000000600000088000000110000009000000017000000980000000b000000a000000010000000a800000013000000b000000016000000b80000000d000000c00000000c000000cd00000002000000e40400001e0000000800000047617465776179000300 00000100000003000000010000000300000000000000030000006a1008000b000000000000000b000000000000000b000000000000000b000000000000001e1000000100000001000000000c100000020000001e000000060000005469746c65000300000001000000009800000003000000000000002000000001000000 36000000020000003e00000001000000020000000a0000005f5049445f475549440002000000e4040000410000004e0000007b00460041003100430044004400330033002d0042004600360034002d0031003100440035002d0038003100450044002d003000300030003000300030003000300030003000300030007d00 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000105000005000000 0d0000004d45544146494c455049435400273c000060e0ffff4a1e00000800273ca01f0000 010009000003210f000008001c00000000001400000026060f001e00ffffffff040014000000576f72640e004d6963726f736f667420576f7264050000000b0200000000050000000c02bc031b071c000000fb021000070000000000bc02000000000000000253797374656d0000080000000c008a0100000a0006000000 0c008a0100000a00040000002d010000050000000201010000001c000000fb02d6ff0000000000009001000000000440001254696d6573204e657720526f6d616e002a82ed77c067ef7765040a0f00000a00040000002d01010005000000090200000000050000000201010000001000000026060f001600ffffffff0000 6d05000041000000720500001801000008000000fa0200000300000000000000040000002d01020007000000fc020100000000000000040000002d01030008000000250302006f0543006f05150108000000fa0200000000000000000000040000002d01040004000000f001020007000000fc020000ffffff0000000400 00002d0102000800000026060f000600ffffffff010007000000fc020000ffffff000000040000002d01050008000000fa0200000300000000000002040000002d01060007000000180462009c0625006f05040000002d01020004000000f0010500040000002d01040004000000f00106001000000026060f001600ffff ffff000099060000410000009e0600001801000008000000fa0200000300000000000000040000002d010500040000002d01030008000000250302009b0643009b061501040000002d01040004000000f0010500040000002d0102000800000026060f000600ffffffff010007000000fc020000ffffff00000004000000 2d01050008000000fa0200000300000000000002040000002d01060007000000180434019c06f7006f05040000002d01020004000000f0010500040000002d01040004000000f001060007000000fc020000ffffff000000040000002d01050008000000fa0205000100000000000000040000002d010600040000002d01 0500090000001d062100f0005a00f0007f008d05040000002d010500040000002d01020004000000f0010500040000002d010400030000001e00070000001604ca0060068e00ab05050000000201010000000500000014028f00ab05050000002e010100000014000000320a8f00ab0506000400000000001b07bc034f74 686572201e000b00160012000e000b00050000002e0100000000050000001402000000000500000014028f001506050000002e01010000000e000000320a8f00150602000400000000001b07bc0344421e001b00050000002e01000000000500000014020000000005000000020101000000040000002701ffff07000000 fc020000ffffff000000040000002d01050008000000fa0200000300000000000002040000002d010700070000001804da00bc0443005303040000002d01020004000000f0010500040000002d01040004000000f0010700030000001e00070000001604b700710465009e0305000000020101000000040000002d010100 0500000009020000000005000000140266009e03050000002e010100000011000000320a66009e0304000400000000001b07bc03417070201e00150015000b00050000002e01000000000500000014022a87b8ca0500000014026600f103050000002e010100000014000000320a6600f10306000400000000001b07bc03 536572762037170012000f0014000b001500050000002e01000000000500000014020000000005000000020101000000040000002701ffff07000000fc020000ffffff000000040000002d01050008000000fa0200000300000000000002040000002d01070007000000180434019e049d003503040000002d0102000400 0000f0010500040000002d01040004000000f0010700030000001e0007000000160411015304bf00800305000000020101000000040000002d01010005000000090200000000050000001402c0008003050000002e010100000011000000320ac000800304000400000000001b07bc03417070201e00150015000b000500 00002e01000000000500000014022a87b8ca050000001402c000d303050000002e010100000014000000320ac000d30306000400000000001b07bc03536572762036170012000f0014000b001500050000002e01000000000500000014020000000005000000020101000000040000002701ffff07000000fc020000ffff ff000000040000002d01050008000000fa0200000300000000000002040000002d0107000700000018042402bc048d015303040000002d01020004000000f0010500040000002d01040004000000f0010700030000001e0007000000160401027104af019e0305000000020101000000040000002d010100050000000902 00000000050000001402b0019e03050000002e010100000011000000320ab0019e0304000400000000001b07bc03417070201e00150015000b00050000002e01000000000500000014022a87b8ca050000001402b001f103050000002e010100000014000000320ab001f10306000400000000001b07bc03536572762035 170012000f0014000b001500050000002e01000000000500000014020000000005000000020101000000040000002701ffff07000000fc020000ffffff000000040000002d01050008000000fa0200000300000000000002040000002d0107000700000018047e029e04e7013503040000002d01020004000000f0010500 040000002d01040004000000f0010700030000001e000700000016045b0253040902800305000000020101000000040000002d010100050000000902000000000500000014020a028003050000002e010100000011000000320a0a02800304000400000000001b07bc03417070201e00150015000b00050000002e010000 00000500000014022a87b8ca0500000014020a02d303050000002e010100000014000000320a0a02d30306000400000000001b07bc03536572762034170012000f0014000b001500050000002e01000000000500000014020000000005000000020101000000040000002701ffff07000000fc020000ffffff0000000400 00002d01050008000000fa0200000300000000000002040000002d010700070000001804d802800441021703040000002d01020004000000f0010500040000002d01040004000000f0010700030000001e00070000001604b50235046302620305000000020101000000040000002d010100050000000902000000000500 0000140264026203050000002e010100000011000000320a6402620304000400000000001b07bc03417070201e00150015000b00050000002e01000000000500000014022a87b8ca0500000014026402b503050000002e010100000014000000320a6402b50306000400000000001b07bc03536572762033170012000f00 14000b001500050000002e01000000000500000014020000000005000000020101000000040000002701ffff07000000fc020000ffffff000000040000002d01050008000000fa0200000300000000000002040000002d010700070000001804320362049b02f902040000002d01020004000000f0010500040000002d01 040004000000f0010700030000001e000700000016040f031704bd02440305000000020101000000040000002d01010005000000090200000000050000001402be024403050000002e010100000011000000320abe02440304000400000000001b07bc03417070201e00150015000b00050000002e010000000005000000 14022a87b8ca050000001402be029703050000002e010100000014000000320abe02970306000400000000001b07bc03536572762032170012000f0014000b001500050000002e01000000000500000014020000000005000000020101000000040000002701ffff07000000fc020000ffffff000000040000002d010500 08000000fa0200000300000000000002040000002d0107000700000018048c034404f502db02040000002d01020004000000f0010500040000002d01040004000000f0010700030000001e000700000016046903f9031703260305000000020101000000040000002d010100050000000902000000000500000014021803 2603050000002e010100000011000000320a1803260304000400000000001b07bc03417070201e00150015000b00050000002e01000000000500000014022a87b8ca05000000140218037903050000002e010100000014000000320a1803790306000400000000001b07bc03536572762031170012000f0014000b001500 050000002e01000000000500000014020000000005000000020101000000040000002701ffff1000000026060f001600ffffffff00006d050000a9010000720500007003000008000000fa0200000300000000000000040000002d010500040000002d01030008000000250302006f05ab016f056d03040000002d010400 04000000f0010500040000002d0102000800000026060f000600ffffffff010007000000fc020000ffffff000000040000002d01050008000000fa0200000300000000000002040000002d010700070000001804ca019c068d016f05040000002d01020004000000f0010500040000002d01040004000000f00107001000 000026060f001600ffffffff000099060000a90100009e0600007003000008000000fa0200000300000000000000040000002d010500040000002d01030008000000250302009b06ab019b066d03040000002d01040004000000f0010500040000002d0102000800000026060f000600ffffffff010007000000fc020000 ffffff000000040000002d01050008000000fa0200000300000000000002040000002d0107000700000018048c039c064f036f05040000002d01020004000000f0010500040000002d01040004000000f001070007000000fc020000ffffff000000040000002d010500040000002d010600040000002d01050009000000 1d062100f0005a00f0005f028d05040000002d010500040000002d01020004000000f0010500040000002d010400030000001e00070000001604aa0260066e02ab0505000000020101000000040000002d010100050000000902000000000500000014026f02ab05050000002e010100000016000000320a6f02ab050700 0400000000001b07bc034f7261636c6520a41e000e00130012000c0012000b00050000002e01000000000500000014022a87b8ca0500000014026f022506050000002e01010000000e000000320a6f02250602000400000000001b07bc0344421e001b00050000002e010000000005000000140200000000050000000201 01000000040000002701ffff07000000fc020000ffffff000000040000002d01050008000000fa0200000300000000000002040000002d0107000700000018048e01ec01f7008300040000002d01020004000000f0010500040000002d01040004000000f0010700030000001e000700000016046b01a1011901ce000500 0000020101000000040000002d010100050000000902000000000500000014021a01ce00050000002e010100000010000000320a1a01ce0003000400000000001b07bc03544d20001a0025000b00050000002e01000000000500000014022a87b8ca0500000014021a011801050000002e010100000014000000320a1a01 180106000400000000001b07bc0370726f63203314000f00140012000b001500050000002e01000000000500000014020000000005000000020101000000040000002701ffff07000000fc020000ffffff000000040000002d01050008000000fa0200000300000000000002040000002d010700070000001804e801ce01 51016500040000002d01020004000000f0010500040000002d01040004000000f0010700030000001e00070000001604c50183017301b00005000000020101000000040000002d010100050000000902000000000500000014027401b000050000002e010100000010000000320a7401b00003000400000000001b07bc03 544d20001a0025000b00050000002e01000000000500000014022a87b8ca0500000014027401fa00050000002e010100000014000000320a7401fa0006000400000000001b07bc0370726f63203214000f00140012000b001500050000002e01000000000500000014020000000005000000020101000000040000002701 ffff07000000fc020000ffffff000000040000002d01050008000000fa0200000300000000000002040000002d0107000700000018044202b001ab014700040000002d01020004000000f0010500040000002d01040004000000f0010700030000001e000700000016041f026501cd019200050000000201010000000400 00002d01010005000000090200000000050000001402ce019200050000002e010100000010000000320ace01920003000400000000001b07bc03544d20001a0025000b00050000002e01000000000500000014022a87b8ca050000001402ce01dc00050000002e010100000014000000320ace01dc000600040000000000 1b07bc0370726f63203114000f00140012000b001500050000002e01000000000500000014020000000005000000020101000000040000002701ffff1000000026060f001600ffffffff0000250200009b0000001a0300005401000008000000fa0200000300000000000000040000002d010500040000002d0103000800 000025030200370246010703a800040000002d01060004000000f001050007000000fc020000000000000000040000002d0105000c0000002403040037023001270251014a024b01390244010c000000240304000703be0017039d00f402a3000503aa00040000002d010400040000002d01020004000000f00105000800 000026060f000600ffffffff01001000000026060f001600ffffffff000025020000f40000001a0300007201000008000000fa0200000300000000000000040000002d010500040000002d01030008000000250302003902650105030101040000002d01060004000000f001050007000000fc0200000000000000000400 00002d0105000c000000240304003c02510127026f014b026f013b0265010c00000024030400020315011703f700f302f70003030101040000002d010400040000002d01020004000000f00105000800000026060f000600ffffffff01001000000026060f001600ffffffff0000250200007e0100001a030000ba010000 08000000fa0200000300000000000000040000002d010500040000002d01030008000000250302003b0290010303a801040000002d01060004000000f001050007000000fc020000000000000000040000002d0105000c000000240304004902800127028d014502a1013d0290010c00000024030400f502b8011703ab01 f90297010103a801040000002d010400040000002d01020004000000f00105000800000026060f000600ffffffff01001000000026060f001600ffffffff000025020000a80100001a0300002602000008000000fa0200000300000000000000040000002d010500040000002d01030008000000250302003902b5010503 1902040000002d01060004000000f001050007000000fc020000000000000000040000002d0105000c000000240304004b02aa012702ab013c02c8013b02b5010c00000024030400f3022402170323020203060203031902040000002d010400040000002d01020004000000f00105000800000026060f000600ffffffff 01001000000026060f001600ffffffff000025020000c7010000fc0200008002000008000000fa0200000300000000000000040000002d010500040000002d01030008000000250302003602d501ea027102040000002d01060004000000f001050007000000fc020000000000000000040000002d0105000c0000002403 04004b02d0012702c9013602ea013802d7010c00000024030400d5027602f9027d02ea025c02e8026f02040000002d010400040000002d01020004000000f00105000800000026060f000600ffffffff01001000000026060f001600ffffffff000025020000e5010000de020000da02000008000000fa02000003000000 00000000040000002d010500040000002d01030008000000250302003202f701d002c702040000002d01060004000000f001050007000000fc020000000000000000040000002d0105000c000000240304004802f7012702e7012d020a023402f9010c00000024030400ba02c702db02d702d502b402ce02c50204000000 2d010400040000002d01020004000000f00105000800000026060f000600ffffffff01001000000026060f001600ffffffff00002502000003020000c00200003403000008000000fa0200000300000000000000040000002d010500040000002d010300080000002503020031021702b3021f03040000002d0106000400 0000f001050007000000fc020000000000000000040000002d0105000c0000002403040045021a022702050227022902310219020c000000240304009f021c03bd023103bd020d03b3021d03040000002d010400040000002d01020004000000f00105000800000026060f000600ffffffff01001000000026060f001600 ffffffff0000d70400008a00000036050000b100000008000000fa0200000300000000000000040000002d010500040000002d0103000800000025030200ed049d001f059d00040000002d01060004000000f001050007000000fc020000000000000000040000002d0105000c00000024030400f9048c00d9049d00f904 ad00ef049d000c000000240304001305ae0033059d0013058d001d059d00040000002d010400040000002d01020004000000f00105000800000026060f000600ffffffff01001000000026060f001600ffffffff0000b9040000e4000000360500000b01000008000000fa0200000300000000000000040000002d010500 040000002d0103000800000025030200cf04f7001f05f700040000002d01060004000000f001050007000000fc020000000000000000040000002d0105000c00000024030400db04e600bb04f700db040701d104f7000c00000024030400130508013305f7001305e7001d05f700040000002d010400040000002d010200 04000000f00105000800000026060f000600ffffffff01001000000026060f001600ffffffff0000d7040000b601000036050000dd01000008000000fa0200000300000000000000040000002d010500040000002d0103000800000025030200ed04c9011f05c901040000002d01060004000000f001050007000000fc02 0000000000000000040000002d0105000c00000024030400f904b801d904c901f904d901ef04c9010c000000240304001305da013305c9011305b9011d05c901040000002d010400040000002d01020004000000f00105000800000026060f000600ffffffff01001000000026060f001600ffffffff0000b90400002e02 0000360500005502000008000000fa0200000300000000000000040000002d010500040000002d0103000800000025030200cf0441021f054102040000002d01060004000000f001050007000000fc020000000000000000040000002d0105000c00000024030400db043002bb044102db045102d10441020c0000002403 04001305520233054102130531021d054102040000002d010400040000002d01020004000000f00105000800000026060f000600ffffffff01001000000026060f001600ffffffff00009b0400008802000036050000af02000008000000fa0200000300000000000000040000002d010500040000002d01030008000000 25030200b1049b021f059b02040000002d01060004000000f001050007000000fc020000000000000000040000002d0105000c00000024030400bd048a029d049b02bd04ab02b3049b020c000000240304001305ac0233059b0213058b021d059b02040000002d010400040000002d01020004000000f001050008000000 26060f000600ffffffff01001000000026060f001600ffffffff00007d040000e2020000360500000903000008000000fa0200000300000000000000040000002d010500040000002d01030008000000250302009304f5021f05f502040000002d01060004000000f001050007000000fc02000000000000000004000000 2d0105000c000000240304009f04e4027f04f5029f0405039504f5020c00000024030400130506033305f5021305e5021d05f502040000002d010400040000002d01020004000000f00105000800000026060f000600ffffffff01001000000026060f001600ffffffff00005f0400003c03000036050000630300000800 0000fa0200000300000000000000040000002d010500040000002d010300080000002503020075044f031f054f03040000002d01060004000000f001050007000000fc020000000000000000040000002d0105000c0000002403040081043e0361044f0381045f0377044f030c000000240304001305600333054f031305 3f031d054f03040000002d010400040000002d01020004000000f00105000800000026060f000600ffffffff0100040000002d010000030000000000}{\result {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid9923908 {\pict{\*\picprop\shplid1025{\sp{\sn shapeType}{\sv 75}}{\sp{\sn fFlipH}{\sv 0}}{\sp{\sn fFlipV}{\sv 0}}{\sp{\sn pictureGray}{\sv 0}}{\sp{\sn pictureBiLevel}{\sv 0}}{\sp{\sn fillColor}{\sv 268435473}}{\sp{\sn fFilled}{\sv 0}}{\sp{\sn fHitTestFill}{\sv 1}} {\sp{\sn fillShape}{\sv 1}}{\sp{\sn fillUseRect}{\sv 0}}{\sp{\sn fNoFillHitTest}{\sv 0}}{\sp{\sn fLine}{\sv 0}}{\sp{\sn fLayoutInCell}{\sv 1}}}\brdrt\brdrs\brdrw10 \brdrl\brdrs\brdrw10 \brdrb\brdrs\brdrw10 \brdrr\brdrs\brdrw10 \picscalex100\picscaley100\piccropl0\piccropr0\piccropt0\piccropb0\picw15399\pich8096\picwgoal8730\pichgoal4590\wmetafile8\bliptag-997747234\blipupi-207{\*\blipuid c48795deef629993bedb8505ac7915f5} 010009000003210f000008001c00000000001400000026060f001e00ffffffff040014000000576f72640e004d6963726f736f667420576f7264050000000b02 00000000050000000c02bc031b071c000000fb021000070000000000bc02000000000000000253797374656d0000080000000c008a0100000a00060000000c00 8a0100000a00040000002d010000050000000201010000001c000000fb02d6ff0000000000009001000000000440001254696d6573204e657720526f6d616e00 2a82ed77c067ef7765040a0f00000a00040000002d01010005000000090200000000050000000201010000001000000026060f001600ffffffff00006d050000 41000000720500001801000008000000fa0200000300000000000000040000002d01020007000000fc020100000000000000040000002d010300080000002503 02006f0543006f05150108000000fa0200000000000000000000040000002d01040004000000f001020007000000fc020000ffffff000000040000002d010200 0800000026060f000600ffffffff010007000000fc020000ffffff000000040000002d01050008000000fa0200000300000000000002040000002d0106000700 0000180462009c0625006f05040000002d01020004000000f0010500040000002d01040004000000f00106001000000026060f001600ffffffff000099060000 410000009e0600001801000008000000fa0200000300000000000000040000002d010500040000002d01030008000000250302009b0643009b06150104000000 2d01040004000000f0010500040000002d0102000800000026060f000600ffffffff010007000000fc020000ffffff000000040000002d01050008000000fa02 00000300000000000002040000002d01060007000000180434019c06f7006f05040000002d01020004000000f0010500040000002d01040004000000f0010600 07000000fc020000ffffff000000040000002d01050008000000fa0205000100000000000000040000002d010600040000002d010500090000001d062100f000 5a00f0007f008d05040000002d010500040000002d01020004000000f0010500040000002d010400030000001e00070000001604ca0060068e00ab0505000000 0201010000000500000014028f00ab05050000002e010100000014000000320a8f00ab0506000400000000001b07bc034f74686572201e000b00160012000e00 0b00050000002e0100000000050000001402000000000500000014028f001506050000002e01010000000e000000320a8f00150602000400000000001b07bc03 44421e001b00050000002e01000000000500000014020000000005000000020101000000040000002701ffff07000000fc020000ffffff000000040000002d01 050008000000fa0200000300000000000002040000002d010700070000001804da00bc0443005303040000002d01020004000000f0010500040000002d010400 04000000f0010700030000001e00070000001604b700710465009e0305000000020101000000040000002d010100050000000902000000000500000014026600 9e03050000002e010100000011000000320a66009e0304000400000000001b07bc03417070201e00150015000b00050000002e01000000000500000014022a87 b8ca0500000014026600f103050000002e010100000014000000320a6600f10306000400000000001b07bc03536572762037170012000f0014000b0015000500 00002e01000000000500000014020000000005000000020101000000040000002701ffff07000000fc020000ffffff000000040000002d01050008000000fa02 00000300000000000002040000002d01070007000000180434019e049d003503040000002d01020004000000f0010500040000002d01040004000000f0010700 030000001e0007000000160411015304bf00800305000000020101000000040000002d01010005000000090200000000050000001402c0008003050000002e01 0100000011000000320ac000800304000400000000001b07bc03417070201e00150015000b00050000002e01000000000500000014022a87b8ca050000001402 c000d303050000002e010100000014000000320ac000d30306000400000000001b07bc03536572762036170012000f0014000b001500050000002e0100000000 0500000014020000000005000000020101000000040000002701ffff07000000fc020000ffffff000000040000002d01050008000000fa020000030000000000 0002040000002d0107000700000018042402bc048d015303040000002d01020004000000f0010500040000002d01040004000000f0010700030000001e000700 0000160401027104af019e0305000000020101000000040000002d01010005000000090200000000050000001402b0019e03050000002e010100000011000000 320ab0019e0304000400000000001b07bc03417070201e00150015000b00050000002e01000000000500000014022a87b8ca050000001402b001f10305000000 2e010100000014000000320ab001f10306000400000000001b07bc03536572762035170012000f0014000b001500050000002e01000000000500000014020000 000005000000020101000000040000002701ffff07000000fc020000ffffff000000040000002d01050008000000fa0200000300000000000002040000002d01 07000700000018047e029e04e7013503040000002d01020004000000f0010500040000002d01040004000000f0010700030000001e000700000016045b025304 0902800305000000020101000000040000002d010100050000000902000000000500000014020a028003050000002e010100000011000000320a0a0280030400 0400000000001b07bc03417070201e00150015000b00050000002e01000000000500000014022a87b8ca0500000014020a02d303050000002e01010000001400 0000320a0a02d30306000400000000001b07bc03536572762034170012000f0014000b001500050000002e010000000005000000140200000000050000000201 01000000040000002701ffff07000000fc020000ffffff000000040000002d01050008000000fa0200000300000000000002040000002d010700070000001804 d802800441021703040000002d01020004000000f0010500040000002d01040004000000f0010700030000001e00070000001604b50235046302620305000000 020101000000040000002d0101000500000009020000000005000000140264026203050000002e010100000011000000320a6402620304000400000000001b07 bc03417070201e00150015000b00050000002e01000000000500000014022a87b8ca0500000014026402b503050000002e010100000014000000320a6402b503 06000400000000001b07bc03536572762033170012000f0014000b001500050000002e0100000000050000001402000000000500000002010100000004000000 2701ffff07000000fc020000ffffff000000040000002d01050008000000fa0200000300000000000002040000002d010700070000001804320362049b02f902 040000002d01020004000000f0010500040000002d01040004000000f0010700030000001e000700000016040f031704bd024403050000000201010000000400 00002d01010005000000090200000000050000001402be024403050000002e010100000011000000320abe02440304000400000000001b07bc03417070201e00 150015000b00050000002e01000000000500000014022a87b8ca050000001402be029703050000002e010100000014000000320abe0297030600040000000000 1b07bc03536572762032170012000f0014000b001500050000002e01000000000500000014020000000005000000020101000000040000002701ffff07000000 fc020000ffffff000000040000002d01050008000000fa0200000300000000000002040000002d0107000700000018048c034404f502db02040000002d010200 04000000f0010500040000002d01040004000000f0010700030000001e000700000016046903f9031703260305000000020101000000040000002d0101000500 000009020000000005000000140218032603050000002e010100000011000000320a1803260304000400000000001b07bc03417070201e00150015000b000500 00002e01000000000500000014022a87b8ca05000000140218037903050000002e010100000014000000320a1803790306000400000000001b07bc0353657276 2031170012000f0014000b001500050000002e01000000000500000014020000000005000000020101000000040000002701ffff1000000026060f001600ffff ffff00006d050000a9010000720500007003000008000000fa0200000300000000000000040000002d010500040000002d01030008000000250302006f05ab01 6f056d03040000002d01040004000000f0010500040000002d0102000800000026060f000600ffffffff010007000000fc020000ffffff000000040000002d01 050008000000fa0200000300000000000002040000002d010700070000001804ca019c068d016f05040000002d01020004000000f0010500040000002d010400 04000000f00107001000000026060f001600ffffffff000099060000a90100009e0600007003000008000000fa0200000300000000000000040000002d010500 040000002d01030008000000250302009b06ab019b066d03040000002d01040004000000f0010500040000002d0102000800000026060f000600ffffffff0100 07000000fc020000ffffff000000040000002d01050008000000fa0200000300000000000002040000002d0107000700000018048c039c064f036f0504000000 2d01020004000000f0010500040000002d01040004000000f001070007000000fc020000ffffff000000040000002d010500040000002d010600040000002d01 0500090000001d062100f0005a00f0005f028d05040000002d010500040000002d01020004000000f0010500040000002d010400030000001e00070000001604 aa0260066e02ab0505000000020101000000040000002d010100050000000902000000000500000014026f02ab05050000002e010100000016000000320a6f02 ab0507000400000000001b07bc034f7261636c6520a41e000e00130012000c0012000b00050000002e01000000000500000014022a87b8ca0500000014026f02 2506050000002e01010000000e000000320a6f02250602000400000000001b07bc0344421e001b00050000002e01000000000500000014020000000005000000 020101000000040000002701ffff07000000fc020000ffffff000000040000002d01050008000000fa0200000300000000000002040000002d01070007000000 18048e01ec01f7008300040000002d01020004000000f0010500040000002d01040004000000f0010700030000001e000700000016046b01a1011901ce000500 0000020101000000040000002d010100050000000902000000000500000014021a01ce00050000002e010100000010000000320a1a01ce000300040000000000 1b07bc03544d20001a0025000b00050000002e01000000000500000014022a87b8ca0500000014021a011801050000002e010100000014000000320a1a011801 06000400000000001b07bc0370726f63203314000f00140012000b001500050000002e0100000000050000001402000000000500000002010100000004000000 2701ffff07000000fc020000ffffff000000040000002d01050008000000fa0200000300000000000002040000002d010700070000001804e801ce0151016500 040000002d01020004000000f0010500040000002d01040004000000f0010700030000001e00070000001604c50183017301b000050000000201010000000400 00002d010100050000000902000000000500000014027401b000050000002e010100000010000000320a7401b00003000400000000001b07bc03544d20001a00 25000b00050000002e01000000000500000014022a87b8ca0500000014027401fa00050000002e010100000014000000320a7401fa0006000400000000001b07 bc0370726f63203214000f00140012000b001500050000002e01000000000500000014020000000005000000020101000000040000002701ffff07000000fc02 0000ffffff000000040000002d01050008000000fa0200000300000000000002040000002d0107000700000018044202b001ab014700040000002d0102000400 0000f0010500040000002d01040004000000f0010700030000001e000700000016041f026501cd01920005000000020101000000040000002d01010005000000 090200000000050000001402ce019200050000002e010100000010000000320ace01920003000400000000001b07bc03544d20001a0025000b00050000002e01 000000000500000014022a87b8ca050000001402ce01dc00050000002e010100000014000000320ace01dc0006000400000000001b07bc0370726f6320311400 0f00140012000b001500050000002e01000000000500000014020000000005000000020101000000040000002701ffff1000000026060f001600ffffffff0000 250200009b0000001a0300005401000008000000fa0200000300000000000000040000002d010500040000002d0103000800000025030200370246010703a800 040000002d01060004000000f001050007000000fc020000000000000000040000002d0105000c0000002403040037023001270251014a024b01390244010c00 0000240304000703be0017039d00f402a3000503aa00040000002d010400040000002d01020004000000f00105000800000026060f000600ffffffff01001000 000026060f001600ffffffff000025020000f40000001a0300007201000008000000fa0200000300000000000000040000002d010500040000002d0103000800 0000250302003902650105030101040000002d01060004000000f001050007000000fc020000000000000000040000002d0105000c000000240304003c025101 27026f014b026f013b0265010c00000024030400020315011703f700f302f70003030101040000002d010400040000002d01020004000000f001050008000000 26060f000600ffffffff01001000000026060f001600ffffffff0000250200007e0100001a030000ba01000008000000fa020000030000000000000004000000 2d010500040000002d01030008000000250302003b0290010303a801040000002d01060004000000f001050007000000fc020000000000000000040000002d01 05000c000000240304004902800127028d014502a1013d0290010c00000024030400f502b8011703ab01f90297010103a801040000002d010400040000002d01 020004000000f00105000800000026060f000600ffffffff01001000000026060f001600ffffffff000025020000a80100001a0300002602000008000000fa02 00000300000000000000040000002d010500040000002d01030008000000250302003902b50105031902040000002d01060004000000f001050007000000fc02 0000000000000000040000002d0105000c000000240304004b02aa012702ab013c02c8013b02b5010c00000024030400f3022402170323020203060203031902 040000002d010400040000002d01020004000000f00105000800000026060f000600ffffffff01001000000026060f001600ffffffff000025020000c7010000 fc0200008002000008000000fa0200000300000000000000040000002d010500040000002d01030008000000250302003602d501ea027102040000002d010600 04000000f001050007000000fc020000000000000000040000002d0105000c000000240304004b02d0012702c9013602ea013802d7010c00000024030400d502 7602f9027d02ea025c02e8026f02040000002d010400040000002d01020004000000f00105000800000026060f000600ffffffff01001000000026060f001600 ffffffff000025020000e5010000de020000da02000008000000fa0200000300000000000000040000002d010500040000002d01030008000000250302003202 f701d002c702040000002d01060004000000f001050007000000fc020000000000000000040000002d0105000c000000240304004802f7012702e7012d020a02 3402f9010c00000024030400ba02c702db02d702d502b402ce02c502040000002d010400040000002d01020004000000f00105000800000026060f000600ffff ffff01001000000026060f001600ffffffff00002502000003020000c00200003403000008000000fa0200000300000000000000040000002d01050004000000 2d010300080000002503020031021702b3021f03040000002d01060004000000f001050007000000fc020000000000000000040000002d0105000c0000002403 040045021a022702050227022902310219020c000000240304009f021c03bd023103bd020d03b3021d03040000002d010400040000002d01020004000000f001 05000800000026060f000600ffffffff01001000000026060f001600ffffffff0000d70400008a00000036050000b100000008000000fa020000030000000000 0000040000002d010500040000002d0103000800000025030200ed049d001f059d00040000002d01060004000000f001050007000000fc020000000000000000 040000002d0105000c00000024030400f9048c00d9049d00f904ad00ef049d000c000000240304001305ae0033059d0013058d001d059d00040000002d010400 040000002d01020004000000f00105000800000026060f000600ffffffff01001000000026060f001600ffffffff0000b9040000e4000000360500000b010000 08000000fa0200000300000000000000040000002d010500040000002d0103000800000025030200cf04f7001f05f700040000002d01060004000000f0010500 07000000fc020000000000000000040000002d0105000c00000024030400db04e600bb04f700db040701d104f7000c00000024030400130508013305f7001305 e7001d05f700040000002d010400040000002d01020004000000f00105000800000026060f000600ffffffff01001000000026060f001600ffffffff0000d704 0000b601000036050000dd01000008000000fa0200000300000000000000040000002d010500040000002d0103000800000025030200ed04c9011f05c9010400 00002d01060004000000f001050007000000fc020000000000000000040000002d0105000c00000024030400f904b801d904c901f904d901ef04c9010c000000 240304001305da013305c9011305b9011d05c901040000002d010400040000002d01020004000000f00105000800000026060f000600ffffffff010010000000 26060f001600ffffffff0000b90400002e020000360500005502000008000000fa0200000300000000000000040000002d010500040000002d01030008000000 25030200cf0441021f054102040000002d01060004000000f001050007000000fc020000000000000000040000002d0105000c00000024030400db043002bb04 4102db045102d10441020c000000240304001305520233054102130531021d054102040000002d010400040000002d01020004000000f0010500080000002606 0f000600ffffffff01001000000026060f001600ffffffff00009b0400008802000036050000af02000008000000fa0200000300000000000000040000002d01 0500040000002d0103000800000025030200b1049b021f059b02040000002d01060004000000f001050007000000fc020000000000000000040000002d010500 0c00000024030400bd048a029d049b02bd04ab02b3049b020c000000240304001305ac0233059b0213058b021d059b02040000002d010400040000002d010200 04000000f00105000800000026060f000600ffffffff01001000000026060f001600ffffffff00007d040000e2020000360500000903000008000000fa020000 0300000000000000040000002d010500040000002d01030008000000250302009304f5021f05f502040000002d01060004000000f001050007000000fc020000 000000000000040000002d0105000c000000240304009f04e4027f04f5029f0405039504f5020c00000024030400130506033305f5021305e5021d05f5020400 00002d010400040000002d01020004000000f00105000800000026060f000600ffffffff01001000000026060f001600ffffffff00005f0400003c0300003605 00006303000008000000fa0200000300000000000000040000002d010500040000002d010300080000002503020075044f031f054f03040000002d0106000400 0000f001050007000000fc020000000000000000040000002d0105000c0000002403040081043e0361044f0381045f0377044f030c0000002403040013056003 33054f0313053f031d054f03040000002d010400040000002d01020004000000f00105000800000026060f000600ffffffff0100040000002d010000030000000000}}}}}\sectd \ltrsect\linex0\headery709\footery709\colsx709\endnhere\pgbrdropt32\sectdefaultcl\sftnbj {\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid7552160 \par }\pard\plain \ltrpar\s23\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af0\afs20\alang1025 \ltrch\fcs0 \b\fs20\lang1033\langfe1042\cgrid\langnp1033\langfenp1042 {\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid7552160 Figure }{\field{\*\fldinst {\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid7552160 SEQ Figure \\* ARABIC }}{\fldrslt {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1024\langfe1024\noproof\insrsid7552160 1}}}\sectd \ltrsect \linex0\headery709\footery709\colsx709\endnhere\pgbrdropt32\sectdefaultcl\sftnbj {\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid7552160 . The 'logical database service\rquote }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 \par }\pard\plain \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs20\alang1025 \ltrch\fcs0 \fs20\lang1033\langfe1042\cgrid\langnp1033\langfenp1042 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 \par Whatever the case, there are two key implementation details: \par \par {\pntext\pard\plain\ltrpar \rtlch\fcs1 \af3\afs20 \ltrch\fcs0 \f3\fs20\lang2057\langfe1042\langnp2057 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li360\ri0\widctlpar\jclisttab\tx360\wrapdefault{\*\pn \pnlvlblt\ilvl0\ls11\pnrnot0 \pnf3\pnstart1\pnindent360\pnsp120\pnhang {\pntxtb \'b7}}\faauto\ls11\adjustright\rin0\lin360\itap0 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 The Transaction Manager is used to put a boundary around the quantit y of work that constitutes a single, atomic, transaction. \par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault{\*\pn \pnlvlcont\ilvl0\ls0\pnrnot0\pndec }\faauto\adjustright\rin0\lin0\itap0 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 \par {\pntext\pard\plain\ltrpar \rtlch\fcs1 \af3\afs20 \ltrch\fcs0 \f3\fs20\lang2057\langfe1042\langnp2057 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li360\ri0\widctlpar\jclisttab\tx360\wrapdefault{\*\pn \pnlvlblt\ilvl0\ls11\pnrnot0 \pnf3\pnstart1\pnindent360\pnsp120\pnhang {\pntxtb \'b7}}\faauto\ls11\adjustright\rin0\lin360\itap0 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 The client does not need to know what data resources, and which Application Service processes, have been called to operate the transaction. \par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\adjustright\rin0\lin0\itap0 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 \par }\pard\plain \ltrpar\s3\ql \li0\ri0\sb120\sa120\keepn\widctlpar\noline\wrapdefault\faauto\outlinelevel2\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\ul\lang1033\langfe1042\cgrid\langnp1033\langfenp1042 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 The Scalability trap \par }\pard\plain \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs20\alang1025 \ltrch\fcs0 \fs20\lang1033\langfe1042\cgrid\langnp1033\langfenp1042 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1024\langfe1024\noproof\insrsid7552160 {\shp{\*\shpinst\shpleft72\shptop1092\shpright8568\shpbottom4548\shpfhdr0\shpbxcolumn\shpbxignore\shpbypara\shpbyignore\shpwr1\shpwrk0\shpfblwtxt0\shpz0\shplid1026 {\sp{\sn shapeType}{\sv 202}}{\sp{\sn fFlipH}{\sv 0}}{\sp{\sn fFlipV}{\sv 0}}{\sp{\sn lTxid}{\sv 65536}}{\sp{\sn fillColor}{\sv 12632256}}{\sp{\sn fillOpacity}{\sv 32768}} {\sp{\sn fFilled}{\sv 1}}{\sp{\sn fLayoutInCell}{\sv 0}}{\sp{\sn fLayoutInCell}{\sv 0}}{\shptxt \ltrpar \pard\plain \ltrpar\s6\qc \li0\ri0\keepn\widctlpar\wrapdefault\faauto\outlinelevel5\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af0\afs20\alang1025 \ltrch\fcs0 \b\fs20\ul\lang2057\langfe1042\cgrid\langnp2057\langfenp1042 {\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid7552160 Data Clustering \par }\pard\plain \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs20\alang1025 \ltrch\fcs0 \fs20\lang1033\langfe1042\cgrid\langnp1033\langfenp1042 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 \par Although many d atabase nowadays are very large, it is commonly the case that only a small fraction of the database is busy. For example, in a warehousing system, you may find that new Orders are entered Monday , and naturally since they are all entered in a fairly short period of time, the order lines physically packed in the database, on Tuesday morning the ordered goods are picked from stock, on Tuesday afternoon they are dispatched, on Wednesday morning they are invoiced, and then very little happens to that bit of th e database thereafter (although payments presumably come dribbling n over the next three months). For a few days one small part of your database is subject to intensive activity, and as time passes this little window moves on. \par \par The problem is exacerbated by indexes - in particular primary key indexes generated by meaningless sequential numbers. You might pack 10,000 order lines for Monday into 200 blocks of the database, but you might pack the primary key values for those order lines into just 20, very stre ssed, blocks. \par }}}{\shprslt{\*\do\dobxcolumn\dobypara\dodhgt8192\dptxbx\dptxlrtb{\dptxbxtext\ltrpar \pard\plain \ltrpar\s6\qc \li0\ri0\keepn\widctlpar\wrapdefault\faauto\outlinelevel5\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af0\afs20\alang1025 \ltrch\fcs0 \b\fs20\ul\lang2057\langfe1042\cgrid\langnp2057\langfenp1042 {\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid7552160 Data Clustering \par }\pard\plain \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs20\alang1025 \ltrch\fcs0 \fs20\lang1033\langfe1042\cgrid\langnp1033\langfenp1042 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 \par Although many d atabase nowadays are very large, it is commonly the case that only a small fraction of the database is busy. For example, in a warehousing system, you may find that new Orders are entered Monday , and naturally since they are all entered in a fairly short period of time, the order lines physically packed in the database, on Tuesday morning the ordered goods are picked from stock, on Tuesday afternoon they are dispatched, on Wednesday morning they are invoiced, and then very little happens to that bit of th e database thereafter (although payments presumably come dribbling n over the next three months). For a few days one small part of your database is subject to intensive activity, and as time passes this little window moves on. \par \par The problem is exacerbated by indexes - in particular primary key indexes generated by meaningless sequential numbers. You might pack 10,000 order lines for Monday into 200 blocks of the database, but you might pack the primary key values for those order lines into just 20, very stre ssed, blocks. \par }}\dpx72\dpy1092\dpxsize8496\dpysize3456\dpfillfgcr255\dpfillfgcg255\dpfillfgcb255\dpfillbgcr192\dpfillbgcg192\dpfillbgcb192\dpfillpat1\dplinew15\dplinecor0\dplinecog0\dplinecob0}}}}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 In theory, there are numerous strategic advantages to using a TPM. So what could possibly go wrong ? The problem arises through a combination of three characteristics - a high degree of concurrency, tight clustering of current data(see side -bar), and distributed transactions. Unless you have considered the risk of this combination, and catered for it correctly in your design, your application }{\rtlch\fcs1 \ab\af0 \ltrch\fcs0 \b\ul\lang2057\langfe1042\langnp2057\insrsid7552160 will not scale}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 . \par The most significant feature, in fact, is the }{\rtlch\fcs1 \ab\ai\af0 \ltrch\fcs0 \b\i\lang2057\langfe1042\langnp2057\insrsid7552160 distributed transaction}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 . High concurre ncy and packed data invariably lead to problems of scalability, but putting distributed transactions on top of the other two is a sure-fire route to hitting a brick wall. Distributed transactions require a }{\rtlch\fcs1 \ab\ai\af0 \ltrch\fcs0 \b\i\lang2057\langfe1042\langnp2057\insrsid7552160 two-phase commit}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 , and two-phase commits introduce a phenomenon that does not appear anywhere else in Oracle - block-level locking. \par \par Unfortunately, if you are using a TPM, it is very easy to introduce distributed transactions to your system without realising that you are doing so. Fortunately, if you are aware of the danger, it is (probably) possible to avoid the issue. \par \par Look at Figure 1 again. If your client program performs a business task that makes use of }{\rtlch\fcs1 \ab\ai\af0 \ltrch\fcs0 \b\i\lang2057\langfe1042\langnp2057\insrsid7552160 App Serv 1}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 and }{\rtlch\fcs1 \ab\ai\af0 \ltrch\fcs0 \b\i\lang2057\langfe1042\langnp2057\insrsid7552160 App Serv 7}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 to record some changes to the system - perhaps by moving data from the }{\rtlch\fcs1 \ab\ai\af0 \ltrch\fcs0 \b\i\lang2057\langfe1042\langnp2057\insrsid7552160 Other DB}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 to the } {\rtlch\fcs1 \ab\ai\af0 \ltrch\fcs0 \b\i\lang2057\langfe1042\langnp2057\insrsid7552160 Oracle DB}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 - then a }{\rtlch\fcs1 \ab\ai\af0 \ltrch\fcs0 \b\i\lang2057\langfe1042\langnp2057\insrsid7552160 distributed transaction}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 , and an associated }{\rtlch\fcs1 \ab\ai\af0 \ltrch\fcs0 \b\i\lang2057\langfe1042\langnp2057\insrsid7552160 two-phase commit}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 is unavoidable. On the other hand, if your client program performs a business task that makes use of }{ \rtlch\fcs1 \ab\ai\af0 \ltrch\fcs0 \b\i\lang2057\langfe1042\langnp2057\insrsid7552160 App Serv 1}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 and }{\rtlch\fcs1 \ab\ai\af0 \ltrch\fcs0 \b\i\lang2057\langfe1042\langnp2057\insrsid7552160 App Serv 2}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 to record some changes to the syst em - perhaps one is a customer update and the other is a ledger update - all the activity is within a single database and you may be forgiven for thinking that your actions would not register as a }{\rtlch\fcs1 \ab\ai\af0 \ltrch\fcs0 \b\i\lang2057\langfe1042\langnp2057\insrsid7552160 distributed transaction}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 . \par \par This is where the trap lies - if you have two application servers connected to an Oracle database, they will be running as two different Oracle sessions. Two different sessions almost invariably means two different }{\rtlch\fcs1 \ab\ai\af0 \ltrch\fcs0 \b\i\lang2057\langfe1042\langnp2057\insrsid7552160 local}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 transactions from the database perspective - even though those two }{\rtlch\fcs1 \ab\ai\af0 \ltrch\fcs0 \b\i\lang2057\langfe1042\langnp2057\insrsid7552160 local}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 transactions may be coupled as a single }{\rtlch\fcs1 \ab\ai\af0 \ltrch\fcs0 \b\i\lang2057\langfe1042\langnp2057\insrsid7552160 global}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 transaction at the level of the transaction monitors (TM). Oracle is quite clever about recognising that two sessions are involved in the same global transaction. Nevertheless there are various configura tions of TPM systems which will allow you (the end-user/programmer) to do something which is clearly dedicated to a single Oracle database, but which will result in the database thinking it is participating in a proper distributed transaction. If this occ urs, then the two-phase commit appears, and your scaling problems begin. \par \par }\pard\plain \ltrpar\s3\ql \li0\ri0\sb120\sa120\keepn\widctlpar\noline\wrapdefault\faauto\outlinelevel2\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\ul\lang1033\langfe1042\cgrid\langnp1033\langfenp1042 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 The two-phase commit \par }\pard\plain \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs20\alang1025 \ltrch\fcs0 \fs20\lang1033\langfe1042\cgrid\langnp1033\langfenp1042 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 So what is a }{\rtlch\fcs1 \ab\ai\af0 \ltrch\fcs0 \b\i\lang2057\langfe1042\langnp2057\insrsid7552160 two-phase commit}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 , and why does it have such a terrible impact. Let's start with a real-world example of what goes wrong without the two-phase commit. \par \par Imagine you are an oil-trader, and you have two other companies on two different phone lines - one of them is prepared to sell you a cargo (500,000 barrels) of Brent Crude at $19.50 per barrel, the other is prepared to buy at $19.60 per barrel. So you say to the seller 'Done', and as you do, the line to the buyer does dead. You phone them back and when you get through to them a couple of minutes later they say "Sorry, I got a better offer while I was waiting". You are holding $10M of crude oil, an empty bank account, and no buyer in sight. An equally painful, though financially different, problem arises if you say "Done" to the buyer first, you end up committed to supply a boatload of oil with no stock in sight. \par \par So let's introduce the two-phase commit to our oil-trading. You say to the seller "Will you hold at $19.50 for 10 minutes ?", if the seller agrees, you go to t he buyer and say "If I get back to you inside 10 minutes will you buy at $19.60?". If the buyer agrees you go back the seller and say "Done", then go back to the buyer and say "Done". The worst case scenario is that you say "Done" to the seller, and the phone dies - you still have 10 minutes to reconnect with the buyer before everything could go wrong. \par \par This is almost exactly the same as the two-phase commit. The transaction manager (TM) is the oil trader in the middle, the databases correspond to the seller and buyer. The first phase of negotiations is called the }{\rtlch\fcs1 \ab\ai\af0 \ltrch\fcs0 \b\i\lang2057\langfe1042\langnp2057\insrsid7552160 prepare}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 phase, the second is the }{\rtlch\fcs1 \ab\ai\af0 \ltrch\fcs0 \b\i\lang2057\langfe1042\langnp2057\insrsid7552160 commit}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 phase. In principle there is only a very tiny gap between the two phases to minimise the window of opportunity for errors. However, there are two points we haven't yet considered. \par \par One simple, but very important, point is that in the database environment the negotiations in the }{\rtlch\fcs1 \ab\ai\af0 \ltrch\fcs0 \b\i\lang2057\langfe1042\langnp2057\insrsid7552160 prepare}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 phase do }{\rtlch\fcs1 \ab\af0 \ltrch\fcs0 \b\ul\lang2057\langfe1042\langnp2057\insrsid7552160 not}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 include a deadline - the transaction manager simply travels round each database in turn saying 'can you promise that you will be able to commit when I next get back to you ?'; the database sets itself up for the deal, sends back an affirmative, and then waits - indefinitely - for the call back. \par \par The second point can best be explained by going back to our oil-trade rs. Review the situation from the point of the seller - they can't do anything with their cargo for 10 minutes, it has to be locked up, waiting for you to decide whether or not you are going to buy it. Stranger still, if someone said to them - "how many cargoes have you sold today ?" any answer they gave would be a little ambiguous; for a brief period of time you (the TM, or trader in the middle) know that you have bought it, but they (the seller) do not know that they have sold it. \par \par If we translate this second point into Oracle database terms, it means that not only is the relevant row locked against }{\rtlch\fcs1 \ab\ai\af0 \ltrch\fcs0 \b\i\lang2057\langfe1042\langnp2057\insrsid7552160 updates}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 , it is also locked against }{\rtlch\fcs1 \ab\ai\af0 \ltrch\fcs0 \b\i\lang2057\langfe1042\langnp2057\insrsid7552160 selects}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 - the record cannot be read. In fact (for technical reasons relating to the way in which Oracle handles read consistency at the block level) for the period of time between the }{\rtlch\fcs1 \ab\ai\af0 \ltrch\fcs0 \b\i\lang2057\langfe1042\langnp2057\insrsid7552160 prepare}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 and the }{\rtlch\fcs1 \ab\ai\af0 \ltrch\fcs0 \b\i\lang2057\langfe1042\langnp2057\insrsid7552160 commit}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 , the }{\rtlch\fcs1 \ab\af0 \ltrch\fcs0 \b\ul\lang2057\langfe1042\langnp2057\insrsid7552160 entire block}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 holding the updated row is locked against both writers }{\rtlch\fcs1 \ab\af0 \ltrch\fcs0 \b\ul\lang2057\langfe1042\langnp2057\insrsid7552160 and readers}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 . The impact can be devastating. \par \par }\pard\plain \ltrpar\s3\ql \li0\ri0\sb120\sa120\keepn\widctlpar\noline\wrapdefault\faauto\outlinelevel2\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\ul\lang1033\langfe1042\cgrid\langnp1033\langfenp1042 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 Design and Test \par }\pard\plain \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs20\alang1025 \ltrch\fcs0 \fs20\lang1033\langfe1042\cgrid\langnp1033\langfenp1042 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 We said earlier on that one of the fe atures of two-phase commit was that "in principle there is only a very tiny gap between the two phases". In practice, this may be true; but when you have 20 processes busy doing updates, and 50 processes executing queries around a few blocks which are inv olved in two-phase commits, the "tiny gaps" can add up to a huge amount of lost time. \par \par Look again at Figure 1, and think about the minimum number of steps needed to commit a transaction involving just two application services. A typical sequence of events might be: \par \par \ltrrow}\trowd \irow0\irowband0\ltrrow\ts11\trqc\trgaph108\trleft-108\trbrdrt\brdrs\brdrw15\brdrcf1 \trbrdrl\brdrs\brdrw15\brdrcf1 \trbrdrb\brdrs\brdrw15\brdrcf1 \trbrdrr\brdrs\brdrw15\brdrcf1 \trbrdrh\brdrs\brdrw15\brdrcf1 \trbrdrv\brdrs\brdrw15\brdrcf1 \trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 \clcfpat1\clcbpat8\clshdng10000\cltxlrtb\clftsWidth3\clwWidth761\clcbpatraw8\clcfpatraw1\clshdngraw10000 \cellx653\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 \clcfpat1\clcbpat8\clshdng10000\cltxlrtb\clftsWidth3\clwWidth1889\clcbpatraw8\clcfpatraw1\clshdngraw10000 \cellx2542\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 \clcfpat1\clcbpat8\clshdng10000\cltxlrtb\clftsWidth3\clwWidth1756\clcbpatraw8\clcfpatraw1\clshdngraw10000 \cellx4298\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 \clcfpat1\clcbpat8\clshdng10000\cltxlrtb\clftsWidth3\clwWidth1789\clcbpatraw8\clcfpatraw1\clshdngraw10000 \cellx6087\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \ab\af0 \ltrch\fcs0 \b\lang2057\langfe1042\langnp2057\insrsid7552160 Time\cell TM sends\cell App serv 1 sends\cell App Serv 2 sends\cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \ab\af0 \ltrch\fcs0 \b\lang2057\langfe1042\langnp2057\insrsid7552160 \trowd \irow0\irowband0\ltrrow\ts11\trqc\trgaph108\trleft-108\trbrdrt\brdrs\brdrw15\brdrcf1 \trbrdrl\brdrs\brdrw15\brdrcf1 \trbrdrb\brdrs\brdrw15\brdrcf1 \trbrdrr\brdrs\brdrw15\brdrcf1 \trbrdrh \brdrs\brdrw15\brdrcf1 \trbrdrv\brdrs\brdrw15\brdrcf1 \trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr \brdrs\brdrw15\brdrcf1 \clcfpat1\clcbpat8\clshdng10000\cltxlrtb\clftsWidth3\clwWidth761\clcbpatraw8\clcfpatraw1\clshdngraw10000 \cellx653\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr \brdrs\brdrw15\brdrcf1 \clcfpat1\clcbpat8\clshdng10000\cltxlrtb\clftsWidth3\clwWidth1889\clcbpatraw8\clcfpatraw1\clshdngraw10000 \cellx2542\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr \brdrs\brdrw15\brdrcf1 \clcfpat1\clcbpat8\clshdng10000\cltxlrtb\clftsWidth3\clwWidth1756\clcbpatraw8\clcfpatraw1\clshdngraw10000 \cellx4298\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr \brdrs\brdrw15\brdrcf1 \clcfpat1\clcbpat8\clshdng10000\cltxlrtb\clftsWidth3\clwWidth1789\clcbpatraw8\clcfpatraw1\clshdngraw10000 \cellx6087\row \ltrrow}\trowd \irow1\irowband1\ltrrow\ts11\trqc\trgaph108\trleft-108\trbrdrt\brdrs\brdrw15\brdrcf1 \trbrdrl \brdrs\brdrw15\brdrcf1 \trbrdrb\brdrs\brdrw15\brdrcf1 \trbrdrr\brdrs\brdrw15\brdrcf1 \trbrdrh\brdrs\brdrw15\brdrcf1 \trbrdrv\brdrs\brdrw15\brdrcf1 \trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3\tblind0\tblindtype3 \clvertalt\clbrdrt \brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth761\clshdrawnil \cellx653\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb \brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth1889\clshdrawnil \cellx2542\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth1756\clshdrawnil \cellx4298\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth1789\clshdrawnil \cellx6087 \pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 T1\cell App Serv 1 prepare\cell \cell \cell }\pard \ltrpar \ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 \trowd \irow1\irowband1\ltrrow\ts11\trqc\trgaph108\trleft-108\trbrdrt\brdrs\brdrw15\brdrcf1 \trbrdrl\brdrs\brdrw15\brdrcf1 \trbrdrb\brdrs\brdrw15\brdrcf1 \trbrdrr\brdrs\brdrw15\brdrcf1 \trbrdrh\brdrs\brdrw15\brdrcf1 \trbrdrv\brdrs\brdrw15\brdrcf1 \trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3\tblind0\tblindtype3 \clvertalt\clbrdrt \brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth761\clshdrawnil \cellx653\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb \brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth1889\clshdrawnil \cellx2542\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth1756\clshdrawnil \cellx4298\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth1789\clshdrawnil \cellx6087\row \ltrrow}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 T2\cell \cell Prepared\cell \cell }\pard \ltrpar \ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 \trowd \irow2\irowband2\ltrrow\ts11\trqc\trgaph108\trleft-108\trbrdrt\brdrs\brdrw15\brdrcf1 \trbrdrl\brdrs\brdrw15\brdrcf1 \trbrdrb\brdrs\brdrw15\brdrcf1 \trbrdrr\brdrs\brdrw15\brdrcf1 \trbrdrh\brdrs\brdrw15\brdrcf1 \trbrdrv\brdrs\brdrw15\brdrcf1 \trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3\tblind0\tblindtype3 \clvertalt\clbrdrt \brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth761\clshdrawnil \cellx653\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb \brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth1889\clshdrawnil \cellx2542\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth1756\clshdrawnil \cellx4298\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth1789\clshdrawnil \cellx6087\row \ltrrow}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 T3\cell App Serv 2 prepare\cell \cell \cell }\pard \ltrpar \ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 \trowd \irow3\irowband3\ltrrow\ts11\trqc\trgaph108\trleft-108\trbrdrt\brdrs\brdrw15\brdrcf1 \trbrdrl\brdrs\brdrw15\brdrcf1 \trbrdrb\brdrs\brdrw15\brdrcf1 \trbrdrr\brdrs\brdrw15\brdrcf1 \trbrdrh\brdrs\brdrw15\brdrcf1 \trbrdrv\brdrs\brdrw15\brdrcf1 \trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3\tblind0\tblindtype3 \clvertalt\clbrdrt \brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth761\clshdrawnil \cellx653\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb \brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth1889\clshdrawnil \cellx2542\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth1756\clshdrawnil \cellx4298\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth1789\clshdrawnil \cellx6087\row \ltrrow}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 T4\cell \cell \cell Prepared\cell }\pard \ltrpar \ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 \trowd \irow4\irowband4\ltrrow\ts11\trqc\trgaph108\trleft-108\trbrdrt\brdrs\brdrw15\brdrcf1 \trbrdrl\brdrs\brdrw15\brdrcf1 \trbrdrb\brdrs\brdrw15\brdrcf1 \trbrdrr\brdrs\brdrw15\brdrcf1 \trbrdrh\brdrs\brdrw15\brdrcf1 \trbrdrv\brdrs\brdrw15\brdrcf1 \trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3\tblind0\tblindtype3 \clvertalt\clbrdrt \brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth761\clshdrawnil \cellx653\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb \brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth1889\clshdrawnil \cellx2542\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth1756\clshdrawnil \cellx4298\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth1789\clshdrawnil \cellx6087\row \ltrrow}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 T5\cell App Serv 1 commit\cell \cell \cell }\pard \ltrpar \ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 \trowd \irow5\irowband5\ltrrow\ts11\trqc\trgaph108\trleft-108\trbrdrt\brdrs\brdrw15\brdrcf1 \trbrdrl\brdrs\brdrw15\brdrcf1 \trbrdrb\brdrs\brdrw15\brdrcf1 \trbrdrr\brdrs\brdrw15\brdrcf1 \trbrdrh\brdrs\brdrw15\brdrcf1 \trbrdrv\brdrs\brdrw15\brdrcf1 \trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3\tblind0\tblindtype3 \clvertalt\clbrdrt \brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth761\clshdrawnil \cellx653\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb \brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth1889\clshdrawnil \cellx2542\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth1756\clshdrawnil \cellx4298\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth1789\clshdrawnil \cellx6087\row \ltrrow}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 T6\cell \cell Committed\cell \cell }\pard \ltrpar \ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 \trowd \irow6\irowband6\ltrrow\ts11\trqc\trgaph108\trleft-108\trbrdrt\brdrs\brdrw15\brdrcf1 \trbrdrl\brdrs\brdrw15\brdrcf1 \trbrdrb\brdrs\brdrw15\brdrcf1 \trbrdrr\brdrs\brdrw15\brdrcf1 \trbrdrh\brdrs\brdrw15\brdrcf1 \trbrdrv\brdrs\brdrw15\brdrcf1 \trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3\tblind0\tblindtype3 \clvertalt\clbrdrt \brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth761\clshdrawnil \cellx653\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb \brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth1889\clshdrawnil \cellx2542\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth1756\clshdrawnil \cellx4298\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth1789\clshdrawnil \cellx6087\row \ltrrow}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 T7\cell App Serv 2 commit\cell \cell \cell }\pard \ltrpar \ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 \trowd \irow7\irowband7\ltrrow\ts11\trqc\trgaph108\trleft-108\trbrdrt\brdrs\brdrw15\brdrcf1 \trbrdrl\brdrs\brdrw15\brdrcf1 \trbrdrb\brdrs\brdrw15\brdrcf1 \trbrdrr\brdrs\brdrw15\brdrcf1 \trbrdrh\brdrs\brdrw15\brdrcf1 \trbrdrv\brdrs\brdrw15\brdrcf1 \trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3\tblind0\tblindtype3 \clvertalt\clbrdrt \brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth761\clshdrawnil \cellx653\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb \brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth1889\clshdrawnil \cellx2542\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth1756\clshdrawnil \cellx4298\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth1789\clshdrawnil \cellx6087\row \ltrrow}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 T8\cell \cell \cell Committed\cell }\pard \ltrpar \ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 \trowd \irow8\irowband8\lastrow \ltrrow\ts11\trqc\trgaph108\trleft-108\trbrdrt \brdrs\brdrw15\brdrcf1 \trbrdrl\brdrs\brdrw15\brdrcf1 \trbrdrb\brdrs\brdrw15\brdrcf1 \trbrdrr\brdrs\brdrw15\brdrcf1 \trbrdrh\brdrs\brdrw15\brdrcf1 \trbrdrv\brdrs\brdrw15\brdrcf1 \trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth761\clshdrawnil \cellx653\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl \brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth1889\clshdrawnil \cellx2542\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr \brdrs\brdrw15\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth1756\clshdrawnil \cellx4298\clvertalt\clbrdrt\brdrs\brdrw15\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth1789\clshdrawnil \cellx6087\row }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\adjustright\rin0\lin0\itap0 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 \par In a busy system, the necessary task-switching that takes place could easily leave a window of several milliseconds between each pair of steps. It sounds small, but it doesn't take a very high degree of concurrency focused on a relatively small number of blocks before the system starts to suffer dramatic time losses. On one recent site visit, I found that there were periods during the day when the overall time loss in this 'tiny window' actually exceeded the time lost waiting for physical I/O. In particu lar, }{\rtlch\fcs1 \ab\af0 \ltrch\fcs0 \b\ul\lang2057\langfe1042\langnp2057\insrsid7552160 queries}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 that should have resulted in sub-second response times were occasionally taking as much as ten seconds to complete. \par \par The problem, un fortunately, is terribly pernicious. Even with fairly thorough testing you may fail to notice the problem because it requires concurrency, and the correct data distribution. If your test machine has four CPUs running 150 processes, and your production mac h ine has 16 CPUs running 600 processes, your standard test suite may not generate enough collisions to indicate the potential scale of the problem. You need to know what can go wrong, design a simple harness for your general approach, and then devise a tes t aimed at stressing the system at the point most likely to cause the problem. For example, you could write two very simple Application Services, each one updating its own one-block table, then prepare an end-user task that repeatedly calls both updates. S ee what effect multiple copies of this have whilst simultaneously querying the two tables. For the pure technician, the most important symptom to watch out for is the occurrence of TX locks requested in mode 4 - and you may have to run with a full 10046 t race running as they are likely to come and go very quickly. \par \par The real question, of course, is how you can avoid the problem. The answer depends on the TPM software you are using, and the way in which you have decided to use it. \par Any form of persistent queu eing (in other words using intermediate files of a format designated by the TPM software to queue information from one system to another) is inevitably going result in two-phase commits - so try to avoid using persistent queues. \par \par If you have to use persistent queues, consider "over-using" them - create a clone of the TPM persistent queue inside the Oracle database and use it when transferring from the TPM persistent queue to the Oracle database. Do }{\rtlch\fcs1 \ab\ai\af0 \ltrch\fcs0 \b\i\lang2057\langfe1042\langnp2057\insrsid7552160 not}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 transfer data from TPM persistent queue directly into the critical, high activity, areas of the database. This still gives you the potential to suffer from the problem of two-phase commits, but at least it may not be blocking more frequent, and urgent, activities. \par \par Apart from this, the options are very much TPM-dependent. Tuxedo, for example, has a feature that lets you split application services into }{\rtlch\fcs1 \ab\ai\af0 \ltrch\fcs0 \b\i\lang2057\langfe1042\langnp2057\insrsid7552160 groups}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 . If a client program calls only services within a single group, then the transaction is recognised by Oracle as a single transaction, and two-phase commi t is not required. If a client program calls services from more than one group, then the transaction is considered to be a distributed transaction, and the two-phase commit is invoked \par \par }\pard\plain \ltrpar\s3\ql \li0\ri0\sb120\sa120\keepn\widctlpar\noline\wrapdefault\faauto\outlinelevel2\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\ul\lang1033\langfe1042\cgrid\langnp1033\langfenp1042 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 Conclusion; \par }\pard\plain \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs20\alang1025 \ltrch\fcs0 \fs20\lang1033\langfe1042\cgrid\langnp1033\langfenp1042 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 There are many arguments in favour of accessing your Oracle database through a transaction processing monitor (TPM), but it is possible to introduce distributed transaction processing mechanisms into a system that is not really a distributed system. If this results in a high volume of two-phase commits then the r e sulting block-level contention could stop the system from scaling to any great degree. It is absolutely critical that you create a proper harness as the first stage of development so that you can build sample test cases quickly and easily to check the sid e effects of your design strategy. \par }{\rtlch\fcs1 \ai\af0 \ltrch\fcs0 \i\insrsid7552160 \par \par }{\rtlch\fcs1 \ab\ai\af0 \ltrch\fcs0 \b\i\ul\insrsid7552160 Author Notes: \par }{\rtlch\fcs1 \ai\af0 \ltrch\fcs0 \i\insrsid7552160 Jonathan Lewis is a freelance consultant, based in the UK, with more than 15 years experience of Oracle. He specializes in physical database design and the strategic use of the Oracle database engine, and is author of 'Practical Oracle 8i - Designing Efficient Databases' published by Addison-Wesley. He can be contacted on +44 (0)7973-188785, or e-mailed at }{\field{\*\fldinst {\rtlch\fcs1 \ai\af0 \ltrch\fcs0 \i\insrsid7552160 HYPERLINK mailto:jonathan@jlcomp.demon.co.uk }{\rtlch\fcs1 \ai\af0 \ltrch\fcs0 \i\insrsid9923908 {\*\datafield 00d0c9ea79f9bace118c8200aa004ba90b02000000170000001c0000006a006f006e0061007400680061006e0040006a006c0063006f006d0070002e00640065006d006f006e002e0063006f002e0075006b000000e0c9ea79f9bace118c8200aa004ba90b460000006d00610069006c0074006f003a006a006f006e006100 7400680061006e0040006a006c0063006f006d0070002e00640065006d006f006e002e0063006f002e0075006b00000000}}}{\fldrslt {\rtlch\fcs1 \af0 \ltrch\fcs0 \cs22\ul\cf2\insrsid7552160 jonathan@jlcomp.demon.co.uk}}}\sectd \ltrsect \linex0\headery709\footery709\colsx709\endnhere\pgbrdropt32\sectdefaultcl\sftnbj {\rtlch\fcs1 \ai\af0 \ltrch\fcs0 \i\insrsid7552160 Jonathan maintains a website at }{\field{\*\fldinst {\rtlch\fcs1 \ai\af0 \ltrch\fcs0 \i\insrsid7552160 HYPERLINK http://www.jlcomp.demon.co.uk }{\rtlch\fcs1 \ai\af0 \ltrch\fcs0 \i\insrsid9923908 {\*\datafield 00d0c9ea79f9bace118c8200aa004ba90b02000000170000001e00000068007400740070003a002f002f007700770077002e006a006c0063006f006d0070002e00640065006d006f006e002e0063006f002e0075006b000000e0c9ea79f9bace118c8200aa004ba90b3e00000068007400740070003a002f002f0077007700 77002e006a006c0063006f006d0070002e00640065006d006f006e002e0063006f002e0075006b002f00000000}}}{\fldrslt {\rtlch\fcs1 \af0 \ltrch\fcs0 \cs22\ul\cf2\insrsid7552160 http://www.jlcomp.demon.co.uk}}}\sectd \ltrsect \linex0\headery709\footery709\colsx709\endnhere\pgbrdropt32\sectdefaultcl\sftnbj {\rtlch\fcs1 \ai\af0 \ltrch\fcs0 \i\insrsid7552160 which hosts the 'Co-opeative Oracle Users' FAQ'. \par }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang2057\langfe1042\langnp2057\insrsid7552160 \par }}