<div style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:12pt"><p style="margin: 0.1rem 0; line-height: 1.0;">I think degenerate triangles, ones that flip from ccw to cw, or overlap or</p>
<p style="margin: 0.1rem 0; line-height: 1.0;">whatever messes up a triangle when any of all of its points get moved </p>
<p style="margin: 0.1rem 0; line-height: 1.0;">is purely result of author error(s) in setting the parameter(s). </p>
<p style="margin: 0.1rem 0; line-height: 1.0;"> </p>
<p style="margin: 0.1rem 0; line-height: 1.0;">Whatever happens with normals of triangles moved or destroyed by Displacer</p>
<p style="margin: 0.1rem 0; line-height: 1.0;">must match what happens with points moved by joint-driven skin animations </p>
<p style="margin: 0.1rem 0; line-height: 1.0;">which can also mess up, and by points moved by CoordinateInterpolator,</p>
<p style="margin: 0.1rem 0; line-height: 1.0;">same as any morphing operation. </p>
<p style="margin: 0.1rem 0; line-height: 1.0;">Normals can also be set by the author each frame if desired. </p>
<p style="margin: 0.1rem 0; line-height: 1.0;">       </p>
<p style="margin: 0.1rem 0; line-height: 1.0;">Maybe some help given in authortime but not any sort of</p>
<p style="margin: 0.1rem 0; line-height: 1.0;">enumerated error except undefined in runtime since this visual effect;</p>
<p style="margin: 0.1rem 0; line-height: 1.0;">it is just an artifact of bad data. </p>
<p style="margin: 0.1rem 0; line-height: 1.0;">Esp likey when deformable face is actually composed of multiple shapes</p>
<p style="margin: 0.1rem 0; line-height: 1.0;">and they must blend regardless of the combinations of shapes</p>
<p style="margin: 0.1rem 0; line-height: 1.0;">that move to make the motion for a pose.  </p>
<p style="margin: 0.1rem 0; line-height: 1.0;">Always? much easier with single basic mesh for the face and and then</p>
<p style="margin: 0.1rem 0; line-height: 1.0;">add features and accessories animated individually?  </p>
<p style="margin: 0.1rem 0; line-height: 1.0;">          </p>
<p style="margin: 0.1rem 0; line-height: 1.0;">One of the limitations with Displacer is that it is just a single scaled 3D vector,</p>
<p style="margin: 0.1rem 0; line-height: 1.0;">meaning it has a fixed relative direction regardless of the weight applied. </p>
<p style="margin: 0.1rem 0; line-height: 1.0;">When a curved displacement is required, then point motion can be</p>
<p style="margin: 0.1rem 0; line-height: 1.0;">controlled using joint rotation, like the eyeball.</p>
<p style="margin: 0.1rem 0; line-height: 1.0;">In some cases,<span style="font-size: 12pt;">a </span>CoordinateInterpolator<span style="font-size: 12pt;"> may be </span><span style="font-size: 12pt;">used to </span><span style="font-size: 12pt;">move points</span><span style="font-size: 12pt;"> around. </span></p>
<p style="margin: 0.1rem 0; line-height: 1.0;"><span style="font-size: 12pt;">Texture position and rotation can be animated. </span></p>
<p style="margin: 0.1rem 0; line-height: 1.0;">   </p>
<p style="margin: 0.1rem 0; line-height: 1.0;">Since all these Displacer nodes have been produced by finding the</p>
<p style="margin: 0.1rem 0; line-height: 1.0;">simple 3D vector difference between the first and last data point </p>
<p style="margin: 0.1rem 0; line-height: 1.0;">of a source CoordinateInterpolator it is likely that some displacements</p>
<p style="margin: 0.1rem 0; line-height: 1.0;">do not produce exact same movement of a point just because the</p>
<p style="margin: 0.1rem 0; line-height: 1.0;">original interpolator keyValue keyframe data points described a curved path. </p>
<p style="margin: 0.1rem 0; line-height: 1.0;">    </p>
<p style="margin: 0.1rem 0; line-height: 1.0;">Sure, we can update the 3D vector direction each frame if we want to,</p>
<p style="margin: 0.1rem 0; line-height: 1.0;">but I would like to see a Displacer which could use multiple sets of vectors  </p>
<p style="margin: 0.1rem 0; line-height: 1.0;">interpolated to produce computed keyframes like other interpolators.</p>
<p style="margin: 0.1rem 0; line-height: 1.0;">For each point there could be a set of vectors where the output value for</p>
<p style="margin: 0.1rem 0; line-height: 1.0;">point movement is the result of interpolation between</p>
<p style="margin: 0.1rem 0; line-height: 1.0;">adjacent key time (weight) keyValue 3D vectors.</p>
<p style="margin: 0.1rem 0; line-height: 1.0;">   </p>
<p style="margin: 0.1rem 0; line-height: 1.0;">So, more fun with x3d HAnim </p>
<p style="margin: 0.1rem 0; line-height: 1.0;">Thanks, </p>
<p style="margin: 0.1rem 0; line-height: 1.0;">Joe</p>
<p style="margin: 0.1rem 0; line-height: 1.0;"> </p>
<p style="margin: 0.1rem 0; line-height: 1.0;"> </p>
</div>
<div class="elnk-inline-message-container" style="border-left: 1px solid #aaa; box-sizing: border-box; padding: 10px 0 10px 15px; margin: 0;">
<p>-----Original Message-----<br>From: Extensible 3D (X3D) Graphics public discussion <x3d-public@web3d.org><br>Sent: Feb 12, 2025 9:11 AM<br>To: X3D Graphics public mailing list <x3d-public@web3d.org><br>Cc: Andreas Plesch <andreasplesch@gmail.com><br>Subject: Re: [x3d-public] Displacer and normals ?</p>
<p style="margin: 0.1rem 0; line-height: 1.0;"> </p>
<div dir="ltr">
<div class="gmail_quote gmail_quote_container">
<div> </div>
<div>Responses below:</div>
<div> </div>
<blockquote class="gmail_quote" style="margin: 0px 0px 0px 0.8ex; border-left: 1px solid #cccccc; padding-left: 1ex;">Date: Tue, 11 Feb 2025 15:58:40 -0600<br>From: John Carlson <<a href="mailto:yottzumm@gmail.com" target="_blank" rel="noopener">yottzumm@gmail.com</a>><br>To: "Extensible 3D (X3D) Graphics public discussion"<br>        <<a href="mailto:x3d-public@web3d.org" target="_blank" rel="noopener">x3d-public@web3d.org</a>><br>Subject: Re: [x3d-public] Displacer and normals ?<br><br>Did you get the black tongue effect?  I?ve seen that in Sunrize, and<br>reported it there.  Holger had a response about providing normals.</blockquote>
<div> </div>
<div>I found <a href="https://github.com/create3000/sunrize/issues/9">https://github.com/create3000/sunrize/issues/9</a></div>
<div> </div>
<div>Yes, I think this is similar. x-ite/sunrize just may not automatically recalculate normals for performance reasons which in some cases may be beneficial by avoiding the effects of degenerate triangles.</div>
<div> </div>
<blockquote class="gmail_quote" style="margin: 0px 0px 0px 0.8ex; border-left: 1px solid #cccccc; padding-left: 1ex;">The displacers were taken from CoordinateInterpolators in the<br>HumanoidAnimation/FacialAnimation X3D archive.<br><a href="https://www.web3d.org/x3d/content/examples/HumanoidAnimation/FacialAnimation/index.html" target="_blank" rel="noopener noreferrer">https://www.web3d.org/x3d/content/examples/HumanoidAnimation/FacialAnimation/index.html</a><br>Perhaps we could derive normals from those examples, realizing only one set<br>of meshes is chosen for the final version.<br><br>It?s relevant, because I will be providing a unified skin mesh for FACS,<br>and it would be nice to provide normals.</blockquote>
<div> </div>
<div>I noticed the effect actually only in combined displacers/morphers, eg. the Contempt combo. That brings up the future question of how pre-computed normals from multiple displacers may be combined, maybe just by averaging the slerped orientation from each.</div>
<div>There may have been studies on how to best recombine facial subexpressions for a valid result.</div>
<div> </div>
<div>-Andreas</div>
<div> </div>
<blockquote class="gmail_quote" style="margin: 0px 0px 0px 0.8ex; border-left: 1px solid #cccccc; padding-left: 1ex;"><br>On Tue, Feb 11, 2025 at 3:41?PM Andreas Plesch via x3d-public <<br><a href="mailto:x3d-public@web3d.org" target="_blank" rel="noopener">x3d-public@web3d.org</a>> wrote:<br><br>> I noticed that some displacers cause degenerate or flipped triangles which<br>> may cause rendering problems, mostly due to problems calculating<br>> automatically a good normal vector.<br>><br>> In general, for best rendering results, it is necessary to provide<br>> precomputed normals. rather than rely on automatic normal calculations. Was<br>> there a discussion on how to have displacers provide precomputed normals<br>> along with the displacement of the vertices ? That  would help with<br>> rendering quality, and may be necessary for some use cases.<br>><br>> This may be deemed a long term feature to consider.<br>><br>> Perhaps an idea would be a MFRotation normalRotations field which has the<br>> rotation required to rotate the normal (per vertex, or perhaps per face)<br>> from the rest orientation to the final orientation. Weights are applied<br>> with slerp. For animation authors it would be probably easier to be able to<br>> just directly provide the final orientation.<br>><br>> Any feedback or comment much welcome, -Andreas<br>><br>><br>> --<br>> Andreas Plesch<br>> Waltham, MA 02453<br>> _______________________________________________<br>> x3d-public mailing list<br>> <a href="mailto:x3d-public@web3d.org" target="_blank" rel="noopener">x3d-public@web3d.org</a><br>> <a href="http://web3d.org/mailman/listinfo/x3d-public_web3d.org" target="_blank" rel="noopener noreferrer">http://web3d.org/mailman/listinfo/x3d-public_web3d.org</a><br>><br>-------------- next part --------------<br>An HTML attachment was scrubbed...<br>URL: <<a href="http://web3d.org/pipermail/x3d-public_web3d.org/attachments/20250211/a4be3c1a/attachment-0001.html" target="_blank" rel="noopener noreferrer">http://web3d.org/pipermail/x3d-public_web3d.org/attachments/20250211/a4be3c1a/attachment-0001.html</a>><br><br>------------------------------<br><br>Message: 3<br>Date: Wed, 12 Feb 2025 11:27:59 -0500<br>From: Andreas Plesch <<a href="mailto:andreasplesch@gmail.com" target="_blank" rel="noopener">andreasplesch@gmail.com</a>><br>To: John Carlson <<a href="mailto:yottzumm@gmail.com" target="_blank" rel="noopener">yottzumm@gmail.com</a>><br>Cc: Holger Seelig <<a href="mailto:holger.seelig@yahoo.de" target="_blank" rel="noopener">holger.seelig@yahoo.de</a>>,  X3D Graphics public<br>        mailing list <<a href="mailto:x3d-public@web3d.org" target="_blank" rel="noopener">x3d-public@web3d.org</a>>, Joe D Williams<br>        <<a href="mailto:joedwil@earthlink.net" target="_blank" rel="noopener">joedwil@earthlink.net</a>><br>Subject: Re: [x3d-public] Turning on and off simultaneous animations<br>        individually<br>Message-ID:<br>        <<a href="mailto:CAKdk67vXRSz1pM4QLjcxuCQHfjY4LUT924cSmX7rPAasroPUCw@mail.gmail.com" target="_blank" rel="noopener">CAKdk67vXRSz1pM4QLjcxuCQHfjY4LUT924cSmX7rPAasroPUCw@mail.gmail.com</a>><br>Content-Type: text/plain; charset="utf-8"<br><br>Hi,<br><br>I took a first stab at Displacers in Segments for x3dom and use it now in<br>the editor:<br><br><a href="https://andreasplesch.github.io/Library/Viewer/index.html?url=https://raw.githubusercontent.com/coderextreme/ci2had/refs/heads/main/resources/ManyClocks.x3d" target="_blank" rel="noopener noreferrer">https://andreasplesch.github.io/Library/Viewer/index.html?url=https://raw.githubusercontent.com/coderextreme/ci2had/refs/heads/main/resources/ManyClocks.x3d</a><br><br>This is experimental and mostly for testing purposes. If there is an<br>example combining Displacers in both Joints and Segments that would be<br>interesting as it is not necessarily expected to work.<br>The experimental implementation is inefficient and expensive as it is<br>weight_changed event driven. If you activate multiple displacers the frame<br>rate starts to drop. It probably is not very useful at this point.<br><br>Fee free to give it a try, -Andreas<br><br>On Wed, Feb 5, 2025, 4:11?PM Andreas Plesch <<a href="mailto:andreasplesch@gmail.com" target="_blank" rel="noopener">andreasplesch@gmail.com</a>> wrote:<br><br>> Hi John,<br>><br>> Thanks. I found the tongue.x3d example but if you can create another one<br>> that would be helpful in general.<br>><br>> You vastly overestimate my ability and availability ;) This would be a<br>> longer term project. I have an idea what to do.<br>><br>> Andreas<br>><br>><br>> On Wed, Feb 5, 2025, 1:31?PM John Carlson <<a href="mailto:yottzumm@gmail.com" target="_blank" rel="noopener">yottzumm@gmail.com</a>> wrote:<br>><br>>> I had one I sent to Holger, probably derived from this one:<br>>><br>>><br>>> <a href="https://github.com/coderextreme/ci2had/blob/main/resources/JinMouthStretch.x3d" target="_blank" rel="noopener noreferrer">https://github.com/coderextreme/ci2had/blob/main/resources/JinMouthStretch.x3d</a><br>>><br>>><br>>> What I would do (again) is take out all the segments but the tongue.<br>>><br>>> There?s no menus involved in this one.<br>>><br>>> If you need further assistance, like a smaller example, I can help.  Also<br>>> all the Jin*.x3d FACS action units can also provide examples.<br>>><br>>> I?ll be pretty unbusy today.  I can allocate some time for creating a<br>>> model, make sure it animates, etc.<br>>><br>>> If you?re able to allocate some time today, great, we have an HAnim<br>>> meeting tomorrow and showing off X3DOM editor using Displacers would be<br>>> fantastic!<br>>><br>>> Remember there?s a coord field in HAnimSegment that the HAnimDisplacer<br>>> operates on!<br>>><br>>> John<br>>><br>>> On Wed, Feb 5, 2025 at 12:01?PM Andreas Plesch <<a href="mailto:andreasplesch@gmail.com" target="_blank" rel="noopener">andreasplesch@gmail.com</a>><br>>> wrote:<br>>><br>>>> Hi John,<br>>>><br>>>> The reason is that Displacers are currently implemented in x3dom only<br>>>> for Joints, but not for Segments, unfortunately. Do you know of a simple<br>>>> but instructive test case of Segments with Displacers ?<br>>>><br>>>> Andreas<br>>>><br>>>><br>>>> On Tue, Feb 4, 2025, 2:33?PM John Carlson <<a href="mailto:yottzumm@gmail.com" target="_blank" rel="noopener">yottzumm@gmail.com</a>> wrote:<br>>>><br>>>>> I will try to test this in castle model converter.<br>>>>><br>>>>> I did try setting a value for the outputOnly fields, but the converter<br>>>>> wouldn?t shut up.<br>>>>><br>>>>> The model below doesn?t seem to animate when one presses the menu<br>>>>> items.  Did you get it to animate?<br>>>>><br>>>>> On Tue, Feb 4, 2025 at 12:27?PM Andreas Plesch <<a href="mailto:andreasplesch@gmail.com" target="_blank" rel="noopener">andreasplesch@gmail.com</a>><br>>>>> wrote:<br>>>>><br>>>>>> Hi John, all,<br>>>>>><br>>>>>> It turns out that x3dom currently expects a default value for Proto<br>>>>>> fields even for outputOnly fields. This is due to how Proto fields are<br>>>>>> initialized. They always need to have a value. While the spec. does not<br>>>>>> require this, it seems still good practice to always define a default value<br>>>>>> in the ProtoInterface. There may be a case where an outputOnly field is<br>>>>>> used in ISing where a valid value would be expected. There may be other<br>>>>>> corner cases.<br>>>>>><br>>>>>> Here is your example with added default values for outputOnly fields:<br>>>>>><br>>>>>><br>>>>>> <a href="https://andreasplesch.github.io/Library/Viewer/index.html?url=https://gist.githubusercontent.com/andreasplesch/af5ff3148c1159f71d34fb78c1f63024/raw/b3d4470107ab74e301ed48448ab2a4f4154672e0/ManyClocks_John.x3d" target="_blank" rel="noopener noreferrer">https://andreasplesch.github.io/Library/Viewer/index.html?url=https://gist.githubusercontent.com/andreasplesch/af5ff3148c1159f71d34fb78c1f63024/raw/b3d4470107ab74e301ed48448ab2a4f4154672e0/ManyClocks_John.x3d</a><br>>>>>><br>>>>>> This could be fixed in x3dom, by always setting some default value. Is<br>>>>>> there a list of recommended defaults for each data type if no other source<br>>>>>> of defaults is available? For SFTime it seems to be -1.<br>>>>>><br>>>>>><br>>>>>> -Andreas<br>>>>>><br>>>>>><br>>>>>> On Mon, Feb 3, 2025 at 7:39?AM Andreas Plesch <<a href="mailto:andreasplesch@gmail.com" target="_blank" rel="noopener">andreasplesch@gmail.com</a>><br>>>>>> wrote:<br>>>>>><br>>>>>>> Hi John,<br>>>>>>><br>>>>>>> On Mon, Feb 3, 2025 at 12:48?AM John Carlson <<a href="mailto:yottzumm@gmail.com" target="_blank" rel="noopener">yottzumm@gmail.com</a>><br>>>>>>> wrote:<br>>>>>>><br>>>>>>>> Andreas, "startTime" is an accessType outputOnly field, so why do I<br>>>>>>>> need to provide a value attribute in fieldValue?  I'm kind of confused.<br>>>>>>>> I'm probably missing something in the spec.<br>>>>>>>><br>>>>>>><br>>>>>>> You are right, I only outlined scenarios where the accessType allows<br>>>>>>> input or initialization..<br>>>>>>> In the outputOnly case it is not necessary to provide a fieldValue<br>>>>>>> node at all since there is no value which can be provided. Providing the<br>>>>>>> node would indeed be confusing, to both the user code reader and any X3D<br>>>>>>> browser.<br>>>>>>> I believe the spec. is silent on this case in any encoding.<br>>>>>>><br>>>>>>> Best, Andreas<br>>>>>>><br>>>>>>> Thanks for any clarification.<br>>>>>>>><br>>>>>>>> I have finally enabled schematron on the project, but I'm finding it<br>>>>>>>> hard to understand the messages, and modifications that I make, while<br>>>>>>>> removing the immediate problems, seem to move the problems elsewhere.<br>>>>>>>><br>>>>>>>> Explaining why I need a "startTime" fieldValue value is my main lack<br>>>>>>>> of understanding, but perhaps I need a whole review of accessType.<br>>>>>>>><br>>>>>>>> Castle Model Converter reports:<br>>>>>>>><br>>>>>>>> castle-model-converter: Warning: X3D: X3D XML: <fieldValue> element<br>>>>>>>> references unknown field name "enabled"<br>>>>>>>> castle-model-converter: Warning: X3D: X3D XML: <fieldValue> element<br>>>>>>>> references unknown field name "startTime"<br>>>>>>>> castle-model-converter: Warning: X3D: X3D XML: <fieldValue> element<br>>>>>>>> references unknown field name "stopTime"<br>>>>>>>><br>>>>>>>> I will try providing a field value in the ProtoInterface<br>>>>>>>><br>>>>>>>> If I "cleanup" enabled, startTime and stopTime, I get:<br>>>>>>>><br>>>>>>>> castle-model-converter: Warning: VRML/X3D: Within prototype<br>>>>>>>> "MenuItem", event "inputTrue" references (by "IS" clause) non-existing<br>>>>>>>> event "enabled"<br>>>>>>>> castle-model-converter: Warning: VRML/X3D: Within prototype<br>>>>>>>> "MenuItem", event "triggerTime" references (by "IS" clause) non-existing<br>>>>>>>> event "startTime"<br>>>>>>>> castle-model-converter: Warning: VRML/X3D: Within prototype<br>>>>>>>> "MenuItem", event "triggerTime" references (by "IS" clause) non-existing<br>>>>>>>> event "stopTime"<br>>>>>>>><br>>>>>>>> I guess what I conclude at this point is, startTime and stopTime are<br>>>>>>>> bad DEF names, but what about enabled as a field?  The dominoes are falling.<br>>>>>>>><br>>>>>>>> About your two scenarios in the other message, perhaps this is<br>>>>>>>> revealing.<br>>>>>>>><br>>>>>>>> See attached attempt to fix original issue, which resulted in the<br>>>>>>>> above.<br>>>>>>>><br>>>>>>>> John<br>>>>>>>><br>>>>>>>> On Sun, Feb 2, 2025 at 3:59?PM Andreas Plesch <<br>>>>>>>> <a href="mailto:andreasplesch@gmail.com" target="_blank" rel="noopener">andreasplesch@gmail.com</a>> wrote:<br>>>>>>>><br>>>>>>>>> I think x3dom, reasonably, expects a value for the fieldValue nodes:<br>>>>>>>>><br>>>>>>>>> For example:<br>>>>>>>>><br>>>>>>>>> <fieldValue name="startTime" /><br>>>>>>>>><br>>>>>>>>> and others.<br>>>>>>>>><br>>>>>>>>> On Sun, Feb 2, 2025 at 5:42?AM John Carlson <<a href="mailto:yottzumm@gmail.com" target="_blank" rel="noopener">yottzumm@gmail.com</a>><br>>>>>>>>> wrote:<br>>>>>>>>><br>>>>>>>>>> Andreas, Joe,<br>>>>>>>>>><br>>>>>>>>>> Reset Button, Reset_Clock added.<br>>>>>>>>>><br>>>>>>>>>> See attached zip for details, or visit link;<br>>>>>>>>>><br>>>>>>>>>><br>>>>>>>>>> <a href="https://create3000.github.io/x_ite/playground/?url=https://raw.githubusercontent.com/coderextreme/ci2had/refs/heads/main/resources/CleanedYouClocks.x3d" target="_blank" rel="noopener noreferrer">https://create3000.github.io/x_ite/playground/?url=https://raw.githubusercontent.com/coderextreme/ci2had/refs/heads/main/resources/CleanedYouClocks.x3d</a><br>>>>>>>>>><br>>>>>>>>>> For some reason, this link doesn't show the live scene?<br>>>>>>>>>><br>>>>>>>>>><br>>>>>>>>>> <a href="https://andreasplesch.github.io/Library/Viewer/index.html?url=https://raw.githubusercontent.com/coderextreme/ci2had/refs/heads/main/resources/CleanedYouClocks.x3d" target="_blank" rel="noopener noreferrer">https://andreasplesch.github.io/Library/Viewer/index.html?url=https://raw.githubusercontent.com/coderextreme/ci2had/refs/heads/main/resources/CleanedYouClocks.x3d</a><br>>>>>>>>>><br>>>>>>>>>> Puzzled, haven't researched it yet.  Looks good in Sunrize and<br>>>>>>>>>> X_ITE, will try FreeWRL next.<br>>>>>>>>>><br>>>>>>>>>> John<br>>>>>>>>>><br>>>>>>>>>>><br>>>>>>>>><br>>>>>>>>> --<br>>>>>>>>> Andreas Plesch<br>>>>>>>>> Waltham, MA 02453<br>>>>>>>>><br>>>>>>>><br>>>>>>><br>>>>>>> --<br>>>>>>> Andreas Plesch<br>>>>>>> Waltham, MA 02453<br>>>>>>><br>>>>>><br>>>>>><br>>>>>> --<br>>>>>> Andreas Plesch<br>>>>>> Waltham, MA 02453<br>>>>>><br>>>>><br>-------------- next part --------------<br>An HTML attachment was scrubbed...<br>URL: <<a href="http://web3d.org/pipermail/x3d-public_web3d.org/attachments/20250212/6f37d6ce/attachment.html" target="_blank" rel="noopener noreferrer">http://web3d.org/pipermail/x3d-public_web3d.org/attachments/20250212/6f37d6ce/attachment.html</a>><br><br>------------------------------<br><br>Subject: Digest Footer<br><br>_______________________________________________<br>x3d-public mailing list<br><a href="mailto:x3d-public@web3d.org" target="_blank" rel="noopener">x3d-public@web3d.org</a><br><a href="http://web3d.org/mailman/listinfo/x3d-public_web3d.org" target="_blank" rel="noopener noreferrer">http://web3d.org/mailman/listinfo/x3d-public_web3d.org</a><br><br><br>------------------------------<br><br>End of x3d-public Digest, Vol 191, Issue 57<br>*******************************************</blockquote>
</div>
<div> </div>
<br><span class="gmail_signature_prefix">-- </span><br>
<div class="gmail_signature" dir="ltr">
<div dir="ltr">
<div>Andreas Plesch<br>Waltham, MA 02453</div>
</div>
</div>
</div>
</div>

<p style="margin: 0.1rem 0; line-height: 1.0;"> </p>