What's new
What's new

Connecting with Ancient HAAS Machine

EisenJensen

Plastic
Joined
Feb 4, 2024
Location
Atlanta
Hello everyone,

I've been tasked with setting up monitoring for some very old HAAS machines, particularly ST35Y models. Despite several days of trying various methods, I haven't had any success so far.

From what I've gathered, these machines utilize SMB 1.0 and operate on the HAAS M-Net protocol. My objective is to establish a connection to the machines' live data for monitoring purposes.

When attempting to access the machines via a web browser using their IP addresses (http://<machine_ip>), I'm greeted with a web page displaying HAAS branding and an empty box in the center.

However, accessing the URL http://<machine_ip>/m-net leads to a different web page labeled as 'Haas m-net cluster controller,' accompanied by an error message stating 'invalid function, please specify a function.'

Interestingly, I've come across third-party software that supports M-Net and successfully connects to and reads data from these machines. In the software's log, it's evident that it accesses the same 'cluster controller' web page using HTTP 1.0, and this time, instead of encountering an error, the page displays live data.

When using Telnet, I land in a Windows Pocket CE 6.0 telnet command prompt, where I can see directories such as Windows and program files, but it hasn't proven particularly helpful.

Given the scarcity of documentation on M-Net online, I'm reaching out for guidance. My intuition suggests that I may need to access the second URL mentioned above but include additional parameters to indicate that I'm requesting live data.

Any assistance would be greatly appreciated! Thank you.

Here's the extract from the log of the software which managed to connect with the machine:

Code:
Stat:02000001
Status: Idle
Stat:02000001
Status: Idle
H-MNet: HTTP/1.0 200 OK
Content-type: text/html
Pragma: no-cache
Cache-Control: no-cache
Cache-Control: no-store

<HTML>
<HEAD><TITLE>HAAS Embedded Web/M-Net Server</TITLE></HEAD>
<BODY background="haaslogo.bmp">
<br><center>HAAS M-NET Cluster Controller</center><br>
<br><br>
Data item 000000008 (length = 3) = "100"<br>
Data item 160000000 (length = 12) = "S/N, 123456"<br>
Data item 000000008 (length = 3) = "101"<br>
Data item 160000000 (length = 21) = "SOFTWARE, VER L11.23B"<br>
Data item 000000008 (length = 3) = "102"<br>
Data item 160000000 (length = 12) = "MODEL, ST35Y"<br>
Data item 000000008 (length = 3) = "402"<br>
Data item 160000000 (length = 13) = "M30 #1, 59613"<br>
Data item 000000008 (length = 3) = "500"<br>
Data item 160000000 (length = 35) = "PROGRAM,123456,RUNNING,PARTS,32165"<br>
Data item 000000008 (length = 4) = "3023"<br>
Data item 160000001 (length = 27) = "MACRO, 3023,     363.359985"<br>
Data item 000000008 (length = 4) = "3031"<br>
Data item 160000001 (length = 27) = "MACRO, 3031,       0.000000"<br>
Data item 000000008 (length = 4) = "3022"<br>
Data item 160000001 (length = 27) = "MACRO, 3022, 9923563.000000"<br>
Data item 000000008 (length = 4) = "3132"<br>
Data item 160000001 (length = 27) = "MACRO, 3132,       0.000000"<br>
Data item 000000008 (length = 4) = "3188"<br>
Data item 160000001 (length = 27) = "MACRO, 3188,       0.000000"<br>
Data item 000000008 (length = 4) = "5021"<br>
Data item 160000001 (length = 27) = "MACRO, 5021,     -12.295939"<br>
Data item 000000008 (length = 4) = "5022"<br>
Data item 160000001 (length = 27) = "MACRO, 5022,     -14.238299"<br>
Data item 000000008 (length = 4) = "5023"<br>
Data item 160000001 (length = 27) = "MACRO, 5023,       0.001500"<br>
<br><br>
</BODY>
</HTML>

HAAS M-NET On-line: S/N, 123456 SOFTWARE, VER L11.23B MODEL, ST35Y
H-MNet: FEED HOLD: ON
H-MNet: POS HOLD: OFF
H-MNet: Dry Run OFF
H-MNet: Set program 123456
H-MNet: Program changed: 123457
H-MNet: Alarm OFF
H-MNet: Hold OFF
H-MNet: Cycle ON
 
Last edited:
I've been tasked with setting up monitoring for some very old HAAS machines, particularly ST35Y models.
Ancient machines? "very old" machines? Internet of things? 🤣 Sorry, you are the poster boy for why I've laughed at any mention of IoT and nobody listened.

In CNC machine terms, an ST35Y isn't old. You're going to run into far, far older out there, being used every day. The fact that it even has a network port and all the other stuff you're talking about suggests it's a Next Gen control which puts it squarely into the "new" machine category.

You'd better become a master of tracking the "power on" events on the band saws and the MTBF for saw blades if you think this is an ancient machine. You've got what you've got and you aren't updating it without considerable pain. That's going to be the reality of anyone hanging their hat on IoT. Yeah, you can swap IoT monitoring modules on the shop vac and the forklift but, making embedded stuff play nice is going to be the real challenge to the rest of your career.

 
Ancient machines? "very old" machines? Internet of things? 🤣 Sorry, you are the poster boy for why I've laughed at any mention of IoT and nobody listened.

In CNC machine terms, an ST35Y isn't old. You're going to run into far, far older out there, being used every day. The fact that it even has a network port and all the other stuff you're talking about suggests it's a Next Gen control which puts it squarely into the "new" machine category.

You'd better become a master of tracking the "power on" events on the band saws and the MTBF for saw blades if you think this is an ancient machine. You've got what you've got and you aren't updating it without considerable pain. That's going to be the reality of anyone hanging their hat on IoT. Yeah, you can swap IoT monitoring modules on the shop vac and the forklift but, making embedded stuff play nice is going to be the real challenge to the rest of your career.


Yeah, I am talking from the IoT perspective purely. In those terms the protocol, the controller is very old. Unfortunately, this is at our client's shop and they aren't ready for an upgrade. Their reasoning being: if this software x is able to read the data, then you should also be able to.

And for some reason the m-net related documentation is non-existent on the internet. We tried to get help from HAAS but it was also of no help.

I feel that we are making progress, but this last bit has been stuck since several days...
 
Yeah, I am talking from the IoT perspective purely. In those terms the protocol, the controller is very old. Unfortunately, this is at our client's shop and they aren't ready for an upgrade. Their reasoning being: if this software x is able to read the data, then you should also be able to.
This is going to be the reality for 95% of the customers out there. The ones who aren't already in this boat will have this exact problem within five years because they won't be "new" anymore. That's the fallacy of IoT. Run for your life. IoT is a total scam, intended to enslave dumb companies into paying for never-ending software and hardware upgrades so they can "track" things that they didn't really need to know in the first place.

Your fattest customers, with the deepest pockets are going to have machines with RS-232 ports that can't even tell you if they're doing something without a program written in g-code and executed from the machine. They still sneaker-net their programs to the control on a USB stick.

You already went through everything on the Haas page I linked and that didn't get you started in the direction you want?
 
This is going to be the reality for 95% of the customers out there. The ones who aren't already in this boat will have this exact problem within five years because they won't be "new" anymore. That's the fallacy of IoT. Run for your life. IoT is a total scam, intended to enslave dumb companies into paying for never-ending software and hardware upgrades so they can "track" things that they didn't really need to know in the first place.

Your fattest customers, with the deepest pockets are going to have machines with RS-232 ports that can't even tell you if they're doing something without a program written in g-code and executed from the machine. They still sneaker-net their programs to the control on a USB stick.

You already went through everything on the Haas page I linked and that didn't get you started in the direction you want?
Oh yes, I've gone through the page that you had linked. Multiple times actually and tried all the steps there. It's for the NGC protocol though which this controller does not support. It supports the m-net protocol only. So I guess I am out of luck as of now.
 
Okay, so it's a pre-NGC machine but, that pins the year at about 2011 or 2012 I believe. Your log data says it's on Lathe version 11 software. Yes, that's pre-NGC but, by a very narrow window.

I don't know what you mean by wanting to monitor "live data." If you mean you want to watch things as they're happening, from a remote location through a web browser or data collecting computer, no, I don't believe a pre-NGC machine will do that. I'm not even sure if / when that came in with NGC as there have been ongoing upgrades and changes.

The log file you posted looks like it pinged a bunch of data registers in the Haas control and returned the current values. As far as what I know about the pre-NGC controls, that's all they do. You query what's stored in that register and it replies back with an answer.

Have you contacted the local Haas Factory Outlet and asked for documentation for that version of the networking software?

You're still going to be stuck pinging the control and only getting an answer when it's asked. It may also be that if the commands to send the data out to the logging computer aren't embedded in every running program, it won't give you 'live' monitoring. It can send things like part count, or the status of some of the control and overrides. I don't think it will suddenly alert some external computer that it's sitting in feed-hold, or someone has the machine slowed down if that's what you're wanting to track.

If you get any ideas about having some loop that it's always going to do to output that data, I'd caution against it. The control doesn't have the horsepower (or operating system) to run things simultaneously. The monitoring will likely cause pauses in the machine operation while it stops to answer the queries.
 
Okay, so it's a pre-NGC machine but, that pins the year at about 2011 or 2012 I believe. Your log data says it's on Lathe version 11 software. Yes, that's pre-NGC but, by a very narrow window.

I don't know what you mean by wanting to monitor "live data." If you mean you want to watch things as they're happening, from a remote location through a web browser or data collecting computer, no, I don't believe a pre-NGC machine will do that. I'm not even sure if / when that came in with NGC as there have been ongoing upgrades and changes.

The log file you posted looks like it pinged a bunch of data registers in the Haas control and returned the current values. As far as what I know about the pre-NGC controls, that's all they do. You query what's stored in that register and it replies back with an answer.

Have you contacted the local Haas Factory Outlet and asked for documentation for that version of the networking software?

You're still going to be stuck pinging the control and only getting an answer when it's asked. It may also be that if the commands to send the data out to the logging computer aren't embedded in every running program, it won't give you 'live' monitoring. It can send things like part count, or the status of some of the control and overrides. I don't think it will suddenly alert some external computer that it's sitting in feed-hold, or someone has the machine slowed down if that's what you're wanting to track.

If you get any ideas about having some loop that it's always going to do to output that data, I'd caution against it. The control doesn't have the horsepower (or operating system) to run things simultaneously. The monitoring will likely cause pauses in the machine operation while it stops to answer the queries.
Thank you for your detailed response.

Yes, if the machine isn't able to publish the 'current' tags, then idea is to fall back to the request-response strategy. I am aware of the issues related to the controller being overwhelmed and I'd try avoiding that by querying the bare minimum tags and at sufficiently higher intervals.

We had contacted the HAAS support and they wanted to know if we are owning these machines. They would assist only the shop owners. Hence we have involved our customer, who is the shop owner. That thread is progressing super slow.

That's why I posted on PracticalMachinist, if anyone's aware of how to get the response from this controller. I'll update this thread if I find any way.
 
Another thing that might help you get closer or at least understand what you're communicating with: you mentioned using Telnet and connecting to a Windows Pocket CE environment. Just so you understand: the Haas is not running on Windows and apparently that generation machine is still using the piggyback internal PC thing to do the networking (and possibly a hard drive for internal storage).

What Haas did to add that functionality to pre-NGC controls was adding a whole PC on a board. I suspect even that later machine is using the PC104 form factor. It's a single-board, industrial PC, running some older version of Windows CE. I posted this elsewhere about the matter:


What that PC board does is connect through the data bus in the Haas and pings the various things you're wanting to read. So when you're talking to that board via ethernet, you're still not really talking to the Haas. You're talking to an embedded terminal that is piggybacked onto the Haas bus and doing the queries from Windows.

I have no idea how deep or how custom you are trying to get for this customer but, it's perfectly reasonable to think that an exceptionally resourceful computer person could hook a monitor and keyboard to the internal PC board, reverse engineer what they were pinging and doing internal to the control, and then modernize it with newer Windows software. Tread carefully because there is zero support for this and probably only a handful of people at Haas even know what that board does under the hood.

As for documentation, the HFO needs to send a PDF manual to your customer. You don't need more than that from them. Heck, they probably don't have a clue and never had to do what you're doing anyway. For some reason, the manual archives on the Haas website have been cleaned out. I'm not finding manuals that I know were there six months ago. The documentation exists.
 
Thinking even further about this today: since the internal PC is what you're communicating with, in a Windows CE environment, that's really the key to what you're wanting to do. If you dig around in the various directories, maybe Haas left some other bits in there that they thought nobody would ever find, or maybe they even meant for you to find them: read me files, name of the commercial software it's running on, etc. It might be as simple as some industrial monitoring software they bought and incorporated to their hardware.

Since that processor operates independent of the one running the machine, it can read whatever information it wants out of memory with little effect on the machine, and then serve it out to the network at its own leisure.

If you can write your own software to do the same on that hardware, you could make it do whatever you want. Make it run on a reformat of that PC with Linux and you'll be able to offer that software upgrade as a product.

I still think IoT is a scam.
 
Another thing that might help you get closer or at least understand what you're communicating with: you mentioned using Telnet and connecting to a Windows Pocket CE environment. Just so you understand: the Haas is not running on Windows and apparently that generation machine is still using the piggyback internal PC thing to do the networking (and possibly a hard drive for internal storage).

What Haas did to add that functionality to pre-NGC controls was adding a whole PC on a board. I suspect even that later machine is using the PC104 form factor. It's a single-board, industrial PC, running some older version of Windows CE. I posted this elsewhere about the matter:


What that PC board does is connect through the data bus in the Haas and pings the various things you're wanting to read. So when you're talking to that board via ethernet, you're still not really talking to the Haas. You're talking to an embedded terminal that is piggybacked onto the Haas bus and doing the queries from Windows.

I have no idea how deep or how custom you are trying to get for this customer but, it's perfectly reasonable to think that an exceptionally resourceful computer person could hook a monitor and keyboard to the internal PC board, reverse engineer what they were pinging and doing internal to the control, and then modernize it with newer Windows software. Tread carefully because there is zero support for this and probably only a handful of people at Haas even know what that board does under the hood.

As for documentation, the HFO needs to send a PDF manual to your customer. You don't need more than that from them. Heck, they probably don't have a clue and never had to do what you're doing anyway. For some reason, the manual archives on the Haas website have been cleaned out. I'm not finding manuals that I know were there six months ago. The documentation exists.

Exactly... HAAS documentation has disappeared from their website. That's very strange. Finding documentation shouldn't be this hard.
My another plan is to install wireshark, capture network packets (when the 3rd party software is capturing data) and find out what's happening behind the scenes. Awaiting approval from their IT team to allow us use of wireshark, fingers crossed. I tend to think that this way might solve our problem.
 
Thinking even further about this today: since the internal PC is what you're communicating with, in a Windows CE environment, that's really the key to what you're wanting to do. If you dig around in the various directories, maybe Haas left some other bits in there that they thought nobody would ever find, or maybe they even meant for you to find them: read me files, name of the commercial software it's running on, etc. It might be as simple as some industrial monitoring software they bought and incorporated to their hardware.

Since that processor operates independent of the one running the machine, it can read whatever information it wants out of memory with little effect on the machine, and then serve it out to the network at its own leisure.

If you can write your own software to do the same on that hardware, you could make it do whatever you want. Make it run on a reformat of that PC with Linux and you'll be able to offer that software upgrade as a product.

I still think IoT is a scam.
Yes, they indeed have some files there. There are folders such as desktop, windows, program files, etc. Inside the Windows folder there are few exe files (cnc_app.exe, mnet_app.exe) which could be the key but how to use these apps remains a question. Let's see. I'll update this thread if I find any success.

And yes, I totally respect your opinion and understand your point of view. We get this reaction a lot from the veteran guys who have been working hard on the machines since ages. Request usually comes up from the leadership, who are always sceptical of what's happening on the shop floor and wants to know and micro-manage everything.

BTW thanks and lot for your detailed replies and taking our your time to suggest the ways.
 
And yes, I totally respect your opinion and understand your point of view. We get this reaction a lot from the veteran guys who have been working hard on the machines since ages. Request usually comes up from the leadership, who are always sceptical of what's happening on the shop floor and wants to know and micro-manage everything.
I am early-retired, out of the defense / aerospace industry. I saw people trying to make these inroads with IoT. They literally were advocating for monitoring bathroom sinks and toilets so they could track and manage water usage around the various facilities. They literally wanted to monitor bandsaws in repair or prototyping shops because they thought there would be some value to knowing how often the saw got used.

I bore you with this so you understand my extreme aversion to the idea. Same employer had rows of production machines they should have been worried about but, that wasn't new and cool. The production machines were leased and so they didn't have the freedom to be as stupid with it. In the end, nothing IoT ever got implemented beyond a few demonstrator installations.

Yes, they indeed have some files there. There are folders such as desktop, windows, program files, etc. Inside the Windows folder there are few exe files (cnc_app.exe, mnet_app.exe) which could be the key but how to use these apps remains a question. Let's see. I'll update this thread if I find any success.
I don't know your role in all of this. If you're management / ownership, make your money and be prepared for the industry to figure it out. :D

If you're an employee, this is a huge opportunity to learn. If you can sell them on the idea of how this might get done, you could get months of pay to tinker and explore all this hardware and software. You could develop a whole suite of methods for reverse engineering these "obsolete" machines and experience is something you get to take with you.

The more I think about this, if you learned the Haas control enough to understand navigating around the screens and entries, you could find numerical values you want to read and use as markers. Write something on the PC104 side to read every single memory address from the Haas control to a log file.

Once you had a partial map of the Haas memory, you could read and send anything. That piggybacked computer is your own, low-level mole inside the control.

Worst case: you'd get a good understanding of the whole industrial computer thing and how those PC104 boards got implemented. Best case: you have extensive knowledge of the Haas control and you can offer those skills and services to others.
 
Last edited:
I've been tasked with setting up some very old HAAS machines, particularly ST35Y models...

That ri'tt there is the first red flag ...

From what I've gathered, these machines utilize SMB 1.0

Yupp, and here is the Haas wording: https://www.haascnc.com/service/updates/future-discontinued-support-of-smb1-network-protocol.html

Despite several days of trying various methods, I haven't had any success so far.

Voila! https://www.partitionwizard.com/partitionmagic/enable-smb1-win10.html
( the "You Fucking Moron" comment removed after review... )
 
Reply
That ri'tt there is the first red flag ...



Yupp, and here is the Haas wording: https://www.haascnc.com/service/updates/future-discontinued-support-of-smb1-network-protocol.html



Voila! https://www.partitionwizard.com/partitionmagic/enable-smb1-win10.html
( the "You Fucking Moron" comment removed after review... )
I now feel embarrassed : )
I was talking from the controller's software perspective. I totally messed that up!!

