Return-Path: Delivered-To: apmail-incubator-harmony-dev-archive@www.apache.org Received: (qmail 90201 invoked from network); 28 Jul 2006 14:56:11 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur.apache.org with SMTP; 28 Jul 2006 14:56:11 -0000 Received: (qmail 54472 invoked by uid 500); 28 Jul 2006 14:56:07 -0000 Delivered-To: apmail-incubator-harmony-dev-archive@incubator.apache.org Received: (qmail 54348 invoked by uid 500); 28 Jul 2006 14:56:06 -0000 Mailing-List: contact harmony-dev-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: harmony-dev@incubator.apache.org Delivered-To: mailing list harmony-dev@incubator.apache.org Received: (qmail 54337 invoked by uid 99); 28 Jul 2006 14:56:06 -0000 Received: from asf.osuosl.org (HELO asf.osuosl.org) (140.211.166.49) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 28 Jul 2006 07:56:06 -0700 X-ASF-Spam-Status: No, hits=0.5 required=10.0 tests=DNS_FROM_RFC_ABUSE,HTML_MESSAGE,SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (asf.osuosl.org: domain of mike.fursov@gmail.com designates 64.233.182.186 as permitted sender) Received: from [64.233.182.186] (HELO nf-out-0910.google.com) (64.233.182.186) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 28 Jul 2006 07:56:05 -0700 Received: by nf-out-0910.google.com with SMTP id x4so218958nfb for ; Fri, 28 Jul 2006 07:55:43 -0700 (PDT) DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=beta; d=gmail.com; h=received:message-id:date:from:to:subject:in-reply-to:mime-version:content-type:references; b=BQTtGgz2B/sBcmh82xwoz8pv8ca1zr2z9d8De35ukEsmm7ejMeNK3hYxbZNHckH2SsWklVhT+REgGMgYMQK2YhZqFsCuirLB4LJtx1MOjO66B1d7uzn+47DNWnvje2KZ3nfjVWaQlAYX9Cn9kcVMl3ae442g67PX3P7wrhNk3k8= Received: by 10.78.107.8 with SMTP id f8mr210465huc; Fri, 28 Jul 2006 07:55:43 -0700 (PDT) Received: by 10.78.193.11 with HTTP; Fri, 28 Jul 2006 07:55:43 -0700 (PDT) Message-ID: Date: Fri, 28 Jul 2006 21:55:43 +0700 From: "Mikhail Fursov" To: harmony-dev@incubator.apache.org Subject: Re: [drlvm] interface call devirtualization In-Reply-To: MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_9798_9893141.1154098543089" References: X-Virus-Checked: Checked by ClamAV on apache.org X-Spam-Rating: minotaur.apache.org 1.6.2 0/1000/N ------=_Part_9798_9893141.1154098543089 Content-Type: multipart/alternative; boundary="----=_Part_9799_11818707.1154098543089" ------=_Part_9799_11818707.1154098543089 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline Folks, I tried to fix devirtualizer to process interfaces. Still can't run such a big application like Eclipse but initial test in JIRA 957 works. The performance benefit of interface devirtualization for this test is rather small (14%) but the problem now not with devirtualizer but with loop optimizations that do not move vtable loading operation out of the loop. Here is a small report of what was done, how to use the patch and some notes on current DRLVM problems What was done: 1) Devirtualization of interface calls 2) Profile directed devirtualization for both interface and class calls 3) Two new options added that work only if there are an entry-backedge profile for a method and devirtualizer is ON. The first option is "opt::devirt::skip_interfaces" and if set to 'false' devirtualizer processes interfaces and selects a direct call target by method hotness profile. The second option is "opt::devirt::profile_selection" - if set to 'true' the devirtualizer selects direct calls target by hotness profile for normal methods (not interfaces) Files in attachment (I going to add it to JIRA in a minute) 1) patch.diff - the diff with changes + diff includes the previous changes posted by me to this thread that count the percent of virtual methods ... (see previous post or just skip it, this is not so important now) 2) em configuration file and run script for Windows: use these files to run the test. But fix paths in files first. 3) Initial test from Egor with decreased number of iterations: wait 30 seconds for each measurements is too much :) Notes: 1) VM CHA analysys (method iteration) does not work if root class is interface 2) RI works fast even for the first run: OSR ? 3) The slow version of method (generated by JET) is executed one extra time after method is recompiled, I hope we will fix it one day. 4) We really need to improve our loop optimizations. 5) It's still unclear if method hotness profile is useful for direct target selection in devirtualizer.. Thats all for today. Please try/check the diff and comment (JIRA 957) On 7/24/06, Mikhail Fursov wrote: > > On 24 Jul 2006 12:17:18 +0700, Egor Pasko < egor.pasko@gmail.com> wrote: > > > Interesting results! QuickQuestions: > > * did you include interface calls in your investigations. Or is it > > just invokevirtual that you tried? > > > I have no idea what was the way of calling a method. The result shows only > the percentage of actual calls of virtual methods on the top of class > hierarchy / number of total virtual calls. > > * Why do you count number of methods with mult-dispatches? I would > > count only interface calls having multiple dispatches. > > > I checked only methods with multiple virtual versions, because this is the > only case devirtualizer have a choice. If method is virtual but has only one > version (method is not overridden) it's impossible to make a mistake in > devirtualization :) > > > > For me it is interesting if > > the patch handles the situations when classes are loaded from time to > > time. We need to check each interface call for having multiple > > dispatches (at runtime). > > > But if we have a recompilation we can be sure that all of "hot" classes > and methods are already loaded. > > I created HARMONY-957 for the issue and attached my benchmark. You can > > put your patch there, please. > > > My patch is a hack in entry-backedge profiler code. So I will put it with > comments like 'this is just an example, not to be included to harmony code' > > OK, see you soon :) > > > Hope I finish it till the end of the week. Any help from other people > interested in harmony development is welcome :) > > + I'm going to ask Pavel Pervov who wants to refactor Class.h code to add > more methods to simplify CHA analysis. The way I look for the virtual copy > of method in superclass in my patch is really ugly. > > -- > Mikhail Fursov > > -- Mikhail Fursov ------=_Part_9799_11818707.1154098543089 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline Folks,
I tried to fix devirtualizer to process interfaces. Still can't run such a big application like Eclipse but initial test in JIRA 957 works.
The performance benefit of interface devirtualization for this test is rather small (14%) but the problem now not with devirtualizer but with loop optimizations that do not move vtable loading operation out of the loop.
Here is a small report of what was done, how to use the patch and some notes on current DRLVM problems

