Sunday, October 31, 2004

The Visuals for the final

Time to write up on everything I've been working on outside of the blog in one monster entry-

Well, it took me forever to figure out as to what to do as far as visuals go for our project, but I think I may finally have something that's quality-not just taking the sound and turning into random visual aids, but actually building on it. Before I get to it, though, I feel I should dwell on some of the other more ambitious, but far less visionary, ideas I've come up with.

Dylan's original idea was to have cartoon faces who's expressions and such change based off of the music. While an interesting idea, if I were to pull it off perfectly, it still would only be all right. Think about a face moving to the music-it's not all that original-it's what's reffered to in design as a level 1 idea-one of those things that would be immediately thought up. There's not only that, but also the fact getting it to look right would quite possibly more labor intensive then the animation I've had the whole semester to work on in Heath's class. Not only that, but I'm nowhere near the skill level to pull off those faces on a level that I would find adiquate....so forget that.

Building on that idea I thought of such things as having video where an actual face moved or where possibly a whole body moved. Kind of corny, tought to pull off, and really not soemthing that would turn out well no matter how well done. I built upon that and asked myself what does that have to do with the instrument wand we're using. The answer came through the ideas of having an interplay of fingers. It would be the sort of thing where one screen would have a finger dancing around it, another screen with a hand of a person upon a finger, another where the hands did Labrynth towards of combinations of faces of such. This, however, had similar pitfalls to just the faces or just the bodies....so forget that.

I was back where I started looking around for good ideas to do-there's all of the sites I found based off of Doug's link sent to everyone-many of the sites were gateways to others, and there were afew things among those that I didn't find completely bunk. A lot of them just kind of seemed like using Max's equivilant to filters. It gives me the impression that the compitition for Max video isn't very high, except when used in conjuctiion with other software or hardware. Max really works best as a middle man, but it works quite well at that. With that said, I will be using Max almost entirely-I'll probably mess with the images in photoshop a bit first, but I'm getting ahead of myself.

The best site i found in that heap of links would have to beEric Singer's site. It didn't do anything as far as video-but as far as spurring ideas for what could be done with audio, it's a wonderful jumping off point. He mainly focuses on one sound with any given instrument, while we intend on mixing a few-but his concept of using chords and moving up adown scales and such in different keys dpending on location, allowing for multiples of these going on at the same time and so forth worked really well, and had a nice sound that went along with it. I'll discuss this with Chris, although I really see us all working on sound sampling.

But I digress-the idea that I settled on for the video was an andywarholish displaying of the screen, think his multiple Marilyn Monroe piece, but with a different image then that, and the various images, while they will have the stark contrast throughout, will change based on the music. The actual concept is rather simple, however, if pulled off well I really see it working-I'll have to study color theory, and what colors people inately see as loud, which as soft-which as stark, which as bland, etc. I have a good idea of it, but I'd like to know what Munsell thought. I also will need to study a good deal of Warhol's work to get a feel for what I need to do to build on it as appose to butcher it. The images themselves could be anything from the member's in the group or Doug's head, to something a bit more relevant-I could go with something similar to his 16 Jackies where each of the heads is in a different position, or more likely, I'll go with the same basic image with a slightly different 'print' that changes in each spot.