Thanks for the link, over the weekend I also came across this and I've enabled SMB1.0 on that Win10 machine, it needs PC restart. Even for this I need to seek an approval. Let's see... raised a request for the same.
 
I am early-retired, out of the defense / aerospace industry. I saw people trying to make these inroads with IoT. They literally were advocating for monitoring bathroom sinks and toilets so they could track and manage water usage around the various facilities. They literally wanted to monitor bandsaws in repair or prototyping shops because they thought there would be some value to knowing how often the saw got used.

I bore you with this so you understand my extreme aversion to the idea. Same employer had rows of production machines they should have been worried about but, that wasn't new and cool. The production machines were leased and so they didn't have the freedom to be as stupid with it. In the end, nothing IoT ever got implemented beyond a few demonstrator installations.


I don't know your role in all of this. If you're management / ownership, make your money and be prepared for the industry to figure it out. :D

If you're an employee, this is a huge opportunity to learn. If you can sell them on the idea of how this might get done, you could get months of pay to tinker and explore all this hardware and software. You could develop a whole suite of methods for reverse engineering these "obsolete" machines and experience is something you get to take with you.

The more I think about this, if you learned the Haas control enough to understand navigating around the screens and entries, you could find numerical values you want to read and use as markers. Write something on the PC104 side to read every single memory address from the Haas control to a log file.