What was done:
1) Devirtualization of interface calls
2) Profile directed devirtualization for both interface and class calls
3) Two new options added that work only if there are an entry-backedge profile for a method and devirtualizer is ON.
The first option is "opt::devirt::skip_interfaces" and if set to 'false'  devirtualizer processes interfaces and selects a direct call target by method hotness profile.
The second option is "opt::devirt::profile_selection" - if set to 'true' the devirtualizer selects direct calls target by hotness profile for normal methods (not interfaces)

Files in attachment (I going to add it to JIRA in a minute)
1) patch.diff - the diff with changes
+ diff includes the previous changes posted by me to this thread that count the percent of virtual methods ... (see previous post or just skip it, this is not so important now)
2) em configuration file and run script for Windows: use these files to run the test. But fix paths in files first.
3) Initial test from Egor with decreased number of iterations: wait 30 seconds for each measurements is too much  :)

Notes:
1) VM CHA analysys (method iteration) does not work if root class is interface
2) RI works fast even for the first run: OSR ?
3) The slow version of method (generated by JET) is executed one extra time after method is recompiled, I hope we will fix it one day.
4) We really need to improve our loop optimizations.
5) It's still unclear if method hotness profile is useful for direct target selection in devirtualizer..

Thats all for today. Please try/check the diff and comment (JIRA 957)

On 7/24/06, Mikhail Fursov <mike.fursov@gmail.com> wrote:
On 24 Jul 2006 12:17:18 +0700, Egor Pasko < egor.pasko@gmail.com> wrote:
Interesting results! QuickQuestions:
* did you include interface calls in your investigations. Or is it
  just invokevirtual that you tried?

I have no idea what was the way of calling a method. The result shows only the percentage of actual calls of virtual methods on the top of class hierarchy / number of total virtual calls.

* Why do you count number of methods with mult-dispatches? I would
  count only interface calls having multiple dispatches.

I checked only methods with multiple virtual versions, because this is the only case devirtualizer have a choice. If method is virtual but has only one version (method is not overridden) it's impossible to make a mistake in devirtualization :)
 
For me it is interesting if
the patch handles the situations when classes are loaded from time to
time. We need to check each interface call for having multiple
dispatches (at runtime).