Other ways to expand on this idea (although I definitely don't want to make it too busy, for I feel that would defeat the purpose to a great extent) could include having different images with simimlar colors or vise versa-figuring out exaclty how to tweak the images so they match the music on the given computer-possibly changing how many boxes it's seperated into, or switching how big a singal image is compared to the others...there's a lot of directions I could go with this. I'm looking forward to using this as a starting point, and being ready for our group's self imposed self review. Netsend and net recieve were working fairly flawlessly when I saw Glenn testing it, and I ahve complete trust in Dylan's ability to handle the wand, music we'll see how it develops, but now there's something for visuals, and that's a major plus.

Friday, October 22, 2004

Magpie Pro

So I was trying to figure out this program that I've been referring to in my blogs where the different levels (frequency, pitch-all that) are read in, and from that what phenome is being spoke is outputed-similar to what Luke Dubois did. However, my intention was to output it into a txt file that Lightwave could then input into it's Morph Mixer system, pretty much doing the lip synching process for me.
I ran into a bunch of ridiculous challenges-things like how to continually add onto what was previous recorded, what it takes to output to txt, what format Lightwave needs to see it in...how to manage spaces and line breaks....I don't even know-how to make it acurate enough to be any help at all.
Anyhow, to make a long story short, I got virtually nowhere in Max-just did far too much reading on what different commands can do that would help me and tried to chase down other max attempts at lip syncing unsuccesfully. What I did chase down, however, is a program by the name of Magpie Pro that pretty much does everything I had hoped to do in my shortcut-that's-inevitably-a-longer-process-than-keying-it-by-hand state, and it does it far better than I'm sure I would have ever been able to do it myself.
So so much for that side project. Back to working on the main project, where I'm going back and forth between a good number of ideas, that I'm only beginning to start work on. Probably it will be me and Chris working on the Video output for the most part, me shooting the video, and coming up with the stills, and possibly thinking up conceptually how to put them together, and him doing a good deal fo the execution of that-I haven't told him this yet entirely, but I've hinted at it. Frankly, it is without a doubt the best use of what he knows best. Programming, that is.
Well, that's about it-I'll proabably post again Sunday with all of the ideas I'm thinking of for video output before I forget them, and I'll narrow them down with my group.

Sunday, October 10, 2004

Final Project Proposal

Well, I'm back from New York, and felt I should submit a more formal finalized porject proposal idea. Actually, I have two so bare with me.
One of them involves reading in the phenomes when a person is talking (or from an audio clip) and transfering that to a text file, which is manipulated into a format LScript can read, that's pasted into Lightwave, and consequently used for liup-syncing purposes without the bother of menial tweaking. I looked around, and Alias has something out that does this. However, it costs a couple thousand dollars and isn't for Lightwave-I see this as entirely possible. The hardest part wouldn't necessarily be the MAX/Jitter part for me. Rather the C++ that changes it from one form to another would be the most difficult. Also, someone (probably myself) would have to learn LScript extensively in order for this work.

With all that said, I think it is most definitely possible, if rather ambitious.

The other idea currently floating around that I thought up with Glenn and Dylan should be posted on Dylan's blog. I'm repeating myself here, but it's worth repeating.
I'll see you all tommorow in class-it's 11, I have a midterm tommorow, and it is time to stop stalling.

Wednesday, October 06, 2004

One more thing before I leave

I'll be heading off to NYC for the holiday in about two or three hours, but before then, one more post.
last night Glenn, Dylan, and I got together for an inordinate amount of time to brainstorm an idea that would be worthwhile. We came up with a visual/audio virtual orchestra with the computers as musicians, and us as conductors. It was an idea we all liked, and something that would at the same time be absurdly difficult, but doable. Check out Dylan's blog for the full details, it should all be posted by this point. Glenn will get to mess with networking programming, Dylan with hardware rigging, and me with video manipulation-we all got what we wanted in the end in one awesome amalgamation.

Also, I did one small update to my midterm project-I'm going to post the code, but the picture is basically the same so I see no reason to bother with that-pretty much, it now shakes when the monster stamps, as apposed to all the time.

The code:

max v2;
#N vpatcher 9 67 1024 770;
#P origin 37 0;
#P window setfont "Fixedwidth Serif" 10.;
#P message 7 80 50 1441802 gettime;
#P window setfont "Sans Serif" 9.;
#P flonum 655 633 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P newex 516 632 122 196617 scale 2555 6000 42 100;
#P number 405 629 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P newex 386 604 55 196617 route time;
#P number 159 633 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P button 175 592 15 0;
#P newex 213 622 85 196617 scale 1 100 0. 1.;
#P newex 128 592 45 196617 metro 2;
#P toggle 90 585 15 0;
#P newex 194 593 70 196617 drunk 100 10;
#P flonum 273 587 45 9 0. 1. 3 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P message 351 553 49 196617 xfade \$1;
#P newex 352 577 48 196617 jit.xfade;
#P newex 643 586 35 196617 + 240;
#P newex 435 578 35 196617 + 320;
#P button 791 592 15 0;
#P newex 795 556 45 196617 metro 2;
#P toggle 799 531 15 0;
#P newex 708 666 70 196617 drunk 440 20;
#P newex 759 634 70 196617 drunk 600 20;
#P number 581 570 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P number 546 570 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P number 511 570 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P number 476 570 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P newex 473 592 141 196617 pak rect 0 0 640 480;
#P newex 333 670 220 196617 jit.window @rect 715 475 845 605 @border 0;
#B color 5;
#P toggle 368 307 15 0;
#P button 337 463 15 0;
#P newex 343 432 48 196617 metro 0.1;
#P newex 339 485 55 196617 random 25;
#P button 378 388 15 0;
#P newex 376 357 48 196617 metro 0.1;
#P newex 372 410 55 196617 random 25;
#P newex 421 453 339 196617 switch 25;
#P newex 432 498 326 196617 gate 25;
#P user jit.pwindow 8 329 322 242 0 1 0 0 1 0;
#P newex 427 549 348 196617 jit.glue @rows 5 @columns 5;
#P newex 593 174 80 196617 scale 1 100 2 5;
#P number 636 233 35 9 1 16 3 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P number 582 235 35 9 1 16 3 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P message 636 254 59 196617 columns \$1;
#P message 582 254 45 196617 rows \$1;
#P newex 433 413 339 196617 jit.scissors @rows 5 @columns 5;
#B color 5;
#P user pictslider 431 142 100 100 4 4 4 4 SliderDefaultKnob.pct 1 SliderDefaultBkgnd.pct 1 2163 0 6553601 65636 1. 1.;
#P newex 223 30 95 196617 scale 1. 100. -4. 4.;
#P user pictslider 460 30 100 100 4 4 4 4 SliderDefaultKnob.pct 1 SliderDefaultBkgnd.pct 1 2163 0 6553600 100 1. 1.;
#P newex 128 30 92 196617 scale 1. 100. 1. 5.;
#P newex 325 30 95 196617 scale 1. 100. -1. 1.;
#P flonum 273 60 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P flonum 128 60 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P flonum 205 60 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P message 273 79 69 196617 saturation \$1;
#P message 128 79 70 196617 brightness \$1;
#P message 205 79 61 196617 contrast \$1;
#P newex 0 142 53 196617 jit.brcosa;
#P message 73 58 29 196617 read;
#P toggle 4 25 15 0;
#P newex 1 55 51 196617 metro 20;
#P newex 1 100 104 196617 jit.qt.movie 320 240;
#P connect 6 0 4 0;
#P connect 5 0 4 0;
#P connect 7 0 4 0;
#P connect 0 0 4 0;
#P connect 2 0 1 0;
#P connect 3 0 0 0;
#P connect 59 0 0 0;
#P connect 1 0 0 0;
#P connect 1 0 59 0;
#P connect 46 0 23 0;
#P connect 13 1 12 0;
#P connect 12 0 9 0;
#P connect 9 0 6 0;
#P connect 50 0 51 0;
#P connect 49 0 54 0;
#P connect 51 0 53 0;
#P connect 53 0 49 0;
#P connect 14 0 8 0;
#P connect 8 0 5 0;
#P connect 54 0 52 0;
#P connect 15 0 14 0;
#P connect 11 0 10 0;
#P connect 10 0 7 0;
#P connect 52 0 48 0;
#P connect 13 0 11 0;
#P connect 34 0 33 0;
#P connect 46 0 33 0;
#P connect 30 0 31 0;
#P connect 31 0 29 0;
#P connect 32 0 30 0;
#P connect 48 0 47 0;
#P connect 22 0 46 0;
#P connect 47 0 46 0;
#P connect 28 0 26 0;
#P connect 32 0 27 0;
#P connect 27 0 28 0;
#P connect 0 1 55 0;
#P connect 4 0 46 1;
#P connect 55 0 56 0;
#P connect 26 0 25 0;
#P connect 16 0 22 0;
#P connect 29 0 24 0;
#P fasten 18 0 16 0 641 275 438 275;
#P fasten 17 0 16 0 587 269 438 269;
#P connect 4 0 16 0;
#P connect 16 1 25 1;
#P connect 35 0 44 0;
#P connect 24 1 22 1;
#P connect 16 1 25 2;
#P connect 24 2 22 2;
#P connect 16 2 25 3;
#P connect 24 3 22 3;
#P connect 16 3 25 4;
#P connect 39 0 35 0;
#P connect 24 4 22 4;
#P connect 16 4 25 5;
#P connect 24 5 22 5;
#P connect 16 5 25 6;
#P fasten 35 0 34 1 481 588 510 588;
#P connect 24 6 22 6;
#P connect 40 0 36 0;
#P connect 16 6 25 7;
#P connect 56 0 57 0;
#P connect 16 7 25 8;
#P connect 24 7 22 7;
#P fasten 36 0 34 2 516 588 542 588;
#P connect 16 8 25 9;
#P connect 24 8 22 8;
#P connect 44 0 37 0;
#P connect 16 9 25 10;
#P connect 24 9 22 9;
#P connect 16 10 25 11;
#P connect 24 10 22 10;
#P fasten 37 0 34 3 551 588 574 588;
#P connect 16 11 25 12;
#P connect 24 11 22 11;
#P connect 45 0 38 0;
#P connect 21 0 19 0;
#P connect 19 0 17 0;
#P connect 16 12 25 13;
#P connect 15 1 21 0;
#P connect 24 12 22 12;
#P fasten 38 0 34 4 586 588 606 588;
#P connect 16 13 25 14;
#P connect 24 13 22 13;
#P connect 16 14 25 15;
#P connect 24 14 22 14;
#P connect 16 15 25 16;
#P connect 21 0 20 0;
#P connect 20 0 18 0;
#P connect 24 15 22 15;
#P connect 16 16 25 17;
#P connect 36 0 45 0;
#P connect 24 16 22 16;
#P connect 16 17 25 18;
#P connect 57 0 58 0;
#P connect 24 17 22 17;
#P connect 16 18 25 19;
#P connect 24 18 22 18;
#P connect 16 19 25 20;
#P connect 24 19 22 19;
#P connect 16 20 25 21;
#P connect 16 21 25 22;
#P connect 24 20 22 20;
#P connect 43 0 40 0;
#P connect 16 22 25 23;
#P connect 24 21 22 21;
#P connect 16 23 25 24;
#P connect 24 22 22 22;
#P connect 16 24 25 25;
#P connect 25 0 24 1;
#P connect 24 23 22 23;
#P connect 43 0 39 0;
#P connect 24 24 22 24;
#P connect 58 0 40 2;
#P connect 42 0 43 0;
#P connect 41 0 42 0;
#P connect 58 0 39 2;
#P pop;

Tuesday, October 05, 2004

Milk, Cookies, and group project ideas

Afew things I forgot to mention in my last post-first, ran into a site- http://www.milkandcookies.com -had some good downloadable movies-I don't think that's where I got the baby from, but all the same-I liked, ok?

And now to the meat of this entry-
Afew ideas for the group project. While I spew these out, it should be kept in mind that I really have very little intention of figuring out how to execute some of them, but I thought they were worth giving a thought all the same.
The first idea has to do with sound input, so is immediately out of the picture. The idea I have is allowing someone to talk into the microphone, and as they talk it creates a file that says which phonetic tone the person is saying, and for which span of time. The idea would be to output it in such a format that something like Lscript could then take up, and shape a 3d mouth accordingly, saving a good deal of time as far as lip syncing is concerned.

The second idea, equally ambitious, and therefore equally as unlikely to do involves taking in a number of pictures, and then creating a photomosaic out of them based on one big picture that's entered. I feel the patch itself wouldn't be overly difficult, taking in a picture and getting the dominant hue, saturation, and chroma-or whatever it takes, and then inputting that into the right place of a grid that was made, that has previously assigned what color is needed where. The difficulty that I see being the worst/hardest/most annoying part is actually inputting the 100 odd files, or even finding them. Certainly "read" just wouldn't suffice. I would only even think of doing this if there was a a way to read in a folder full of files...also, I think there may already be a program out there that does this, so why bother making one in max....still it's an intersting idea, and certainly poses some worthy problems.

I was talking with Glenn and Dylan, about ideas we could do, and we wanted some phyical device to be used. I suggested the Nintendo running pad in some string of jokes, and then we thought about using the DDR pad, a much more feasible idea. We could use it either to control the way a video is viewed, to play some rudimentary (it would have to be rudimentary) game, or really for any sort of input-clearly best if having something to do with the feet and their movement and such. It would work nicely working with those two, cause Glenn could focus on the programming, Dylan on the physical connection, and I could focus on the some of the patch, and making it look pretty and run smoothly. That sort of thing.

I plan on meeting with those two later this week to come up with more ideas, but seeing as to how I'll be in NYC until Sunday afternoon, I thought it would be worth posting my current ideas right now.

That should be it.

The big Project I did

I put more time into this one then the other three (or was it four?) combined, so I hope you all like it. Pretty much what it does, is it takes a video (I chose a rip of Bambi meets Godzilla, Dancing Baby meets Godzilla) and randomly, in a five by five grid outputs shots from the movie. It does this in an external window that bumbles around the screen. The patch looks like this:

However, the real output bumbles around the screen (as I mentioned above) like this:

I feel I might as well show a couple of the mid process patches, just to show the iterations. The second to finished one is fairly similar-it's the first one, that's really the mess-it did play the video in all the little grid squares, however it did little else.
The second iteration:

Iteration, the first:

I ended up getting something I liked, but it still wasn't a feed of the video into all the little squares, rather it was a screen shot because the switch and route functions only take an instant of it all. I'm done for now (certainly don't want to look at it for another week) but if anyone can think of a way so I can acoomplish true randomness of where the squares are glued back, and still maintain the video, without 25 squared connecting lines (cause I have thought of a way that would work, involving that) then I'm all ears-I'll keep turning it over in my head, in the mean while.
Anyhow, here's the code-enjoy:

max v2;
#N vpatcher 44 77 1059 780;
#P origin 27 0;
#P window setfont "Sans Serif" 9.;
#P number 169 633 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P button 185 592 15 0;
#P newex 223 622 85 196617 scale 1 100 0. 1.;
#P newex 138 592 45 196617 metro 2;
#P toggle 100 585 15 0;
#P newex 204 593 70 196617 drunk 100 10;
#P flonum 283 587 45 9 0. 1. 3 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P message 361 553 49 196617 xfade \$1;
#P newex 362 577 48 196617 jit.xfade;
#P newex 653 586 35 196617 + 240;
#P newex 445 578 35 196617 + 320;
#P number 587 626 35 9 480 480 3 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P number 703 567 35 9 640 640 3 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P button 801 592 15 0;
#P newex 805 556 45 196617 metro 2;
#P toggle 809 531 15 0;
#P newex 718 666 70 196617 drunk 440 20;
#P newex 713 645 64 196617 drunk 480 5;
#P newex 710 621 70 196617 drunk 600 20;
#P newex 702 594 64 196617 drunk 640 5;
#P number 591 570 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P number 556 570 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P number 521 570 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P number 486 570 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P newex 483 592 141 196617 pak rect 0 0 640 480;
#P newex 347 615 220 196617 jit.window @rect 715 475 845 605 @border 0;
#B color 5;
#P toggle 378 307 15 0;
#P button 347 463 15 0;
#P newex 353 432 48 196617 metro 0.1;
#P newex 349 485 55 196617 random 25;
#P button 388 388 15 0;
#P newex 386 357 48 196617 metro 0.1;
#P newex 382 410 55 196617 random 25;
#P newex 431 453 339 196617 switch 25;
#P newex 442 498 326 196617 gate 25;
#P user jit.pwindow 18 329 322 242 0 1 0 0 1 0;
#P newex 437 549 348 196617 jit.glue @rows 5 @columns 5;
#P newex 603 174 80 196617 scale 1 100 2 5;
#P number 646 233 35 9 1 16 3 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P number 592 235 35 9 1 16 3 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P message 646 254 59 196617 columns \$1;
#P message 592 254 45 196617 rows \$1;
#P newex 443 413 339 196617 jit.scissors @rows 5 @columns 5;
#B color 5;
#P user pictslider 450 150 100 100 4 4 4 4 SliderDefaultKnob.pct 1 SliderDefaultBkgnd.pct 1 2163 0 6553601 65636 1. 1.;
#P newex 233 30 95 196617 scale 1. 100. -4. 4.;
#P user pictslider 470 30 100 100 4 4 4 4 SliderDefaultKnob.pct 1 SliderDefaultBkgnd.pct 1 2163 0 6553600 100 1. 1.;
#P newex 138 30 92 196617 scale 1. 100. 1. 5.;
#P newex 335 30 95 196617 scale 1. 100. -1. 1.;
#P flonum 283 60 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P flonum 138 60 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P flonum 215 60 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P message 283 79 69 196617 saturation \$1;
#P message 138 79 70 196617 brightness \$1;
#P message 215 79 61 196617 contrast \$1;
#P newex 10 142 53 196617 jit.brcosa;
#P message 83 58 29 196617 read;
#P toggle 14 25 15 0;
#P newex 11 55 51 196617 metro 20;
#P newex 11 100 104 196617 jit.qt.movie 320 240;
#P comment 733 316 100 196617 was there a way to randomize their output? This seems a bit ungainly;
#P connect 7 0 5 0;
#P connect 6 0 5 0;
#P connect 8 0 5 0;
#P connect 1 0 5 0;
#P connect 3 0 2 0;
#P connect 4 0 1 0;
#P connect 2 0 1 0;
#P connect 51 0 24 0;
#P connect 14 1 13 0;
#P connect 13 0 10 0;
#P connect 10 0 7 0;
#P connect 55 0 56 0;
#P connect 54 0 59 0;
#P connect 56 0 58 0;
#P connect 58 0 54 0;
#P connect 15 0 9 0;
#P connect 9 0 6 0;
#P connect 59 0 57 0;
#P connect 16 0 15 0;
#P connect 12 0 11 0;
#P connect 11 0 8 0;
#P connect 57 0 53 0;
#P connect 14 0 12 0;
#P connect 31 0 32 0;
#P connect 35 0 34 0;
#P connect 51 0 34 0;
#P connect 32 0 30 0;
#P connect 33 0 31 0;
#P connect 53 0 52 0;
#P connect 23 0 51 0;
#P connect 52 0 51 0;
#P connect 29 0 27 0;
#P connect 33 0 28 0;
#P connect 28 0 29 0;
#P connect 5 0 51 1;
#P connect 27 0 26 0;
#P connect 17 0 23 0;
#P connect 30 0 25 0;
#P fasten 19 0 17 0 651 275 448 275;
#P fasten 18 0 17 0 597 269 448 269;
#P connect 5 0 17 0;
#P connect 17 1 26 1;
#P connect 36 0 49 0;
#P connect 25 1 23 1;
#P connect 17 1 26 2;
#P connect 25 2 23 2;
#P connect 17 2 26 3;
#P connect 25 3 23 3;
#P connect 17 3 26 4;
#P connect 41 0 36 0;
#P connect 25 4 23 4;
#P connect 17 4 26 5;
#P connect 25 5 23 5;
#P connect 17 5 26 6;
#P fasten 36 0 35 1 491 588 520 588;
#P connect 25 6 23 6;
#P connect 43 0 37 0;
#P connect 17 6 26 7;
#P connect 17 7 26 8;
#P connect 25 7 23 7;
#P fasten 37 0 35 2 526 588 552 588;
#P connect 17 8 26 9;
#P connect 25 8 23 8;
#P connect 49 0 38 0;
#P connect 17 9 26 10;
#P connect 25 9 23 9;
#P connect 17 10 26 11;
#P connect 25 10 23 10;
#P fasten 38 0 35 3 561 588 584 588;
#P connect 17 11 26 12;
#P connect 25 11 23 11;
#P connect 50 0 39 0;
#P connect 22 0 20 0;
#P connect 20 0 18 0;
#P connect 17 12 26 13;
#P connect 16 1 22 0;
#P connect 25 12 23 12;
#P fasten 39 0 35 4 596 588 616 588;
#P connect 17 13 26 14;
#P connect 25 13 23 13;
#P connect 17 14 26 15;
#P connect 25 14 23 14;
#P connect 17 15 26 16;
#P connect 22 0 21 0;
#P connect 21 0 19 0;
#P connect 25 15 23 15;
#P connect 17 16 26 17;
#P connect 37 0 50 0;
#P connect 25 16 23 16;
#P connect 17 17 26 18;
#P connect 25 17 23 17;
#P connect 17 18 26 19;
#P connect 25 18 23 18;
#P connect 17 19 26 20;
#P connect 46 0 40 0;
#P connect 47 0 40 0;
#P connect 25 19 23 19;
#P connect 17 20 26 21;
#P connect 46 0 41 0;
#P connect 46 0 42 0;
#P connect 48 0 42 0;
#P connect 17 21 26 22;
#P connect 25 20 23 20;
#P connect 46 0 43 0;
#P connect 17 22 26 23;
#P connect 25 21 23 21;
#P connect 17 23 26 24;
#P connect 25 22 23 22;
#P connect 17 24 26 25;
#P connect 26 0 25 1;
#P connect 25 23 23 23;
#P connect 25 24 23 24;
#P connect 45 0 46 0;
#P connect 44 0 45 0;
#P pop;