Once you had a partial map of the Haas memory, you could read and send anything. That piggybacked computer is your own, low-level mole inside the control.

Worst case: you'd get a good understanding of the whole industrial computer thing and how those PC104 boards got implemented. Best case: you have extensive knowledge of the Haas control and you can offer those skills and services to others.

Yes I agree, IoT can certainly be of help but how people are envisioning the same is frustrating. Mostly it has become a CCTV for the upper management. We talk with all the roles including the operators, supervisors, plant managers and even the corporate people. Everyone presents a different version of that they actually want. Due to the corporate power hierarchy ultimately the corporate and managers' requirements hog up the most part of the implementation and the people on floor feel distanced. Cannot do much about this.

My role is very small in all this, I am just a developer who shouldn't even be looking into this, but got pulled into as the responsible team didn't manage to get these machines connected. Although after jumping into, reading a ton and trying a lot I just cannot give up.

Once again thank you for your suggestions in this post and the encouragement. I will try to figure out how to read the values over telnet and the other ways.
 
Unfortunately I can't give any advise on setting up monitoring but I am curious, what live data are they expecting to get and do with it? I can't imagine the lathe is going to provide much valuable information beyond what can already be seen from physical output, scrapped parts, broken tools etc.

If managers want to see what employees are up to wouldn't just plain old CCTV do the job? A lathe control isn't going to be able to tell if an operator is looking at their phone or inspecting/deburring the last part that came off. If I'm entirely honest and probably old fashioned I would really rather my machine controls are completely disconnected from the internet or anything connected to the internet so the whole IOT idea just does not appeal to me at all, but I'm curious to see what people are actually using it for.
 