But if we have a recompilation we can be sure that all of "hot" classes and methods are already loaded.

I created HARMONY-957 for the issue and attached my benchmark. You can
put your patch there, please.

My patch is a hack in entry-backedge profiler code. So I will put it with comments like 'this is just an example, not to be included to harmony code'

OK, see you soon :)

Hope I finish it till the end of the week. Any help from other people interested in harmony development is welcome :)

+ I'm going to ask Pavel Pervov who wants to refactor Class.h code to add more methods to simplify CHA analysis. The way I look for the virtual copy of method in superclass in my patch is really ugly.

--
Mikhail Fursov




--
Mikhail Fursov ------=_Part_9799_11818707.1154098543089-- ------=_Part_9798_9893141.1154098543089 Content-Type: application/zip; name=patch.zip Content-Transfer-Encoding: base64 X-Attachment-Id: f_eq6oeqn3 Content-Disposition: attachment; filename="patch.zip" UEsDBBQAAgAIADip/DQhK20JIwEAAPwCAAAKAAAAZW0zLmNvbmZpZ7VSXWvCMBR9F/wVe5yKCnsp y2CrnXQTLV1ehIDU9moz0xu5SQX//VK74sf6sgfzcsM5J+echKR5ItGwtBqj3mmMu51upwYG39Ia 9hHwlT8L5yH/xcdnfBJNF71FxC/ObKSyQOzR855TJVHal27n4ZrrxyUikOdRiX/JEO0mvbXrVwnn JhUMzPdEaYCMKDYlGX0QeUKFxqMAzBNMIRMZqUMhrMvZCbdxvUmiFmuJgkBBYqDBBplSdUJ1p3v5 u6e6l/VF+S1gRPqU02CrKF68h7PgrGqQwb6WEj/ugQVzHi9Xb6/+ZzCZBo0mrpu7xv/wLXQG7Gs5 91s4QEtHnhOYXKuMjYZutcjWSbqDbAs3yjapXRsuC9ClZU/tdOj+okxUoxr+AFBLAwQUAAIACAC7 qPw0h9Pfji8CAABqBgAAEAAAAEludGZjQ2FsbGVyLmphdmGtVMGO0zAQvecrhp6cDZvuituWPSAQ UiXEgeWGEHLTaeWVY1fOuCys+u+M49Rx2oKQwIeknXkznjfzJqrdWUfwKPey9qR0/U4SLopCGUK3 kQ3C0tCmgecC+Oz8SqsG9latwWGHJMrFmUOZ5sTMyWCL9NG3wVHM58HXkST2bZSRGrQ1W8AndI3q EO7h9uZ4YqI/gl+N2L9PvSgORdFo2XWR4bLdaVD8wBYNdYl2ziMBRQnPqQFwGEBO7bl5PVvj20Vx uTMcyd6qGuPOm9RnJ+9Mn+gEmHc/JmNWNwGVGH3yxqCbDi3aRORlQ6QKP7/Z1SPH2xB/dok3ouyt MVM4KahOAki++RV409g2dBDIAmFHsGMdWddKw1qyBiQYa67XuFeOvNTqJ65hj65T7Luaj6nm06kM ZYpkLcdKsgr4JhD9xFVsioLXcWz1UQJsqyooM0pTWoN8J97/SCySO1Kqs2UJJ87gwrxblJ13+Fm1 eDaSsLKwQi4GX4Lc8OJm5Uc7N8Pg9x6ZX9cPePzbx/4G+vCjI2xr66lmoRvSRsw4/A5mUIHoI2uW bywQrod7R1M55DpZlijHbJTsH3hny/lWap30nPdm2PTYIqmMeCAubvvlK0i37fIhj3KKSgocs33m 4jLtgedPRcBJ0IpIY/JNhJ8bT2UzrKCLr3jfsIIMz5ERUk8mvPgn77isGxB9denD8uL+ZB3ONuHS oN+/WX64m1V5pqyILAqfFInbC4I+FL8AUEsDBBQAAgAIAOmo/DRVz19xOQ4AAEE5AAAKAAAAcGF0 Y2guZGlmZs0ba1PbOvbzZqb/QeXu7TiJQ3iUQsOjpYFSdhpgC5dPO+NxbCXRxa+1FQp3L/vb9xzJ 8lNO0pbeWX8gwdJ56Lylo5wHLn0YEOr3k9jpn364isMJ8+gw9Dzq8DBed6LoRevwx58XrV6vt5jO 34yY3rOEhQF5vbWzvbvdftHqdrvLgL6G8R0LpsQJo0eAeP+e9DY3tsw3pIsfm5vk/fsXLYJPTPk8 Dohh1FF12pHT7h1NKf9gO3fUndKbWUyTWei5Rnu/RZ5apNUdUT4LXeuTHbgeJXRsTVjgWrOQc5pw 657FfG57li9mGVdDNTFyZiYpw/qzNvlPq4tM2UlCY27ApJeHF799/gzUxHsNj4CJHJIG7mcpXLrI yOkdIXufJHe3kjnJhQHkYTauSUNmMPhv/aWB/AohTsK4wEIysqPBgHEa2zCLMA4MRunQh0dJbn1M pyww2iahgasbh9cgZAB+eQhf90m3yzjSE6rc3DN3QZVb2+bmTq5KtUzGe0cJdUIAS5X0i0th3ZTc fDk/Ozv9Yo1Obz5dnlgXx6NTskYfGF+rzxl+Pr6+Tqf8bt/bfc8Opv0v84Azn/79ejbnbvg1uB0B KEpMsp1KoKMVoRNTm9P0vdGofGA84cSZ2aBcaTcXtk9BRvIfC+zRCuBNqrEqiOOB9aQQ4nsBIEcg RhCDQsEmxHiZ8NjxIyOnaupE1iavXhE1NyNnaiTXzhaFjzv3o2tu88RQRJ+k4mrSS60BVhDQr9Vh g89YYhKxeiIRKOv5HDp36x78QQrCUvZ2zG2wlLd74PQFr08JU7935BdxnydfqO0+Gn4kHbzb6t6H zNWqs7CcVAHpWvv9zXWxWMJnlARzf0xjEk5S/cFcPwJM7kDOjmIW8ImxdlGZl+QTya/uv4I1s+4k CfuDGkKFivLWugCbc1ohnkaiDPlXxmfEn3ucRSDocegymkgkc+BnewtB0wABatjYVwS2IToFbolI RGOHBhypTGL67zkNHECG/+IoD6OMKAPnDGY0ZtwOHEpmDEJE7MweJXI3nI+BFzAoFZo+ArrDDZMk GS/4psCPLvAIXVg/Kfxkxly3WUBTjDzZzKqjIzkwu1lhSipydyJXB8Mgz/hxGEK0oXFhInpp6sUs scB07iGiCDcu8iY1FYQ803o+9kSol9AKovCexjFzXRpoceWm0O3ul4fKmukeiiXs18hVEH5HiGsG vWbTwIbAX4F3aeLELMI8VccyFIExVYkzK0NmsbECNA5DDyxuLixmYsO6KhO+zjBoGYZAmMfeZA4e kmJ1QLwyp4sgKrDV5I0PWLah7IK5D8LmxZeDYlQX7p1WFwK5mAP1kRYnPmVr5H6Z1bROIVidILGq CNQjskXdELnOepq0xxdqntflvwTRcjtYgrMpBRYYLaW+ClmzxshiWUgtS2vi8bxqTNVnDNXD3YI5 T/ohzevKq8q/KIVms1wQCvCpxO56PFBPNW4Q3cQCZ0+qYGjImYvTm8uSyObOjCZZLs0XokxCIb3K 01k1f6n09ohofv1VIDIAqm0YlZX3ywtsdzY3NtqywO5WNw264qKxTG8sG78ppP1gjfltgVftXSoJ M90jXWW1nlGd0gZ05dKviFBprV76wVC/0yG3IygpoBDBRAgxOApjTmRZgNtJsPOxDalJiIYwLE5g bGI79CXA34DmYxp58K+PxuCELsVJY+qFX4VdQAWEI4qb4cyWrJ6rwsNnqeRE3oidXEqqNrFYwDiz PaziXvkMa1qTOJnE03QSOyVPrOKw3XssphBBMbhV7ERDXNjFPI5hEVVgjAGG4Njw0x1oPZZpK6BV dFiNwUitagyHROTIP/+sFkPkqGI45WFt0KpZWqSJSMr908ng4KR3pKJFGcOhTODvyMZgITNmlfnq yrUBrtNXNvV/Vt3WdbtCvRtpC159HRthOAOV5yMJ7K+YIwZqmgWynAWlvFmQZykcRvp4GJXrAWRK lkJAmYGY0a/CiSHOahw9B1lIjBaG0aheeSC1tJAowJqFcKwvHzTLriy9gbXl4XolLgv1zkrlzmr8 Lo4Bi5wMCuKql+nYQAJeOAW/mJ4GNuwz9fUNPgl3B4MQVg1z4S+1feIn04bSC0YODsja6SgLBWqf n1BM5pBqBmsHB7lW1fdMbAcHaxBjmgu7NRJ67oAAkspxTkNQcmaDuqlXJYgOdXCwgOjhGjk4aCKx QRYHvsWo/xXgsY5uReBpAAq0Dw6a98DF5/zi4+WW4dgcJbvuQLyIMeyBUtbFV/UqrxqKj6Y2Xpoq tCFbU4rMA1WMkNIZbIORv5MfdbGKsPnUOl92Jj/7S07kZ99+Hj/Tnsa/2cYTXPj7Nj+US3e7+vN2 dcSWinGcDe0/qVPA0w9WSj0eYbmGlQd81mB9eAlQvWIZKU75aid6qe7LGW310ny/RdLUNtBzKDgp LT5fcnqAubFj7mDXYtd8IyWFMZ1goyE1t1hmKyt5DBwLEZa7DMiEwl2AQZcT/mXxTMarwo1T7SwA fd62iDjn/QUqFTapOMJJ7J2Ozv3I+zk9qRL6JaZfmavrQG1tiA4UfOzmVp+K9thxaJKcqz3I+hJl QWRaMmN/ZfSZ5ViO7XmoXSz2hEcYnbYy69RwU7W02/e+JRsa1ox6eMAF1ao1mQci5RkSvIPw8lu7 vZhke3V+9TaokUh90n4pUmuILDBTSWDBhLTbRJSNssDx5i7thxEN+tRXvFm2IPusEXsZqSbbXQ6n sePdPTRj+LsnrbgUwIzOci2066FGF2gFqgXybq8QOLqgE3I6UtZb0fh+UV33vhPGtK9Eck9jlJeV 3AcWt6fPqq5lpJrUtRxOF3Z2RdTJEsgvbAILnhDr9vTL9fnlhXV9e2HdHJ9ZMJT2QDVDrZ4arIxB Qfd66/Xr7b1CD1U3ZWd3Y2MtD+Sk39eQSVXxO8PiOxRxNYw489kfNO67NNU//ves+liJXpNSVgTW aGZH3EiAv3t5OhCHRZYbpgZ7GXiPZ3M7dql7kmMUJ1j7ZYDj6RTcK2H3dJX5yR2LoEZzb+wYfDQp nlSJscxFykPzRPWvr9XupsyGoPlbQoefjjUD14D59MGhEQJe2Xy2n7vfKmJ83iS/IsUf0XtTKbC1 g5qHv7vKJ6VLkzUQLyRT/niDe9T12Vpx7CT0WWCLorr0ngUeeJ14283f/kPyJ+a2CO6vkggUStL3 eHdDWuFrYYU7RSssqK5kipADLyN+BZu2wYAFJ1dnl6LCZrGv8nfVsuTxU2FJXhjezaMPgNpYA7EN BlJigwECWg5ArpmiH6KOIir2+I0Is1PdpIpWY8ur41aJMtvkA3bREszksIJHArmXZfHieedqDNgZ 8nxdivDy2IGUvyFmlPx6dSHNxfyCZNDctiETbW6S7jaUwZvbucldRoHbkUfyh8RlMYh1CLWhuH91 HTvGFmylIWegUgn2qwm354kETa9LIayYfvMYwa6vd8SSy/HvgEfs/yUR8T+OS1L4DYvdwvs2qeAp BkCW1w4ApjAgpey9kdESC3IfwfOYcytEdey6McBZIQyN7MCeYogQRfR1Yt/4EYIYFgeUahS4kKBX PBbsKJrtMhl5UPpTqPSQyhTto3dkRxGeHYvT0Y827u8f1337jt7Y889uTt2ordoUwjIlsm97QM8X c88bzijWkatydKaWJPipisckxRV2n3GFGnY16It29K5wO+Obl1GyXFkWn9DEEeZ7ZWNvRxpxe/AD RGo2t0RWH2I7cGbG0I+s03+aBEEHg8zAzLpPmDX7NQsh4AOepIkVfbbH1IPFqNuXIp7svMWjpO03 r1WB2xKnOS1yUkzFg4FgGvGB7AVK4/xL6gCvSEynEO7ghUmGH88uIKl1SAB/8ZC4Jxfd76tPck3x 2pKYIJo0AjWzA4K72Wy24E5ulrb3tsytQrBTz+qRSz3fF8FKKEaZmahOLn7PugLnoE0BnM8zdG0B 42U1M7961RQS26R+1Aq5ztAmYUBDXhYRoT8peWgQ4VODOR4nPLYFBF7ZKA3Fsf2oeV/kt10mo+kU DMXtPJElhyFAPvAOcThe1MlsCeNqYVoBf2UkRVATMz5SPFA/ZuAdEjG8tcMfhJqGsoeLhdiJzW1D Xlmug2mxq5vGTF00rk6ogxTNRzrpSJ2PREx3wfhWblONVysIxixYpI5fNLwi0cYmTtGWk5Itl8Ab +grg48KnCd41lV6tnfc5nA4Gjs0h13JLluEof5eO51OCfSFRVwkEhIcEeyoFFwEpYN8CTBGnDgZi uMheeYroS0HA9RqYntJAlXFZ7DQKgQ3DlSmu6JglKtWcJf5HDpPsBdTyl5MJyLFJYEsFcRIGNI2T uBV6FoGQRRLRNHfk+X+1oUPK0RFUL3rH+e1UAknCe0zAEGDT6ECU/0qJS3t5chG3jcI5J7Zc4bsy RjYxygU0BB6WXMWUPrCEgzhE/G9nt+mLj2Dlk+KkfMOkQ7JrAKsHnQX4sqqv4oSaDfq933djD8+8 b0f5+enP25430ltlc74AWPs7kTdvzdfYcoHP4gZF/VLkamgN00Nr62PQaesPk3tHi8+71U8TVKtE xlPgsR64dbfBVEzVaRryEDM1Wb5yTT37kYk8Ly3/0kR3abl5nYuaOwo/1KqGUEGBsbRilRmrMGiU fpaA1GWbtBTtU33g++znBMVOa0pOK6G2w9rVGif7AcwTXp6uHpes7gU/62Cygdr3e0BDZ3ZPVKz4 UehSqfuVeY82a/XGjd3a/TKs2EGDSpMc9Dy4Bs8odmkrMBVnKxNWsGpGpW2rcBQ94Vk9SbQPKh3e Udbz9OWXpvj5F5nM99jKCkaytS2MBD726kaykqLlrzh+XNkpnr9I5elvTyBICOXLy6OlW3EQov4H UEsDBBQAAgAIAC+p/DTcOt5JxQAAABIBAAAHAAAAcnVuX2NtZH2PMWsDMQyFd4P/g5fbmhAItGA4 SMjU4SC0EDIYguvKiVKfdFjKtf33vXB06NLpCfSk770NpAs7ztkaAXWHrk0+KHORcIm1Z/pePa0e wxtSuMYxLuELrKnQO4JPx4Mik/j74P07jFgnHSpnLHASKJDuhr9r+cDhhKRQc0wgM3e/fdl2r+3i eEV1qSCQPvx31U5fF8cpxs6Hm0CV0OdbFR5/UwcFUQnQr5eJKePZms1clayxpjl0jWtmauOeSXPa xVKgWvMDUEsBAhQAFAACAAgAOKn8NCErbQkjAQAA/AIAAAoAAAAAAAAAAAAgAAAAAAAAAGVtMy5j b25maWdQSwECFAAUAAIACAC7qPw0h9Pfji8CAABqBgAAEAAAAAAAAAAAACAAAABLAQAASW50ZmND YWxsZXIuamF2YVBLAQIUABQAAgAIAOmo/DRVz19xOQ4AAEE5AAAKAAAAAAAAAAAAIAAAAKgDAABw YXRjaC5kaWZmUEsBAhQAFAACAAgAL6n8NNw63knFAAAAEgEAAAcAAAAAAAAAAAAgAAAACRIAAHJ1 bl9jbWRQSwUGAAAAAAQABADjAAAA8xIAAAAA ------=_Part_9798_9893141.1154098543089 Content-Type: text/plain; charset=us-ascii --------------------------------------------------------------------- Terms of use : http://incubator.apache.org/harmony/mailing.html To unsubscribe, e-mail: harmony-dev-unsubscribe@incubator.apache.org For additional commands, e-mail: harmony-dev-help@incubator.apache.org ------=_Part_9798_9893141.1154098543089--