…If I'm entirely honest and probably old fashioned I would really rather my machine controls are completely disconnected from the internet or anything connected to the internet so the whole IOT idea just does not appeal to me at all, but I'm curious to see what people are actually using it for.
Having teamveiwer for robot command when something is not right or you have an operation question is nice. Having the machine restock drop plates into server inventory with cert tracking is nice.
Iot I can see zero, maybe negative value added.
 
If managers want to see what employees are up to wouldn't just plain old CCTV do the job? A lathe control isn't going to be able to tell if an operator is looking at their phone or inspecting/deburring the last part that came off.
IoT from what I've seen

The Good​

You have a business that does long runs of the same parts, or at least large enough batch sizes where long-term monitoring gives something meaningful. The system follows cycle start time (running) vs idle time (waiting for parts, or the operator, or?). You're able to start seeing trends like: the machine is only cutting for 45 minutes in a given hour. Since they only reload three times in that window, that means they're spending five minutes per cycle to reload. At our shop rate of $150/hour, 16 hours per day, that's costing us $3,000 a month in downtime. If we invested in some better work holding, we could cut that reload time in half and improve quality. The $5,000 work holding upgrade would pay for itself in 3.5 months. We're geniuses!

The Bad​

Through monitoring these machines, we noticed that Marvin, the second shift guy on Lathe #3 has been producing 20% less output than the other work cells. The first shift guy doesn't seem to have any problems. What is Marvin up to? They crawl up Marvin's butt to find out why he's taking so long. Marvin has to defend his job. Maybe the company incorrectly identifies Marvin as a lazy employee and just silently gets rid of him when his real problem was that the tool crib is closed on second shift and if he runs things at 100% and breaks an insert, he won't get new inserts until the next morning. Nobody asked the questions and nobody identified that the tool crib shutting down two hours into second shift is the root problem.

The Ugly​

Management put IoT modules on the manual Bridgeport, the vertical bandsaw and the drill press. You don't use these tools often but, when you need them, you need them. Management correctly identifies that over a 6 month period, you only used the bandsaw three times for less than five minutes, the Bridgeport for two hours and the drill press less than 5 minutes at a time, for a total of 15 times. A manager does some back of the napkin calculations. The square foot cost of the building is $24/foot per year. Those machines are eating up 100 square feet. That's $2,400 per year just to house them. The company is trying to consolidate out of some adjacent rental units. They decide that you can take your bandsaw and drill press work to a nearby machine shop and pay to have those 15 holes drilled instead of having one sitting there for the few times you're going to use it. Yes, they 100% think like this. I challenged them to tell me why they have a washer and dryer when a laundromat can do the same job for less, while not housing them all the hours they aren't washing clothes. I got blank stares to that question.

The Stupid (IoT Electric Boogaloo)​

Even a medium sized company can spend $250K per year (minimum) on labor and hardware to connect, program, monitor and report on all of this information. This is the piece they never seem to capture or price accordingly. You could waste a damned lot of shop costs in managing something that didn't need to be managed. Or managers could have walked out to the floor and seen the work holding problems and simply said, "we need to spend some money here and improve this. No, I don't have Excel data to back up my logic. Any moron can see this is an issue." Big corporations don't work on skill. They work on brute force of tailored data. IoT gives them that data.
 
I don't know Haas software, but I was told the next gen controls run on Linux?
There was something when we were doing some diagnostics on a new machine that had reference to the 3 penguins, So.
I'm not a machine junky like some so, grain of salt.
 








 
Back
Top